UNPKG

@nestia/sdk

Version:

Nestia SDK and Swagger generator

96 lines 5.17 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.SdkFileProgrammer = void 0; const fs_1 = __importDefault(require("fs")); const typescript_1 = __importDefault(require("typescript")); const MapUtil_1 = require("../../utils/MapUtil"); const FilePrinter_1 = require("./FilePrinter"); const ImportDictionary_1 = require("./ImportDictionary"); const SdkHttpRouteProgrammer_1 = require("./SdkHttpRouteProgrammer"); const SdkRouteDirectory_1 = require("./SdkRouteDirectory"); const SdkWebSocketRouteProgrammer_1 = require("./SdkWebSocketRouteProgrammer"); var SdkFileProgrammer; (function (SdkFileProgrammer) { /* --------------------------------------------------------- CONSTRUCTOR --------------------------------------------------------- */ SdkFileProgrammer.generate = (app) => __awaiter(this, void 0, void 0, function* () { // CONSTRUCT FOLDER TREE const root = new SdkRouteDirectory_1.SdkRouteDirectory(null, "functional"); for (const route of app.routes) emplace(root)(route); // ITERATE FILES yield iterate(app.project)(root)(`${app.project.config.output}/functional`); }); const emplace = (directory) => (route) => { // OPEN DIRECTORIES for (const key of route.accessor.slice(0, -1)) { directory = MapUtil_1.MapUtil.take(directory.children, key, () => new SdkRouteDirectory_1.SdkRouteDirectory(directory, key)); } // ADD ROUTE directory.routes.push(route); }; /* --------------------------------------------------------- FILE ITERATOR --------------------------------------------------------- */ const iterate = (project) => (directory) => (outDir) => __awaiter(this, void 0, void 0, function* () { // CREATE A NEW DIRECTORY try { yield fs_1.default.promises.mkdir(outDir); } catch (_a) { } // ITERATE CHILDREN const statements = []; for (const [key, value] of directory.children) { yield iterate(project)(value)(`${outDir}/${key}`); statements.push(typescript_1.default.factory.createExportDeclaration(undefined, false, typescript_1.default.factory.createNamespaceExport(typescript_1.default.factory.createIdentifier(key)), typescript_1.default.factory.createStringLiteral(`./${key}`), undefined)); } if (statements.length && directory.routes.length) statements.push(FilePrinter_1.FilePrinter.enter()); // ITERATE ROUTES const importer = new ImportDictionary_1.ImportDictionary(`${outDir}/index.ts`); directory.routes.forEach((route, i) => { if (!(project.config.clone === true && route.protocol === "http")) for (const tuple of route.imports) for (const instance of tuple.instances) importer.internal({ file: tuple.file, instance, type: true, }); statements.push(...(route.protocol === "http" ? SdkHttpRouteProgrammer_1.SdkHttpRouteProgrammer.write(project)(importer)(route) : SdkWebSocketRouteProgrammer_1.SdkWebSocketRouteProgrammer.write(importer)(route))); if (i !== directory.routes.length - 1) statements.push(FilePrinter_1.FilePrinter.enter()); }); // FINALIZE THE CONTENT if (directory.routes.length !== 0) statements.push(...importer.toStatements(outDir), ...(!importer.empty() && statements.length ? [FilePrinter_1.FilePrinter.enter()] : []), ...statements.splice(0, statements.length)); yield FilePrinter_1.FilePrinter.write({ location: importer.file, statements, top: "/**\n" + " * @packageDocumentation\n" + ` * @module ${directory.module}\n` + " * @nestia Generated by Nestia - https://github.com/samchon/nestia \n" + " */\n" + "//================================================================\n", }); }); })(SdkFileProgrammer || (exports.SdkFileProgrammer = SdkFileProgrammer = {})); //# sourceMappingURL=SdkFileProgrammer.js.map