@nestia/sdk
Version:
Nestia SDK and Swagger generator
117 lines • 11.6 kB
JavaScript
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.SdkWebSocketNamespaceProgrammer = void 0;
const typescript_1 = __importDefault(require("typescript"));
const ExpressionFactory_1 = require("typia/lib/factories/ExpressionFactory");
const IdentifierFactory_1 = require("typia/lib/factories/IdentifierFactory");
const TypeFactory_1 = require("typia/lib/factories/TypeFactory");
const FilePrinter_1 = require("./FilePrinter");
const SdkAliasCollection_1 = require("./SdkAliasCollection");
var SdkWebSocketNamespaceProgrammer;
(function (SdkWebSocketNamespaceProgrammer) {
SdkWebSocketNamespaceProgrammer.write = (importer) => (route) => typescript_1.default.factory.createModuleDeclaration([typescript_1.default.factory.createToken(typescript_1.default.SyntaxKind.ExportKeyword)], typescript_1.default.factory.createIdentifier(route.name), typescript_1.default.factory.createModuleBlock([
...writeTypes(importer)(route),
FilePrinter_1.FilePrinter.enter(),
writePath(route),
]), typescript_1.default.NodeFlags.Namespace);
const writeTypes = (importer) => (route) => {
var _a, _b, _c, _d, _e, _f, _g;
const output = [];
const declare = (name, type) => output.push(typescript_1.default.factory.createTypeAliasDeclaration([typescript_1.default.factory.createModifier(typescript_1.default.SyntaxKind.ExportKeyword)], name, undefined, type));
declare("Output", typescript_1.default.factory.createTypeLiteralNode([
typescript_1.default.factory.createPropertySignature(undefined, "connector", undefined, typescript_1.default.factory.createTypeReferenceNode(importer.external({
type: false,
library: "tgrid",
instance: "WebSocketConnector",
}), [
typescript_1.default.factory.createTypeReferenceNode("Header"),
typescript_1.default.factory.createTypeReferenceNode("Provider"),
typescript_1.default.factory.createTypeReferenceNode("Listener"),
])),
typescript_1.default.factory.createPropertySignature(undefined, "driver", undefined, typescript_1.default.factory.createTypeReferenceNode(importer.external({
type: true,
library: "tgrid",
instance: "Driver",
}), [typescript_1.default.factory.createTypeReferenceNode("Listener")])),
]));
const acceptor = route.parameters.find((x) => x.category === "acceptor");
const query = route.parameters.find((x) => x.category === "query");
const driver = route.parameters.find((x) => x.category === "driver");
declare("Header", SdkAliasCollection_1.SdkAliasCollection.name({
type: ((_b = (_a = route.parameters.find((x) => x.category === "header")) === null || _a === void 0 ? void 0 : _a.type) !== null && _b !== void 0 ? _b : (_c = acceptor.type.typeArguments) === null || _c === void 0 ? void 0 : _c[0]),
}));
declare("Provider", SdkAliasCollection_1.SdkAliasCollection.name({
type: (_e = (_d = driver === null || driver === void 0 ? void 0 : driver.type.typeArguments) === null || _d === void 0 ? void 0 : _d[0]) !== null && _e !== void 0 ? _e : (_f = acceptor.type.typeArguments) === null || _f === void 0 ? void 0 : _f[2],
}));
declare("Listener", SdkAliasCollection_1.SdkAliasCollection.name({
type: (_g = acceptor.type.typeArguments) === null || _g === void 0 ? void 0 : _g[1],
}));
if (query)
declare("Query", SdkAliasCollection_1.SdkAliasCollection.name(query));
return output;
};
const writePath = (route) => {
const pathParams = route.parameters.filter((p) => p.category === "param");
const query = route.parameters.find((p) => p.category === "query");
const total = [...pathParams, ...(query ? [query] : [])];
const out = (body) => constant("path")(typescript_1.default.factory.createArrowFunction([], [], total.map((p) => IdentifierFactory_1.IdentifierFactory.parameter(p.name, p === query
? typescript_1.default.factory.createTypeReferenceNode(`${route.name}.Query`)
: SdkAliasCollection_1.SdkAliasCollection.name(p))), undefined, undefined, body));
if (total.length === 0)
return out(typescript_1.default.factory.createStringLiteral(route.path));
const template = () => {
const split = route.path.split(":");
if (split.length === 1)
return typescript_1.default.factory.createStringLiteral(route.path);
return typescript_1.default.factory.createTemplateExpression(typescript_1.default.factory.createTemplateHead(split[0]), split.slice(1).map((s, i, arr) => {
const name = s.split("/")[0];
return typescript_1.default.factory.createTemplateSpan(typescript_1.default.factory.createCallExpression(typescript_1.default.factory.createIdentifier("encodeURIComponent"), undefined, [
typescript_1.default.factory.createBinaryExpression(typescript_1.default.factory.createCallChain(typescript_1.default.factory.createPropertyAccessChain(typescript_1.default.factory.createIdentifier(pathParams.find((p) => p.field === name).name), typescript_1.default.factory.createToken(typescript_1.default.SyntaxKind.QuestionDotToken), "toString"), undefined, undefined, []), typescript_1.default.factory.createToken(typescript_1.default.SyntaxKind.QuestionQuestionToken), typescript_1.default.factory.createStringLiteral("null")),
]), (i !== arr.length - 1
? typescript_1.default.factory.createTemplateMiddle
: typescript_1.default.factory.createTemplateTail)(s.substring(name.length)));
}));
};
if (query === undefined)
return out(template());
const block = (expr) => {
const computeName = (str) => total.find((p) => p.name === str) !== undefined
? computeName("_" + str)
: str;
const variables = computeName("variables");
return typescript_1.default.factory.createBlock([
local(variables)("URLSearchParams")(typescript_1.default.factory.createNewExpression(typescript_1.default.factory.createIdentifier("URLSearchParams"), [], [])),
typescript_1.default.factory.createForOfStatement(undefined, typescript_1.default.factory.createVariableDeclarationList([
typescript_1.default.factory.createVariableDeclaration(typescript_1.default.factory.createArrayBindingPattern([
typescript_1.default.factory.createBindingElement(undefined, undefined, typescript_1.default.factory.createIdentifier("key"), undefined),
typescript_1.default.factory.createBindingElement(undefined, undefined, typescript_1.default.factory.createIdentifier("value"), undefined),
]), undefined, undefined, undefined),
], typescript_1.default.NodeFlags.Const), typescript_1.default.factory.createCallExpression(typescript_1.default.factory.createIdentifier("Object.entries"), undefined, [typescript_1.default.factory.createAsExpression(expr, TypeFactory_1.TypeFactory.keyword("any"))]), typescript_1.default.factory.createIfStatement(typescript_1.default.factory.createStrictEquality(typescript_1.default.factory.createIdentifier("undefined"), typescript_1.default.factory.createIdentifier("value")), typescript_1.default.factory.createContinueStatement(), typescript_1.default.factory.createIfStatement(typescript_1.default.factory.createCallExpression(typescript_1.default.factory.createIdentifier("Array.isArray"), undefined, [typescript_1.default.factory.createIdentifier("value")]), typescript_1.default.factory.createExpressionStatement(typescript_1.default.factory.createCallExpression(typescript_1.default.factory.createPropertyAccessExpression(typescript_1.default.factory.createIdentifier("value"), typescript_1.default.factory.createIdentifier("forEach")), undefined, [
typescript_1.default.factory.createArrowFunction(undefined, undefined, [IdentifierFactory_1.IdentifierFactory.parameter("elem")], undefined, undefined, typescript_1.default.factory.createCallExpression(IdentifierFactory_1.IdentifierFactory.access(typescript_1.default.factory.createIdentifier(variables), "append"), undefined, [
typescript_1.default.factory.createIdentifier("key"),
typescript_1.default.factory.createCallExpression(typescript_1.default.factory.createIdentifier("String"), undefined, [typescript_1.default.factory.createIdentifier("elem")]),
])),
])), typescript_1.default.factory.createExpressionStatement(typescript_1.default.factory.createCallExpression(IdentifierFactory_1.IdentifierFactory.access(typescript_1.default.factory.createIdentifier(variables), "set"), undefined, [
typescript_1.default.factory.createIdentifier("key"),
typescript_1.default.factory.createCallExpression(typescript_1.default.factory.createIdentifier("String"), undefined, [typescript_1.default.factory.createIdentifier("value")]),
]))))),
local("location")("string")(template()),
typescript_1.default.factory.createReturnStatement(typescript_1.default.factory.createConditionalExpression(typescript_1.default.factory.createStrictEquality(ExpressionFactory_1.ExpressionFactory.number(0), IdentifierFactory_1.IdentifierFactory.access(typescript_1.default.factory.createIdentifier(variables), "size")), undefined, typescript_1.default.factory.createIdentifier("location"), undefined, typescript_1.default.factory.createTemplateExpression(typescript_1.default.factory.createTemplateHead(""), [
typescript_1.default.factory.createTemplateSpan(typescript_1.default.factory.createIdentifier("location"), typescript_1.default.factory.createTemplateMiddle("?")),
typescript_1.default.factory.createTemplateSpan(typescript_1.default.factory.createCallExpression(IdentifierFactory_1.IdentifierFactory.access(typescript_1.default.factory.createIdentifier(variables), "toString"), undefined, undefined), typescript_1.default.factory.createTemplateTail("")),
]))),
], true);
};
return out(block(typescript_1.default.factory.createIdentifier(query.name)));
};
})(SdkWebSocketNamespaceProgrammer || (exports.SdkWebSocketNamespaceProgrammer = SdkWebSocketNamespaceProgrammer = {}));
const local = (name) => (type) => (expression) => typescript_1.default.factory.createVariableStatement([], typescript_1.default.factory.createVariableDeclarationList([
typescript_1.default.factory.createVariableDeclaration(name, undefined, typescript_1.default.factory.createTypeReferenceNode(type), expression),
], typescript_1.default.NodeFlags.Const));
const constant = (name) => (expression) => typescript_1.default.factory.createVariableStatement([typescript_1.default.factory.createModifier(typescript_1.default.SyntaxKind.ExportKeyword)], typescript_1.default.factory.createVariableDeclarationList([
typescript_1.default.factory.createVariableDeclaration(name, undefined, undefined, expression),
], typescript_1.default.NodeFlags.Const));
//# sourceMappingURL=SdkWebSocketNamespaceProgrammer.js.map
;