import-conductor
Version:
Automatically organize your Typescript import statements
34 lines • 1.37 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.formatImportStatements = void 0;
const config_1 = require("../config");
function formatImportStatements(importCategories, lineEnding) {
const { separator } = config_1.getConfig();
const [first, ...otherCategories] = Object.entries(importCategories)
.filter(hasImports)
.sort(byCategoriesOrder(config_1.getConfig().groupOrder))
.map((imports) => toImportBlock(imports, lineEnding));
let result = first || '';
for (const imports of otherCategories) {
result += `${separator}${lineEnding}${imports}`;
}
return result;
}
exports.formatImportStatements = formatImportStatements;
function byCategoriesOrder(categoriesOrder) {
return ([a], [b]) => categoriesOrder.indexOf(a) - categoriesOrder.indexOf(b);
}
function hasImports([, imports]) {
return imports.size > 0;
}
function toImportBlock([, imports], lineEnding) {
return [...imports.values()].map((l) => trim(l, ` ${lineEnding}`)).join(lineEnding);
}
function escapeRegex(string) {
return string.replace(/[\[\](){}?*+\^$\\.|\-]/g, '\\$&');
}
function trim(input, characters) {
characters = escapeRegex(characters);
return input.replace(new RegExp('^[' + characters + ']+|[' + characters + ']+$', 'g'), '');
}
//# sourceMappingURL=format-import-statements.js.map