@n8n/eslint-plugin-community-nodes 0.25.0 → 0.27.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.turbo/turbo-build.log +1 -1
- package/README.md +7 -1
- package/dist/plugin.d.ts +51 -15
- package/dist/plugin.d.ts.map +1 -1
- package/dist/plugin.js +12 -0
- package/dist/plugin.js.map +1 -1
- package/dist/rules/ai-node-package-json.d.ts +1 -1
- package/dist/rules/cred-class-field-icon-missing.d.ts +1 -1
- package/dist/rules/cred-class-oauth2-naming.d.ts +1 -1
- package/dist/rules/credential-password-field.d.ts.map +1 -1
- package/dist/rules/credential-password-field.js +3 -31
- package/dist/rules/credential-password-field.js.map +1 -1
- package/dist/rules/credential-unnecessary-password.d.ts +2 -0
- package/dist/rules/credential-unnecessary-password.d.ts.map +1 -0
- package/dist/rules/credential-unnecessary-password.js +54 -0
- package/dist/rules/credential-unnecessary-password.js.map +1 -0
- package/dist/rules/icon-validation.d.ts +1 -1
- package/dist/rules/index.d.ts +26 -20
- package/dist/rules/index.d.ts.map +1 -1
- package/dist/rules/index.js +12 -0
- package/dist/rules/index.js.map +1 -1
- package/dist/rules/no-credential-reuse.d.ts +1 -1
- package/dist/rules/no-dangerous-functions.d.ts +1 -1
- package/dist/rules/no-dead-files.d.ts +7 -0
- package/dist/rules/no-dead-files.d.ts.map +1 -0
- package/dist/rules/no-dead-files.js +57 -0
- package/dist/rules/no-dead-files.js.map +1 -0
- package/dist/rules/no-deprecated-workflow-functions.d.ts +1 -1
- package/dist/rules/no-hardcoded-secrets.d.ts +2 -0
- package/dist/rules/no-hardcoded-secrets.d.ts.map +1 -0
- package/dist/rules/no-hardcoded-secrets.js +147 -0
- package/dist/rules/no-hardcoded-secrets.js.map +1 -0
- package/dist/rules/no-restricted-imports.d.ts +1 -1
- package/dist/rules/no-restricted-imports.d.ts.map +1 -1
- package/dist/rules/no-restricted-imports.js +14 -5
- package/dist/rules/no-restricted-imports.js.map +1 -1
- package/dist/rules/no-silent-error-swallowing.d.ts +2 -0
- package/dist/rules/no-silent-error-swallowing.d.ts.map +1 -0
- package/dist/rules/no-silent-error-swallowing.js +112 -0
- package/dist/rules/no-silent-error-swallowing.js.map +1 -0
- package/dist/rules/node-class-description-icon-missing.d.ts +1 -1
- package/dist/rules/node-connection-type-literal.js.map +1 -1
- package/dist/rules/package-name-convention.d.ts +1 -1
- package/dist/rules/require-files-array.d.ts +2 -0
- package/dist/rules/require-files-array.d.ts.map +1 -0
- package/dist/rules/require-files-array.js +41 -0
- package/dist/rules/require-files-array.js.map +1 -0
- package/dist/rules/require-homepage.d.ts +2 -0
- package/dist/rules/require-homepage.d.ts.map +1 -0
- package/dist/rules/require-homepage.js +52 -0
- package/dist/rules/require-homepage.js.map +1 -0
- package/dist/rules/require-version.d.ts +1 -1
- package/dist/rules/trigger-node-conventions.d.ts +1 -1
- package/dist/rules/valid-author.d.ts +1 -1
- package/dist/rules/valid-credential-references.d.ts +1 -1
- package/dist/rules/valid-description.d.ts +1 -1
- package/dist/rules/valid-peer-dependencies.d.ts +1 -1
- package/dist/rules/webhook-lifecycle-complete.d.ts +1 -1
- package/dist/rules/webhook-lifecycle-complete.d.ts.map +1 -1
- package/dist/rules/webhook-lifecycle-complete.js +2 -3
- package/dist/rules/webhook-lifecycle-complete.js.map +1 -1
- package/dist/typecheck.tsbuildinfo +1 -1
- package/dist/utils/ast-utils.js.map +1 -1
- package/dist/utils/constants.d.ts +5 -0
- package/dist/utils/constants.d.ts.map +1 -0
- package/dist/utils/constants.js +15 -0
- package/dist/utils/constants.js.map +1 -0
- package/dist/utils/credential-fields.d.ts +20 -0
- package/dist/utils/credential-fields.d.ts.map +1 -0
- package/dist/utils/credential-fields.js +45 -0
- package/dist/utils/credential-fields.js.map +1 -0
- package/dist/utils/file-utils.d.ts +13 -0
- package/dist/utils/file-utils.d.ts.map +1 -1
- package/dist/utils/file-utils.js +44 -6
- package/dist/utils/file-utils.js.map +1 -1
- package/dist/utils/index.d.ts +2 -0
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +2 -0
- package/dist/utils/index.js.map +1 -1
- package/docs/rules/credential-password-field.md +3 -1
- package/docs/rules/credential-unnecessary-password.md +46 -0
- package/docs/rules/no-dead-files.md +56 -0
- package/docs/rules/no-hardcoded-secrets.md +59 -0
- package/docs/rules/no-restricted-imports.md +9 -0
- package/docs/rules/no-silent-error-swallowing.md +72 -0
- package/docs/rules/require-files-array.md +43 -0
- package/docs/rules/require-homepage.md +49 -0
- package/package.json +5 -4
- package/src/plugin.ts +12 -0
- package/src/rules/credential-password-field.ts +4 -40
- package/src/rules/credential-unnecessary-password.test.ts +105 -0
- package/src/rules/credential-unnecessary-password.ts +72 -0
- package/src/rules/index.ts +12 -0
- package/src/rules/no-dead-files.test.ts +128 -0
- package/src/rules/no-dead-files.ts +71 -0
- package/src/rules/no-hardcoded-secrets.test.ts +124 -0
- package/src/rules/no-hardcoded-secrets.ts +161 -0
- package/src/rules/no-restricted-imports.test.ts +63 -0
- package/src/rules/no-restricted-imports.ts +17 -4
- package/src/rules/no-silent-error-swallowing.test.ts +245 -0
- package/src/rules/no-silent-error-swallowing.ts +127 -0
- package/src/rules/require-files-array.test.ts +57 -0
- package/src/rules/require-files-array.ts +50 -0
- package/src/rules/require-homepage.test.ts +80 -0
- package/src/rules/require-homepage.ts +59 -0
- package/src/rules/webhook-lifecycle-complete.ts +4 -5
- package/src/utils/constants.ts +21 -0
- package/src/utils/credential-fields.ts +57 -0
- package/src/utils/file-utils.ts +50 -6
- package/src/utils/index.ts +2 -0
- package/tsconfig.json +1 -1
package/dist/rules/index.d.ts
CHANGED
|
@@ -1,45 +1,51 @@
|
|
|
1
1
|
export declare const rules: {
|
|
2
|
-
'ai-node-package-json': import("@typescript-eslint/utils/ts-eslint").RuleModule<"
|
|
2
|
+
'ai-node-package-json': import("@typescript-eslint/utils/ts-eslint").RuleModule<"invalidSdkVersion" | "missingPeerDep" | "missingSdkVersion" | "wrongLocation", [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
|
|
3
3
|
'no-restricted-globals': import("@typescript-eslint/utils/ts-eslint").RuleModule<"restrictedGlobal", [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
|
|
4
|
-
'no-restricted-imports': import("@typescript-eslint/utils/ts-eslint").RuleModule<"
|
|
4
|
+
'no-restricted-imports': import("@typescript-eslint/utils/ts-eslint").RuleModule<"restrictedDynamicImport" | "restrictedImport" | "restrictedRequire", [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
|
|
5
5
|
'credential-password-field': import("@typescript-eslint/utils/ts-eslint").RuleModule<"missingPasswordOption", [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
|
|
6
|
-
'no-deprecated-workflow-functions': import("@typescript-eslint/utils/ts-eslint").RuleModule<"
|
|
6
|
+
'no-deprecated-workflow-functions': import("@typescript-eslint/utils/ts-eslint").RuleModule<"deprecatedFunction" | "deprecatedRequestFunction" | "deprecatedType" | "deprecatedWithoutReplacement" | "suggestReplaceFunction" | "suggestReplaceType", [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
|
|
7
7
|
'no-emoji-in-options': import("@typescript-eslint/utils/ts-eslint").RuleModule<"emojiInOption", [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
|
|
8
8
|
'node-usable-as-tool': import("@typescript-eslint/utils/ts-eslint").RuleModule<"missingUsableAsTool", [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
|
|
9
|
-
'package-name-convention': import("@typescript-eslint/utils/ts-eslint").RuleModule<"
|
|
9
|
+
'package-name-convention': import("@typescript-eslint/utils/ts-eslint").RuleModule<"defaultPlaceholderName" | "invalidPackageName" | "missingName" | "renameTo", [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
|
|
10
10
|
'credential-test-required': import("@typescript-eslint/utils/ts-eslint").RuleModule<"addTemplate" | "missingCredentialTest", [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
|
|
11
|
-
'
|
|
12
|
-
'no-
|
|
11
|
+
'credential-unnecessary-password': import("@typescript-eslint/utils/ts-eslint").RuleModule<"unnecessaryPasswordOption", [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
|
|
12
|
+
'no-credential-reuse': import("@typescript-eslint/utils/ts-eslint").RuleModule<"credentialNotInPackage" | "didYouMean" | "useAvailable", [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
|
|
13
|
+
'no-dangerous-functions': import("@typescript-eslint/utils/ts-eslint").RuleModule<"noChildProcess" | "noEval" | "noFunctionConstructor", [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
|
|
14
|
+
'no-dead-files': import("@typescript-eslint/utils/ts-eslint").RuleModule<"deadFileFound", [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
|
|
13
15
|
'no-forbidden-lifecycle-scripts': import("@typescript-eslint/utils/ts-eslint").RuleModule<"forbiddenScript", [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
|
|
16
|
+
'no-hardcoded-secrets': import("@typescript-eslint/utils/ts-eslint").RuleModule<"hardcodedSecret", [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
|
|
14
17
|
'no-http-request-with-manual-auth': import("@typescript-eslint/utils/ts-eslint").RuleModule<"useHttpRequestWithAuthentication", [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
|
|
15
18
|
'no-overrides-field': import("@typescript-eslint/utils/ts-eslint").RuleModule<"overridesForbidden", [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
|
|
16
19
|
'no-runtime-dependencies': import("@typescript-eslint/utils/ts-eslint").RuleModule<"runtimeDependenciesForbidden", [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
|
|
20
|
+
'no-silent-error-swallowing': import("@typescript-eslint/utils/ts-eslint").RuleModule<"emptyCatch" | "silentReturn", [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
|
|
17
21
|
'no-template-placeholders': import("@typescript-eslint/utils/ts-eslint").RuleModule<"unresolvedPlaceholder", [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
|
|
18
|
-
'icon-validation': import("@typescript-eslint/utils/ts-eslint").RuleModule<"
|
|
22
|
+
'icon-validation': import("@typescript-eslint/utils/ts-eslint").RuleModule<"addFileProtocol" | "addPlaceholder" | "iconFileNotFound" | "invalidIconPath" | "lightDarkSame" | "missingIcon" | "similarIcon", [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
|
|
19
23
|
'icon-prefer-themed-variants': import("@typescript-eslint/utils/ts-eslint").RuleModule<"missingThemedVariants", [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
|
|
20
24
|
'resource-operation-pattern': import("@typescript-eslint/utils/ts-eslint").RuleModule<"tooManyOperationsWithoutResources", [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
|
|
21
|
-
'trigger-node-conventions': import("@typescript-eslint/utils/ts-eslint").RuleModule<"
|
|
25
|
+
'trigger-node-conventions': import("@typescript-eslint/utils/ts-eslint").RuleModule<"displayNameMissingTrigger" | "inputsNotEmpty" | "nameMissingSuffix", [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
|
|
22
26
|
'credential-documentation-url': import("@typescript-eslint/utils/ts-eslint").RuleModule<"invalidDocumentationUrl", [{
|
|
23
27
|
allowUrls?: boolean;
|
|
24
28
|
allowSlugs?: boolean;
|
|
25
29
|
}], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
|
|
26
|
-
'node-class-description-icon-missing': import("@typescript-eslint/utils/ts-eslint").RuleModule<"
|
|
27
|
-
'cred-class-field-icon-missing': import("@typescript-eslint/utils/ts-eslint").RuleModule<"
|
|
28
|
-
'cred-class-oauth2-naming': import("@typescript-eslint/utils/ts-eslint").RuleModule<"classNameMissingOAuth2" | "
|
|
30
|
+
'node-class-description-icon-missing': import("@typescript-eslint/utils/ts-eslint").RuleModule<"addPlaceholder" | "missingIcon", [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
|
|
31
|
+
'cred-class-field-icon-missing': import("@typescript-eslint/utils/ts-eslint").RuleModule<"addPlaceholder" | "missingIcon", [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
|
|
32
|
+
'cred-class-oauth2-naming': import("@typescript-eslint/utils/ts-eslint").RuleModule<"classNameMissingOAuth2" | "displayNameMissingOAuth2" | "nameMissingOAuth2", [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
|
|
29
33
|
'node-connection-type-literal': import("@typescript-eslint/utils/ts-eslint").RuleModule<"stringLiteralInInputs" | "stringLiteralInOutputs" | "unknownStringLiteralInInputs" | "unknownStringLiteralInOutputs", [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
|
|
30
34
|
'node-registration-complete': import("@typescript-eslint/utils/ts-eslint").RuleModule<"nodeNotRegistered", [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
|
|
31
35
|
'missing-paired-item': import("@typescript-eslint/utils/ts-eslint").RuleModule<"missingPairedItem", [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
|
|
32
|
-
'no-builder-hint-leakage': import("@typescript-eslint/utils/ts-eslint").RuleModule<"
|
|
33
|
-
scope?:
|
|
36
|
+
'no-builder-hint-leakage': import("@typescript-eslint/utils/ts-eslint").RuleModule<"connectionTypeLiteral" | "wireExpression", [{
|
|
37
|
+
scope?: 'builderHint' | 'all';
|
|
34
38
|
}], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
|
|
35
|
-
'n8n-object-validation': import("@typescript-eslint/utils/ts-eslint").RuleModule<"
|
|
39
|
+
'n8n-object-validation': import("@typescript-eslint/utils/ts-eslint").RuleModule<"credentialPathNotInDist" | "credentialPathNotString" | "emptyN8nNodes" | "invalidNodesApiVersion" | "invalidStrict" | "missingN8nNodes" | "missingN8nObject" | "missingNodesApiVersion" | "n8nCredentialsNotArray" | "n8nNodesNotArray" | "nodePathNotInDist" | "nodePathNotString" | "wrongLocationApiVersion", [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
|
|
40
|
+
'require-files-array': import("@typescript-eslint/utils/ts-eslint").RuleModule<"filesEmpty" | "filesMissing", [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
|
|
41
|
+
'require-homepage': import("@typescript-eslint/utils/ts-eslint").RuleModule<"homepageInvalid" | "homepageMissing", [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
|
|
36
42
|
'require-node-api-error': import("@typescript-eslint/utils/ts-eslint").RuleModule<"useNodeApiError" | "useNodeApiErrorInsteadOfGeneric", [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
|
|
37
43
|
'require-node-description-fields': import("@typescript-eslint/utils/ts-eslint").RuleModule<"missingField" | "missingFields", [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
|
|
38
|
-
'require-version': import("@typescript-eslint/utils/ts-eslint").RuleModule<"
|
|
39
|
-
'valid-author': import("@typescript-eslint/utils/ts-eslint").RuleModule<"
|
|
40
|
-
'valid-credential-references': import("@typescript-eslint/utils/ts-eslint").RuleModule<"
|
|
41
|
-
'valid-description': import("@typescript-eslint/utils/ts-eslint").RuleModule<"
|
|
42
|
-
'valid-peer-dependencies': import("@typescript-eslint/utils/ts-eslint").RuleModule<"
|
|
43
|
-
'webhook-lifecycle-complete': import("@typescript-eslint/utils/ts-eslint").RuleModule<"
|
|
44
|
+
'require-version': import("@typescript-eslint/utils/ts-eslint").RuleModule<"invalidVersion" | "missingVersion", [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
|
|
45
|
+
'valid-author': import("@typescript-eslint/utils/ts-eslint").RuleModule<"authorEmailMissing" | "authorMissing" | "authorNameMissing", [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
|
|
46
|
+
'valid-credential-references': import("@typescript-eslint/utils/ts-eslint").RuleModule<"credentialNotFound" | "didYouMean", [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
|
|
47
|
+
'valid-description': import("@typescript-eslint/utils/ts-eslint").RuleModule<"emptyDescription" | "missingDescription", [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
|
|
48
|
+
'valid-peer-dependencies': import("@typescript-eslint/utils/ts-eslint").RuleModule<"forbiddenPeerDependency" | "invalidPeerDependenciesType" | "missingN8nWorkflow" | "missingPeerDependencies" | "pinnedN8nWorkflow", [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
|
|
49
|
+
'webhook-lifecycle-complete': import("@typescript-eslint/utils/ts-eslint").RuleModule<"emptyWebhookMethods" | "missingLifecycleMethod" | "missingWebhookMethods", [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
|
|
44
50
|
};
|
|
45
51
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/rules/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/rules/index.ts"],"names":[],"mappings":"AA8CA,eAAO,MAAM,KAAK;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4CuB,CAAC"}
|
package/dist/rules/index.js
CHANGED
|
@@ -4,6 +4,7 @@ import { CredClassOAuth2NamingRule } from './cred-class-oauth2-naming.js';
|
|
|
4
4
|
import { CredentialDocumentationUrlRule } from './credential-documentation-url.js';
|
|
5
5
|
import { CredentialPasswordFieldRule } from './credential-password-field.js';
|
|
6
6
|
import { CredentialTestRequiredRule } from './credential-test-required.js';
|
|
7
|
+
import { CredentialUnnecessaryPasswordRule } from './credential-unnecessary-password.js';
|
|
7
8
|
import { IconPreferThemedVariantsRule } from './icon-prefer-themed-variants.js';
|
|
8
9
|
import { IconValidationRule } from './icon-validation.js';
|
|
9
10
|
import { MissingPairedItemRule } from './missing-paired-item.js';
|
|
@@ -11,20 +12,25 @@ import { N8nObjectValidationRule } from './n8n-object-validation.js';
|
|
|
11
12
|
import { NoBuilderHintLeakageRule } from './no-builder-hint-leakage.js';
|
|
12
13
|
import { NoCredentialReuseRule } from './no-credential-reuse.js';
|
|
13
14
|
import { NoDangerousFunctionsRule } from './no-dangerous-functions.js';
|
|
15
|
+
import { NoDeadFilesRule } from './no-dead-files.js';
|
|
14
16
|
import { NoDeprecatedWorkflowFunctionsRule } from './no-deprecated-workflow-functions.js';
|
|
15
17
|
import { NoEmojiInOptionsRule } from './no-emoji-in-options.js';
|
|
16
18
|
import { NoForbiddenLifecycleScriptsRule } from './no-forbidden-lifecycle-scripts.js';
|
|
19
|
+
import { NoHardcodedSecretsRule } from './no-hardcoded-secrets.js';
|
|
17
20
|
import { NoHttpRequestWithManualAuthRule } from './no-http-request-with-manual-auth.js';
|
|
18
21
|
import { NoOverridesFieldRule } from './no-overrides-field.js';
|
|
19
22
|
import { NoRestrictedGlobalsRule } from './no-restricted-globals.js';
|
|
20
23
|
import { NoRestrictedImportsRule } from './no-restricted-imports.js';
|
|
21
24
|
import { NoRuntimeDependenciesRule } from './no-runtime-dependencies.js';
|
|
25
|
+
import { NoSilentErrorSwallowingRule } from './no-silent-error-swallowing.js';
|
|
22
26
|
import { NoTemplatePlaceholdersRule } from './no-template-placeholders.js';
|
|
23
27
|
import { NodeClassDescriptionIconMissingRule } from './node-class-description-icon-missing.js';
|
|
24
28
|
import { NodeConnectionTypeLiteralRule } from './node-connection-type-literal.js';
|
|
25
29
|
import { NodeRegistrationCompleteRule } from './node-registration-complete.js';
|
|
26
30
|
import { NodeUsableAsToolRule } from './node-usable-as-tool.js';
|
|
27
31
|
import { PackageNameConventionRule } from './package-name-convention.js';
|
|
32
|
+
import { RequireFilesArrayRule } from './require-files-array.js';
|
|
33
|
+
import { RequireHomepageRule } from './require-homepage.js';
|
|
28
34
|
import { RequireNodeApiErrorRule } from './require-node-api-error.js';
|
|
29
35
|
import { RequireNodeDescriptionFieldsRule } from './require-node-description-fields.js';
|
|
30
36
|
import { RequireVersionRule } from './require-version.js';
|
|
@@ -45,12 +51,16 @@ export const rules = {
|
|
|
45
51
|
'node-usable-as-tool': NodeUsableAsToolRule,
|
|
46
52
|
'package-name-convention': PackageNameConventionRule,
|
|
47
53
|
'credential-test-required': CredentialTestRequiredRule,
|
|
54
|
+
'credential-unnecessary-password': CredentialUnnecessaryPasswordRule,
|
|
48
55
|
'no-credential-reuse': NoCredentialReuseRule,
|
|
49
56
|
'no-dangerous-functions': NoDangerousFunctionsRule,
|
|
57
|
+
'no-dead-files': NoDeadFilesRule,
|
|
50
58
|
'no-forbidden-lifecycle-scripts': NoForbiddenLifecycleScriptsRule,
|
|
59
|
+
'no-hardcoded-secrets': NoHardcodedSecretsRule,
|
|
51
60
|
'no-http-request-with-manual-auth': NoHttpRequestWithManualAuthRule,
|
|
52
61
|
'no-overrides-field': NoOverridesFieldRule,
|
|
53
62
|
'no-runtime-dependencies': NoRuntimeDependenciesRule,
|
|
63
|
+
'no-silent-error-swallowing': NoSilentErrorSwallowingRule,
|
|
54
64
|
'no-template-placeholders': NoTemplatePlaceholdersRule,
|
|
55
65
|
'icon-validation': IconValidationRule,
|
|
56
66
|
'icon-prefer-themed-variants': IconPreferThemedVariantsRule,
|
|
@@ -65,6 +75,8 @@ export const rules = {
|
|
|
65
75
|
'missing-paired-item': MissingPairedItemRule,
|
|
66
76
|
'no-builder-hint-leakage': NoBuilderHintLeakageRule,
|
|
67
77
|
'n8n-object-validation': N8nObjectValidationRule,
|
|
78
|
+
'require-files-array': RequireFilesArrayRule,
|
|
79
|
+
'require-homepage': RequireHomepageRule,
|
|
68
80
|
'require-node-api-error': RequireNodeApiErrorRule,
|
|
69
81
|
'require-node-description-fields': RequireNodeDescriptionFieldsRule,
|
|
70
82
|
'require-version': RequireVersionRule,
|
package/dist/rules/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/rules/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/rules/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const NoCredentialReuseRule: import("@typescript-eslint/utils/ts-eslint").RuleModule<"
|
|
1
|
+
export declare const NoCredentialReuseRule: import("@typescript-eslint/utils/ts-eslint").RuleModule<"credentialNotInPackage" | "didYouMean" | "useAvailable", [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
|
|
2
2
|
//# sourceMappingURL=no-credential-reuse.d.ts.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const NoDangerousFunctionsRule: import("@typescript-eslint/utils/ts-eslint").RuleModule<"
|
|
1
|
+
export declare const NoDangerousFunctionsRule: import("@typescript-eslint/utils/ts-eslint").RuleModule<"noChildProcess" | "noEval" | "noFunctionConstructor", [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
|
|
2
2
|
//# sourceMappingURL=no-dangerous-functions.d.ts.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Returns true if the given filename looks like a leftover backup, editor, or
|
|
3
|
+
* test-artifact file that should not ship with a community node.
|
|
4
|
+
*/
|
|
5
|
+
export declare function isDeadFileName(fileName: string): boolean;
|
|
6
|
+
export declare const NoDeadFilesRule: import("@typescript-eslint/utils/ts-eslint").RuleModule<"deadFileFound", [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
|
|
7
|
+
//# sourceMappingURL=no-dead-files.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"no-dead-files.d.ts","sourceRoot":"","sources":["../../src/rules/no-dead-files.ts"],"names":[],"mappings":"AAmBA;;;GAGG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAExD;AAED,eAAO,MAAM,eAAe,kJA2C1B,CAAC"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { AST_NODE_TYPES } from '@typescript-eslint/utils';
|
|
2
|
+
import * as path from 'node:path';
|
|
3
|
+
import { createRule, findFilesInPackageDirs } from '../utils/index.js';
|
|
4
|
+
// Package subdirectories that ship in the published artifact and should stay clean.
|
|
5
|
+
const SCAN_DIRS = ['nodes', 'credentials'];
|
|
6
|
+
const DEAD_FILE_MATCHERS = [
|
|
7
|
+
(fileName) => fileName.endsWith('.backup'),
|
|
8
|
+
(fileName) => fileName.endsWith('.bak'),
|
|
9
|
+
// Windows "mark of the web" ADS files, extracted as literal filenames on
|
|
10
|
+
// filesystems without alternate data streams (e.g. `Foo.node.ts:Zone.Identifier`).
|
|
11
|
+
(fileName) => fileName.endsWith('Zone.Identifier'),
|
|
12
|
+
(fileName) => fileName === 'test.js',
|
|
13
|
+
(fileName) => fileName === 'test.ts',
|
|
14
|
+
];
|
|
15
|
+
/**
|
|
16
|
+
* Returns true if the given filename looks like a leftover backup, editor, or
|
|
17
|
+
* test-artifact file that should not ship with a community node.
|
|
18
|
+
*/
|
|
19
|
+
export function isDeadFileName(fileName) {
|
|
20
|
+
return DEAD_FILE_MATCHERS.some((matches) => matches(fileName));
|
|
21
|
+
}
|
|
22
|
+
export const NoDeadFilesRule = createRule({
|
|
23
|
+
name: 'no-dead-files',
|
|
24
|
+
meta: {
|
|
25
|
+
type: 'problem',
|
|
26
|
+
docs: {
|
|
27
|
+
description: 'Disallow leftover backup, editor, and test-artifact files in the `nodes/` and `credentials/` directories of a community node package',
|
|
28
|
+
},
|
|
29
|
+
messages: {
|
|
30
|
+
deadFileFound: 'Remove the leftover file "{{ file }}". Backup, editor, and test-artifact files should not be published with a community node.',
|
|
31
|
+
},
|
|
32
|
+
schema: [],
|
|
33
|
+
},
|
|
34
|
+
defaultOptions: [],
|
|
35
|
+
create(context) {
|
|
36
|
+
if (!context.filename.endsWith('package.json')) {
|
|
37
|
+
return {};
|
|
38
|
+
}
|
|
39
|
+
return {
|
|
40
|
+
ObjectExpression(node) {
|
|
41
|
+
// Only inspect the root object of the package.json file, so the scan runs once.
|
|
42
|
+
if (node.parent?.type !== AST_NODE_TYPES.ExpressionStatement) {
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
const packageDir = path.dirname(context.filename);
|
|
46
|
+
for (const deadFile of findFilesInPackageDirs(context.filename, SCAN_DIRS, isDeadFileName)) {
|
|
47
|
+
context.report({
|
|
48
|
+
node,
|
|
49
|
+
messageId: 'deadFileFound',
|
|
50
|
+
data: { file: path.relative(packageDir, deadFile) },
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
},
|
|
54
|
+
};
|
|
55
|
+
},
|
|
56
|
+
});
|
|
57
|
+
//# sourceMappingURL=no-dead-files.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"no-dead-files.js","sourceRoot":"","sources":["../../src/rules/no-dead-files.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAElC,OAAO,EAAE,UAAU,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAEvE,oFAAoF;AACpF,MAAM,SAAS,GAAG,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;AAE3C,MAAM,kBAAkB,GAAyC;IAChE,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC;IAC1C,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC;IACvC,yEAAyE;IACzE,mFAAmF;IACnF,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,iBAAiB,CAAC;IAClD,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,KAAK,SAAS;IACpC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,KAAK,SAAS;CACpC,CAAC;AAEF;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,QAAgB;IAC9C,OAAO,kBAAkB,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;AAChE,CAAC;AAED,MAAM,CAAC,MAAM,eAAe,GAAG,UAAU,CAAC;IACzC,IAAI,EAAE,eAAe;IACrB,IAAI,EAAE;QACL,IAAI,EAAE,SAAS;QACf,IAAI,EAAE;YACL,WAAW,EACV,sIAAsI;SACvI;QACD,QAAQ,EAAE;YACT,aAAa,EACZ,+HAA+H;SAChI;QACD,MAAM,EAAE,EAAE;KACV;IACD,cAAc,EAAE,EAAE;IAClB,MAAM,CAAC,OAAO;QACb,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;YAChD,OAAO,EAAE,CAAC;QACX,CAAC;QAED,OAAO;YACN,gBAAgB,CAAC,IAA+B;gBAC/C,gFAAgF;gBAChF,IAAI,IAAI,CAAC,MAAM,EAAE,IAAI,KAAK,cAAc,CAAC,mBAAmB,EAAE,CAAC;oBAC9D,OAAO;gBACR,CAAC;gBAED,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;gBAElD,KAAK,MAAM,QAAQ,IAAI,sBAAsB,CAC5C,OAAO,CAAC,QAAQ,EAChB,SAAS,EACT,cAAc,CACd,EAAE,CAAC;oBACH,OAAO,CAAC,MAAM,CAAC;wBACd,IAAI;wBACJ,SAAS,EAAE,eAAe;wBAC1B,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,QAAQ,CAAC,EAAE;qBACnD,CAAC,CAAC;gBACJ,CAAC;YACF,CAAC;SACD,CAAC;IACH,CAAC;CACD,CAAC,CAAC"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const NoDeprecatedWorkflowFunctionsRule: import("@typescript-eslint/utils/ts-eslint").RuleModule<"
|
|
1
|
+
export declare const NoDeprecatedWorkflowFunctionsRule: import("@typescript-eslint/utils/ts-eslint").RuleModule<"deprecatedFunction" | "deprecatedRequestFunction" | "deprecatedType" | "deprecatedWithoutReplacement" | "suggestReplaceFunction" | "suggestReplaceType", [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
|
|
2
2
|
//# sourceMappingURL=no-deprecated-workflow-functions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"no-hardcoded-secrets.d.ts","sourceRoot":"","sources":["../../src/rules/no-hardcoded-secrets.ts"],"names":[],"mappings":"AAkGA,eAAO,MAAM,sBAAsB,oJA8DjC,CAAC"}
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
import { TSESTree } from '@typescript-eslint/utils';
|
|
2
|
+
import { createRule, getStringLiteralValue, isSensitiveName } from '../utils/index.js';
|
|
3
|
+
const { AST_NODE_TYPES } = TSESTree;
|
|
4
|
+
/**
|
|
5
|
+
* Extra name fragments (beyond the shared sensitive set in `credential-fields`)
|
|
6
|
+
* that suggest a JS identifier holds a credential. Bare `key`/`auth` are broad,
|
|
7
|
+
* but the value heuristic below narrows the match, and they catch separator
|
|
8
|
+
* forms such as `api_key` that the compound fragments miss.
|
|
9
|
+
*/
|
|
10
|
+
const EXTRA_SECRET_NAME_FRAGMENTS = ['key', 'passwd', 'auth'];
|
|
11
|
+
/**
|
|
12
|
+
* Fragments that mark a value as an obvious placeholder rather than a real
|
|
13
|
+
* secret. These are skipped to keep the (intentionally heuristic) rule quieter.
|
|
14
|
+
*/
|
|
15
|
+
const PLACEHOLDER_FRAGMENTS = [
|
|
16
|
+
'example',
|
|
17
|
+
'placeholder',
|
|
18
|
+
'changeme',
|
|
19
|
+
'your',
|
|
20
|
+
'dummy',
|
|
21
|
+
'xxxx',
|
|
22
|
+
'<',
|
|
23
|
+
'{{',
|
|
24
|
+
];
|
|
25
|
+
const MIN_SECRET_LENGTH = 16;
|
|
26
|
+
function nameLooksLikeSecret(name) {
|
|
27
|
+
// `exclusions: []` disables the URL/ID/pub name exclusions on purpose: the
|
|
28
|
+
// value heuristic below is the real gate, so a suspicious value on e.g.
|
|
29
|
+
// `publicKeyUrl` should still be flagged rather than silently skipped. Erring
|
|
30
|
+
// toward a false positive is safer than missing a secret.
|
|
31
|
+
return isSensitiveName(name, { extra: EXTRA_SECRET_NAME_FRAGMENTS, exclusions: [] });
|
|
32
|
+
}
|
|
33
|
+
function looksLikePlaceholder(value) {
|
|
34
|
+
const lower = value.toLowerCase();
|
|
35
|
+
return PLACEHOLDER_FRAGMENTS.some((fragment) => lower.includes(fragment));
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Heuristic: does this string value look like a real credential? Real secrets
|
|
39
|
+
* are long, contiguous tokens with the shape of a hex digest or a base64/token
|
|
40
|
+
* string. The digit+letter/punctuation requirement keeps ordinary long
|
|
41
|
+
* camelCase words from being treated as secrets.
|
|
42
|
+
*/
|
|
43
|
+
function looksLikeSecretValue(value) {
|
|
44
|
+
// Require at least MIN_SECRET_LENGTH characters; anything shorter is almost
|
|
45
|
+
// always a non-secret word or identifier rather than a generated credential.
|
|
46
|
+
if (value.length < MIN_SECRET_LENGTH)
|
|
47
|
+
return false;
|
|
48
|
+
if (/\s/.test(value))
|
|
49
|
+
return false;
|
|
50
|
+
if (looksLikePlaceholder(value))
|
|
51
|
+
return false;
|
|
52
|
+
// A long, purely hexadecimal string (e.g. an MD5/SHA/hex API key).
|
|
53
|
+
if (/^[0-9a-f]+$/i.test(value))
|
|
54
|
+
return true;
|
|
55
|
+
// A base64 / base64url / token-shaped string.
|
|
56
|
+
if (/^[A-Za-z0-9+/=_.-]+$/.test(value)) {
|
|
57
|
+
const hasDigit = /[0-9]/.test(value);
|
|
58
|
+
const hasLetter = /[a-z]/i.test(value);
|
|
59
|
+
// Only `+ / =` count as a standalone signal: they are hallmarks of base64
|
|
60
|
+
// but rarely appear in ordinary code strings. `. - _` are excluded here
|
|
61
|
+
// because dotted/hyphenated/snake_case constants (scopes, paths, ids) use
|
|
62
|
+
// them heavily and would otherwise be misflagged.
|
|
63
|
+
const hasStrongBase64Punctuation = /[+/=]/.test(value);
|
|
64
|
+
return (hasDigit && hasLetter) || hasStrongBase64Punctuation;
|
|
65
|
+
}
|
|
66
|
+
return false;
|
|
67
|
+
}
|
|
68
|
+
function getStaticStringValue(node) {
|
|
69
|
+
if (!node)
|
|
70
|
+
return null;
|
|
71
|
+
const literal = getStringLiteralValue(node);
|
|
72
|
+
if (literal !== null)
|
|
73
|
+
return literal;
|
|
74
|
+
if (node.type === AST_NODE_TYPES.TemplateLiteral &&
|
|
75
|
+
node.expressions.length === 0 &&
|
|
76
|
+
node.quasis.length === 1) {
|
|
77
|
+
return node.quasis[0]?.value.cooked ?? null;
|
|
78
|
+
}
|
|
79
|
+
return null;
|
|
80
|
+
}
|
|
81
|
+
function getKeyName(key) {
|
|
82
|
+
if (key.type === AST_NODE_TYPES.Identifier)
|
|
83
|
+
return key.name;
|
|
84
|
+
if (key.type === AST_NODE_TYPES.Literal && typeof key.value === 'string')
|
|
85
|
+
return key.value;
|
|
86
|
+
return null;
|
|
87
|
+
}
|
|
88
|
+
export const NoHardcodedSecretsRule = createRule({
|
|
89
|
+
name: 'no-hardcoded-secrets',
|
|
90
|
+
meta: {
|
|
91
|
+
type: 'problem',
|
|
92
|
+
docs: {
|
|
93
|
+
description: 'Disallow hardcoded secrets (API keys, tokens, passwords) embedded as string literals in source.',
|
|
94
|
+
},
|
|
95
|
+
messages: {
|
|
96
|
+
hardcodedSecret: 'Possible hardcoded secret assigned to `{{ name }}`. Store secrets in credentials or environment variables instead of embedding them in source. If this is not a real secret, rename the variable or move the value out of source to silence this rule.',
|
|
97
|
+
},
|
|
98
|
+
schema: [],
|
|
99
|
+
},
|
|
100
|
+
defaultOptions: [],
|
|
101
|
+
create(context) {
|
|
102
|
+
const check = (name, valueNode) => {
|
|
103
|
+
if (!name || !valueNode || !nameLooksLikeSecret(name))
|
|
104
|
+
return;
|
|
105
|
+
const value = getStaticStringValue(valueNode);
|
|
106
|
+
if (value === null || !looksLikeSecretValue(value))
|
|
107
|
+
return;
|
|
108
|
+
context.report({
|
|
109
|
+
node: valueNode,
|
|
110
|
+
messageId: 'hardcodedSecret',
|
|
111
|
+
data: { name },
|
|
112
|
+
});
|
|
113
|
+
};
|
|
114
|
+
return {
|
|
115
|
+
// const apiKey = '...'
|
|
116
|
+
VariableDeclarator(node) {
|
|
117
|
+
if (node.id.type !== AST_NODE_TYPES.Identifier)
|
|
118
|
+
return;
|
|
119
|
+
check(node.id.name, node.init);
|
|
120
|
+
},
|
|
121
|
+
// class field: private token = '...'
|
|
122
|
+
PropertyDefinition(node) {
|
|
123
|
+
if (node.computed)
|
|
124
|
+
return;
|
|
125
|
+
check(getKeyName(node.key), node.value);
|
|
126
|
+
},
|
|
127
|
+
// object literal: { apiKey: '...' } or { 'api_key': '...' }
|
|
128
|
+
Property(node) {
|
|
129
|
+
if (node.computed)
|
|
130
|
+
return;
|
|
131
|
+
check(getKeyName(node.key), node.value);
|
|
132
|
+
},
|
|
133
|
+
// this.secret = '...' / config.token = '...' / secret = '...'
|
|
134
|
+
AssignmentExpression(node) {
|
|
135
|
+
if (node.left.type === AST_NODE_TYPES.Identifier) {
|
|
136
|
+
check(node.left.name, node.right);
|
|
137
|
+
}
|
|
138
|
+
else if (node.left.type === AST_NODE_TYPES.MemberExpression &&
|
|
139
|
+
!node.left.computed &&
|
|
140
|
+
node.left.property.type === AST_NODE_TYPES.Identifier) {
|
|
141
|
+
check(node.left.property.name, node.right);
|
|
142
|
+
}
|
|
143
|
+
},
|
|
144
|
+
};
|
|
145
|
+
},
|
|
146
|
+
});
|
|
147
|
+
//# sourceMappingURL=no-hardcoded-secrets.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"no-hardcoded-secrets.js","sourceRoot":"","sources":["../../src/rules/no-hardcoded-secrets.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const NoRestrictedImportsRule: import("@typescript-eslint/utils/ts-eslint").RuleModule<"
|
|
1
|
+
export declare const NoRestrictedImportsRule: import("@typescript-eslint/utils/ts-eslint").RuleModule<"restrictedDynamicImport" | "restrictedImport" | "restrictedRequire", [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
|
|
2
2
|
//# sourceMappingURL=no-restricted-imports.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"no-restricted-imports.d.ts","sourceRoot":"","sources":["../../src/rules/no-restricted-imports.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"no-restricted-imports.d.ts","sourceRoot":"","sources":["../../src/rules/no-restricted-imports.ts"],"names":[],"mappings":"AAuCA,eAAO,MAAM,uBAAuB,uMAkElC,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { getModulePath, isDirectRequireCall, isRequireMemberCall, createRule, } from '../utils/index.js';
|
|
1
|
+
import { getModulePath, isDirectRequireCall, isRequireMemberCall, createRule, findPackageJson, readPackageJsonDevDependencies, } from '../utils/index.js';
|
|
2
2
|
const allowedModules = [
|
|
3
3
|
'n8n-workflow',
|
|
4
4
|
'ai-node-sdk',
|
|
@@ -11,7 +11,7 @@ const allowedModules = [
|
|
|
11
11
|
'node:crypto',
|
|
12
12
|
'@n8n/ai-node-sdk',
|
|
13
13
|
];
|
|
14
|
-
const isModuleAllowed = (modulePath) => {
|
|
14
|
+
const isModuleAllowed = (modulePath, devDependencies) => {
|
|
15
15
|
if (modulePath.startsWith('./') || modulePath.startsWith('../'))
|
|
16
16
|
return true;
|
|
17
17
|
const moduleName = modulePath.startsWith('@')
|
|
@@ -19,6 +19,14 @@ const isModuleAllowed = (modulePath) => {
|
|
|
19
19
|
: modulePath.split('/')[0];
|
|
20
20
|
if (!moduleName)
|
|
21
21
|
return true;
|
|
22
|
+
// Dev dependencies (e.g. `vitest`) are never installed at runtime on n8n
|
|
23
|
+
// Cloud, so they are not subject to this rule — it targets runtime
|
|
24
|
+
// dependencies only. `no-runtime-dependencies` already enforces that the
|
|
25
|
+
// package's `dependencies` field is empty, so any external package an
|
|
26
|
+
// author uses must be a devDependency (bundled at build) or a
|
|
27
|
+
// peerDependency (provided by the instance).
|
|
28
|
+
if (devDependencies.has(moduleName))
|
|
29
|
+
return true;
|
|
22
30
|
return allowedModules.includes(moduleName);
|
|
23
31
|
};
|
|
24
32
|
export const NoRestrictedImportsRule = createRule({
|
|
@@ -37,10 +45,11 @@ export const NoRestrictedImportsRule = createRule({
|
|
|
37
45
|
},
|
|
38
46
|
defaultOptions: [],
|
|
39
47
|
create(context) {
|
|
48
|
+
const devDependencies = readPackageJsonDevDependencies(findPackageJson(context.physicalFilename));
|
|
40
49
|
return {
|
|
41
50
|
ImportDeclaration(node) {
|
|
42
51
|
const modulePath = getModulePath(node.source);
|
|
43
|
-
if (modulePath && !isModuleAllowed(modulePath)) {
|
|
52
|
+
if (modulePath && !isModuleAllowed(modulePath, devDependencies)) {
|
|
44
53
|
context.report({
|
|
45
54
|
node,
|
|
46
55
|
messageId: 'restrictedImport',
|
|
@@ -52,7 +61,7 @@ export const NoRestrictedImportsRule = createRule({
|
|
|
52
61
|
},
|
|
53
62
|
ImportExpression(node) {
|
|
54
63
|
const modulePath = getModulePath(node.source);
|
|
55
|
-
if (modulePath && !isModuleAllowed(modulePath)) {
|
|
64
|
+
if (modulePath && !isModuleAllowed(modulePath, devDependencies)) {
|
|
56
65
|
context.report({
|
|
57
66
|
node,
|
|
58
67
|
messageId: 'restrictedDynamicImport',
|
|
@@ -65,7 +74,7 @@ export const NoRestrictedImportsRule = createRule({
|
|
|
65
74
|
CallExpression(node) {
|
|
66
75
|
if (isDirectRequireCall(node) || isRequireMemberCall(node)) {
|
|
67
76
|
const modulePath = getModulePath(node.arguments[0] ?? null);
|
|
68
|
-
if (modulePath && !isModuleAllowed(modulePath)) {
|
|
77
|
+
if (modulePath && !isModuleAllowed(modulePath, devDependencies)) {
|
|
69
78
|
context.report({
|
|
70
79
|
node,
|
|
71
80
|
messageId: 'restrictedRequire',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"no-restricted-imports.js","sourceRoot":"","sources":["../../src/rules/no-restricted-imports.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,aAAa,EACb,mBAAmB,EACnB,mBAAmB,EACnB,UAAU,
|
|
1
|
+
{"version":3,"file":"no-restricted-imports.js","sourceRoot":"","sources":["../../src/rules/no-restricted-imports.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"no-silent-error-swallowing.d.ts","sourceRoot":"","sources":["../../src/rules/no-silent-error-swallowing.ts"],"names":[],"mappings":"AA6CA,eAAO,MAAM,2BAA2B,gKAiFtC,CAAC"}
|