@n8n/eslint-plugin-community-nodes 0.24.0 → 0.26.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 (137) hide show
  1. package/.turbo/turbo-build.log +1 -1
  2. package/README.md +39 -52
  3. package/dist/plugin.d.ts +15 -93
  4. package/dist/plugin.d.ts.map +1 -1
  5. package/dist/plugin.js +0 -26
  6. package/dist/plugin.js.map +1 -1
  7. package/dist/rules/ai-node-package-json.d.ts +1 -1
  8. package/dist/rules/cred-class-field-icon-missing.d.ts +1 -1
  9. package/dist/rules/cred-class-oauth2-naming.d.ts +1 -1
  10. package/dist/rules/icon-validation.d.ts +1 -1
  11. package/dist/rules/index.d.ts +20 -33
  12. package/dist/rules/index.d.ts.map +1 -1
  13. package/dist/rules/index.js +0 -26
  14. package/dist/rules/index.js.map +1 -1
  15. package/dist/rules/no-credential-reuse.d.ts +1 -1
  16. package/dist/rules/no-dangerous-functions.d.ts +1 -1
  17. package/dist/rules/no-deprecated-workflow-functions.d.ts +1 -1
  18. package/dist/rules/no-restricted-imports.d.ts +1 -1
  19. package/dist/rules/no-restricted-imports.d.ts.map +1 -1
  20. package/dist/rules/no-restricted-imports.js +14 -5
  21. package/dist/rules/no-restricted-imports.js.map +1 -1
  22. package/dist/rules/node-class-description-icon-missing.d.ts +1 -1
  23. package/dist/rules/node-connection-type-literal.js.map +1 -1
  24. package/dist/rules/package-name-convention.d.ts +1 -1
  25. package/dist/rules/require-version.d.ts +1 -1
  26. package/dist/rules/trigger-node-conventions.d.ts +1 -1
  27. package/dist/rules/valid-author.d.ts +1 -1
  28. package/dist/rules/valid-credential-references.d.ts +1 -1
  29. package/dist/rules/valid-description.d.ts +1 -1
  30. package/dist/rules/valid-peer-dependencies.d.ts +1 -1
  31. package/dist/rules/webhook-lifecycle-complete.d.ts +1 -1
  32. package/dist/typecheck.tsbuildinfo +1 -1
  33. package/dist/utils/ast-utils.js.map +1 -1
  34. package/dist/utils/file-utils.d.ts +7 -0
  35. package/dist/utils/file-utils.d.ts.map +1 -1
  36. package/dist/utils/file-utils.js +28 -6
  37. package/dist/utils/file-utils.js.map +1 -1
  38. package/docs/rules/no-forbidden-lifecycle-scripts.md +1 -1
  39. package/docs/rules/no-restricted-imports.md +9 -0
  40. package/package.json +6 -5
  41. package/src/plugin.ts +0 -26
  42. package/src/rules/index.ts +0 -26
  43. package/src/rules/no-restricted-imports.test.ts +63 -0
  44. package/src/rules/no-restricted-imports.ts +17 -4
  45. package/src/utils/file-utils.ts +27 -6
  46. package/tsconfig.json +1 -1
  47. package/dist/rules/cred-class-name-field-conventions.d.ts +0 -2
  48. package/dist/rules/cred-class-name-field-conventions.d.ts.map +0 -1
  49. package/dist/rules/cred-class-name-field-conventions.js +0 -89
  50. package/dist/rules/cred-class-name-field-conventions.js.map +0 -1
  51. package/dist/rules/cred-class-name-suffix.d.ts +0 -2
  52. package/dist/rules/cred-class-name-suffix.d.ts.map +0 -1
  53. package/dist/rules/cred-class-name-suffix.js +0 -53
  54. package/dist/rules/cred-class-name-suffix.js.map +0 -1
  55. package/dist/rules/cred-filename-against-convention.d.ts +0 -2
  56. package/dist/rules/cred-filename-against-convention.d.ts.map +0 -1
  57. package/dist/rules/cred-filename-against-convention.js +0 -42
  58. package/dist/rules/cred-filename-against-convention.js.map +0 -1
  59. package/dist/rules/no-asterisk-in-option-names.d.ts +0 -2
  60. package/dist/rules/no-asterisk-in-option-names.d.ts.map +0 -1
  61. package/dist/rules/no-asterisk-in-option-names.js +0 -90
  62. package/dist/rules/no-asterisk-in-option-names.js.map +0 -1
  63. package/dist/rules/no-duplicate-param-options.d.ts +0 -2
  64. package/dist/rules/no-duplicate-param-options.d.ts.map +0 -1
  65. package/dist/rules/no-duplicate-param-options.js +0 -97
  66. package/dist/rules/no-duplicate-param-options.js.map +0 -1
  67. package/dist/rules/node-class-description-name-camelcase.d.ts +0 -2
  68. package/dist/rules/node-class-description-name-camelcase.d.ts.map +0 -1
  69. package/dist/rules/node-class-description-name-camelcase.js +0 -92
  70. package/dist/rules/node-class-description-name-camelcase.js.map +0 -1
  71. package/dist/rules/node-filename-against-convention.d.ts +0 -2
  72. package/dist/rules/node-filename-against-convention.d.ts.map +0 -1
  73. package/dist/rules/node-filename-against-convention.js +0 -61
  74. package/dist/rules/node-filename-against-convention.js.map +0 -1
  75. package/dist/rules/node-operation-error-itemindex.d.ts +0 -12
  76. package/dist/rules/node-operation-error-itemindex.d.ts.map +0 -1
  77. package/dist/rules/node-operation-error-itemindex.js +0 -184
  78. package/dist/rules/node-operation-error-itemindex.js.map +0 -1
  79. package/dist/rules/options-sorted-alphabetically.d.ts +0 -2
  80. package/dist/rules/options-sorted-alphabetically.d.ts.map +0 -1
  81. package/dist/rules/options-sorted-alphabetically.js +0 -95
  82. package/dist/rules/options-sorted-alphabetically.js.map +0 -1
  83. package/dist/rules/require-community-node-keyword.d.ts +0 -2
  84. package/dist/rules/require-community-node-keyword.d.ts.map +0 -1
  85. package/dist/rules/require-community-node-keyword.js +0 -65
  86. package/dist/rules/require-community-node-keyword.js.map +0 -1
  87. package/dist/rules/require-continue-on-fail.d.ts +0 -2
  88. package/dist/rules/require-continue-on-fail.d.ts.map +0 -1
  89. package/dist/rules/require-continue-on-fail.js +0 -76
  90. package/dist/rules/require-continue-on-fail.js.map +0 -1
  91. package/dist/rules/require-mit-license.d.ts +0 -2
  92. package/dist/rules/require-mit-license.d.ts.map +0 -1
  93. package/dist/rules/require-mit-license.js +0 -57
  94. package/dist/rules/require-mit-license.js.map +0 -1
  95. package/dist/rules/require-param-default.d.ts +0 -15
  96. package/dist/rules/require-param-default.d.ts.map +0 -1
  97. package/dist/rules/require-param-default.js +0 -75
  98. package/dist/rules/require-param-default.js.map +0 -1
  99. package/docs/rules/cred-class-name-field-conventions.md +0 -38
  100. package/docs/rules/cred-class-name-suffix.md +0 -46
  101. package/docs/rules/cred-filename-against-convention.md +0 -42
  102. package/docs/rules/no-asterisk-in-option-names.md +0 -61
  103. package/docs/rules/no-duplicate-param-options.md +0 -46
  104. package/docs/rules/node-class-description-name-camelcase.md +0 -41
  105. package/docs/rules/node-filename-against-convention.md +0 -50
  106. package/docs/rules/node-operation-error-itemindex.md +0 -81
  107. package/docs/rules/options-sorted-alphabetically.md +0 -63
  108. package/docs/rules/require-community-node-keyword.md +0 -45
  109. package/docs/rules/require-continue-on-fail.md +0 -56
  110. package/docs/rules/require-mit-license.md +0 -38
  111. package/docs/rules/require-param-default.md +0 -60
  112. package/src/rules/cred-class-name-field-conventions.test.ts +0 -121
  113. package/src/rules/cred-class-name-field-conventions.ts +0 -102
  114. package/src/rules/cred-class-name-suffix.test.ts +0 -74
  115. package/src/rules/cred-class-name-suffix.ts +0 -57
  116. package/src/rules/cred-filename-against-convention.test.ts +0 -72
  117. package/src/rules/cred-filename-against-convention.ts +0 -48
  118. package/src/rules/no-asterisk-in-option-names.test.ts +0 -185
  119. package/src/rules/no-asterisk-in-option-names.ts +0 -111
  120. package/src/rules/no-duplicate-param-options.test.ts +0 -125
  121. package/src/rules/no-duplicate-param-options.ts +0 -125
  122. package/src/rules/node-class-description-name-camelcase.test.ts +0 -121
  123. package/src/rules/node-class-description-name-camelcase.ts +0 -114
  124. package/src/rules/node-filename-against-convention.test.ts +0 -115
  125. package/src/rules/node-filename-against-convention.ts +0 -76
  126. package/src/rules/node-operation-error-itemindex.test.ts +0 -280
  127. package/src/rules/node-operation-error-itemindex.ts +0 -223
  128. package/src/rules/options-sorted-alphabetically.test.ts +0 -468
  129. package/src/rules/options-sorted-alphabetically.ts +0 -129
  130. package/src/rules/require-community-node-keyword.test.ts +0 -82
  131. package/src/rules/require-community-node-keyword.ts +0 -78
  132. package/src/rules/require-continue-on-fail.test.ts +0 -129
  133. package/src/rules/require-continue-on-fail.ts +0 -88
  134. package/src/rules/require-mit-license.test.ts +0 -67
  135. package/src/rules/require-mit-license.ts +0 -65
  136. package/src/rules/require-param-default.test.ts +0 -227
  137. package/src/rules/require-param-default.ts +0 -89
