@n8n/eslint-plugin-community-nodes 0.32.1 → 0.34.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 (179) hide show
  1. package/README.md +1 -1
  2. package/dist/rules/ai-node-package-json.d.ts +3 -1
  3. package/dist/rules/ai-node-package-json.d.ts.map +1 -1
  4. package/dist/rules/cred-class-field-icon-missing.d.ts +3 -1
  5. package/dist/rules/cred-class-field-icon-missing.d.ts.map +1 -1
  6. package/dist/rules/cred-class-oauth2-naming.d.ts +3 -1
  7. package/dist/rules/cred-class-oauth2-naming.d.ts.map +1 -1
  8. package/dist/rules/credential-documentation-url.d.ts +3 -1
  9. package/dist/rules/credential-documentation-url.d.ts.map +1 -1
  10. package/dist/rules/credential-password-field.d.ts +3 -1
  11. package/dist/rules/credential-password-field.d.ts.map +1 -1
  12. package/dist/rules/credential-password-field.js +1 -2
  13. package/dist/rules/credential-test-required.d.ts +3 -1
  14. package/dist/rules/credential-test-required.d.ts.map +1 -1
  15. package/dist/rules/credential-unnecessary-password.d.ts +3 -1
  16. package/dist/rules/credential-unnecessary-password.d.ts.map +1 -1
  17. package/dist/rules/credential-unnecessary-password.js +1 -2
  18. package/dist/rules/icon-prefer-themed-variants.d.ts +3 -1
  19. package/dist/rules/icon-prefer-themed-variants.d.ts.map +1 -1
  20. package/dist/rules/icon-validation.d.ts +3 -1
  21. package/dist/rules/icon-validation.d.ts.map +1 -1
  22. package/dist/rules/icon-validation.js +5 -15
  23. package/dist/rules/index.d.ts +132 -44
  24. package/dist/rules/index.d.ts.map +1 -1
  25. package/dist/rules/missing-paired-item.d.ts +3 -1
  26. package/dist/rules/missing-paired-item.d.ts.map +1 -1
  27. package/dist/rules/n8n-object-validation.d.ts +3 -1
  28. package/dist/rules/n8n-object-validation.d.ts.map +1 -1
  29. package/dist/rules/no-builder-hint-leakage.d.ts +3 -1
  30. package/dist/rules/no-builder-hint-leakage.d.ts.map +1 -1
  31. package/dist/rules/no-credential-reuse.d.ts +3 -1
  32. package/dist/rules/no-credential-reuse.d.ts.map +1 -1
  33. package/dist/rules/no-dangerous-functions.d.ts +3 -1
  34. package/dist/rules/no-dangerous-functions.d.ts.map +1 -1
  35. package/dist/rules/no-dead-files.d.ts +3 -1
  36. package/dist/rules/no-dead-files.d.ts.map +1 -1
  37. package/dist/rules/no-deprecated-workflow-functions.d.ts +3 -1
  38. package/dist/rules/no-deprecated-workflow-functions.d.ts.map +1 -1
  39. package/dist/rules/no-emoji-in-options.d.ts +3 -1
  40. package/dist/rules/no-emoji-in-options.d.ts.map +1 -1
  41. package/dist/rules/no-forbidden-lifecycle-scripts.d.ts +3 -1
  42. package/dist/rules/no-forbidden-lifecycle-scripts.d.ts.map +1 -1
  43. package/dist/rules/no-forbidden-lifecycle-scripts.js +1 -1
  44. package/dist/rules/no-hardcoded-secrets.d.ts +3 -1
  45. package/dist/rules/no-hardcoded-secrets.d.ts.map +1 -1
  46. package/dist/rules/no-http-request-with-manual-auth.d.ts +3 -1
  47. package/dist/rules/no-http-request-with-manual-auth.d.ts.map +1 -1
  48. package/dist/rules/no-overrides-field.d.ts +3 -1
  49. package/dist/rules/no-overrides-field.d.ts.map +1 -1
  50. package/dist/rules/no-restricted-globals.d.ts +3 -1
  51. package/dist/rules/no-restricted-globals.d.ts.map +1 -1
  52. package/dist/rules/no-restricted-imports.d.ts +3 -1
  53. package/dist/rules/no-restricted-imports.d.ts.map +1 -1
  54. package/dist/rules/no-runtime-dependencies.d.ts +3 -1
  55. package/dist/rules/no-runtime-dependencies.d.ts.map +1 -1
  56. package/dist/rules/no-silent-error-swallowing.d.ts +3 -1
  57. package/dist/rules/no-silent-error-swallowing.d.ts.map +1 -1
  58. package/dist/rules/no-silent-error-swallowing.js +2 -12
  59. package/dist/rules/no-template-placeholders.d.ts +3 -1
  60. package/dist/rules/no-template-placeholders.d.ts.map +1 -1
  61. package/dist/rules/no-unsafe-connection-type-cast.d.ts +3 -1
  62. package/dist/rules/no-unsafe-connection-type-cast.d.ts.map +1 -1
  63. package/dist/rules/node-class-description-icon-missing.d.ts +3 -1
  64. package/dist/rules/node-class-description-icon-missing.d.ts.map +1 -1
  65. package/dist/rules/node-class-description-icon-missing.js +1 -2
  66. package/dist/rules/node-connection-type-literal.d.ts +3 -1
  67. package/dist/rules/node-connection-type-literal.d.ts.map +1 -1
  68. package/dist/rules/node-registration-complete.d.ts +3 -1
  69. package/dist/rules/node-registration-complete.d.ts.map +1 -1
  70. package/dist/rules/node-usable-as-tool.d.ts +3 -1
  71. package/dist/rules/node-usable-as-tool.d.ts.map +1 -1
  72. package/dist/rules/package-name-convention.d.ts +3 -1
  73. package/dist/rules/package-name-convention.d.ts.map +1 -1
  74. package/dist/rules/require-files-array.d.ts +3 -1
  75. package/dist/rules/require-files-array.d.ts.map +1 -1
  76. package/dist/rules/require-homepage.d.ts +3 -1
  77. package/dist/rules/require-homepage.d.ts.map +1 -1
  78. package/dist/rules/require-node-api-error.d.ts +3 -1
  79. package/dist/rules/require-node-api-error.d.ts.map +1 -1
  80. package/dist/rules/require-node-description-fields.d.ts +3 -1
  81. package/dist/rules/require-node-description-fields.d.ts.map +1 -1
  82. package/dist/rules/require-node-description-fields.js +1 -2
  83. package/dist/rules/require-version.d.ts +3 -1
  84. package/dist/rules/require-version.d.ts.map +1 -1
  85. package/dist/rules/resource-operation-pattern.d.ts +3 -1
  86. package/dist/rules/resource-operation-pattern.d.ts.map +1 -1
  87. package/dist/rules/resource-operation-pattern.js +3 -4
  88. package/dist/rules/trigger-node-conventions.d.ts +3 -1
  89. package/dist/rules/trigger-node-conventions.d.ts.map +1 -1
  90. package/dist/rules/valid-author.d.ts +3 -1
  91. package/dist/rules/valid-author.d.ts.map +1 -1
  92. package/dist/rules/valid-author.js +1 -1
  93. package/dist/rules/valid-credential-references.d.ts +3 -1
  94. package/dist/rules/valid-credential-references.d.ts.map +1 -1
  95. package/dist/rules/valid-description.d.ts +3 -1
  96. package/dist/rules/valid-description.d.ts.map +1 -1
  97. package/dist/rules/valid-peer-dependencies.d.ts +3 -1
  98. package/dist/rules/valid-peer-dependencies.d.ts.map +1 -1
  99. package/dist/rules/webhook-lifecycle-complete.d.ts +3 -1
  100. package/dist/rules/webhook-lifecycle-complete.d.ts.map +1 -1
  101. package/dist/rules/webhook-lifecycle-complete.js +3 -11
  102. package/dist/utils/ast-utils.d.ts +6 -0
  103. package/dist/utils/ast-utils.d.ts.map +1 -1
  104. package/dist/utils/ast-utils.js +22 -5
  105. package/dist/utils/file-utils.d.ts.map +1 -1
  106. package/dist/utils/file-utils.js +1 -2
  107. package/dist/utils/rule-creator.d.ts +3 -1
  108. package/dist/utils/rule-creator.d.ts.map +1 -1
  109. package/docs/rules/icon-prefer-themed-variants.md +2 -2
  110. package/docs/rules/icon-validation.md +11 -11
  111. package/eslint.config.mjs +2 -3
  112. package/package.json +7 -7
  113. package/src/rules/credential-password-field.ts +1 -4
  114. package/src/rules/credential-unnecessary-password.ts +1 -4
  115. package/src/rules/icon-validation.test.ts +19 -21
  116. package/src/rules/icon-validation.ts +5 -20
  117. package/src/rules/no-forbidden-lifecycle-scripts.ts +1 -1
  118. package/src/rules/no-silent-error-swallowing.test.ts +26 -0
  119. package/src/rules/no-silent-error-swallowing.ts +2 -9
  120. package/src/rules/node-class-description-icon-missing.ts +1 -4
  121. package/src/rules/require-node-description-fields.ts +1 -4
  122. package/src/rules/resource-operation-pattern.ts +3 -6
  123. package/src/rules/valid-author.ts +1 -1
  124. package/src/rules/webhook-lifecycle-complete.test.ts +42 -0
  125. package/src/rules/webhook-lifecycle-complete.ts +3 -12
  126. package/src/utils/ast-utils.ts +29 -6
  127. package/src/utils/file-utils.ts +3 -6
  128. package/dist/plugin.js.map +0 -1
  129. package/dist/rules/ai-node-package-json.js.map +0 -1
  130. package/dist/rules/cred-class-field-icon-missing.js.map +0 -1
  131. package/dist/rules/cred-class-oauth2-naming.js.map +0 -1
  132. package/dist/rules/credential-documentation-url.js.map +0 -1
  133. package/dist/rules/credential-password-field.js.map +0 -1
  134. package/dist/rules/credential-test-required.js.map +0 -1
  135. package/dist/rules/credential-unnecessary-password.js.map +0 -1
  136. package/dist/rules/icon-prefer-themed-variants.js.map +0 -1
  137. package/dist/rules/icon-validation.js.map +0 -1
  138. package/dist/rules/index.js.map +0 -1
  139. package/dist/rules/missing-paired-item.js.map +0 -1
  140. package/dist/rules/n8n-object-validation.js.map +0 -1
  141. package/dist/rules/no-builder-hint-leakage.js.map +0 -1
  142. package/dist/rules/no-credential-reuse.js.map +0 -1
  143. package/dist/rules/no-dangerous-functions.js.map +0 -1
  144. package/dist/rules/no-dead-files.js.map +0 -1
  145. package/dist/rules/no-deprecated-workflow-functions.js.map +0 -1
  146. package/dist/rules/no-emoji-in-options.js.map +0 -1
  147. package/dist/rules/no-forbidden-lifecycle-scripts.js.map +0 -1
  148. package/dist/rules/no-hardcoded-secrets.js.map +0 -1
  149. package/dist/rules/no-http-request-with-manual-auth.js.map +0 -1
  150. package/dist/rules/no-overrides-field.js.map +0 -1
  151. package/dist/rules/no-restricted-globals.js.map +0 -1
  152. package/dist/rules/no-restricted-imports.js.map +0 -1
  153. package/dist/rules/no-runtime-dependencies.js.map +0 -1
  154. package/dist/rules/no-silent-error-swallowing.js.map +0 -1
  155. package/dist/rules/no-template-placeholders.js.map +0 -1
  156. package/dist/rules/no-unsafe-connection-type-cast.js.map +0 -1
  157. package/dist/rules/node-class-description-icon-missing.js.map +0 -1
  158. package/dist/rules/node-connection-type-literal.js.map +0 -1
  159. package/dist/rules/node-registration-complete.js.map +0 -1
  160. package/dist/rules/node-usable-as-tool.js.map +0 -1
  161. package/dist/rules/package-name-convention.js.map +0 -1
  162. package/dist/rules/require-files-array.js.map +0 -1
  163. package/dist/rules/require-homepage.js.map +0 -1
  164. package/dist/rules/require-node-api-error.js.map +0 -1
  165. package/dist/rules/require-node-description-fields.js.map +0 -1
  166. package/dist/rules/require-version.js.map +0 -1
  167. package/dist/rules/resource-operation-pattern.js.map +0 -1
  168. package/dist/rules/trigger-node-conventions.js.map +0 -1
  169. package/dist/rules/valid-author.js.map +0 -1
  170. package/dist/rules/valid-credential-references.js.map +0 -1
  171. package/dist/rules/valid-description.js.map +0 -1
  172. package/dist/rules/valid-peer-dependencies.js.map +0 -1
  173. package/dist/rules/webhook-lifecycle-complete.js.map +0 -1
  174. package/dist/utils/ast-utils.js.map +0 -1
  175. package/dist/utils/constants.js.map +0 -1
  176. package/dist/utils/credential-fields.js.map +0 -1
  177. package/dist/utils/file-utils.js.map +0 -1
  178. package/dist/utils/index.js.map +0 -1
  179. package/dist/utils/rule-creator.js.map +0 -1
