build: update npm install command to use --legacy-peer-deps

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.
This commit is contained in:
Luiz Costa
2025-11-18 10:23:55 -03:00
parent 20129a1ac7
commit ac4f232e5e
787 changed files with 82341 additions and 121690 deletions
+201 -202
View File
@@ -16,19 +16,36 @@ const astUtils = require("./utils/ast-utils");
//------------------------------------------------------------------------------
const CAPS_ALLOWED = [
"Array",
"Boolean",
"Date",
"Error",
"Function",
"Number",
"Object",
"RegExp",
"String",
"Symbol",
"BigInt",
"Array",
"Boolean",
"Date",
"Error",
"Function",
"Number",
"Object",
"RegExp",
"String",
"Symbol",
"BigInt"
];
/**
* Ensure that if the key is provided, it must be an array.
* @param {Object} obj Object to check with `key`.
* @param {string} key Object key to check on `obj`.
* @param {any} fallback If obj[key] is not present, this will be returned.
* @throws {TypeError} If key is not an own array type property of `obj`.
* @returns {string[]} Returns obj[key] if it's an Array, otherwise `fallback`
*/
function checkArray(obj, key, fallback) {
/* c8 ignore start */
if (Object.prototype.hasOwnProperty.call(obj, key) && !Array.isArray(obj[key])) {
throw new TypeError(`${key}, if provided, must be an Array`);
}/* c8 ignore stop */
return obj[key] || fallback;
}
/**
* A reducer function to invert an array to an Object mapping the string form of the key, to `true`.
* @param {Object} map Accumulator object for the reduce.
@@ -36,8 +53,8 @@ const CAPS_ALLOWED = [
* @returns {Object} Returns the updated Object for further reduction.
*/
function invert(map, key) {
map[key] = true;
return map;
map[key] = true;
return map;
}
/**
@@ -46,232 +63,214 @@ function invert(map, key) {
* @returns {Object} Object with cap is new exceptions.
*/
function calculateCapIsNewExceptions(config) {
const capIsNewExceptions = Array.from(
new Set([...config.capIsNewExceptions, ...CAPS_ALLOWED]),
);
let capIsNewExceptions = checkArray(config, "capIsNewExceptions", CAPS_ALLOWED);
return capIsNewExceptions.reduce(invert, {});
if (capIsNewExceptions !== CAPS_ALLOWED) {
capIsNewExceptions = capIsNewExceptions.concat(CAPS_ALLOWED);
}
return capIsNewExceptions.reduce(invert, {});
}
//------------------------------------------------------------------------------
// Rule Definition
//------------------------------------------------------------------------------
/** @type {import('../types').Rule.RuleModule} */
/** @type {import('../shared/types').Rule} */
module.exports = {
meta: {
type: "suggestion",
meta: {
type: "suggestion",
docs: {
description:
"Require constructor names to begin with a capital letter",
recommended: false,
url: "https://eslint.org/docs/latest/rules/new-cap",
},
docs: {
description: "Require constructor names to begin with a capital letter",
recommended: false,
url: "https://eslint.org/docs/latest/rules/new-cap"
},
schema: [
{
type: "object",
properties: {
newIsCap: {
type: "boolean",
},
capIsNew: {
type: "boolean",
},
newIsCapExceptions: {
type: "array",
items: {
type: "string",
},
},
newIsCapExceptionPattern: {
type: "string",
},
capIsNewExceptions: {
type: "array",
items: {
type: "string",
},
},
capIsNewExceptionPattern: {
type: "string",
},
properties: {
type: "boolean",
},
},
additionalProperties: false,
},
],
schema: [
{
type: "object",
properties: {
newIsCap: {
type: "boolean",
default: true
},
capIsNew: {
type: "boolean",
default: true
},
newIsCapExceptions: {
type: "array",
items: {
type: "string"
}
},
newIsCapExceptionPattern: {
type: "string"
},
capIsNewExceptions: {
type: "array",
items: {
type: "string"
}
},
capIsNewExceptionPattern: {
type: "string"
},
properties: {
type: "boolean",
default: true
}
},
additionalProperties: false
}
],
messages: {
upper: "A function with a name starting with an uppercase letter should only be used as a constructor.",
lower: "A constructor name should not start with a lowercase letter."
}
},
defaultOptions: [
{
capIsNew: true,
capIsNewExceptions: CAPS_ALLOWED,
newIsCap: true,
newIsCapExceptions: [],
properties: true,
},
],
create(context) {
messages: {
upper: "A function with a name starting with an uppercase letter should only be used as a constructor.",
lower: "A constructor name should not start with a lowercase letter.",
},
},
const config = Object.assign({}, context.options[0]);
create(context) {
const [config] = context.options;
const skipProperties = !config.properties;
config.newIsCap = config.newIsCap !== false;
config.capIsNew = config.capIsNew !== false;
const skipProperties = config.properties === false;
const newIsCapExceptions = config.newIsCapExceptions.reduce(invert, {});
const newIsCapExceptionPattern = config.newIsCapExceptionPattern
? new RegExp(config.newIsCapExceptionPattern, "u")
: null;
const newIsCapExceptions = checkArray(config, "newIsCapExceptions", []).reduce(invert, {});
const newIsCapExceptionPattern = config.newIsCapExceptionPattern ? new RegExp(config.newIsCapExceptionPattern, "u") : null;
const capIsNewExceptions = calculateCapIsNewExceptions(config);
const capIsNewExceptionPattern = config.capIsNewExceptionPattern
? new RegExp(config.capIsNewExceptionPattern, "u")
: null;
const capIsNewExceptions = calculateCapIsNewExceptions(config);
const capIsNewExceptionPattern = config.capIsNewExceptionPattern ? new RegExp(config.capIsNewExceptionPattern, "u") : null;
const listeners = {};
const listeners = {};
const sourceCode = context.sourceCode;
const sourceCode = context.sourceCode;
//--------------------------------------------------------------------------
// Helpers
//--------------------------------------------------------------------------
//--------------------------------------------------------------------------
// Helpers
//--------------------------------------------------------------------------
/**
* Get exact callee name from expression
* @param {ASTNode} node CallExpression or NewExpression node
* @returns {string} name
*/
function extractNameFromExpression(node) {
return node.callee.type === "Identifier"
? node.callee.name
: astUtils.getStaticPropertyName(node.callee) || "";
}
/**
* Get exact callee name from expression
* @param {ASTNode} node CallExpression or NewExpression node
* @returns {string} name
*/
function extractNameFromExpression(node) {
return node.callee.type === "Identifier"
? node.callee.name
: astUtils.getStaticPropertyName(node.callee) || "";
}
/**
* Returns the capitalization state of the string -
* Whether the first character is uppercase, lowercase, or non-alphabetic
* @param {string} str String
* @returns {string} capitalization state: "non-alpha", "lower", or "upper"
*/
function getCap(str) {
const firstChar = str.charAt(0);
/**
* Returns the capitalization state of the string -
* Whether the first character is uppercase, lowercase, or non-alphabetic
* @param {string} str String
* @returns {string} capitalization state: "non-alpha", "lower", or "upper"
*/
function getCap(str) {
const firstChar = str.charAt(0);
const firstCharLower = firstChar.toLowerCase();
const firstCharUpper = firstChar.toUpperCase();
const firstCharLower = firstChar.toLowerCase();
const firstCharUpper = firstChar.toUpperCase();
if (firstCharLower === firstCharUpper) {
// char has no uppercase variant, so it's non-alphabetic
return "non-alpha";
}
if (firstChar === firstCharLower) {
return "lower";
}
return "upper";
}
if (firstCharLower === firstCharUpper) {
/**
* Check if capitalization is allowed for a CallExpression
* @param {Object} allowedMap Object mapping calleeName to a Boolean
* @param {ASTNode} node CallExpression node
* @param {string} calleeName Capitalized callee name from a CallExpression
* @param {Object} pattern RegExp object from options pattern
* @returns {boolean} Returns true if the callee may be capitalized
*/
function isCapAllowed(allowedMap, node, calleeName, pattern) {
const sourceText = sourceCode.getText(node.callee);
// char has no uppercase variant, so it's non-alphabetic
return "non-alpha";
}
if (firstChar === firstCharLower) {
return "lower";
}
return "upper";
if (allowedMap[calleeName] || allowedMap[sourceText]) {
return true;
}
}
if (pattern && pattern.test(sourceText)) {
return true;
}
/**
* Check if capitalization is allowed for a CallExpression
* @param {Object} allowedMap Object mapping calleeName to a Boolean
* @param {ASTNode} node CallExpression node
* @param {string} calleeName Capitalized callee name from a CallExpression
* @param {Object} pattern RegExp object from options pattern
* @returns {boolean} Returns true if the callee may be capitalized
*/
function isCapAllowed(allowedMap, node, calleeName, pattern) {
const sourceText = sourceCode.getText(node.callee);
const callee = astUtils.skipChainExpression(node.callee);
if (allowedMap[calleeName] || allowedMap[sourceText]) {
return true;
}
if (calleeName === "UTC" && callee.type === "MemberExpression") {
// allow if callee is Date.UTC
return (
callee.object.type === "Identifier" &&
callee.object.name === "Date"
);
}
if (pattern && pattern.test(sourceText)) {
return true;
}
return skipProperties && callee.type === "MemberExpression";
}
const callee = astUtils.skipChainExpression(node.callee);
/**
* Reports the given messageId for the given node. The location will be the start of the property or the callee.
* @param {ASTNode} node CallExpression or NewExpression node.
* @param {string} messageId The messageId to report.
* @returns {void}
*/
function report(node, messageId) {
let callee = astUtils.skipChainExpression(node.callee);
if (calleeName === "UTC" && callee.type === "MemberExpression") {
if (callee.type === "MemberExpression") {
callee = callee.property;
}
// allow if callee is Date.UTC
return callee.object.type === "Identifier" &&
callee.object.name === "Date";
}
context.report({ node, loc: callee.loc, messageId });
}
return skipProperties && callee.type === "MemberExpression";
}
//--------------------------------------------------------------------------
// Public
//--------------------------------------------------------------------------
/**
* Reports the given messageId for the given node. The location will be the start of the property or the callee.
* @param {ASTNode} node CallExpression or NewExpression node.
* @param {string} messageId The messageId to report.
* @returns {void}
*/
function report(node, messageId) {
let callee = astUtils.skipChainExpression(node.callee);
if (config.newIsCap) {
listeners.NewExpression = function (node) {
const constructorName = extractNameFromExpression(node);
if (callee.type === "MemberExpression") {
callee = callee.property;
}
if (constructorName) {
const capitalization = getCap(constructorName);
const isAllowed =
capitalization !== "lower" ||
isCapAllowed(
newIsCapExceptions,
node,
constructorName,
newIsCapExceptionPattern,
);
context.report({ node, loc: callee.loc, messageId });
}
if (!isAllowed) {
report(node, "lower");
}
}
};
}
//--------------------------------------------------------------------------
// Public
//--------------------------------------------------------------------------
if (config.capIsNew) {
listeners.CallExpression = function (node) {
const calleeName = extractNameFromExpression(node);
if (config.newIsCap) {
listeners.NewExpression = function(node) {
if (calleeName) {
const capitalization = getCap(calleeName);
const isAllowed =
capitalization !== "upper" ||
isCapAllowed(
capIsNewExceptions,
node,
calleeName,
capIsNewExceptionPattern,
);
const constructorName = extractNameFromExpression(node);
if (!isAllowed) {
report(node, "upper");
}
}
};
}
if (constructorName) {
const capitalization = getCap(constructorName);
const isAllowed = capitalization !== "lower" || isCapAllowed(newIsCapExceptions, node, constructorName, newIsCapExceptionPattern);
return listeners;
},
if (!isAllowed) {
report(node, "lower");
}
}
};
}
if (config.capIsNew) {
listeners.CallExpression = function(node) {
const calleeName = extractNameFromExpression(node);
if (calleeName) {
const capitalization = getCap(calleeName);
const isAllowed = capitalization !== "upper" || isCapAllowed(capIsNewExceptions, node, calleeName, capIsNewExceptionPattern);
if (!isAllowed) {
report(node, "upper");
}
}
};
}
return listeners;
}
};