UNPKG

@nestia/sdk

Version:

Nestia SDK and Swagger generator

151 lines 8.16 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.SdkAliasCollection = void 0; const typescript_1 = __importDefault(require("typescript")); const TypeFactory_1 = require("typia/lib/factories/TypeFactory"); const FilePrinter_1 = require("./FilePrinter"); const SdkHttpParameterProgrammer_1 = require("./SdkHttpParameterProgrammer"); const SdkTypeProgrammer_1 = require("./SdkTypeProgrammer"); var SdkAliasCollection; (function (SdkAliasCollection) { SdkAliasCollection.name = ({ type }) => typescript_1.default.factory.createTypeReferenceNode(type.name, type.typeArguments ? type.typeArguments.map((a) => SdkAliasCollection.name({ type: a })) : undefined); SdkAliasCollection.from = (project) => (importer) => (metadata) => SdkTypeProgrammer_1.SdkTypeProgrammer.write(project)(importer)(metadata); SdkAliasCollection.httpProps = (project) => (importer) => (route) => typescript_1.default.factory.createTypeLiteralNode(SdkHttpParameterProgrammer_1.SdkHttpParameterProgrammer.getEntries({ project, importer, route, body: true, prefix: false, }) .map((e) => { var _a, _b, _c, _d, _e, _f; const signature = typescript_1.default.factory.createPropertySignature(undefined, e.key, e.required ? undefined : typescript_1.default.factory.createToken(typescript_1.default.SyntaxKind.QuestionToken), e.type); const description = (_f = (_a = e.parameter.description) !== null && _a !== void 0 ? _a : (_e = (_d = (_c = (_b = route.jsDocTags) === null || _b === void 0 ? void 0 : _b.find((tag) => { var _a, _b, _c, _d; return tag.name === "param" && ((_b = (_a = tag.text) === null || _a === void 0 ? void 0 : _a[0]) === null || _b === void 0 ? void 0 : _b.kind) === "parameterName" && ((_d = (_c = tag.text) === null || _c === void 0 ? void 0 : _c[0]) === null || _d === void 0 ? void 0 : _d.text) === e.key; })) === null || _c === void 0 ? void 0 : _c.text) === null || _d === void 0 ? void 0 : _d.find((t) => t.kind === "text")) === null || _e === void 0 ? void 0 : _e.text) !== null && _f !== void 0 ? _f : null; return (description === null || description === void 0 ? void 0 : description.length) ? [ typescript_1.default.factory.createIdentifier("\n"), FilePrinter_1.FilePrinter.description(signature, description), ] : [signature]; }) .flat()); SdkAliasCollection.websocketProps = (route) => typescript_1.default.factory.createTypeLiteralNode([ ...route.pathParameters.map((p) => typescript_1.default.factory.createPropertySignature(undefined, p.name, undefined, SdkAliasCollection.name(p))), ...(route.query ? [ typescript_1.default.factory.createPropertySignature(undefined, "query", undefined, typescript_1.default.factory.createTypeReferenceNode("Query")), ] : []), typescript_1.default.factory.createPropertySignature(undefined, "provider", undefined, typescript_1.default.factory.createTypeReferenceNode("Provider")), ]); SdkAliasCollection.headers = (project) => (importer) => (param) => { if (project.config.clone === true) return SdkAliasCollection.from(project)(importer)(param.metadata); const type = SdkAliasCollection.name(param); if (project.config.primitive === false) return type; return typescript_1.default.factory.createTypeReferenceNode(importer.external({ file: "typia", declaration: true, type: "element", name: "Resolved", }), [type]); }; SdkAliasCollection.query = (project) => (importer) => (param) => { if (project.config.clone === true) return SdkAliasCollection.from(project)(importer)(param.metadata); const type = SdkAliasCollection.name(param); if (project.config.primitive === false) return type; return typescript_1.default.factory.createTypeReferenceNode(importer.external({ file: "typia", declaration: true, type: "element", name: "Resolved", }), [type]); }; SdkAliasCollection.body = (project) => (importer) => (param) => { if (project.config.clone === true) { const type = SdkAliasCollection.from(project)(importer)(param.metadata); return param.contentType === "multipart/form-data" ? formDataInput(importer)(type) : type; } const type = SdkAliasCollection.name(param); if (param.contentType === "multipart/form-data") return formDataInput(importer)(type); else if (project.config.primitive === false) return type; return typescript_1.default.factory.createTypeReferenceNode(importer.external({ file: "typia", declaration: true, type: "element", name: param.contentType === "application/json" || param.encrypted === true ? "Primitive" : "Resolved", }), [type]); }; SdkAliasCollection.response = (project) => (importer) => (route) => { var _a; const schema = (p) => p.metadata.size() === 0 ? TypeFactory_1.TypeFactory.keyword("void") : project.config.clone === true ? SdkAliasCollection.from(project)(importer)(p.metadata) : project.config.primitive !== false ? typescript_1.default.factory.createTypeReferenceNode(importer.external({ file: "typia", declaration: true, type: "element", name: route.success.contentType === "application/json" || route.success.encrypted === true ? "Primitive" : "Resolved", }), [SdkAliasCollection.name(p)]) : SdkAliasCollection.name(p); if (project.config.propagate !== true) return schema(route.success); const branches = [ { status: String((_a = route.success.status) !== null && _a !== void 0 ? _a : (route.method === "POST" ? 201 : 200)), type: schema(route.success), }, ...Object.entries(route.exceptions).map(([status, value]) => ({ status, type: schema(value), })), ]; return typescript_1.default.factory.createTypeReferenceNode(importer.external({ file: "@nestia/fetcher", declaration: true, type: "element", name: "IPropagation", }), [ typescript_1.default.factory.createTypeLiteralNode(branches.map((b) => typescript_1.default.factory.createPropertySignature(undefined, typescript_1.default.factory.createNumericLiteral(b.status), undefined, b.type))), ...(route.success.status ? [ typescript_1.default.factory.createLiteralTypeNode(typescript_1.default.factory.createNumericLiteral(route.success.status)), ] : []), ]); }; SdkAliasCollection.responseBody = (project) => (importer) => (route) => SdkAliasCollection.response(Object.assign(Object.assign({}, project), { config: Object.assign(Object.assign({}, project.config), { propagate: false }) }))(importer)(route); const formDataInput = (importer) => (type) => typescript_1.default.factory.createTypeReferenceNode(importer.external({ file: "@nestia/fetcher", declaration: true, type: "element", name: "FormDataInput", }), [type]); })(SdkAliasCollection || (exports.SdkAliasCollection = SdkAliasCollection = {})); //# sourceMappingURL=SdkAliasCollection.js.map