UNPKG

@ianvs/prettier-plugin-sort-imports

Version:

A prettier plugins to sort imports in provided RegEx order

61 lines (60 loc) 2.34 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; const parser_1 = require("@babel/parser"); const traverse_1 = __importDefault(require("@babel/traverse")); const types_1 = require("@babel/types"); const get_code_from_ast_1 = require("../utils/get-code-from-ast"); const get_sorted_nodes_1 = require("../utils/get-sorted-nodes"); const normalize_plugin_options_1 = require("../utils/normalize-plugin-options"); function preprocessor(code, options) { const { plugins, ...remainingOptions } = (0, normalize_plugin_options_1.examineAndNormalizePluginOptions)(options); const parserOptions = { sourceType: 'module', attachComment: true, plugins, }; // Astro component scripts allow returning a response if (options.parentParser === 'astro') { parserOptions.allowReturnOutsideFunction = true; } let ast; try { ast = (0, parser_1.parse)(code, parserOptions); } catch (_) { console.error(' [error] [prettier-plugin-sort-imports]: import sorting aborted due to babel parsing error.'); return code; } const directives = ast.program.directives; const interpreter = ast.program.interpreter; const allOriginalImportNodes = []; (0, traverse_1.default)(ast, { ImportDeclaration(path) { const tsModuleParent = path.findParent((p) => (0, types_1.isTSModuleDeclaration)(p.node)); if (!tsModuleParent) { allOriginalImportNodes.push(path.node); } }, }); // short-circuit if there are no import declarations if (allOriginalImportNodes.length === 0) { return code; } // short-circuit if importOrder is an empty array (can be used to disable plugin) if (!remainingOptions.importOrder.length) { return code; } const nodesToOutput = (0, get_sorted_nodes_1.getSortedNodes)(allOriginalImportNodes, remainingOptions); return (0, get_code_from_ast_1.getCodeFromAst)({ nodesToOutput, allOriginalImportNodes, originalCode: code, directives, interpreter, }); } exports.preprocessor = preprocessor;