@mendix/pluggable-widgets-tools
Version:
Mendix Pluggable Widgets Tools
41 lines (40 loc) • 1.7 kB
JavaScript
;
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)));
}