UNPKG

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