@n8n/eslint-plugin-community-nodes 0.21.0 → 0.23.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 (67) hide show
  1. package/.turbo/turbo-build$colon$unchecked.log +1 -1
  2. package/README.md +52 -46
  3. package/dist/plugin.d.ts +36 -0
  4. package/dist/plugin.d.ts.map +1 -1
  5. package/dist/plugin.js +12 -0
  6. package/dist/plugin.js.map +1 -1
  7. package/dist/rules/ai-node-package-json.d.ts.map +1 -1
  8. package/dist/rules/ai-node-package-json.js +4 -3
  9. package/dist/rules/ai-node-package-json.js.map +1 -1
  10. package/dist/rules/index.d.ts +6 -0
  11. package/dist/rules/index.d.ts.map +1 -1
  12. package/dist/rules/index.js +12 -0
  13. package/dist/rules/index.js.map +1 -1
  14. package/dist/rules/no-asterisk-in-option-names.d.ts +2 -0
  15. package/dist/rules/no-asterisk-in-option-names.d.ts.map +1 -0
  16. package/dist/rules/no-asterisk-in-option-names.js +90 -0
  17. package/dist/rules/no-asterisk-in-option-names.js.map +1 -0
  18. package/dist/rules/no-duplicate-param-options.d.ts +2 -0
  19. package/dist/rules/no-duplicate-param-options.d.ts.map +1 -0
  20. package/dist/rules/no-duplicate-param-options.js +97 -0
  21. package/dist/rules/no-duplicate-param-options.js.map +1 -0
  22. package/dist/rules/node-class-description-name-camelcase.d.ts +2 -0
  23. package/dist/rules/node-class-description-name-camelcase.d.ts.map +1 -0
  24. package/dist/rules/node-class-description-name-camelcase.js +92 -0
  25. package/dist/rules/node-class-description-name-camelcase.js.map +1 -0
  26. package/dist/rules/require-mit-license.d.ts +2 -0
  27. package/dist/rules/require-mit-license.d.ts.map +1 -0
  28. package/dist/rules/require-mit-license.js +57 -0
  29. package/dist/rules/require-mit-license.js.map +1 -0
  30. package/dist/rules/require-param-default.d.ts +15 -0
  31. package/dist/rules/require-param-default.d.ts.map +1 -0
  32. package/dist/rules/require-param-default.js +75 -0
  33. package/dist/rules/require-param-default.js.map +1 -0
  34. package/dist/rules/trigger-node-conventions.d.ts +2 -0
  35. package/dist/rules/trigger-node-conventions.d.ts.map +1 -0
  36. package/dist/rules/trigger-node-conventions.js +70 -0
  37. package/dist/rules/trigger-node-conventions.js.map +1 -0
  38. package/dist/rules/valid-peer-dependencies.d.ts.map +1 -1
  39. package/dist/rules/valid-peer-dependencies.js +5 -3
  40. package/dist/rules/valid-peer-dependencies.js.map +1 -1
  41. package/dist/typecheck.tsbuildinfo +1 -1
  42. package/docs/rules/no-asterisk-in-option-names.md +61 -0
  43. package/docs/rules/no-duplicate-param-options.md +46 -0
  44. package/docs/rules/node-class-description-name-camelcase.md +41 -0
  45. package/docs/rules/require-mit-license.md +38 -0
  46. package/docs/rules/require-param-default.md +60 -0
  47. package/docs/rules/trigger-node-conventions.md +49 -0
  48. package/docs/rules/valid-peer-dependencies.md +1 -1
  49. package/package.json +6 -5
  50. package/src/plugin.ts +12 -0
  51. package/src/rules/ai-node-package-json.test.ts +5 -0
  52. package/src/rules/ai-node-package-json.ts +4 -3
  53. package/src/rules/index.ts +12 -0
  54. package/src/rules/no-asterisk-in-option-names.test.ts +185 -0
  55. package/src/rules/no-asterisk-in-option-names.ts +111 -0
  56. package/src/rules/no-duplicate-param-options.test.ts +125 -0
  57. package/src/rules/no-duplicate-param-options.ts +125 -0
  58. package/src/rules/node-class-description-name-camelcase.test.ts +121 -0
  59. package/src/rules/node-class-description-name-camelcase.ts +114 -0
  60. package/src/rules/require-mit-license.test.ts +67 -0
  61. package/src/rules/require-mit-license.ts +65 -0
  62. package/src/rules/require-param-default.test.ts +227 -0
  63. package/src/rules/require-param-default.ts +89 -0
  64. package/src/rules/trigger-node-conventions.test.ts +110 -0
  65. package/src/rules/trigger-node-conventions.ts +92 -0
  66. package/src/rules/valid-peer-dependencies.test.ts +5 -0
  67. package/src/rules/valid-peer-dependencies.ts +5 -3
