UNPKG

@nestia/sdk

Version:

Nestia SDK and Swagger generator

103 lines 4.61 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.SdkHttpCloneReferencer = void 0; const legacy_1 = require("../../internal/legacy"); const StringUtil_1 = require("../../utils/StringUtil"); const SdkHttpParameterProgrammer_1 = require("./SdkHttpParameterProgrammer"); const SdkWebSocketCloneProgrammer_1 = require("./SdkWebSocketCloneProgrammer"); var SdkHttpCloneReferencer; (function (SdkHttpCloneReferencer) { SdkHttpCloneReferencer.replace = (app, websocket = new Set()) => { const directory = `${app.project.config.output}/structures`; for (const route of app.routes) if (route.protocol === "http") visitHttpRoute({ directory, route, }); else if (route.protocol === "websocket") visitWebSocketRoute({ cloned: websocket, directory, route, }); }; const visitHttpRoute = (props) => { const unique = new Set(); for (const p of SdkHttpParameterProgrammer_1.SdkHttpParameterProgrammer.getSignificant(props.route, true)) visitType({ unique, metadata: p.metadata, type: p.type, name: (name) => (p.type = { name }), }); for (const v of Object.values(props.route.exceptions)) visitType({ unique, metadata: v.metadata, type: v.type, name: (name) => (v.type = { name }), }); if (props.route.success.binary === false) visitType({ unique, metadata: props.route.success.metadata, type: props.route.success.type, name: (name) => (props.route.success.type = { name }), }); props.route.imports = Array.from(unique).map((str) => ({ file: `${props.directory}/${str}`, asterisk: null, default: null, elements: [str], })); }; const visitWebSocketRoute = (props) => { var _a; var _b; const unique = new Map(); const keep = []; for (const imp of props.route.imports) { const cloned = SdkWebSocketCloneProgrammer_1.SdkWebSocketCloneProgrammer.isNodeModulesPath(imp.file) ? [] : imp.elements.filter((elem) => { var _a; var _b; const imported = (_b = (_a = imp.elementAliases) === null || _a === void 0 ? void 0 : _a[elem]) !== null && _b !== void 0 ? _b : elem; return props.cloned.has(SdkWebSocketCloneProgrammer_1.SdkWebSocketCloneProgrammer.importKey(imp.file, imported)); }); const remained = imp.elements.filter((elem) => cloned.includes(elem) === false); for (const elem of cloned) unique.set(elem, (_b = (_a = imp.elementAliases) === null || _a === void 0 ? void 0 : _a[elem]) !== null && _b !== void 0 ? _b : elem); if (imp.asterisk !== null || imp.default !== null || remained.length !== 0) keep.push(Object.assign(Object.assign({}, imp), { elements: remained })); } props.route.imports = [ ...keep, ...Array.from(unique).map(([local, imported]) => (Object.assign({ file: `${props.directory}/${imported}`, asterisk: null, default: null, elements: [local] }, (local === imported ? {} : { elementAliases: { [local]: imported } })))), ]; }; const visitType = (p) => { const enroll = (key) => { if (key.length && StringUtil_1.StringUtil.isImplicit(key) === false) p.unique.add(key.split(".")[0]); }; for (const alias of p.metadata.aliases) enroll(alias.type.name); for (const array of p.metadata.arrays) enroll(array.type.name); for (const tuple of p.metadata.tuples) enroll(tuple.type.name); for (const object of p.metadata.objects) enroll(object.type.name); p.name((0, legacy_1.nameOf)(p.metadata)); }; })(SdkHttpCloneReferencer || (exports.SdkHttpCloneReferencer = SdkHttpCloneReferencer = {})); const getFullText = (type) => type.typeArguments === undefined ? type.name : `${type.name}<${type.typeArguments.map(getFullText).join(", ")}>`; //# sourceMappingURL=SdkHttpCloneReferencer.js.map