UNPKG

@nestia/sdk

Version:

Nestia SDK and Swagger generator

111 lines 9.55 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.SdkWebSocketRouteProgrammer = void 0; const factory_1 = require("@ttsc/factory"); const IdentifierFactory_1 = require("../../factories/IdentifierFactory"); const StringUtil_1 = require("../../utils/StringUtil"); const FilePrinter_1 = require("./FilePrinter"); const SdkImportWizard_1 = require("./SdkImportWizard"); const SdkWebSocketNamespaceProgrammer_1 = require("./SdkWebSocketNamespaceProgrammer"); const SdkWebSocketParameterProgrammer_1 = require("./SdkWebSocketParameterProgrammer"); var SdkWebSocketRouteProgrammer; (function (SdkWebSocketRouteProgrammer) { SdkWebSocketRouteProgrammer.write = (project) => (importer) => (route) => [ FilePrinter_1.FilePrinter.description(writeFunction(project)(importer)(route), writeDescription(route)), SdkWebSocketNamespaceProgrammer_1.SdkWebSocketNamespaceProgrammer.write(project)(importer)(route), ]; const writeDescription = (route) => { // MAIN DESCRIPTION const comments = route.description ? route.description.split("\n") : []; // COMMENT TAGS const tags = route.jsDocTags.filter((tag) => tag.name !== "param" || [...route.pathParameters, ...(route.query ? [route.query] : [])] .filter((p) => p.category === "param" || p.category === "query") .some((p) => { var _a, _b; return p.name === ((_b = (_a = tag.text) === null || _a === void 0 ? void 0 : _a[0]) === null || _b === void 0 ? void 0 : _b.text); })); if (tags.length !== 0) { const content = tags.map((t) => { var _a; return ((_a = t.text) === null || _a === void 0 ? void 0 : _a.length) ? `@${t.name} ${t.text.map((e) => e.text).join("")}` : `@${t.name}`; }); comments.push("", ...new Set(content)); } // POSTFIX if (!!comments.length) comments.push(""); comments.push(`@controller ${route.controller.class.name}.${route.name}`, `@path ${route.path}`, `@nestia Generated by Nestia - https://github.com/samchon/nestia`); return comments.join("\n"); }; const writeFunction = (project) => (importer) => (route) => { const connection = StringUtil_1.StringUtil.escapeDuplicate([route.name])("connection"); return factory_1.factory.createFunctionDeclaration([ factory_1.factory.createModifier(factory_1.SyntaxKind.ExportKeyword), factory_1.factory.createModifier(factory_1.SyntaxKind.AsyncKeyword), ], undefined, route.name, undefined, [ IdentifierFactory_1.IdentifierFactory.parameter(connection, factory_1.factory.createTypeReferenceNode(SdkImportWizard_1.SdkImportWizard.IConnection(importer), [factory_1.factory.createTypeReferenceNode(`${route.name}.Header`)])), ...SdkWebSocketParameterProgrammer_1.SdkWebSocketParameterProgrammer.getParameterDeclarations({ project, route, provider: true, prefix: true, }), ], factory_1.factory.createTypeReferenceNode("Promise", [ factory_1.factory.createTypeReferenceNode(`${route.name}.Output`), ]), factory_1.factory.createBlock(writeFunctionBody(project)(importer)(route)(connection), true)); }; const writeFunctionBody = (project) => (importer) => (route) => (connection) => { const access = (key) => project.config.keyword === true ? factory_1.factory.createPropertyAccessExpression(factory_1.factory.createIdentifier("props"), key) : factory_1.factory.createIdentifier(key); return [ local("url")(factory_1.factory.createTypeReferenceNode("string"))(joinPath(connection, factory_1.factory.createCallExpression(factory_1.factory.createPropertyAccessExpression(factory_1.factory.createIdentifier(route.name), "path"), [], project.config.keyword === true && SdkWebSocketParameterProgrammer_1.SdkWebSocketParameterProgrammer.isPathEmpty(route) === false ? [factory_1.factory.createIdentifier("props")] : SdkWebSocketParameterProgrammer_1.SdkWebSocketParameterProgrammer.getEntries({ project, route, provider: false, prefix: true, }).map((p) => factory_1.factory.createIdentifier(p.key))))), local("connector")(factory_1.factory.createTypeReferenceNode(importer.external({ declaration: false, file: "tgrid", type: "element", name: "WebSocketConnector", }), [ factory_1.factory.createTypeReferenceNode(`${route.name}.Header`), factory_1.factory.createTypeReferenceNode(`${route.name}.Provider`), factory_1.factory.createTypeReferenceNode(`${route.name}.Listener`), ]))(factory_1.factory.createNewExpression(factory_1.factory.createIdentifier(importer.external({ declaration: false, file: "tgrid", type: "element", name: "WebSocketConnector", })), undefined, [ factory_1.factory.createAsExpression(factory_1.factory.createBinaryExpression(factory_1.factory.createPropertyAccessExpression(factory_1.factory.createIdentifier(connection), "headers"), factory_1.factory.createToken(factory_1.SyntaxKind.QuestionQuestionToken), factory_1.factory.createObjectLiteralExpression([], false)), factory_1.factory.createKeywordTypeNode(factory_1.SyntaxKind.AnyKeyword)), access("provider"), ])), factory_1.factory.createExpressionStatement(factory_1.factory.createAwaitExpression(factory_1.factory.createCallExpression(factory_1.factory.createPropertyAccessExpression(factory_1.factory.createIdentifier("connector"), "connect"), undefined, [factory_1.factory.createIdentifier("url")]))), local("driver")(factory_1.factory.createTypeReferenceNode(importer.external({ declaration: true, file: "tgrid", type: "element", name: "Driver", }), [factory_1.factory.createTypeReferenceNode(`${route.name}.Listener`)]))(factory_1.factory.createCallExpression(factory_1.factory.createPropertyAccessExpression(factory_1.factory.createIdentifier("connector"), "getDriver"), undefined, undefined)), factory_1.factory.createReturnStatement(factory_1.factory.createObjectLiteralExpression([ factory_1.factory.createShorthandPropertyAssignment("connector"), factory_1.factory.createShorthandPropertyAssignment("driver"), factory_1.factory.createPropertyAssignment(factory_1.factory.createIdentifier("reconnect"), factory_1.factory.createArrowFunction([factory_1.factory.createToken(factory_1.SyntaxKind.AsyncKeyword)], undefined, [], undefined, factory_1.factory.createToken(factory_1.SyntaxKind.EqualsGreaterThanToken), factory_1.factory.createAwaitExpression(factory_1.factory.createCallExpression(factory_1.factory.createPropertyAccessExpression(factory_1.factory.createIdentifier("connector"), factory_1.factory.createIdentifier("connect")), undefined, [factory_1.factory.createIdentifier("url")])))), ], true)), ]; }; })(SdkWebSocketRouteProgrammer || (exports.SdkWebSocketRouteProgrammer = SdkWebSocketRouteProgrammer = {})); const local = (name) => (type) => (expression) => factory_1.factory.createVariableStatement([], factory_1.factory.createVariableDeclarationList([factory_1.factory.createVariableDeclaration(name, undefined, type, expression)], factory_1.NodeFlags.Const)); const joinPath = (connection, caller) => factory_1.factory.createTemplateExpression(factory_1.factory.createTemplateHead("", ""), [ factory_1.factory.createTemplateSpan(factory_1.factory.createConditionalExpression(factory_1.factory.createCallExpression(factory_1.factory.createPropertyAccessExpression(factory_1.factory.createPropertyAccessExpression(factory_1.factory.createIdentifier(connection), factory_1.factory.createIdentifier("host")), factory_1.factory.createIdentifier("endsWith")), undefined, [factory_1.factory.createStringLiteral("/")]), factory_1.factory.createToken(factory_1.SyntaxKind.QuestionToken), factory_1.factory.createCallExpression(factory_1.factory.createPropertyAccessExpression(factory_1.factory.createPropertyAccessExpression(factory_1.factory.createIdentifier(connection), factory_1.factory.createIdentifier("host")), factory_1.factory.createIdentifier("substring")), undefined, [ factory_1.factory.createNumericLiteral("0"), factory_1.factory.createBinaryExpression(factory_1.factory.createPropertyAccessExpression(factory_1.factory.createPropertyAccessExpression(factory_1.factory.createIdentifier(connection), factory_1.factory.createIdentifier("host")), factory_1.factory.createIdentifier("length")), factory_1.factory.createToken(factory_1.SyntaxKind.MinusToken), factory_1.factory.createNumericLiteral("1")), ]), factory_1.factory.createToken(factory_1.SyntaxKind.ColonToken), factory_1.factory.createPropertyAccessExpression(factory_1.factory.createIdentifier(connection), factory_1.factory.createIdentifier("host"))), factory_1.factory.createTemplateMiddle("")), factory_1.factory.createTemplateSpan(caller, factory_1.factory.createTemplateTail("")), ]); //# sourceMappingURL=SdkWebSocketRouteProgrammer.js.map