@ianvs/prettier-plugin-sort-imports
Version:
A prettier plugins to sort imports in provided RegEx order
61 lines (60 loc) • 2.34 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;
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;