@n8n/eslint-plugin-community-nodes 0.19.0 → 0.21.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.
Files changed (84) hide show
  1. package/.turbo/turbo-build$colon$unchecked.log +4 -0
  2. package/README.md +9 -1
  3. package/dist/plugin.d.ts +48 -0
  4. package/dist/plugin.d.ts.map +1 -1
  5. package/dist/plugin.js +16 -0
  6. package/dist/plugin.js.map +1 -1
  7. package/dist/rules/cred-filename-against-convention.d.ts +2 -0
  8. package/dist/rules/cred-filename-against-convention.d.ts.map +1 -0
  9. package/dist/rules/cred-filename-against-convention.js +42 -0
  10. package/dist/rules/cred-filename-against-convention.js.map +1 -0
  11. package/dist/rules/icon-prefer-themed-variants.d.ts +2 -0
  12. package/dist/rules/icon-prefer-themed-variants.d.ts.map +1 -0
  13. package/dist/rules/icon-prefer-themed-variants.js +53 -0
  14. package/dist/rules/icon-prefer-themed-variants.js.map +1 -0
  15. package/dist/rules/icon-validation.d.ts +1 -1
  16. package/dist/rules/icon-validation.d.ts.map +1 -1
  17. package/dist/rules/icon-validation.js +4 -25
  18. package/dist/rules/icon-validation.js.map +1 -1
  19. package/dist/rules/index.d.ts +9 -1
  20. package/dist/rules/index.d.ts.map +1 -1
  21. package/dist/rules/index.js +16 -0
  22. package/dist/rules/index.js.map +1 -1
  23. package/dist/rules/no-dangerous-functions.d.ts +2 -0
  24. package/dist/rules/no-dangerous-functions.d.ts.map +1 -0
  25. package/dist/rules/no-dangerous-functions.js +121 -0
  26. package/dist/rules/no-dangerous-functions.js.map +1 -0
  27. package/dist/rules/no-emoji-in-options.d.ts +2 -0
  28. package/dist/rules/no-emoji-in-options.d.ts.map +1 -0
  29. package/dist/rules/no-emoji-in-options.js +86 -0
  30. package/dist/rules/no-emoji-in-options.js.map +1 -0
  31. package/dist/rules/node-filename-against-convention.d.ts +2 -0
  32. package/dist/rules/node-filename-against-convention.d.ts.map +1 -0
  33. package/dist/rules/node-filename-against-convention.js +61 -0
  34. package/dist/rules/node-filename-against-convention.js.map +1 -0
  35. package/dist/rules/node-registration-complete.d.ts +2 -0
  36. package/dist/rules/node-registration-complete.d.ts.map +1 -0
  37. package/dist/rules/node-registration-complete.js +60 -0
  38. package/dist/rules/node-registration-complete.js.map +1 -0
  39. package/dist/rules/require-version.d.ts +2 -0
  40. package/dist/rules/require-version.d.ts.map +1 -0
  41. package/dist/rules/require-version.js +50 -0
  42. package/dist/rules/require-version.js.map +1 -0
  43. package/dist/rules/valid-author.d.ts +2 -0
  44. package/dist/rules/valid-author.d.ts.map +1 -0
  45. package/dist/rules/valid-author.js +89 -0
  46. package/dist/rules/valid-author.js.map +1 -0
  47. package/dist/typecheck.tsbuildinfo +1 -0
  48. package/dist/utils/file-utils.d.ts +7 -2
  49. package/dist/utils/file-utils.d.ts.map +1 -1
  50. package/dist/utils/file-utils.js +47 -10
  51. package/dist/utils/file-utils.js.map +1 -1
  52. package/docs/rules/cred-filename-against-convention.md +42 -0
  53. package/docs/rules/icon-prefer-themed-variants.md +71 -0
  54. package/docs/rules/icon-validation.md +5 -3
  55. package/docs/rules/no-dangerous-functions.md +41 -0
  56. package/docs/rules/no-emoji-in-options.md +60 -0
  57. package/docs/rules/node-filename-against-convention.md +50 -0
  58. package/docs/rules/node-registration-complete.md +46 -0
  59. package/docs/rules/require-version.md +51 -0
  60. package/docs/rules/valid-author.md +60 -0
  61. package/package.json +5 -4
  62. package/src/plugin.ts +16 -0
  63. package/src/rules/cred-filename-against-convention.test.ts +72 -0
  64. package/src/rules/cred-filename-against-convention.ts +48 -0
  65. package/src/rules/icon-prefer-themed-variants.test.ts +128 -0
  66. package/src/rules/icon-prefer-themed-variants.ts +70 -0
  67. package/src/rules/icon-validation.test.ts +10 -0
  68. package/src/rules/icon-validation.ts +4 -28
  69. package/src/rules/index.ts +16 -0
  70. package/src/rules/no-dangerous-functions.test.ts +83 -0
  71. package/src/rules/no-dangerous-functions.ts +155 -0
  72. package/src/rules/no-emoji-in-options.test.ts +157 -0
  73. package/src/rules/no-emoji-in-options.ts +105 -0
  74. package/src/rules/node-filename-against-convention.test.ts +115 -0
  75. package/src/rules/node-filename-against-convention.ts +76 -0
  76. package/src/rules/node-registration-complete.test.ts +87 -0
  77. package/src/rules/node-registration-complete.ts +79 -0
  78. package/src/rules/require-version.test.ts +90 -0
  79. package/src/rules/require-version.ts +62 -0
  80. package/src/rules/valid-author.test.ts +108 -0
  81. package/src/rules/valid-author.ts +100 -0
  82. package/src/utils/file-utils.ts +58 -11
  83. package/.turbo/turbo-build.log +0 -4
  84. package/tsconfig.build.tsbuildinfo +0 -1
