summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorsilverwind <me@silverwind.io>2020-06-09 23:31:15 +0200
committerGitHub <noreply@github.com>2020-06-09 17:31:15 -0400
commit19db3f4f0a6739e10aaa36d86ef5fd89dcf71467 (patch)
tree8c9dd890e7767c3582f981381d1c7697833e29c7
parent363e51d19c7ae63a12554fbfb4dd4f59e87db339 (diff)
downloadgitea-19db3f4f0a6739e10aaa36d86ef5fd89dcf71467.tar.gz
gitea-19db3f4f0a6739e10aaa36d86ef5fd89dcf71467.zip
rework eslint config (#11615)
* rework eslint config - use explicit config that only enables rules - upgrade eslint to 7.1.0 - add new plugins with selected rules enabled - fix discovered issues, remove global wipPrefixes * remove if * undo template change * add disabled rules as well for easier config updating * add missing disabled rule * update eslint and plugins * fix new violation * remove deprecated rules Co-authored-by: Lauris BH <lauris@nix.lv>
-rw-r--r--.eslintrc347
-rw-r--r--package-lock.json485
-rw-r--r--package.json7
-rw-r--r--templates/repo/issue/new_form.tmpl7
-rw-r--r--web_src/js/features/clipboard.js17
-rw-r--r--web_src/js/features/codeeditor.js2
-rw-r--r--web_src/js/features/highlight.worker.js4
-rw-r--r--web_src/js/index.js19
8 files changed, 725 insertions, 163 deletions
diff --git a/.eslintrc b/.eslintrc
index 3156f88375..1a7551aee7 100644
--- a/.eslintrc
+++ b/.eslintrc
@@ -1,15 +1,18 @@
root: true
-
-extends:
- - eslint-config-airbnb-base
- - eslint:recommended
+reportUnusedDisableDirectives: true
ignorePatterns:
- /web_src/js/vendor
parserOptions:
+ sourceType: module
ecmaVersion: 2020
+plugins:
+ - eslint-plugin-unicorn
+ - eslint-plugin-import
+ - eslint-plugin-sonarjs
+
env:
browser: true
es6: true
@@ -28,47 +31,373 @@ overrides:
- files: ["web_src/**/*.worker.js", "web_src/js/serviceworker.js"]
env:
worker: true
- rules:
- no-restricted-globals: [0]
rules:
+ accessor-pairs: [2]
+ array-bracket-newline: [0]
+ array-bracket-spacing: [2, never]
+ array-callback-return: [0]
+ array-element-newline: [0]
arrow-body-style: [0]
arrow-parens: [2, always]
+ arrow-spacing: [2, {before: true, after: true}]
+ block-scoped-var: [2]
+ brace-style: [2, 1tbs, {allowSingleLine: true}]
camelcase: [0]
+ capitalized-comments: [0]
+ class-methods-use-this: [0]
comma-dangle: [2, only-multiline]
+ comma-spacing: [2, {before: false, after: true}]
+ comma-style: [2, last]
+ complexity: [0]
+ computed-property-spacing: [2, never]
consistent-return: [0]
+ consistent-this: [0]
+ constructor-super: [2]
+ curly: [0]
+ default-case-last: [2]
default-case: [0]
+ default-param-last: [0]
+ dot-location: [2, property]
+ dot-notation: [0]
+ eol-last: [2]
+ eqeqeq: [2]
+ for-direction: [2]
+ func-call-spacing: [2, never]
+ func-name-matching: [2]
func-names: [0]
+ func-style: [0]
+ function-call-argument-newline: [0]
+ function-paren-newline: [0]
+ generator-star-spacing: [0]
+ getter-return: [2]
+ grouped-accessor-pairs: [2]
+ guard-for-in: [0]
+ id-blacklist: [0]
+ id-length: [0]
+ id-match: [0]
+ implicit-arrow-linebreak: [0]
+ import/default: [0]
+ import/dynamic-import-chunkname: [0]
+ import/export: [2]
+ import/exports-last: [0]
import/extensions: [2, always, {ignorePackages: true}]
+ import/first: [2]
+ import/group-exports: [0]
+ import/max-dependencies: [0]
+ import/named: [2]
+ import/namespace: [0]
+ import/newline-after-import: [0]
+ import/no-absolute-path: [0]
+ import/no-amd: [0]
+ import/no-anonymous-default-export: [0]
+ import/no-commonjs: [0]
+ import/no-cycle: [0]
+ import/no-default-export: [0]
+ import/no-deprecated: [0]
+ import/no-dynamic-require: [0]
+ import/no-extraneous-dependencies: [2]
+ import/no-internal-modules: [0]
+ import/no-mutable-exports: [2]
+ import/no-named-as-default-member: [0]
+ import/no-named-as-default: [2]
+ import/no-named-default: [0]
+ import/no-named-export: [0]
+ import/no-namespace: [0]
+ import/no-nodejs-modules: [0]
+ import/no-relative-parent-imports: [0]
+ import/no-restricted-paths: [0]
+ import/no-self-import: [2]
+ import/no-unassigned-import: [0]
+ import/no-unresolved: [2, {commonjs: true}]
+ import/no-unused-modules: [0]
+ import/no-useless-path-segments: [2, {commonjs: true}]
+ import/no-webpack-loader-syntax: [2]
+ import/order: [0]
import/prefer-default-export: [0]
+ import/unambiguous: [0]
+ indent: [2, 2, {ignoreComments: true, SwitchCase: 1}]
+ init-declarations: [0]
+ key-spacing: [2]
+ keyword-spacing: [2]
+ line-comment-position: [0]
+ linebreak-style: [2, unix]
+ lines-around-comment: [0]
+ lines-between-class-members: [0]
+ max-classes-per-file: [0]
+ max-depth: [0]
max-len: [0]
+ max-lines-per-function: [0]
+ max-lines: [0]
+ max-nested-callbacks: [0]
+ max-params: [0]
+ max-statements-per-line: [0]
+ max-statements: [0]
multiline-comment-style: [2, separate-lines]
+ multiline-ternary: [0]
+ new-cap: [0]
+ new-parens: [2]
newline-per-chained-call: [0]
no-alert: [0]
+ no-array-constructor: [2]
+ no-async-promise-executor: [2]
+ no-await-in-loop: [0]
+ no-bitwise: [0]
+ no-buffer-constructor: [0]
+ no-caller: [2]
+ no-case-declarations: [2]
+ no-class-assign: [2]
+ no-compare-neg-zero: [2]
no-cond-assign: [2, except-parens]
+ no-confusing-arrow: [0]
no-console: [1, {allow: [info, warn, error]}]
+ no-const-assign: [2]
+ no-constant-condition: [0]
+ no-constructor-return: [2]
no-continue: [0]
+ no-control-regex: [0]
+ no-debugger: [1]
+ no-delete-var: [2]
+ no-div-regex: [0]
+ no-dupe-args: [2]
+ no-dupe-class-members: [2]
+ no-dupe-else-if: [2]
+ no-dupe-keys: [2]
+ no-duplicate-case: [2]
+ no-duplicate-imports: [2]
+ no-else-return: [0]
+ no-empty-character-class: [2]
+ no-empty-function: [0]
+ no-empty-pattern: [2]
no-empty: [2, {allowEmptyCatch: true}]
no-eq-null: [2]
+ no-eval: [2]
+ no-ex-assign: [2]
+ no-extend-native: [2]
+ no-extra-bind: [2]
+ no-extra-boolean-cast: [2]
+ no-extra-label: [0]
+ no-extra-parens: [0]
+ no-extra-semi: [2]
+ no-fallthrough: [2]
+ no-floating-decimal: [0]
+ no-func-assign: [2]
+ no-global-assign: [2]
+ no-implicit-coercion: [0]
+ no-implicit-globals: [0]
+ no-implied-eval: [2]
+ no-import-assign: [2]
+ no-inline-comments: [0]
+ no-inner-declarations: [2]
+ no-invalid-regexp: [2]
+ no-invalid-this: [0]
+ no-irregular-whitespace: [2]
+ no-iterator: [2]
+ no-label-var: [2]
+ no-labels: [2]
+ no-lone-blocks: [2]
+ no-lonely-if: [0]
+ no-loop-func: [0]
+ no-loss-of-precision: [2]
+ no-magic-numbers: [0]
+ no-misleading-character-class: [2]
no-mixed-operators: [0]
+ no-mixed-spaces-and-tabs: [2]
no-multi-assign: [0]
+ no-multi-spaces: [2, {ignoreEOLComments: true, exceptions: {Property: true, VariableDeclarator: true}}]
+ no-multi-str: [2]
+ no-negated-condition: [0]
+ no-nested-ternary: [0]
+ no-new-func: [2]
+ no-new-object: [2]
+ no-new-symbol: [2]
+ no-new-wrappers: [2]
no-new: [0]
+ no-obj-calls: [2]
+ no-octal-escape: [2]
+ no-octal: [2]
no-param-reassign: [0]
no-plusplus: [0]
- no-restricted-syntax: [0]
+ no-proto: [2]
+ no-prototype-builtins: [2]
+ no-redeclare: [2]
+ no-regex-spaces: [2]
+ no-restricted-exports: [0]
+ no-restricted-globals: [0]
+ no-restricted-imports: [0]
+ no-restricted-syntax: [2, WithStatement, ForInStatement, LabeledStatement]
+ no-return-assign: [0]
no-return-await: [0]
+ no-script-url: [2]
+ no-self-assign: [2, {props: true}]
+ no-self-compare: [2]
+ no-sequences: [2]
+ no-setter-return: [2]
+ no-shadow-restricted-names: [2]
no-shadow: [0]
+ no-sparse-arrays: [2]
+ no-tabs: [2]
+ no-template-curly-in-string: [2]
+ no-ternary: [0]
+ no-this-before-super: [2]
+ no-throw-literal: [2]
+ no-trailing-spaces: [2]
+ no-undef-init: [2]
+ no-undef: [2, {typeof: true}]
+ no-undefined: [0]
no-underscore-dangle: [0]
- no-unused-vars: [2, {args: all, argsIgnorePattern: ^_, varsIgnorePattern: ^_, ignoreRestSiblings: true}]
- no-use-before-define: [0]
+ no-unexpected-multiline: [2]
+ no-unmodified-loop-condition: [2]
+ no-unneeded-ternary: [0]
+ no-unreachable: [2]
+ no-unsafe-finally: [2]
+ no-unsafe-negation: [2]
+ no-unused-expressions: [2]
+ no-unused-labels: [2]
+ no-unused-vars: [2, {args: all, argsIgnorePattern: ^_, varsIgnorePattern: ^_, caughtErrorsIgnorePattern: ^_, ignoreRestSiblings: false}]
+ no-use-before-define: [2, nofunc]
+ no-useless-backreference: [0]
+ no-useless-call: [2]
+ no-useless-catch: [2]
+ no-useless-computed-key: [2]
+ no-useless-concat: [2]
+ no-useless-constructor: [2]
+ no-useless-escape: [2]
+ no-useless-rename: [2]
+ no-useless-return: [0]
no-var: [2]
+ no-void: [2]
+ no-warning-comments: [0]
+ no-whitespace-before-property: [2]
+ no-with: [2]
+ nonblock-statement-body-position: [2]
object-curly-newline: [0]
object-curly-spacing: [2, never]
+ object-shorthand: [2, always]
one-var-declaration-per-line: [0]
one-var: [0]
+ operator-assignment: [2, always]
operator-linebreak: [2, after]
+ padded-blocks: [2, never]
+ padding-line-between-statements: [0]
+ prefer-arrow-callback: [2, {allowNamedFunctions: true, allowUnboundThis: true}]
prefer-const: [2, {destructuring: all}]
prefer-destructuring: [0]
+ prefer-exponentiation-operator: [2]
+ prefer-named-capture-group: [0]
+ prefer-numeric-literals: [2]
+ prefer-object-spread: [0]
+ prefer-promise-reject-errors: [2, {allowEmptyReject: false}]
+ prefer-regex-literals: [2]
+ prefer-rest-params: [2]
+ prefer-spread: [2]
+ prefer-template: [2]
+ quote-props: [0]
quotes: [2, single, {avoidEscape: true, allowTemplateLiterals: true}]
radix: [2, as-needed]
+ require-atomic-updates: [0]
+ require-await: [0]
+ require-unicode-regexp: [0]
+ require-yield: [2]
+ rest-spread-spacing: [2, never]
+ semi-spacing: [2, {before: false, after: true}]
+ semi-style: [2, last]
semi: [2, always, {omitLastInOneLineBlock: true}]
+ sonarjs/cognitive-complexity: [0]
+ sonarjs/max-switch-cases: [0]
+ sonarjs/no-all-duplicated-branches: [2]
+ sonarjs/no-collapsible-if: [0]
+ sonarjs/no-collection-size-mischeck: [2]
+ sonarjs/no-duplicate-string: [0]
+ sonarjs/no-duplicated-branches: [0]
+ sonarjs/no-element-overwrite: [2]
+ sonarjs/no-extra-arguments: [0]
+ sonarjs/no-identical-conditions: [2]
+ sonarjs/no-identical-expressions: [0]
+ sonarjs/no-identical-functions: [0]
+ sonarjs/no-inverted-boolean-check: [2]
+ sonarjs/no-one-iteration-loop: [2]
+ sonarjs/no-redundant-boolean: [2]
+ sonarjs/no-redundant-jump: [0]
+ sonarjs/no-same-line-conditional: [2]
+ sonarjs/no-small-switch: [0]
+ sonarjs/no-unused-collection: [2]
+ sonarjs/no-use-of-empty-return-value: [2]
+ sonarjs/no-useless-catch: [0]
+ sonarjs/prefer-immediate-return: [0]
+ sonarjs/prefer-object-literal: [2]
+ sonarjs/prefer-single-boolean-return: [0]
+ sonarjs/prefer-while: [2]
+ sort-imports: [0]
+ sort-keys: [0]
+ sort-vars: [0]
+ space-before-blocks: [2, always]
+ space-in-parens: [2, never]
+ space-infix-ops: [2]
+ space-unary-ops: [2]
+ spaced-comment: [2, always]
+ strict: [0]
+ switch-colon-spacing: [2]
+ symbol-description: [2]
+ template-curly-spacing: [2, never]
+ template-tag-spacing: [2, never]
+ unicode-bom: [2, never]
+ unicorn/better-regex: [0]
+ unicorn/catch-error-name: [0]
+ unicorn/consistent-function-scoping: [2]
+ unicorn/custom-error-definition: [0]
+ unicorn/error-message: [0]
+ unicorn/escape-case: [0]
+ unicorn/expiring-todo-comments: [0]
+ unicorn/explicit-length-check: [0]
+ unicorn/filename-case: [0]
+ unicorn/import-index: [0]
+ unicorn/new-for-builtins: [2]
+ unicorn/no-abusive-eslint-disable: [0]
+ unicorn/no-array-instanceof: [0]
+ unicorn/no-console-spaces: [0]
+ unicorn/no-fn-reference-in-iterator: [0]
+ unicorn/no-for-loop: [0]
+ unicorn/no-hex-escape: [0]
+ unicorn/no-keyword-prefix: [0]
+ unicorn/no-nested-ternary: [0]
+ unicorn/no-new-buffer: [0]
+ unicorn/no-null: [0]
+ unicorn/no-process-exit: [0]
+ unicorn/no-reduce: [2]
+ unicorn/no-unreadable-array-destructuring: [0]
+ unicorn/no-unsafe-regex: [0]
+ unicorn/no-unused-properties: [2]
+ unicorn/no-useless-undefined: [0]
+ unicorn/no-zero-fractions: [2]
+ unicorn/number-literal-case: [0]
+ unicorn/prefer-add-event-listener: [2]
+ unicorn/prefer-dataset: [2]
+ unicorn/prefer-event-key: [2]
+ unicorn/prefer-includes: [2]
+ unicorn/prefer-modern-dom-apis: [0]
+ unicorn/prefer-negative-index: [2]
+ unicorn/prefer-node-append: [0]
+ unicorn/prefer-node-remove: [0]
+ unicorn/prefer-number-properties: [0]
+ unicorn/prefer-optional-catch-binding: [2]
+ unicorn/prefer-query-selector: [0]
+ unicorn/prefer-reflect-apply: [0]
+ unicorn/prefer-replace-all: [0]
+ unicorn/prefer-set-has: [0]
+ unicorn/prefer-spread: [0]
+ unicorn/prefer-starts-ends-with: [2]
+ unicorn/prefer-string-slice: [0]
+ unicorn/prefer-text-content: [2]
+ unicorn/prefer-trim-start-end: [2]
+ unicorn/prefer-type-error: [0]
+ unicorn/prevent-abbreviations: [0]
+ unicorn/string-content: [0]
+ unicorn/throw-new-error: [2]
+ use-isnan: [2]
+ valid-typeof: [2, {requireStringLiterals: true}]
+ vars-on-top: [0]
+ wrap-iife: [2, inside]
+ wrap-regex: [0]
+ yield-star-spacing: [2, after]
+ yoda: [2, never]
diff --git a/package-lock.json b/package-lock.json
index a0c65cc93d..cbe7fcde58 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1093,6 +1093,12 @@
"integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==",
"dev": true
},
+ "@types/json5": {
+ "version": "0.0.29",
+ "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz",
+ "integrity": "sha1-7ihweulOEdK4J7y+UnC86n8+ce4=",
+ "dev": true
+ },
"@types/minimist": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.0.tgz",
@@ -2649,6 +2655,12 @@
"tslib": "^1.9.0"
}
},
+ "ci-info": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz",
+ "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==",
+ "dev": true
+ },
"cipher-base": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz",
@@ -2704,6 +2716,15 @@
}
}
},
+ "clean-regexp": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/clean-regexp/-/clean-regexp-1.0.0.tgz",
+ "integrity": "sha1-jffHquUf02h06PjQW5GAvBGj/tc=",
+ "dev": true,
+ "requires": {
+ "escape-string-regexp": "^1.0.5"
+ }
+ },
"clean-stack": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz",
@@ -2937,12 +2958,6 @@
"proto-list": "~1.2.1"
}
},
- "confusing-browser-globals": {
- "version": "1.0.9",
- "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.9.tgz",
- "integrity": "sha512-KbS1Y0jMtyPgIxjO7ZzMAuUpAKMt1SzCL9fsrKsX6b0zJPTaT0SiSPmewwVZg9UAO83HVIlEhZF84LIjZ0lmAw==",
- "dev": true
- },
"console-browserify": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz",
@@ -4043,22 +4058,22 @@
"integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ="
},
"eslint": {
- "version": "6.8.0",
- "resolved": "https://registry.npmjs.org/eslint/-/eslint-6.8.0.tgz",
- "integrity": "sha512-K+Iayyo2LtyYhDSYwz5D5QdWw0hCacNzyq1Y821Xna2xSJj7cijoLLYmLxTQgcgZ9mC61nryMy9S7GRbYpI5Ig==",
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.2.0.tgz",
+ "integrity": "sha512-B3BtEyaDKC5MlfDa2Ha8/D6DsS4fju95zs0hjS3HdGazw+LNayai38A25qMppK37wWGWNYSPOR6oYzlz5MHsRQ==",
"dev": true,
"requires": {
"@babel/code-frame": "^7.0.0",
"ajv": "^6.10.0",
- "chalk": "^2.1.0",
- "cross-spawn": "^6.0.5",
+ "chalk": "^4.0.0",
+ "cross-spawn": "^7.0.2",
"debug": "^4.0.1",
"doctrine": "^3.0.0",
- "eslint-scope": "^5.0.0",
- "eslint-utils": "^1.4.3",
- "eslint-visitor-keys": "^1.1.0",
- "espree": "^6.1.2",
- "esquery": "^1.0.1",
+ "eslint-scope": "^5.1.0",
+ "eslint-utils": "^2.0.0",
+ "eslint-visitor-keys": "^1.2.0",
+ "espree": "^7.1.0",
+ "esquery": "^1.2.0",
"esutils": "^2.0.2",
"file-entry-cache": "^5.0.1",
"functional-red-black-tree": "^1.0.1",
@@ -4071,17 +4086,16 @@
"is-glob": "^4.0.0",
"js-yaml": "^3.13.1",
"json-stable-stringify-without-jsonify": "^1.0.1",
- "levn": "^0.3.0",
+ "levn": "^0.4.1",
"lodash": "^4.17.14",
"minimatch": "^3.0.4",
- "mkdirp": "^0.5.1",
"natural-compare": "^1.4.0",
- "optionator": "^0.8.3",
+ "optionator": "^0.9.1",
"progress": "^2.0.0",
- "regexpp": "^2.0.1",
- "semver": "^6.1.2",
- "strip-ansi": "^5.2.0",
- "strip-json-comments": "^3.0.1",
+ "regexpp": "^3.1.0",
+ "semver": "^7.2.1",
+ "strip-ansi": "^6.0.0",
+ "strip-json-comments": "^3.1.0",
"table": "^5.2.3",
"text-table": "^0.2.0",
"v8-compile-cache": "^2.0.3"
@@ -4120,6 +4134,16 @@
"color-convert": "^2.0.1"
}
},
+ "chalk": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
+ "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ }
+ },
"cli-cursor": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz",
@@ -4144,6 +4168,17 @@
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
"dev": true
},
+ "cross-spawn": {
+ "version": "7.0.3",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
+ "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
+ "dev": true,
+ "requires": {
+ "path-key": "^3.1.0",
+ "shebang-command": "^2.0.0",
+ "which": "^2.0.1"
+ }
+ },
"emoji-regex": {
"version": "8.0.0",
"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
@@ -4151,9 +4186,9 @@
"dev": true
},
"eslint-scope": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.0.0.tgz",
- "integrity": "sha512-oYrhJW7S0bxAFDvWqzvMPRm6pcgcnWc4QnofCAqRTRfQC0JcwenzGglTtsLyIuuWFfkqDG9vz67cnttSd53djw==",
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.0.tgz",
+ "integrity": "sha512-iiGRvtxWqgtx5m8EyQUJihBloE4EnYeGE/bz1wSPwJE6tZuJUtHlhqDM4Xj2ukE8Dyy1+HCZ4hE0fzIVMzb58w==",
"dev": true,
"requires": {
"esrecurse": "^4.1.0",
@@ -4224,15 +4259,6 @@
"ansi-styles": "^4.1.0",
"supports-color": "^7.1.0"
}
- },
- "strip-ansi": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz",
- "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==",
- "dev": true,
- "requires": {
- "ansi-regex": "^5.0.0"
- }
}
}
},
@@ -4263,6 +4289,12 @@
"mimic-fn": "^2.1.0"
}
},
+ "path-key": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
+ "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
+ "dev": true
+ },
"resolve-from": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
@@ -4280,9 +4312,24 @@
}
},
"semver": {
- "version": "6.3.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
- "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
+ "version": "7.3.2",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz",
+ "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==",
+ "dev": true
+ },
+ "shebang-command": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
+ "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
+ "dev": true,
+ "requires": {
+ "shebang-regex": "^3.0.0"
+ }
+ },
+ "shebang-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
+ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
"dev": true
},
"string-width": {
@@ -4294,34 +4341,15 @@
"emoji-regex": "^8.0.0",
"is-fullwidth-code-point": "^3.0.0",
"strip-ansi": "^6.0.0"
- },
- "dependencies": {
- "strip-ansi": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz",
- "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==",
- "dev": true,
- "requires": {
- "ansi-regex": "^5.0.0"
- }
- }
}
},
"strip-ansi": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
- "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz",
+ "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==",
"dev": true,
"requires": {
- "ansi-regex": "^4.1.0"
- },
- "dependencies": {
- "ansi-regex": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
- "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==",
- "dev": true
- }
+ "ansi-regex": "^5.0.0"
}
},
"strip-json-comments": {
@@ -4338,18 +4366,26 @@
"requires": {
"has-flag": "^4.0.0"
}
+ },
+ "which": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
+ "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
+ "dev": true,
+ "requires": {
+ "isexe": "^2.0.0"
+ }
}
}
},
- "eslint-config-airbnb-base": {
- "version": "14.1.0",
- "resolved": "https://registry.npmjs.org/eslint-config-airbnb-base/-/eslint-config-airbnb-base-14.1.0.tgz",
- "integrity": "sha512-+XCcfGyCnbzOnktDVhwsCAx+9DmrzEmuwxyHUJpw+kqBVT744OUBrB09khgFKlK1lshVww6qXGsYPZpavoNjJw==",
+ "eslint-ast-utils": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/eslint-ast-utils/-/eslint-ast-utils-1.1.0.tgz",
+ "integrity": "sha512-otzzTim2/1+lVrlH19EfQQJEhVJSu0zOb9ygb3iapN6UlyaDtyRq4b5U1FuW0v1lRa9Fp/GJyHkSwm6NqABgCA==",
"dev": true,
"requires": {
- "confusing-browser-globals": "^1.0.9",
- "object.assign": "^4.1.0",
- "object.entries": "^1.1.1"
+ "lodash.get": "^4.4.2",
+ "lodash.zip": "^4.2.0"
}
},
"eslint-import-resolver-node": {
@@ -4416,23 +4452,24 @@
}
},
"eslint-plugin-import": {
- "version": "2.20.2",
- "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.20.2.tgz",
- "integrity": "sha512-FObidqpXrR8OnCh4iNsxy+WACztJLXAHBO5hK79T1Hc77PgQZkyDGA5Ag9xAvRpglvLNxhH/zSmZ70/pZ31dHg==",
+ "version": "2.21.1",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.21.1.tgz",
+ "integrity": "sha512-qYOOsgUv63vHof7BqbzuD+Ud34bXHxFJxntuAC1ZappFZXYbRIek3aJ7jc9i2dHDGDyZ/0zlO0cpioES265Lsw==",
"dev": true,
"requires": {
- "array-includes": "^3.0.3",
- "array.prototype.flat": "^1.2.1",
+ "array-includes": "^3.1.1",
+ "array.prototype.flat": "^1.2.3",
"contains-path": "^0.1.0",
"debug": "^2.6.9",
"doctrine": "1.5.0",
- "eslint-import-resolver-node": "^0.3.2",
- "eslint-module-utils": "^2.4.1",
+ "eslint-import-resolver-node": "^0.3.3",
+ "eslint-module-utils": "^2.6.0",
"has": "^1.0.3",
"minimatch": "^3.0.4",
- "object.values": "^1.1.0",
+ "object.values": "^1.1.1",
"read-pkg-up": "^2.0.0",
- "resolve": "^1.12.0"
+ "resolve": "^1.17.0",
+ "tsconfig-paths": "^3.9.0"
},
"dependencies": {
"debug": {
@@ -4525,6 +4562,142 @@
}
}
},
+ "eslint-plugin-sonarjs": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-sonarjs/-/eslint-plugin-sonarjs-0.5.0.tgz",
+ "integrity": "sha512-XW5MnzlRjhXpIdbULC/qAdJYHWw3rRLws/DyawdlPU/IdVr9AmRK1r2LaCvabwKOAW2XYYSo3kDX58E4MrB7PQ==",
+ "dev": true
+ },
+ "eslint-plugin-unicorn": {
+ "version": "20.1.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-unicorn/-/eslint-plugin-unicorn-20.1.0.tgz",
+ "integrity": "sha512-XQxLBJT/gnwyRR6cfYsIK1AdekQchAt5tmcsnldevGjgR2xoZsRUa5/i6e0seNHy2RoT57CkTnbVHwHF8No8LA==",
+ "dev": true,
+ "requires": {
+ "ci-info": "^2.0.0",
+ "clean-regexp": "^1.0.0",
+ "eslint-ast-utils": "^1.1.0",
+ "eslint-template-visitor": "^2.0.0",
+ "eslint-utils": "^2.0.0",
+ "import-modules": "^2.0.0",
+ "lodash": "^4.17.15",
+ "pluralize": "^8.0.0",
+ "read-pkg-up": "^7.0.1",
+ "regexp-tree": "^0.1.21",
+ "reserved-words": "^0.1.2",
+ "safe-regex": "^2.1.1",
+ "semver": "^7.3.2"
+ },
+ "dependencies": {
+ "find-up": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
+ "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
+ "dev": true,
+ "requires": {
+ "locate-path": "^5.0.0",
+ "path-exists": "^4.0.0"
+ }
+ },
+ "locate-path": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
+ "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
+ "dev": true,
+ "requires": {
+ "p-locate": "^4.1.0"
+ }
+ },
+ "p-limit": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
+ "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
+ "dev": true,
+ "requires": {
+ "p-try": "^2.0.0"
+ }
+ },
+ "p-locate": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
+ "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
+ "dev": true,
+ "requires": {
+ "p-limit": "^2.2.0"
+ }
+ },
+ "p-try": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
+ "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
+ "dev": true
+ },
+ "parse-json": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.0.0.tgz",
+ "integrity": "sha512-OOY5b7PAEFV0E2Fir1KOkxchnZNCdowAJgQ5NuxjpBKTRP3pQhwkrkxqQjeoKJ+fO7bCpmIZaogI4eZGDMEGOw==",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "^7.0.0",
+ "error-ex": "^1.3.1",
+ "json-parse-better-errors": "^1.0.1",
+ "lines-and-columns": "^1.1.6"
+ }
+ },
+ "path-exists": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
+ "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
+ "dev": true
+ },
+ "read-pkg": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz",
+ "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==",
+ "dev": true,
+ "requires": {
+ "@types/normalize-package-data": "^2.4.0",
+ "normalize-package-data": "^2.5.0",
+ "parse-json": "^5.0.0",
+ "type-fest": "^0.6.0"
+ },
+ "dependencies": {
+ "type-fest": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz",
+ "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==",
+ "dev": true
+ }
+ }
+ },
+ "read-pkg-up": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz",
+ "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==",
+ "dev": true,
+ "requires": {
+ "find-up": "^4.1.0",
+ "read-pkg": "^5.2.0",
+ "type-fest": "^0.8.1"
+ }
+ },
+ "safe-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-2.1.1.tgz",
+ "integrity": "sha512-rx+x8AMzKb5Q5lQ95Zoi6ZbJqwCLkqi3XuJXp5P3rT8OEc6sZCJG5AE5dU3lsgRr/F4Bs31jSlVN+j5KrsGu9A==",
+ "dev": true,
+ "requires": {
+ "regexp-tree": "~0.1.1"
+ }
+ },
+ "semver": {
+ "version": "7.3.2",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz",
+ "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==",
+ "dev": true
+ }
+ }
+ },
"eslint-scope": {
"version": "4.0.3",
"resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz",
@@ -4534,30 +4707,41 @@
"estraverse": "^4.1.1"
}
},
+ "eslint-template-visitor": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/eslint-template-visitor/-/eslint-template-visitor-2.0.0.tgz",
+ "integrity": "sha512-WijrLXWk/TiiG9FBTeEeb2pj/nD8H4eKIYx1DhTv/c7QoFmelE5P+3gzKUcXWZz88AI2+Wjse9DTV8lXrhcUsw==",
+ "dev": true,
+ "requires": {
+ "eslint-visitor-keys": "^1.1.0",
+ "espree": "^7.0.0",
+ "multimap": "^1.1.0"
+ }
+ },
"eslint-utils": {
- "version": "1.4.3",
- "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.3.tgz",
- "integrity": "sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==",
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.0.0.tgz",
+ "integrity": "sha512-0HCPuJv+7Wv1bACm8y5/ECVfYdfsAm9xmVb7saeFlxjPYALefjhbYoCkBjPdPzGH8wWyTpAez82Fh3VKYEZ8OA==",
"dev": true,
"requires": {
"eslint-visitor-keys": "^1.1.0"
}
},
"eslint-visitor-keys": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz",
- "integrity": "sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A==",
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.2.0.tgz",
+ "integrity": "sha512-WFb4ihckKil6hu3Dp798xdzSfddwKKU3+nGniKF6HfeW6OLd2OUDEPP7TcHtB5+QXOKg2s6B2DaMPE1Nn/kxKQ==",
"dev": true
},
"espree": {
- "version": "6.2.1",
- "resolved": "https://registry.npmjs.org/espree/-/espree-6.2.1.tgz",
- "integrity": "sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw==",
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/espree/-/espree-7.1.0.tgz",
+ "integrity": "sha512-dcorZSyfmm4WTuTnE5Y7MEN1DyoPYy1ZR783QW1FJoenn7RailyWFsq/UL6ZAAA7uXurN9FIpYyUs3OfiIW+Qw==",
"dev": true,
"requires": {
- "acorn": "^7.1.1",
+ "acorn": "^7.2.0",
"acorn-jsx": "^5.2.0",
- "eslint-visitor-keys": "^1.1.0"
+ "eslint-visitor-keys": "^1.2.0"
},
"dependencies": {
"acorn": {
@@ -6962,6 +7146,12 @@
"resolve-cwd": "^2.0.0"
}
},
+ "import-modules": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/import-modules/-/import-modules-2.0.0.tgz",
+ "integrity": "sha512-iczM/v9drffdNnABOKwj0f9G3cFDon99VcG1mxeBsdqnbd+vnQ5c2uAiCHNQITqFTOPaEvwg3VjoWCur0uHLEw==",
+ "dev": true
+ },
"import-regex": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/import-regex/-/import-regex-1.1.0.tgz",
@@ -7804,13 +7994,13 @@
}
},
"levn": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
- "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=",
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
+ "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==",
"dev": true,
"requires": {
- "prelude-ls": "~1.1.2",
- "type-check": "~0.3.2"
+ "prelude-ls": "^1.2.1",
+ "type-check": "~0.4.0"
}
},
"liftoff": {
@@ -8142,6 +8332,12 @@
"resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz",
"integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M="
},
+ "lodash.zip": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/lodash.zip/-/lodash.zip-4.2.0.tgz",
+ "integrity": "sha1-7GZi5IlkCO1KtsVCo5kLcswIACA=",
+ "dev": true
+ },
"log-symbols": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-3.0.0.tgz",
@@ -8934,6 +9130,12 @@
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
},
+ "multimap": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/multimap/-/multimap-1.1.0.tgz",
+ "integrity": "sha512-0ZIR9PasPxGXmRsEF8jsDzndzHDj7tIav+JUmvIFB/WHswliFnquxECT/De7GR4yg99ky/NlRKJT82G1y271bw==",
+ "dev": true
+ },
"multipipe": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/multipipe/-/multipipe-0.1.2.tgz",
@@ -9265,18 +9467,6 @@
}
}
},
- "object.entries": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.1.tgz",
- "integrity": "sha512-ilqR7BgdyZetJutmDPfXCDffGa0/Yzl2ivVNpbx/g4UeWrCdRnFDUBrKJGLhGieRHDATnyZXWBeCb29k9CJysQ==",
- "dev": true,
- "requires": {
- "define-properties": "^1.1.3",
- "es-abstract": "^1.17.0-next.1",
- "function-bind": "^1.1.1",
- "has": "^1.0.3"
- }
- },
"object.getownpropertydescriptors": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.0.tgz",
@@ -9361,17 +9551,17 @@
}
},
"optionator": {
- "version": "0.8.3",
- "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz",
- "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==",
+ "version": "0.9.1",
+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz",
+ "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==",
"dev": true,
"requires": {
- "deep-is": "~0.1.3",
- "fast-levenshtein": "~2.0.6",
- "levn": "~0.3.0",
- "prelude-ls": "~1.1.2",
- "type-check": "~0.3.2",
- "word-wrap": "~1.2.3"
+ "deep-is": "^0.1.3",
+ "fast-levenshtein": "^2.0.6",
+ "levn": "^0.4.1",
+ "prelude-ls": "^1.2.1",
+ "type-check": "^0.4.0",
+ "word-wrap": "^1.2.3"
}
},
"ordered-read-streams": {
@@ -9758,6 +9948,12 @@
"irregular-plurals": "^2.0.0"
}
},
+ "pluralize": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz",
+ "integrity": "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==",
+ "dev": true
+ },
"popper.js": {
"version": "1.16.1",
"resolved": "https://registry.npmjs.org/popper.js/-/popper.js-1.16.1.tgz",
@@ -10818,9 +11014,9 @@
}
},
"prelude-ls": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
- "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=",
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
+ "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==",
"dev": true
},
"prepend-http": {
@@ -11365,6 +11561,12 @@
"safe-regex": "^1.1.0"
}
},
+ "regexp-tree": {
+ "version": "0.1.21",
+ "resolved": "https://registry.npmjs.org/regexp-tree/-/regexp-tree-0.1.21.tgz",
+ "integrity": "sha512-kUUXjX4AnqnR8KRTCrayAo9PzYMRKmVoGgaz2tBuz0MF3g1ZbGebmtW0yFHfFK9CmBjQKeYIgoL22pFLBJY7sw==",
+ "dev": true
+ },
"regexp.prototype.flags": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.0.tgz",
@@ -11375,9 +11577,9 @@
}
},
"regexpp": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz",
- "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==",
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz",
+ "integrity": "sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==",
"dev": true
},
"regexpu-core": {
@@ -11640,6 +11842,12 @@
"resolved": "https://registry.npmjs.org/reselect/-/reselect-4.0.0.tgz",
"integrity": "sha512-qUgANli03jjAyGlnbYVAV5vvnOmJnODyABz51RdBN7M4WaVu8mecZWgyQNkG8Yqe3KRGRt0l4K4B3XVEULC4CA=="
},
+ "reserved-words": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/reserved-words/-/reserved-words-0.1.2.tgz",
+ "integrity": "sha1-AKCUD5jNUBrqqsMWQR2a3FKzGrE=",
+ "dev": true
+ },
"resolve": {
"version": "1.17.0",
"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz",
@@ -13633,6 +13841,35 @@
"integrity": "sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==",
"dev": true
},
+ "tsconfig-paths": {
+ "version": "3.9.0",
+ "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.9.0.tgz",
+ "integrity": "sha512-dRcuzokWhajtZWkQsDVKbWyY+jgcLC5sqJhg2PSgf4ZkH2aHPvaOY8YWGhmjb68b5qqTfasSsDO9k7RUiEmZAw==",
+ "dev": true,
+ "requires": {
+ "@types/json5": "^0.0.29",
+ "json5": "^1.0.1",
+ "minimist": "^1.2.0",
+ "strip-bom": "^3.0.0"
+ },
+ "dependencies": {
+ "json5": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz",
+ "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==",
+ "dev": true,
+ "requires": {
+ "minimist": "^1.2.0"
+ }
+ },
+ "strip-bom": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
+ "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=",
+ "dev": true
+ }
+ }
+ },
"tslib": {
"version": "1.13.0",
"resolved": "https://registry.npmjs.org/tslib/-/tslib-1.13.0.tgz",
@@ -13664,12 +13901,12 @@
"integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg=="
},
"type-check": {
- "version": "0.3.2",
- "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
- "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=",
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
+ "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==",
"dev": true,
"requires": {
- "prelude-ls": "~1.1.2"
+ "prelude-ls": "^1.2.1"
}
},
"type-fest": {
diff --git a/package.json b/package.json
index b80cb867de..fac0dd2cfc 100644
--- a/package.json
+++ b/package.json
@@ -53,9 +53,10 @@
"worker-loader": "2.0.0"
},
"devDependencies": {
- "eslint": "6.8.0",
- "eslint-config-airbnb-base": "14.1.0",
- "eslint-plugin-import": "2.20.2",
+ "eslint": "7.2.0",
+ "eslint-plugin-import": "2.21.1",
+ "eslint-plugin-sonarjs": "0.5.0",
+ "eslint-plugin-unicorn": "20.1.0",
"stylelint": "13.3.3",
"stylelint-config-standard": "20.0.0",
"updates": "10.2.11"
diff --git a/templates/repo/issue/new_form.tmpl b/templates/repo/issue/new_form.tmpl
index a42a4d9ad5..38ccccaf7b 100644
--- a/templates/repo/issue/new_form.tmpl
+++ b/templates/repo/issue/new_form.tmpl
@@ -15,7 +15,7 @@
<div class="field">
<input name="title" id="issue_title" placeholder="{{.i18n.Tr "repo.milestones.title"}}" value="{{.title}}" tabindex="3" autofocus required maxlength="255">
{{if .PageIsComparePull}}
- <div class="title_wip_desc">{{.i18n.Tr "repo.pulls.title_wip_desc" (index .PullRequestWorkInProgressPrefixes 0| Escape) | Safe}}</div>
+ <div class="title_wip_desc" data-wip-prefixes="{{Json .PullRequestWorkInProgressPrefixes}}">{{.i18n.Tr "repo.pulls.title_wip_desc" (index .PullRequestWorkInProgressPrefixes 0| Escape) | Safe}}</div>
{{end}}
</div>
{{template "repo/issue/comment_tab" .}}
@@ -59,7 +59,7 @@
<a class="{{if .IsChecked}}checked{{end}} item" href="#" data-id="{{.ID}}" data-id-selector="#label_{{.ID}}"><span class="octicon-check {{if not .IsChecked}}invisible{{end}}">{{svg "octicon-check" 16}}</span><span class="label color" style="background-color: {{.Color}}"></span> {{.Name | RenderEmoji}}
{{if .Description }}<br><small class="desc">{{.Description | RenderEmoji}}</small>{{end}}</a>
{{end}}
-
+
<div class="ui divider"></div>
{{range .OrgLabels}}
<a class="{{if .IsChecked}}checked{{end}} item" href="#" data-id="{{.ID}}" data-id-selector="#label_{{.ID}}"><span class="octicon-check {{if not .IsChecked}}invisible{{end}}">{{svg "octicon-check" 16}}</span><span class="label color" style="background-color: {{.Color}}"></span> {{.Name | RenderEmoji}}
@@ -176,7 +176,4 @@
</div>
</div>
</form>
-{{if .PageIsComparePull}}
- <script>window.wipPrefixes = {{.PullRequestWorkInProgressPrefixes}}</script>
-{{end}}
diff --git a/web_src/js/features/clipboard.js b/web_src/js/features/clipboard.js
index a3b6b26eb3..32eff981b8 100644
--- a/web_src/js/features/clipboard.js
+++ b/web_src/js/features/clipboard.js
@@ -7,17 +7,16 @@ export default async function initClipboard() {
const clipboard = new ClipboardJS(els);
clipboard.on('success', (e) => {
e.clearSelection();
-
- $(`#${e.trigger.getAttribute('id')}`).popup('destroy');
- e.trigger.setAttribute('data-content', e.trigger.getAttribute('data-success'));
- $(`#${e.trigger.getAttribute('id')}`).popup('show');
- e.trigger.setAttribute('data-content', e.trigger.getAttribute('data-original'));
+ $(e.trigger).popup('destroy');
+ e.trigger.dataset.content = e.trigger.dataset.success;
+ $(e.trigger).popup('show');
+ e.trigger.dataset.content = e.trigger.dataset.original;
});
clipboard.on('error', (e) => {
- $(`#${e.trigger.getAttribute('id')}`).popup('destroy');
- e.trigger.setAttribute('data-content', e.trigger.getAttribute('data-error'));
- $(`#${e.trigger.getAttribute('id')}`).popup('show');
- e.trigger.setAttribute('data-content', e.trigger.getAttribute('data-original'));
+ $(e.trigger).popup('destroy');
+ e.trigger.dataset.content = e.trigger.dataset.error;
+ $(e.trigger).popup('show');
+ e.trigger.dataset.content = e.trigger.dataset.original;
});
}
diff --git a/web_src/js/features/codeeditor.js b/web_src/js/features/codeeditor.js
index 2e268379b2..d9ddb58d00 100644
--- a/web_src/js/features/codeeditor.js
+++ b/web_src/js/features/codeeditor.js
@@ -6,7 +6,7 @@ const languagesByExt = {};
function getEditorconfig(input) {
try {
return JSON.parse(input.dataset.editorconfig);
- } catch (_err) {
+ } catch {
return null;
}
}
diff --git a/web_src/js/features/highlight.worker.js b/web_src/js/features/highlight.worker.js
index 7d6cc4e438..4a0f55f441 100644
--- a/web_src/js/features/highlight.worker.js
+++ b/web_src/js/features/highlight.worker.js
@@ -1,7 +1,7 @@
import {highlightBlock} from 'highlight.js';
import {createWindow} from 'domino';
-self.onmessage = function ({data}) {
+self.addEventListener('message', ({data}) => {
const window = createWindow();
self.document = window.document;
@@ -9,4 +9,4 @@ self.onmessage = function ({data}) {
document.body.innerHTML = html;
highlightBlock(document.body.firstChild);
self.postMessage({index, html: document.body.innerHTML});
-};
+});
diff --git a/web_src/js/index.js b/web_src/js/index.js
index 21809f73fa..efe1663a76 100644
--- a/web_src/js/index.js
+++ b/web_src/js/index.js
@@ -1,4 +1,3 @@
-/* globals wipPrefixes */
/* exported timeAddManual, toggleStopwatch, cancelStopwatch */
/* exported toggleDeadlineForm, setDeadline, updateDeadline, deleteDependencyModal, cancelCodeComment, onOAuthLoginClick */
@@ -2178,8 +2177,9 @@ function initWipTitle() {
$issueTitle.focus();
const value = $issueTitle.val().trim().toUpperCase();
- for (const i in wipPrefixes) {
- if (value.startsWith(wipPrefixes[i].toUpperCase())) {
+ const wipPrefixes = $('.title_wip_desc').data('wip-prefixes');
+ for (const prefix of wipPrefixes) {
+ if (value.startsWith(prefix.toUpperCase())) {
return;
}
}
@@ -2472,10 +2472,9 @@ $(document).ready(async () => {
'div.repository.settings.collaboration': initRepositoryCollaboration
};
- let selector;
- for (selector in routes) {
+ for (const [selector, fn] of Object.entries(routes)) {
if ($(selector).length > 0) {
- routes[selector]();
+ fn();
break;
}
}
@@ -2972,13 +2971,13 @@ function initVueComponents() {
repoClass(repo) {
if (repo.fork) {
return 'octicon-repo-forked';
- } if (repo.mirror) {
+ } else if (repo.mirror) {
return 'octicon-repo-clone';
- } if (repo.template) {
+ } else if (repo.template) {
return `octicon-repo-template${repo.private ? '-private' : ''}`;
- } if (repo.private) {
+ } else if (repo.private) {
return 'octicon-lock';
- } if (repo.internal) {
+ } else if (repo.internal) {
return 'octicon-internal-repo';
}
return 'octicon-repo';