@leanix/import-sort-style
Version:
Custom LeanIX style for JS/TS import-sort package
56 lines (55 loc) • 2.67 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
function isAbsoluteLocalPath(importItem, options) {
if (options === null || options === void 0 ? void 0 : options.prefixes) {
return options.prefixes.some(prefix => importItem.moduleName.startsWith(prefix));
}
return false;
}
function absoluteLocalPathSorting(module1, module2, options) {
if (options === null || options === void 0 ? void 0 : options.prefixes) {
const index1 = options.prefixes.findIndex(prefix => module1.startsWith(prefix));
const index2 = options.prefixes.findIndex(prefix => module2.startsWith(prefix));
return index1 === index2 ? caseInsensitiveNaturalOrder(module1, module2) : index1 - index2;
}
return caseInsensitiveNaturalOrder(module1, module2);
}
function caseInsensitiveNaturalOrder(first, second) {
return first.toLocaleLowerCase().localeCompare(second.toLocaleLowerCase(), 'en');
}
function default_1(styleApi, _file, options) {
const { alias, and, not, dotSegmentCount, hasNoMember, isAbsoluteModule, isNodeModule, isRelativeModule, moduleName } = styleApi;
return [
// Third-party modules with side effects
{ match: and(hasNoMember, isAbsoluteModule, (importItem) => !isAbsoluteLocalPath(importItem, options)) },
// Local, absolute modules with side-effects
{ match: and(hasNoMember, isAbsoluteModule) },
// Local, relative modules with side effects
{ match: and(hasNoMember, isRelativeModule) },
// Third-party modules
{
match: and(isAbsoluteModule, not(isNodeModule), (importItem) => !isAbsoluteLocalPath(importItem, options)),
sort: moduleName(caseInsensitiveNaturalOrder),
sortNamedMembers: alias(caseInsensitiveNaturalOrder)
},
// Built-in Node.js modules)
{
match: and(isAbsoluteModule, isNodeModule, (importItem) => !isAbsoluteLocalPath(importItem, options)),
sort: moduleName(caseInsensitiveNaturalOrder),
sortNamedMembers: alias(caseInsensitiveNaturalOrder)
},
// Local, absolute modules
{
match: (importItem) => isAbsoluteLocalPath(importItem, options),
sort: moduleName((m1, m2) => absoluteLocalPathSorting(m1, m2, options)),
sortNamedMembers: alias(caseInsensitiveNaturalOrder)
},
// Local, relative modules
{
match: isRelativeModule,
sort: [dotSegmentCount, moduleName(caseInsensitiveNaturalOrder)],
sortNamedMembers: alias(caseInsensitiveNaturalOrder)
}
];
}
exports.default = default_1;