forked from trivago/prettier-plugin-sort-imports
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathpreprocessor.ts
More file actions
53 lines (45 loc) · 1.81 KB
/
preprocessor.ts
File metadata and controls
53 lines (45 loc) · 1.81 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
import { ParserOptions, parse as babelParser } from '@babel/parser';
import { Directive, ImportDeclaration } from '@babel/types';
import { PrettierOptions } from '../types';
import { extractASTNodes } from '../utils/extract-ast-nodes';
import { getCodeFromAst } from '../utils/get-code-from-ast';
import { getExperimentalParserPlugins } from '../utils/get-experimental-parser-plugins';
import { getSortedNodes } from '../utils/get-sorted-nodes';
import { isSortImportsIgnored } from '../utils/is-sort-imports-ignored';
export function preprocessor(code: string, options: PrettierOptions) {
const {
importOrderParserPlugins,
importOrder,
importOrderCaseInsensitive,
importOrderSeparation,
importOrderGroupNamespaceSpecifiers,
importOrderSortSpecifiers,
importOrderSideEffects,
importOrderImportAttributesKeyword,
} = options;
const parserOptions: ParserOptions = {
sourceType: 'module',
plugins: getExperimentalParserPlugins(importOrderParserPlugins),
};
const ast = babelParser(code, parserOptions);
const interpreter = ast.program.interpreter;
const {
importNodes,
directives,
}: { importNodes: ImportDeclaration[]; directives: Directive[] } =
extractASTNodes(ast);
// short-circuit if there are no import declaration
if (importNodes.length === 0) return code;
if (isSortImportsIgnored(importNodes)) return code;
const allImports = getSortedNodes(importNodes, {
importOrder,
importOrderCaseInsensitive,
importOrderSeparation,
importOrderGroupNamespaceSpecifiers,
importOrderSortSpecifiers,
importOrderSideEffects,
});
return getCodeFromAst(allImports, directives, code, interpreter, {
importOrderImportAttributesKeyword,
});
}