@nestia/sdk
Version:
Nestia SDK and Swagger generator
117 lines • 10.7 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 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) => {
return 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`)])),
...SdkWebSocketParameterProgrammer_1.SdkWebSocketParameterProgrammer.getParameterDeclarations({
project,
route,
provider: true,
prefix: true,
}),
], typescript_1.default.factory.createTypeReferenceNode("Promise", [
typescript_1.default.factory.createTypeReferenceNode(`${route.name}.Output`),
]), typescript_1.default.factory.createBlock(writeFunctionBody(project)(importer)(route), true));
};
const writeFunctionBody = (project) => (importer) => (route) => {
const access = (key) => project.config.keyword === true
? typescript_1.default.factory.createPropertyAccessExpression(typescript_1.default.factory.createIdentifier("props"), key)
: typescript_1.default.factory.createIdentifier(key);
return [
local("url")(typescript_1.default.factory.createTypeReferenceNode("string"))(joinPath(typescript_1.default.factory.createCallExpression(typescript_1.default.factory.createPropertyAccessExpression(typescript_1.default.factory.createIdentifier(route.name), "path"), [], project.config.keyword === true &&
SdkWebSocketParameterProgrammer_1.SdkWebSocketParameterProgrammer.isPathEmpty(route) === false
? [typescript_1.default.factory.createIdentifier("props")]
: SdkWebSocketParameterProgrammer_1.SdkWebSocketParameterProgrammer.getEntries({
project,
route,
provider: false,
prefix: true,
}).map((p) => typescript_1.default.factory.createIdentifier(p.key))))),
local("connector")(typescript_1.default.factory.createTypeReferenceNode(importer.external({
declaration: false,
file: "tgrid",
type: "element",
name: "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({
declaration: false,
file: "tgrid",
type: "element",
name: "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)),
access("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, [typescript_1.default.factory.createIdentifier("url")]))),
local("driver")(typescript_1.default.factory.createTypeReferenceNode(importer.external({
declaration: true,
file: "tgrid",
type: "element",
name: "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"),
typescript_1.default.factory.createPropertyAssignment(typescript_1.default.factory.createIdentifier("reconnect"), typescript_1.default.factory.createArrowFunction([typescript_1.default.factory.createToken(typescript_1.default.SyntaxKind.AsyncKeyword)], undefined, [], undefined, typescript_1.default.factory.createToken(typescript_1.default.SyntaxKind.EqualsGreaterThanToken), typescript_1.default.factory.createAwaitExpression(typescript_1.default.factory.createCallExpression(typescript_1.default.factory.createPropertyAccessExpression(typescript_1.default.factory.createIdentifier("connector"), typescript_1.default.factory.createIdentifier("connect")), undefined, [typescript_1.default.factory.createIdentifier("url")])))),
], 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