/
parse.cjs
51 lines (42 loc) 路 1.39 KB
/
parse.cjs
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
"use strict";
const semver = process.env.BABEL_8_BREAKING
? require("semver")
: require("@nicolo-ribaudo/semver-v6");
const convert = require("./convert/index.cjs");
const babelParser = require(require.resolve("@babel/parser", {
paths: [require.resolve("@babel/core/package.json")],
}));
let isRunningMinSupportedCoreVersion = null;
module.exports = function parse(code, options, client) {
// Ensure we're using a version of `@babel/core` that includes `parse()` and `tokTypes`.
let minSupportedCoreVersion = ">=7.2.0";
// TODO(Babel 8): Update all the version checks
if (process.env.BABEL_8_BREAKING) {
minSupportedCoreVersion += " || >=8.0.0-0";
}
if (typeof isRunningMinSupportedCoreVersion !== "boolean") {
isRunningMinSupportedCoreVersion = semver.satisfies(
client.getVersion(),
minSupportedCoreVersion,
);
}
if (!isRunningMinSupportedCoreVersion) {
throw new Error(
`@babel/eslint-parser@${
PACKAGE_JSON.version
} does not support @babel/core@${client.getVersion()}. Please upgrade to @babel/core@${minSupportedCoreVersion}.`,
);
}
const { ast, parserOptions } = client.maybeParse(code, options);
if (ast) return ast;
try {
return convert.ast(
babelParser.parse(code, parserOptions),
code,
client.getTokLabels(),
client.getVisitorKeys(),
);
} catch (err) {
throw convert.error(err);
}
};