diff --git a/.eslintignore b/.eslintignore deleted file mode 100644 index 610f89d843..0000000000 --- a/.eslintignore +++ /dev/null @@ -1,3 +0,0 @@ -packages/editor-ui -packages/design-system -packages/cli/scripts/build.mjs diff --git a/.eslintrc.js b/.eslintrc.js deleted file mode 100644 index 347f9bbdf6..0000000000 --- a/.eslintrc.js +++ /dev/null @@ -1,479 +0,0 @@ -module.exports = { - root: true, - - env: { - browser: true, - es6: true, - node: true, - }, - - parser: '@typescript-eslint/parser', - parserOptions: { - project: ['./packages/*/tsconfig.json'], - sourceType: 'module', - }, - ignorePatterns: [ - 'n8n', - '.eslintrc.js', - '**/*.js', - '**/node_modules/**', - '**/dist/**', - '**/test/**', - '**/templates/**', - '**/ormconfig.ts', - '**/migrations/**', - '*.mjs', - ], - - overrides: [ - { - files: './packages/*(cli|core|workflow|node-dev)/**/*.ts', - plugins: [ - /** - * Plugin with lint rules for import/export syntax - * https://github.com/import-js/eslint-plugin-import - */ - 'eslint-plugin-import', - - /** - * @typescript-eslint/eslint-plugin is required by eslint-config-airbnb-typescript - * See step 2: https://github.com/iamturns/eslint-config-airbnb-typescript#2-install-eslint-plugins - */ - '@typescript-eslint', - - /** - * Plugin to report formatting violations as lint violations - * https://github.com/prettier/eslint-plugin-prettier - */ - 'eslint-plugin-prettier', - ], - extends: [ - /** - * Config for typescript-eslint recommended ruleset (without type checking) - * - * https://github.com/typescript-eslint/typescript-eslint/blob/1c1b572c3000d72cfe665b7afbada0ec415e7855/packages/eslint-plugin/src/configs/recommended.ts - */ - 'plugin:@typescript-eslint/recommended', - - /** - * Config for typescript-eslint recommended ruleset (with type checking) - * - * https://github.com/typescript-eslint/typescript-eslint/blob/1c1b572c3000d72cfe665b7afbada0ec415e7855/packages/eslint-plugin/src/configs/recommended-requiring-type-checking.ts - */ - 'plugin:@typescript-eslint/recommended-requiring-type-checking', - - /** - * Config for Airbnb style guide for TS, /base to remove React rules - * - * https://github.com/iamturns/eslint-config-airbnb-typescript - * https://github.com/airbnb/javascript/tree/master/packages/eslint-config-airbnb-base/rules - */ - 'eslint-config-airbnb-typescript/base', - - /** - * Config to disable ESLint rules covered by Prettier - * - * https://github.com/prettier/eslint-config-prettier - */ - 'eslint-config-prettier', - ], - rules: { - // ****************************************************************** - // required by prettier plugin - // ****************************************************************** - - // The following rule enables eslint-plugin-prettier - // See: https://github.com/prettier/eslint-plugin-prettier#recommended-configuration - - 'prettier/prettier': ['error', { endOfLine: 'auto' }], - - // The following two rules must be disabled when using eslint-plugin-prettier: - // See: https://github.com/prettier/eslint-plugin-prettier#arrow-body-style-and-prefer-arrow-callback-issue - - /** - * https://eslint.org/docs/rules/arrow-body-style - */ - 'arrow-body-style': 'off', - - /** - * https://eslint.org/docs/rules/prefer-arrow-callback - */ - 'prefer-arrow-callback': 'off', - - // ****************************************************************** - // additions to base ruleset - // ****************************************************************** - - // ---------------------------------- - // ESLint - // ---------------------------------- - - /** - * https://eslint.org/docs/rules/id-denylist - */ - 'id-denylist': [ - 'error', - 'err', - 'cb', - 'callback', - 'any', - 'Number', - 'number', - 'String', - 'string', - 'Boolean', - 'boolean', - 'Undefined', - 'undefined', - ], - - 'no-void': ['error', { allowAsStatement: true }], - - // ---------------------------------- - // @typescript-eslint - // ---------------------------------- - - /** - * https://github.com/typescript-eslint/typescript-eslint/blob/master/packages/eslint-plugin/docs/rules/array-type.md - */ - '@typescript-eslint/array-type': ['error', { default: 'array-simple' }], - - /** - * https://github.com/typescript-eslint/typescript-eslint/blob/master/packages/eslint-plugin/docs/rules/ban-ts-comment.md - */ - '@typescript-eslint/ban-ts-comment': 'off', - - /** - * https://github.com/typescript-eslint/typescript-eslint/blob/master/packages/eslint-plugin/docs/rules/ban-types.md - */ - '@typescript-eslint/ban-types': [ - 'error', - { - types: { - Object: { - message: 'Use object instead', - fixWith: 'object', - }, - String: { - message: 'Use string instead', - fixWith: 'string', - }, - Boolean: { - message: 'Use boolean instead', - fixWith: 'boolean', - }, - Number: { - message: 'Use number instead', - fixWith: 'number', - }, - Symbol: { - message: 'Use symbol instead', - fixWith: 'symbol', - }, - Function: { - message: [ - 'The `Function` type accepts any function-like value.', - 'It provides no type safety when calling the function, which can be a common source of bugs.', - 'It also accepts things like class declarations, which will throw at runtime as they will not be called with `new`.', - 'If you are expecting the function to accept certain arguments, you should explicitly define the function shape.', - ].join('\n'), - }, - }, - extendDefaults: false, - }, - ], - - /** - * https://github.com/typescript-eslint/typescript-eslint/blob/master/packages/eslint-plugin/docs/rules/consistent-type-assertions.md - */ - '@typescript-eslint/consistent-type-assertions': 'error', - - /** - * https://github.com/typescript-eslint/typescript-eslint/blob/master/packages/eslint-plugin/docs/rules/explicit-member-accessibility.md - */ - '@typescript-eslint/explicit-member-accessibility': [ - 'error', - { accessibility: 'no-public' }, - ], - - /** - * https://github.com/typescript-eslint/typescript-eslint/blob/master/packages/eslint-plugin/docs/rules/member-delimiter-style.md - */ - '@typescript-eslint/member-delimiter-style': [ - 'error', - { - multiline: { - delimiter: 'semi', - requireLast: true, - }, - singleline: { - delimiter: 'semi', - requireLast: false, - }, - }, - ], - - /** - * https://github.com/typescript-eslint/typescript-eslint/blob/master/packages/eslint-plugin/docs/rules/naming-convention.md - */ - '@typescript-eslint/naming-convention': [ - 'error', - { - selector: 'default', - format: ['camelCase'], - }, - { - selector: 'variable', - format: ['camelCase', 'snake_case', 'UPPER_CASE'], - leadingUnderscore: 'allowSingleOrDouble', - trailingUnderscore: 'allowSingleOrDouble', - }, - { - selector: 'property', - format: ['camelCase', 'snake_case'], - leadingUnderscore: 'allowSingleOrDouble', - trailingUnderscore: 'allowSingleOrDouble', - }, - { - selector: 'typeLike', - format: ['PascalCase'], - }, - { - selector: ['method', 'function'], - format: ['camelCase'], - leadingUnderscore: 'allowSingleOrDouble', - }, - ], - - /** - * https://github.com/typescript-eslint/typescript-eslint/blob/master/packages/eslint-plugin/docs/rules/no-duplicate-imports.md - */ - '@typescript-eslint/no-duplicate-imports': 'error', - - /** - * https://github.com/typescript-eslint/typescript-eslint/blob/master/packages/eslint-plugin/docs/rules/no-invalid-void-type.md - */ - '@typescript-eslint/no-invalid-void-type': 'error', - - /** - * https://github.com/typescript-eslint/typescript-eslint/blob/master/packages/eslint-plugin/docs/rules/no-misused-promises.md - */ - '@typescript-eslint/no-misused-promises': ['error', { checksVoidReturn: false }], - - /** - * https://github.com/typescript-eslint/typescript-eslint/blob/v4.30.0/packages/eslint-plugin/docs/rules/no-floating-promises.md - */ - '@typescript-eslint/no-floating-promises': ['error', { ignoreVoid: true }], - - /** - * https://github.com/typescript-eslint/typescript-eslint/blob/v4.33.0/packages/eslint-plugin/docs/rules/no-namespace.md - */ - '@typescript-eslint/no-namespace': 'off', - - /** - * https://eslint.org/docs/1.0.0/rules/no-throw-literal - */ - '@typescript-eslint/no-throw-literal': 'error', - - /** - * https://github.com/typescript-eslint/typescript-eslint/blob/master/packages/eslint-plugin/docs/rules/no-unnecessary-boolean-literal-compare.md - */ - '@typescript-eslint/no-unnecessary-boolean-literal-compare': 'error', - - /** - * https://github.com/typescript-eslint/typescript-eslint/blob/master/packages/eslint-plugin/docs/rules/no-unnecessary-qualifier.md - */ - '@typescript-eslint/no-unnecessary-qualifier': 'error', - - /** - * https://github.com/typescript-eslint/typescript-eslint/blob/master/packages/eslint-plugin/docs/rules/no-unused-expressions.md - */ - '@typescript-eslint/no-unused-expressions': 'error', - - /** - * https://github.com/typescript-eslint/typescript-eslint/blob/master/packages/eslint-plugin/docs/rules/no-unused-vars.md - */ - '@typescript-eslint/no-unused-vars': ['error', { argsIgnorePattern: '_' }], - - /** - * https://github.com/typescript-eslint/typescript-eslint/blob/master/packages/eslint-plugin/docs/rules/prefer-nullish-coalescing.md - */ - '@typescript-eslint/prefer-nullish-coalescing': 'error', - - /** - * https://github.com/typescript-eslint/typescript-eslint/blob/master/packages/eslint-plugin/docs/rules/prefer-optional-chain.md - */ - '@typescript-eslint/prefer-optional-chain': 'error', - - /** - * https://github.com/typescript-eslint/typescript-eslint/blob/master/packages/eslint-plugin/docs/rules/promise-function-async.md - */ - '@typescript-eslint/promise-function-async': 'error', - - // ---------------------------------- - // eslint-plugin-import - // ---------------------------------- - - /** - * https://github.com/import-js/eslint-plugin-import/blob/master/docs/rules/no-default-export.md - */ - 'import/no-default-export': 'error', - - /** - * https://github.com/import-js/eslint-plugin-import/blob/master/docs/rules/order.md - */ - 'import/order': 'error', - - // ****************************************************************** - // overrides to base ruleset - // ****************************************************************** - - // ---------------------------------- - // ESLint - // ---------------------------------- - - /** - * https://eslint.org/docs/rules/class-methods-use-this - */ - 'class-methods-use-this': 'off', - - /** - * https://eslint.org/docs/rules/eqeqeq - */ - eqeqeq: 'error', - - /** - * https://eslint.org/docs/rules/no-plusplus - */ - 'no-plusplus': 'off', - - /** - * https://eslint.org/docs/rules/object-shorthand - */ - 'object-shorthand': 'error', - - /** - * https://eslint.org/docs/rules/prefer-const - */ - 'prefer-const': 'error', - - /** - * https://eslint.org/docs/rules/prefer-spread - */ - 'prefer-spread': 'error', - - // ---------------------------------- - // import - // ---------------------------------- - - /** - * https://github.com/import-js/eslint-plugin-import/blob/main/docs/rules/prefer-default-export.md - */ - 'import/prefer-default-export': 'off', - }, - }, - { - files: ['./packages/nodes-base/credentials/*.credentials.ts'], - plugins: ['eslint-plugin-n8n-nodes-base'], - rules: { - 'n8n-nodes-base/cred-class-field-authenticate-type-assertion': 'error', - 'n8n-nodes-base/cred-class-field-display-name-missing-oauth2': 'error', - 'n8n-nodes-base/cred-class-field-name-missing-oauth2': 'error', - 'n8n-nodes-base/cred-class-field-name-unsuffixed': 'error', - 'n8n-nodes-base/cred-class-field-name-uppercase-first-char': 'error', - 'n8n-nodes-base/cred-class-name-missing-oauth2-suffix': 'error', - 'n8n-nodes-base/cred-class-name-unsuffixed': 'error', - 'n8n-nodes-base/cred-filename-against-convention': 'error', - }, - }, - { - files: ['./packages/nodes-base/nodes/**/*.ts'], - plugins: ['eslint-plugin-n8n-nodes-base'], - rules: { - 'n8n-nodes-base/node-class-description-credentials-name-unsuffixed': 'error', - 'n8n-nodes-base/node-class-description-display-name-unsuffixed-trigger-node': 'error', - 'n8n-nodes-base/node-class-description-empty-string': 'error', - 'n8n-nodes-base/node-class-description-icon-not-svg': 'error', - 'n8n-nodes-base/node-class-description-inputs-wrong-regular-node': 'error', - 'n8n-nodes-base/node-class-description-inputs-wrong-trigger-node': 'error', - 'n8n-nodes-base/node-class-description-missing-subtitle': 'error', - 'n8n-nodes-base/node-class-description-name-unsuffixed-trigger-node': 'error', - 'n8n-nodes-base/node-class-description-outputs-wrong': 'error', - 'n8n-nodes-base/node-dirname-against-convention': 'error', - 'n8n-nodes-base/node-execute-block-double-assertion-for-items': 'error', - 'n8n-nodes-base/node-execute-block-wrong-error-thrown': 'error', - 'n8n-nodes-base/node-filename-against-convention': 'error', - 'n8n-nodes-base/node-param-array-type-assertion': 'error', - 'n8n-nodes-base/node-param-collection-type-unsorted-items': 'error', - 'n8n-nodes-base/node-param-color-type-unused': 'error', - 'n8n-nodes-base/node-param-default-missing': 'error', - 'n8n-nodes-base/node-param-default-wrong-for-boolean': 'error', - 'n8n-nodes-base/node-param-default-wrong-for-collection': 'error', - 'n8n-nodes-base/node-param-default-wrong-for-fixed-collection': 'error', - 'n8n-nodes-base/node-param-default-wrong-for-fixed-collection': 'error', - 'n8n-nodes-base/node-param-default-wrong-for-multi-options': 'error', - 'n8n-nodes-base/node-param-default-wrong-for-number': 'error', - 'n8n-nodes-base/node-param-default-wrong-for-simplify': 'error', - 'n8n-nodes-base/node-param-default-wrong-for-string': 'error', - 'n8n-nodes-base/node-param-description-boolean-without-whether': 'error', - 'n8n-nodes-base/node-param-description-comma-separated-hyphen': 'error', - 'n8n-nodes-base/node-param-description-empty-string': 'error', - 'n8n-nodes-base/node-param-description-excess-final-period': 'error', - 'n8n-nodes-base/node-param-description-excess-inner-whitespace': 'error', - 'n8n-nodes-base/node-param-description-identical-to-display-name': 'error', - 'n8n-nodes-base/node-param-description-line-break-html-tag': 'error', - 'n8n-nodes-base/node-param-description-lowercase-first-char': 'error', - 'n8n-nodes-base/node-param-description-miscased-id': 'error', - 'n8n-nodes-base/node-param-description-miscased-json': 'error', - 'n8n-nodes-base/node-param-description-miscased-url': 'error', - 'n8n-nodes-base/node-param-description-missing-final-period': 'error', - 'n8n-nodes-base/node-param-description-missing-for-ignore-ssl-issues': 'error', - 'n8n-nodes-base/node-param-description-missing-for-return-all': 'error', - 'n8n-nodes-base/node-param-description-missing-for-simplify': 'error', - 'n8n-nodes-base/node-param-description-missing-from-dynamic-multi-options': 'error', - 'n8n-nodes-base/node-param-description-missing-from-dynamic-options': 'error', - 'n8n-nodes-base/node-param-description-missing-from-limit': 'error', - 'n8n-nodes-base/node-param-description-unencoded-angle-brackets': 'error', - 'n8n-nodes-base/node-param-description-unneeded-backticks': 'error', - 'n8n-nodes-base/node-param-description-untrimmed': 'error', - 'n8n-nodes-base/node-param-description-url-missing-protocol': 'error', - 'n8n-nodes-base/node-param-description-weak': 'error', - 'n8n-nodes-base/node-param-description-wrong-for-dynamic-multi-options': 'error', - 'n8n-nodes-base/node-param-description-wrong-for-dynamic-options': 'error', - 'n8n-nodes-base/node-param-description-wrong-for-ignore-ssl-issues': 'error', - 'n8n-nodes-base/node-param-description-wrong-for-limit': 'error', - 'n8n-nodes-base/node-param-description-wrong-for-return-all': 'error', - 'n8n-nodes-base/node-param-description-wrong-for-simplify': 'error', - 'n8n-nodes-base/node-param-description-wrong-for-upsert': 'error', - 'n8n-nodes-base/node-param-display-name-excess-inner-whitespace': 'error', - 'n8n-nodes-base/node-param-display-name-not-first-position': 'error', - 'n8n-nodes-base/node-param-display-name-miscased': 'error', - 'n8n-nodes-base/node-param-display-name-miscased-id': 'error', - 'n8n-nodes-base/node-param-display-name-untrimmed': 'error', - 'n8n-nodes-base/node-param-display-name-wrong-for-dynamic-multi-options': 'error', - 'n8n-nodes-base/node-param-display-name-wrong-for-dynamic-options': 'error', - 'n8n-nodes-base/node-param-display-name-wrong-for-simplify': 'error', - 'n8n-nodes-base/node-param-display-name-wrong-for-update-fields': 'error', - 'n8n-nodes-base/node-param-min-value-wrong-for-limit': 'error', - 'n8n-nodes-base/node-param-multi-options-type-unsorted-items': 'error', - 'n8n-nodes-base/node-param-operation-without-no-data-expression': 'error', - 'n8n-nodes-base/node-param-operation-option-action-wrong-for-get-many': 'error', - 'n8n-nodes-base/node-param-operation-option-without-action': 'error', - 'n8n-nodes-base/node-param-option-description-identical-to-name': 'error', - 'n8n-nodes-base/node-param-option-name-containing-star': 'error', - 'n8n-nodes-base/node-param-option-name-duplicate': 'error', - 'n8n-nodes-base/node-param-option-name-wrong-for-get-many': 'error', - 'n8n-nodes-base/node-param-option-name-wrong-for-upsert': 'error', - 'n8n-nodes-base/node-param-option-value-duplicate': 'error', - 'n8n-nodes-base/node-param-options-type-unsorted-items': 'error', - 'n8n-nodes-base/node-param-placeholder-miscased-id': 'error', - 'n8n-nodes-base/node-param-placeholder-missing-email': 'error', - 'n8n-nodes-base/node-param-required-false': 'error', - 'n8n-nodes-base/node-param-resource-with-plural-option': 'error', - 'n8n-nodes-base/node-param-resource-without-no-data-expression': 'error', - 'n8n-nodes-base/node-param-type-options-missing-from-limit': 'error', - 'n8n-nodes-base/node-param-type-options-missing-from-password': 'error', - }, - }, - ], -}; diff --git a/package-lock.json b/package-lock.json index e59ada52b8..f861a8a24e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,7 +8,8 @@ "name": "n8n", "version": "0.193.5", "workspaces": [ - "packages/*" + "packages/*", + "packages/@n8n_io/*" ], "devDependencies": { "rimraf": "^3.0.2", @@ -4305,6 +4306,10 @@ "integrity": "sha512-Iozmtbqv0noj0uDDqoL0zNq0VBEfK2YFoMAZoxJe4cwphvLR+JskfF30QhXHOR4m3KrE6NLRYw+U9MRXvifyig==", "dev": true }, + "node_modules/@n8n_io/eslint-config": { + "resolved": "packages/@n8n_io/eslint-config", + "link": true + }, "node_modules/@n8n_io/riot-tmpl": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@n8n_io/riot-tmpl/-/riot-tmpl-1.0.1.tgz", @@ -7281,6 +7286,22 @@ "@types/node": "*" } }, + "node_modules/@types/eslint": { + "version": "8.4.6", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.6.tgz", + "integrity": "sha512-/fqTbjxyFUaYNO7VcW5g+4npmqVACz1bB7RTHYuLj+PRjw9hrCwrUXVQFpChUS0JsyEFvMZ7U/PfmvWgxJhI9g==", + "dev": true, + "dependencies": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "node_modules/@types/estree": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.0.tgz", + "integrity": "sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==", + "dev": true + }, "node_modules/@types/eventsource": { "version": "1.1.9", "resolved": "https://registry.npmjs.org/@types/eventsource/-/eventsource-1.1.9.tgz", @@ -12404,75 +12425,28 @@ "integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==", "dev": true }, - "node_modules/@vue/eslint-config-prettier": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@vue/eslint-config-prettier/-/eslint-config-prettier-6.0.0.tgz", - "integrity": "sha512-wFQmv45c3ige5EA+ngijq40YpVcIkAy0Lihupnsnd1Dao5CBbPyfCzqtejFLZX1EwH/kCJdpz3t6s+5wd3+KxQ==", - "dev": true, - "dependencies": { - "eslint-config-prettier": "^6.0.0" - }, - "peerDependencies": { - "eslint": ">= 5.0.0", - "eslint-plugin-prettier": "^3.1.0", - "prettier": ">= 1.13.0" - } - }, - "node_modules/@vue/eslint-config-prettier/node_modules/eslint-config-prettier": { - "version": "6.15.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-6.15.0.tgz", - "integrity": "sha512-a1+kOYLR8wMGustcgAjdydMsQ2A/2ipRPwRKUmfYaSxc9ZPcrku080Ctl6zrZzZNs/U82MjSv+qKREkoq3bJaw==", - "dev": true, - "dependencies": { - "get-stdin": "^6.0.0" - }, - "bin": { - "eslint-config-prettier-check": "bin/cli.js" - }, - "peerDependencies": { - "eslint": ">=3.14.1" - } - }, - "node_modules/@vue/eslint-config-standard": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/@vue/eslint-config-standard/-/eslint-config-standard-6.1.0.tgz", - "integrity": "sha512-9+hrEyflDzsGdlBDl9jPV5DIYUx1TOU5OSQqRDKCrNumrxRj5HRWKuk+ocXWnha6uoNRtLC24mY7d/MwqvBCNw==", - "dev": true, - "dependencies": { - "eslint-config-standard": "^16.0.3", - "eslint-import-resolver-node": "^0.3.4", - "eslint-import-resolver-webpack": "^0.13.1" - }, - "peerDependencies": { - "@vue/cli-service": "^3.0.0 || ^4.0.0 || ^5.0.0-0", - "eslint": "^7.12.1", - "eslint-plugin-import": "^2.22.1", - "eslint-plugin-node": "^11.1.0", - "eslint-plugin-promise": "^4.2.1 || ^5.0.0", - "eslint-plugin-vue": "^7.0.0" - }, - "peerDependenciesMeta": { - "@vue/cli-service": { - "optional": true - } - } - }, "node_modules/@vue/eslint-config-typescript": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@vue/eslint-config-typescript/-/eslint-config-typescript-7.0.0.tgz", - "integrity": "sha512-UxUlvpSrFOoF8aQ+zX1leYiEBEm7CZmXYn/ZEM1zwSadUzpamx56RB4+Htdjisv1mX2tOjBegNUqH3kz2OL+Aw==", + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/@vue/eslint-config-typescript/-/eslint-config-typescript-11.0.1.tgz", + "integrity": "sha512-0U+nL0nA7ahnGPk3rTN49x76miUwuQtQPQNWOFvAcjg6nFJkIkA8qbGNtXwsuHtwBwRtWpHhShL3zK07v+632w==", "dev": true, "dependencies": { - "vue-eslint-parser": "^7.0.0" + "@typescript-eslint/eslint-plugin": "^5.0.0", + "@typescript-eslint/parser": "^5.0.0", + "vue-eslint-parser": "^9.0.0" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": "^14.17.0 || >=16.0.0" }, "peerDependencies": { - "@typescript-eslint/eslint-plugin": "^4.4.0", - "@typescript-eslint/parser": "^4.4.0", - "eslint": "^5.0.0 || ^6.0.0 || ^7.0.0", - "eslint-plugin-vue": "^5.2.3 || ^6.0.0 || ^7.0.0" + "eslint": "^6.2.0 || ^7.0.0 || ^8.0.0", + "eslint-plugin-vue": "^9.0.0", + "typescript": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, "node_modules/@vue/preload-webpack-plugin": { @@ -13304,12 +13278,6 @@ "integrity": "sha512-H3LU5RLiSsGXPhN+Nipar0iR0IofH+8r89G2y1tBKxQ/agagKyAjhkAFDRBfodP2caPrNKHpAWNIM/c9yeL7uA==", "dev": true }, - "node_modules/array-find": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-find/-/array-find-1.0.0.tgz", - "integrity": "sha512-kO/vVCacW9mnpn3WPWbTVlEnOabK2L7LWi2HViURtCM46y1zb6I8UMjx4LgbiqadTgHnLInUronwn3ampNTJtQ==", - "dev": true - }, "node_modules/array-find-index": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", @@ -21095,20 +21063,6 @@ "once": "^1.4.0" } }, - "node_modules/enhanced-resolve": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-0.9.1.tgz", - "integrity": "sha512-kxpoMgrdtkXZ5h0SeraBS1iRntpTpQ3R8ussdb38+UAFnMGX5DDyJXePm+OCHOcoXvHDw7mc2erbJBpDnl7TPw==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.2", - "memory-fs": "^0.2.0", - "tapable": "^0.1.8" - }, - "engines": { - "node": ">=0.6" - } - }, "node_modules/entities": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", @@ -21866,199 +21820,40 @@ "url": "https://opencollective.com/eslint" } }, - "node_modules/eslint-config-airbnb": { - "version": "18.2.1", - "resolved": "https://registry.npmjs.org/eslint-config-airbnb/-/eslint-config-airbnb-18.2.1.tgz", - "integrity": "sha512-glZNDEZ36VdlZWoxn/bUR1r/sdFKPd1mHPbqUtkctgNG4yT2DLLtJ3D+yCV+jzZCc2V1nBVkmdknOJBZ5Hc0fg==", - "dev": true, - "dependencies": { - "eslint-config-airbnb-base": "^14.2.1", - "object.assign": "^4.1.2", - "object.entries": "^1.1.2" - }, - "engines": { - "node": ">= 6" - }, - "peerDependencies": { - "eslint": "^5.16.0 || ^6.8.0 || ^7.2.0", - "eslint-plugin-import": "^2.22.1", - "eslint-plugin-jsx-a11y": "^6.4.1", - "eslint-plugin-react": "^7.21.5", - "eslint-plugin-react-hooks": "^4 || ^3 || ^2.3.0 || ^1.7.0" - } - }, "node_modules/eslint-config-airbnb-base": { - "version": "14.2.1", - "resolved": "https://registry.npmjs.org/eslint-config-airbnb-base/-/eslint-config-airbnb-base-14.2.1.tgz", - "integrity": "sha512-GOrQyDtVEc1Xy20U7vsB2yAoB4nBlfH5HZJeatRXHleO+OS5Ot+MWij4Dpltw4/DyIkqUfqz1epfhVR5XWWQPA==", + "version": "15.0.0", + "resolved": "https://registry.npmjs.org/eslint-config-airbnb-base/-/eslint-config-airbnb-base-15.0.0.tgz", + "integrity": "sha512-xaX3z4ZZIcFLvh2oUNvcX5oEofXda7giYmuplVxoOg5A7EXJMrUyqRgR+mhDhPK8LZ4PttFOBvCYDbX3sUoUig==", "dev": true, "dependencies": { "confusing-browser-globals": "^1.0.10", "object.assign": "^4.1.2", - "object.entries": "^1.1.2" + "object.entries": "^1.1.5", + "semver": "^6.3.0" }, "engines": { - "node": ">= 6" + "node": "^10.12.0 || >=12.0.0" }, "peerDependencies": { - "eslint": "^5.16.0 || ^6.8.0 || ^7.2.0", - "eslint-plugin-import": "^2.22.1" + "eslint": "^7.32.0 || ^8.2.0", + "eslint-plugin-import": "^2.25.2" } }, "node_modules/eslint-config-airbnb-typescript": { - "version": "12.3.1", - "resolved": "https://registry.npmjs.org/eslint-config-airbnb-typescript/-/eslint-config-airbnb-typescript-12.3.1.tgz", - "integrity": "sha512-ql/Pe6/hppYuRp4m3iPaHJqkBB7dgeEmGPQ6X0UNmrQOfTF+dXw29/ZjU2kQ6RDoLxaxOA+Xqv07Vbef6oVTWw==", + "version": "17.0.0", + "resolved": "https://registry.npmjs.org/eslint-config-airbnb-typescript/-/eslint-config-airbnb-typescript-17.0.0.tgz", + "integrity": "sha512-elNiuzD0kPAPTXjFWg+lE24nMdHMtuxgYoD30OyMD6yrW1AhFZPAg27VX7d3tzOErw+dgJTNWfRSDqEcXb4V0g==", "dev": true, "dependencies": { - "@typescript-eslint/parser": "^4.4.1", - "eslint-config-airbnb": "^18.2.0", - "eslint-config-airbnb-base": "^14.2.0" - } - }, - "node_modules/eslint-config-airbnb-typescript/node_modules/@typescript-eslint/parser": { - "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.33.0.tgz", - "integrity": "sha512-ZohdsbXadjGBSK0/r+d87X0SBmKzOq4/S5nzK6SBgJspFo9/CUDJ7hjayuze+JK7CZQLDMroqytp7pOcFKTxZA==", - "dev": true, - "dependencies": { - "@typescript-eslint/scope-manager": "4.33.0", - "@typescript-eslint/types": "4.33.0", - "@typescript-eslint/typescript-estree": "4.33.0", - "debug": "^4.3.1" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "eslint-config-airbnb-base": "^15.0.0" }, "peerDependencies": { - "eslint": "^5.0.0 || ^6.0.0 || ^7.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "@typescript-eslint/eslint-plugin": "^5.13.0", + "@typescript-eslint/parser": "^5.0.0", + "eslint": "^7.32.0 || ^8.2.0", + "eslint-plugin-import": "^2.25.3" } }, - "node_modules/eslint-config-airbnb-typescript/node_modules/@typescript-eslint/scope-manager": { - "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.33.0.tgz", - "integrity": "sha512-5IfJHpgTsTZuONKbODctL4kKuQje/bzBRkwHE8UOZ4f89Zeddg+EGZs8PD8NcN4LdM3ygHWYB3ukPAYjvl/qbQ==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "4.33.0", - "@typescript-eslint/visitor-keys": "4.33.0" - }, - "engines": { - "node": "^8.10.0 || ^10.13.0 || >=11.10.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/eslint-config-airbnb-typescript/node_modules/@typescript-eslint/types": { - "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.33.0.tgz", - "integrity": "sha512-zKp7CjQzLQImXEpLt2BUw1tvOMPfNoTAfb8l51evhYbOEEzdWyQNmHWWGPR6hwKJDAi+1VXSBmnhL9kyVTTOuQ==", - "dev": true, - "engines": { - "node": "^8.10.0 || ^10.13.0 || >=11.10.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/eslint-config-airbnb-typescript/node_modules/@typescript-eslint/typescript-estree": { - "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.33.0.tgz", - "integrity": "sha512-rkWRY1MPFzjwnEVHsxGemDzqqddw2QbTJlICPD9p9I9LfsO8fdmfQPOX3uKfUaGRDFJbfrtm/sXhVXN4E+bzCA==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "4.33.0", - "@typescript-eslint/visitor-keys": "4.33.0", - "debug": "^4.3.1", - "globby": "^11.0.3", - "is-glob": "^4.0.1", - "semver": "^7.3.5", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/eslint-config-airbnb-typescript/node_modules/@typescript-eslint/visitor-keys": { - "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.33.0.tgz", - "integrity": "sha512-uqi/2aSz9g2ftcHWf8uLPJA70rUv6yuMW5Bohw+bwcuzaxQIHaKFZCKGoGXIrc9vkTJ3+0txM73K0Hq3d5wgIg==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "4.33.0", - "eslint-visitor-keys": "^2.0.0" - }, - "engines": { - "node": "^8.10.0 || ^10.13.0 || >=11.10.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/eslint-config-airbnb-typescript/node_modules/eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/eslint-config-airbnb-typescript/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/eslint-config-airbnb-typescript/node_modules/semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/eslint-config-airbnb-typescript/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, "node_modules/eslint-config-prettier": { "version": "8.5.0", "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz", @@ -22076,94 +21871,6 @@ "resolved": "https://registry.npmjs.org/eslint-config-riot/-/eslint-config-riot-1.0.0.tgz", "integrity": "sha512-NB/L/1Y30qyJcG5xZxCJKW/+bqyj+llbcCwo9DEz8bESIP0SLTOQ8T1DWCCFc+wJ61AMEstj4511PSScqMMfCw==" }, - "node_modules/eslint-config-standard": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-16.0.3.tgz", - "integrity": "sha512-x4fmJL5hGqNJKGHSjnLdgA6U6h1YW/G2dW9fA+cyVur4SK6lyue8+UgNKWlZtUDTXvgKDD/Oa3GQjmB5kjtVvg==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "peerDependencies": { - "eslint": "^7.12.1", - "eslint-plugin-import": "^2.22.1", - "eslint-plugin-node": "^11.1.0", - "eslint-plugin-promise": "^4.2.1 || ^5.0.0" - } - }, - "node_modules/eslint-docgen": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/eslint-docgen/-/eslint-docgen-0.7.1.tgz", - "integrity": "sha512-+UJNwJleuNJNb42y2EXhN6qDhTHqLUTiOn9SCKovxhHsKCbL2KOdvYjsjVKX6mCIFnRWNkRjrynbvCegS+2Skg==", - "dev": true, - "dependencies": { - "chalk": "^4.1.2", - "ejs": "^3.1.8", - "eslint": ">=8.0.0", - "import-fresh": "^3.3.0", - "jsonschema": "^1.4.1", - "merge-options": "^3.0.4", - "mkdirp": "^1.0.4", - "pkg-dir": "^5.0.0", - "pluralize": "^8.0.0", - "simple-mock": "^0.8.0", - "upath": "^2.0.1" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/eslint-docgen/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/eslint-docgen/node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true, - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/eslint-docgen/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/eslint-import-resolver-node": { "version": "0.3.6", "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz", @@ -22183,59 +21890,6 @@ "ms": "^2.1.1" } }, - "node_modules/eslint-import-resolver-webpack": { - "version": "0.13.2", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-webpack/-/eslint-import-resolver-webpack-0.13.2.tgz", - "integrity": "sha512-XodIPyg1OgE2h5BDErz3WJoK7lawxKTJNhgPNafRST6csC/MZC+L5P6kKqsZGRInpbgc02s/WZMrb4uGJzcuRg==", - "dev": true, - "dependencies": { - "array-find": "^1.0.0", - "debug": "^3.2.7", - "enhanced-resolve": "^0.9.1", - "find-root": "^1.1.0", - "has": "^1.0.3", - "interpret": "^1.4.0", - "is-core-module": "^2.7.0", - "is-regex": "^1.1.4", - "lodash": "^4.17.21", - "resolve": "^1.20.0", - "semver": "^5.7.1" - }, - "engines": { - "node": ">= 6" - }, - "peerDependencies": { - "eslint-plugin-import": ">=1.4.0", - "webpack": ">=1.11.0" - } - }, - "node_modules/eslint-import-resolver-webpack/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/eslint-import-resolver-webpack/node_modules/interpret": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", - "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", - "dev": true, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/eslint-import-resolver-webpack/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true, - "bin": { - "semver": "bin/semver" - } - }, "node_modules/eslint-module-utils": { "version": "2.7.4", "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.4.tgz", @@ -22317,35 +21971,35 @@ "dev": true }, "node_modules/eslint-plugin-n8n-nodes-base": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-n8n-nodes-base/-/eslint-plugin-n8n-nodes-base-1.8.1.tgz", - "integrity": "sha512-Ja4P3bhN9urMaftftS29JIHgcEa1vkIPtLiXtEsehCJ0F/l45TUEEWmKBqWyDwkru+2nPBmzm3q7F/QmQjrRAA==", + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-n8n-nodes-base/-/eslint-plugin-n8n-nodes-base-1.9.1.tgz", + "integrity": "sha512-7OQNP5DU3Lw1VgS+m6Ez+MqspRqtifEB2cM4n4q3Pxuw1P7HtAds+hBLIs6KFcTO1qINtaLr4l7XK5/h2XKThw==", "dev": true, "dependencies": { "@typescript-eslint/utils": "^5.17.0", "camel-case": "^4.1.2", - "eslint-docgen": "^0.7.0", "indefinite": "^2.4.1", "pascal-case": "^3.1.2", "pluralize": "^8.0.0", + "prettier": "^2.7.1", "sentence-case": "^3.0.4", "title-case": "^3.0.3" } }, "node_modules/eslint-plugin-prettier": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-3.4.1.tgz", - "integrity": "sha512-htg25EUYUeIhKHXjOinK4BgCcDwtLHjqaxCDsMy5nbnUMkKFvIhMVCp+5GFUXQ4Nr8lBsPqtGAqBenbpFqAA2g==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz", + "integrity": "sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ==", "dev": true, "dependencies": { "prettier-linter-helpers": "^1.0.0" }, "engines": { - "node": ">=6.0.0" + "node": ">=12.0.0" }, "peerDependencies": { - "eslint": ">=5.0.0", - "prettier": ">=1.13.0" + "eslint": ">=7.28.0", + "prettier": ">=2.0.0" }, "peerDependenciesMeta": { "eslint-config-prettier": { @@ -22354,47 +22008,59 @@ } }, "node_modules/eslint-plugin-vue": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-7.20.0.tgz", - "integrity": "sha512-oVNDqzBC9h3GO+NTgWeLMhhGigy6/bQaQbHS+0z7C4YEu/qK/yxHvca/2PTZtGNPsCrHwOTgKMrwu02A9iPBmw==", + "version": "9.4.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-9.4.0.tgz", + "integrity": "sha512-Nzz2QIJ8FG+rtJaqT/7/ru5ie2XgT9KCudkbN0y3uFYhQ41nuHEaboLAiqwMcK006hZPQv/rVMRhUIwEGhIvfQ==", "dev": true, "dependencies": { - "eslint-utils": "^2.1.0", + "eslint-utils": "^3.0.0", "natural-compare": "^1.4.0", - "semver": "^6.3.0", - "vue-eslint-parser": "^7.10.0" + "nth-check": "^2.0.1", + "postcss-selector-parser": "^6.0.9", + "semver": "^7.3.5", + "vue-eslint-parser": "^9.0.1", + "xml-name-validator": "^4.0.0" }, "engines": { - "node": ">=8.10" + "node": "^14.17.0 || >=16.0.0" }, "peerDependencies": { "eslint": "^6.2.0 || ^7.0.0 || ^8.0.0" } }, - "node_modules/eslint-plugin-vue/node_modules/eslint-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", - "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", + "node_modules/eslint-plugin-vue/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, "dependencies": { - "eslint-visitor-keys": "^1.1.0" + "yallist": "^4.0.0" }, "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" + "node": ">=10" } }, - "node_modules/eslint-plugin-vue/node_modules/eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "node_modules/eslint-plugin-vue/node_modules/semver": { + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, "engines": { - "node": ">=4" + "node": ">=10" } }, + "node_modules/eslint-plugin-vue/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, "node_modules/eslint-scope": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", @@ -23674,12 +23340,6 @@ "node": ">=6" } }, - "node_modules/find-root": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz", - "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==", - "dev": true - }, "node_modules/find-up": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", @@ -24676,15 +24336,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/get-stdin": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-6.0.0.tgz", - "integrity": "sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g==", - "dev": true, - "engines": { - "node": ">=4" - } - }, "node_modules/get-stream": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", @@ -35661,12 +35312,6 @@ "map-or-similar": "^1.5.0" } }, - "node_modules/memory-fs": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.2.0.tgz", - "integrity": "sha512-+y4mDxU4rvXXu5UDSGCGNiesFmwCHuefGMoPCO1WYucNYj7DsLqrFaa2fXVI0H+NNiPTwwzKwspn9yTZqUGqng==", - "dev": true - }, "node_modules/memory-pager": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz", @@ -35907,27 +35552,6 @@ "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" }, - "node_modules/merge-options": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/merge-options/-/merge-options-3.0.4.tgz", - "integrity": "sha512-2Sug1+knBjkaMsMgf1ctR1Ujx+Ayku4EdJN4Z+C2+JzoeF7A3OZ9KM2GY0CpQS51NR61LTurMJrRKPhSs3ZRTQ==", - "dev": true, - "dependencies": { - "is-plain-obj": "^2.1.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/merge-options/node_modules/is-plain-obj": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/merge-source-map": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.1.0.tgz", @@ -43724,12 +43348,6 @@ "resolved": "https://registry.npmjs.org/simple-lru-cache/-/simple-lru-cache-0.0.2.tgz", "integrity": "sha512-uEv/AFO0ADI7d99OHDmh1QfYzQk/izT1vCmu/riQfh7qjBVUUgRT87E5s5h7CxWCA/+YoZerykpEthzVrW3LIw==" }, - "node_modules/simple-mock": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/simple-mock/-/simple-mock-0.8.0.tgz", - "integrity": "sha512-rakKnocwPH9KPjOsmtMwJwKDmZIYyDeCz0bQYAdeB9h27SMpS5BS+0hDSzhAlvmzA3o7I9ck2NgqjcHpjIcwmA==", - "dev": true - }, "node_modules/simple-swizzle": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", @@ -45612,15 +45230,6 @@ "integrity": "sha512-qImOD23aDfnIDNqlG1NOehdB9IYsn1V9oByPjKY1nakv2MQYCEMyX033/q+aEtYCpmYK1cv2+NTmlH+ra6GA5A==", "dev": true }, - "node_modules/tapable": { - "version": "0.1.10", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-0.1.10.tgz", - "integrity": "sha512-jX8Et4hHg57mug1/079yitEKWGB3LCwoxByLsNim89LABq8NqgiX+6iYVOsq0vX8uJHkU+DZ5fnq95f800bEsQ==", - "dev": true, - "engines": { - "node": ">=0.6" - } - }, "node_modules/tar": { "version": "6.1.11", "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz", @@ -48374,16 +47983,6 @@ "node": ">=8" } }, - "node_modules/upath": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/upath/-/upath-2.0.1.tgz", - "integrity": "sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w==", - "dev": true, - "engines": { - "node": ">=4", - "yarn": "*" - } - }, "node_modules/update-browserslist-db": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.7.tgz", @@ -49485,52 +49084,75 @@ } }, "node_modules/vue-eslint-parser": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-7.11.0.tgz", - "integrity": "sha512-qh3VhDLeh773wjgNTl7ss0VejY9bMMa0GoDG2fQVyDzRFdiU3L7fw74tWZDHNQXdZqxO3EveQroa9ct39D2nqg==", + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-9.1.0.tgz", + "integrity": "sha512-NGn/iQy8/Wb7RrRa4aRkokyCZfOUWk19OP5HP6JEozQFX5AoS/t+Z0ZN7FY4LlmWc4FNI922V7cvX28zctN8dQ==", "dev": true, "dependencies": { - "debug": "^4.1.1", - "eslint-scope": "^5.1.1", - "eslint-visitor-keys": "^1.1.0", - "espree": "^6.2.1", + "debug": "^4.3.4", + "eslint-scope": "^7.1.1", + "eslint-visitor-keys": "^3.3.0", + "espree": "^9.3.1", "esquery": "^1.4.0", "lodash": "^4.17.21", - "semver": "^6.3.0" + "semver": "^7.3.6" }, "engines": { - "node": ">=8.10" + "node": "^14.17.0 || >=16.0.0" }, "funding": { "url": "https://github.com/sponsors/mysticatea" }, "peerDependencies": { - "eslint": ">=5.0.0" + "eslint": ">=6.0.0" } }, - "node_modules/vue-eslint-parser/node_modules/eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/vue-eslint-parser/node_modules/espree": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-6.2.1.tgz", - "integrity": "sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw==", + "node_modules/vue-eslint-parser/node_modules/eslint-scope": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", + "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", "dev": true, "dependencies": { - "acorn": "^7.1.1", - "acorn-jsx": "^5.2.0", - "eslint-visitor-keys": "^1.1.0" + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" }, "engines": { - "node": ">=6.0.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, + "node_modules/vue-eslint-parser/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/vue-eslint-parser/node_modules/semver": { + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/vue-eslint-parser/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, "node_modules/vue-fragment": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/vue-fragment/-/vue-fragment-1.5.1.tgz", @@ -52745,6 +52367,20 @@ "url": "https://github.com/sponsors/wooorm" } }, + "packages/@n8n_io/eslint-config": { + "devDependencies": { + "@types/eslint": "8.4.6", + "@typescript-eslint/eslint-plugin": "^5.36.2", + "@typescript-eslint/parser": "^5.36.2", + "@vue/eslint-config-typescript": "^11.0.0", + "eslint": "8.23.0", + "eslint-config-airbnb-typescript": "^17.0.0", + "eslint-config-prettier": "^8.5.0", + "eslint-plugin-import": "^2.26.0", + "eslint-plugin-prettier": "^4.2.1", + "eslint-plugin-vue": "^9.4.0" + } + }, "packages/cli": { "name": "n8n", "version": "0.193.5", @@ -52823,6 +52459,7 @@ }, "devDependencies": { "@apidevtools/swagger-cli": "4.0.0", + "@n8n_io/eslint-config": "", "@oclif/dev-cli": "^1.22.2", "@types/basic-auth": "^1.1.2", "@types/bcryptjs": "^2.4.2", @@ -52893,6 +52530,7 @@ "uuid": "^8.3.2" }, "devDependencies": { + "@n8n_io/eslint-config": "", "@types/cron": "~1.7.1", "@types/crypto-js": "^4.0.1", "@types/express": "^4.17.6", @@ -52922,6 +52560,7 @@ "@fortawesome/fontawesome-svg-core": "^1.2.35", "@fortawesome/free-solid-svg-icons": "^5.15.3", "@fortawesome/vue-fontawesome": "^2.0.2", + "@n8n_io/eslint-config": "", "@storybook/addon-actions": "^6.5.10", "@storybook/addon-essentials": "^6.5.10", "@storybook/addon-links": "^6.5.10", @@ -52932,18 +52571,11 @@ "@types/jest": "^27.4.0", "@types/markdown-it": "^12.2.3", "@types/sanitize-html": "^2.6.2", - "@typescript-eslint/eslint-plugin": "^5.0.0", - "@typescript-eslint/parser": "^5.0.0", "@vue/cli-plugin-babel": "~4.5.19", - "@vue/eslint-config-prettier": "^6.0.0", - "@vue/eslint-config-typescript": "^7.0.0", "@vue/test-utils": "^1.0.3", "babel-loader": "^8.2.2", "c8": "7.11.0", "core-js": "^3.6.5", - "eslint": "^8.0.0", - "eslint-plugin-prettier": "^3.4.0", - "eslint-plugin-vue": "^7.16.0", "gulp": "^4.0.0", "gulp-autoprefixer": "^4.0.0", "gulp-clean-css": "^4.3.0", @@ -53003,6 +52635,7 @@ "@fortawesome/fontawesome-svg-core": "^1.2.35", "@fortawesome/free-solid-svg-icons": "^5.15.3", "@fortawesome/vue-fontawesome": "^2.0.2", + "@n8n_io/eslint-config": "", "@types/dateformat": "^3.0.0", "@types/express": "^4.17.6", "@types/file-saver": "^2.0.1", @@ -53014,23 +52647,16 @@ "@types/node": "^16.11.22", "@types/quill": "^2.0.1", "@types/uuid": "^8.3.2", - "@typescript-eslint/eslint-plugin": "^5.0.0", - "@typescript-eslint/parser": "^5.0.0", "@vue/cli-plugin-babel": "~4.5.19", "@vue/cli-plugin-typescript": "~4.5.19", "@vue/cli-plugin-unit-jest": "~4.5.19", "@vue/cli-service": "~4.5.19", - "@vue/eslint-config-standard": "^6.1.0", - "@vue/eslint-config-typescript": "^11.0.0", "@vue/test-utils": "^1.0.3", "axios": "^0.21.1", "babel-core": "7.0.0-bridge.0", "babel-eslint": "^10.0.1", "cross-env": "^7.0.2", "dateformat": "^3.0.3", - "eslint": "^8.0.0", - "eslint-plugin-import": "^2.23.4", - "eslint-plugin-vue": "^7.16.0", "file-saver": "^2.0.2", "flatted": "^3.2.4", "jquery": "^3.4.1", @@ -53065,100 +52691,6 @@ "vuex": "^3.1.1" } }, - "packages/editor-ui/node_modules/@vue/eslint-config-typescript": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/@vue/eslint-config-typescript/-/eslint-config-typescript-11.0.1.tgz", - "integrity": "sha512-0U+nL0nA7ahnGPk3rTN49x76miUwuQtQPQNWOFvAcjg6nFJkIkA8qbGNtXwsuHtwBwRtWpHhShL3zK07v+632w==", - "dev": true, - "dependencies": { - "@typescript-eslint/eslint-plugin": "^5.0.0", - "@typescript-eslint/parser": "^5.0.0", - "vue-eslint-parser": "^9.0.0" - }, - "engines": { - "node": "^14.17.0 || >=16.0.0" - }, - "peerDependencies": { - "eslint": "^6.2.0 || ^7.0.0 || ^8.0.0", - "eslint-plugin-vue": "^9.0.0", - "typescript": "*" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "packages/editor-ui/node_modules/eslint-scope": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", - "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", - "dev": true, - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "packages/editor-ui/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "packages/editor-ui/node_modules/semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "packages/editor-ui/node_modules/vue-eslint-parser": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-9.0.3.tgz", - "integrity": "sha512-yL+ZDb+9T0ELG4VIFo/2anAOz8SvBdlqEnQnvJ3M7Scq56DvtjY0VY88bByRZB0D4J0u8olBcfrXTVONXsh4og==", - "dev": true, - "dependencies": { - "debug": "^4.3.4", - "eslint-scope": "^7.1.1", - "eslint-visitor-keys": "^3.3.0", - "espree": "^9.3.1", - "esquery": "^1.4.0", - "lodash": "^4.17.21", - "semver": "^7.3.6" - }, - "engines": { - "node": "^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - }, - "peerDependencies": { - "eslint": ">=6.0.0" - } - }, - "packages/editor-ui/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, "packages/node-dev": { "name": "n8n-node-dev", "version": "0.72.1", @@ -53181,6 +52713,7 @@ "n8n-node-dev": "bin/n8n-node-dev" }, "devDependencies": { + "@n8n_io/eslint-config": "", "@oclif/dev-cli": "^1.22.2", "@types/copyfiles": "^2.1.1", "@types/express": "^4.17.6", @@ -53250,6 +52783,7 @@ "xml2js": "^0.4.23" }, "devDependencies": { + "@n8n_io/eslint-config": "", "@types/amqplib": "^0.8.2", "@types/aws4": "^1.5.1", "@types/basic-auth": "^1.1.2", @@ -53281,7 +52815,7 @@ "@types/tmp": "^0.2.0", "@types/uuid": "^8.3.2", "@types/xml2js": "^0.4.3", - "eslint-plugin-n8n-nodes-base": "^1.8.1", + "eslint-plugin-n8n-nodes-base": "^1.9.1", "gulp": "^4.0.0", "jest": "^27.4.7", "n8n-workflow": "~0.115.1", @@ -53305,6 +52839,7 @@ "xml2js": "^0.4.23" }, "devDependencies": { + "@n8n_io/eslint-config": "", "@types/express": "^4.17.6", "@types/jest": "^27.4.0", "@types/jmespath": "^0.15.0", @@ -53314,13 +52849,6 @@ "@types/luxon": "^2.0.9", "@types/node": "^16.11.22", "@types/xml2js": "^0.4.3", - "@typescript-eslint/eslint-plugin": "^5.0.0", - "@typescript-eslint/parser": "^5.0.0", - "eslint": "^8.0.0", - "eslint-config-airbnb-typescript": "^12.3.1", - "eslint-config-prettier": "^8.3.0", - "eslint-plugin-import": "^2.23.4", - "eslint-plugin-prettier": "^3.4.0", "jest": "^27.4.7", "jest-environment-jsdom": "^27.5.1", "prettier": "^2.3.2", @@ -56575,6 +56103,21 @@ } } }, + "@n8n_io/eslint-config": { + "version": "file:packages/@n8n_io/eslint-config", + "requires": { + "@types/eslint": "8.4.6", + "@typescript-eslint/eslint-plugin": "^5.36.2", + "@typescript-eslint/parser": "^5.36.2", + "@vue/eslint-config-typescript": "^11.0.0", + "eslint": "8.23.0", + "eslint-config-airbnb-typescript": "^17.0.0", + "eslint-config-prettier": "^8.5.0", + "eslint-plugin-import": "^2.26.0", + "eslint-plugin-prettier": "^4.2.1", + "eslint-plugin-vue": "^9.4.0" + } + }, "@n8n_io/riot-tmpl": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@n8n_io/riot-tmpl/-/riot-tmpl-1.0.1.tgz", @@ -58811,6 +58354,22 @@ "@types/node": "*" } }, + "@types/eslint": { + "version": "8.4.6", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.6.tgz", + "integrity": "sha512-/fqTbjxyFUaYNO7VcW5g+4npmqVACz1bB7RTHYuLj+PRjw9hrCwrUXVQFpChUS0JsyEFvMZ7U/PfmvWgxJhI9g==", + "dev": true, + "requires": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "@types/estree": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.0.tgz", + "integrity": "sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==", + "dev": true + }, "@types/eventsource": { "version": "1.1.9", "resolved": "https://registry.npmjs.org/@types/eventsource/-/eventsource-1.1.9.tgz", @@ -63087,44 +62646,15 @@ } } }, - "@vue/eslint-config-prettier": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@vue/eslint-config-prettier/-/eslint-config-prettier-6.0.0.tgz", - "integrity": "sha512-wFQmv45c3ige5EA+ngijq40YpVcIkAy0Lihupnsnd1Dao5CBbPyfCzqtejFLZX1EwH/kCJdpz3t6s+5wd3+KxQ==", - "dev": true, - "requires": { - "eslint-config-prettier": "^6.0.0" - }, - "dependencies": { - "eslint-config-prettier": { - "version": "6.15.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-6.15.0.tgz", - "integrity": "sha512-a1+kOYLR8wMGustcgAjdydMsQ2A/2ipRPwRKUmfYaSxc9ZPcrku080Ctl6zrZzZNs/U82MjSv+qKREkoq3bJaw==", - "dev": true, - "requires": { - "get-stdin": "^6.0.0" - } - } - } - }, - "@vue/eslint-config-standard": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/@vue/eslint-config-standard/-/eslint-config-standard-6.1.0.tgz", - "integrity": "sha512-9+hrEyflDzsGdlBDl9jPV5DIYUx1TOU5OSQqRDKCrNumrxRj5HRWKuk+ocXWnha6uoNRtLC24mY7d/MwqvBCNw==", - "dev": true, - "requires": { - "eslint-config-standard": "^16.0.3", - "eslint-import-resolver-node": "^0.3.4", - "eslint-import-resolver-webpack": "^0.13.1" - } - }, "@vue/eslint-config-typescript": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@vue/eslint-config-typescript/-/eslint-config-typescript-7.0.0.tgz", - "integrity": "sha512-UxUlvpSrFOoF8aQ+zX1leYiEBEm7CZmXYn/ZEM1zwSadUzpamx56RB4+Htdjisv1mX2tOjBegNUqH3kz2OL+Aw==", + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/@vue/eslint-config-typescript/-/eslint-config-typescript-11.0.1.tgz", + "integrity": "sha512-0U+nL0nA7ahnGPk3rTN49x76miUwuQtQPQNWOFvAcjg6nFJkIkA8qbGNtXwsuHtwBwRtWpHhShL3zK07v+632w==", "dev": true, "requires": { - "vue-eslint-parser": "^7.0.0" + "@typescript-eslint/eslint-plugin": "^5.0.0", + "@typescript-eslint/parser": "^5.0.0", + "vue-eslint-parser": "^9.0.0" } }, "@vue/preload-webpack-plugin": { @@ -63806,12 +63336,6 @@ "integrity": "sha512-H3LU5RLiSsGXPhN+Nipar0iR0IofH+8r89G2y1tBKxQ/agagKyAjhkAFDRBfodP2caPrNKHpAWNIM/c9yeL7uA==", "dev": true }, - "array-find": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-find/-/array-find-1.0.0.tgz", - "integrity": "sha512-kO/vVCacW9mnpn3WPWbTVlEnOabK2L7LWi2HViURtCM46y1zb6I8UMjx4LgbiqadTgHnLInUronwn3ampNTJtQ==", - "dev": true - }, "array-find-index": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", @@ -70126,17 +69650,6 @@ "once": "^1.4.0" } }, - "enhanced-resolve": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-0.9.1.tgz", - "integrity": "sha512-kxpoMgrdtkXZ5h0SeraBS1iRntpTpQ3R8ussdb38+UAFnMGX5DDyJXePm+OCHOcoXvHDw7mc2erbJBpDnl7TPw==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "memory-fs": "^0.2.0", - "tapable": "^0.1.8" - } - }, "entities": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", @@ -70700,122 +70213,25 @@ } } }, - "eslint-config-airbnb": { - "version": "18.2.1", - "resolved": "https://registry.npmjs.org/eslint-config-airbnb/-/eslint-config-airbnb-18.2.1.tgz", - "integrity": "sha512-glZNDEZ36VdlZWoxn/bUR1r/sdFKPd1mHPbqUtkctgNG4yT2DLLtJ3D+yCV+jzZCc2V1nBVkmdknOJBZ5Hc0fg==", - "dev": true, - "requires": { - "eslint-config-airbnb-base": "^14.2.1", - "object.assign": "^4.1.2", - "object.entries": "^1.1.2" - } - }, "eslint-config-airbnb-base": { - "version": "14.2.1", - "resolved": "https://registry.npmjs.org/eslint-config-airbnb-base/-/eslint-config-airbnb-base-14.2.1.tgz", - "integrity": "sha512-GOrQyDtVEc1Xy20U7vsB2yAoB4nBlfH5HZJeatRXHleO+OS5Ot+MWij4Dpltw4/DyIkqUfqz1epfhVR5XWWQPA==", + "version": "15.0.0", + "resolved": "https://registry.npmjs.org/eslint-config-airbnb-base/-/eslint-config-airbnb-base-15.0.0.tgz", + "integrity": "sha512-xaX3z4ZZIcFLvh2oUNvcX5oEofXda7giYmuplVxoOg5A7EXJMrUyqRgR+mhDhPK8LZ4PttFOBvCYDbX3sUoUig==", "dev": true, "requires": { "confusing-browser-globals": "^1.0.10", "object.assign": "^4.1.2", - "object.entries": "^1.1.2" + "object.entries": "^1.1.5", + "semver": "^6.3.0" } }, "eslint-config-airbnb-typescript": { - "version": "12.3.1", - "resolved": "https://registry.npmjs.org/eslint-config-airbnb-typescript/-/eslint-config-airbnb-typescript-12.3.1.tgz", - "integrity": "sha512-ql/Pe6/hppYuRp4m3iPaHJqkBB7dgeEmGPQ6X0UNmrQOfTF+dXw29/ZjU2kQ6RDoLxaxOA+Xqv07Vbef6oVTWw==", + "version": "17.0.0", + "resolved": "https://registry.npmjs.org/eslint-config-airbnb-typescript/-/eslint-config-airbnb-typescript-17.0.0.tgz", + "integrity": "sha512-elNiuzD0kPAPTXjFWg+lE24nMdHMtuxgYoD30OyMD6yrW1AhFZPAg27VX7d3tzOErw+dgJTNWfRSDqEcXb4V0g==", "dev": true, "requires": { - "@typescript-eslint/parser": "^4.4.1", - "eslint-config-airbnb": "^18.2.0", - "eslint-config-airbnb-base": "^14.2.0" - }, - "dependencies": { - "@typescript-eslint/parser": { - "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.33.0.tgz", - "integrity": "sha512-ZohdsbXadjGBSK0/r+d87X0SBmKzOq4/S5nzK6SBgJspFo9/CUDJ7hjayuze+JK7CZQLDMroqytp7pOcFKTxZA==", - "dev": true, - "requires": { - "@typescript-eslint/scope-manager": "4.33.0", - "@typescript-eslint/types": "4.33.0", - "@typescript-eslint/typescript-estree": "4.33.0", - "debug": "^4.3.1" - } - }, - "@typescript-eslint/scope-manager": { - "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.33.0.tgz", - "integrity": "sha512-5IfJHpgTsTZuONKbODctL4kKuQje/bzBRkwHE8UOZ4f89Zeddg+EGZs8PD8NcN4LdM3ygHWYB3ukPAYjvl/qbQ==", - "dev": true, - "requires": { - "@typescript-eslint/types": "4.33.0", - "@typescript-eslint/visitor-keys": "4.33.0" - } - }, - "@typescript-eslint/types": { - "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.33.0.tgz", - "integrity": "sha512-zKp7CjQzLQImXEpLt2BUw1tvOMPfNoTAfb8l51evhYbOEEzdWyQNmHWWGPR6hwKJDAi+1VXSBmnhL9kyVTTOuQ==", - "dev": true - }, - "@typescript-eslint/typescript-estree": { - "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.33.0.tgz", - "integrity": "sha512-rkWRY1MPFzjwnEVHsxGemDzqqddw2QbTJlICPD9p9I9LfsO8fdmfQPOX3uKfUaGRDFJbfrtm/sXhVXN4E+bzCA==", - "dev": true, - "requires": { - "@typescript-eslint/types": "4.33.0", - "@typescript-eslint/visitor-keys": "4.33.0", - "debug": "^4.3.1", - "globby": "^11.0.3", - "is-glob": "^4.0.1", - "semver": "^7.3.5", - "tsutils": "^3.21.0" - } - }, - "@typescript-eslint/visitor-keys": { - "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.33.0.tgz", - "integrity": "sha512-uqi/2aSz9g2ftcHWf8uLPJA70rUv6yuMW5Bohw+bwcuzaxQIHaKFZCKGoGXIrc9vkTJ3+0txM73K0Hq3d5wgIg==", - "dev": true, - "requires": { - "@typescript-eslint/types": "4.33.0", - "eslint-visitor-keys": "^2.0.0" - } - }, - "eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "dev": true - }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - } + "eslint-config-airbnb-base": "^15.0.0" } }, "eslint-config-prettier": { @@ -70829,58 +70245,6 @@ "resolved": "https://registry.npmjs.org/eslint-config-riot/-/eslint-config-riot-1.0.0.tgz", "integrity": "sha512-NB/L/1Y30qyJcG5xZxCJKW/+bqyj+llbcCwo9DEz8bESIP0SLTOQ8T1DWCCFc+wJ61AMEstj4511PSScqMMfCw==" }, - "eslint-config-standard": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-16.0.3.tgz", - "integrity": "sha512-x4fmJL5hGqNJKGHSjnLdgA6U6h1YW/G2dW9fA+cyVur4SK6lyue8+UgNKWlZtUDTXvgKDD/Oa3GQjmB5kjtVvg==", - "dev": true - }, - "eslint-docgen": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/eslint-docgen/-/eslint-docgen-0.7.1.tgz", - "integrity": "sha512-+UJNwJleuNJNb42y2EXhN6qDhTHqLUTiOn9SCKovxhHsKCbL2KOdvYjsjVKX6mCIFnRWNkRjrynbvCegS+2Skg==", - "dev": true, - "requires": { - "chalk": "^4.1.2", - "ejs": "^3.1.8", - "eslint": ">=8.0.0", - "import-fresh": "^3.3.0", - "jsonschema": "^1.4.1", - "merge-options": "^3.0.4", - "mkdirp": "^1.0.4", - "pkg-dir": "^5.0.0", - "pluralize": "^8.0.0", - "simple-mock": "^0.8.0", - "upath": "^2.0.1" - }, - "dependencies": { - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, "eslint-import-resolver-node": { "version": "0.3.6", "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz", @@ -70902,48 +70266,6 @@ } } }, - "eslint-import-resolver-webpack": { - "version": "0.13.2", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-webpack/-/eslint-import-resolver-webpack-0.13.2.tgz", - "integrity": "sha512-XodIPyg1OgE2h5BDErz3WJoK7lawxKTJNhgPNafRST6csC/MZC+L5P6kKqsZGRInpbgc02s/WZMrb4uGJzcuRg==", - "dev": true, - "requires": { - "array-find": "^1.0.0", - "debug": "^3.2.7", - "enhanced-resolve": "^0.9.1", - "find-root": "^1.1.0", - "has": "^1.0.3", - "interpret": "^1.4.0", - "is-core-module": "^2.7.0", - "is-regex": "^1.1.4", - "lodash": "^4.17.21", - "resolve": "^1.20.0", - "semver": "^5.7.1" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "interpret": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", - "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", - "dev": true - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - } - } - }, "eslint-module-utils": { "version": "2.7.4", "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.4.tgz", @@ -71012,55 +70334,67 @@ } }, "eslint-plugin-n8n-nodes-base": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-n8n-nodes-base/-/eslint-plugin-n8n-nodes-base-1.8.1.tgz", - "integrity": "sha512-Ja4P3bhN9urMaftftS29JIHgcEa1vkIPtLiXtEsehCJ0F/l45TUEEWmKBqWyDwkru+2nPBmzm3q7F/QmQjrRAA==", + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-n8n-nodes-base/-/eslint-plugin-n8n-nodes-base-1.9.1.tgz", + "integrity": "sha512-7OQNP5DU3Lw1VgS+m6Ez+MqspRqtifEB2cM4n4q3Pxuw1P7HtAds+hBLIs6KFcTO1qINtaLr4l7XK5/h2XKThw==", "dev": true, "requires": { "@typescript-eslint/utils": "^5.17.0", "camel-case": "^4.1.2", - "eslint-docgen": "^0.7.0", "indefinite": "^2.4.1", "pascal-case": "^3.1.2", "pluralize": "^8.0.0", + "prettier": "^2.7.1", "sentence-case": "^3.0.4", "title-case": "^3.0.3" } }, "eslint-plugin-prettier": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-3.4.1.tgz", - "integrity": "sha512-htg25EUYUeIhKHXjOinK4BgCcDwtLHjqaxCDsMy5nbnUMkKFvIhMVCp+5GFUXQ4Nr8lBsPqtGAqBenbpFqAA2g==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz", + "integrity": "sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ==", "dev": true, "requires": { "prettier-linter-helpers": "^1.0.0" } }, "eslint-plugin-vue": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-7.20.0.tgz", - "integrity": "sha512-oVNDqzBC9h3GO+NTgWeLMhhGigy6/bQaQbHS+0z7C4YEu/qK/yxHvca/2PTZtGNPsCrHwOTgKMrwu02A9iPBmw==", + "version": "9.4.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-9.4.0.tgz", + "integrity": "sha512-Nzz2QIJ8FG+rtJaqT/7/ru5ie2XgT9KCudkbN0y3uFYhQ41nuHEaboLAiqwMcK006hZPQv/rVMRhUIwEGhIvfQ==", "dev": true, "requires": { - "eslint-utils": "^2.1.0", + "eslint-utils": "^3.0.0", "natural-compare": "^1.4.0", - "semver": "^6.3.0", - "vue-eslint-parser": "^7.10.0" + "nth-check": "^2.0.1", + "postcss-selector-parser": "^6.0.9", + "semver": "^7.3.5", + "vue-eslint-parser": "^9.0.1", + "xml-name-validator": "^4.0.0" }, "dependencies": { - "eslint-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", - "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, "requires": { - "eslint-visitor-keys": "^1.1.0" + "yallist": "^4.0.0" } }, - "eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "semver": { + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true } } @@ -72014,12 +71348,6 @@ } } }, - "find-root": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz", - "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==", - "dev": true - }, "find-up": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", @@ -72789,12 +72117,6 @@ "resolved": "https://registry.npmjs.org/get-port/-/get-port-5.1.1.tgz", "integrity": "sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ==" }, - "get-stdin": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-6.0.0.tgz", - "integrity": "sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g==", - "dev": true - }, "get-stream": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", @@ -81584,12 +80906,6 @@ "map-or-similar": "^1.5.0" } }, - "memory-fs": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.2.0.tgz", - "integrity": "sha512-+y4mDxU4rvXXu5UDSGCGNiesFmwCHuefGMoPCO1WYucNYj7DsLqrFaa2fXVI0H+NNiPTwwzKwspn9yTZqUGqng==", - "dev": true - }, "memory-pager": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz", @@ -81784,23 +81100,6 @@ "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" }, - "merge-options": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/merge-options/-/merge-options-3.0.4.tgz", - "integrity": "sha512-2Sug1+knBjkaMsMgf1ctR1Ujx+Ayku4EdJN4Z+C2+JzoeF7A3OZ9KM2GY0CpQS51NR61LTurMJrRKPhSs3ZRTQ==", - "dev": true, - "requires": { - "is-plain-obj": "^2.1.0" - }, - "dependencies": { - "is-plain-obj": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", - "dev": true - } - } - }, "merge-source-map": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.1.0.tgz", @@ -82397,6 +81696,7 @@ "version": "file:packages/cli", "requires": { "@apidevtools/swagger-cli": "4.0.0", + "@n8n_io/eslint-config": "", "@oclif/command": "^1.5.18", "@oclif/core": "^1.9.3", "@oclif/dev-cli": "^1.22.2", @@ -82511,6 +81811,7 @@ "n8n-core": { "version": "file:packages/core", "requires": { + "@n8n_io/eslint-config": "", "@types/cron": "~1.7.1", "@types/crypto-js": "^4.0.1", "@types/express": "^4.17.6", @@ -82549,6 +81850,7 @@ "@fortawesome/fontawesome-svg-core": "^1.2.35", "@fortawesome/free-solid-svg-icons": "^5.15.3", "@fortawesome/vue-fontawesome": "^2.0.2", + "@n8n_io/eslint-config": "", "@storybook/addon-actions": "^6.5.10", "@storybook/addon-essentials": "^6.5.10", "@storybook/addon-links": "^6.5.10", @@ -82559,19 +81861,12 @@ "@types/jest": "^27.4.0", "@types/markdown-it": "^12.2.3", "@types/sanitize-html": "^2.6.2", - "@typescript-eslint/eslint-plugin": "^5.0.0", - "@typescript-eslint/parser": "^5.0.0", "@vue/cli-plugin-babel": "~4.5.19", - "@vue/eslint-config-prettier": "^6.0.0", - "@vue/eslint-config-typescript": "^7.0.0", "@vue/test-utils": "^1.0.3", "babel-loader": "^8.2.2", "c8": "7.11.0", "core-js": "^3.6.5", "element-ui": "~2.15.7", - "eslint": "^8.0.0", - "eslint-plugin-prettier": "^3.4.0", - "eslint-plugin-vue": "^7.16.0", "gulp": "^4.0.0", "gulp-autoprefixer": "^4.0.0", "gulp-clean-css": "^4.3.0", @@ -82612,6 +81907,7 @@ "@fortawesome/free-regular-svg-icons": "^6.1.1", "@fortawesome/free-solid-svg-icons": "^5.15.3", "@fortawesome/vue-fontawesome": "^2.0.2", + "@n8n_io/eslint-config": "", "@types/dateformat": "^3.0.0", "@types/express": "^4.17.6", "@types/file-saver": "^2.0.1", @@ -82623,23 +81919,16 @@ "@types/node": "^16.11.22", "@types/quill": "^2.0.1", "@types/uuid": "^8.3.2", - "@typescript-eslint/eslint-plugin": "^5.0.0", - "@typescript-eslint/parser": "^5.0.0", "@vue/cli-plugin-babel": "~4.5.19", "@vue/cli-plugin-typescript": "~4.5.19", "@vue/cli-plugin-unit-jest": "~4.5.19", "@vue/cli-service": "~4.5.19", - "@vue/eslint-config-standard": "^6.1.0", - "@vue/eslint-config-typescript": "^11.0.0", "@vue/test-utils": "^1.0.3", "axios": "^0.21.1", "babel-core": "7.0.0-bridge.0", "babel-eslint": "^10.0.1", "cross-env": "^7.0.2", "dateformat": "^3.0.3", - "eslint": "^8.0.0", - "eslint-plugin-import": "^2.23.4", - "eslint-plugin-vue": "^7.16.0", "file-saver": "^2.0.2", "flatted": "^3.2.4", "jquery": "^3.4.1", @@ -82682,73 +81971,12 @@ "vue2-touch-events": "^3.2.1", "vuex": "^3.1.1", "xss": "^1.0.10" - }, - "dependencies": { - "@vue/eslint-config-typescript": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/@vue/eslint-config-typescript/-/eslint-config-typescript-11.0.1.tgz", - "integrity": "sha512-0U+nL0nA7ahnGPk3rTN49x76miUwuQtQPQNWOFvAcjg6nFJkIkA8qbGNtXwsuHtwBwRtWpHhShL3zK07v+632w==", - "dev": true, - "requires": { - "@typescript-eslint/eslint-plugin": "^5.0.0", - "@typescript-eslint/parser": "^5.0.0", - "vue-eslint-parser": "^9.0.0" - } - }, - "eslint-scope": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", - "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", - "dev": true, - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - } - }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "vue-eslint-parser": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-9.0.3.tgz", - "integrity": "sha512-yL+ZDb+9T0ELG4VIFo/2anAOz8SvBdlqEnQnvJ3M7Scq56DvtjY0VY88bByRZB0D4J0u8olBcfrXTVONXsh4og==", - "dev": true, - "requires": { - "debug": "^4.3.4", - "eslint-scope": "^7.1.1", - "eslint-visitor-keys": "^3.3.0", - "espree": "^9.3.1", - "esquery": "^1.4.0", - "lodash": "^4.17.21", - "semver": "^7.3.6" - } - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - } } }, "n8n-node-dev": { "version": "file:packages/node-dev", "requires": { + "@n8n_io/eslint-config": "", "@oclif/command": "^1.5.18", "@oclif/dev-cli": "^1.22.2", "@oclif/errors": "^1.2.2", @@ -82774,6 +82002,7 @@ "version": "file:packages/nodes-base", "requires": { "@kafkajs/confluent-schema-registry": "1.0.6", + "@n8n_io/eslint-config": "", "@types/amqplib": "^0.8.2", "@types/aws4": "^1.5.1", "@types/basic-auth": "^1.1.2", @@ -82812,7 +82041,7 @@ "cheerio": "1.0.0-rc.6", "chokidar": "3.5.2", "cron": "~1.7.2", - "eslint-plugin-n8n-nodes-base": "^1.8.1", + "eslint-plugin-n8n-nodes-base": "^1.9.1", "eventsource": "^2.0.2", "fast-glob": "^3.2.5", "fflate": "^0.7.0", @@ -82869,6 +82098,7 @@ "n8n-workflow": { "version": "file:packages/workflow", "requires": { + "@n8n_io/eslint-config": "", "@n8n_io/riot-tmpl": "^1.0.1", "@types/express": "^4.17.6", "@types/jest": "^27.4.0", @@ -82879,13 +82109,6 @@ "@types/luxon": "^2.0.9", "@types/node": "^16.11.22", "@types/xml2js": "^0.4.3", - "@typescript-eslint/eslint-plugin": "^5.0.0", - "@typescript-eslint/parser": "^5.0.0", - "eslint": "^8.0.0", - "eslint-config-airbnb-typescript": "^12.3.1", - "eslint-config-prettier": "^8.3.0", - "eslint-plugin-import": "^2.23.4", - "eslint-plugin-prettier": "^3.4.0", "jest": "^27.4.7", "jest-environment-jsdom": "^27.5.1", "jmespath": "^0.16.0", @@ -88531,12 +87754,6 @@ "resolved": "https://registry.npmjs.org/simple-lru-cache/-/simple-lru-cache-0.0.2.tgz", "integrity": "sha512-uEv/AFO0ADI7d99OHDmh1QfYzQk/izT1vCmu/riQfh7qjBVUUgRT87E5s5h7CxWCA/+YoZerykpEthzVrW3LIw==" }, - "simple-mock": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/simple-mock/-/simple-mock-0.8.0.tgz", - "integrity": "sha512-rakKnocwPH9KPjOsmtMwJwKDmZIYyDeCz0bQYAdeB9h27SMpS5BS+0hDSzhAlvmzA3o7I9ck2NgqjcHpjIcwmA==", - "dev": true - }, "simple-swizzle": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", @@ -90074,12 +89291,6 @@ "integrity": "sha512-qImOD23aDfnIDNqlG1NOehdB9IYsn1V9oByPjKY1nakv2MQYCEMyX033/q+aEtYCpmYK1cv2+NTmlH+ra6GA5A==", "dev": true }, - "tapable": { - "version": "0.1.10", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-0.1.10.tgz", - "integrity": "sha512-jX8Et4hHg57mug1/079yitEKWGB3LCwoxByLsNim89LABq8NqgiX+6iYVOsq0vX8uJHkU+DZ5fnq95f800bEsQ==", - "dev": true - }, "tar": { "version": "6.1.11", "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz", @@ -92102,12 +91313,6 @@ "resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz", "integrity": "sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==" }, - "upath": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/upath/-/upath-2.0.1.tgz", - "integrity": "sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w==", - "dev": true - }, "update-browserslist-db": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.7.tgz", @@ -92943,36 +92148,53 @@ } }, "vue-eslint-parser": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-7.11.0.tgz", - "integrity": "sha512-qh3VhDLeh773wjgNTl7ss0VejY9bMMa0GoDG2fQVyDzRFdiU3L7fw74tWZDHNQXdZqxO3EveQroa9ct39D2nqg==", + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-9.1.0.tgz", + "integrity": "sha512-NGn/iQy8/Wb7RrRa4aRkokyCZfOUWk19OP5HP6JEozQFX5AoS/t+Z0ZN7FY4LlmWc4FNI922V7cvX28zctN8dQ==", "dev": true, "requires": { - "debug": "^4.1.1", - "eslint-scope": "^5.1.1", - "eslint-visitor-keys": "^1.1.0", - "espree": "^6.2.1", + "debug": "^4.3.4", + "eslint-scope": "^7.1.1", + "eslint-visitor-keys": "^3.3.0", + "espree": "^9.3.1", "esquery": "^1.4.0", "lodash": "^4.17.21", - "semver": "^6.3.0" + "semver": "^7.3.6" }, "dependencies": { - "eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "dev": true - }, - "espree": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-6.2.1.tgz", - "integrity": "sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw==", + "eslint-scope": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", + "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", "dev": true, "requires": { - "acorn": "^7.1.1", - "acorn-jsx": "^5.2.0", - "eslint-visitor-keys": "^1.1.0" + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" } + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "semver": { + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true } } }, diff --git a/package.json b/package.json index 3f8afcbe7a..6bf190e240 100644 --- a/package.json +++ b/package.json @@ -27,6 +27,7 @@ }, "postcss": {}, "workspaces": [ - "packages/*" + "packages/*", + "packages/@n8n_io/*" ] } diff --git a/packages/@n8n_io/eslint-config/base.js b/packages/@n8n_io/eslint-config/base.js new file mode 100644 index 0000000000..314b3f33a8 --- /dev/null +++ b/packages/@n8n_io/eslint-config/base.js @@ -0,0 +1,363 @@ +/** + * @type {import('@types/eslint').ESLint.ConfigData} + */ +module.exports = { + parser: '@typescript-eslint/parser', + parserOptions: { + sourceType: 'module', + project: ['./tsconfig.json'], + }, + + ignorePatterns: [ + '.eslintrc.js', // TODO: remove this + 'node_modules/**', + 'dist/**', + 'test/**', // TODO: remove this + ], + + plugins: [ + /** + * Plugin with lint rules for import/export syntax + * https://github.com/import-js/eslint-plugin-import + */ + 'eslint-plugin-import', + + /** + * @typescript-eslint/eslint-plugin is required by eslint-config-airbnb-typescript + * See step 2: https://github.com/iamturns/eslint-config-airbnb-typescript#2-install-eslint-plugins + */ + '@typescript-eslint', + + /** + * Plugin to report formatting violations as lint violations + * https://github.com/prettier/eslint-plugin-prettier + */ + 'eslint-plugin-prettier', + ], + + extends: [ + /** + * Config for typescript-eslint recommended ruleset (without type checking) + * + * https://github.com/typescript-eslint/typescript-eslint/blob/1c1b572c3000d72cfe665b7afbada0ec415e7855/packages/eslint-plugin/src/configs/recommended.ts + */ + 'plugin:@typescript-eslint/recommended', + + /** + * Config for typescript-eslint recommended ruleset (with type checking) + * + * https://github.com/typescript-eslint/typescript-eslint/blob/1c1b572c3000d72cfe665b7afbada0ec415e7855/packages/eslint-plugin/src/configs/recommended-requiring-type-checking.ts + */ + 'plugin:@typescript-eslint/recommended-requiring-type-checking', + + /** + * Config for Airbnb style guide for TS, /base to remove React rules + * + * https://github.com/iamturns/eslint-config-airbnb-typescript + * https://github.com/airbnb/javascript/tree/master/packages/eslint-config-airbnb-base/rules + */ + 'eslint-config-airbnb-typescript/base', + + /** + * Config to disable ESLint rules covered by Prettier + * + * https://github.com/prettier/eslint-config-prettier + */ + 'eslint-config-prettier', + ], + + rules: { + // ****************************************************************** + // required by prettier plugin + // ****************************************************************** + + // The following rule enables eslint-plugin-prettier + // See: https://github.com/prettier/eslint-plugin-prettier#recommended-configuration + + 'prettier/prettier': ['error', { endOfLine: 'auto' }], + + // The following two rules must be disabled when using eslint-plugin-prettier: + // See: https://github.com/prettier/eslint-plugin-prettier#arrow-body-style-and-prefer-arrow-callback-issue + + /** + * https://eslint.org/docs/rules/arrow-body-style + */ + 'arrow-body-style': 'off', + + /** + * https://eslint.org/docs/rules/prefer-arrow-callback + */ + 'prefer-arrow-callback': 'off', + + // ****************************************************************** + // additions to base ruleset + // ****************************************************************** + + // ---------------------------------- + // ESLint + // ---------------------------------- + + /** + * https://eslint.org/docs/rules/id-denylist + */ + 'id-denylist': [ + 'error', + 'err', + 'cb', + 'callback', + 'any', + 'Number', + 'number', + 'String', + 'string', + 'Boolean', + 'boolean', + 'Undefined', + 'undefined', + ], + + 'no-void': ['error', { allowAsStatement: true }], + + // ---------------------------------- + // @typescript-eslint + // ---------------------------------- + + /** + * https://github.com/typescript-eslint/typescript-eslint/blob/master/packages/eslint-plugin/docs/rules/array-type.md + */ + '@typescript-eslint/array-type': ['error', { default: 'array-simple' }], + + /** + * https://github.com/typescript-eslint/typescript-eslint/blob/master/packages/eslint-plugin/docs/rules/ban-ts-comment.md + */ + '@typescript-eslint/ban-ts-comment': 'off', + + /** + * https://github.com/typescript-eslint/typescript-eslint/blob/master/packages/eslint-plugin/docs/rules/ban-types.md + */ + '@typescript-eslint/ban-types': [ + 'error', + { + types: { + Object: { + message: 'Use object instead', + fixWith: 'object', + }, + String: { + message: 'Use string instead', + fixWith: 'string', + }, + Boolean: { + message: 'Use boolean instead', + fixWith: 'boolean', + }, + Number: { + message: 'Use number instead', + fixWith: 'number', + }, + Symbol: { + message: 'Use symbol instead', + fixWith: 'symbol', + }, + Function: { + message: [ + 'The `Function` type accepts any function-like value.', + 'It provides no type safety when calling the function, which can be a common source of bugs.', + 'It also accepts things like class declarations, which will throw at runtime as they will not be called with `new`.', + 'If you are expecting the function to accept certain arguments, you should explicitly define the function shape.', + ].join('\n'), + }, + }, + extendDefaults: false, + }, + ], + + /** + * https://github.com/typescript-eslint/typescript-eslint/blob/master/packages/eslint-plugin/docs/rules/consistent-type-assertions.md + */ + '@typescript-eslint/consistent-type-assertions': 'error', + + /** + * https://github.com/typescript-eslint/typescript-eslint/blob/master/packages/eslint-plugin/docs/rules/explicit-member-accessibility.md + */ + '@typescript-eslint/explicit-member-accessibility': [ + 'error', + { accessibility: 'no-public' }, + ], + + /** + * https://github.com/typescript-eslint/typescript-eslint/blob/master/packages/eslint-plugin/docs/rules/member-delimiter-style.md + */ + '@typescript-eslint/member-delimiter-style': [ + 'error', + { + multiline: { + delimiter: 'semi', + requireLast: true, + }, + singleline: { + delimiter: 'semi', + requireLast: false, + }, + }, + ], + + /** + * https://github.com/typescript-eslint/typescript-eslint/blob/master/packages/eslint-plugin/docs/rules/naming-convention.md + */ + '@typescript-eslint/naming-convention': [ + 'error', + { + selector: 'default', + format: ['camelCase'], + }, + { + selector: 'variable', + format: ['camelCase', 'snake_case', 'UPPER_CASE'], + leadingUnderscore: 'allowSingleOrDouble', + trailingUnderscore: 'allowSingleOrDouble', + }, + { + selector: 'property', + format: ['camelCase', 'snake_case'], + leadingUnderscore: 'allowSingleOrDouble', + trailingUnderscore: 'allowSingleOrDouble', + }, + { + selector: 'typeLike', + format: ['PascalCase'], + }, + { + selector: ['method', 'function'], + format: ['camelCase'], + leadingUnderscore: 'allowSingleOrDouble', + }, + ], + + /** + * https://github.com/typescript-eslint/typescript-eslint/blob/master/packages/eslint-plugin/docs/rules/no-duplicate-imports.md + */ + '@typescript-eslint/no-duplicate-imports': 'error', + + /** + * https://github.com/typescript-eslint/typescript-eslint/blob/master/packages/eslint-plugin/docs/rules/no-invalid-void-type.md + */ + '@typescript-eslint/no-invalid-void-type': 'error', + + /** + * https://github.com/typescript-eslint/typescript-eslint/blob/master/packages/eslint-plugin/docs/rules/no-misused-promises.md + */ + '@typescript-eslint/no-misused-promises': ['error', { checksVoidReturn: false }], + + /** + * https://github.com/typescript-eslint/typescript-eslint/blob/v4.30.0/packages/eslint-plugin/docs/rules/no-floating-promises.md + */ + '@typescript-eslint/no-floating-promises': ['error', { ignoreVoid: true }], + + /** + * https://github.com/typescript-eslint/typescript-eslint/blob/v4.33.0/packages/eslint-plugin/docs/rules/no-namespace.md + */ + '@typescript-eslint/no-namespace': 'off', + + /** + * https://eslint.org/docs/1.0.0/rules/no-throw-literal + */ + '@typescript-eslint/no-throw-literal': 'error', + + /** + * https://github.com/typescript-eslint/typescript-eslint/blob/master/packages/eslint-plugin/docs/rules/no-unnecessary-boolean-literal-compare.md + */ + '@typescript-eslint/no-unnecessary-boolean-literal-compare': 'error', + + /** + * https://github.com/typescript-eslint/typescript-eslint/blob/master/packages/eslint-plugin/docs/rules/no-unnecessary-qualifier.md + */ + '@typescript-eslint/no-unnecessary-qualifier': 'error', + + /** + * https://github.com/typescript-eslint/typescript-eslint/blob/master/packages/eslint-plugin/docs/rules/no-unused-expressions.md + */ + '@typescript-eslint/no-unused-expressions': 'error', + + /** + * https://github.com/typescript-eslint/typescript-eslint/blob/master/packages/eslint-plugin/docs/rules/no-unused-vars.md + */ + '@typescript-eslint/no-unused-vars': ['error', { argsIgnorePattern: '_' }], + + /** + * https://github.com/typescript-eslint/typescript-eslint/blob/master/packages/eslint-plugin/docs/rules/prefer-nullish-coalescing.md + */ + '@typescript-eslint/prefer-nullish-coalescing': 'error', + + /** + * https://github.com/typescript-eslint/typescript-eslint/blob/master/packages/eslint-plugin/docs/rules/prefer-optional-chain.md + */ + '@typescript-eslint/prefer-optional-chain': 'error', + + /** + * https://github.com/typescript-eslint/typescript-eslint/blob/master/packages/eslint-plugin/docs/rules/promise-function-async.md + */ + '@typescript-eslint/promise-function-async': 'error', + + // ---------------------------------- + // eslint-plugin-import + // ---------------------------------- + + /** + * https://github.com/import-js/eslint-plugin-import/blob/master/docs/rules/no-default-export.md + */ + 'import/no-default-export': 'error', + + /** + * https://github.com/import-js/eslint-plugin-import/blob/master/docs/rules/order.md + */ + 'import/order': 'error', + + // ****************************************************************** + // overrides to base ruleset + // ****************************************************************** + + // ---------------------------------- + // ESLint + // ---------------------------------- + + /** + * https://eslint.org/docs/rules/class-methods-use-this + */ + 'class-methods-use-this': 'off', + + /** + * https://eslint.org/docs/rules/eqeqeq + */ + eqeqeq: 'error', + + /** + * https://eslint.org/docs/rules/no-plusplus + */ + 'no-plusplus': 'off', + + /** + * https://eslint.org/docs/rules/object-shorthand + */ + 'object-shorthand': 'error', + + /** + * https://eslint.org/docs/rules/prefer-const + */ + 'prefer-const': 'error', + + /** + * https://eslint.org/docs/rules/prefer-spread + */ + 'prefer-spread': 'error', + + // ---------------------------------- + // import + // ---------------------------------- + + /** + * https://github.com/import-js/eslint-plugin-import/blob/main/docs/rules/prefer-default-export.md + */ + 'import/prefer-default-export': 'off', + }, +}; diff --git a/packages/@n8n_io/eslint-config/frontend.js b/packages/@n8n_io/eslint-config/frontend.js new file mode 100644 index 0000000000..3b0712fdec --- /dev/null +++ b/packages/@n8n_io/eslint-config/frontend.js @@ -0,0 +1,39 @@ +/** + * @type {import('@types/eslint').ESLint.ConfigData} + */ +module.exports = { + plugins: ['vue'], + + extends: [ + 'plugin:vue/essential', + '@vue/typescript', + '@n8n_io/eslint-config/base', + ], + + env: { + browser: true, + es6: true, + node: true, + }, + + parser: 'vue-eslint-parser', + parserOptions: { + parser: '@typescript-eslint/parser', + }, + + ignorePatterns: [ + '**/*.js', + '**/*.d.ts', + 'vite.config.ts', + ], + + rules: { + 'no-console': process.env.NODE_ENV === 'production' ? 'error' : 'off', + 'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off', + semi: [2, 'always'], + indent: ['error', 'tab'], + 'comma-dangle': ['error', 'always-multiline'], + 'no-tabs': 0, + 'no-labels': 0, + }, +}; diff --git a/packages/@n8n_io/eslint-config/node.js b/packages/@n8n_io/eslint-config/node.js new file mode 100644 index 0000000000..9c5cadad92 --- /dev/null +++ b/packages/@n8n_io/eslint-config/node.js @@ -0,0 +1,11 @@ +/** + * @type {import('@types/eslint').ESLint.ConfigData} + */ +module.exports = { + extends: ['@n8n_io/eslint-config/base'], + + env: { + es6: true, + node: true, + }, +}; diff --git a/packages/@n8n_io/eslint-config/package.json b/packages/@n8n_io/eslint-config/package.json new file mode 100644 index 0000000000..0591ad91e6 --- /dev/null +++ b/packages/@n8n_io/eslint-config/package.json @@ -0,0 +1,16 @@ +{ + "name": "@n8n_io/eslint-config", + "private": true, + "devDependencies": { + "@types/eslint": "8.4.6", + "@typescript-eslint/eslint-plugin": "^5.36.2", + "@typescript-eslint/parser": "^5.36.2", + "@vue/eslint-config-typescript": "^11.0.0", + "eslint": "8.23.0", + "eslint-config-airbnb-typescript": "^17.0.0", + "eslint-config-prettier": "^8.5.0", + "eslint-plugin-import": "^2.26.0", + "eslint-plugin-prettier": "^4.2.1", + "eslint-plugin-vue": "^9.4.0" + } +} diff --git a/packages/cli/.eslintrc.js b/packages/cli/.eslintrc.js new file mode 100644 index 0000000000..35596b779b --- /dev/null +++ b/packages/cli/.eslintrc.js @@ -0,0 +1,16 @@ +/** + * @type {import('@types/eslint').ESLint.ConfigData} + */ +module.exports = { + extends: ['@n8n_io/eslint-config/node'], + ignorePatterns: [ + 'jest.config.js', + // TODO: Remove these + 'src/databases/migrations/**', + 'src/databases/ormconfig.ts', + ], + rules: { + // TODO: Remove this + 'import/order': 'off', + }, + }; diff --git a/packages/cli/package.json b/packages/cli/package.json index 242ba6318c..ae656abdfb 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -22,18 +22,18 @@ "build": "node scripts/build.mjs", "dev": "concurrently -k -n \"TypeScript,Node\" -c \"yellow.bold,cyan.bold\" \"npm run watch\" \"nodemon\"", "format": "cd ../.. && node_modules/prettier/bin-prettier.js packages/cli/**/**.ts --write", - "lint": "cd ../.. && node_modules/eslint/bin/eslint.js packages/cli", - "lintfix": "cd ../.. && node_modules/eslint/bin/eslint.js packages/cli --fix", + "lint": "eslint .", + "lintfix": "eslint . --fix", "postpack": "rm -f oclif.manifest.json", "prepack": "oclif-dev manifest", "start": "run-script-os", "start:default": "cd bin && ./n8n", "start:windows": "cd bin && n8n", "test": "npm run test:sqlite", - "test:sqlite": "export N8N_LOG_LEVEL=silent && export DB_TYPE=sqlite && jest --forceExit", - "test:postgres": "export N8N_LOG_LEVEL=silent && export DB_TYPE=postgresdb && jest", - "test:postgres:alt-schema": "export DB_POSTGRESDB_SCHEMA=alt_schema && npm run test:postgres", - "test:mysql": "export N8N_LOG_LEVEL=silent && export DB_TYPE=mysqldb && jest", + "test:sqlite": "N8N_LOG_LEVEL=silent DB_TYPE=sqlite jest --forceExit", + "test:postgres": "N8N_LOG_LEVEL=silent DB_TYPE=postgresdb jest", + "test:postgres:alt-schema": "DB_POSTGRESDB_SCHEMA=alt_schema npm run test:postgres", + "test:mysql": "N8N_LOG_LEVEL=silent DB_TYPE=mysqldb jest", "watch": "tsc --watch", "typeorm": "ts-node -T ../../node_modules/typeorm/cli.js" }, @@ -59,6 +59,7 @@ ], "devDependencies": { "@apidevtools/swagger-cli": "4.0.0", + "@n8n_io/eslint-config": "", "@oclif/dev-cli": "^1.22.2", "@types/basic-auth": "^1.1.2", "@types/bcryptjs": "^2.4.2", diff --git a/packages/cli/src/databases/entities/User.ts b/packages/cli/src/databases/entities/User.ts index 591f26f5b7..e01e5b2d33 100644 --- a/packages/cli/src/databases/entities/User.ts +++ b/packages/cli/src/databases/entities/User.ts @@ -149,6 +149,6 @@ export class User { @AfterLoad() @AfterUpdate() computeIsPending(): void { - this.isPending = this.password == null; + this.isPending = this.password === null; } } diff --git a/packages/core/.eslintrc.js b/packages/core/.eslintrc.js new file mode 100644 index 0000000000..4e71be5b40 --- /dev/null +++ b/packages/core/.eslintrc.js @@ -0,0 +1,10 @@ +/** + * @type {import('@types/eslint').ESLint.ConfigData} + */ +module.exports = { + extends: ['@n8n_io/eslint-config/node'], + rules: { + // TODO: Remove this + 'import/order': 'off', + }, +}; diff --git a/packages/core/package.json b/packages/core/package.json index 539ac3f6c2..b61b8d78d7 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -18,8 +18,8 @@ "build": "tsc", "dev": "npm run watch", "format": "cd ../.. && node_modules/prettier/bin-prettier.js packages/core/**/**.ts --write", - "lint": "cd ../.. && node_modules/eslint/bin/eslint.js packages/core", - "lintfix": "cd ../.. && node_modules/eslint/bin/eslint.js packages/core --fix", + "lint": "eslint .", + "lintfix": "eslint . --fix", "watch": "tsc --watch", "test": "jest" }, @@ -27,6 +27,7 @@ "dist" ], "devDependencies": { + "@n8n_io/eslint-config": "", "@types/cron": "~1.7.1", "@types/crypto-js": "^4.0.1", "@types/express": "^4.17.6", diff --git a/packages/design-system/.eslintrc.js b/packages/design-system/.eslintrc.js index 3d4832a690..1924d2f23b 100644 --- a/packages/design-system/.eslintrc.js +++ b/packages/design-system/.eslintrc.js @@ -1,19 +1,27 @@ +/** + * @type {import('@types/eslint').ESLint.ConfigData} + */ module.exports = { - root: true, - env: { - node: true, - }, - extends: ['plugin:vue/essential', '@vue/typescript'], - rules: { - 'no-console': process.env.NODE_ENV === 'production' ? 'error' : 'off', - 'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off', - semi: [2, 'always'], - indent: ['error', 'tab'], - 'comma-dangle': ['error', 'always-multiline'], - 'no-tabs': 0, - 'no-labels': 0, - }, + extends: ['@n8n_io/eslint-config/frontend'], + parserOptions: { - parser: '@typescript-eslint/parser', + project: ['./tsconfig.json'], }, + + rules: { + // TODO: Remove these + 'import/no-default-export': 'off', + 'import/no-extraneous-dependencies': 'off', + 'import/order': 'off', + 'prettier/prettier': 'off', + '@typescript-eslint/member-delimiter-style': 'off', + '@typescript-eslint/naming-convention': 'off', + '@typescript-eslint/no-explicit-any': 'off', + '@typescript-eslint/no-unsafe-argument': 'off', + '@typescript-eslint/no-unsafe-return': 'off', + '@typescript-eslint/no-unused-vars': 'off', + '@typescript-eslint/prefer-nullish-coalescing': 'off', + '@typescript-eslint/prefer-optional-chain': 'off', + '@typescript-eslint/restrict-template-expressions': 'off', + } }; diff --git a/packages/design-system/package.json b/packages/design-system/package.json index 4c3a80f4fc..eb9a095d56 100644 --- a/packages/design-system/package.json +++ b/packages/design-system/package.json @@ -22,8 +22,8 @@ "test:dev": "vitest", "build:storybook": "build-storybook", "storybook": "start-storybook -p 6006", - "lint": "tslint -p tsconfig.json -c tslint.json", - "lintfix": "tslint --fix -p tsconfig.json -c tslint.json", + "lint": "tslint -p tsconfig.json -c tslint.json && eslint .", + "lintfix": "tslint --fix -p tsconfig.json -c tslint.json && eslint . --fix", "build:theme": "gulp build:theme", "watch:theme": "gulp watch:theme" }, @@ -38,6 +38,7 @@ "@fortawesome/fontawesome-svg-core": "^1.2.35", "@fortawesome/free-solid-svg-icons": "^5.15.3", "@fortawesome/vue-fontawesome": "^2.0.2", + "@n8n_io/eslint-config": "", "@storybook/addon-actions": "^6.5.10", "@storybook/addon-essentials": "^6.5.10", "@storybook/addon-links": "^6.5.10", @@ -48,18 +49,11 @@ "@types/jest": "^27.4.0", "@types/markdown-it": "^12.2.3", "@types/sanitize-html": "^2.6.2", - "@typescript-eslint/eslint-plugin": "^5.0.0", - "@typescript-eslint/parser": "^5.0.0", "@vue/cli-plugin-babel": "~4.5.19", - "@vue/eslint-config-prettier": "^6.0.0", - "@vue/eslint-config-typescript": "^7.0.0", "@vue/test-utils": "^1.0.3", "babel-loader": "^8.2.2", "c8": "7.11.0", "core-js": "^3.6.5", - "eslint": "^8.0.0", - "eslint-plugin-prettier": "^3.4.0", - "eslint-plugin-vue": "^7.16.0", "gulp": "^4.0.0", "gulp-autoprefixer": "^4.0.0", "gulp-clean-css": "^4.3.0", diff --git a/packages/editor-ui/.eslintrc.js b/packages/editor-ui/.eslintrc.js index e3599c5d62..568f6d0f83 100644 --- a/packages/editor-ui/.eslintrc.js +++ b/packages/editor-ui/.eslintrc.js @@ -1,22 +1,53 @@ +/** + * @type {import('@types/eslint').ESLint.ConfigData} + */ module.exports = { - root: true, - env: { - node: true, - }, - 'extends': [ - 'plugin:vue/essential', - '@vue/typescript', - ], - rules: { - 'no-console': process.env.NODE_ENV === 'production' ? 'error' : 'off', - 'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off', - 'semi': [2, 'always'], - 'indent': ['error', 'tab', { "SwitchCase": 1 }], - 'comma-dangle': ['error', 'always-multiline'], - 'no-tabs': 0, - 'no-labels': 0, - }, + extends: ['@n8n_io/eslint-config/frontend'], + parserOptions: { - parser: '@typescript-eslint/parser', + project: ['./tsconfig.json'], + }, + + rules: { + // TODO: Remove these + 'id-denylist': 'off', + 'import/extensions': 'off', + 'import/no-default-export': 'off', + 'import/no-extraneous-dependencies': 'off', + 'import/order': 'off', + 'indent': 'off', + 'prettier/prettier': 'off', + '@typescript-eslint/ban-types': 'off', + '@typescript-eslint/dot-notation': 'off', + '@typescript-eslint/lines-between-class-members': 'off', + '@typescript-eslint/member-delimiter-style': 'off', + '@typescript-eslint/naming-convention': 'off', + '@typescript-eslint/no-duplicate-imports': 'off', + '@typescript-eslint/no-empty-interface': 'off', + '@typescript-eslint/no-explicit-any': 'off', + '@typescript-eslint/no-floating-promises': 'off', + '@typescript-eslint/no-for-in-array': 'off', + '@typescript-eslint/no-loop-func': 'off', + '@typescript-eslint/no-non-null-assertion': 'off', + '@typescript-eslint/no-shadow': 'off', + '@typescript-eslint/no-this-alias': 'off', + '@typescript-eslint/no-unnecessary-boolean-literal-compare': 'off', + '@typescript-eslint/no-unnecessary-type-assertion': 'off', + '@typescript-eslint/no-unsafe-argument': 'off', + '@typescript-eslint/no-unsafe-assignment': 'off', + '@typescript-eslint/no-unsafe-call': 'off', + '@typescript-eslint/no-unsafe-member-access': 'off', + '@typescript-eslint/no-unsafe-return': 'off', + '@typescript-eslint/no-unused-expressions': 'off', + '@typescript-eslint/no-unused-vars': 'off', + '@typescript-eslint/no-use-before-define': 'off', + '@typescript-eslint/no-var-requires': 'off', + '@typescript-eslint/prefer-nullish-coalescing': 'off', + '@typescript-eslint/prefer-optional-chain': 'off', + '@typescript-eslint/promise-function-async': 'off', + '@typescript-eslint/restrict-plus-operands': 'off', + '@typescript-eslint/restrict-template-expressions': 'off', + '@typescript-eslint/return-await': 'off', + '@typescript-eslint/unbound-method': 'off', }, }; diff --git a/packages/editor-ui/package.json b/packages/editor-ui/package.json index 8a8a27c642..37f60a7b24 100644 --- a/packages/editor-ui/package.json +++ b/packages/editor-ui/package.json @@ -17,8 +17,8 @@ "build": "cross-env VUE_APP_PUBLIC_PATH=\"/%BASE_PATH%/\" vue-cli-service build", "dev": "npm run serve", "format": "cd ../.. && node_modules/prettier/bin-prettier.js packages/editor-ui/**/**.ts --write", - "lint": "tslint -p tsconfig.json -c tslint.json", - "lintfix": "tslint --fix -p tsconfig.json -c tslint.json", + "lint": "tslint -p tsconfig.json -c tslint.json && eslint .", + "lintfix": "tslint --fix -p tsconfig.json -c tslint.json && eslint . --fix", "serve": "cross-env VUE_APP_URL_BASE_API=http://localhost:5678/ vue-cli-service serve", "test:e2e": "vue-cli-service test:e2e", "test:unit": "vue-cli-service test:unit" @@ -41,6 +41,7 @@ "@fortawesome/fontawesome-svg-core": "^1.2.35", "@fortawesome/free-solid-svg-icons": "^5.15.3", "@fortawesome/vue-fontawesome": "^2.0.2", + "@n8n_io/eslint-config": "", "@types/dateformat": "^3.0.0", "@types/express": "^4.17.6", "@types/file-saver": "^2.0.1", @@ -52,23 +53,16 @@ "@types/node": "^16.11.22", "@types/quill": "^2.0.1", "@types/uuid": "^8.3.2", - "@typescript-eslint/eslint-plugin": "^5.0.0", - "@typescript-eslint/parser": "^5.0.0", "@vue/cli-plugin-babel": "~4.5.19", "@vue/cli-plugin-typescript": "~4.5.19", "@vue/cli-plugin-unit-jest": "~4.5.19", "@vue/cli-service": "~4.5.19", - "@vue/eslint-config-standard": "^6.1.0", - "@vue/eslint-config-typescript": "^11.0.0", "@vue/test-utils": "^1.0.3", "axios": "^0.21.1", "babel-core": "7.0.0-bridge.0", "babel-eslint": "^10.0.1", "cross-env": "^7.0.2", "dateformat": "^3.0.3", - "eslint": "^8.0.0", - "eslint-plugin-import": "^2.23.4", - "eslint-plugin-vue": "^7.16.0", "file-saver": "^2.0.2", "flatted": "^3.2.4", "jquery": "^3.4.1", diff --git a/packages/editor-ui/tests/e2e/.eslintrc.js b/packages/editor-ui/tests/e2e/.eslintrc.js index e1d2869e17..d39543082c 100644 --- a/packages/editor-ui/tests/e2e/.eslintrc.js +++ b/packages/editor-ui/tests/e2e/.eslintrc.js @@ -1,10 +1,6 @@ module.exports = { - plugins: [ - 'cypress', - ], env: { mocha: true, - 'cypress/globals': true, }, rules: { strict: 'off', diff --git a/packages/node-dev/.eslintrc.js b/packages/node-dev/.eslintrc.js new file mode 100644 index 0000000000..0fa7780bcc --- /dev/null +++ b/packages/node-dev/.eslintrc.js @@ -0,0 +1,12 @@ +/** + * @type {import('@types/eslint').ESLint.ConfigData} + */ +module.exports = { + extends: ['@n8n_io/eslint-config/base'], + ignorePatterns: [ + 'templates/**', // TODO: remove this + ], + rules: { + 'import/order': 'off', // TODO: remove this + }, +}; diff --git a/packages/node-dev/package.json b/packages/node-dev/package.json index a5f7772430..65267b5d08 100644 --- a/packages/node-dev/package.json +++ b/packages/node-dev/package.json @@ -23,8 +23,8 @@ "build": "", "build-node-dev": "tsc", "format": "cd ../.. && node_modules/prettier/bin-prettier.js packages/node-dev/**/**.ts --write", - "lint": "cd ../.. && node_modules/eslint/bin/eslint.js packages/node-dev", - "lintfix": "cd ../.. && node_modules/eslint/bin/eslint.js packages/node-dev --fix", + "lint": "eslint .", + "lintfix": "eslint . --fix", "postpack": "rm -f oclif.manifest.json", "prepack": "echo \"Building project...\" && rm -rf dist && tsc -b && oclif-dev manifest", "watch": "tsc --watch" @@ -46,6 +46,7 @@ "src/tsconfig-build.json" ], "devDependencies": { + "@n8n_io/eslint-config": "", "@oclif/dev-cli": "^1.22.2", "@types/copyfiles": "^2.1.1", "@types/express": "^4.17.6", diff --git a/packages/nodes-base/.eslintrc.js b/packages/nodes-base/.eslintrc.js new file mode 100644 index 0000000000..92e37650dc --- /dev/null +++ b/packages/nodes-base/.eslintrc.js @@ -0,0 +1,169 @@ +/** + * @type {import('@types/eslint').ESLint.ConfigData} + */ +module.exports = { + extends: ['@n8n_io/eslint-config/base'], + parserOptions: { + project: ['./tsconfig.json'], + }, + + rules: { + // TODO: remove all the following rules + 'eqeqeq': 'off', + 'id-denylist': 'off', + 'import/extensions': 'off', + 'import/order': 'off', + 'prefer-const': 'off', + 'prefer-spread': 'off', + 'prettier/prettier': 'off', + 'import/no-extraneous-dependencies': 'off', + + '@typescript-eslint/array-type': 'off', + '@typescript-eslint/await-thenable': 'off', + '@typescript-eslint/ban-types': 'off', + '@typescript-eslint/default-param-last': 'off', + '@typescript-eslint/dot-notation': 'off', + '@typescript-eslint/lines-between-class-members': 'off', + '@typescript-eslint/member-delimiter-style': 'off', + '@typescript-eslint/naming-convention': [ + 'error', + { selector: 'memberLike', format: null }, + ], + '@typescript-eslint/no-duplicate-imports': 'off', + '@typescript-eslint/no-empty-interface': 'off', + '@typescript-eslint/no-explicit-any': 'off', + '@typescript-eslint/no-floating-promises': 'off', + '@typescript-eslint/no-for-in-array': 'off', + '@typescript-eslint/no-invalid-void-type': 'off', + '@typescript-eslint/no-loop-func': 'off', + '@typescript-eslint/no-non-null-assertion': 'off', + '@typescript-eslint/no-shadow': 'off', + '@typescript-eslint/no-this-alias': 'off', + '@typescript-eslint/no-throw-literal': 'off', + '@typescript-eslint/no-unnecessary-type-assertion': 'off', + '@typescript-eslint/no-unnecessary-boolean-literal-compare': 'off', + '@typescript-eslint/no-unnecessary-qualifier': 'off', + '@typescript-eslint/no-unsafe-argument': 'off', + '@typescript-eslint/no-unsafe-assignment': 'off', + '@typescript-eslint/no-unsafe-call': 'off', + '@typescript-eslint/no-unsafe-member-access': 'off', + '@typescript-eslint/no-unsafe-return': 'off', + '@typescript-eslint/no-unused-expressions': 'off', + '@typescript-eslint/no-unused-vars': 'off', + '@typescript-eslint/no-use-before-define': 'off', + '@typescript-eslint/no-var-requires': 'off', + '@typescript-eslint/prefer-nullish-coalescing': 'off', + '@typescript-eslint/prefer-optional-chain': 'off', + '@typescript-eslint/promise-function-async': 'off', + '@typescript-eslint/restrict-plus-operands': 'off', + '@typescript-eslint/restrict-template-expressions': 'off', + '@typescript-eslint/return-await': 'off', + '@typescript-eslint/unbound-method': 'off', + }, + + overrides: [ + { + files: ['./credentials/*.ts'], + plugins: ['eslint-plugin-n8n-nodes-base'], + rules: { + 'n8n-nodes-base/cred-class-field-authenticate-type-assertion': 'error', + 'n8n-nodes-base/cred-class-field-display-name-missing-oauth2': 'error', + 'n8n-nodes-base/cred-class-field-name-missing-oauth2': 'error', + 'n8n-nodes-base/cred-class-field-name-unsuffixed': 'error', + 'n8n-nodes-base/cred-class-field-name-uppercase-first-char': 'error', + 'n8n-nodes-base/cred-class-name-missing-oauth2-suffix': 'error', + 'n8n-nodes-base/cred-class-name-unsuffixed': 'error', + 'n8n-nodes-base/cred-filename-against-convention': 'error', + }, + }, + { + files: ['./nodes/**/*.ts'], + plugins: ['eslint-plugin-n8n-nodes-base'], + rules: { + 'n8n-nodes-base/node-class-description-credentials-name-unsuffixed': 'error', + 'n8n-nodes-base/node-class-description-display-name-unsuffixed-trigger-node': 'error', + 'n8n-nodes-base/node-class-description-empty-string': 'error', + 'n8n-nodes-base/node-class-description-icon-not-svg': 'error', + 'n8n-nodes-base/node-class-description-inputs-wrong-regular-node': 'error', + 'n8n-nodes-base/node-class-description-inputs-wrong-trigger-node': 'error', + 'n8n-nodes-base/node-class-description-missing-subtitle': 'error', + 'n8n-nodes-base/node-class-description-name-unsuffixed-trigger-node': 'error', + 'n8n-nodes-base/node-class-description-outputs-wrong': 'error', + 'n8n-nodes-base/node-dirname-against-convention': 'error', + 'n8n-nodes-base/node-execute-block-double-assertion-for-items': 'error', + 'n8n-nodes-base/node-execute-block-wrong-error-thrown': 'error', + 'n8n-nodes-base/node-filename-against-convention': 'error', + 'n8n-nodes-base/node-param-array-type-assertion': 'error', + 'n8n-nodes-base/node-param-collection-type-unsorted-items': 'error', + 'n8n-nodes-base/node-param-color-type-unused': 'error', + 'n8n-nodes-base/node-param-default-missing': 'error', + 'n8n-nodes-base/node-param-default-wrong-for-boolean': 'error', + 'n8n-nodes-base/node-param-default-wrong-for-collection': 'error', + 'n8n-nodes-base/node-param-default-wrong-for-fixed-collection': 'error', + 'n8n-nodes-base/node-param-default-wrong-for-fixed-collection': 'error', + 'n8n-nodes-base/node-param-default-wrong-for-multi-options': 'error', + 'n8n-nodes-base/node-param-default-wrong-for-number': 'error', + 'n8n-nodes-base/node-param-default-wrong-for-simplify': 'error', + 'n8n-nodes-base/node-param-default-wrong-for-string': 'error', + 'n8n-nodes-base/node-param-description-boolean-without-whether': 'error', + 'n8n-nodes-base/node-param-description-comma-separated-hyphen': 'error', + 'n8n-nodes-base/node-param-description-empty-string': 'error', + 'n8n-nodes-base/node-param-description-excess-final-period': 'error', + 'n8n-nodes-base/node-param-description-excess-inner-whitespace': 'error', + 'n8n-nodes-base/node-param-description-identical-to-display-name': 'error', + 'n8n-nodes-base/node-param-description-line-break-html-tag': 'error', + 'n8n-nodes-base/node-param-description-lowercase-first-char': 'error', + 'n8n-nodes-base/node-param-description-miscased-id': 'error', + 'n8n-nodes-base/node-param-description-miscased-json': 'error', + 'n8n-nodes-base/node-param-description-miscased-url': 'error', + 'n8n-nodes-base/node-param-description-missing-final-period': 'error', + 'n8n-nodes-base/node-param-description-missing-for-ignore-ssl-issues': 'error', + 'n8n-nodes-base/node-param-description-missing-for-return-all': 'error', + 'n8n-nodes-base/node-param-description-missing-for-simplify': 'error', + 'n8n-nodes-base/node-param-description-missing-from-dynamic-multi-options': 'error', + 'n8n-nodes-base/node-param-description-missing-from-dynamic-options': 'error', + 'n8n-nodes-base/node-param-description-missing-from-limit': 'error', + 'n8n-nodes-base/node-param-description-unencoded-angle-brackets': 'error', + 'n8n-nodes-base/node-param-description-unneeded-backticks': 'error', + 'n8n-nodes-base/node-param-description-untrimmed': 'error', + 'n8n-nodes-base/node-param-description-url-missing-protocol': 'error', + 'n8n-nodes-base/node-param-description-weak': 'error', + 'n8n-nodes-base/node-param-description-wrong-for-dynamic-multi-options': 'error', + 'n8n-nodes-base/node-param-description-wrong-for-dynamic-options': 'error', + 'n8n-nodes-base/node-param-description-wrong-for-ignore-ssl-issues': 'error', + 'n8n-nodes-base/node-param-description-wrong-for-limit': 'error', + 'n8n-nodes-base/node-param-description-wrong-for-return-all': 'error', + 'n8n-nodes-base/node-param-description-wrong-for-simplify': 'error', + 'n8n-nodes-base/node-param-description-wrong-for-upsert': 'error', + 'n8n-nodes-base/node-param-display-name-excess-inner-whitespace': 'error', + 'n8n-nodes-base/node-param-display-name-miscased-id': 'error', + 'n8n-nodes-base/node-param-display-name-miscased': 'error', + 'n8n-nodes-base/node-param-display-name-not-first-position': 'error', + 'n8n-nodes-base/node-param-display-name-untrimmed': 'error', + 'n8n-nodes-base/node-param-display-name-wrong-for-dynamic-multi-options': 'error', + 'n8n-nodes-base/node-param-display-name-wrong-for-dynamic-options': 'error', + 'n8n-nodes-base/node-param-display-name-wrong-for-simplify': 'error', + 'n8n-nodes-base/node-param-display-name-wrong-for-update-fields': 'error', + 'n8n-nodes-base/node-param-min-value-wrong-for-limit': 'error', + 'n8n-nodes-base/node-param-multi-options-type-unsorted-items': 'error', + 'n8n-nodes-base/node-param-operation-option-action-wrong-for-get-many': 'error', + 'n8n-nodes-base/node-param-operation-option-without-action': 'error', + 'n8n-nodes-base/node-param-operation-without-no-data-expression': 'error', + 'n8n-nodes-base/node-param-option-description-identical-to-name': 'error', + 'n8n-nodes-base/node-param-option-name-containing-star': 'error', + 'n8n-nodes-base/node-param-option-name-duplicate': 'error', + 'n8n-nodes-base/node-param-option-name-wrong-for-get-many': 'error', + 'n8n-nodes-base/node-param-option-name-wrong-for-upsert': 'error', + 'n8n-nodes-base/node-param-option-value-duplicate': 'error', + 'n8n-nodes-base/node-param-options-type-unsorted-items': 'error', + 'n8n-nodes-base/node-param-placeholder-miscased-id': 'error', + 'n8n-nodes-base/node-param-placeholder-missing-email': 'error', + 'n8n-nodes-base/node-param-required-false': 'error', + 'n8n-nodes-base/node-param-resource-with-plural-option': 'error', + 'n8n-nodes-base/node-param-resource-without-no-data-expression': 'error', + 'n8n-nodes-base/node-param-type-options-missing-from-limit': 'error', + 'n8n-nodes-base/node-param-type-options-missing-from-password': 'error', + }, + }, + ], + }; diff --git a/packages/nodes-base/nodes/Spotify/Spotify.node.ts b/packages/nodes-base/nodes/Spotify/Spotify.node.ts index 05f2c86631..0889814ebd 100644 --- a/packages/nodes-base/nodes/Spotify/Spotify.node.ts +++ b/packages/nodes-base/nodes/Spotify/Spotify.node.ts @@ -358,6 +358,7 @@ export class Spotify implements INodeType { resource: ['playlist'], }, }, + // eslint-disable-next-line n8n-nodes-base/node-param-options-type-unsorted-items options: [ { name: 'Add an Item', diff --git a/packages/nodes-base/package.json b/packages/nodes-base/package.json index 0b63b85c58..dbd277af09 100644 --- a/packages/nodes-base/package.json +++ b/packages/nodes-base/package.json @@ -19,8 +19,8 @@ "build": "tsc && gulp build:icons && gulp build:translations", "build:translations": "gulp build:translations", "format": "cd ../.. && node_modules/prettier/bin-prettier.js --write \"packages/nodes-base/**/*.ts\"", - "lint": "tslint -p tsconfig.json -c tslint.json && cd ../../ && node_modules/eslint/bin/eslint.js packages/nodes-base/nodes packages/nodes-base/credentials", - "lintfix": "tslint --fix -p tsconfig.json -c tslint.json && cd ../.. && node_modules/eslint/bin/eslint.js packages/nodes-base/nodes packages/nodes-base/credentials --fix", + "lint": "tslint -p tsconfig.json -c tslint.json && eslint nodes credentials src", + "lintfix": "tslint --fix -p tsconfig.json -c tslint.json && eslint nodes credentials src --fix", "watch": "tsc --watch", "test": "jest" }, @@ -699,6 +699,7 @@ ] }, "devDependencies": { + "@n8n_io/eslint-config": "", "@types/amqplib": "^0.8.2", "@types/aws4": "^1.5.1", "@types/basic-auth": "^1.1.2", @@ -730,7 +731,7 @@ "@types/tmp": "^0.2.0", "@types/uuid": "^8.3.2", "@types/xml2js": "^0.4.3", - "eslint-plugin-n8n-nodes-base": "^1.8.1", + "eslint-plugin-n8n-nodes-base": "^1.9.1", "gulp": "^4.0.0", "jest": "^27.4.7", "n8n-workflow": "~0.115.1", diff --git a/packages/workflow/.eslintrc.js b/packages/workflow/.eslintrc.js new file mode 100644 index 0000000000..e2623ca9aa --- /dev/null +++ b/packages/workflow/.eslintrc.js @@ -0,0 +1,9 @@ +/** + * @type {import('@types/eslint').ESLint.ConfigData} + */ +module.exports = { + extends: ['@n8n_io/eslint-config/base'], + rules: { + 'import/order': 'off', // TODO: remove this + }, +}; diff --git a/packages/workflow/package.json b/packages/workflow/package.json index 7a3ebffa2b..9d9391794a 100644 --- a/packages/workflow/package.json +++ b/packages/workflow/package.json @@ -18,8 +18,8 @@ "dev": "npm run watch", "build": "tsc", "format": "cd ../.. && node_modules/prettier/bin-prettier.js packages/workflow/**/**.ts --write", - "lint": "cd ../.. && node_modules/eslint/bin/eslint.js packages/workflow", - "lintfix": "cd ../.. && node_modules/eslint/bin/eslint.js packages/workflow --fix", + "lint": "eslint .", + "lintfix": "eslint . --fix", "watch": "tsc --watch", "test": "jest", "test:dev": "jest --watch" @@ -28,6 +28,7 @@ "dist" ], "devDependencies": { + "@n8n_io/eslint-config": "", "@types/express": "^4.17.6", "@types/jest": "^27.4.0", "@types/jmespath": "^0.15.0", @@ -37,13 +38,6 @@ "@types/luxon": "^2.0.9", "@types/node": "^16.11.22", "@types/xml2js": "^0.4.3", - "@typescript-eslint/eslint-plugin": "^5.0.0", - "@typescript-eslint/parser": "^5.0.0", - "eslint": "^8.0.0", - "eslint-config-airbnb-typescript": "^12.3.1", - "eslint-config-prettier": "^8.3.0", - "eslint-plugin-import": "^2.23.4", - "eslint-plugin-prettier": "^3.4.0", "jest": "^27.4.7", "jest-environment-jsdom": "^27.5.1", "prettier": "^2.3.2",