@@ -1,4 +1,4 @@
1
- # Validate node and credential icon files exist, use the file: protocol, and that light/dark icons are different (`@n8n/community-nodes/icon-validation`)
1
+ # Validate node and credential icon files exist and use the file: protocol (`@n8n/community-nodes/icon-validation`)
2
2
 
3
3
  💼 This rule is enabled in the following configs: ✅ `recommended`, ☑️ `recommendedWithoutN8nCloudSupport`.
4
4
 
@@ -8,7 +8,7 @@
8
8
 
9
9
  ## Rule Details
10
10
 
11
- Validates that your node and credential icon files exist and use the correct `file:` protocol. Icons must be different files when providing light/dark theme variants.
11
+ Validates that your node and credential icon files exist and use the correct `file:` protocol. The `light` and `dark` slots can point to the same file: one theme-agnostic icon is a valid choice, and you do not have to copy it under a second filename.
12
12
 
13
13
  Both SVG and PNG icons are accepted. SVG is recommended (it scales cleanly and supports theming), but PNG is allowed — see the `icon-prefer-themed-variants` rule for the related light/dark nudge.
14
14
 
@@ -27,28 +27,28 @@ export class MyNode implements INodeType {
27
27
  }
28
28
  ```
29
29
 
30
+ ### ✅ Correct
31
+
30
32
  ```typescript
