@serverless-guru/prettier-plugin-import-order
Version:
A prettier plugin to sort TS/JS import declarations by provided Regular Expression order
103 lines (102 loc) • 5.27 kB
JavaScript
;
var __assign = (this && this.__assign) || function () {
__assign = Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
return __assign.apply(this, arguments);
};
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
if (ar || !(i in from)) {
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
ar[i] = from[i];
}
}
return to.concat(ar || Array.prototype.slice.call(from));
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.getSortedNodesByImportOrder = void 0;
var lodash_clone_1 = __importDefault(require("lodash.clone"));
var constants_1 = require("../constants");
var natural_sort_1 = require("../natural-sort");
var get_import_nodes_matched_group_1 = require("./get-import-nodes-matched-group");
var get_sorted_import_specifiers_1 = require("./get-sorted-import-specifiers");
var get_sorted_nodes_group_1 = require("./get-sorted-nodes-group");
var getSortedNodesByImportOrder = function (nodes, options) {
natural_sort_1.naturalSort.insensitive = options.importOrderCaseInsensitive;
var importOrder = options.importOrder;
var importOrderSeparation = options.importOrderSeparation, importOrderSortIndividualImports = options.importOrderSortIndividualImports, importOrderTypeImportsToTop = options.importOrderTypeImportsToTop, importOrderTypeImportsToBottom = options.importOrderTypeImportsToBottom, importOrderNamespaceImportsToGroupTop = options.importOrderNamespaceImportsToGroupTop, importOrderBuiltinModulesToTop = options.importOrderBuiltinModulesToTop;
var manyImportStatements = nodes.map(lodash_clone_1.default);
var finalImportStmntGroups = [];
if (!importOrder.includes(constants_1.THIRD_PARTY_MODULES_SPECIAL_WORD)) {
importOrder = __spreadArray([constants_1.THIRD_PARTY_MODULES_SPECIAL_WORD], importOrder, true);
}
if (importOrderBuiltinModulesToTop) {
importOrder = __spreadArray([constants_1.BUILTIN_MODULES], importOrder, true);
}
var handleTypes = false;
if (importOrderTypeImportsToTop) {
handleTypes = true;
importOrder = __spreadArray([constants_1.TYPE_IMPORTS_SPECIAL_WORD], importOrder, true);
}
if (importOrderTypeImportsToBottom) {
handleTypes = true;
importOrder = __spreadArray(__spreadArray([], importOrder, true), [constants_1.TYPE_IMPORTS_SPECIAL_WORD], false);
}
var importStatementsByRegexGroup = importOrder.reduce(function (groups, regexp) {
var _a;
return isNewLineSeparator(regexp)
? groups
: __assign(__assign({}, groups), (_a = {}, _a[regexp] = [], _a));
}, {});
var importOrderWithoutEmptyLinesOrThirdPartyRegex = importOrder.filter(function (group) { return !isNewLineSeparator(group) && group !== constants_1.THIRD_PARTY_MODULES_SPECIAL_WORD; });
for (var _i = 0, manyImportStatements_1 = manyImportStatements; _i < manyImportStatements_1.length; _i++) {
var importStatement = manyImportStatements_1[_i];
var matchedGroup = (0, get_import_nodes_matched_group_1.getMatchedGroup)(importStatement, importOrderWithoutEmptyLinesOrThirdPartyRegex, handleTypes);
importStatementsByRegexGroup[matchedGroup].push(importStatement);
}
for (var _a = 0, importOrder_1 = importOrder; _a < importOrder_1.length; _a++) {
var group = importOrder_1[_a];
if (isNewLineSeparator(group)) {
var previousStatement = finalImportStmntGroups[finalImportStmntGroups.length - 1];
if (!previousStatement) {
continue;
}
if (isNodeANewline(previousStatement)) {
continue;
}
finalImportStmntGroups.push(constants_1.newLineNode);
continue;
}
var importStatements = importStatementsByRegexGroup[group];
if (importStatements.length === 0) {
continue;
}
var sortedInsideGroup = (0, get_sorted_nodes_group_1.sortImportsInSingleGroup)(importStatements, {
importOrderNamespaceImportsToGroupTop: importOrderNamespaceImportsToGroupTop,
});
if (importOrderSortIndividualImports) {
sortedInsideGroup.forEach(function (node) { return (0, get_sorted_import_specifiers_1.sortImportsInASingleImportStmnt)(node); });
}
finalImportStmntGroups.push.apply(finalImportStmntGroups, sortedInsideGroup);
if (importOrderSeparation) {
finalImportStmntGroups.push(constants_1.newLineNode);
}
}
return finalImportStmntGroups;
};
exports.getSortedNodesByImportOrder = getSortedNodesByImportOrder;
function isNewLineSeparator(pattern) {
return pattern.trim() === '';
}
function isNodeANewline(node) {
return node.type === 'ExpressionStatement';
}