UNPKG

@mendix/pluggable-widgets-tools

Version:
41 lines (40 loc) 1.7 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.ImportStatement = exports.ImportableModule = void 0; exports.generateImports = generateImports; const helpers_1 = require("./helpers"); class ImportableModule { constructor(from, exportedMembers) { this.from = from; this.exportedMembers = exportedMembers; } /** * Creates an import statement which binds names found in the given code to exported members of the module. */ generateImportStatement(unboundCode) { const usedNames = this.exportedMembers.filter(type => new RegExp(`\\W${type}\\W`).test(unboundCode)); return new ImportStatement(this.from, usedNames); } } exports.ImportableModule = ImportableModule; class ImportStatement { constructor(from, members) { this.from = from; this.members = members; } get type() { return this.members.length > 0 ? (this.members.length === 1 ? "single" : "multiple") : "none"; } toString() { return `import { ${this.members.join(", ")} } from "${this.from}";`; } } exports.ImportStatement = ImportStatement; function generateImports(importableModules, generatedTypesCode) { var _a, _b; const importsByType = importableModules .map(m => m.generateImportStatement(generatedTypesCode)) .reduce((0, helpers_1.groupBy)(({ type }) => type), {}); // Sort according to eslint sort-imports default settings. return [(_a = importsByType.multiple) !== null && _a !== void 0 ? _a : [], (_b = importsByType.single) !== null && _b !== void 0 ? _b : []].flatMap(s => s.sort((a, b) => (a.from < b.from ? -1 : a.from > b.from ? 1 : 0))); }