eslint-plugin-beautiful-sort
Version:
eslint plugin for imports sort by their type
84 lines • 2.96 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.parseStringSpecial = exports.reportErrors = exports.getSortedImports = exports.createSortTable = exports.isEmpty = exports.getImports = void 0;
const import_node_1 = require("./import-node");
const IMPORT_AST_TYPE = 'ImportDeclaration';
const getImports = (program) => {
return program.body.filter((node) => {
return node.type === IMPORT_AST_TYPE;
});
};
exports.getImports = getImports;
const isEmpty = (array) => {
return array.length === 0;
};
exports.isEmpty = isEmpty;
const createSortTable = (order) => {
return order.reduce((state, key, idx) => {
state[key] = idx;
return state;
}, { rest: order.length - 1 });
};
exports.createSortTable = createSortTable;
const getSortedImports = (imports, params) => {
return imports
.map((node) => new import_node_1.ImportNode(node, params))
.sort((a, b) => a.compare(b))
.map((importNode) => importNode.getNode());
};
exports.getSortedImports = getSortedImports;
const reportErrors = (context, program, imports, sortedImports) => {
const sourceCode = context.getSourceCode();
const shouldFix = sortedImports.some((node, i) => {
return imports[i] !== node;
});
if (!shouldFix)
return;
const message = `Replace imports to: ${sortedImports
.map((node) => `\`${sourceCode.getText(node).replace(';', '')}\``)
.join(', ')}`;
const end = sortedImports.at(-1)?.loc?.end;
const start = program.loc?.start;
context.report({
loc: {
start,
end,
},
message,
fix: function* (fixer) {
for (let i = 0; i < sortedImports.length; i++) {
const node = sortedImports[i];
const found = imports[i];
if (found !== node) {
yield fixer.replaceText(found, sourceCode.getText(node));
}
}
},
});
};
exports.reportErrors = reportErrors;
const SLASH = '/';
const START_SLASH_REGEXP = /^\//;
const END_SLASH_REGEXP = /\/$/;
const isRegexp = (target) => {
const isStartsWithSlash = target[0] === SLASH;
const isEndsWithSlash = target[target.length - 1] === SLASH;
return isStartsWithSlash && isEndsWithSlash;
};
const specialStringRegexpToRegexp = (specialRegexp) => {
const regexpString = specialRegexp.replace(START_SLASH_REGEXP, '').replace(END_SLASH_REGEXP, '');
return new RegExp(regexpString);
};
const specialStringToRegexp = (special) => {
return new RegExp(`^${special}$`);
};
const parseStringSpecial = (stringSpecial) => {
return stringSpecial.map((string) => {
if (isRegexp(string)) {
return specialStringRegexpToRegexp(string);
}
return specialStringToRegexp(string);
});
};
exports.parseStringSpecial = parseStringSpecial;
//# sourceMappingURL=sort-imports.utils.js.map