UNPKG

@nestia/sdk

Version:

Nestia SDK and Swagger generator

101 lines 9.13 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.SdkWebSocketRouteProgrammer = void 0; const typescript_1 = __importDefault(require("typescript")); const IdentifierFactory_1 = require("typia/lib/factories/IdentifierFactory"); const FilePrinter_1 = require("./FilePrinter"); const SdkAliasCollection_1 = require("./SdkAliasCollection"); const SdkImportWizard_1 = require("./SdkImportWizard"); const SdkWebSocketNamespaceProgrammer_1 = require("./SdkWebSocketNamespaceProgrammer"); var SdkWebSocketRouteProgrammer; (function (SdkWebSocketRouteProgrammer) { SdkWebSocketRouteProgrammer.write = (importer) => (route) => [ FilePrinter_1.FilePrinter.description(writeFunction(importer)(route), writeDescription(route)), SdkWebSocketNamespaceProgrammer_1.SdkWebSocketNamespaceProgrammer.write(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.parameters .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 = (importer) => (route) => typescript_1.default.factory.createFunctionDeclaration([ typescript_1.default.factory.createModifier(typescript_1.default.SyntaxKind.ExportKeyword), typescript_1.default.factory.createModifier(typescript_1.default.SyntaxKind.AsyncKeyword), ], undefined, route.name, undefined, [ IdentifierFactory_1.IdentifierFactory.parameter("connection", typescript_1.default.factory.createTypeReferenceNode(SdkImportWizard_1.SdkImportWizard.IConnection(importer), [typescript_1.default.factory.createTypeReferenceNode(`${route.name}.Header`)])), ...route.parameters .filter((p) => p.category === "param" || p.category === "query") .map((p) => IdentifierFactory_1.IdentifierFactory.parameter(p.name, p.category === "param" ? SdkAliasCollection_1.SdkAliasCollection.name(p) : typescript_1.default.factory.createTypeReferenceNode(`${route.name}.Query`))), IdentifierFactory_1.IdentifierFactory.parameter("provider", typescript_1.default.factory.createTypeReferenceNode(`${route.name}.Provider`)), ], typescript_1.default.factory.createTypeReferenceNode("Promise", [ typescript_1.default.factory.createTypeReferenceNode(`${route.name}.Output`), ]), typescript_1.default.factory.createBlock(writeFunctionBody(importer)(route), true)); const writeFunctionBody = (importer) => (route) => [ local("connector")(typescript_1.default.factory.createTypeReferenceNode(importer.external({ type: false, library: "tgrid", instance: "WebSocketConnector", }), [ typescript_1.default.factory.createTypeReferenceNode(`${route.name}.Header`), typescript_1.default.factory.createTypeReferenceNode(`${route.name}.Provider`), typescript_1.default.factory.createTypeReferenceNode(`${route.name}.Listener`), ]))(typescript_1.default.factory.createNewExpression(typescript_1.default.factory.createIdentifier(importer.external({ type: false, library: "tgrid", instance: "WebSocketConnector", })), undefined, [ typescript_1.default.factory.createAsExpression(typescript_1.default.factory.createBinaryExpression(typescript_1.default.factory.createPropertyAccessExpression(typescript_1.default.factory.createIdentifier("connection"), "headers"), typescript_1.default.factory.createToken(typescript_1.default.SyntaxKind.QuestionQuestionToken), typescript_1.default.factory.createObjectLiteralExpression([], false)), typescript_1.default.factory.createKeywordTypeNode(typescript_1.default.SyntaxKind.AnyKeyword)), typescript_1.default.factory.createIdentifier("provider"), ])), typescript_1.default.factory.createExpressionStatement(typescript_1.default.factory.createAwaitExpression(typescript_1.default.factory.createCallExpression(typescript_1.default.factory.createPropertyAccessExpression(typescript_1.default.factory.createIdentifier("connector"), "connect"), undefined, [ joinPath(typescript_1.default.factory.createCallExpression(typescript_1.default.factory.createPropertyAccessExpression(typescript_1.default.factory.createIdentifier(route.name), "path"), [], route.parameters .filter((p) => p.category === "param" || p.category === "query") .map((x) => typescript_1.default.factory.createIdentifier(x.name)))), ]))), local("driver")(typescript_1.default.factory.createTypeReferenceNode(importer.external({ type: true, library: "tgrid", instance: "Driver", }), [typescript_1.default.factory.createTypeReferenceNode(`${route.name}.Listener`)]))(typescript_1.default.factory.createCallExpression(typescript_1.default.factory.createPropertyAccessExpression(typescript_1.default.factory.createIdentifier("connector"), "getDriver"), undefined, undefined)), typescript_1.default.factory.createReturnStatement(typescript_1.default.factory.createObjectLiteralExpression([ typescript_1.default.factory.createShorthandPropertyAssignment("connector"), typescript_1.default.factory.createShorthandPropertyAssignment("driver"), ], true)), ]; })(SdkWebSocketRouteProgrammer || (exports.SdkWebSocketRouteProgrammer = SdkWebSocketRouteProgrammer = {})); const local = (name) => (type) => (expression) => typescript_1.default.factory.createVariableStatement([], typescript_1.default.factory.createVariableDeclarationList([ typescript_1.default.factory.createVariableDeclaration(name, undefined, type, expression), ], typescript_1.default.NodeFlags.Const)); const joinPath = (caller) => typescript_1.default.factory.createTemplateExpression(typescript_1.default.factory.createTemplateHead("", ""), [ typescript_1.default.factory.createTemplateSpan(typescript_1.default.factory.createConditionalExpression(typescript_1.default.factory.createCallExpression(typescript_1.default.factory.createPropertyAccessExpression(typescript_1.default.factory.createPropertyAccessExpression(typescript_1.default.factory.createIdentifier("connection"), typescript_1.default.factory.createIdentifier("host")), typescript_1.default.factory.createIdentifier("endsWith")), undefined, [typescript_1.default.factory.createStringLiteral("/")]), typescript_1.default.factory.createToken(typescript_1.default.SyntaxKind.QuestionToken), typescript_1.default.factory.createCallExpression(typescript_1.default.factory.createPropertyAccessExpression(typescript_1.default.factory.createPropertyAccessExpression(typescript_1.default.factory.createIdentifier("connection"), typescript_1.default.factory.createIdentifier("host")), typescript_1.default.factory.createIdentifier("substring")), undefined, [ typescript_1.default.factory.createNumericLiteral("0"), typescript_1.default.factory.createBinaryExpression(typescript_1.default.factory.createPropertyAccessExpression(typescript_1.default.factory.createPropertyAccessExpression(typescript_1.default.factory.createIdentifier("connection"), typescript_1.default.factory.createIdentifier("host")), typescript_1.default.factory.createIdentifier("length")), typescript_1.default.factory.createToken(typescript_1.default.SyntaxKind.MinusToken), typescript_1.default.factory.createNumericLiteral("1")), ]), typescript_1.default.factory.createToken(typescript_1.default.SyntaxKind.ColonToken), typescript_1.default.factory.createPropertyAccessExpression(typescript_1.default.factory.createIdentifier("connection"), typescript_1.default.factory.createIdentifier("host"))), typescript_1.default.factory.createTemplateMiddle("", "")), typescript_1.default.factory.createTemplateSpan(caller, typescript_1.default.factory.createTemplateTail("", "")), ]); //# sourceMappingURL=SdkWebSocketRouteProgrammer.js.map