mirror of
https://github.com/react/react-native-devtools-frontend.git
synced 2026-10-05 11:31:31 +08:00
Update the @typescript-eslint - eslint-plugin and parser to v7.18.0 cia incremental patches. This is the last version before breaking changes need to start be applied to the infrastructure. Needed to update EsLint to v8.56.0 as required by the above major v7. Only one new error was uncovered in test file and fixed. No-Presubmit: true Bug: none Change-Id: I4e4fe265b82deeb49786c5bf3e154dac8fcfecbd Reviewed-on: https://chromium-review.googlesource.com/c/devtools/devtools-frontend/+/6054130 Reviewed-by: Danil Somsikov <dsv@chromium.org> Commit-Queue: Nikolay Vitkov <nvitkov@chromium.org>
124 lines
3.8 KiB
JavaScript
124 lines
3.8 KiB
JavaScript
/**
|
|
* @fileoverview A collection of methods for processing Espree's options.
|
|
* @author Kai Cataldo
|
|
*/
|
|
|
|
//------------------------------------------------------------------------------
|
|
// Helpers
|
|
//------------------------------------------------------------------------------
|
|
|
|
const SUPPORTED_VERSIONS = [
|
|
3,
|
|
5,
|
|
6, // 2015
|
|
7, // 2016
|
|
8, // 2017
|
|
9, // 2018
|
|
10, // 2019
|
|
11, // 2020
|
|
12, // 2021
|
|
13, // 2022
|
|
14, // 2023
|
|
15 // 2024
|
|
];
|
|
|
|
/**
|
|
* Get the latest ECMAScript version supported by Espree.
|
|
* @returns {number} The latest ECMAScript version.
|
|
*/
|
|
export function getLatestEcmaVersion() {
|
|
return SUPPORTED_VERSIONS[SUPPORTED_VERSIONS.length - 1];
|
|
}
|
|
|
|
/**
|
|
* Get the list of ECMAScript versions supported by Espree.
|
|
* @returns {number[]} An array containing the supported ECMAScript versions.
|
|
*/
|
|
export function getSupportedEcmaVersions() {
|
|
return [...SUPPORTED_VERSIONS];
|
|
}
|
|
|
|
/**
|
|
* Normalize ECMAScript version from the initial config
|
|
* @param {(number|"latest")} ecmaVersion ECMAScript version from the initial config
|
|
* @throws {Error} throws an error if the ecmaVersion is invalid.
|
|
* @returns {number} normalized ECMAScript version
|
|
*/
|
|
function normalizeEcmaVersion(ecmaVersion = 5) {
|
|
|
|
let version = ecmaVersion === "latest" ? getLatestEcmaVersion() : ecmaVersion;
|
|
|
|
if (typeof version !== "number") {
|
|
throw new Error(`ecmaVersion must be a number or "latest". Received value of type ${typeof ecmaVersion} instead.`);
|
|
}
|
|
|
|
// Calculate ECMAScript edition number from official year version starting with
|
|
// ES2015, which corresponds with ES6 (or a difference of 2009).
|
|
if (version >= 2015) {
|
|
version -= 2009;
|
|
}
|
|
|
|
if (!SUPPORTED_VERSIONS.includes(version)) {
|
|
throw new Error("Invalid ecmaVersion.");
|
|
}
|
|
|
|
return version;
|
|
}
|
|
|
|
/**
|
|
* Normalize sourceType from the initial config
|
|
* @param {string} sourceType to normalize
|
|
* @throws {Error} throw an error if sourceType is invalid
|
|
* @returns {string} normalized sourceType
|
|
*/
|
|
function normalizeSourceType(sourceType = "script") {
|
|
if (sourceType === "script" || sourceType === "module") {
|
|
return sourceType;
|
|
}
|
|
|
|
if (sourceType === "commonjs") {
|
|
return "script";
|
|
}
|
|
|
|
throw new Error("Invalid sourceType.");
|
|
}
|
|
|
|
/**
|
|
* Normalize parserOptions
|
|
* @param {Object} options the parser options to normalize
|
|
* @throws {Error} throw an error if found invalid option.
|
|
* @returns {Object} normalized options
|
|
*/
|
|
export function normalizeOptions(options) {
|
|
const ecmaVersion = normalizeEcmaVersion(options.ecmaVersion);
|
|
const sourceType = normalizeSourceType(options.sourceType);
|
|
const ranges = options.range === true;
|
|
const locations = options.loc === true;
|
|
|
|
if (ecmaVersion !== 3 && options.allowReserved) {
|
|
|
|
// a value of `false` is intentionally allowed here, so a shared config can overwrite it when needed
|
|
throw new Error("`allowReserved` is only supported when ecmaVersion is 3");
|
|
}
|
|
if (typeof options.allowReserved !== "undefined" && typeof options.allowReserved !== "boolean") {
|
|
throw new Error("`allowReserved`, when present, must be `true` or `false`");
|
|
}
|
|
const allowReserved = ecmaVersion === 3 ? (options.allowReserved || "never") : false;
|
|
const ecmaFeatures = options.ecmaFeatures || {};
|
|
const allowReturnOutsideFunction = options.sourceType === "commonjs" ||
|
|
Boolean(ecmaFeatures.globalReturn);
|
|
|
|
if (sourceType === "module" && ecmaVersion < 6) {
|
|
throw new Error("sourceType 'module' is not supported when ecmaVersion < 2015. Consider adding `{ ecmaVersion: 2015 }` to the parser options.");
|
|
}
|
|
|
|
return Object.assign({}, options, {
|
|
ecmaVersion,
|
|
sourceType,
|
|
ranges,
|
|
locations,
|
|
allowReserved,
|
|
allowReturnOutsideFunction
|
|
});
|
|
}
|