@serverless-guru/prettier-plugin-import-order
Version:
A prettier plugin to sort TS/JS import declarations by provided Regular Expression order
57 lines (56 loc) • 3.42 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.preprocessor = void 0;
var parser_1 = require("@babel/parser");
var traverse_1 = __importDefault(require("@babel/traverse"));
var types_1 = require("@babel/types");
var get_code_from_ast_1 = require("../utils/get-code-from-ast");
var get_experimental_parser_plugins_1 = require("../utils/get-experimental-parser-plugins");
var get_sorted_nodes_1 = require("../utils/get-sorted-nodes");
function preprocessor(code, options) {
var importOrderParserPlugins = options.importOrderParserPlugins, importOrder = options.importOrder, importOrderBuiltinModulesToTop = options.importOrderBuiltinModulesToTop, importOrderTypeImportsToTop = options.importOrderTypeImportsToTop, importOrderTypeImportsToBottom = options.importOrderTypeImportsToBottom, importOrderCaseInsensitive = options.importOrderCaseInsensitive, importOrderNamespaceImportsToGroupTop = options.importOrderNamespaceImportsToGroupTop, importOrderMergeDuplicateImports = options.importOrderMergeDuplicateImports, importOrderSeparation = options.importOrderSeparation, importOrderSortIndividualImports = options.importOrderSortIndividualImports;
var allOriginalImportNodes = [];
var parserOptions = {
sourceType: 'module',
plugins: (0, get_experimental_parser_plugins_1.getExperimentalParserPlugins)(importOrderParserPlugins),
};
var ast = (0, parser_1.parse)(code, parserOptions);
var directives = ast.program.directives;
var interpreter = ast.program.interpreter;
(0, traverse_1.default)(ast, {
ImportDeclaration: function (path) {
var tsModuleParent = path.findParent(function (p) { return (0, types_1.isTSModuleDeclaration)(p); });
if (!tsModuleParent) {
allOriginalImportNodes.push(path.node);
}
},
});
if (importOrderTypeImportsToTop && importOrderTypeImportsToBottom) {
console.warn("[@serverless-guru/prettier-plugin-import-order]: `importOrderTypeImportsToTop` and `importOrderTypeImportsToBottom` can't both be true. `importOrderTypeImportsToTop` will be used.");
}
if (allOriginalImportNodes.length === 0) {
return code;
}
var nodesToOutput = (0, get_sorted_nodes_1.getSortedNodes)(allOriginalImportNodes, {
importOrder: importOrder,
importOrderBuiltinModulesToTop: importOrderBuiltinModulesToTop,
importOrderTypeImportsToTop: importOrderTypeImportsToTop,
importOrderTypeImportsToBottom: importOrderTypeImportsToBottom && importOrderTypeImportsToTop ? false : importOrderTypeImportsToBottom,
importOrderCaseInsensitive: importOrderCaseInsensitive,
importOrderNamespaceImportsToGroupTop: importOrderNamespaceImportsToGroupTop,
importOrderMergeDuplicateImports: importOrderMergeDuplicateImports,
importOrderSeparation: importOrderSeparation,
importOrderSortIndividualImports: importOrderSortIndividualImports,
});
return (0, get_code_from_ast_1.getCodeFromAst)({
nodesToOutput: nodesToOutput,
allOriginalImportNodes: allOriginalImportNodes,
originalCode: code,
directives: directives,
interpreter: interpreter,
});
}
exports.preprocessor = preprocessor;