UNPKG

@nestia/sdk

Version:

Nestia SDK and Swagger generator

104 lines 3.97 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.ImportAnalyzer = void 0; const path_1 = __importDefault(require("path")); const typescript_1 = __importDefault(require("typescript")); const MapUtil_1 = require("../utils/MapUtil"); var ImportAnalyzer; (function (ImportAnalyzer) { ImportAnalyzer.analyze = (file) => file.statements .filter(typescript_1.default.isImportDeclaration) .map((imp) => { const clause = imp.importClause; if (clause === undefined) return null; try { // no real position // import statement generated by transformer like typia imp.moduleSpecifier.getText(); } catch (_a) { return null; } const reflect = { file: normalizePath(path_1.default.dirname(file.fileName), typescript_1.default.isStringLiteral(imp.moduleSpecifier) ? imp.moduleSpecifier.text : escapeQuotes(imp.moduleSpecifier.getText())), elements: [], default: null, asterisk: null, }; if (clause.name) reflect.default = clause.name.getText(); if (clause.namedBindings === undefined) return reflect; else if (typescript_1.default.isNamedImports(clause.namedBindings)) reflect.elements = clause.namedBindings.elements.map((e) => e.name.getText()); else if (typescript_1.default.isNamespaceImport(clause.namedBindings)) reflect.asterisk = clause.namedBindings.name.getText(); return reflect; }) .filter((r) => r !== null); ImportAnalyzer.merge = (imports) => { // group by files const fileGroups = new Map(); for (const imp of imports) { const array = MapUtil_1.MapUtil.take(fileGroups, imp.file, () => []); array.push(imp); } return Array.from(fileGroups.entries()) .map(([key, value]) => mergeGroup(key, value)) .flat(); }; function mergeGroup(file, imports) { const allStarImports = Array.from(new Set(imports .filter((imp) => imp.asterisk !== null) .map((imp) => imp.asterisk))) .sort() .map((allStarImport) => ({ file, elements: [], default: null, asterisk: allStarImport, })); const defaultImports = Array.from(new Set(imports .filter((imp) => imp.default !== null) .map((imp) => imp.default))) .sort() .map((defaultImport) => ({ file, elements: [], default: defaultImport, asterisk: null, })); const instances = new Set(imports.map((imp) => imp.elements).flat()); if (instances.size !== 0) { if (defaultImports.length !== 0) defaultImports[0].elements = Array.from(instances).sort(); else defaultImports.push({ file, elements: Array.from(instances).sort(), default: null, asterisk: null, }); } return [...allStarImports, ...defaultImports]; } function escapeQuotes(str) { if (str.startsWith("'") && str.endsWith("'")) return str.slice(1, -1); else if (str.startsWith('"') && str.endsWith('"')) return str.slice(1, -1); return str; } function normalizePath(root, str) { if (str.startsWith(".")) return path_1.default.resolve(root, str); return `node_modules/${str}`; } })(ImportAnalyzer || (exports.ImportAnalyzer = ImportAnalyzer = {})); //# sourceMappingURL=ImportAnalyzer.js.map