@@ -0,0 +1,4 @@
1
+
2
+ > @n8n/eslint-plugin-community-nodes@0.21.0 build:unchecked /home/runner/work/n8n/n8n/packages/@n8n/eslint-plugin-community-nodes
3
+ > tsc --project tsconfig.build.json --noCheck
4
+
package/README.md CHANGED
@@ -51,15 +51,19 @@ export default [
51
51
  | [cred-class-name-field-conventions](docs/rules/cred-class-name-field-conventions.md) | Credential `name` field must end with `Api` and start with a lowercase letter | ✅ ☑️ | | 🔧 | | |
52
52
  | [cred-class-name-suffix](docs/rules/cred-class-name-suffix.md) | Credential class names must be suffixed with `Api` | ✅ ☑️ | | 🔧 | | |
53
53
  | [cred-class-oauth2-naming](docs/rules/cred-class-oauth2-naming.md) | OAuth2 credentials must include `OAuth2` in the class name, `name`, and `displayName` | ✅ ☑️ | | 🔧 | | |
54
+ | [cred-filename-against-convention](docs/rules/cred-filename-against-convention.md) | Credential filename must match the credential class name | ✅ ☑️ | | | | |
54
55
  | [credential-documentation-url](docs/rules/credential-documentation-url.md) | Enforce valid credential documentationUrl format (URL or lowercase alphanumeric slug) | ✅ ☑️ | | 🔧 | | |
55
56
  | [credential-password-field](docs/rules/credential-password-field.md) | Ensure credential fields with sensitive names have typeOptions.password = true | ✅ ☑️ | | 🔧 | | |
56
57
  | [credential-test-required](docs/rules/credential-test-required.md) | Ensure credentials have a credential test | ✅ ☑️ | | | 💡 | |
57
- | [icon-validation](docs/rules/icon-validation.md) | Validate node and credential icon files exist, are SVG format, and light/dark icons are different | ✅ ☑️ | | | 💡 | |
58
+ | [icon-prefer-themed-variants](docs/rules/icon-prefer-themed-variants.md) | Encourage node and credential icons to provide light/dark variants instead of a single icon file | | ✅ ☑️ | | | |
59
+ | [icon-validation](docs/rules/icon-validation.md) | Validate node and credential icon files exist, use the file: protocol, and that light/dark icons are different | ✅ ☑️ | | | 💡 | |
58
60
  | [missing-paired-item](docs/rules/missing-paired-item.md) | Require pairedItem on INodeExecutionData objects in execute() methods to preserve item linking. | ✅ ☑️ | | | | |
59
61
  | [n8n-object-validation](docs/rules/n8n-object-validation.md) | Validate the structure of the "n8n" object in community node package.json (required keys, types, and dist/ paths) | ✅ ☑️ | | | | |
60
62
  | [no-builder-hint-leakage](docs/rules/no-builder-hint-leakage.md) | Disallow wire-format expression syntax (={{...}}) and NodeConnectionType string literals in builderHint texts and AI-builder prompts. Use expr() and SDK-canonical references instead. | ✅ ☑️ | | | | |
61
63
  | [no-credential-reuse](docs/rules/no-credential-reuse.md) | Prevent credential re-use security issues by ensuring nodes only reference credentials from the same package | ✅ ☑️ | | | 💡 | |
64
+ | [no-dangerous-functions](docs/rules/no-dangerous-functions.md) | Disallow `eval`, the `Function` constructor, and `child_process` process-spawning functions (`exec`, `spawn`, etc.) in community nodes. | ✅ ☑️ | | | | |
62
65
  | [no-deprecated-workflow-functions](docs/rules/no-deprecated-workflow-functions.md) | Disallow usage of deprecated functions and types from n8n-workflow package | ✅ ☑️ | | | 💡 | |
66
+ | [no-emoji-in-options](docs/rules/no-emoji-in-options.md) | Disallow emoji characters in node option name and displayName values | ✅ ☑️ | | | | |
63
67
  | [no-forbidden-lifecycle-scripts](docs/rules/no-forbidden-lifecycle-scripts.md) | Ban lifecycle scripts (prepare, preinstall, postinstall, etc.) in community node packages | ✅ ☑️ | | | | |
64
68
  | [no-http-request-with-manual-auth](docs/rules/no-http-request-with-manual-auth.md) | Disallow this.helpers.httpRequest() in functions that call this.getCredentials(). Use this.helpers.httpRequestWithAuthentication() instead. | ✅ ☑️ | | | | |
65
69
  | [no-overrides-field](docs/rules/no-overrides-field.md) | Ban the "overrides" field in community node package.json | ✅ ☑️ | | | | |
@@ -69,7 +73,9 @@ export default [
69
73
  | [no-template-placeholders](docs/rules/no-template-placeholders.md) | Disallow unresolved template placeholders in package.json | ✅ ☑️ | | | | |
70
74
  | [node-class-description-icon-missing](docs/rules/node-class-description-icon-missing.md) | Node class description must have an `icon` property defined. Deprecated: use `require-node-description-fields` instead. | | | | 💡 | ❌ |
71
75
  | [node-connection-type-literal](docs/rules/node-connection-type-literal.md) | Disallow string literals in node description `inputs`/`outputs` — use `NodeConnectionTypes` enum instead | ✅ ☑️ | | 🔧 | | |
76
+ | [node-filename-against-convention](docs/rules/node-filename-against-convention.md) | Node filename must match the node `description.name` | ✅ ☑️ | | | | |
72
77
  | [node-operation-error-itemindex](docs/rules/node-operation-error-itemindex.md) | Require { itemIndex } in NodeOperationError / NodeApiError options inside item loops | ✅ ☑️ | | | | |
78
+ | [node-registration-complete](docs/rules/node-registration-complete.md) | Ensure every `.node.ts` file in the `nodes/` directory is registered in the "n8n.nodes" array of package.json | | ✅ ☑️ | | | |
73
79
  | [node-usable-as-tool](docs/rules/node-usable-as-tool.md) | Ensure node classes have usableAsTool property | ✅ ☑️ | | 🔧 | | |
74
80
  | [options-sorted-alphabetically](docs/rules/options-sorted-alphabetically.md) | Enforce alphabetical ordering of options arrays in n8n node properties | | ✅ ☑️ | | | |
75
81
  | [package-name-convention](docs/rules/package-name-convention.md) | Enforce correct package naming convention for n8n community nodes | ✅ ☑️ | | | 💡 | |
@@ -77,7 +83,9 @@ export default [
77
83
  | [require-continue-on-fail](docs/rules/require-continue-on-fail.md) | Require continueOnFail() handling in execute() methods of node classes | ✅ ☑️ | | | | |
78
84
  | [require-node-api-error](docs/rules/require-node-api-error.md) | Require NodeApiError or NodeOperationError for error wrapping in catch blocks. Raw errors lose HTTP context in the n8n UI. | ✅ ☑️ | | | | |
79
85
  | [require-node-description-fields](docs/rules/require-node-description-fields.md) | Node class description must define all required fields: icon, subtitle | ✅ ☑️ | | | | |
86
+ | [require-version](docs/rules/require-version.md) | Require a valid "version" field in community node package.json | ✅ ☑️ | | | | |
80
87
  | [resource-operation-pattern](docs/rules/resource-operation-pattern.md) | Enforce proper resource/operation pattern for better UX in n8n nodes | | ✅ ☑️ | | | |
88
+ | [valid-author](docs/rules/valid-author.md) | Require a non-empty author name and email in package.json | ✅ ☑️ | | | | |
81
89
  | [valid-credential-references](docs/rules/valid-credential-references.md) | Ensure credentials referenced in node descriptions exist as credential classes in the package | ✅ ☑️ | | | 💡 | |
82
90
  | [valid-description](docs/rules/valid-description.md) | Require a non-empty "description" field in community node package.json | ✅ ☑️ | | | | |
83
91
  | [valid-peer-dependencies](docs/rules/valid-peer-dependencies.md) | Require community node package.json peerDependencies to contain only "n8n-workflow": "*" (and optionally "ai-node-sdk") | ✅ ☑️ | | 🔧 | | |
package/dist/plugin.d.ts CHANGED
@@ -20,16 +20,19 @@ declare const configs: {
20
20
  '@n8n/community-nodes/credential-password-field': "error";
21
21
  '@n8n/community-nodes/n8n-object-validation': "error";
22
22
  '@n8n/community-nodes/no-deprecated-workflow-functions': "error";
23
+ '@n8n/community-nodes/no-emoji-in-options': "error";
23
24
  '@n8n/community-nodes/node-usable-as-tool': "error";
24
25
  '@n8n/community-nodes/package-name-convention': "error";
25
26
  '@n8n/community-nodes/credential-test-required': "error";
26
27
  '@n8n/community-nodes/no-credential-reuse': "error";
28
+ '@n8n/community-nodes/no-dangerous-functions': "error";
27
29
  '@n8n/community-nodes/no-forbidden-lifecycle-scripts': "error";
28
30
  '@n8n/community-nodes/no-http-request-with-manual-auth': "error";
29
31
  '@n8n/community-nodes/no-overrides-field': "error";
30
32
  '@n8n/community-nodes/no-runtime-dependencies': "error";
31
33
  '@n8n/community-nodes/no-template-placeholders': "error";
32
34
  '@n8n/community-nodes/icon-validation': "error";
35
+ '@n8n/community-nodes/icon-prefer-themed-variants': "warn";
33
36
  '@n8n/community-nodes/options-sorted-alphabetically': "warn";
34
37
  '@n8n/community-nodes/resource-operation-pattern': "warn";
35
38
  '@n8n/community-nodes/credential-documentation-url': "error";
@@ -37,14 +40,19 @@ declare const configs: {
37
40
  '@n8n/community-nodes/cred-class-name-field-conventions': "error";
38
41
  '@n8n/community-nodes/cred-class-name-suffix': "error";
39
42
  '@n8n/community-nodes/cred-class-oauth2-naming': "error";
43
+ '@n8n/community-nodes/cred-filename-against-convention': "error";
40
44
  '@n8n/community-nodes/node-connection-type-literal': "error";
45
+ '@n8n/community-nodes/node-filename-against-convention': "error";
41
46
  '@n8n/community-nodes/missing-paired-item': "error";
42
47
  '@n8n/community-nodes/no-builder-hint-leakage': "error";
43
48
  '@n8n/community-nodes/node-operation-error-itemindex': "error";
49
+ '@n8n/community-nodes/node-registration-complete': "warn";
44
50
  '@n8n/community-nodes/require-community-node-keyword': "warn";
45
51
  '@n8n/community-nodes/require-continue-on-fail': "error";
46
52
  '@n8n/community-nodes/require-node-api-error': "error";
47
53
  '@n8n/community-nodes/require-node-description-fields': "error";
54
+ '@n8n/community-nodes/require-version': "error";
55
+ '@n8n/community-nodes/valid-author': "error";
48
56
  '@n8n/community-nodes/valid-credential-references': "error";
49
57
  '@n8n/community-nodes/valid-description': "error";
50
58
  '@n8n/community-nodes/valid-peer-dependencies': "error";
@@ -68,16 +76,19 @@ declare const configs: {
68
76
  '@n8n/community-nodes/credential-password-field': "error";
69
77
  '@n8n/community-nodes/n8n-object-validation': "error";
70
78
  '@n8n/community-nodes/no-deprecated-workflow-functions': "error";
79
+ '@n8n/community-nodes/no-emoji-in-options': "error";
71
80
  '@n8n/community-nodes/node-usable-as-tool': "error";
72
81
  '@n8n/community-nodes/package-name-convention': "error";
73
82
  '@n8n/community-nodes/credential-test-required': "error";
74
83
  '@n8n/community-nodes/no-credential-reuse': "error";
84
+ '@n8n/community-nodes/no-dangerous-functions': "error";
75
85
  '@n8n/community-nodes/no-forbidden-lifecycle-scripts': "error";
76
86
  '@n8n/community-nodes/no-http-request-with-manual-auth': "error";
77
87
  '@n8n/community-nodes/no-overrides-field': "error";
78
88
  '@n8n/community-nodes/no-runtime-dependencies': "error";
79
89
  '@n8n/community-nodes/no-template-placeholders': "error";
80
90
  '@n8n/community-nodes/icon-validation': "error";
91
+ '@n8n/community-nodes/icon-prefer-themed-variants': "warn";
81
92
  '@n8n/community-nodes/options-sorted-alphabetically': "warn";
82
93
  '@n8n/community-nodes/credential-documentation-url': "error";
83
94
  '@n8n/community-nodes/resource-operation-pattern': "warn";
@@ -85,14 +96,19 @@ declare const configs: {
85
96
  '@n8n/community-nodes/cred-class-name-field-conventions': "error";
86
97
  '@n8n/community-nodes/cred-class-name-suffix': "error";
87
98
  '@n8n/community-nodes/cred-class-oauth2-naming': "error";
99
+ '@n8n/community-nodes/cred-filename-against-convention': "error";
88
100
  '@n8n/community-nodes/node-connection-type-literal': "error";
101
+ '@n8n/community-nodes/node-filename-against-convention': "error";
89
102
  '@n8n/community-nodes/missing-paired-item': "error";
90
103
  '@n8n/community-nodes/no-builder-hint-leakage': "error";
91
104
  '@n8n/community-nodes/node-operation-error-itemindex': "error";
105
+ '@n8n/community-nodes/node-registration-complete': "warn";
92
106
  '@n8n/community-nodes/require-community-node-keyword': "warn";
93
107
  '@n8n/community-nodes/require-continue-on-fail': "error";
94
108
  '@n8n/community-nodes/require-node-api-error': "error";
95
109
  '@n8n/community-nodes/require-node-description-fields': "error";
110
+ '@n8n/community-nodes/require-version': "error";
111
+ '@n8n/community-nodes/valid-author': "error";
96
112
  '@n8n/community-nodes/valid-credential-references': "error";
97
113
  '@n8n/community-nodes/valid-description': "error";
98
114
  '@n8n/community-nodes/valid-peer-dependencies': "error";
@@ -121,16 +137,19 @@ declare const pluginWithConfigs: {
121
137
  '@n8n/community-nodes/credential-password-field': "error";
122
138
  '@n8n/community-nodes/n8n-object-validation': "error";
123
139
  '@n8n/community-nodes/no-deprecated-workflow-functions': "error";
140
+ '@n8n/community-nodes/no-emoji-in-options': "error";
124
141
  '@n8n/community-nodes/node-usable-as-tool': "error";
125
142
  '@n8n/community-nodes/package-name-convention': "error";
126
143
  '@n8n/community-nodes/credential-test-required': "error";
127
144
  '@n8n/community-nodes/no-credential-reuse': "error";
145
+ '@n8n/community-nodes/no-dangerous-functions': "error";
128
146
  '@n8n/community-nodes/no-forbidden-lifecycle-scripts': "error";
129
147
  '@n8n/community-nodes/no-http-request-with-manual-auth': "error";
130
148
  '@n8n/community-nodes/no-overrides-field': "error";
131
149
  '@n8n/community-nodes/no-runtime-dependencies': "error";
132
150
  '@n8n/community-nodes/no-template-placeholders': "error";
133
151
  '@n8n/community-nodes/icon-validation': "error";
152
+ '@n8n/community-nodes/icon-prefer-themed-variants': "warn";
134
153
  '@n8n/community-nodes/options-sorted-alphabetically': "warn";
135
154
  '@n8n/community-nodes/resource-operation-pattern': "warn";
136
155
  '@n8n/community-nodes/credential-documentation-url': "error";
@@ -138,14 +157,19 @@ declare const pluginWithConfigs: {
138
157
  '@n8n/community-nodes/cred-class-name-field-conventions': "error";
139
158
  '@n8n/community-nodes/cred-class-name-suffix': "error";
140
159
  '@n8n/community-nodes/cred-class-oauth2-naming': "error";
160
+ '@n8n/community-nodes/cred-filename-against-convention': "error";
141
161
  '@n8n/community-nodes/node-connection-type-literal': "error";
162
+ '@n8n/community-nodes/node-filename-against-convention': "error";
142
163
  '@n8n/community-nodes/missing-paired-item': "error";
143
164
  '@n8n/community-nodes/no-builder-hint-leakage': "error";
144
165
  '@n8n/community-nodes/node-operation-error-itemindex': "error";
166
+ '@n8n/community-nodes/node-registration-complete': "warn";
145
167
  '@n8n/community-nodes/require-community-node-keyword': "warn";
146
168
  '@n8n/community-nodes/require-continue-on-fail': "error";
147
169
  '@n8n/community-nodes/require-node-api-error': "error";
148
170
  '@n8n/community-nodes/require-node-description-fields': "error";
171
+ '@n8n/community-nodes/require-version': "error";
172
+ '@n8n/community-nodes/valid-author': "error";
149
173
  '@n8n/community-nodes/valid-credential-references': "error";
150
174
  '@n8n/community-nodes/valid-description': "error";
151
175
  '@n8n/community-nodes/valid-peer-dependencies': "error";
@@ -169,16 +193,19 @@ declare const pluginWithConfigs: {
169
193
  '@n8n/community-nodes/credential-password-field': "error";
170
194
  '@n8n/community-nodes/n8n-object-validation': "error";
171
195
  '@n8n/community-nodes/no-deprecated-workflow-functions': "error";
196
+ '@n8n/community-nodes/no-emoji-in-options': "error";
172
197
  '@n8n/community-nodes/node-usable-as-tool': "error";
173
198
  '@n8n/community-nodes/package-name-convention': "error";
174
199
  '@n8n/community-nodes/credential-test-required': "error";
175
200
  '@n8n/community-nodes/no-credential-reuse': "error";
201
+ '@n8n/community-nodes/no-dangerous-functions': "error";
176
202
  '@n8n/community-nodes/no-forbidden-lifecycle-scripts': "error";
177
203
  '@n8n/community-nodes/no-http-request-with-manual-auth': "error";
178
204
  '@n8n/community-nodes/no-overrides-field': "error";
179
205
  '@n8n/community-nodes/no-runtime-dependencies': "error";
180
206
  '@n8n/community-nodes/no-template-placeholders': "error";
181
207
  '@n8n/community-nodes/icon-validation': "error";
208
+ '@n8n/community-nodes/icon-prefer-themed-variants': "warn";
182
209
  '@n8n/community-nodes/options-sorted-alphabetically': "warn";
183
210
  '@n8n/community-nodes/credential-documentation-url': "error";
184
211
  '@n8n/community-nodes/resource-operation-pattern': "warn";
@@ -186,14 +213,19 @@ declare const pluginWithConfigs: {
186
213
  '@n8n/community-nodes/cred-class-name-field-conventions': "error";
187
214
  '@n8n/community-nodes/cred-class-name-suffix': "error";
188
215
  '@n8n/community-nodes/cred-class-oauth2-naming': "error";
216
+ '@n8n/community-nodes/cred-filename-against-convention': "error";
189
217
  '@n8n/community-nodes/node-connection-type-literal': "error";
218
+ '@n8n/community-nodes/node-filename-against-convention': "error";
190
219
  '@n8n/community-nodes/missing-paired-item': "error";
191
220
  '@n8n/community-nodes/no-builder-hint-leakage': "error";
192
221
  '@n8n/community-nodes/node-operation-error-itemindex': "error";
222
+ '@n8n/community-nodes/node-registration-complete': "warn";
193
223
  '@n8n/community-nodes/require-community-node-keyword': "warn";
194
224
  '@n8n/community-nodes/require-continue-on-fail': "error";
195
225
  '@n8n/community-nodes/require-node-api-error': "error";
196
226
  '@n8n/community-nodes/require-node-description-fields': "error";
227
+ '@n8n/community-nodes/require-version': "error";
228
+ '@n8n/community-nodes/valid-author': "error";
197
229
  '@n8n/community-nodes/valid-credential-references': "error";
198
230
  '@n8n/community-nodes/valid-description': "error";
199
231
  '@n8n/community-nodes/valid-peer-dependencies': "error";
@@ -229,16 +261,19 @@ declare const n8nCommunityNodesPlugin: {
229
261
  '@n8n/community-nodes/credential-password-field': "error";
230
262
  '@n8n/community-nodes/n8n-object-validation': "error";
231
263
  '@n8n/community-nodes/no-deprecated-workflow-functions': "error";
264
+ '@n8n/community-nodes/no-emoji-in-options': "error";
232
265
  '@n8n/community-nodes/node-usable-as-tool': "error";
233
266
  '@n8n/community-nodes/package-name-convention': "error";
234
267
  '@n8n/community-nodes/credential-test-required': "error";
235
268
  '@n8n/community-nodes/no-credential-reuse': "error";
269
+ '@n8n/community-nodes/no-dangerous-functions': "error";
236
270
  '@n8n/community-nodes/no-forbidden-lifecycle-scripts': "error";
237
271
  '@n8n/community-nodes/no-http-request-with-manual-auth': "error";
238
272
  '@n8n/community-nodes/no-overrides-field': "error";
239
273
  '@n8n/community-nodes/no-runtime-dependencies': "error";
240
274
  '@n8n/community-nodes/no-template-placeholders': "error";
241
275
  '@n8n/community-nodes/icon-validation': "error";
276
+ '@n8n/community-nodes/icon-prefer-themed-variants': "warn";
242
277
  '@n8n/community-nodes/options-sorted-alphabetically': "warn";
243
278
  '@n8n/community-nodes/resource-operation-pattern': "warn";
244
279
  '@n8n/community-nodes/credential-documentation-url': "error";
@@ -246,14 +281,19 @@ declare const n8nCommunityNodesPlugin: {
246
281
  '@n8n/community-nodes/cred-class-name-field-conventions': "error";
247
282
  '@n8n/community-nodes/cred-class-name-suffix': "error";
248
283
  '@n8n/community-nodes/cred-class-oauth2-naming': "error";
284
+ '@n8n/community-nodes/cred-filename-against-convention': "error";
249
285
  '@n8n/community-nodes/node-connection-type-literal': "error";
286
+ '@n8n/community-nodes/node-filename-against-convention': "error";
250
287
  '@n8n/community-nodes/missing-paired-item': "error";
251
288
  '@n8n/community-nodes/no-builder-hint-leakage': "error";
252
289
  '@n8n/community-nodes/node-operation-error-itemindex': "error";
290
+ '@n8n/community-nodes/node-registration-complete': "warn";
253
291
  '@n8n/community-nodes/require-community-node-keyword': "warn";
254
292
  '@n8n/community-nodes/require-continue-on-fail': "error";
255
293
  '@n8n/community-nodes/require-node-api-error': "error";
256
294
  '@n8n/community-nodes/require-node-description-fields': "error";
295
+ '@n8n/community-nodes/require-version': "error";
296
+ '@n8n/community-nodes/valid-author': "error";
257
297
  '@n8n/community-nodes/valid-credential-references': "error";
258
298
  '@n8n/community-nodes/valid-description': "error";
259
299
  '@n8n/community-nodes/valid-peer-dependencies': "error";
@@ -277,16 +317,19 @@ declare const n8nCommunityNodesPlugin: {
277
317
  '@n8n/community-nodes/credential-password-field': "error";
278
318
  '@n8n/community-nodes/n8n-object-validation': "error";
279
319
  '@n8n/community-nodes/no-deprecated-workflow-functions': "error";
320
+ '@n8n/community-nodes/no-emoji-in-options': "error";
280
321
  '@n8n/community-nodes/node-usable-as-tool': "error";
281
322
  '@n8n/community-nodes/package-name-convention': "error";
282
323
  '@n8n/community-nodes/credential-test-required': "error";
283
324
  '@n8n/community-nodes/no-credential-reuse': "error";
325
+ '@n8n/community-nodes/no-dangerous-functions': "error";
284
326
  '@n8n/community-nodes/no-forbidden-lifecycle-scripts': "error";
285
327
  '@n8n/community-nodes/no-http-request-with-manual-auth': "error";
286
328
  '@n8n/community-nodes/no-overrides-field': "error";
287
329
  '@n8n/community-nodes/no-runtime-dependencies': "error";
288
330
  '@n8n/community-nodes/no-template-placeholders': "error";
289
331
  '@n8n/community-nodes/icon-validation': "error";
332
+ '@n8n/community-nodes/icon-prefer-themed-variants': "warn";
290
333
  '@n8n/community-nodes/options-sorted-alphabetically': "warn";
291
334
  '@n8n/community-nodes/credential-documentation-url': "error";
292
335
  '@n8n/community-nodes/resource-operation-pattern': "warn";
@@ -294,14 +337,19 @@ declare const n8nCommunityNodesPlugin: {
294
337
  '@n8n/community-nodes/cred-class-name-field-conventions': "error";
295
338
  '@n8n/community-nodes/cred-class-name-suffix': "error";
296
339
  '@n8n/community-nodes/cred-class-oauth2-naming': "error";
340
+ '@n8n/community-nodes/cred-filename-against-convention': "error";
297
341
  '@n8n/community-nodes/node-connection-type-literal': "error";
342
+ '@n8n/community-nodes/node-filename-against-convention': "error";
298
343
  '@n8n/community-nodes/missing-paired-item': "error";
299
344
  '@n8n/community-nodes/no-builder-hint-leakage': "error";
300
345
  '@n8n/community-nodes/node-operation-error-itemindex': "error";
346
+ '@n8n/community-nodes/node-registration-complete': "warn";
301
347
  '@n8n/community-nodes/require-community-node-keyword': "warn";
302
348
  '@n8n/community-nodes/require-continue-on-fail': "error";
303
349
  '@n8n/community-nodes/require-node-api-error': "error";
304
350
  '@n8n/community-nodes/require-node-description-fields': "error";
351
+ '@n8n/community-nodes/require-version': "error";
352
+ '@n8n/community-nodes/valid-author': "error";
305
353
  '@n8n/community-nodes/valid-credential-references': "error";
306
354
  '@n8n/community-nodes/valid-description': "error";
307
355
  '@n8n/community-nodes/valid-peer-dependencies': "error";
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAU,MAAM,QAAQ,CAAC;AAG7C,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAYzC,QAAA,MAAM,OAAO;;;;;;;;;;uBAHI,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;uBAAtB,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwFE,CAAC;AAE1C,QAAA,MAAM,iBAAiB;;;;;;;;;;;2BA1FN,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2BAAtB,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;WAAtB,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC;CA0FiC,CAAC;AAEzE,QAAA,MAAM,uBAAuB;;;;;;;;;;;2BA5FZ,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2BAAtB,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;WAAtB,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC;CA4FU,CAAC;AAClD,eAAe,iBAAiB,CAAC;AACjC,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,uBAAuB,EAAE,CAAC"}
1
+ {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAU,MAAM,QAAQ,CAAC;AAG7C,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAYzC,QAAA,MAAM,OAAO;;;;;;;;;;uBAHI,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;uBAAtB,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwGE,CAAC;AAE1C,QAAA,MAAM,iBAAiB;;;;;;;;;;;2BA1GN,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2BAAtB,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;WAAtB,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC;CA0GiC,CAAC;AAEzE,QAAA,MAAM,uBAAuB;;;;;;;;;;;2BA5GZ,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2BAAtB,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;WAAtB,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC;CA4GU,CAAC;AAClD,eAAe,iBAAiB,CAAC;AACjC,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,uBAAuB,EAAE,CAAC"}
package/dist/plugin.js CHANGED
@@ -22,16 +22,19 @@ const configs = {
22
22
  '@n8n/community-nodes/credential-password-field': 'error',
23
23
  '@n8n/community-nodes/n8n-object-validation': 'error',
24
24
  '@n8n/community-nodes/no-deprecated-workflow-functions': 'error',
25
+ '@n8n/community-nodes/no-emoji-in-options': 'error',
25
26
  '@n8n/community-nodes/node-usable-as-tool': 'error',
26
27
  '@n8n/community-nodes/package-name-convention': 'error',
27
28
  '@n8n/community-nodes/credential-test-required': 'error',
28
29
  '@n8n/community-nodes/no-credential-reuse': 'error',
30
+ '@n8n/community-nodes/no-dangerous-functions': 'error',
29
31
  '@n8n/community-nodes/no-forbidden-lifecycle-scripts': 'error',
30
32
  '@n8n/community-nodes/no-http-request-with-manual-auth': 'error',
31
33
  '@n8n/community-nodes/no-overrides-field': 'error',
32
34
  '@n8n/community-nodes/no-runtime-dependencies': 'error',
33
35
  '@n8n/community-nodes/no-template-placeholders': 'error',
34
36
  '@n8n/community-nodes/icon-validation': 'error',
37
+ '@n8n/community-nodes/icon-prefer-themed-variants': 'warn',
35
38
  '@n8n/community-nodes/options-sorted-alphabetically': 'warn',
36
39
  '@n8n/community-nodes/resource-operation-pattern': 'warn',
37
40
  '@n8n/community-nodes/credential-documentation-url': 'error',
@@ -39,14 +42,19 @@ const configs = {
39
42
  '@n8n/community-nodes/cred-class-name-field-conventions': 'error',
40
43
  '@n8n/community-nodes/cred-class-name-suffix': 'error',
41
44
  '@n8n/community-nodes/cred-class-oauth2-naming': 'error',
45
+ '@n8n/community-nodes/cred-filename-against-convention': 'error',
42
46
  '@n8n/community-nodes/node-connection-type-literal': 'error',
47
+ '@n8n/community-nodes/node-filename-against-convention': 'error',
43
48
  '@n8n/community-nodes/missing-paired-item': 'error',
44
49
  '@n8n/community-nodes/no-builder-hint-leakage': 'error',
45
50
  '@n8n/community-nodes/node-operation-error-itemindex': 'error',
51
+ '@n8n/community-nodes/node-registration-complete': 'warn',
46
52
  '@n8n/community-nodes/require-community-node-keyword': 'warn',
47
53
  '@n8n/community-nodes/require-continue-on-fail': 'error',
48
54
  '@n8n/community-nodes/require-node-api-error': 'error',
49
55
  '@n8n/community-nodes/require-node-description-fields': 'error',
56
+ '@n8n/community-nodes/require-version': 'error',
57
+ '@n8n/community-nodes/valid-author': 'error',
50
58
  '@n8n/community-nodes/valid-credential-references': 'error',
51
59
  '@n8n/community-nodes/valid-description': 'error',
52
60
  '@n8n/community-nodes/valid-peer-dependencies': 'error',
@@ -63,16 +71,19 @@ const configs = {
63
71
  '@n8n/community-nodes/credential-password-field': 'error',
64
72
  '@n8n/community-nodes/n8n-object-validation': 'error',
65
73
  '@n8n/community-nodes/no-deprecated-workflow-functions': 'error',
74
+ '@n8n/community-nodes/no-emoji-in-options': 'error',
66
75
  '@n8n/community-nodes/node-usable-as-tool': 'error',
67
76
  '@n8n/community-nodes/package-name-convention': 'error',
68
77
  '@n8n/community-nodes/credential-test-required': 'error',
69
78
  '@n8n/community-nodes/no-credential-reuse': 'error',
79
+ '@n8n/community-nodes/no-dangerous-functions': 'error',
70
80
  '@n8n/community-nodes/no-forbidden-lifecycle-scripts': 'error',
71
81
  '@n8n/community-nodes/no-http-request-with-manual-auth': 'error',
72
82
  '@n8n/community-nodes/no-overrides-field': 'error',
73
83
  '@n8n/community-nodes/no-runtime-dependencies': 'error',
74
84
  '@n8n/community-nodes/no-template-placeholders': 'error',
75
85
  '@n8n/community-nodes/icon-validation': 'error',
86
+ '@n8n/community-nodes/icon-prefer-themed-variants': 'warn',
76
87
  '@n8n/community-nodes/options-sorted-alphabetically': 'warn',
77
88
  '@n8n/community-nodes/credential-documentation-url': 'error',
78
89
  '@n8n/community-nodes/resource-operation-pattern': 'warn',
@@ -80,14 +91,19 @@ const configs = {
80
91
  '@n8n/community-nodes/cred-class-name-field-conventions': 'error',
81
92
  '@n8n/community-nodes/cred-class-name-suffix': 'error',
82
93
  '@n8n/community-nodes/cred-class-oauth2-naming': 'error',
94
+ '@n8n/community-nodes/cred-filename-against-convention': 'error',
83
95
  '@n8n/community-nodes/node-connection-type-literal': 'error',
96
+ '@n8n/community-nodes/node-filename-against-convention': 'error',
84
97
  '@n8n/community-nodes/missing-paired-item': 'error',
85
98
  '@n8n/community-nodes/no-builder-hint-leakage': 'error',
86
99
  '@n8n/community-nodes/node-operation-error-itemindex': 'error',
100
+ '@n8n/community-nodes/node-registration-complete': 'warn',
87
101
  '@n8n/community-nodes/require-community-node-keyword': 'warn',
88
102
  '@n8n/community-nodes/require-continue-on-fail': 'error',
89
103
  '@n8n/community-nodes/require-node-api-error': 'error',
90
104
  '@n8n/community-nodes/require-node-description-fields': 'error',
105
+ '@n8n/community-nodes/require-version': 'error',
106
+ '@n8n/community-nodes/valid-author': 'error',
91
107
  '@n8n/community-nodes/valid-credential-references': 'error',
92
108
  '@n8n/community-nodes/valid-description': 'error',
93
109
  '@n8n/community-nodes/valid-peer-dependencies': 'error',
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.js","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAEA,OAAO,GAAG,MAAM,iBAAiB,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AACxD,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAEzC,MAAM,MAAM,GAAG;IACd,IAAI,EAAE;QACL,IAAI,EAAE,GAAG,CAAC,IAAI;QACd,OAAO,EAAE,GAAG,CAAC,OAAO;QACpB,SAAS,EAAE,sBAAsB;KACjC;IACD,8EAA8E;IAC9E,KAAK,EAAE,KAA+B;CACd,CAAC;AAE1B,MAAM,OAAO,GAAG;IACf,WAAW,EAAE;QACZ,OAAO,EAAE,CAAC,+BAA+B,CAAC;QAC1C,OAAO,EAAE;YACR,sBAAsB,EAAE,MAAM;SAC9B;QACD,KAAK,EAAE;YACN,2CAA2C,EAAE,OAAO;YACpD,4CAA4C,EAAE,OAAO;YACrD,4CAA4C,EAAE,OAAO;YACrD,gDAAgD,EAAE,OAAO;YACzD,4CAA4C,EAAE,OAAO;YACrD,uDAAuD,EAAE,OAAO;YAChE,0CAA0C,EAAE,OAAO;YACnD,8CAA8C,EAAE,OAAO;YACvD,+CAA+C,EAAE,OAAO;YACxD,0CAA0C,EAAE,OAAO;YACnD,qDAAqD,EAAE,OAAO;YAC9D,uDAAuD,EAAE,OAAO;YAChE,yCAAyC,EAAE,OAAO;YAClD,8CAA8C,EAAE,OAAO;YACvD,+CAA+C,EAAE,OAAO;YACxD,sCAAsC,EAAE,OAAO;YAC/C,oDAAoD,EAAE,MAAM;YAC5D,iDAAiD,EAAE,MAAM;YACzD,mDAAmD,EAAE,OAAO;YAC5D,oDAAoD,EAAE,OAAO;YAC7D,wDAAwD,EAAE,OAAO;YACjE,6CAA6C,EAAE,OAAO;YACtD,+CAA+C,EAAE,OAAO;YACxD,mDAAmD,EAAE,OAAO;YAC5D,0CAA0C,EAAE,OAAO;YACnD,8CAA8C,EAAE,OAAO;YACvD,qDAAqD,EAAE,OAAO;YAC9D,qDAAqD,EAAE,MAAM;YAC7D,+CAA+C,EAAE,OAAO;YACxD,6CAA6C,EAAE,OAAO;YACtD,sDAAsD,EAAE,OAAO;YAC/D,kDAAkD,EAAE,OAAO;YAC3D,wCAAwC,EAAE,OAAO;YACjD,8CAA8C,EAAE,OAAO;YACvD,iDAAiD,EAAE,OAAO;SAC1D;KACD;IACD,iCAAiC,EAAE;QAClC,OAAO,EAAE,CAAC,+BAA+B,CAAC;QAC1C,OAAO,EAAE;YACR,sBAAsB,EAAE,MAAM;SAC9B;QACD,KAAK,EAAE;YACN,2CAA2C,EAAE,OAAO;YACpD,gDAAgD,EAAE,OAAO;YACzD,4CAA4C,EAAE,OAAO;YACrD,uDAAuD,EAAE,OAAO;YAChE,0CAA0C,EAAE,OAAO;YACnD,8CAA8C,EAAE,OAAO;YACvD,+CAA+C,EAAE,OAAO;YACxD,0CAA0C,EAAE,OAAO;YACnD,qDAAqD,EAAE,OAAO;YAC9D,uDAAuD,EAAE,OAAO;YAChE,yCAAyC,EAAE,OAAO;YAClD,8CAA8C,EAAE,OAAO;YACvD,+CAA+C,EAAE,OAAO;YACxD,sCAAsC,EAAE,OAAO;YAC/C,oDAAoD,EAAE,MAAM;YAC5D,mDAAmD,EAAE,OAAO;YAC5D,iDAAiD,EAAE,MAAM;YACzD,oDAAoD,EAAE,OAAO;YAC7D,wDAAwD,EAAE,OAAO;YACjE,6CAA6C,EAAE,OAAO;YACtD,+CAA+C,EAAE,OAAO;YACxD,mDAAmD,EAAE,OAAO;YAC5D,0CAA0C,EAAE,OAAO;YACnD,8CAA8C,EAAE,OAAO;YACvD,qDAAqD,EAAE,OAAO;YAC9D,qDAAqD,EAAE,MAAM;YAC7D,+CAA+C,EAAE,OAAO;YACxD,6CAA6C,EAAE,OAAO;YACtD,sDAAsD,EAAE,OAAO;YAC/D,kDAAkD,EAAE,OAAO;YAC3D,wCAAwC,EAAE,OAAO;YACjD,8CAA8C,EAAE,OAAO;YACvD,iDAAiD,EAAE,OAAO;SAC1D;KACD;CACuC,CAAC;AAE1C,MAAM,iBAAiB,GAAG,EAAE,GAAG,MAAM,EAAE,OAAO,EAA0B,CAAC;AAEzE,MAAM,uBAAuB,GAAG,iBAAiB,CAAC;AAClD,eAAe,iBAAiB,CAAC;AACjC,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,uBAAuB,EAAE,CAAC"}
1
+ {"version":3,"file":"plugin.js","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare const CredFilenameAgainstConventionRule: import("@typescript-eslint/utils/ts-eslint").RuleModule<"renameFile", [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
2
+ //# sourceMappingURL=cred-filename-against-convention.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cred-filename-against-convention.d.ts","sourceRoot":"","sources":["../../src/rules/cred-filename-against-convention.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,iCAAiC,+IA2C5C,CAAC"}
@@ -0,0 +1,42 @@
1
+ import * as path from 'node:path';
2
+ import { isCredentialTypeClass, isFileType, createRule } from '../utils/index.js';
3
+ export const CredFilenameAgainstConventionRule = createRule({
4
+ name: 'cred-filename-against-convention',
5
+ meta: {
6
+ type: 'problem',
7
+ docs: {
8
+ description: 'Credential filename must match the credential class name',
9
+ },
10
+ messages: {
11
+ renameFile: 'Credential filename must match the class name "{{className}}". Rename file to "{{expected}}".',
12
+ },
13
+ schema: [],
14
+ },
15
+ defaultOptions: [],
16
+ create(context) {
17
+ if (!isFileType(context.filename, '.credentials.ts')) {
18
+ return {};
19
+ }
20
+ return {
21
+ ClassDeclaration(node) {
22
+ if (!isCredentialTypeClass(node)) {
23
+ return;
24
+ }
25
+ const classNameNode = node.id;
26
+ if (!classNameNode) {
27
+ return;
28
+ }
29
+ const className = classNameNode.name;
30
+ const actualBaseName = path.basename(context.filename, '.credentials.ts');
31
+ if (actualBaseName !== className) {
32
+ context.report({
33
+ node: classNameNode,
34
+ messageId: 'renameFile',
35
+ data: { className, expected: `${className}.credentials.ts` },
36
+ });
37
+ }
38
+ },
39
+ };
40
+ },
41
+ });
42
+ //# sourceMappingURL=cred-filename-against-convention.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cred-filename-against-convention.js","sourceRoot":"","sources":["../../src/rules/cred-filename-against-convention.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAElC,OAAO,EAAE,qBAAqB,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAElF,MAAM,CAAC,MAAM,iCAAiC,GAAG,UAAU,CAAC;IAC3D,IAAI,EAAE,kCAAkC;IACxC,IAAI,EAAE;QACL,IAAI,EAAE,SAAS;QACf,IAAI,EAAE;YACL,WAAW,EAAE,0DAA0D;SACvE;QACD,QAAQ,EAAE;YACT,UAAU,EACT,+FAA+F;SAChG;QACD,MAAM,EAAE,EAAE;KACV;IACD,cAAc,EAAE,EAAE;IAClB,MAAM,CAAC,OAAO;QACb,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,QAAQ,EAAE,iBAAiB,CAAC,EAAE,CAAC;YACtD,OAAO,EAAE,CAAC;QACX,CAAC;QAED,OAAO;YACN,gBAAgB,CAAC,IAAI;gBACpB,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,EAAE,CAAC;oBAClC,OAAO;gBACR,CAAC;gBAED,MAAM,aAAa,GAAG,IAAI,CAAC,EAAE,CAAC;gBAC9B,IAAI,CAAC,aAAa,EAAE,CAAC;oBACpB,OAAO;gBACR,CAAC;gBAED,MAAM,SAAS,GAAG,aAAa,CAAC,IAAI,CAAC;gBACrC,MAAM,cAAc,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,EAAE,iBAAiB,CAAC,CAAC;gBAE1E,IAAI,cAAc,KAAK,SAAS,EAAE,CAAC;oBAClC,OAAO,CAAC,MAAM,CAAC;wBACd,IAAI,EAAE,aAAa;wBACnB,SAAS,EAAE,YAAY;wBACvB,IAAI,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,SAAS,iBAAiB,EAAE;qBAC5D,CAAC,CAAC;gBACJ,CAAC;YACF,CAAC;SACD,CAAC;IACH,CAAC;CACD,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare const IconPreferThemedVariantsRule: import("@typescript-eslint/utils/ts-eslint").RuleModule<"missingThemedVariants", [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
2
+ //# sourceMappingURL=icon-prefer-themed-variants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"icon-prefer-themed-variants.d.ts","sourceRoot":"","sources":["../../src/rules/icon-prefer-themed-variants.ts"],"names":[],"mappings":"AAgBA,eAAO,MAAM,4BAA4B,0JAqDvC,CAAC"}
@@ -0,0 +1,53 @@
1
+ import { TSESTree } from '@typescript-eslint/utils';
2
+ import { isNodeTypeClass, isCredentialTypeClass, findClassProperty, findObjectProperty, isFileType, createRule, } from '../utils/index.js';
3
+ const messages = {
4
+ missingThemedVariants: 'Icon is defined as a single file. Provide both light and dark variants using the `{ light, dark }` form so the icon renders well on both themes.',
5
+ };
6
+ export const IconPreferThemedVariantsRule = createRule({
7
+ name: 'icon-prefer-themed-variants',
8
+ meta: {
9
+ type: 'suggestion',
10
+ docs: {
11
+ description: 'Encourage node and credential icons to provide light/dark variants instead of a single icon file',
12
+ },
13
+ messages,
14
+ schema: [],
15
+ },
16
+ defaultOptions: [],
17
+ create(context) {
18
+ if (!isFileType(context.filename, '.node.ts') &&
19
+ !isFileType(context.filename, '.credentials.ts')) {
20
+ return {};
21
+ }
22
+ const checkIconValue = (iconValue) => {
23
+ if (iconValue.type === TSESTree.AST_NODE_TYPES.Literal &&
24
+ typeof iconValue.value === 'string') {
25
+ context.report({
26
+ node: iconValue,
27
+ messageId: 'missingThemedVariants',
28
+ });
29
+ }
30
+ };
31
+ return {
32
+ ClassDeclaration(node) {
33
+ if (isNodeTypeClass(node)) {
34
+ const descriptionProperty = findClassProperty(node, 'description');
35
+ if (descriptionProperty?.value?.type !== TSESTree.AST_NODE_TYPES.ObjectExpression) {
36
+ return;
37
+ }
38
+ const iconProperty = findObjectProperty(descriptionProperty.value, 'icon');
39
+ if (iconProperty) {
40
+ checkIconValue(iconProperty.value);
41
+ }
42
+ }
43
+ else if (isCredentialTypeClass(node)) {
44
+ const iconProperty = findClassProperty(node, 'icon');
45
+ if (iconProperty?.value) {
46
+ checkIconValue(iconProperty.value);
47
+ }
48
+ }
49
+ },
50
+ };
51
+ },
52
+ });
53
+ //# sourceMappingURL=icon-prefer-themed-variants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"icon-prefer-themed-variants.js","sourceRoot":"","sources":["../../src/rules/icon-prefer-themed-variants.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAEpD,OAAO,EACN,eAAe,EACf,qBAAqB,EACrB,iBAAiB,EACjB,kBAAkB,EAClB,UAAU,EACV,UAAU,GACV,MAAM,mBAAmB,CAAC;AAE3B,MAAM,QAAQ,GAAG;IAChB,qBAAqB,EACpB,kJAAkJ;CAC1I,CAAC;AAEX,MAAM,CAAC,MAAM,4BAA4B,GAAG,UAAU,CAAC;IACtD,IAAI,EAAE,6BAA6B;IACnC,IAAI,EAAE;QACL,IAAI,EAAE,YAAY;QAClB,IAAI,EAAE;YACL,WAAW,EACV,kGAAkG;SACnG;QACD,QAAQ;QACR,MAAM,EAAE,EAAE;KACV;IACD,cAAc,EAAE,EAAE;IAClB,MAAM,CAAC,OAAO;QACb,IACC,CAAC,UAAU,CAAC,OAAO,CAAC,QAAQ,EAAE,UAAU,CAAC;YACzC,CAAC,UAAU,CAAC,OAAO,CAAC,QAAQ,EAAE,iBAAiB,CAAC,EAC/C,CAAC;YACF,OAAO,EAAE,CAAC;QACX,CAAC;QAED,MAAM,cAAc,GAAG,CAAC,SAAwB,EAAE,EAAE;YACnD,IACC,SAAS,CAAC,IAAI,KAAK,QAAQ,CAAC,cAAc,CAAC,OAAO;gBAClD,OAAO,SAAS,CAAC,KAAK,KAAK,QAAQ,EAClC,CAAC;gBACF,OAAO,CAAC,MAAM,CAAC;oBACd,IAAI,EAAE,SAAS;oBACf,SAAS,EAAE,uBAAuB;iBAClC,CAAC,CAAC;YACJ,CAAC;QACF,CAAC,CAAC;QAEF,OAAO;YACN,gBAAgB,CAAC,IAAI;gBACpB,IAAI,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC;oBAC3B,MAAM,mBAAmB,GAAG,iBAAiB,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;oBACnE,IAAI,mBAAmB,EAAE,KAAK,EAAE,IAAI,KAAK,QAAQ,CAAC,cAAc,CAAC,gBAAgB,EAAE,CAAC;wBACnF,OAAO;oBACR,CAAC;oBAED,MAAM,YAAY,GAAG,kBAAkB,CAAC,mBAAmB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;oBAC3E,IAAI,YAAY,EAAE,CAAC;wBAClB,cAAc,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;oBACpC,CAAC;gBACF,CAAC;qBAAM,IAAI,qBAAqB,CAAC,IAAI,CAAC,EAAE,CAAC;oBACxC,MAAM,YAAY,GAAG,iBAAiB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;oBACrD,IAAI,YAAY,EAAE,KAAK,EAAE,CAAC;wBACzB,cAAc,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;oBACpC,CAAC;gBACF,CAAC;YACF,CAAC;SACD,CAAC;IACH,CAAC;CACD,CAAC,CAAC"}
@@ -1,2 +1,2 @@
1
- export declare const IconValidationRule: import("@typescript-eslint/utils/ts-eslint").RuleModule<"missingIcon" | "addPlaceholder" | "iconFileNotFound" | "iconNotSvg" | "lightDarkSame" | "invalidIconPath" | "addFileProtocol" | "changeExtension" | "similarIcon", [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
1
+ export declare const IconValidationRule: import("@typescript-eslint/utils/ts-eslint").RuleModule<"missingIcon" | "addPlaceholder" | "iconFileNotFound" | "lightDarkSame" | "invalidIconPath" | "addFileProtocol" | "similarIcon", [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
2
2
  //# sourceMappingURL=icon-validation.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"icon-validation.d.ts","sourceRoot":"","sources":["../../src/rules/icon-validation.ts"],"names":[],"mappings":"AA4BA,eAAO,MAAM,kBAAkB,qSAkN7B,CAAC"}
1
+ {"version":3,"file":"icon-validation.d.ts","sourceRoot":"","sources":["../../src/rules/icon-validation.ts"],"names":[],"mappings":"AA0BA,eAAO,MAAM,kBAAkB,kQA4L7B,CAAC"}
@@ -1,15 +1,13 @@
1
1
  import { TSESTree } from '@typescript-eslint/utils';
2
2
  import { dirname } from 'node:path';
3
- import { isNodeTypeClass, isCredentialTypeClass, findClassProperty, findObjectProperty, getStringLiteralValue, validateIconPath, findSimilarSvgFiles, isFileType, createRule, } from '../utils/index.js';
3
+ import { isNodeTypeClass, isCredentialTypeClass, findClassProperty, findObjectProperty, getStringLiteralValue, validateIconPath, findSimilarIconFiles, isFileType, createRule, } from '../utils/index.js';
4
4
  const messages = {
5
5
  iconFileNotFound: 'Icon file "{{ iconPath }}" does not exist',
6
- iconNotSvg: 'Icon file "{{ iconPath }}" must be an SVG file (end with .svg)',
7
6
  lightDarkSame: 'Light and dark icons cannot be the same file. Both point to "{{ iconPath }}"',
8
7
  invalidIconPath: 'Icon path "{{ iconPath }}" must use file: protocol and be a string',
9
8
  missingIcon: 'Node/Credential class must have an icon property defined',
10
9
  addPlaceholder: 'Add icon property with placeholder',
11
10
  addFileProtocol: "Add 'file:' protocol to icon path",
12
- changeExtension: "Change icon extension to '.svg'",
13
11
  similarIcon: "Use existing icon '{{ suggestedName }}'",
14
12
  };
15
13
  export const IconValidationRule = createRule({
@@ -17,7 +15,7 @@ export const IconValidationRule = createRule({
17
15
  meta: {
18
16
  type: 'problem',
19
17
  docs: {
20
- description: 'Validate node and credential icon files exist, are SVG format, and light/dark icons are different',
18
+ description: 'Validate node and credential icon files exist, use the file: protocol, and that light/dark icons are different',
21
19
  },
22
20
  messages,
23
21
  schema: [],
@@ -58,30 +56,11 @@ export const IconValidationRule = createRule({
58
56
  });
59
57
  return false;
60
58
  }
61
- if (!validation.isSvg) {
62
- const relativePath = iconPath.replace(/^file:/, '');
63
- const suggestions = [];
64
- const pathWithoutExt = relativePath.replace(/\.[^/.]+$/, '');
65
- const svgPath = `${pathWithoutExt}.svg`;
66
- suggestions.push({
67
- messageId: 'changeExtension',
68
- fix(fixer) {
69
- return fixer.replaceText(node, `"file:${svgPath}"`);
70
- },
71
- });
72
- context.report({
73
- node,
74
- messageId: 'iconNotSvg',
75
- data: { iconPath: relativePath },
76
- suggest: suggestions,
77
- });
78
- return false;
79
- }
80
59
  if (!validation.exists) {
81
60
  const relativePath = iconPath.replace(/^file:/, '');
82
61
  const suggestions = [];
83
- // Find similar SVG files in the same directory
84
- const similarFiles = findSimilarSvgFiles(relativePath, currentDir);
62
+ // Find similar icon files in the same directory
63
+ const similarFiles = findSimilarIconFiles(relativePath, currentDir);
85
64
  for (const similarFile of similarFiles) {
86
65
  suggestions.push({
87
66
  messageId: 'similarIcon',