@depup/babel__eslint-parser 7.28.6-depup.0 → 8.0.5-depup.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +6 -5
- package/changes.json +10 -6
- package/lib/configuration-shared.js +363 -0
- package/lib/configuration-shared.js.map +1 -0
- package/lib/index.d.ts +15 -0
- package/lib/{analyze-scope.cjs → index.js} +115 -56
- package/lib/index.js.map +1 -0
- package/lib/worker/index.js +88 -0
- package/lib/worker/index.js.map +1 -0
- package/package.json +30 -31
- package/lib/analyze-scope.cjs.map +0 -1
- package/lib/client.cjs +0 -104
- package/lib/client.cjs.map +0 -1
- package/lib/configuration.cjs +0 -23
- package/lib/configuration.cjs.map +0 -1
- package/lib/convert/convertAST.cjs +0 -134
- package/lib/convert/convertAST.cjs.map +0 -1
- package/lib/convert/convertComments.cjs +0 -10
- package/lib/convert/convertComments.cjs.map +0 -1
- package/lib/convert/convertTokens.cjs +0 -158
- package/lib/convert/convertTokens.cjs.map +0 -1
- package/lib/convert/index.cjs +0 -25
- package/lib/convert/index.cjs.map +0 -1
- package/lib/experimental-worker.cjs +0 -32
- package/lib/experimental-worker.cjs.map +0 -1
- package/lib/index.cjs +0 -32
- package/lib/index.cjs.map +0 -1
- package/lib/parse.cjs +0 -37
- package/lib/parse.cjs.map +0 -1
- package/lib/utils/eslint-version.cjs +0 -5
- package/lib/utils/eslint-version.cjs.map +0 -1
- package/lib/worker/ast-info.cjs +0 -38
- package/lib/worker/ast-info.cjs.map +0 -1
- package/lib/worker/babel-core.cjs +0 -19
- package/lib/worker/babel-core.cjs.map +0 -1
- package/lib/worker/configuration.cjs +0 -99
- package/lib/worker/configuration.cjs.map +0 -1
- package/lib/worker/extract-parser-options-plugin.cjs +0 -11
- package/lib/worker/extract-parser-options-plugin.cjs.map +0 -1
- package/lib/worker/handle-message.cjs +0 -31
- package/lib/worker/handle-message.cjs.map +0 -1
- package/lib/worker/index.cjs +0 -39
- package/lib/worker/index.cjs.map +0 -1
- package/lib/worker/maybeParse.cjs +0 -56
- package/lib/worker/maybeParse.cjs.map +0 -1
- package/lib/worker/maybeParseSync.cjs +0 -48
- package/lib/worker/maybeParseSync.cjs.map +0 -1
- package/types.d.cts +0 -9
package/README.md
CHANGED
|
@@ -13,17 +13,18 @@ npm install @depup/babel__eslint-parser
|
|
|
13
13
|
|
|
14
14
|
| Field | Value |
|
|
15
15
|
|-------|-------|
|
|
16
|
-
| Original | [@babel/eslint-parser](https://www.npmjs.com/package/@babel/eslint-parser) @
|
|
17
|
-
| Processed | 2026-
|
|
16
|
+
| Original | [@babel/eslint-parser](https://www.npmjs.com/package/@babel/eslint-parser) @ 8.0.5 |
|
|
17
|
+
| Processed | 2026-09-11 |
|
|
18
18
|
| Smoke test | passed |
|
|
19
|
-
| Deps updated |
|
|
19
|
+
| Deps updated | 3 |
|
|
20
20
|
|
|
21
21
|
## Dependency Changes
|
|
22
22
|
|
|
23
23
|
| Dependency | From | To |
|
|
24
24
|
|------------|------|-----|
|
|
25
|
-
| eslint-
|
|
26
|
-
|
|
|
25
|
+
| eslint-scope | ^9.1.0 | ^9.1.2 |
|
|
26
|
+
| eslint-visitor-keys | ^5.0.0 | ^5.0.1 |
|
|
27
|
+
| verkit | ^0.3.2 | ^0.4.0 |
|
|
27
28
|
|
|
28
29
|
---
|
|
29
30
|
|
package/changes.json
CHANGED
|
@@ -1,14 +1,18 @@
|
|
|
1
1
|
{
|
|
2
2
|
"bumped": {
|
|
3
|
+
"eslint-scope": {
|
|
4
|
+
"from": "^9.1.0",
|
|
5
|
+
"to": "^9.1.2"
|
|
6
|
+
},
|
|
3
7
|
"eslint-visitor-keys": {
|
|
4
|
-
"from": "^
|
|
8
|
+
"from": "^5.0.0",
|
|
5
9
|
"to": "^5.0.1"
|
|
6
10
|
},
|
|
7
|
-
"
|
|
8
|
-
"from": "^
|
|
9
|
-
"to": "^
|
|
11
|
+
"verkit": {
|
|
12
|
+
"from": "^0.3.2",
|
|
13
|
+
"to": "^0.4.0"
|
|
10
14
|
}
|
|
11
15
|
},
|
|
12
|
-
"timestamp": "2026-
|
|
13
|
-
"totalUpdated":
|
|
16
|
+
"timestamp": "2026-09-11T00:32:19.429Z",
|
|
17
|
+
"totalUpdated": 3
|
|
14
18
|
}
|
|
@@ -0,0 +1,363 @@
|
|
|
1
|
+
import path from 'node:path';
|
|
2
|
+
import { Worker, SHARE_ENV, MessageChannel, receiveMessageOnPort } from 'node:worker_threads';
|
|
3
|
+
import { ESLint } from 'eslint';
|
|
4
|
+
import { KEYS } from 'eslint-visitor-keys';
|
|
5
|
+
import { types, tokTypes, loadPartialConfigAsync } from '@babel/core';
|
|
6
|
+
|
|
7
|
+
const ACTIONS = {
|
|
8
|
+
MAYBE_PARSE: "MAYBE_PARSE"
|
|
9
|
+
};
|
|
10
|
+
class Client {
|
|
11
|
+
#send;
|
|
12
|
+
constructor(send) {
|
|
13
|
+
this.#send = send;
|
|
14
|
+
}
|
|
15
|
+
maybeParse(code, options) {
|
|
16
|
+
return this.#send(ACTIONS.MAYBE_PARSE, {
|
|
17
|
+
code,
|
|
18
|
+
options
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
class WorkerClient extends Client {
|
|
23
|
+
#worker = new Worker(path.resolve(import.meta.dirname, "../lib/worker/index.js"), {
|
|
24
|
+
env: SHARE_ENV
|
|
25
|
+
});
|
|
26
|
+
constructor() {
|
|
27
|
+
super((action, payload) => {
|
|
28
|
+
const signal = new Int32Array(new SharedArrayBuffer(8));
|
|
29
|
+
const subChannel = new MessageChannel();
|
|
30
|
+
this.#worker.postMessage({
|
|
31
|
+
signal,
|
|
32
|
+
port: subChannel.port1,
|
|
33
|
+
action,
|
|
34
|
+
payload
|
|
35
|
+
}, [subChannel.port1]);
|
|
36
|
+
Atomics.wait(signal, 0, 0);
|
|
37
|
+
const {
|
|
38
|
+
message
|
|
39
|
+
} = receiveMessageOnPort(subChannel.port2);
|
|
40
|
+
if (message.error) throw Object.assign(message.error, message.errorData);else return message.result;
|
|
41
|
+
});
|
|
42
|
+
this.#worker.unref();
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
function convertToken(token, source, tl) {
|
|
47
|
+
const {
|
|
48
|
+
type
|
|
49
|
+
} = token;
|
|
50
|
+
const {
|
|
51
|
+
label
|
|
52
|
+
} = type;
|
|
53
|
+
const newToken = token;
|
|
54
|
+
newToken.range = [token.start, token.end];
|
|
55
|
+
if (label === tl.name) {
|
|
56
|
+
const tokenValue = token.value;
|
|
57
|
+
if (tokenValue === "let" || tokenValue === "static" || tokenValue === "yield") {
|
|
58
|
+
newToken.type = "Keyword";
|
|
59
|
+
} else {
|
|
60
|
+
newToken.type = "Identifier";
|
|
61
|
+
}
|
|
62
|
+
} else if (label === tl.semi || label === tl.comma || label === tl.parenL || label === tl.parenR || label === tl.braceL || label === tl.braceR || label === tl.slash || label === tl.dot || label === tl.bracketL || label === tl.bracketR || label === tl.ellipsis || label === tl.arrow || label === tl.pipeline || label === tl.star || label === tl.incDec || label === tl.colon || label === tl.question || label === tl.template || label === tl.backQuote || label === tl.dollarBraceL || label === tl.at || label === tl.logicalOR || label === tl.logicalAND || label === tl.nullishCoalescing || label === tl.bitwiseOR || label === tl.bitwiseXOR || label === tl.bitwiseAND || label === tl.equality || label === tl.relational || label === tl.bitShift || label === tl.plusMin || label === tl.modulo || label === tl.exponent || label === tl.bang || label === tl.tilde || label === tl.doubleColon || label === tl.hash || label === tl.questionDot || label === tl.braceHashL || label === tl.braceBarL || label === tl.braceBarR || label === tl.bracketHashL || label === tl.bracketBarL || label === tl.bracketBarR || label === tl.doubleCaret || label === tl.doubleAt || type.isAssign) {
|
|
63
|
+
newToken.type = "Punctuator";
|
|
64
|
+
newToken.value ??= label;
|
|
65
|
+
} else if (label === tl.jsxTagStart) {
|
|
66
|
+
newToken.type = "Punctuator";
|
|
67
|
+
newToken.value = "<";
|
|
68
|
+
} else if (label === tl.jsxTagEnd) {
|
|
69
|
+
newToken.type = "Punctuator";
|
|
70
|
+
newToken.value = ">";
|
|
71
|
+
} else if (label === tl.jsxName) {
|
|
72
|
+
newToken.type = "JSXIdentifier";
|
|
73
|
+
} else if (label === tl.jsxText) {
|
|
74
|
+
newToken.type = "JSXText";
|
|
75
|
+
} else if (type.keyword === "null") {
|
|
76
|
+
newToken.type = "Null";
|
|
77
|
+
} else if (type.keyword === "false" || type.keyword === "true") {
|
|
78
|
+
newToken.type = "Boolean";
|
|
79
|
+
} else if (type.keyword) {
|
|
80
|
+
newToken.type = "Keyword";
|
|
81
|
+
} else if (label === tl.num) {
|
|
82
|
+
newToken.type = "Numeric";
|
|
83
|
+
newToken.value = source.slice(token.start, token.end);
|
|
84
|
+
} else if (label === tl.string) {
|
|
85
|
+
newToken.type = "String";
|
|
86
|
+
newToken.value = source.slice(token.start, token.end);
|
|
87
|
+
} else if (label === tl.regexp) {
|
|
88
|
+
newToken.type = "RegularExpression";
|
|
89
|
+
const value = token.value;
|
|
90
|
+
newToken.regex = {
|
|
91
|
+
pattern: value.pattern,
|
|
92
|
+
flags: value.flags
|
|
93
|
+
};
|
|
94
|
+
newToken.value = `/${value.pattern}/${value.flags}`;
|
|
95
|
+
} else if (label === tl.bigint) {
|
|
96
|
+
newToken.type = "Numeric";
|
|
97
|
+
newToken.value = `${token.value}n`;
|
|
98
|
+
} else if (label === tl.privateName) {
|
|
99
|
+
newToken.type = "PrivateIdentifier";
|
|
100
|
+
} else if (label === tl.templateNonTail || label === tl.templateTail || label === tl.Template) {
|
|
101
|
+
newToken.type = "Template";
|
|
102
|
+
}
|
|
103
|
+
return newToken;
|
|
104
|
+
}
|
|
105
|
+
function convertTokens(tokens, code, tokLabels) {
|
|
106
|
+
const result = [];
|
|
107
|
+
const templateTypeMergedTokens = tokens;
|
|
108
|
+
for (let i = 0, {
|
|
109
|
+
length
|
|
110
|
+
} = templateTypeMergedTokens; i < length - 1; i++) {
|
|
111
|
+
const token = templateTypeMergedTokens[i];
|
|
112
|
+
const tokenType = token.type;
|
|
113
|
+
if (tokenType === "CommentLine" || tokenType === "CommentBlock") {
|
|
114
|
+
continue;
|
|
115
|
+
}
|
|
116
|
+
result.push(convertToken(token, code, tokLabels));
|
|
117
|
+
}
|
|
118
|
+
return result;
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
function convertComments(comments) {
|
|
122
|
+
for (const comment of comments) {
|
|
123
|
+
comment.type = comment.type === "CommentBlock" ? "Block" : "Line";
|
|
124
|
+
comment.range ||= [comment.start, comment.end];
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
const eslintVersion = parseInt(ESLint.version, 10);
|
|
129
|
+
|
|
130
|
+
function* it(children) {
|
|
131
|
+
if (Array.isArray(children)) yield* children;else yield children;
|
|
132
|
+
}
|
|
133
|
+
function traverse(node, visitorKeys, visitor) {
|
|
134
|
+
const {
|
|
135
|
+
type
|
|
136
|
+
} = node;
|
|
137
|
+
if (!type) return;
|
|
138
|
+
const keys = visitorKeys[type];
|
|
139
|
+
if (!keys) return;
|
|
140
|
+
for (const key of keys) {
|
|
141
|
+
for (const child of it(node[key])) {
|
|
142
|
+
if (child && typeof child === "object") {
|
|
143
|
+
visitor.enter(child);
|
|
144
|
+
traverse(child, visitorKeys, visitor);
|
|
145
|
+
visitor.exit(child);
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
const convertNodesVisitor = {
|
|
151
|
+
enter(node) {
|
|
152
|
+
if (node.innerComments) {
|
|
153
|
+
delete node.innerComments;
|
|
154
|
+
}
|
|
155
|
+
if (node.trailingComments) {
|
|
156
|
+
delete node.trailingComments;
|
|
157
|
+
}
|
|
158
|
+
if (node.leadingComments) {
|
|
159
|
+
delete node.leadingComments;
|
|
160
|
+
}
|
|
161
|
+
},
|
|
162
|
+
exit(node) {
|
|
163
|
+
if (node.extra) {
|
|
164
|
+
delete node.extra;
|
|
165
|
+
}
|
|
166
|
+
if (node.loc.identifierName) {
|
|
167
|
+
delete node.loc.identifierName;
|
|
168
|
+
}
|
|
169
|
+
if (node.type === "TypeParameter") {
|
|
170
|
+
node.type = "Identifier";
|
|
171
|
+
node.typeAnnotation = node.bound;
|
|
172
|
+
delete node.bound;
|
|
173
|
+
}
|
|
174
|
+
if (node.type === "QualifiedTypeIdentifier") {
|
|
175
|
+
delete node.id;
|
|
176
|
+
}
|
|
177
|
+
if (node.type === "ObjectTypeProperty") {
|
|
178
|
+
delete node.key;
|
|
179
|
+
}
|
|
180
|
+
if (node.type === "ObjectTypeIndexer") {
|
|
181
|
+
delete node.id;
|
|
182
|
+
}
|
|
183
|
+
if (node.type === "FunctionTypeParam") {
|
|
184
|
+
delete node.name;
|
|
185
|
+
}
|
|
186
|
+
if (node.type === "ImportDeclaration") {
|
|
187
|
+
delete node.isType;
|
|
188
|
+
}
|
|
189
|
+
if (node.type === "TemplateLiteral" || node.type === "TSTemplateLiteralType") {
|
|
190
|
+
for (let i = 0; i < node.quasis.length; i++) {
|
|
191
|
+
const q = node.quasis[i];
|
|
192
|
+
q.range[0] -= 1;
|
|
193
|
+
if (q.tail) {
|
|
194
|
+
q.range[1] += 1;
|
|
195
|
+
} else {
|
|
196
|
+
q.range[1] += 2;
|
|
197
|
+
}
|
|
198
|
+
q.loc.start.column -= 1;
|
|
199
|
+
if (q.tail) {
|
|
200
|
+
q.loc.end.column += 1;
|
|
201
|
+
} else {
|
|
202
|
+
q.loc.end.column += 2;
|
|
203
|
+
}
|
|
204
|
+
q.start -= 1;
|
|
205
|
+
if (q.tail) {
|
|
206
|
+
q.end += 1;
|
|
207
|
+
} else {
|
|
208
|
+
q.end += 2;
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
};
|
|
214
|
+
function convertNodes(ast, visitorKeys) {
|
|
215
|
+
traverse(ast, visitorKeys, convertNodesVisitor);
|
|
216
|
+
}
|
|
217
|
+
function convertProgramNode(ast) {
|
|
218
|
+
const body = ast.program.body;
|
|
219
|
+
Object.assign(ast, {
|
|
220
|
+
type: "Program",
|
|
221
|
+
sourceType: ast.program.sourceType,
|
|
222
|
+
body
|
|
223
|
+
});
|
|
224
|
+
delete ast.program;
|
|
225
|
+
delete ast.errors;
|
|
226
|
+
if (eslintVersion < 10) {
|
|
227
|
+
if (ast.comments.length) {
|
|
228
|
+
const lastComment = ast.comments[ast.comments.length - 1];
|
|
229
|
+
if (ast.tokens.length) {
|
|
230
|
+
const lastToken = ast.tokens[ast.tokens.length - 1];
|
|
231
|
+
if (lastComment.end > lastToken.end) {
|
|
232
|
+
ast.range[1] = lastToken.end;
|
|
233
|
+
ast.loc.end.line = lastToken.loc.end.line;
|
|
234
|
+
ast.loc.end.column = lastToken.loc.end.column;
|
|
235
|
+
ast.end = lastToken.end;
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
} else {
|
|
239
|
+
if (!ast.tokens.length) {
|
|
240
|
+
ast.loc.start.line = 1;
|
|
241
|
+
ast.loc.end.line = 1;
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
if (body?.length) {
|
|
245
|
+
ast.loc.start.line = body[0].loc.start.line;
|
|
246
|
+
ast.range[0] = body[0].start;
|
|
247
|
+
ast.start = body[0].start;
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
function convertAST(ast, visitorKeys) {
|
|
252
|
+
convertNodes(ast, visitorKeys);
|
|
253
|
+
convertProgramNode(ast);
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
function convertFile(ast, code, tokLabels, visitorKeys) {
|
|
257
|
+
ast.tokens = convertTokens(ast.tokens, code, tokLabels);
|
|
258
|
+
convertComments(ast.comments);
|
|
259
|
+
convertAST(ast, visitorKeys);
|
|
260
|
+
return ast;
|
|
261
|
+
}
|
|
262
|
+
function convertError(err) {
|
|
263
|
+
if (err instanceof SyntaxError) {
|
|
264
|
+
err.lineNumber = err.loc.line;
|
|
265
|
+
err.column = err.loc.column;
|
|
266
|
+
}
|
|
267
|
+
return err;
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
let visitorKeys;
|
|
271
|
+
function getVisitorKeys() {
|
|
272
|
+
if (!visitorKeys) {
|
|
273
|
+
const newTypes = {
|
|
274
|
+
ChainExpression: KEYS.ChainExpression,
|
|
275
|
+
ImportExpression: KEYS.ImportExpression,
|
|
276
|
+
Literal: KEYS.Literal,
|
|
277
|
+
MethodDefinition: ["decorators"].concat(KEYS.MethodDefinition),
|
|
278
|
+
Property: ["decorators"].concat(KEYS.Property),
|
|
279
|
+
PropertyDefinition: ["decorators", "typeAnnotation"].concat(KEYS.PropertyDefinition)
|
|
280
|
+
};
|
|
281
|
+
const conflictTypes = {
|
|
282
|
+
ExportAllDeclaration: KEYS.ExportAllDeclaration
|
|
283
|
+
};
|
|
284
|
+
visitorKeys = {
|
|
285
|
+
...newTypes,
|
|
286
|
+
...types.VISITOR_KEYS,
|
|
287
|
+
...conflictTypes
|
|
288
|
+
};
|
|
289
|
+
}
|
|
290
|
+
return visitorKeys;
|
|
291
|
+
}
|
|
292
|
+
let tokLabels;
|
|
293
|
+
function getTokLabels() {
|
|
294
|
+
return tokLabels ||= Object.fromEntries(Object.entries(tokTypes).map(([key, tok]) => [key, tok.label]));
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
function getParserPlugins(babelOptions) {
|
|
298
|
+
const babelParserPlugins = babelOptions.parserOpts?.plugins ?? [];
|
|
299
|
+
const estreeOptions = {
|
|
300
|
+
classFeatures: true
|
|
301
|
+
};
|
|
302
|
+
for (const plugin of babelParserPlugins) {
|
|
303
|
+
if (Array.isArray(plugin) && plugin[0] === "estree") {
|
|
304
|
+
Object.assign(estreeOptions, plugin[1]);
|
|
305
|
+
break;
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
return [["estree", estreeOptions], ...babelParserPlugins];
|
|
309
|
+
}
|
|
310
|
+
function normalizeParserOptions(options) {
|
|
311
|
+
return {
|
|
312
|
+
sourceType: options.sourceType,
|
|
313
|
+
filename: options.filePath,
|
|
314
|
+
...options.babelOptions,
|
|
315
|
+
parserOpts: {
|
|
316
|
+
...(options.sourceType !== "commonjs" ? {
|
|
317
|
+
allowReturnOutsideFunction: options.ecmaFeatures?.globalReturn ?? false
|
|
318
|
+
} : {}),
|
|
319
|
+
...options.babelOptions.parserOpts,
|
|
320
|
+
plugins: getParserPlugins(options.babelOptions),
|
|
321
|
+
attachComment: false,
|
|
322
|
+
ranges: true,
|
|
323
|
+
tokens: true
|
|
324
|
+
},
|
|
325
|
+
caller: {
|
|
326
|
+
name: "@babel/eslint-parser",
|
|
327
|
+
...options.babelOptions.caller
|
|
328
|
+
}
|
|
329
|
+
};
|
|
330
|
+
}
|
|
331
|
+
function validateResolvedConfig(config, options, parseOptions) {
|
|
332
|
+
if (config !== null) {
|
|
333
|
+
if (options.requireConfigFile !== false) {
|
|
334
|
+
if (!config.hasFilesystemConfig()) {
|
|
335
|
+
let error = `No Babel config file detected for ${config.options.filename}. Either disable config file checking with requireConfigFile: false, or configure Babel so that it can find the config files.`;
|
|
336
|
+
if (config.options.filename.includes("node_modules")) {
|
|
337
|
+
error += `\nIf you have a .babelrc.js file or use package.json#babel, keep in mind that it's not used when parsing dependencies. If you want your config to be applied to your whole app, consider using babel.config.js or babel.config.json instead.`;
|
|
338
|
+
}
|
|
339
|
+
throw new Error(error);
|
|
340
|
+
}
|
|
341
|
+
}
|
|
342
|
+
if (config.options) return config.options;
|
|
343
|
+
}
|
|
344
|
+
return getDefaultParserOptions(parseOptions);
|
|
345
|
+
}
|
|
346
|
+
function getDefaultParserOptions(options) {
|
|
347
|
+
return {
|
|
348
|
+
plugins: [],
|
|
349
|
+
...options,
|
|
350
|
+
babelrc: false,
|
|
351
|
+
configFile: false,
|
|
352
|
+
ignore: undefined,
|
|
353
|
+
only: undefined
|
|
354
|
+
};
|
|
355
|
+
}
|
|
356
|
+
async function normalizeBabelParseConfig(options) {
|
|
357
|
+
const parseOptions = normalizeParserOptions(options);
|
|
358
|
+
const config = await loadPartialConfigAsync(parseOptions);
|
|
359
|
+
return validateResolvedConfig(config, options, parseOptions);
|
|
360
|
+
}
|
|
361
|
+
|
|
362
|
+
export { ACTIONS, WorkerClient, convertError, convertFile, getParserPlugins, getTokLabels, getVisitorKeys, normalizeBabelParseConfig };
|
|
363
|
+
//# sourceMappingURL=configuration-shared.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"configuration-shared.js","sources":["../src/client.ts","../src/convert/convertTokens.ts","../src/convert/convertComments.ts","../src/utils/eslint-version.ts","../src/convert/convertAST.ts","../src/convert/index.ts","../src/ast-info.ts","../src/worker/configuration.ts"],"sourcesContent":["import path from \"node:path\";\nimport {\n Worker,\n SHARE_ENV,\n MessageChannel,\n receiveMessageOnPort,\n} from \"node:worker_threads\";\n\nimport type { Options } from \"./types\";\n\nexport const enum ACTIONS {\n MAYBE_PARSE = \"MAYBE_PARSE\",\n}\n\nexport class Client {\n #send;\n\n constructor(send: Function) {\n this.#send = send;\n }\n\n maybeParse(code: string, options: Options) {\n return this.#send(ACTIONS.MAYBE_PARSE, { code, options });\n }\n}\n\n// We need to run Babel in a worker for two reasons:\n// 1. ESLint workers must be CJS files, and this is a problem\n// since Babel 8+ uses native ESM\n// 2. ESLint parsers must run synchronously, but many steps\n// of Babel's config loading (which is done for each file)\n// can be asynchronous\n// If ESLint starts supporting async parsers, we can move\n// everything back to the main thread.\nexport class WorkerClient extends Client {\n #worker = new Worker(\n path.resolve(import.meta.dirname, \"../lib/worker/index.js\"),\n { env: SHARE_ENV },\n );\n\n constructor() {\n super((action: ACTIONS, payload: any) => {\n // We create a new SharedArrayBuffer every time rather than reusing\n // the same one, otherwise sometimes its contents get corrupted and\n // Atomics.wait wakes up too early.\n // https://github.com/babel/babel/pull/14541\n const signal = new Int32Array(new SharedArrayBuffer(8));\n\n const subChannel = new MessageChannel();\n\n this.#worker.postMessage(\n { signal, port: subChannel.port1, action, payload },\n [subChannel.port1],\n );\n\n Atomics.wait(signal, 0, 0);\n const { message } = receiveMessageOnPort(subChannel.port2)!;\n\n if (message.error) throw Object.assign(message.error, message.errorData);\n else return message.result;\n });\n\n // The worker will never exit by itself. Prevent it from keeping\n // the main process alive.\n this.#worker.unref();\n }\n}\n","import type { BabelToken, Comment } from \"../types\";\nimport type { types as t } from \"@babel/core\";\n\ninterface ConvertedToken {\n type: string;\n range?: [number, number];\n value?: string;\n regex?: {\n pattern: string;\n flags: string;\n };\n loc?: t.SourceLocation | null;\n}\n\nfunction convertToken(\n token: BabelToken,\n source: string,\n tl: Record<string, any>,\n) {\n const { type } = token;\n const { label } = type;\n\n const newToken: ConvertedToken = token as unknown as ConvertedToken;\n newToken.range = [token.start, token.end];\n\n if (label === tl.name) {\n const tokenValue = token.value;\n if (\n tokenValue === \"let\" ||\n tokenValue === \"static\" ||\n tokenValue === \"yield\"\n ) {\n newToken.type = \"Keyword\";\n } else {\n newToken.type = \"Identifier\";\n }\n } else if (\n label === tl.semi ||\n label === tl.comma ||\n label === tl.parenL ||\n label === tl.parenR ||\n label === tl.braceL ||\n label === tl.braceR ||\n label === tl.slash ||\n label === tl.dot ||\n label === tl.bracketL ||\n label === tl.bracketR ||\n label === tl.ellipsis ||\n label === tl.arrow ||\n label === tl.pipeline ||\n label === tl.star ||\n label === tl.incDec ||\n label === tl.colon ||\n label === tl.question ||\n label === tl.template ||\n label === tl.backQuote ||\n label === tl.dollarBraceL ||\n label === tl.at ||\n label === tl.logicalOR ||\n label === tl.logicalAND ||\n label === tl.nullishCoalescing ||\n label === tl.bitwiseOR ||\n label === tl.bitwiseXOR ||\n label === tl.bitwiseAND ||\n label === tl.equality ||\n label === tl.relational ||\n label === tl.bitShift ||\n label === tl.plusMin ||\n label === tl.modulo ||\n label === tl.exponent ||\n label === tl.bang ||\n label === tl.tilde ||\n label === tl.doubleColon ||\n label === tl.hash ||\n label === tl.questionDot ||\n label === tl.braceHashL ||\n label === tl.braceBarL ||\n label === tl.braceBarR ||\n label === tl.bracketHashL ||\n label === tl.bracketBarL ||\n label === tl.bracketBarR ||\n label === tl.doubleCaret ||\n label === tl.doubleAt ||\n type.isAssign\n ) {\n newToken.type = \"Punctuator\";\n newToken.value ??= label;\n } else if (label === tl.jsxTagStart) {\n newToken.type = \"Punctuator\";\n newToken.value = \"<\";\n } else if (label === tl.jsxTagEnd) {\n newToken.type = \"Punctuator\";\n newToken.value = \">\";\n } else if (label === tl.jsxName) {\n newToken.type = \"JSXIdentifier\";\n } else if (label === tl.jsxText) {\n newToken.type = \"JSXText\";\n } else if (type.keyword === \"null\") {\n newToken.type = \"Null\";\n } else if (type.keyword === \"false\" || type.keyword === \"true\") {\n newToken.type = \"Boolean\";\n } else if (type.keyword) {\n newToken.type = \"Keyword\";\n } else if (label === tl.num) {\n newToken.type = \"Numeric\";\n newToken.value = source.slice(token.start, token.end);\n } else if (label === tl.string) {\n newToken.type = \"String\";\n newToken.value = source.slice(token.start, token.end);\n } else if (label === tl.regexp) {\n newToken.type = \"RegularExpression\";\n const value = token.value;\n newToken.regex = {\n pattern: value.pattern,\n flags: value.flags,\n };\n newToken.value = `/${value.pattern}/${value.flags}`;\n } else if (label === tl.bigint) {\n newToken.type = \"Numeric\";\n newToken.value = `${token.value}n`;\n } else if (label === tl.privateName) {\n newToken.type = \"PrivateIdentifier\";\n } else if (\n label === tl.templateNonTail ||\n label === tl.templateTail ||\n label === tl.Template\n ) {\n newToken.type = \"Template\";\n }\n if (!process.env.IS_PUBLISH) {\n // To minimize the jest-diff noise comparing Babel AST and third-party AST,\n // here we generate a copy of loc without identifierName and index\n newToken.loc = {\n end: newToken.loc!.end,\n start: newToken.loc!.start,\n } as any;\n }\n return newToken;\n}\n\nexport default function convertTokens(\n tokens: (BabelToken | Comment)[],\n code: string,\n tokLabels: Record<string, any>,\n) {\n const result: ConvertedToken[] = [];\n const templateTypeMergedTokens = tokens;\n // The last token is always tt.eof and should be skipped\n for (let i = 0, { length } = templateTypeMergedTokens; i < length - 1; i++) {\n const token = templateTypeMergedTokens[i];\n const tokenType = token.type;\n if (tokenType === \"CommentLine\" || tokenType === \"CommentBlock\") {\n continue;\n }\n\n result.push(convertToken(token, code, tokLabels));\n }\n\n return result;\n}\n","import type { types as t } from \"@babel/core\";\n\nexport default function convertComments(comments: t.Comment[]) {\n for (const comment of comments) {\n // @ts-expect-error eslint\n comment.type = comment.type === \"CommentBlock\" ? \"Block\" : \"Line\";\n\n // sometimes comments don't get ranges computed,\n // even with options.ranges === true\n\n // @ts-expect-error eslint\n comment.range ||= [comment.start, comment.end];\n }\n}\n","import { ESLint } from \"eslint\";\n\nexport default parseInt(ESLint.version, 10);\n","import type { types as t } from \"@babel/core\";\nimport type { ParseResult } from \"../types\";\nimport eslintVersion from \"../utils/eslint-version.ts\";\n\nfunction* it<T>(children: T | T[]) {\n if (Array.isArray(children)) yield* children;\n else yield children;\n}\n\nfunction traverse(\n node: t.Node,\n visitorKeys: Record<string, string[]>,\n visitor: typeof convertNodesVisitor,\n) {\n const { type } = node;\n if (!type) return;\n const keys = visitorKeys[type];\n if (!keys) return;\n\n for (const key of keys) {\n for (const child of it(\n node[key as keyof t.Node] as unknown as t.Node | t.Node[],\n )) {\n if (child && typeof child === \"object\") {\n visitor.enter(child);\n traverse(child, visitorKeys, visitor);\n visitor.exit(child);\n }\n }\n }\n}\n\nconst convertNodesVisitor = {\n enter(node: t.Node) {\n if (node.innerComments) {\n delete node.innerComments;\n }\n\n if (node.trailingComments) {\n delete node.trailingComments;\n }\n\n if (node.leadingComments) {\n delete node.leadingComments;\n }\n },\n exit(node: t.Node) {\n // Used internally by @babel/parser.\n if (node.extra) {\n delete node.extra;\n }\n\n if (process.env.IS_PUBLISH) {\n if (node.loc!.identifierName) {\n delete node.loc!.identifierName;\n }\n } else {\n // To minimize the jest-diff noise comparing Babel AST and third-party AST,\n // here we remove identifierName and index from the position information\n if (node.loc) {\n // @ts-expect-error `index` is generated from Babel parser\n delete node.loc?.index;\n delete node.loc?.identifierName;\n }\n }\n\n if (node.type === \"TypeParameter\") {\n // @ts-expect-error eslint\n node.type = \"Identifier\";\n // @ts-expect-error eslint\n node.typeAnnotation = node.bound;\n delete node.bound;\n }\n\n // flow: prevent \"no-undef\"\n // for \"Component\" in: \"let x: React.Component\"\n if (node.type === \"QualifiedTypeIdentifier\") {\n // @ts-expect-error eslint\n delete node.id;\n }\n // for \"b\" in: \"var a: { b: Foo }\"\n if (node.type === \"ObjectTypeProperty\") {\n // @ts-expect-error eslint\n delete node.key;\n }\n // for \"indexer\" in: \"var a: {[indexer: string]: number}\"\n if (node.type === \"ObjectTypeIndexer\") {\n delete node.id;\n }\n // for \"param\" in: \"var a: { func(param: Foo): Bar };\"\n if (node.type === \"FunctionTypeParam\") {\n delete node.name;\n }\n\n // modules\n if (node.type === \"ImportDeclaration\") {\n // @ts-expect-error legacy?\n delete node.isType;\n }\n\n // template string range fixes\n if (\n node.type === \"TemplateLiteral\" ||\n node.type === \"TSTemplateLiteralType\"\n ) {\n for (let i = 0; i < node.quasis.length; i++) {\n const q = node.quasis[i] as t.TemplateElement & {\n loc: t.SourceLocation;\n range: [number, number];\n start: number;\n end: number;\n };\n q.range[0] -= 1;\n if (q.tail) {\n q.range[1] += 1;\n } else {\n q.range[1] += 2;\n }\n q.loc.start.column -= 1;\n if (q.tail) {\n q.loc.end.column += 1;\n } else {\n q.loc.end.column += 2;\n }\n\n q.start -= 1;\n if (q.tail) {\n q.end += 1;\n } else {\n q.end += 2;\n }\n }\n }\n },\n};\n\nfunction convertNodes(ast: ParseResult, visitorKeys: Record<string, string[]>) {\n traverse(ast, visitorKeys, convertNodesVisitor);\n}\n\nfunction convertProgramNode(ast: ParseResult) {\n const body = ast.program.body;\n Object.assign(ast, {\n type: \"Program\",\n sourceType: ast.program.sourceType,\n body,\n });\n // @ts-expect-error eslint\n delete ast.program;\n // @ts-expect-error eslint\n delete ast.errors;\n\n if (eslintVersion < 10) {\n if (ast.comments!.length) {\n const lastComment = ast.comments![ast.comments!.length - 1];\n\n if (ast.tokens!.length) {\n const lastToken = ast.tokens![ast.tokens!.length - 1];\n\n if (lastComment.end! > lastToken.end) {\n // If there is a comment after the last token, the program ends at the\n // last token and not the comment\n ast.range![1] = lastToken.end;\n ast.loc!.end.line = lastToken.loc.end.line;\n ast.loc!.end.column = lastToken.loc.end.column;\n\n ast.end = lastToken.end;\n }\n }\n } else {\n if (!ast.tokens!.length) {\n ast.loc!.start.line = 1;\n ast.loc!.end.line = 1;\n }\n }\n\n if (body?.length) {\n ast.loc!.start.line = body[0].loc!.start.line;\n ast.range![0] = body[0].start!;\n\n ast.start = body[0].start;\n }\n }\n}\n\nexport default function convertAST(\n ast: ParseResult,\n visitorKeys: Record<string, string[]>,\n) {\n convertNodes(ast, visitorKeys);\n convertProgramNode(ast);\n}\n","import convertTokens from \"./convertTokens.ts\";\nimport convertComments from \"./convertComments.ts\";\nimport convertAST from \"./convertAST.ts\";\nimport type { AST, ParseResult } from \"../types\";\n\nexport function convertFile(\n ast: ParseResult,\n code: string,\n tokLabels: Record<string, any>,\n visitorKeys: Record<string, string[]>,\n) {\n ast.tokens = convertTokens(ast.tokens!, code, tokLabels);\n convertComments(ast.comments!);\n convertAST(ast, visitorKeys);\n return ast as unknown as AST.Program;\n}\n\nexport function convertError(err: Error) {\n if (err instanceof SyntaxError) {\n // @ts-expect-error eslint\n err.lineNumber = err.loc.line;\n // @ts-expect-error eslint\n err.column = err.loc.column;\n }\n return err;\n}\n","import { KEYS as ESLINT_VISITOR_KEYS } from \"eslint-visitor-keys\";\nimport { types, tokTypes } from \"@babel/core\";\n\nlet visitorKeys: Record<string, string[]>;\nexport function getVisitorKeys() {\n if (!visitorKeys) {\n // AST Types that are not presented in Babel AST\n const newTypes = {\n ChainExpression: ESLINT_VISITOR_KEYS.ChainExpression,\n ImportExpression: ESLINT_VISITOR_KEYS.ImportExpression,\n Literal: ESLINT_VISITOR_KEYS.Literal,\n MethodDefinition: [\"decorators\"].concat(\n ESLINT_VISITOR_KEYS.MethodDefinition,\n ),\n Property: [\"decorators\"].concat(ESLINT_VISITOR_KEYS.Property),\n PropertyDefinition: [\"decorators\", \"typeAnnotation\"].concat(\n ESLINT_VISITOR_KEYS.PropertyDefinition,\n ),\n };\n\n // AST Types that shares `\"type\"` property with Babel but have different shape\n const conflictTypes = {\n ExportAllDeclaration: ESLINT_VISITOR_KEYS.ExportAllDeclaration,\n };\n\n // @ts-expect-error(Babel 7 vs Babel 8) TODO(Babel 8)\n visitorKeys = {\n ...newTypes,\n ...types.VISITOR_KEYS,\n ...conflictTypes,\n };\n }\n return visitorKeys;\n}\n\nlet tokLabels;\nexport function getTokLabels() {\n return (tokLabels ||= Object.fromEntries(\n Object.entries(tokTypes).map(([key, tok]) => [key, tok.label]),\n ));\n}\n","import { loadPartialConfigAsync } from \"@babel/core\";\nimport type { InputOptions, NormalizedOptions } from \"@babel/core\";\nimport type { Options } from \"../types\";\nimport type { PartialConfig } from \"@babel/core\";\ntype ParserPlugin = NonNullable<\n NonNullable<InputOptions[\"parserOpts\"]>[\"plugins\"]\n>[number];\n\n/**\n * Merge user supplied estree plugin options to default estree plugin options\n *\n * @returns {Array} Merged parser plugin descriptors\n */\nexport function getParserPlugins(babelOptions: InputOptions): ParserPlugin[] {\n const babelParserPlugins = babelOptions.parserOpts?.plugins ?? [];\n const estreeOptions = { classFeatures: true };\n for (const plugin of babelParserPlugins) {\n if (Array.isArray(plugin) && plugin[0] === \"estree\") {\n Object.assign(estreeOptions, plugin[1]);\n break;\n }\n }\n // estree must be the first parser plugin to work with other parser plugins\n return [[\"estree\", estreeOptions], ...babelParserPlugins];\n}\n\nfunction normalizeParserOptions(options: Options): InputOptions & {\n showIgnoredFiles?: boolean;\n} {\n return {\n sourceType: options.sourceType,\n filename: options.filePath,\n ...options.babelOptions,\n parserOpts: {\n ...(options.sourceType !== \"commonjs\"\n ? {\n allowReturnOutsideFunction:\n options.ecmaFeatures?.globalReturn ?? false,\n }\n : {}),\n ...options.babelOptions.parserOpts,\n plugins: getParserPlugins(options.babelOptions),\n // skip comment attaching for parsing performance\n attachComment: false,\n ranges: true,\n tokens: true,\n },\n caller: {\n name: \"@babel/eslint-parser\",\n ...options.babelOptions.caller,\n },\n };\n}\n\nfunction validateResolvedConfig(\n config: PartialConfig,\n options: Options,\n parseOptions: InputOptions,\n): InputOptions | NormalizedOptions {\n if (config !== null) {\n if (options.requireConfigFile !== false) {\n if (!config.hasFilesystemConfig()) {\n let error = `No Babel config file detected for ${config.options.filename}. Either disable config file checking with requireConfigFile: false, or configure Babel so that it can find the config files.`;\n\n if (config.options.filename!.includes(\"node_modules\")) {\n error += `\\nIf you have a .babelrc.js file or use package.json#babel, keep in mind that it's not used when parsing dependencies. If you want your config to be applied to your whole app, consider using babel.config.js or babel.config.json instead.`;\n }\n\n throw new Error(error);\n }\n }\n if (config.options) return config.options;\n }\n\n return getDefaultParserOptions(parseOptions);\n}\n\nfunction getDefaultParserOptions(options: InputOptions): InputOptions {\n return {\n plugins: [],\n ...options,\n babelrc: false,\n configFile: false,\n ignore: undefined,\n only: undefined,\n };\n}\n\nexport async function normalizeBabelParseConfig(\n options: Options,\n): Promise<InputOptions | NormalizedOptions> {\n const parseOptions = normalizeParserOptions(options);\n const config = await loadPartialConfigAsync(parseOptions);\n return validateResolvedConfig(config!, options, parseOptions);\n}\n"],"names":["ESLINT_VISITOR_KEYS"],"mappings":"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"}
|
package/lib/index.d.ts
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { Linter, AST, ESLint } from 'eslint';
|
|
2
|
+
|
|
3
|
+
declare const meta: ESLint.ObjectMetaProperties["meta"];
|
|
4
|
+
declare function parse(code: string, options?: Linter.ParserOptions): AST.Program;
|
|
5
|
+
declare function parseForESLint(code: string, options?: Linter.ParserOptions): Linter.ESLintParseResult;
|
|
6
|
+
declare const _default: {
|
|
7
|
+
meta: {
|
|
8
|
+
name?: string | undefined;
|
|
9
|
+
version?: string | undefined;
|
|
10
|
+
};
|
|
11
|
+
parse: typeof parse;
|
|
12
|
+
parseForESLint: typeof parseForESLint;
|
|
13
|
+
};
|
|
14
|
+
|
|
15
|
+
export { _default as default, meta, parse, parseForESLint };
|