31
33
  export class MyNode implements INodeType {
32
34
  description: INodeTypeDescription = {
33
35
  displayName: 'My Node',
34
36
  name: 'myNode',
35
- icon: {
36
- light: 'file:icons/my-icon.svg',
37
- dark: 'file:icons/my-icon.svg', // Same file for both themes
38
- },
37
+ icon: 'file:icons/my-service.svg', // Correct format
39
38
  // ...
40
39
  };
41
40
  }
42
41
  ```
43
42
 
44
- ### ✅ Correct
45
-
46
43
  ```typescript
47
44
  export class MyNode implements INodeType {
48
45
  description: INodeTypeDescription = {
49
46
  displayName: 'My Node',
50
47
  name: 'myNode',
51
- icon: 'file:icons/my-service.svg', // Correct format
48
+ icon: {
49
+ light: 'file:icons/my-service-light.svg',
50
+ dark: 'file:icons/my-service-dark.svg', // Different files
51
+ },
52
52
  // ...
53
53
  };
54
54
  }
@@ -60,8 +60,8 @@ export class MyNode implements INodeType {
60
60
  displayName: 'My Node',
61
61
  name: 'myNode',
62
62
  icon: {
63
- light: 'file:icons/my-service-light.svg',
64
- dark: 'file:icons/my-service-dark.svg', // Different files
63
+ light: 'file:icons/my-service.svg',
64
+ dark: 'file:icons/my-service.svg', // One file that works on both themes
65
65
  },
66
66
  // ...
67
67
  };
package/eslint.config.mjs CHANGED
@@ -1,15 +1,14 @@
1
1
  import { defineConfig } from 'eslint/config';
2
- import { nodeConfig } from '@n8n/eslint-config/node';
2
+ import { backendConfig } from '@n8n/eslint-config/backend';
3
3
  import eslintPlugin from 'eslint-plugin-eslint-plugin';
4
4
 
