This change modifies the build scripts to use --legacy-peer-deps flag when installing npm dependencies to resolve potential peer dependency conflicts during the build process. The change is applied to both bash (build.sh) and batch (build.bat) build scripts.
178 lines
6.5 KiB
JavaScript
178 lines
6.5 KiB
JavaScript
/* eslint-disable jsdoc/no-multi-asterisks -- needed to preserve original formatting of licences */
|
|
|
|
/**
|
|
* @fileoverview Main Espree file that converts Acorn into Esprima output.
|
|
*
|
|
* This file contains code from the following MIT-licensed projects:
|
|
* 1. Acorn
|
|
* 2. Babylon
|
|
* 3. Babel-ESLint
|
|
*
|
|
* This file also contains code from Esprima, which is BSD licensed.
|
|
*
|
|
* Acorn is Copyright 2012-2015 Acorn Contributors (https://github.com/marijnh/acorn/blob/master/AUTHORS)
|
|
* Babylon is Copyright 2014-2015 various contributors (https://github.com/babel/babel/blob/master/packages/babylon/AUTHORS)
|
|
* Babel-ESLint is Copyright 2014-2015 Sebastian McKenzie <sebmck@gmail.com>
|
|
*
|
|
* Redistribution and use in source and binary forms, with or without
|
|
* modification, are permitted provided that the following conditions are met:
|
|
*
|
|
* * Redistributions of source code must retain the above copyright
|
|
* notice, this list of conditions and the following disclaimer.
|
|
* * Redistributions in binary form must reproduce the above copyright
|
|
* notice, this list of conditions and the following disclaimer in the
|
|
* documentation and/or other materials provided with the distribution.
|
|
*
|
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
|
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
* ARE DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY
|
|
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
|
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
|
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
|
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
*
|
|
* Esprima is Copyright (c) jQuery Foundation, Inc. and Contributors, All Rights Reserved.
|
|
*
|
|
* Redistribution and use in source and binary forms, with or without
|
|
* modification, are permitted provided that the following conditions are met:
|
|
*
|
|
* * Redistributions of source code must retain the above copyright
|
|
* notice, this list of conditions and the following disclaimer.
|
|
* * Redistributions in binary form must reproduce the above copyright
|
|
* notice, this list of conditions and the following disclaimer in the
|
|
* documentation and/or other materials provided with the distribution.
|
|
*
|
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
|
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
* ARE DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY
|
|
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
|
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
|
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
|
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
*/
|
|
|
|
/* eslint-enable jsdoc/no-multi-asterisks -- needed to preserve original formatting of licences */
|
|
|
|
import * as acorn from "acorn";
|
|
import jsx from "acorn-jsx";
|
|
import espree from "./lib/espree.js";
|
|
import espreeVersion from "./lib/version.js";
|
|
import * as visitorKeys from "eslint-visitor-keys";
|
|
import { getLatestEcmaVersion, getSupportedEcmaVersions } from "./lib/options.js";
|
|
|
|
|
|
// To initialize lazily.
|
|
const parsers = {
|
|
_regular: null,
|
|
_jsx: null,
|
|
|
|
get regular() {
|
|
if (this._regular === null) {
|
|
this._regular = acorn.Parser.extend(espree());
|
|
}
|
|
return this._regular;
|
|
},
|
|
|
|
get jsx() {
|
|
if (this._jsx === null) {
|
|
this._jsx = acorn.Parser.extend(jsx(), espree());
|
|
}
|
|
return this._jsx;
|
|
},
|
|
|
|
get(options) {
|
|
const useJsx = Boolean(
|
|
options &&
|
|
options.ecmaFeatures &&
|
|
options.ecmaFeatures.jsx
|
|
);
|
|
|
|
return useJsx ? this.jsx : this.regular;
|
|
}
|
|
};
|
|
|
|
//------------------------------------------------------------------------------
|
|
// Tokenizer
|
|
//------------------------------------------------------------------------------
|
|
|
|
/**
|
|
* Tokenizes the given code.
|
|
* @param {string} code The code to tokenize.
|
|
* @param {Object} options Options defining how to tokenize.
|
|
* @returns {Token[]} An array of tokens.
|
|
* @throws {SyntaxError} If the input code is invalid.
|
|
* @private
|
|
*/
|
|
export function tokenize(code, options) {
|
|
const Parser = parsers.get(options);
|
|
|
|
// Ensure to collect tokens.
|
|
if (!options || options.tokens !== true) {
|
|
options = Object.assign({}, options, { tokens: true }); // eslint-disable-line no-param-reassign -- stylistic choice
|
|
}
|
|
|
|
return new Parser(options, code).tokenize();
|
|
}
|
|
|
|
//------------------------------------------------------------------------------
|
|
// Parser
|
|
//------------------------------------------------------------------------------
|
|
|
|
/**
|
|
* Parses the given code.
|
|
* @param {string} code The code to tokenize.
|
|
* @param {Object} options Options defining how to tokenize.
|
|
* @returns {ASTNode} The "Program" AST node.
|
|
* @throws {SyntaxError} If the input code is invalid.
|
|
*/
|
|
export function parse(code, options) {
|
|
const Parser = parsers.get(options);
|
|
|
|
return new Parser(options, code).parse();
|
|
}
|
|
|
|
//------------------------------------------------------------------------------
|
|
// Public
|
|
//------------------------------------------------------------------------------
|
|
|
|
export const version = espreeVersion;
|
|
export const name = "espree";
|
|
|
|
/* istanbul ignore next */
|
|
export const VisitorKeys = (function() {
|
|
return visitorKeys.KEYS;
|
|
}());
|
|
|
|
// Derive node types from VisitorKeys
|
|
/* istanbul ignore next */
|
|
export const Syntax = (function() {
|
|
let key,
|
|
types = {};
|
|
|
|
if (typeof Object.create === "function") {
|
|
types = Object.create(null);
|
|
}
|
|
|
|
for (key in VisitorKeys) {
|
|
if (Object.hasOwnProperty.call(VisitorKeys, key)) {
|
|
types[key] = key;
|
|
}
|
|
}
|
|
|
|
if (typeof Object.freeze === "function") {
|
|
Object.freeze(types);
|
|
}
|
|
|
|
return types;
|
|
}());
|
|
|
|
export const latestEcmaVersion = getLatestEcmaVersion();
|
|
|
|
export const supportedEcmaVersions = getSupportedEcmaVersions();
|