mirror of
https://github.com/Abdulazizzn/n8n-enterprise-unlocked.git
synced 2025-12-18 02:21:13 +00:00
feat: Adds community scanner package (#18946)
Co-authored-by: Elias Meire <elias@meire.dev>
This commit is contained in:
@@ -0,0 +1,89 @@
|
||||
const restrictedGlobals = [
|
||||
"clearInterval",
|
||||
"clearTimeout",
|
||||
"global",
|
||||
"process",
|
||||
"setInterval",
|
||||
"setTimeout",
|
||||
];
|
||||
|
||||
const allowedModules = [
|
||||
"n8n-workflow",
|
||||
"lodash",
|
||||
"moment",
|
||||
"p-limit",
|
||||
"luxon",
|
||||
"zod",
|
||||
"crypto",
|
||||
"node:crypto"
|
||||
];
|
||||
|
||||
const isModuleAllowed = (modulePath) => {
|
||||
// Allow relative paths
|
||||
if (modulePath.startsWith("./") || modulePath.startsWith("../")) return true;
|
||||
|
||||
// Extract module name from imports that might contain additional path
|
||||
const moduleName = modulePath.startsWith("@")
|
||||
? modulePath.split("/").slice(0, 2).join("/")
|
||||
: modulePath.split("/")[0];
|
||||
return allowedModules.includes(moduleName);
|
||||
};
|
||||
|
||||
/** @type {import('@types/eslint').ESLint.Plugin} */
|
||||
const plugin = {
|
||||
rules: {
|
||||
"no-restricted-globals": {
|
||||
create(context) {
|
||||
return {
|
||||
Identifier(node) {
|
||||
if (
|
||||
restrictedGlobals.includes(node.name) &&
|
||||
(!node.parent ||
|
||||
node.parent.type !== "MemberExpression" ||
|
||||
node.parent.object === node)
|
||||
) {
|
||||
context.report({
|
||||
node,
|
||||
message: `Use of restricted global '${node.name}' is not allowed`,
|
||||
});
|
||||
}
|
||||
},
|
||||
};
|
||||
},
|
||||
},
|
||||
|
||||
"no-restricted-imports": {
|
||||
create(context) {
|
||||
return {
|
||||
ImportDeclaration(node) {
|
||||
const modulePath = node.source.value;
|
||||
if (!isModuleAllowed(modulePath)) {
|
||||
context.report({
|
||||
node,
|
||||
message: `Import of '${modulePath}' is not allowed.`,
|
||||
});
|
||||
}
|
||||
},
|
||||
|
||||
CallExpression(node) {
|
||||
if (
|
||||
node.callee.name === "require" &&
|
||||
node.arguments.length > 0 &&
|
||||
node.arguments[0].type === "Literal"
|
||||
) {
|
||||
const modulePath = node.arguments[0].value;
|
||||
if (!isModuleAllowed(modulePath)) {
|
||||
context.report({
|
||||
node,
|
||||
message: `Require of '${modulePath}' is not allowed.`,
|
||||
});
|
||||
}
|
||||
}
|
||||
},
|
||||
};
|
||||
},
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
export default plugin;
|
||||
Reference in New Issue
Block a user