grunt-generate-view-model
Version:
Global task for generation view model
57 lines • 2.32 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.makeCorrectImports = void 0;
const mapper_1 = require("./mapper");
const simple_1 = require("./simple");
const deleteRepeatableImports = (imports) => {
const filteredImports = [];
imports.forEach(i => {
const alreadyInFilterImport = filteredImports.find(filteredImport => filteredImport.clauses.toString() === i.clauses.toString());
if (alreadyInFilterImport) {
return;
}
filteredImports.push(i);
});
return filteredImports;
};
const makeCorrectImports = (fileMetadata, possibleImports) => {
const imports = deleteRepeatableImports(possibleImports);
const mapperImports = mapper_1.getMapperImports(fileMetadata, imports);
const interfaceImports = simple_1.getInterfaceImports(fileMetadata, imports);
let decoratorImports = [];
if (fileMetadata.classMetadata.type === 'class') {
decoratorImports = simple_1.getDecoratorImports(fileMetadata, imports);
}
const result = [...mapperImports, ...interfaceImports, ...decoratorImports]
.filter(imp => !fileMetadata.imports.find(i => i.type === imp.type))
.reduce((prev, cur) => {
const pathExistInPrev = !!prev.find(item => cur.path === item.path);
if (!pathExistInPrev) {
return [...prev, cur];
}
const newArray = prev.map(item => {
if (item.path !== cur.path || item.type.includes(cur.type)) {
return item;
}
item.type = `${item.type}, ${cur.type}`;
return item;
});
return newArray;
}, []);
result.sort((a, b) => {
const isAIsNodeModule = !a.path.startsWith('.');
const isBIsNodeModule = !b.path.startsWith('.');
if (isAIsNodeModule && !isBIsNodeModule) {
return -1;
}
if (isBIsNodeModule && !isAIsNodeModule) {
return 1;
}
const aImport = `import { ${a.type} } from '${a.path}'`;
const bImport = `import { ${b.type} } from '${b.path}'`;
return aImport.length - bImport.length;
});
return result;
};
exports.makeCorrectImports = makeCorrectImports;
//# sourceMappingURL=index.js.map