@nestia/sdk
Version:
Nestia SDK and Swagger generator
101 lines • 9.13 kB
JavaScript
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
;