UNPKG

@nestia/sdk

Version:

Nestia SDK and Swagger generator

122 lines 10.8 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.SdkWebSocketNamespaceProgrammer = void 0; const factory_1 = require("@ttsc/factory"); const ExpressionFactory_1 = require("../../factories/ExpressionFactory"); const IdentifierFactory_1 = require("../../factories/IdentifierFactory"); const TypeFactory_1 = require("../../factories/TypeFactory"); const FilePrinter_1 = require("./FilePrinter"); const SdkAliasCollection_1 = require("./SdkAliasCollection"); const SdkWebSocketParameterProgrammer_1 = require("./SdkWebSocketParameterProgrammer"); var SdkWebSocketNamespaceProgrammer; (function (SdkWebSocketNamespaceProgrammer) { SdkWebSocketNamespaceProgrammer.write = (project) => (importer) => (route) => factory_1.factory.createModuleDeclaration([factory_1.factory.createToken(factory_1.SyntaxKind.ExportKeyword)], factory_1.factory.createIdentifier(route.name), factory_1.factory.createModuleBlock([ ...writeTypes(project)(importer)(route), FilePrinter_1.FilePrinter.enter(), writePath(project)(route), ]), factory_1.NodeFlags.Namespace); const writeTypes = (project) => (importer) => (route) => { var _a, _b, _c, _d, _e, _f; var _g, _h; const output = []; const declare = (name, type) => output.push(factory_1.factory.createTypeAliasDeclaration([factory_1.factory.createModifier(factory_1.SyntaxKind.ExportKeyword)], name, undefined, type)); if (project.config.keyword === true) declare("Props", SdkAliasCollection_1.SdkAliasCollection.websocketProps(route)); declare("Output", factory_1.factory.createTypeLiteralNode([ factory_1.factory.createPropertySignature(undefined, "connector", undefined, factory_1.factory.createTypeReferenceNode(importer.external({ declaration: false, file: "tgrid", type: "element", name: "WebSocketConnector", }), [ factory_1.factory.createTypeReferenceNode("Header"), factory_1.factory.createTypeReferenceNode("Provider"), factory_1.factory.createTypeReferenceNode("Listener"), ])), factory_1.factory.createPropertySignature(undefined, "driver", undefined, factory_1.factory.createTypeReferenceNode(importer.external({ declaration: true, file: "tgrid", type: "element", name: "Driver", }), [factory_1.factory.createTypeReferenceNode("Listener")])), factory_1.factory.createPropertySignature(undefined, "reconnect", undefined, factory_1.factory.createFunctionTypeNode(undefined, [], factory_1.factory.createTypeReferenceNode(factory_1.factory.createIdentifier("Promise"), [factory_1.factory.createKeywordTypeNode(factory_1.SyntaxKind.VoidKeyword)]))), ])); declare("Header", SdkAliasCollection_1.SdkAliasCollection.name({ type: ((_g = (_a = route.header) === null || _a === void 0 ? void 0 : _a.type) !== null && _g !== void 0 ? _g : (_b = route.acceptor.type.typeArguments) === null || _b === void 0 ? void 0 : _b[0]), })); declare("Provider", SdkAliasCollection_1.SdkAliasCollection.name({ type: (_h = (_d = (_c = route.driver) === null || _c === void 0 ? void 0 : _c.type.typeArguments) === null || _d === void 0 ? void 0 : _d[0]) !== null && _h !== void 0 ? _h : (_e = route.acceptor.type.typeArguments) === null || _e === void 0 ? void 0 : _e[2], })); declare("Listener", SdkAliasCollection_1.SdkAliasCollection.name({ type: (_f = route.acceptor.type.typeArguments) === null || _f === void 0 ? void 0 : _f[1], })); if (route.query) declare("Query", SdkAliasCollection_1.SdkAliasCollection.name(route.query)); return output; }; const writePath = (project) => (route) => { const out = (body) => constant("path")(factory_1.factory.createArrowFunction([], [], SdkWebSocketParameterProgrammer_1.SdkWebSocketParameterProgrammer.getParameterDeclarations({ project, route, provider: false, prefix: false, }), undefined, undefined, body)); if (route.pathParameters.length === 0 && route.query === null) return out(factory_1.factory.createStringLiteral(route.path)); const access = (key) => project.config.keyword === true ? factory_1.factory.createPropertyAccessExpression(factory_1.factory.createIdentifier("props"), key) : factory_1.factory.createIdentifier(key); const template = () => { const split = route.path.split(":"); if (split.length === 1) return factory_1.factory.createStringLiteral(route.path); return factory_1.factory.createTemplateExpression(factory_1.factory.createTemplateHead(split[0]), split.slice(1).map((s, i, arr) => { const name = s.split("/")[0]; return factory_1.factory.createTemplateSpan(factory_1.factory.createCallExpression(factory_1.factory.createIdentifier("encodeURIComponent"), undefined, [ factory_1.factory.createBinaryExpression(factory_1.factory.createCallChain(factory_1.factory.createPropertyAccessChain(access(route.pathParameters.find((p) => p.field === name) .name), factory_1.factory.createToken(factory_1.SyntaxKind.QuestionDotToken), "toString"), undefined, undefined, []), factory_1.factory.createToken(factory_1.SyntaxKind.QuestionQuestionToken), factory_1.factory.createStringLiteral("null")), ]), (i !== arr.length - 1 ? factory_1.factory.createTemplateMiddle : factory_1.factory.createTemplateTail)(s.substring(name.length))); })); }; if (route.query === null) return out(template()); const block = (expr) => { const computeName = (str) => [...route.pathParameters, ...(route.query ? [route.query] : [])].find((p) => p.name === str) !== undefined ? computeName("_" + str) : str; const variables = computeName("variables"); return factory_1.factory.createBlock([ local(variables)("URLSearchParams")(factory_1.factory.createNewExpression(factory_1.factory.createIdentifier("URLSearchParams"), [], [])), factory_1.factory.createForOfStatement(undefined, factory_1.factory.createVariableDeclarationList([ factory_1.factory.createVariableDeclaration(factory_1.factory.createArrayBindingPattern([ factory_1.factory.createBindingElement(undefined, undefined, factory_1.factory.createIdentifier("key"), undefined), factory_1.factory.createBindingElement(undefined, undefined, factory_1.factory.createIdentifier("value"), undefined), ]), undefined, undefined, undefined), ], factory_1.NodeFlags.Const), factory_1.factory.createCallExpression(factory_1.factory.createIdentifier("Object.entries"), undefined, [factory_1.factory.createAsExpression(expr, TypeFactory_1.TypeFactory.keyword("any"))]), factory_1.factory.createIfStatement(factory_1.factory.createStrictEquality(factory_1.factory.createIdentifier("undefined"), factory_1.factory.createIdentifier("value")), factory_1.factory.createContinueStatement(), factory_1.factory.createIfStatement(factory_1.factory.createCallExpression(factory_1.factory.createIdentifier("Array.isArray"), undefined, [factory_1.factory.createIdentifier("value")]), factory_1.factory.createExpressionStatement(factory_1.factory.createCallExpression(factory_1.factory.createPropertyAccessExpression(factory_1.factory.createIdentifier("value"), factory_1.factory.createIdentifier("forEach")), undefined, [ factory_1.factory.createArrowFunction(undefined, undefined, [IdentifierFactory_1.IdentifierFactory.parameter("elem")], undefined, undefined, factory_1.factory.createCallExpression(IdentifierFactory_1.IdentifierFactory.access(factory_1.factory.createIdentifier(variables), "append"), undefined, [ factory_1.factory.createIdentifier("key"), factory_1.factory.createCallExpression(factory_1.factory.createIdentifier("String"), undefined, [factory_1.factory.createIdentifier("elem")]), ])), ])), factory_1.factory.createExpressionStatement(factory_1.factory.createCallExpression(IdentifierFactory_1.IdentifierFactory.access(factory_1.factory.createIdentifier(variables), "set"), undefined, [ factory_1.factory.createIdentifier("key"), factory_1.factory.createCallExpression(factory_1.factory.createIdentifier("String"), undefined, [factory_1.factory.createIdentifier("value")]), ]))))), local("location")("string")(template()), factory_1.factory.createReturnStatement(factory_1.factory.createConditionalExpression(factory_1.factory.createStrictEquality(ExpressionFactory_1.ExpressionFactory.number(0), IdentifierFactory_1.IdentifierFactory.access(factory_1.factory.createIdentifier(variables), "size")), undefined, factory_1.factory.createIdentifier("location"), undefined, factory_1.factory.createTemplateExpression(factory_1.factory.createTemplateHead(""), [ factory_1.factory.createTemplateSpan(factory_1.factory.createIdentifier("location"), factory_1.factory.createTemplateMiddle("?")), factory_1.factory.createTemplateSpan(factory_1.factory.createCallExpression(IdentifierFactory_1.IdentifierFactory.access(factory_1.factory.createIdentifier(variables), "toString"), undefined, undefined), factory_1.factory.createTemplateTail("")), ]))), ], true); }; return out(block(access(route.query.name))); }; })(SdkWebSocketNamespaceProgrammer || (exports.SdkWebSocketNamespaceProgrammer = SdkWebSocketNamespaceProgrammer = {})); const local = (name) => (type) => (expression) => factory_1.factory.createVariableStatement([], factory_1.factory.createVariableDeclarationList([ factory_1.factory.createVariableDeclaration(name, undefined, factory_1.factory.createTypeReferenceNode(type), expression), ], factory_1.NodeFlags.Const)); const constant = (name) => (expression) => factory_1.factory.createVariableStatement([factory_1.factory.createModifier(factory_1.SyntaxKind.ExportKeyword)], factory_1.factory.createVariableDeclarationList([ factory_1.factory.createVariableDeclaration(name, undefined, undefined, expression), ], factory_1.NodeFlags.Const)); //# sourceMappingURL=SdkWebSocketNamespaceProgrammer.js.map