@@ -1,89 +0,0 @@
1
- import { createRule, findClassProperty, getStringLiteralValue, isCredentialTypeClass, isFileType, } from '../utils/index.js';
2
- function lowercaseFirstChar(name) {
3
- return name.charAt(0).toLowerCase() + name.slice(1);
4
- }
5
- function addApiSuffix(name) {
6
- if (name.endsWith('Api'))
7
- return name;
8
- if (name.endsWith('Ap'))
9
- return `${name}i`;
10
- if (name.endsWith('A'))
11
- return `${name}pi`;
12
- return `${name}Api`;
13
- }
14
- // Serialize a value as a string literal using the original quote character,
15
- // escaping any characters that would otherwise break the literal so the
16
- // autofix never emits invalid code (e.g. names containing quotes).
17
- function toStringLiteral(value, quote) {
18
- const escaped = value
19
- .replace(/\\/g, '\\\\')
20
- .replace(/\n/g, '\\n')
21
- .replace(/\r/g, '\\r')
22
- .split(quote)
23
- .join(`\\${quote}`);
24
- return `${quote}${escaped}${quote}`;
25
- }
26
- export const CredClassNameFieldConventionsRule = createRule({
27
- name: 'cred-class-name-field-conventions',
28
- meta: {
29
- type: 'problem',
30
- docs: {
31
- description: 'Credential `name` field must end with `Api` and start with a lowercase letter',
32
- },
33
- messages: {
34
- missingSuffix: "Credential `name` field '{{value}}' must end with 'Api'",
35
- uppercaseFirstChar: "Credential `name` field '{{value}}' must start with a lowercase letter",
36
- },
37
- fixable: 'code',
38
- schema: [],
39
- },
40
- defaultOptions: [],
41
- create(context) {
42
- if (!isFileType(context.filename, '.credentials.ts')) {
43
- return {};
44
- }
45
- return {
46
- ClassDeclaration(node) {
47
- if (!isCredentialTypeClass(node)) {
48
- return;
49
- }
50
- const nameProperty = findClassProperty(node, 'name');
51
- if (!nameProperty?.value) {
52
- return;
53
- }
54
- const nameValue = getStringLiteralValue(nameProperty.value);
55
- if (nameValue === null) {
56
- return;
57
- }
58
- const startsLowercase = !/^[A-Z]/.test(nameValue);
59
- const endsWithApi = nameValue.endsWith('Api');
60
- if (startsLowercase && endsWithApi) {
61
- return;
62
- }
63
- // Compute the fully-corrected value once so each fix yields the
64
- // same result in a single pass, regardless of which one applies.
65
- const fixedValue = addApiSuffix(lowercaseFirstChar(nameValue));
66
- const valueNode = nameProperty.value;
67
- const quote = context.sourceCode.getText(valueNode).charAt(0);
68
- const replacement = toStringLiteral(fixedValue, quote);
69
- if (!startsLowercase) {
70
- context.report({
71
- node: valueNode,
72
- messageId: 'uppercaseFirstChar',
73
- data: { value: nameValue },
74
- fix: (fixer) => fixer.replaceText(valueNode, replacement),
75
- });
76
- }
77
- if (!endsWithApi) {
78
- context.report({
79
- node: valueNode,
80
- messageId: 'missingSuffix',
81
- data: { value: nameValue },
82
- fix: (fixer) => fixer.replaceText(valueNode, replacement),
83
- });
84
- }
85
- },
86
- };
87
- },
88
- });
89
- //# sourceMappingURL=cred-class-name-field-conventions.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"cred-class-name-field-conventions.js","sourceRoot":"","sources":["../../src/rules/cred-class-name-field-conventions.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export declare const CredClassNameSuffixRule: import("@typescript-eslint/utils/ts-eslint").RuleModule<"missingSuffix", [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
2
- //# sourceMappingURL=cred-class-name-suffix.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"cred-class-name-suffix.d.ts","sourceRoot":"","sources":["../../src/rules/cred-class-name-suffix.ts"],"names":[],"mappings":"AAQA,eAAO,MAAM,uBAAuB,kJAgDlC,CAAC"}
@@ -1,53 +0,0 @@
1
- import { isCredentialTypeClass, isFileType, createRule } from '../utils/index.js';
2
- function addApiSuffix(name) {
3
- if (name.endsWith('Ap'))
4
- return `${name}i`;
5
- if (name.endsWith('A'))
6
- return `${name}pi`;
7
- return `${name}Api`;
8
- }
9
- export const CredClassNameSuffixRule = createRule({
10
- name: 'cred-class-name-suffix',
11
- meta: {
12
- type: 'problem',
13
- docs: {
14
- description: 'Credential class names must be suffixed with `Api`',
15
- },
16
- messages: {
17
- missingSuffix: "Credential class name '{{name}}' must end with 'Api'",
18
- },
19
- fixable: 'code',
20
- schema: [],
21
- },
22
- defaultOptions: [],
23
- create(context) {
24
- if (!isFileType(context.filename, '.credentials.ts')) {
25
- return {};
26
- }
27
- return {
28
- ClassDeclaration(node) {
29
- if (!isCredentialTypeClass(node)) {
30
- return;
31
- }
32
- const classNameNode = node.id;
33
- if (!classNameNode) {
34
- return;
35
- }
36
- const className = classNameNode.name;
37
- if (className.endsWith('Api')) {
38
- return;
39
- }
40
- const fixedName = addApiSuffix(className);
41
- context.report({
42
- node: classNameNode,
43
- messageId: 'missingSuffix',
44
- data: { name: className },
45
- fix(fixer) {
46
- return fixer.replaceText(classNameNode, fixedName);
47
- },
48
- });
49
- },
50
- };
51
- },
52
- });
53
- //# sourceMappingURL=cred-class-name-suffix.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"cred-class-name-suffix.js","sourceRoot":"","sources":["../../src/rules/cred-class-name-suffix.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAElF,SAAS,YAAY,CAAC,IAAY;IACjC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;QAAE,OAAO,GAAG,IAAI,GAAG,CAAC;IAC3C,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;QAAE,OAAO,GAAG,IAAI,IAAI,CAAC;IAC3C,OAAO,GAAG,IAAI,KAAK,CAAC;AACrB,CAAC;AAED,MAAM,CAAC,MAAM,uBAAuB,GAAG,UAAU,CAAC;IACjD,IAAI,EAAE,wBAAwB;IAC9B,IAAI,EAAE;QACL,IAAI,EAAE,SAAS;QACf,IAAI,EAAE;YACL,WAAW,EAAE,oDAAoD;SACjE;QACD,QAAQ,EAAE;YACT,aAAa,EAAE,sDAAsD;SACrE;QACD,OAAO,EAAE,MAAM;QACf,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,IAAI,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;oBAC/B,OAAO;gBACR,CAAC;gBAED,MAAM,SAAS,GAAG,YAAY,CAAC,SAAS,CAAC,CAAC;gBAE1C,OAAO,CAAC,MAAM,CAAC;oBACd,IAAI,EAAE,aAAa;oBACnB,SAAS,EAAE,eAAe;oBAC1B,IAAI,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;oBACzB,GAAG,CAAC,KAAK;wBACR,OAAO,KAAK,CAAC,WAAW,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC;oBACpD,CAAC;iBACD,CAAC,CAAC;YACJ,CAAC;SACD,CAAC;IACH,CAAC;CACD,CAAC,CAAC"}
@@ -1,2 +0,0 @@
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
@@ -1 +0,0 @@
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"}
@@ -1,42 +0,0 @@
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
@@ -1 +0,0 @@
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"}
@@ -1,2 +0,0 @@
1
- export declare const NoAsteriskInOptionNamesRule: import("@typescript-eslint/utils/ts-eslint").RuleModule<"asteriskInOptionName" | "replaceAsterisk", [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
2
- //# sourceMappingURL=no-asterisk-in-option-names.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"no-asterisk-in-option-names.d.ts","sourceRoot":"","sources":["../../src/rules/no-asterisk-in-option-names.ts"],"names":[],"mappings":"AAYA,eAAO,MAAM,2BAA2B,6KAkGtC,CAAC"}
@@ -1,90 +0,0 @@
1
- import { AST_NODE_TYPES } from '@typescript-eslint/utils';
2
- import { isNodeTypeClass, findClassProperty, findObjectProperty, getStringLiteralValue, isFileType, createRule, } from '../utils/index.js';
3
- export const NoAsteriskInOptionNamesRule = createRule({
4
- name: 'no-asterisk-in-option-names',
5
- meta: {
6
- type: 'suggestion',
7
- docs: {
8
- description: 'Disallow asterisk characters in node option name values',
9
- },
10
- hasSuggestions: true,
11
- messages: {
12
- asteriskInOptionName: 'Option name "{{ name }}" contains "*", which renders ambiguously in the n8n UI. Use bracketed notation like "[All]" instead.',
13
- replaceAsterisk: 'Replace "*" with "[All]".',
14
- },
15
- schema: [],
16
- },
17
- defaultOptions: [],
18
- create(context) {
19
- if (!isFileType(context.filename, '.node.ts')) {
20
- return {};
21
- }
22
- // Check every object that is a direct element of an `options` array.
23
- const checkOptionsArray = (optionsArray) => {
24
- for (const option of optionsArray.elements) {
25
- if (!option || option.type !== AST_NODE_TYPES.ObjectExpression) {
26
- continue;
27
- }
28
- const valueNode = findObjectProperty(option, 'name')?.value;
29
- if (!valueNode) {
30
- continue;
31
- }
32
- const name = getStringLiteralValue(valueNode);
33
- if (!name?.includes('*')) {
34
- continue;
35
- }
36
- context.report({
37
- node: valueNode,
38
- messageId: 'asteriskInOptionName',
39
- data: { name },
40
- suggest: [
41
- {
42
- messageId: 'replaceAsterisk',
43
- fix(fixer) {
44
- const quote = context.sourceCode.getText(valueNode).at(0) ?? "'";
45
- return fixer.replaceText(valueNode, `${quote}${name.replaceAll('*', '[All]')}${quote}`);
46
- },
47
- },
48
- ],
49
- });
50
- }
51
- };
52
- const traverse = (node) => {
53
- if (node.type === AST_NODE_TYPES.ObjectExpression) {
54
- const optionsProperty = findObjectProperty(node, 'options');
55
- if (optionsProperty?.value.type === AST_NODE_TYPES.ArrayExpression) {
56
- checkOptionsArray(optionsProperty.value);
57
- }
58
- }
59
- for (const key in node) {
60
- if (key === 'parent') {
61
- continue;
62
- }
63
- const child = node[key];
64
- if (Array.isArray(child)) {
65
- for (const item of child) {
66
- if (item && typeof item === 'object' && 'type' in item) {
67
- traverse(item);
68
- }
69
- }
70
- }
71
- else if (child && typeof child === 'object' && 'type' in child) {
72
- traverse(child);
73
- }
74
- }
75
- };
76
- return {
77
- ClassDeclaration(node) {
78
- if (!isNodeTypeClass(node)) {
79
- return;
80
- }
81
- const descriptionProperty = findClassProperty(node, 'description');
82
- if (!descriptionProperty?.value) {
83
- return;
84
- }
85
- traverse(descriptionProperty.value);
86
- },
87
- };
88
- },
89
- });
90
- //# sourceMappingURL=no-asterisk-in-option-names.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"no-asterisk-in-option-names.js","sourceRoot":"","sources":["../../src/rules/no-asterisk-in-option-names.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export declare const NoDuplicateParamOptionsRule: import("@typescript-eslint/utils/ts-eslint").RuleModule<"duplicateName" | "duplicateValue", [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
2
- //# sourceMappingURL=no-duplicate-param-options.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"no-duplicate-param-options.d.ts","sourceRoot":"","sources":["../../src/rules/no-duplicate-param-options.ts"],"names":[],"mappings":"AAaA,eAAO,MAAM,2BAA2B,qKA+GtC,CAAC"}
@@ -1,97 +0,0 @@
1
- import { AST_NODE_TYPES } from '@typescript-eslint/utils';
2
- import { isNodeTypeClass, findClassProperty, findObjectProperty, getStringLiteralValue, getLiteralValue, isFileType, createRule, } from '../utils/index.js';
3
- export const NoDuplicateParamOptionsRule = createRule({
4
- name: 'no-duplicate-param-options',
5
- meta: {
6
- type: 'problem',
7
- docs: {
8
- description: 'Disallow duplicate option names or values within a single node parameter',
9
- },
10
- messages: {
11
- duplicateName: 'Duplicate option name "{{ value }}" in parameter "{{ displayName }}".',
12
- duplicateValue: 'Duplicate option value "{{ value }}" in parameter "{{ displayName }}".',
13
- },
14
- schema: [],
15
- },
16
- defaultOptions: [],
17
- create(context) {
18
- if (!isFileType(context.filename, '.node.ts')) {
19
- return {};
20
- }
21
- const checkProperty = (property) => {
22
- const typeProperty = findObjectProperty(property, 'type');
23
- const type = typeProperty ? getStringLiteralValue(typeProperty.value) : null;
24
- if (type !== 'options' && type !== 'multiOptions') {
25
- return;
26
- }
27
- const optionsProperty = findObjectProperty(property, 'options');
28
- if (!optionsProperty?.value ||
29
- optionsProperty.value.type !== AST_NODE_TYPES.ArrayExpression) {
30
- return;
31
- }
32
- const displayNameProperty = findObjectProperty(property, 'displayName');
33
- const displayName = (displayNameProperty ? getStringLiteralValue(displayNameProperty.value) : null) ??
34
- 'unknown';
35
- const seenNames = new Set();
36
- const seenValues = new Set();
37
- for (const option of optionsProperty.value.elements) {
38
- if (!option || option.type !== AST_NODE_TYPES.ObjectExpression) {
39
- continue;
40
- }
41
- const nameProperty = findObjectProperty(option, 'name');
42
- const name = nameProperty ? getStringLiteralValue(nameProperty.value) : null;
43
- if (name !== null) {
44
- if (seenNames.has(name)) {
45
- context.report({
46
- node: nameProperty.value,
47
- messageId: 'duplicateName',
48
- data: { value: name, displayName },
49
- });
50
- }
51
- seenNames.add(name);
52
- }
53
- const valueProperty = findObjectProperty(option, 'value');
54
- const value = valueProperty ? getLiteralValue(valueProperty.value) : null;
55
- if (value !== null) {
56
- if (seenValues.has(value)) {
57
- context.report({
58
- node: valueProperty.value,
59
- messageId: 'duplicateValue',
60
- data: { value: String(value), displayName },
61
- });
62
- }
63
- seenValues.add(value);
64
- }
65
- }
66
- };
67
- const analyzeNodeDescription = (descriptionValue) => {
68
- if (!descriptionValue || descriptionValue.type !== AST_NODE_TYPES.ObjectExpression) {
69
- return;
70
- }
71
- const propertiesProperty = findObjectProperty(descriptionValue, 'properties');
72
- if (!propertiesProperty?.value ||
73
- propertiesProperty.value.type !== AST_NODE_TYPES.ArrayExpression) {
74
- return;
75
- }
76
- for (const property of propertiesProperty.value.elements) {
77
- if (!property || property.type !== AST_NODE_TYPES.ObjectExpression) {
78
- continue;
79
- }
80
- checkProperty(property);
81
- }
82
- };
83
- return {
84
- ClassDeclaration(node) {
85
- if (!isNodeTypeClass(node)) {
86
- return;
87
- }
88
- const descriptionProperty = findClassProperty(node, 'description');
89
- if (!descriptionProperty) {
90
- return;
91
- }
92
- analyzeNodeDescription(descriptionProperty.value);
93
- },
94
- };
95
- },
96
- });
97
- //# sourceMappingURL=no-duplicate-param-options.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"no-duplicate-param-options.js","sourceRoot":"","sources":["../../src/rules/no-duplicate-param-options.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export declare const NodeClassDescriptionNameCamelCaseRule: import("@typescript-eslint/utils/ts-eslint").RuleModule<"notCamelCase", [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
2
- //# sourceMappingURL=node-class-description-name-camelcase.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"node-class-description-name-camelcase.d.ts","sourceRoot":"","sources":["../../src/rules/node-class-description-name-camelcase.ts"],"names":[],"mappings":"AAiDA,eAAO,MAAM,qCAAqC,iJAgEhD,CAAC"}
@@ -1,92 +0,0 @@
1
- import { TSESTree } from '@typescript-eslint/utils';
2
- import { isNodeTypeClass, findClassProperty, findObjectProperty, getStringLiteralValue, isFileType, createRule, } from '../utils/index.js';
3
- // `description.name` must be camelCase: a lowercase letter followed by
4
- // letters/digits, with no separators.
5
- const CAMEL_CASE_PATTERN = /^[a-z][a-zA-Z0-9]*$/;
6
- /**
7
- * Converts an arbitrary node name to camelCase by splitting on any
8
- * non-alphanumeric separators, upper-casing the first character of each
9
- * subsequent segment, and lower-casing the very first character.
10
- * Examples: `My Node` -> `myNode`, `my-node` -> `myNode`, `GitHub` -> `gitHub`.
11
- */
12
- function toCamelCase(value) {
13
- const segments = value.split(/[^a-zA-Z0-9]+/).filter(Boolean);
14
- if (segments.length === 0) {
15
- return value;
16
- }
17
- const joined = segments
18
- .map((segment, index) => index === 0 ? segment : segment.charAt(0).toUpperCase() + segment.slice(1))
19
- .join('');
20
- return joined.charAt(0).toLowerCase() + joined.slice(1);
21
- }
22
- // Serialize a value as a string literal using the original quote character,
23
- // escaping any characters that would otherwise break the literal so the
24
- // autofix never emits invalid code.
25
- function toStringLiteral(value, quote) {
26
- const escaped = value
27
- .replace(/\\/g, '\\\\')
28
- .replace(/\n/g, '\\n')
29
- .replace(/\r/g, '\\r')
30
- .split(quote)
31
- .join(`\\${quote}`);
32
- return `${quote}${escaped}${quote}`;
33
- }
34
- export const NodeClassDescriptionNameCamelCaseRule = createRule({
35
- name: 'node-class-description-name-camelcase',
36
- meta: {
37
- type: 'problem',
38
- docs: {
39
- description: 'Node class `description.name` must be camelCase',
40
- },
41
- messages: {
42
- notCamelCase: "Node `description.name` '{{value}}' must be camelCase",
43
- },
44
- fixable: 'code',
45
- schema: [],
46
- },
47
- defaultOptions: [],
48
- create(context) {
49
- if (!isFileType(context.filename, '.node.ts')) {
50
- return {};
51
- }
52
- return {
53
- ClassDeclaration(node) {
54
- if (!isNodeTypeClass(node)) {
55
- return;
56
- }
57
- const descriptionProperty = findClassProperty(node, 'description');
58
- if (descriptionProperty?.value?.type !== TSESTree.AST_NODE_TYPES.ObjectExpression) {
59
- return;
60
- }
61
- const nameProperty = findObjectProperty(descriptionProperty.value, 'name');
62
- if (!nameProperty) {
63
- return;
64
- }
65
- const nameValue = getStringLiteralValue(nameProperty.value);
66
- if (nameValue === null) {
67
- return;
68
- }
69
- if (CAMEL_CASE_PATTERN.test(nameValue)) {
70
- return;
71
- }
72
- const valueNode = nameProperty.value;
73
- const fixedValue = toCamelCase(nameValue);
74
- // Only offer an autofix when it actually yields a valid camelCase
75
- // value (e.g. names starting with a digit cannot be repaired).
76
- const canFix = fixedValue !== nameValue && CAMEL_CASE_PATTERN.test(fixedValue);
77
- context.report({
78
- node: valueNode,
79
- messageId: 'notCamelCase',
80
- data: { value: nameValue },
81
- fix: canFix
82
- ? (fixer) => {
83
- const quote = context.sourceCode.getText(valueNode).charAt(0);
84
- return fixer.replaceText(valueNode, toStringLiteral(fixedValue, quote));
85
- }
86
- : undefined,
87
- });
88
- },
89
- };
90
- },
91
- });
92
- //# sourceMappingURL=node-class-description-name-camelcase.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"node-class-description-name-camelcase.js","sourceRoot":"","sources":["../../src/rules/node-class-description-name-camelcase.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export declare const NodeFilenameAgainstConventionRule: import("@typescript-eslint/utils/ts-eslint").RuleModule<"renameFile", [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
2
- //# sourceMappingURL=node-filename-against-convention.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"node-filename-against-convention.d.ts","sourceRoot":"","sources":["../../src/rules/node-filename-against-convention.ts"],"names":[],"mappings":"AAqBA,eAAO,MAAM,iCAAiC,+IAsD5C,CAAC"}
@@ -1,61 +0,0 @@
1
- import { TSESTree } from '@typescript-eslint/utils';
2
- import * as path from 'node:path';
3
- import { isNodeTypeClass, findClassProperty, findObjectProperty, getStringLiteralValue, isFileType, createRule, } from '../utils/index.js';
4
- /**
5
- * Converts a `description.name` to the expected node file basename by
6
- * upper-casing the first character. The source of truth is `description.name`,
7
- * not the class name. Example: `github` -> `Github`.
8
- */
9
- function toExpectedBaseName(name) {
10
- return name.charAt(0).toUpperCase() + name.slice(1);
11
- }
12
- export const NodeFilenameAgainstConventionRule = createRule({
13
- name: 'node-filename-against-convention',
14
- meta: {
15
- type: 'problem',
16
- docs: {
17
- description: 'Node filename must match the node `description.name`',
18
- },
19
- messages: {
20
- renameFile: 'Node filename must match `description.name`. Rename file to "{{expected}}".',
21
- },
22
- schema: [],
23
- },
24
- defaultOptions: [],
25
- create(context) {
26
- if (!isFileType(context.filename, '.node.ts')) {
27
- return {};
28
- }
29
- return {
30
- ClassDeclaration(node) {
31
- if (!isNodeTypeClass(node)) {
32
- return;
33
- }
34
- const descriptionProperty = findClassProperty(node, 'description');
35
- if (descriptionProperty?.value?.type !== TSESTree.AST_NODE_TYPES.ObjectExpression) {
36
- return;
37
- }
38
- const nameProperty = findObjectProperty(descriptionProperty.value, 'name');
39
- if (!nameProperty) {
40
- return;
41
- }
42
- const name = getStringLiteralValue(nameProperty.value);
43
- if (!name) {
44
- return;
45
- }
46
- const expectedBaseName = toExpectedBaseName(name);
47
- // Strip the `.node.ts` extension and any trailing `V<digits>` version
48
- // suffix so versioned files (e.g. `GithubV2.node.ts`) are accepted.
49
- const actualBaseName = path.basename(context.filename, '.node.ts').replace(/V\d+$/, '');
50
- if (actualBaseName !== expectedBaseName) {
51
- context.report({
52
- node: nameProperty.value,
53
- messageId: 'renameFile',
54
- data: { expected: `${expectedBaseName}.node.ts` },
55
- });
56
- }
57
- },
58
- };
59
- },
60
- });
61
- //# sourceMappingURL=node-filename-against-convention.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"node-filename-against-convention.js","sourceRoot":"","sources":["../../src/rules/node-filename-against-convention.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACpD,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAElC,OAAO,EACN,eAAe,EACf,iBAAiB,EACjB,kBAAkB,EAClB,qBAAqB,EACrB,UAAU,EACV,UAAU,GACV,MAAM,mBAAmB,CAAC;AAE3B;;;;GAIG;AACH,SAAS,kBAAkB,CAAC,IAAY;IACvC,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACrD,CAAC;AAED,MAAM,CAAC,MAAM,iCAAiC,GAAG,UAAU,CAAC;IAC3D,IAAI,EAAE,kCAAkC;IACxC,IAAI,EAAE;QACL,IAAI,EAAE,SAAS;QACf,IAAI,EAAE;YACL,WAAW,EAAE,sDAAsD;SACnE;QACD,QAAQ,EAAE;YACT,UAAU,EAAE,6EAA6E;SACzF;QACD,MAAM,EAAE,EAAE;KACV;IACD,cAAc,EAAE,EAAE;IAClB,MAAM,CAAC,OAAO;QACb,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,QAAQ,EAAE,UAAU,CAAC,EAAE,CAAC;YAC/C,OAAO,EAAE,CAAC;QACX,CAAC;QAED,OAAO;YACN,gBAAgB,CAAC,IAAI;gBACpB,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC;oBAC5B,OAAO;gBACR,CAAC;gBAED,MAAM,mBAAmB,GAAG,iBAAiB,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;gBACnE,IAAI,mBAAmB,EAAE,KAAK,EAAE,IAAI,KAAK,QAAQ,CAAC,cAAc,CAAC,gBAAgB,EAAE,CAAC;oBACnF,OAAO;gBACR,CAAC;gBAED,MAAM,YAAY,GAAG,kBAAkB,CAAC,mBAAmB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;gBAC3E,IAAI,CAAC,YAAY,EAAE,CAAC;oBACnB,OAAO;gBACR,CAAC;gBAED,MAAM,IAAI,GAAG,qBAAqB,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;gBACvD,IAAI,CAAC,IAAI,EAAE,CAAC;oBACX,OAAO;gBACR,CAAC;gBAED,MAAM,gBAAgB,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC;gBAClD,sEAAsE;gBACtE,oEAAoE;gBACpE,MAAM,cAAc,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;gBAExF,IAAI,cAAc,KAAK,gBAAgB,EAAE,CAAC;oBACzC,OAAO,CAAC,MAAM,CAAC;wBACd,IAAI,EAAE,YAAY,CAAC,KAAK;wBACxB,SAAS,EAAE,YAAY;wBACvB,IAAI,EAAE,EAAE,QAAQ,EAAE,GAAG,gBAAgB,UAAU,EAAE;qBACjD,CAAC,CAAC;gBACJ,CAAC;YACF,CAAC;SACD,CAAC;IACH,CAAC;CACD,CAAC,CAAC"}
@@ -1,12 +0,0 @@
1
- /**
2
- * Flags `new NodeOperationError(...)` or `new NodeApiError(...)` inside item
3
- * loops in `execute()` methods that omit `{ itemIndex }` from the options
4
- * argument. Without it, n8n cannot associate the error with the specific item
5
- * that caused it, breaking per-item error reporting and `continueOnFail`.
6
- *
7
- * "Item loop" means a `for` or `for...of` that iterates over the result of
8
- * `this.getInputData()` (or a variable initialised from it). Errors outside
9
- * such loops — e.g. in webhook handlers or trigger setup — are not flagged.
10
- */
11
- export declare const NodeOperationErrorItemIndexRule: import("@typescript-eslint/utils/ts-eslint").RuleModule<"missingItemIndex", [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
12
- //# sourceMappingURL=node-operation-error-itemindex.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"node-operation-error-itemindex.d.ts","sourceRoot":"","sources":["../../src/rules/node-operation-error-itemindex.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAiFH,eAAO,MAAM,+BAA+B,qJAoI1C,CAAC"}