5
5
  export default defineConfig([
6
- nodeConfig,
6
+ backendConfig,
7
7
  eslintPlugin.configs.recommended,
8
8
  {
9
9
  files: ['src/**/*.ts'],
10
10
  languageOptions: {
11
11
  parserOptions: {
12
- project: './tsconfig.json',
13
12
  allowDefaultProject: true,
14
13
  },
15
14
  },
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@n8n/eslint-plugin-community-nodes",
3
3
  "type": "module",
4
- "version": "0.32.1",
4
+ "version": "0.34.0",
5
5
  "main": "./dist/plugin.js",
6
6
  "types": "./dist/plugin.d.ts",
7
7
  "exports": {
@@ -11,16 +11,16 @@
11
11
  }
12
12
  },
13
13
  "dependencies": {
14
- "@typescript-eslint/typescript-estree": "8.35.0",
15
- "@typescript-eslint/utils": "8.35.0",
14
+ "@typescript-eslint/typescript-estree": "8.70.0",
15
+ "@typescript-eslint/utils": "8.70.0",
16
16
  "fastest-levenshtein": "1.0.16"
17
17
  },
18
18
  "devDependencies": {
19
- "@n8n/typescript-config": "1.11.0",
20
- "@n8n/vitest-config": "1.21.0",
19
+ "@n8n/typescript-config": "1.12.0",
20
+ "@n8n/vitest-config": "1.22.0",
21
21
  "@types/node": "24.10.1",
22
- "n8n-workflow": "2.39.2",
23
- "@typescript-eslint/rule-tester": "8.35.0",
22
+ "n8n-workflow": "2.41.0",
23
+ "@typescript-eslint/rule-tester": "8.70.0",
24
24
  "eslint-doc-generator": "^2.2.2",
25
25
  "eslint-plugin-eslint-plugin": "^7.0.0",
26
26
  "rimraf": "6.0.1",
@@ -69,10 +69,7 @@ export const CredentialPasswordFieldRule = createRule({
69
69
  }
70
70
 
71
71
  const propertiesProperty = findClassProperty(node, 'properties');
72
- if (
73
- !propertiesProperty?.value ||
74
- propertiesProperty.value.type !== TSESTree.AST_NODE_TYPES.ArrayExpression
75
- ) {
72
+ if (propertiesProperty?.value?.type !== TSESTree.AST_NODE_TYPES.ArrayExpression) {
76
73
  return;
77
74
  }
78
75
 
@@ -33,10 +33,7 @@ export const CredentialUnnecessaryPasswordRule = createRule({
33
33
  }
34
34
 
35
35
  const propertiesProperty = findClassProperty(node, 'properties');
36
- if (
37
- !propertiesProperty?.value ||
38
- propertiesProperty.value.type !== TSESTree.AST_NODE_TYPES.ArrayExpression
39
- ) {
36
+ if (propertiesProperty?.value?.type !== TSESTree.AST_NODE_TYPES.ArrayExpression) {
40
37
  return;
41
38
  }
42
39
 
@@ -162,6 +162,17 @@ ruleTester.run('icon-validation', IconValidationRule, {
162
162
  true,
163
163
  ),
164
164
  },
165
+ {
166
+ name: 'node with the same file for light and dark icons',
167
+ filename: nodeFilePath,
168
+ code: createNodeCode(
169
+ {
170
+ light: 'file:icons/SameIcon.svg',
171
+ dark: 'file:icons/SameIcon.svg',
172
+ },
173
+ true,
174
+ ),
175
+ },
165
176
  {
166
177
  name: 'credential with valid string icon',
167
178
  filename: credentialFilePath,
@@ -180,6 +191,14 @@ ruleTester.run('icon-validation', IconValidationRule, {
180
191
  dark: 'file:icons/ValidIcon.dark.svg',
181
192
  }),
182
193
  },
194
+ {
195
+ name: 'credential with the same file for light and dark icons',
196
+ filename: credentialFilePath,
197
+ code: createCredentialCode({
198
+ light: 'file:icons/SameIcon.svg',
199
+ dark: 'file:icons/SameIcon.svg',
200
+ }),
201
+ },
183
202
  ],
184
203
  invalid: [
185
204
  {
@@ -205,18 +224,6 @@ ruleTester.run('icon-validation', IconValidationRule, {
205
224
  code: createNodeCode('file:icons/NonExistent.svg', true),
206
225
  errors: [{ messageId: 'iconFileNotFound', data: { iconPath: 'icons/NonExistent.svg' } }],
207
226
  },
208
- {
209
- name: 'light and dark icons are the same file in description',
210
- filename: nodeFilePath,
211
- code: createNodeCode(
212
- {
213
- light: 'file:icons/SameIcon.svg',
214
- dark: 'file:icons/SameIcon.svg',
215
- },
216
- true,
217
- ),
218
- errors: [{ messageId: 'lightDarkSame', data: { iconPath: 'icons/SameIcon.svg' } }],
219
- },
220
227
  {
221
228
  name: 'credential missing icon property',
222
229
  filename: credentialFilePath,
@@ -240,15 +247,6 @@ ruleTester.run('icon-validation', IconValidationRule, {
240
247
  code: createCredentialCode('file:icons/NonExistent.svg'),
241
248
  errors: [{ messageId: 'iconFileNotFound', data: { iconPath: 'icons/NonExistent.svg' } }],
242
249
  },
243
- {
244
- name: 'credential light and dark icons are the same file',
245
- filename: credentialFilePath,
246
- code: createCredentialCode({
247
- light: 'file:icons/SameIcon.svg',
248
- dark: 'file:icons/SameIcon.svg',
249
- }),
250
- errors: [{ messageId: 'lightDarkSame', data: { iconPath: 'icons/SameIcon.svg' } }],
251
- },
252
250
  {
253
251
  name: 'node icon file does not exist but similar file exists - should suggest similar file',
254
252
  filename: nodeFilePath,
@@ -16,7 +16,6 @@ import {
16
16
 
17
17
  const messages = {
18
18
  iconFileNotFound: 'Icon file "{{ iconPath }}" does not exist',
19
- lightDarkSame: 'Light and dark icons cannot be the same file. Both point to "{{ iconPath }}"',
20
19
  invalidIconPath: 'Icon path "{{ iconPath }}" must use file: protocol and be a string',
21
20
  missingIcon: 'Node/Credential class must have an icon property defined',
22
21
  addPlaceholder: 'Add icon property with placeholder',
@@ -29,8 +28,7 @@ export const IconValidationRule = createRule({
29
28
  meta: {
30
29
  type: 'problem',
31
30
  docs: {
32
- description:
33
- 'Validate node and credential icon files exist, use the file: protocol, and that light/dark icons are different',
31
+ description: 'Validate node and credential icon files exist and use the file: protocol',
34
32
  },
35
33
  messages,
36
34
  schema: [],
@@ -114,22 +112,12 @@ export const IconValidationRule = createRule({
114
112
  const lightProperty = findObjectProperty(iconValue, 'light');
115
113
  const darkProperty = findObjectProperty(iconValue, 'dark');
116
114
 
117
- const lightPath = lightProperty ? getStringLiteralValue(lightProperty.value) : null;
118
- const darkPath = darkProperty ? getStringLiteralValue(darkProperty.value) : null;
119
-
115
+ // A theme-agnostic file can fill both slots, so only each path is checked
120
116
  if (lightProperty) {
121
- validateIcon(lightPath, lightProperty.value);
117
+ validateIcon(getStringLiteralValue(lightProperty.value), lightProperty.value);
122
118
  }
123
119
  if (darkProperty) {
124
- validateIcon(darkPath, darkProperty.value);
125
- }
126
-
127
- if (lightPath && darkPath && lightPath === darkPath && lightProperty) {
128
- context.report({
129
- node: lightProperty.value,
130
- messageId: 'lightDarkSame',
131
- data: { iconPath: lightPath.replace(/^file:/, '') },
132
- });
120
+ validateIcon(getStringLiteralValue(darkProperty.value), darkProperty.value);
133
121
  }
134
122
  }
135
123
  };
@@ -145,10 +133,7 @@ export const IconValidationRule = createRule({
145
133
 
146
134
  if (isNodeClass) {
147
135
  const descriptionProperty = findClassProperty(node, 'description');
148
- if (
149
- !descriptionProperty?.value ||
150
- descriptionProperty.value.type !== TSESTree.AST_NODE_TYPES.ObjectExpression
151
- ) {
136
+ if (descriptionProperty?.value?.type !== TSESTree.AST_NODE_TYPES.ObjectExpression) {
152
137
  context.report({
153
138
  node,
154
139
  messageId: 'missingIcon',
@@ -41,7 +41,7 @@ export const NoForbiddenLifecycleScriptsRule = createRule({
41
41
  }
42
42
 
43
43
  const scriptsProp = findJsonProperty(node, 'scripts');
44
- if (!scriptsProp || scriptsProp.value.type !== AST_NODE_TYPES.ObjectExpression) {
44
+ if (scriptsProp?.value.type !== AST_NODE_TYPES.ObjectExpression) {
45
45
  return;
46
46
  }
47
47
 
@@ -174,6 +174,32 @@ export class RegularClass {
174
174
  }`),
175
175
  errors: [{ messageId: 'silentReturn', data: { method: 'delete' } }],
176
176
  },
177
+ {
178
+ name: 'lifecycle method written with a computed literal key',
179
+ code: createTriggerNode(`{
180
+ default: {
181
+ ['delete']: async function (this: IHookFunctions): Promise<boolean> {
182
+ try {
183
+ return await this.helpers.httpRequest({ url: 'https://example.com' });
184
+ } catch (error) {}
185
+ },
186
+ },
187
+ }`),
188
+ errors: [{ messageId: 'emptyCatch', data: { method: 'delete' } }],
189
+ },
190
+ {
191
+ name: 'lifecycle group written with a quoted key',
192
+ code: createTriggerNode(`{
193
+ 'default': {
194
+ async delete(this: IHookFunctions): Promise<boolean> {
195
+ try {
196
+ return await this.helpers.httpRequest({ url: 'https://example.com' });
197
+ } catch (error) {}
198
+ },
199
+ },
200
+ }`),
201
+ errors: [{ messageId: 'emptyCatch', data: { method: 'delete' } }],
202
+ },
177
203
  {
178
204
  name: 'catch block with a bare return',
179
205
  code: createTriggerNode(`{
@@ -3,20 +3,13 @@ import { AST_NODE_TYPES, type TSESTree } from '@typescript-eslint/utils';
3
3
  import {
4
4
  createRule,
5
5
  findClassProperty,
6
+ getPropertyKeyName,
6
7
  isNodeTypeClass,
7
8
  WEBHOOK_LIFECYCLE_METHODS,
8
9
  } from '../utils/index.js';
9
10
 
10
11
  const LIFECYCLE_METHODS: readonly string[] = WEBHOOK_LIFECYCLE_METHODS;
11
12
 
12
- /** Returns the static name of a non-computed object property key, or null. */
13
- function getPropertyName(property: TSESTree.Property): string | null {
14
- if (property.computed) return null;
15
- if (property.key.type === AST_NODE_TYPES.Identifier) return property.key.name;
16
- if (property.key.type === AST_NODE_TYPES.Literal) return String(property.key.value);
17
- return null;
18
- }
19
-
20
13
  function isFunctionNode(node: TSESTree.Node): boolean {
21
14
  return (
22
15
  node.type === AST_NODE_TYPES.FunctionDeclaration ||
@@ -81,7 +74,7 @@ export const NoSilentErrorSwallowingRule = createRule({
81
74
  for (const methodProperty of groupProperty.value.properties) {
82
75
  if (methodProperty.type !== AST_NODE_TYPES.Property) continue;
83
76
 
84
- const methodName = getPropertyName(methodProperty);
77
+ const methodName = getPropertyKeyName(methodProperty);
85
78
  if (methodName === null || !LIFECYCLE_METHODS.includes(methodName)) continue;
86
79
 
87
80
  const fn = methodProperty.value;
@@ -41,10 +41,7 @@ export const NodeClassDescriptionIconMissingRule = createRule({
41
41
  }
42
42
 
43
43
  const descriptionProperty = findClassProperty(node, 'description');
44
- if (
45
- !descriptionProperty?.value ||
46
- descriptionProperty.value.type !== TSESTree.AST_NODE_TYPES.ObjectExpression
47
- ) {
44
+ if (descriptionProperty?.value?.type !== TSESTree.AST_NODE_TYPES.ObjectExpression) {
48
45
  return;
49
46
  }
50
47
 
@@ -41,10 +41,7 @@ export const RequireNodeDescriptionFieldsRule = createRule({
41
41
  }
42
42
 
43
43
  const descriptionProperty = findClassProperty(node, 'description');
44
- if (
45
- !descriptionProperty?.value ||
46
- descriptionProperty.value.type !== TSESTree.AST_NODE_TYPES.ObjectExpression
47
- ) {
44
+ if (descriptionProperty?.value?.type !== TSESTree.AST_NODE_TYPES.ObjectExpression) {
48
45
  return;
49
46
  }
50
47
 
@@ -30,15 +30,12 @@ export const ResourceOperationPatternRule = createRule({
30
30
  }
31
31
 
32
32
  const analyzeNodeDescription = (descriptionValue: TSESTree.Expression | null): void => {
33
- if (!descriptionValue || descriptionValue.type !== AST_NODE_TYPES.ObjectExpression) {
33
+ if (descriptionValue?.type !== AST_NODE_TYPES.ObjectExpression) {
34
34
  return;
35
35
  }
36
36
 
37
37
  const propertiesProperty = findObjectProperty(descriptionValue, 'properties');
38
- if (
39
- !propertiesProperty?.value ||
40
- propertiesProperty.value.type !== AST_NODE_TYPES.ArrayExpression
41
- ) {
38
+ if (propertiesProperty?.value?.type !== AST_NODE_TYPES.ArrayExpression) {
42
39
  return;
43
40
  }
44
41
 
@@ -48,7 +45,7 @@ export const ResourceOperationPatternRule = createRule({
48
45
  let operationNode: TSESTree.Node | null = null;
49
46
 
50
47
  for (const property of propertiesArray.elements) {
51
- if (!property || property.type !== AST_NODE_TYPES.ObjectExpression) {
48
+ if (property?.type !== AST_NODE_TYPES.ObjectExpression) {
52
49
  continue;
53
50
  }
54
51
 
@@ -22,7 +22,7 @@ function parsePersonString(value: string): { name: string; email: string } {
22
22
  }
23
23
 
24
24
  function isNonEmptyStringLiteral(node: TSESTree.Property | null): boolean {
25
- if (!node || node.value.type !== AST_NODE_TYPES.Literal) {
25
+ if (node?.value.type !== AST_NODE_TYPES.Literal) {
26
26
  return false;
27
27
  }
28
28
  const { value } = node.value;
@@ -88,6 +88,30 @@ export class RegularClass {
88
88
  }`,
89
89
  }),
90
90
  },
91
+ {
92
+ name: 'lifecycle methods written with computed literal keys',
93
+ code: createTriggerNode({
94
+ webhookMethods: `{
95
+ default: {
96
+ ['checkExists']: async () => true,
97
+ ['create']: async () => true,
98
+ [\`delete\`]: async () => true,
99
+ },
100
+ }`,
101
+ }),
102
+ },
103
+ {
104
+ name: 'lifecycle group and methods written with quoted keys',
105
+ code: createTriggerNode({
106
+ webhookMethods: `{
107
+ 'default': {
108
+ 'checkExists': async () => true,
109
+ 'create': async () => true,
110
+ 'delete': async () => true,
111
+ },
112
+ }`,
113
+ }),
114
+ },
91
115
  {
92
116
  name: 'webhook lifecycle defined via arrow functions',
93
117
  code: createTriggerNode({
@@ -189,6 +213,24 @@ export class RegularClass {
189
213
  }),
190
214
  errors: [{ messageId: 'missingWebhookMethods' }],
191
215
  },
216
+ {
217
+ name: 'lifecycle method behind a key only known at runtime',
218
+ code: createTriggerNode({
219
+ webhookMethods: `{
220
+ default: {
221
+ async checkExists() { return true; },
222
+ async create() { return true; },
223
+ [methodName]: async () => true,
224
+ },
225
+ }`,
226
+ }),
227
+ errors: [
228
+ {
229
+ messageId: 'missingLifecycleMethod',
230
+ data: { group: 'default', missing: '`delete`' },
231
+ },
232
+ ],
233
+ },
192
234
  {
193
235
  name: 'multiple webhook groups each missing methods',
194
236
  code: createTriggerNode({
@@ -4,6 +4,7 @@ import {
4
4
  createRule,
5
5
  findClassProperty,
6
6
  findObjectProperty,
7
+ getPropertyKeyName,
7
8
  isNodeTypeClass,
8
9
  WEBHOOK_LIFECYCLE_METHODS,
9
10
  type WebhookLifecycleMethod,
@@ -25,12 +26,7 @@ function hasWebhooksDeclared(descriptionValue: TSESTree.ObjectExpression): boole
25
26
  /** Returns true when the property defines a (possibly async) method named `name`. */
26
27
  function isMethodProperty(property: TSESTree.ObjectLiteralElement, name: string): boolean {
27
28
  if (property.type !== AST_NODE_TYPES.Property) return false;
28
- if (property.computed) return false;
29
-
30
- const keyMatches =
31
- (property.key.type === AST_NODE_TYPES.Identifier && property.key.name === name) ||
32
- (property.key.type === AST_NODE_TYPES.Literal && property.key.value === name);
33
- if (!keyMatches) return false;
29
+ if (getPropertyKeyName(property) !== name) return false;
34
30
 
35
31
  return (
36
32
  property.value.type === AST_NODE_TYPES.FunctionExpression ||
@@ -104,12 +100,7 @@ export const WebhookLifecycleCompleteRule = createRule({
104
100
  if (groupProperty.type !== AST_NODE_TYPES.Property) continue;
105
101
  if (groupProperty.value.type !== AST_NODE_TYPES.ObjectExpression) continue;
106
102
 
107
- const groupName =
108
- groupProperty.key.type === AST_NODE_TYPES.Identifier
109
- ? groupProperty.key.name
110
- : groupProperty.key.type === AST_NODE_TYPES.Literal
111
- ? String(groupProperty.key.value)
112
- : 'default';
103
+ const groupName = getPropertyKeyName(groupProperty) ?? 'default';
113
104
 
114
105
  const missing = findMissingMethods(groupProperty.value);
115
106
  if (missing.length === 0) continue;
@@ -55,6 +55,33 @@ export function isTriggerNode(
55
55
  return hasTriggerGroup(descriptionValue) || isTriggerNodeClass(node);
56
56
  }
57
57
 
58
+ /**
59
+ * Returns the name a property key stands for, or null when it is only known at
60
+ * runtime. `delete`, `'delete'` and `['delete']` all name the same property, so
61
+ * how the key is written must not decide whether a rule sees it.
62
+ */
63
+ export function getPropertyKeyName(
64
+ property: TSESTree.Property | TSESTree.PropertyDefinition | TSESTree.MethodDefinition,
65
+ ): string | null {
66
+ const { key } = property;
67
+
68
+ if (key.type === AST_NODE_TYPES.Literal) {
69
+ return key.value === null ? null : String(key.value);
70
+ }
71
+
72
+ // A computed key still names one property when it is a template without
73
+ // substitutions; written plainly, an identifier is the name itself.
74
+ if (key.type === AST_NODE_TYPES.TemplateLiteral) {
75
+ return key.expressions.length === 0 ? (key.quasis[0]?.value.cooked ?? null) : null;
76
+ }
77
+
78
+ if (key.type === AST_NODE_TYPES.Identifier) {
79
+ return property.computed ? null : key.name;
80
+ }
81
+
82
+ return null;
83
+ }
84
+
58
85
  export function findClassProperty(
59
86
  node: TSESTree.ClassDeclaration,
60
87
  propertyName: string,
@@ -62,8 +89,7 @@ export function findClassProperty(
62
89
  const property = node.body.body.find(
63
90
  (member) =>
64
91
  member.type === AST_NODE_TYPES.PropertyDefinition &&
65
- member.key?.type === AST_NODE_TYPES.Identifier &&
66
- member.key.name === propertyName,
92
+ getPropertyKeyName(member) === propertyName,
67
93
  );
68
94
  return property?.type === AST_NODE_TYPES.PropertyDefinition ? property : null;
69
95
  }
@@ -140,10 +166,7 @@ export function findObjectProperty(
140
166
  propertyName: string,
141
167
  ): TSESTree.Property | null {
142
168
  const property = obj.properties.find(
143
- (prop) =>
144
- prop.type === AST_NODE_TYPES.Property &&
145
- prop.key.type === AST_NODE_TYPES.Identifier &&
146
- prop.key.name === propertyName,
169
+ (prop) => prop.type === AST_NODE_TYPES.Property && getPropertyKeyName(prop) === propertyName,
147
170
  );
148
171
  return property?.type === AST_NODE_TYPES.Property ? property : null;
149
172
  }
@@ -77,7 +77,7 @@ function readPackageJsonRaw(packageJsonPath: string): Record<string, unknown> |
77
77
  try {
78
78
  const content = readFileSync(packageJsonPath, 'utf8');
79
79
  const parsed: unknown = JSON.parse(content);
80
- return isValidPackageJson(parsed) ? (parsed as Record<string, unknown>) : null;
80
+ return isValidPackageJson(parsed) ? parsed : null;
81
81
  } catch {
82
82
  return null;
83
83
  }
@@ -104,7 +104,7 @@ export function readPackageJsonDevDependencies(packageJsonPath: string | null):
104
104
  if (!parsed) return new Set();
105
105
  const devDeps = parsed.devDependencies;
106
106
  if (typeof devDeps !== 'object' || devDeps === null) return new Set();
107
- return new Set(Object.keys(devDeps as Record<string, unknown>));
107
+ return new Set(Object.keys(devDeps));
108
108
  }
109
109
 
110
110
  function resolveN8nFilePaths(packageJsonPath: string, filePaths: string[]): string[] {
@@ -301,10 +301,7 @@ function checkCredentialUsageInFile(
301
301
  enter(node: TSESTree.Node) {
302
302
  if (node.type === AST_NODE_TYPES.ClassDeclaration && isNodeTypeClass(node)) {
303
303
  const descriptionProperty = findClassProperty(node, 'description');
304
- if (
305
- !descriptionProperty?.value ||
306
- descriptionProperty.value.type !== AST_NODE_TYPES.ObjectExpression
307
- ) {
304
+ if (descriptionProperty?.value?.type !== AST_NODE_TYPES.ObjectExpression) {
308
305
  return;
309
306
  }
310
307
 
@@ -1 +0,0 @@
1
- {"version":3,"file":"plugin.js","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"ai-node-package-json.js","sourceRoot":"","sources":["../../src/rules/ai-node-package-json.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"cred-class-field-icon-missing.js","sourceRoot":"","sources":["../../src/rules/cred-class-field-icon-missing.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,qBAAqB,EACrB,iBAAiB,EACjB,UAAU,EACV,UAAU,GACV,MAAM,mBAAmB,CAAC;AAE3B,MAAM,CAAC,MAAM,6BAA6B,GAAG,UAAU,CAAC;IACvD,IAAI,EAAE,+BAA+B;IACrC,IAAI,EAAE;QACL,IAAI,EAAE,SAAS;QACf,IAAI,EAAE;YACL,WAAW,EAAE,uDAAuD;SACpE;QACD,QAAQ,EAAE;YACT,WAAW,EAAE,sDAAsD;YACnE,cAAc,EAAE,oCAAoC;SACpD;QACD,MAAM,EAAE,EAAE;QACV,cAAc,EAAE,IAAI;KACpB;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,YAAY,GAAG,iBAAiB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;gBACrD,IAAI,YAAY,EAAE,KAAK,EAAE,CAAC;oBACzB,OAAO;gBACR,CAAC;gBAED,OAAO,CAAC,MAAM,CAAC;oBACd,IAAI;oBACJ,SAAS,EAAE,aAAa;oBACxB,OAAO,EAAE;wBACR;4BACC,SAAS,EAAE,gBAAgB;4BAC3B,GAAG,CAAC,KAAK;gCACR,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;gCACjC,MAAM,YAAY,GAAG,SAAS,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;gCACrD,IAAI,YAAY,EAAE,CAAC;oCAClB,OAAO,KAAK,CAAC,eAAe,CAAC,YAAY,EAAE,iCAAiC,CAAC,CAAC;gCAC/E,CAAC;gCACD,OAAO,IAAI,CAAC;4BACb,CAAC;yBACD;qBACD;iBACD,CAAC,CAAC;YACJ,CAAC;SACD,CAAC;IACH,CAAC;CACD,CAAC,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"cred-class-oauth2-naming.js","sourceRoot":"","sources":["../../src/rules/cred-class-oauth2-naming.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"credential-documentation-url.js","sourceRoot":"","sources":["../../src/rules/credential-documentation-url.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"credential-password-field.js","sourceRoot":"","sources":["../../src/rules/credential-password-field.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"credential-test-required.js","sourceRoot":"","sources":["../../src/rules/credential-test-required.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"credential-unnecessary-password.js","sourceRoot":"","sources":["../../src/rules/credential-unnecessary-password.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAEpD,OAAO,EACN,qBAAqB,EACrB,iBAAiB,EACjB,kBAAkB,EAClB,qBAAqB,EACrB,eAAe,EACf,qBAAqB,EACrB,UAAU,GACV,MAAM,mBAAmB,CAAC;AAE3B,MAAM,CAAC,MAAM,iCAAiC,GAAG,UAAU,CAAC;IAC3D,IAAI,EAAE,iCAAiC;IACvC,IAAI,EAAE;QACL,IAAI,EAAE,YAAY;QAClB,IAAI,EAAE;YACL,WAAW,EACV,sFAAsF;SACvF;QACD,QAAQ,EAAE;YACT,yBAAyB,EACxB,+IAA+I;SAChJ;QACD,MAAM,EAAE,EAAE;KACV;IACD,cAAc,EAAE,EAAE;IAClB,MAAM,CAAC,OAAO;QACb,OAAO;YACN,gBAAgB,CAAC,IAAI;gBACpB,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,EAAE,CAAC;oBAClC,OAAO;gBACR,CAAC;gBAED,MAAM,kBAAkB,GAAG,iBAAiB,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;gBACjE,IACC,CAAC,kBAAkB,EAAE,KAAK;oBAC1B,kBAAkB,CAAC,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAC,cAAc,CAAC,eAAe,EACxE,CAAC;oBACF,OAAO;gBACR,CAAC;gBAED,KAAK,MAAM,OAAO,IAAI,kBAAkB,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;oBACzD,IAAI,OAAO,EAAE,IAAI,KAAK,QAAQ,CAAC,cAAc,CAAC,gBAAgB,EAAE,CAAC;wBAChE,SAAS;oBACV,CAAC;oBAED,MAAM,YAAY,GAAG,kBAAkB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;oBACzD,MAAM,SAAS,GAAG,YAAY,CAAC,CAAC,CAAC,qBAAqB,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;oBAElF,IAAI,CAAC,SAAS,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,EAAE,CAAC;wBACnD,SAAS;oBACV,CAAC;oBAED,6EAA6E;oBAC7E,+EAA+E;oBAC/E,+EAA+E;oBAC/E,wEAAwE;oBACxE,uEAAuE;oBACvE,gDAAgD;oBAChD,IAAI,CAAC,eAAe,CAAC,SAAS,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;wBACrD,OAAO,CAAC,MAAM,CAAC;4BACd,IAAI,EAAE,OAAO;4BACb,SAAS,EAAE,2BAA2B;4BACtC,IAAI,EAAE,EAAE,SAAS,EAAE;yBACnB,CAAC,CAAC;oBACJ,CAAC;gBACF,CAAC;YACF,CAAC;SACD,CAAC;IACH,CAAC;CACD,CAAC,CAAC"}
@@ -1 +0,0 @@
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"}