UNPKG

@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
"use strict"; 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'; }