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
+137 -202
View File
@@ -11,223 +11,158 @@ const astUtils = require("./utils/ast-utils");
// Rule Definition
//------------------------------------------------------------------------------
/** @type {import('../types').Rule.RuleModule} */
/** @type {import('../shared/types').Rule} */
module.exports = {
meta: {
type: "suggestion",
meta: {
type: "suggestion",
docs: {
description: "Disallow certain properties on certain objects",
recommended: false,
url: "https://eslint.org/docs/latest/rules/no-restricted-properties",
},
docs: {
description: "Disallow certain properties on certain objects",
recommended: false,
url: "https://eslint.org/docs/latest/rules/no-restricted-properties"
},
schema: {
type: "array",
items: {
type: "object",
properties: {
object: {
type: "string",
},
property: {
type: "string",
},
allowObjects: {
type: "array",
items: {
type: "string",
},
uniqueItems: true,
},
allowProperties: {
type: "array",
items: {
type: "string",
},
uniqueItems: true,
},
message: {
type: "string",
},
},
anyOf: [
{
required: ["object"],
},
{
required: ["property"],
},
],
not: {
anyOf: [
{ required: ["allowObjects", "object"] },
{ required: ["allowProperties", "property"] },
],
},
additionalProperties: false,
},
uniqueItems: true,
},
schema: {
type: "array",
items: {
anyOf: [ // `object` and `property` are both optional, but at least one of them must be provided.
{
type: "object",
properties: {
object: {
type: "string"
},
property: {
type: "string"
},
message: {
type: "string"
}
},
additionalProperties: false,
required: ["object"]
},
{
type: "object",
properties: {
object: {
type: "string"
},
property: {
type: "string"
},
message: {
type: "string"
}
},
additionalProperties: false,
required: ["property"]
}
]
},
uniqueItems: true
},
messages: {
restrictedObjectProperty:
// eslint-disable-next-line eslint-plugin/report-message-format -- Custom message might not end in a period
"'{{objectName}}.{{propertyName}}' is restricted from being used.{{allowedPropertiesMessage}}{{message}}",
restrictedProperty:
// eslint-disable-next-line eslint-plugin/report-message-format -- Custom message might not end in a period
"'{{propertyName}}' is restricted from being used.{{allowedObjectsMessage}}{{message}}",
},
},
messages: {
// eslint-disable-next-line eslint-plugin/report-message-format -- Custom message might not end in a period
restrictedObjectProperty: "'{{objectName}}.{{propertyName}}' is restricted from being used.{{message}}",
// eslint-disable-next-line eslint-plugin/report-message-format -- Custom message might not end in a period
restrictedProperty: "'{{propertyName}}' is restricted from being used.{{message}}"
}
},
create(context) {
const restrictedCalls = context.options;
create(context) {
const restrictedCalls = context.options;
if (restrictedCalls.length === 0) {
return {};
}
if (restrictedCalls.length === 0) {
return {};
}
const restrictedProperties = new Map();
const globallyRestrictedObjects = new Map();
const globallyRestrictedProperties = new Map();
const restrictedProperties = new Map();
const globallyRestrictedObjects = new Map();
const globallyRestrictedProperties = new Map();
restrictedCalls.forEach(option => {
const objectName = option.object;
const propertyName = option.property;
restrictedCalls.forEach(option => {
const objectName = option.object;
const propertyName = option.property;
if (typeof objectName === "undefined") {
globallyRestrictedProperties.set(propertyName, {
allowObjects: option.allowObjects,
message: option.message,
});
} else if (typeof propertyName === "undefined") {
globallyRestrictedObjects.set(objectName, {
allowProperties: option.allowProperties,
message: option.message,
});
} else {
if (!restrictedProperties.has(objectName)) {
restrictedProperties.set(objectName, new Map());
}
if (typeof objectName === "undefined") {
globallyRestrictedProperties.set(propertyName, { message: option.message });
} else if (typeof propertyName === "undefined") {
globallyRestrictedObjects.set(objectName, { message: option.message });
} else {
if (!restrictedProperties.has(objectName)) {
restrictedProperties.set(objectName, new Map());
}
restrictedProperties.get(objectName).set(propertyName, {
message: option.message,
});
}
});
restrictedProperties.get(objectName).set(propertyName, {
message: option.message
});
}
});
/**
* Checks if a name is in the allowed list.
* @param {string} name The name to check
* @param {string[]} [allowedList] The list of allowed names
* @returns {boolean} True if the name is allowed, false otherwise
*/
function isAllowed(name, allowedList) {
if (!allowedList) {
return false;
}
/**
* Checks to see whether a property access is restricted, and reports it if so.
* @param {ASTNode} node The node to report
* @param {string} objectName The name of the object
* @param {string} propertyName The name of the property
* @returns {undefined}
*/
function checkPropertyAccess(node, objectName, propertyName) {
if (propertyName === null) {
return;
}
const matchedObject = restrictedProperties.get(objectName);
const matchedObjectProperty = matchedObject ? matchedObject.get(propertyName) : globallyRestrictedObjects.get(objectName);
const globalMatchedProperty = globallyRestrictedProperties.get(propertyName);
return allowedList.includes(name);
}
if (matchedObjectProperty) {
const message = matchedObjectProperty.message ? ` ${matchedObjectProperty.message}` : "";
/**
* Checks to see whether a property access is restricted, and reports it if so.
* @param {ASTNode} node The node to report
* @param {string} objectName The name of the object
* @param {string} propertyName The name of the property
* @returns {undefined}
*/
function checkPropertyAccess(node, objectName, propertyName) {
if (propertyName === null) {
return;
}
const matchedObject = restrictedProperties.get(objectName);
const matchedObjectProperty = matchedObject
? matchedObject.get(propertyName)
: globallyRestrictedObjects.get(objectName);
const globalMatchedProperty =
globallyRestrictedProperties.get(propertyName);
context.report({
node,
messageId: "restrictedObjectProperty",
data: {
objectName,
propertyName,
message
}
});
} else if (globalMatchedProperty) {
const message = globalMatchedProperty.message ? ` ${globalMatchedProperty.message}` : "";
if (
matchedObjectProperty &&
!isAllowed(propertyName, matchedObjectProperty.allowProperties)
) {
const message = matchedObjectProperty.message
? ` ${matchedObjectProperty.message}`
: "";
const allowedPropertiesMessage =
matchedObjectProperty.allowProperties
? ` Only these properties are allowed: ${matchedObjectProperty.allowProperties.join(", ")}.`
: "";
context.report({
node,
messageId: "restrictedProperty",
data: {
propertyName,
message
}
});
}
}
context.report({
node,
messageId: "restrictedObjectProperty",
data: {
objectName,
propertyName,
message,
allowedPropertiesMessage,
},
});
} else if (
globalMatchedProperty &&
!isAllowed(objectName, globalMatchedProperty.allowObjects)
) {
const message = globalMatchedProperty.message
? ` ${globalMatchedProperty.message}`
: "";
const allowedObjectsMessage = globalMatchedProperty.allowObjects
? ` Property '${propertyName}' is only allowed on these objects: ${globalMatchedProperty.allowObjects.join(", ")}.`
: "";
return {
MemberExpression(node) {
checkPropertyAccess(node, node.object && node.object.name, astUtils.getStaticPropertyName(node));
},
ObjectPattern(node) {
let objectName = null;
context.report({
node,
messageId: "restrictedProperty",
data: {
propertyName,
message,
allowedObjectsMessage,
},
});
}
}
if (node.parent.type === "VariableDeclarator") {
if (node.parent.init && node.parent.init.type === "Identifier") {
objectName = node.parent.init.name;
}
} else if (node.parent.type === "AssignmentExpression" || node.parent.type === "AssignmentPattern") {
if (node.parent.right.type === "Identifier") {
objectName = node.parent.right.name;
}
}
return {
MemberExpression(node) {
checkPropertyAccess(
node,
node.object && node.object.name,
astUtils.getStaticPropertyName(node),
);
},
ObjectPattern(node) {
let objectName = null;
if (node.parent.type === "VariableDeclarator") {
if (
node.parent.init &&
node.parent.init.type === "Identifier"
) {
objectName = node.parent.init.name;
}
} else if (
node.parent.type === "AssignmentExpression" ||
node.parent.type === "AssignmentPattern"
) {
if (node.parent.right.type === "Identifier") {
objectName = node.parent.right.name;
}
}
node.properties.forEach(property => {
checkPropertyAccess(
node,
objectName,
astUtils.getStaticPropertyName(property),
);
});
},
};
},
node.properties.forEach(property => {
checkPropertyAccess(node, objectName, astUtils.getStaticPropertyName(property));
});
}
};
}
};