@@ -0,0 +1,70 @@
1
+ import { TSESTree } from '@typescript-eslint/utils';
2
+ import { isNodeTypeClass, findClassProperty, findObjectProperty, getStringLiteralValue, isFileType, createRule, } from '../utils/index.js';
3
+ export const TriggerNodeConventionsRule = createRule({
4
+ name: 'trigger-node-conventions',
5
+ meta: {
6
+ type: 'problem',
7
+ docs: {
8
+ description: 'Trigger nodes (class name ends with `Trigger`) must label themselves consistently as triggers',
9
+ },
10
+ messages: {
11
+ nameMissingSuffix: "Trigger node `description.name` '{{value}}' must end with 'Trigger'",
12
+ displayNameMissingTrigger: "Trigger node `description.displayName` '{{value}}' must contain 'Trigger'",
13
+ inputsNotEmpty: 'Trigger node `description.inputs` must be an empty array `[]`',
14
+ },
15
+ schema: [],
16
+ },
17
+ defaultOptions: [],
18
+ create(context) {
19
+ if (!isFileType(context.filename, '.node.ts')) {
20
+ return {};
21
+ }
22
+ return {
23
+ ClassDeclaration(node) {
24
+ if (!isNodeTypeClass(node)) {
25
+ return;
26
+ }
27
+ if (!node.id?.name.endsWith('Trigger')) {
28
+ return;
29
+ }
30
+ const descriptionProperty = findClassProperty(node, 'description');
31
+ if (descriptionProperty?.value?.type !== TSESTree.AST_NODE_TYPES.ObjectExpression) {
32
+ return;
33
+ }
34
+ const description = descriptionProperty.value;
35
+ const displayNameProperty = findObjectProperty(description, 'displayName');
36
+ const displayNameValue = displayNameProperty
37
+ ? getStringLiteralValue(displayNameProperty.value)
38
+ : null;
39
+ if (displayNameProperty &&
40
+ displayNameValue !== null &&
41
+ !displayNameValue.includes('Trigger')) {
42
+ context.report({
43
+ node: displayNameProperty.value,
44
+ messageId: 'displayNameMissingTrigger',
45
+ data: { value: displayNameValue },
46
+ });
47
+ }
48
+ const nameProperty = findObjectProperty(description, 'name');
49
+ const nameValue = nameProperty ? getStringLiteralValue(nameProperty.value) : null;
50
+ if (nameProperty && nameValue !== null && !nameValue.endsWith('Trigger')) {
51
+ context.report({
52
+ node: nameProperty.value,
53
+ messageId: 'nameMissingSuffix',
54
+ data: { value: nameValue },
55
+ });
56
+ }
57
+ const inputsProperty = findObjectProperty(description, 'inputs');
58
+ if (inputsProperty &&
59
+ !(inputsProperty.value.type === TSESTree.AST_NODE_TYPES.ArrayExpression &&
60
+ inputsProperty.value.elements.length === 0)) {
61
+ context.report({
62
+ node: inputsProperty.value,
63
+ messageId: 'inputsNotEmpty',
64
+ });
65
+ }
66
+ },
67
+ };
68
+ },
69
+ });
70
+ //# sourceMappingURL=trigger-node-conventions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trigger-node-conventions.js","sourceRoot":"","sources":["../../src/rules/trigger-node-conventions.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"valid-peer-dependencies.d.ts","sourceRoot":"","sources":["../../src/rules/valid-peer-dependencies.ts"],"names":[],"mappings":"AASA,eAAO,MAAM,yBAAyB,qQA0GpC,CAAC"}
1
+ {"version":3,"file":"valid-peer-dependencies.d.ts","sourceRoot":"","sources":["../../src/rules/valid-peer-dependencies.ts"],"names":[],"mappings":"AAWA,eAAO,MAAM,yBAAyB,qQA0GpC,CAAC"}
@@ -2,13 +2,15 @@ import { AST_NODE_TYPES } from '@typescript-eslint/utils';
2
2
  import { createRule, findJsonProperty } from '../utils/index.js';
3
3
  const REQUIRED_DEP = 'n8n-workflow';
4
4
  const REQUIRED_VERSION = '*';
5
- const ALLOWED_DEPS = new Set([REQUIRED_DEP, 'ai-node-sdk']);
5
+ // The published SDK is scoped (@n8n/ai-node-sdk); the unscoped name is kept for
6
+ // backwards compatibility, mirroring no-restricted-imports.
7
+ const ALLOWED_DEPS = new Set([REQUIRED_DEP, '@n8n/ai-node-sdk', 'ai-node-sdk']);
6
8
  export const ValidPeerDependenciesRule = createRule({
7
9
  name: 'valid-peer-dependencies',
8
10
  meta: {
9
11
  type: 'problem',
10
12
  docs: {
11
- description: 'Require community node package.json peerDependencies to contain only "n8n-workflow": "*" (and optionally "ai-node-sdk")',
13
+ description: 'Require community node package.json peerDependencies to contain only "n8n-workflow": "*" (and optionally "@n8n/ai-node-sdk")',
12
14
  },
13
15
  fixable: 'code',
14
16
  messages: {
@@ -16,7 +18,7 @@ export const ValidPeerDependenciesRule = createRule({
16
18
  invalidPeerDependenciesType: `"peerDependencies" must be an object mapping package names to version ranges (containing "${REQUIRED_DEP}": "${REQUIRED_VERSION}").`,
17
19
  missingN8nWorkflow: `"peerDependencies" must include "${REQUIRED_DEP}": "${REQUIRED_VERSION}".`,
18
20
  pinnedN8nWorkflow: `"peerDependencies.${REQUIRED_DEP}" must be "${REQUIRED_VERSION}", got {{ value }}.`,
19
- forbiddenPeerDependency: '"{{ name }}" is not allowed in "peerDependencies". Only "n8n-workflow" and "ai-node-sdk" are permitted.',
21
+ forbiddenPeerDependency: '"{{ name }}" is not allowed in "peerDependencies". Only "n8n-workflow" and "@n8n/ai-node-sdk" are permitted.',
20
22
  },
21
23
  schema: [],
22
24
  },
@@ -1 +1 @@
1
- {"version":3,"file":"valid-peer-dependencies.js","sourceRoot":"","sources":["../../src/rules/valid-peer-dependencies.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"valid-peer-dependencies.js","sourceRoot":"","sources":["../../src/rules/valid-peer-dependencies.ts"],"names":[],"mappings":"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"}