eslint 8.57.1 → 9.39.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +165 -115
- package/bin/eslint.js +112 -89
- package/conf/default-cli-options.js +22 -22
- package/conf/ecma-version.js +16 -0
- package/conf/globals.js +109 -94
- package/conf/replacements.json +24 -20
- package/conf/rule-type-list.json +89 -26
- package/lib/api.js +16 -20
- package/lib/cli-engine/cli-engine.js +841 -810
- package/lib/cli-engine/file-enumerator.js +384 -390
- package/lib/cli-engine/formatters/formatters-meta.json +17 -45
- package/lib/cli-engine/formatters/html.js +110 -102
- package/lib/cli-engine/formatters/json-with-metadata.js +5 -5
- package/lib/cli-engine/formatters/json.js +2 -2
- package/lib/cli-engine/formatters/stylish.js +97 -76
- package/lib/cli-engine/hash.js +1 -1
- package/lib/cli-engine/index.js +1 -1
- package/lib/cli-engine/lint-result-cache.js +165 -148
- package/lib/cli-engine/load-rules.js +17 -17
- package/lib/cli.js +481 -399
- package/lib/config/config-loader.js +816 -0
- package/lib/config/config.js +674 -0
- package/lib/config/default-config.js +57 -46
- package/lib/config/flat-config-array.js +170 -333
- package/lib/config/flat-config-schema.js +389 -389
- package/lib/config-api.js +12 -0
- package/lib/eslint/eslint-helpers.js +1196 -663
- package/lib/eslint/eslint.js +1262 -607
- package/lib/eslint/index.js +3 -3
- package/lib/eslint/legacy-eslint.js +786 -0
- package/lib/eslint/worker.js +173 -0
- package/lib/languages/js/index.js +336 -0
- package/lib/languages/js/source-code/index.js +7 -0
- package/lib/languages/js/source-code/source-code.js +1364 -0
- package/lib/languages/js/source-code/token-store/backward-token-comment-cursor.js +61 -0
- package/lib/languages/js/source-code/token-store/backward-token-cursor.js +57 -0
- package/lib/{source-code → languages/js/source-code}/token-store/cursor.js +36 -36
- package/lib/languages/js/source-code/token-store/cursors.js +120 -0
- package/lib/{source-code → languages/js/source-code}/token-store/decorative-cursor.js +17 -18
- package/lib/{source-code → languages/js/source-code}/token-store/filter-cursor.js +19 -20
- package/lib/languages/js/source-code/token-store/forward-token-comment-cursor.js +65 -0
- package/lib/languages/js/source-code/token-store/forward-token-cursor.js +62 -0
- package/lib/languages/js/source-code/token-store/index.js +721 -0
- package/lib/{source-code → languages/js/source-code}/token-store/limit-cursor.js +17 -18
- package/lib/languages/js/source-code/token-store/padded-token-cursor.js +45 -0
- package/lib/{source-code → languages/js/source-code}/token-store/skip-cursor.js +19 -20
- package/lib/languages/js/source-code/token-store/utils.js +110 -0
- package/lib/languages/js/validate-language-options.js +196 -0
- package/lib/linter/apply-disable-directives.js +490 -371
- package/lib/linter/code-path-analysis/code-path-analyzer.js +650 -674
- package/lib/linter/code-path-analysis/code-path-segment.js +215 -216
- package/lib/linter/code-path-analysis/code-path-state.js +2118 -2096
- package/lib/linter/code-path-analysis/code-path.js +307 -317
- package/lib/linter/code-path-analysis/debug-helpers.js +183 -163
- package/lib/linter/code-path-analysis/fork-context.js +297 -272
- package/lib/linter/code-path-analysis/id-generator.js +22 -23
- package/lib/linter/esquery.js +332 -0
- package/lib/linter/file-context.js +144 -0
- package/lib/linter/file-report.js +608 -0
- package/lib/linter/index.js +3 -5
- package/lib/linter/interpolate.js +38 -16
- package/lib/linter/linter.js +2328 -1785
- package/lib/linter/rule-fixer.js +136 -107
- package/lib/linter/rules.js +37 -46
- package/lib/linter/source-code-fixer.js +96 -94
- package/lib/linter/source-code-traverser.js +333 -0
- package/lib/linter/source-code-visitor.js +81 -0
- package/lib/linter/timing.js +145 -97
- package/lib/linter/vfile.js +115 -0
- package/lib/options.js +464 -326
- package/lib/rule-tester/index.js +3 -1
- package/lib/rule-tester/rule-tester.js +1371 -998
- package/lib/rules/accessor-pairs.js +333 -259
- package/lib/rules/array-bracket-newline.js +250 -220
- package/lib/rules/array-bracket-spacing.js +286 -229
- package/lib/rules/array-callback-return.js +401 -354
- package/lib/rules/array-element-newline.js +358 -295
- package/lib/rules/arrow-body-style.js +400 -278
- package/lib/rules/arrow-parens.js +206 -155
- package/lib/rules/arrow-spacing.js +169 -145
- package/lib/rules/block-scoped-var.js +125 -123
- package/lib/rules/block-spacing.js +186 -158
- package/lib/rules/brace-style.js +262 -181
- package/lib/rules/callback-return.js +203 -174
- package/lib/rules/camelcase.js +403 -380
- package/lib/rules/capitalized-comments.js +253 -228
- package/lib/rules/class-methods-use-this.js +231 -168
- package/lib/rules/comma-dangle.js +379 -328
- package/lib/rules/comma-spacing.js +193 -177
- package/lib/rules/comma-style.js +375 -298
- package/lib/rules/complexity.js +180 -144
- package/lib/rules/computed-property-spacing.js +236 -193
- package/lib/rules/consistent-return.js +181 -170
- package/lib/rules/consistent-this.js +167 -141
- package/lib/rules/constructor-super.js +418 -411
- package/lib/rules/curly.js +407 -468
- package/lib/rules/default-case-last.js +39 -32
- package/lib/rules/default-case.js +89 -83
- package/lib/rules/default-param-last.js +69 -53
- package/lib/rules/dot-location.js +122 -92
- package/lib/rules/dot-notation.js +193 -153
- package/lib/rules/eol-last.js +122 -102
- package/lib/rules/eqeqeq.js +191 -155
- package/lib/rules/for-direction.js +150 -122
- package/lib/rules/func-call-spacing.js +261 -213
- package/lib/rules/func-name-matching.js +294 -209
- package/lib/rules/func-names.js +165 -164
- package/lib/rules/func-style.js +209 -86
- package/lib/rules/function-call-argument-newline.js +152 -111
- package/lib/rules/function-paren-newline.js +349 -273
- package/lib/rules/generator-star-spacing.js +229 -192
- package/lib/rules/getter-return.js +208 -170
- package/lib/rules/global-require.js +85 -58
- package/lib/rules/grouped-accessor-pairs.js +201 -148
- package/lib/rules/guard-for-in.js +72 -63
- package/lib/rules/handle-callback-err.js +108 -87
- package/lib/rules/id-blacklist.js +182 -187
- package/lib/rules/id-denylist.js +174 -179
- package/lib/rules/id-length.js +197 -157
- package/lib/rules/id-match.js +350 -286
- package/lib/rules/implicit-arrow-linebreak.js +102 -61
- package/lib/rules/indent-legacy.js +1345 -1102
- package/lib/rules/indent.js +2272 -1741
- package/lib/rules/index.js +320 -294
- package/lib/rules/init-declarations.js +139 -106
- package/lib/rules/jsx-quotes.js +94 -64
- package/lib/rules/key-spacing.js +750 -615
- package/lib/rules/keyword-spacing.js +648 -587
- package/lib/rules/line-comment-position.js +143 -108
- package/lib/rules/linebreak-style.js +115 -88
- package/lib/rules/lines-around-comment.js +540 -430
- package/lib/rules/lines-around-directive.js +233 -185
- package/lib/rules/lines-between-class-members.js +305 -216
- package/lib/rules/logical-assignment-operators.js +582 -398
- package/lib/rules/max-classes-per-file.js +69 -68
- package/lib/rules/max-depth.js +146 -143
- package/lib/rules/max-len.js +473 -416
- package/lib/rules/max-lines-per-function.js +201 -176
- package/lib/rules/max-lines.js +158 -162
- package/lib/rules/max-nested-callbacks.js +102 -104
- package/lib/rules/max-params.js +102 -75
- package/lib/rules/max-statements-per-line.js +205 -180
- package/lib/rules/max-statements.js +168 -164
- package/lib/rules/multiline-comment-style.js +638 -460
- package/lib/rules/multiline-ternary.js +241 -158
- package/lib/rules/new-cap.js +233 -232
- package/lib/rules/new-parens.js +88 -61
- package/lib/rules/newline-after-var.js +287 -233
- package/lib/rules/newline-before-return.js +229 -204
- package/lib/rules/newline-per-chained-call.js +142 -109
- package/lib/rules/no-alert.js +90 -79
- package/lib/rules/no-array-constructor.js +175 -113
- package/lib/rules/no-async-promise-executor.js +30 -24
- package/lib/rules/no-await-in-loop.js +79 -70
- package/lib/rules/no-bitwise.js +113 -87
- package/lib/rules/no-buffer-constructor.js +61 -37
- package/lib/rules/no-caller.js +39 -33
- package/lib/rules/no-case-declarations.js +61 -45
- package/lib/rules/no-catch-shadow.js +76 -62
- package/lib/rules/no-class-assign.js +51 -48
- package/lib/rules/no-compare-neg-zero.js +62 -48
- package/lib/rules/no-cond-assign.js +148 -132
- package/lib/rules/no-confusing-arrow.js +98 -63
- package/lib/rules/no-console.js +202 -188
- package/lib/rules/no-const-assign.js +58 -41
- package/lib/rules/no-constant-binary-expression.js +501 -407
- package/lib/rules/no-constant-condition.js +158 -131
- package/lib/rules/no-constructor-return.js +49 -49
- package/lib/rules/no-continue.js +25 -26
- package/lib/rules/no-control-regex.js +125 -121
- package/lib/rules/no-debugger.js +28 -30
- package/lib/rules/no-delete-var.js +29 -29
- package/lib/rules/no-div-regex.js +47 -40
- package/lib/rules/no-dupe-args.js +79 -69
- package/lib/rules/no-dupe-class-members.js +102 -89
- package/lib/rules/no-dupe-else-if.js +100 -77
- package/lib/rules/no-dupe-keys.js +133 -110
- package/lib/rules/no-duplicate-case.js +50 -43
- package/lib/rules/no-duplicate-imports.js +266 -188
- package/lib/rules/no-else-return.js +430 -385
- package/lib/rules/no-empty-character-class.js +57 -50
- package/lib/rules/no-empty-function.js +197 -128
- package/lib/rules/no-empty-pattern.js +63 -56
- package/lib/rules/no-empty-static-block.js +61 -35
- package/lib/rules/no-empty.js +135 -85
- package/lib/rules/no-eq-null.js +37 -32
- package/lib/rules/no-eval.js +258 -249
- package/lib/rules/no-ex-assign.js +42 -39
- package/lib/rules/no-extend-native.js +161 -160
- package/lib/rules/no-extra-bind.js +201 -190
- package/lib/rules/no-extra-boolean-cast.js +398 -295
- package/lib/rules/no-extra-label.js +150 -130
- package/lib/rules/no-extra-parens.js +1654 -1307
- package/lib/rules/no-extra-semi.js +146 -126
- package/lib/rules/no-fallthrough.js +200 -136
- package/lib/rules/no-floating-decimal.js +74 -48
- package/lib/rules/no-func-assign.js +54 -55
- package/lib/rules/no-global-assign.js +78 -72
- package/lib/rules/no-implicit-coercion.js +350 -262
- package/lib/rules/no-implicit-globals.js +174 -133
- package/lib/rules/no-implied-eval.js +150 -112
- package/lib/rules/no-import-assign.js +145 -159
- package/lib/rules/no-inline-comments.js +101 -96
- package/lib/rules/no-inner-declarations.js +115 -78
- package/lib/rules/no-invalid-regexp.js +223 -174
- package/lib/rules/no-invalid-this.js +145 -117
- package/lib/rules/no-irregular-whitespace.js +266 -250
- package/lib/rules/no-iterator.js +29 -33
- package/lib/rules/no-label-var.js +59 -61
- package/lib/rules/no-labels.js +138 -131
- package/lib/rules/no-lone-blocks.js +127 -123
- package/lib/rules/no-lonely-if.js +105 -67
- package/lib/rules/no-loop-func.js +245 -184
- package/lib/rules/no-loss-of-precision.js +236 -201
- package/lib/rules/no-magic-numbers.js +339 -217
- package/lib/rules/no-misleading-character-class.js +548 -253
- package/lib/rules/no-mixed-operators.js +188 -164
- package/lib/rules/no-mixed-requires.js +253 -224
- package/lib/rules/no-mixed-spaces-and-tabs.js +135 -103
- package/lib/rules/no-multi-assign.js +46 -47
- package/lib/rules/no-multi-spaces.js +163 -125
- package/lib/rules/no-multi-str.js +42 -40
- package/lib/rules/no-multiple-empty-lines.js +196 -140
- package/lib/rules/no-native-reassign.js +90 -74
- package/lib/rules/no-negated-condition.js +79 -74
- package/lib/rules/no-negated-in-lhs.js +45 -32
- package/lib/rules/no-nested-ternary.js +33 -31
- package/lib/rules/no-new-func.js +71 -62
- package/lib/rules/no-new-native-nonconstructor.js +43 -39
- package/lib/rules/no-new-object.js +48 -39
- package/lib/rules/no-new-require.js +48 -31
- package/lib/rules/no-new-symbol.js +61 -43
- package/lib/rules/no-new-wrappers.js +43 -41
- package/lib/rules/no-new.js +28 -29
- package/lib/rules/no-nonoctal-decimal-escape.js +149 -121
- package/lib/rules/no-obj-calls.js +66 -53
- package/lib/rules/no-object-constructor.js +104 -97
- package/lib/rules/no-octal-escape.js +40 -43
- package/lib/rules/no-octal.js +29 -32
- package/lib/rules/no-param-reassign.js +236 -218
- package/lib/rules/no-path-concat.js +66 -51
- package/lib/rules/no-plusplus.js +60 -63
- package/lib/rules/no-process-env.js +49 -32
- package/lib/rules/no-process-exit.js +48 -28
- package/lib/rules/no-promise-executor-return.js +205 -204
- package/lib/rules/no-proto.js +26 -29
- package/lib/rules/no-prototype-builtins.js +146 -124
- package/lib/rules/no-redeclare.js +154 -155
- package/lib/rules/no-regex-spaces.js +183 -161
- package/lib/rules/no-restricted-exports.js +208 -174
- package/lib/rules/no-restricted-globals.js +254 -112
- package/lib/rules/no-restricted-imports.js +824 -384
- package/lib/rules/no-restricted-modules.js +222 -186
- package/lib/rules/no-restricted-properties.js +218 -153
- package/lib/rules/no-restricted-syntax.js +56 -52
- package/lib/rules/no-return-assign.js +56 -49
- package/lib/rules/no-return-await.js +147 -120
- package/lib/rules/no-script-url.js +53 -46
- package/lib/rules/no-self-assign.js +148 -145
- package/lib/rules/no-self-compare.js +63 -46
- package/lib/rules/no-sequences.js +135 -115
- package/lib/rules/no-setter-return.js +176 -178
- package/lib/rules/no-shadow-restricted-names.js +84 -36
- package/lib/rules/no-shadow.js +598 -310
- package/lib/rules/no-spaced-func.js +82 -60
- package/lib/rules/no-sparse-arrays.js +46 -28
- package/lib/rules/no-sync.js +61 -44
- package/lib/rules/no-tabs.js +83 -54
- package/lib/rules/no-template-curly-in-string.js +33 -32
- package/lib/rules/no-ternary.js +25 -28
- package/lib/rules/no-this-before-super.js +332 -298
- package/lib/rules/no-throw-literal.js +31 -36
- package/lib/rules/no-trailing-spaces.js +208 -174
- package/lib/rules/no-unassigned-vars.js +80 -0
- package/lib/rules/no-undef-init.js +86 -60
- package/lib/rules/no-undef.js +52 -47
- package/lib/rules/no-undefined.js +73 -74
- package/lib/rules/no-underscore-dangle.js +370 -322
- package/lib/rules/no-unexpected-multiline.js +112 -102
- package/lib/rules/no-unmodified-loop-condition.js +254 -254
- package/lib/rules/no-unneeded-ternary.js +212 -146
- package/lib/rules/no-unreachable-loop.js +145 -140
- package/lib/rules/no-unreachable.js +255 -248
- package/lib/rules/no-unsafe-finally.js +93 -85
- package/lib/rules/no-unsafe-negation.js +105 -81
- package/lib/rules/no-unsafe-optional-chaining.js +193 -177
- package/lib/rules/no-unused-expressions.js +199 -158
- package/lib/rules/no-unused-labels.js +139 -124
- package/lib/rules/no-unused-private-class-members.js +206 -182
- package/lib/rules/no-unused-vars.js +1708 -687
- package/lib/rules/no-use-before-define.js +327 -229
- package/lib/rules/no-useless-assignment.js +654 -0
- package/lib/rules/no-useless-backreference.js +212 -143
- package/lib/rules/no-useless-call.js +58 -53
- package/lib/rules/no-useless-catch.js +40 -40
- package/lib/rules/no-useless-computed-key.js +144 -108
- package/lib/rules/no-useless-concat.js +65 -59
- package/lib/rules/no-useless-constructor.js +160 -97
- package/lib/rules/no-useless-escape.js +364 -291
- package/lib/rules/no-useless-rename.js +183 -153
- package/lib/rules/no-useless-return.js +344 -307
- package/lib/rules/no-var.js +245 -212
- package/lib/rules/no-void.js +51 -46
- package/lib/rules/no-warning-comments.js +191 -183
- package/lib/rules/no-whitespace-before-property.js +131 -97
- package/lib/rules/no-with.js +24 -26
- package/lib/rules/nonblock-statement-body-position.js +149 -112
- package/lib/rules/object-curly-newline.js +306 -247
- package/lib/rules/object-curly-spacing.js +360 -296
- package/lib/rules/object-property-newline.js +137 -88
- package/lib/rules/object-shorthand.js +632 -500
- package/lib/rules/one-var-declaration-per-line.js +104 -82
- package/lib/rules/one-var.js +686 -536
- package/lib/rules/operator-assignment.js +219 -158
- package/lib/rules/operator-linebreak.js +295 -233
- package/lib/rules/padded-blocks.js +346 -290
- package/lib/rules/padding-line-between-statements.js +443 -421
- package/lib/rules/prefer-arrow-callback.js +371 -315
- package/lib/rules/prefer-const.js +418 -373
- package/lib/rules/prefer-destructuring.js +309 -278
- package/lib/rules/prefer-exponentiation-operator.js +176 -132
- package/lib/rules/prefer-named-capture-group.js +160 -141
- package/lib/rules/prefer-numeric-literals.js +121 -112
- package/lib/rules/prefer-object-has-own.js +116 -82
- package/lib/rules/prefer-object-spread.js +214 -193
- package/lib/rules/prefer-promise-reject-errors.js +140 -118
- package/lib/rules/prefer-reflect.js +126 -103
- package/lib/rules/prefer-regex-literals.js +561 -463
- package/lib/rules/prefer-rest-params.js +79 -80
- package/lib/rules/prefer-spread.js +47 -43
- package/lib/rules/prefer-template.js +266 -194
- package/lib/rules/preserve-caught-error.js +535 -0
- package/lib/rules/quote-props.js +373 -289
- package/lib/rules/quotes.js +374 -308
- package/lib/rules/radix.js +152 -134
- package/lib/rules/require-atomic-updates.js +316 -282
- package/lib/rules/require-await.js +153 -82
- package/lib/rules/require-unicode-regexp.js +296 -108
- package/lib/rules/require-yield.js +53 -54
- package/lib/rules/rest-spread-spacing.js +128 -98
- package/lib/rules/semi-spacing.js +281 -232
- package/lib/rules/semi-style.js +176 -116
- package/lib/rules/semi.js +456 -418
- package/lib/rules/sort-imports.js +307 -229
- package/lib/rules/sort-keys.js +219 -181
- package/lib/rules/sort-vars.js +127 -91
- package/lib/rules/space-before-blocks.js +199 -171
- package/lib/rules/space-before-function-paren.js +186 -148
- package/lib/rules/space-in-parens.js +359 -270
- package/lib/rules/space-infix-ops.js +237 -183
- package/lib/rules/space-unary-ops.js +356 -280
- package/lib/rules/spaced-comment.js +363 -301
- package/lib/rules/strict.js +266 -229
- package/lib/rules/switch-colon-spacing.js +130 -104
- package/lib/rules/symbol-description.js +45 -48
- package/lib/rules/template-curly-spacing.js +148 -124
- package/lib/rules/template-tag-spacing.js +98 -70
- package/lib/rules/unicode-bom.js +54 -54
- package/lib/rules/use-isnan.js +237 -110
- package/lib/rules/utils/ast-utils.js +2139 -1688
- package/lib/rules/utils/char-source.js +247 -0
- package/lib/rules/utils/fix-tracker.js +99 -88
- package/lib/rules/utils/keywords.js +59 -59
- package/lib/rules/utils/lazy-loading-rule-map.js +81 -78
- package/lib/rules/utils/regular-expressions.js +35 -19
- package/lib/rules/utils/unicode/index.js +9 -4
- package/lib/rules/utils/unicode/is-combining-character.js +1 -1
- package/lib/rules/utils/unicode/is-emoji-modifier.js +1 -1
- package/lib/rules/utils/unicode/is-regional-indicator-symbol.js +1 -1
- package/lib/rules/utils/unicode/is-surrogate-pair.js +1 -1
- package/lib/rules/valid-typeof.js +153 -109
- package/lib/rules/vars-on-top.js +152 -144
- package/lib/rules/wrap-iife.js +204 -173
- package/lib/rules/wrap-regex.js +77 -47
- package/lib/rules/yield-star-spacing.js +145 -116
- package/lib/rules/yoda.js +283 -274
- package/lib/services/parser-service.js +65 -0
- package/lib/services/processor-service.js +101 -0
- package/lib/services/suppressions-service.js +302 -0
- package/lib/services/warning-service.js +98 -0
- package/lib/shared/ajv.js +14 -14
- package/lib/shared/assert.js +21 -0
- package/lib/shared/ast-utils.js +7 -6
- package/lib/shared/deep-merge-arrays.js +62 -0
- package/lib/shared/directives.js +3 -2
- package/lib/shared/flags.js +108 -0
- package/lib/shared/logging.js +24 -16
- package/lib/shared/naming.js +109 -0
- package/lib/shared/option-utils.js +63 -0
- package/lib/shared/relative-module-resolver.js +18 -40
- package/lib/shared/runtime-info.js +138 -128
- package/lib/shared/serialization.js +78 -0
- package/lib/shared/severity.js +22 -22
- package/lib/shared/stats.js +30 -0
- package/lib/shared/string-utils.js +19 -21
- package/lib/shared/text-table.js +68 -0
- package/lib/shared/translate-cli-options.js +281 -0
- package/lib/shared/traverser.js +153 -146
- package/lib/types/config-api.d.ts +12 -0
- package/lib/types/index.d.ts +1473 -0
- package/lib/types/rules.d.ts +5589 -0
- package/lib/types/universal.d.ts +6 -0
- package/lib/types/use-at-your-own-risk.d.ts +87 -0
- package/lib/universal.js +10 -0
- package/lib/unsupported-api.js +8 -9
- package/messages/all-files-ignored.js +3 -3
- package/messages/all-matched-files-ignored.js +21 -0
- package/messages/config-file-missing.js +16 -0
- package/messages/config-plugin-missing.js +14 -0
- package/messages/config-serialize-function.js +30 -0
- package/messages/eslintrc-incompat.js +35 -16
- package/messages/eslintrc-plugins.js +8 -5
- package/messages/extend-config-missing.js +3 -3
- package/messages/failed-to-read-json.js +3 -3
- package/messages/file-not-found.js +3 -3
- package/messages/invalid-rule-options.js +2 -2
- package/messages/invalid-rule-severity.js +2 -2
- package/messages/no-config-found.js +4 -4
- package/messages/plugin-conflict.js +9 -9
- package/messages/plugin-invalid.js +4 -4
- package/messages/plugin-missing.js +4 -4
- package/messages/print-config-with-directory-path.js +2 -2
- package/messages/shared.js +6 -1
- package/messages/whitespace-found.js +3 -3
- package/package.json +105 -60
- package/conf/config-schema.js +0 -93
- package/lib/cli-engine/formatters/checkstyle.js +0 -60
- package/lib/cli-engine/formatters/compact.js +0 -60
- package/lib/cli-engine/formatters/jslint-xml.js +0 -41
- package/lib/cli-engine/formatters/junit.js +0 -82
- package/lib/cli-engine/formatters/tap.js +0 -95
- package/lib/cli-engine/formatters/unix.js +0 -58
- package/lib/cli-engine/formatters/visualstudio.js +0 -63
- package/lib/cli-engine/xml-escape.js +0 -34
- package/lib/config/flat-config-helpers.js +0 -111
- package/lib/config/rule-validator.js +0 -158
- package/lib/eslint/flat-eslint.js +0 -1159
- package/lib/linter/config-comment-parser.js +0 -185
- package/lib/linter/node-event-generator.js +0 -354
- package/lib/linter/report-translator.js +0 -369
- package/lib/linter/safe-emitter.js +0 -52
- package/lib/rule-tester/flat-rule-tester.js +0 -1131
- package/lib/rules/require-jsdoc.js +0 -122
- package/lib/rules/utils/patterns/letters.js +0 -36
- package/lib/rules/valid-jsdoc.js +0 -516
- package/lib/shared/config-validator.js +0 -347
- package/lib/shared/deprecation-warnings.js +0 -58
- package/lib/shared/types.js +0 -216
- package/lib/source-code/index.js +0 -5
- package/lib/source-code/source-code.js +0 -1055
- package/lib/source-code/token-store/backward-token-comment-cursor.js +0 -57
- package/lib/source-code/token-store/backward-token-cursor.js +0 -58
- package/lib/source-code/token-store/cursors.js +0 -90
- package/lib/source-code/token-store/forward-token-comment-cursor.js +0 -57
- package/lib/source-code/token-store/forward-token-cursor.js +0 -63
- package/lib/source-code/token-store/index.js +0 -627
- package/lib/source-code/token-store/padded-token-cursor.js +0 -38
- package/lib/source-code/token-store/utils.js +0 -107
|
@@ -1,95 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @fileoverview TAP reporter
|
|
3
|
-
* @author Jonathan Kingston
|
|
4
|
-
*/
|
|
5
|
-
"use strict";
|
|
6
|
-
|
|
7
|
-
const yaml = require("js-yaml");
|
|
8
|
-
|
|
9
|
-
//------------------------------------------------------------------------------
|
|
10
|
-
// Helper Functions
|
|
11
|
-
//------------------------------------------------------------------------------
|
|
12
|
-
|
|
13
|
-
/**
|
|
14
|
-
* Returns a canonical error level string based upon the error message passed in.
|
|
15
|
-
* @param {Object} message Individual error message provided by eslint
|
|
16
|
-
* @returns {string} Error level string
|
|
17
|
-
*/
|
|
18
|
-
function getMessageType(message) {
|
|
19
|
-
if (message.fatal || message.severity === 2) {
|
|
20
|
-
return "error";
|
|
21
|
-
}
|
|
22
|
-
return "warning";
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
/**
|
|
26
|
-
* Takes in a JavaScript object and outputs a TAP diagnostics string
|
|
27
|
-
* @param {Object} diagnostic JavaScript object to be embedded as YAML into output.
|
|
28
|
-
* @returns {string} diagnostics string with YAML embedded - TAP version 13 compliant
|
|
29
|
-
*/
|
|
30
|
-
function outputDiagnostics(diagnostic) {
|
|
31
|
-
const prefix = " ";
|
|
32
|
-
let output = `${prefix}---\n`;
|
|
33
|
-
|
|
34
|
-
output += prefix + yaml.dump(diagnostic).split("\n").join(`\n${prefix}`);
|
|
35
|
-
output += "...\n";
|
|
36
|
-
return output;
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
//------------------------------------------------------------------------------
|
|
40
|
-
// Public Interface
|
|
41
|
-
//------------------------------------------------------------------------------
|
|
42
|
-
|
|
43
|
-
module.exports = function(results) {
|
|
44
|
-
let output = `TAP version 13\n1..${results.length}\n`;
|
|
45
|
-
|
|
46
|
-
results.forEach((result, id) => {
|
|
47
|
-
const messages = result.messages;
|
|
48
|
-
let testResult = "ok";
|
|
49
|
-
let diagnostics = {};
|
|
50
|
-
|
|
51
|
-
if (messages.length > 0) {
|
|
52
|
-
messages.forEach(message => {
|
|
53
|
-
const severity = getMessageType(message);
|
|
54
|
-
const diagnostic = {
|
|
55
|
-
message: message.message,
|
|
56
|
-
severity,
|
|
57
|
-
data: {
|
|
58
|
-
line: message.line || 0,
|
|
59
|
-
column: message.column || 0,
|
|
60
|
-
ruleId: message.ruleId || ""
|
|
61
|
-
}
|
|
62
|
-
};
|
|
63
|
-
|
|
64
|
-
// This ensures a warning message is not flagged as error
|
|
65
|
-
if (severity === "error") {
|
|
66
|
-
testResult = "not ok";
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
/*
|
|
70
|
-
* If we have multiple messages place them under a messages key
|
|
71
|
-
* The first error will be logged as message key
|
|
72
|
-
* This is to adhere to TAP 13 loosely defined specification of having a message key
|
|
73
|
-
*/
|
|
74
|
-
if ("message" in diagnostics) {
|
|
75
|
-
if (typeof diagnostics.messages === "undefined") {
|
|
76
|
-
diagnostics.messages = [];
|
|
77
|
-
}
|
|
78
|
-
diagnostics.messages.push(diagnostic);
|
|
79
|
-
} else {
|
|
80
|
-
diagnostics = diagnostic;
|
|
81
|
-
}
|
|
82
|
-
});
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
output += `${testResult} ${id + 1} - ${result.filePath}\n`;
|
|
86
|
-
|
|
87
|
-
// If we have an error include diagnostics
|
|
88
|
-
if (messages.length > 0) {
|
|
89
|
-
output += outputDiagnostics(diagnostics);
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
});
|
|
93
|
-
|
|
94
|
-
return output;
|
|
95
|
-
};
|
|
@@ -1,58 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @fileoverview unix-style formatter.
|
|
3
|
-
* @author oshi-shinobu
|
|
4
|
-
*/
|
|
5
|
-
"use strict";
|
|
6
|
-
|
|
7
|
-
//------------------------------------------------------------------------------
|
|
8
|
-
// Helper Functions
|
|
9
|
-
//------------------------------------------------------------------------------
|
|
10
|
-
|
|
11
|
-
/**
|
|
12
|
-
* Returns a canonical error level string based upon the error message passed in.
|
|
13
|
-
* @param {Object} message Individual error message provided by eslint
|
|
14
|
-
* @returns {string} Error level string
|
|
15
|
-
*/
|
|
16
|
-
function getMessageType(message) {
|
|
17
|
-
if (message.fatal || message.severity === 2) {
|
|
18
|
-
return "Error";
|
|
19
|
-
}
|
|
20
|
-
return "Warning";
|
|
21
|
-
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
//------------------------------------------------------------------------------
|
|
26
|
-
// Public Interface
|
|
27
|
-
//------------------------------------------------------------------------------
|
|
28
|
-
|
|
29
|
-
module.exports = function(results) {
|
|
30
|
-
|
|
31
|
-
let output = "",
|
|
32
|
-
total = 0;
|
|
33
|
-
|
|
34
|
-
results.forEach(result => {
|
|
35
|
-
|
|
36
|
-
const messages = result.messages;
|
|
37
|
-
|
|
38
|
-
total += messages.length;
|
|
39
|
-
|
|
40
|
-
messages.forEach(message => {
|
|
41
|
-
|
|
42
|
-
output += `${result.filePath}:`;
|
|
43
|
-
output += `${message.line || 0}:`;
|
|
44
|
-
output += `${message.column || 0}:`;
|
|
45
|
-
output += ` ${message.message} `;
|
|
46
|
-
output += `[${getMessageType(message)}${message.ruleId ? `/${message.ruleId}` : ""}]`;
|
|
47
|
-
output += "\n";
|
|
48
|
-
|
|
49
|
-
});
|
|
50
|
-
|
|
51
|
-
});
|
|
52
|
-
|
|
53
|
-
if (total > 0) {
|
|
54
|
-
output += `\n${total} problem${total !== 1 ? "s" : ""}`;
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
return output;
|
|
58
|
-
};
|
|
@@ -1,63 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @fileoverview Visual Studio compatible formatter
|
|
3
|
-
* @author Ronald Pijnacker
|
|
4
|
-
*/
|
|
5
|
-
|
|
6
|
-
"use strict";
|
|
7
|
-
|
|
8
|
-
//------------------------------------------------------------------------------
|
|
9
|
-
// Helper Functions
|
|
10
|
-
//------------------------------------------------------------------------------
|
|
11
|
-
|
|
12
|
-
/**
|
|
13
|
-
* Returns the severity of warning or error
|
|
14
|
-
* @param {Object} message message object to examine
|
|
15
|
-
* @returns {string} severity level
|
|
16
|
-
* @private
|
|
17
|
-
*/
|
|
18
|
-
function getMessageType(message) {
|
|
19
|
-
if (message.fatal || message.severity === 2) {
|
|
20
|
-
return "error";
|
|
21
|
-
}
|
|
22
|
-
return "warning";
|
|
23
|
-
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
//------------------------------------------------------------------------------
|
|
28
|
-
// Public Interface
|
|
29
|
-
//------------------------------------------------------------------------------
|
|
30
|
-
|
|
31
|
-
module.exports = function(results) {
|
|
32
|
-
|
|
33
|
-
let output = "",
|
|
34
|
-
total = 0;
|
|
35
|
-
|
|
36
|
-
results.forEach(result => {
|
|
37
|
-
|
|
38
|
-
const messages = result.messages;
|
|
39
|
-
|
|
40
|
-
total += messages.length;
|
|
41
|
-
|
|
42
|
-
messages.forEach(message => {
|
|
43
|
-
|
|
44
|
-
output += result.filePath;
|
|
45
|
-
output += `(${message.line || 0}`;
|
|
46
|
-
output += message.column ? `,${message.column}` : "";
|
|
47
|
-
output += `): ${getMessageType(message)}`;
|
|
48
|
-
output += message.ruleId ? ` ${message.ruleId}` : "";
|
|
49
|
-
output += ` : ${message.message}`;
|
|
50
|
-
output += "\n";
|
|
51
|
-
|
|
52
|
-
});
|
|
53
|
-
|
|
54
|
-
});
|
|
55
|
-
|
|
56
|
-
if (total === 0) {
|
|
57
|
-
output += "no problems";
|
|
58
|
-
} else {
|
|
59
|
-
output += `\n${total} problem${total !== 1 ? "s" : ""}`;
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
return output;
|
|
63
|
-
};
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @fileoverview XML character escaper
|
|
3
|
-
* @author George Chung
|
|
4
|
-
*/
|
|
5
|
-
"use strict";
|
|
6
|
-
|
|
7
|
-
//------------------------------------------------------------------------------
|
|
8
|
-
// Public Interface
|
|
9
|
-
//------------------------------------------------------------------------------
|
|
10
|
-
|
|
11
|
-
/**
|
|
12
|
-
* Returns the escaped value for a character
|
|
13
|
-
* @param {string} s string to examine
|
|
14
|
-
* @returns {string} severity level
|
|
15
|
-
* @private
|
|
16
|
-
*/
|
|
17
|
-
module.exports = function(s) {
|
|
18
|
-
return (`${s}`).replace(/[<>&"'\x00-\x1F\x7F\u0080-\uFFFF]/gu, c => { // eslint-disable-line no-control-regex -- Converting controls to entities
|
|
19
|
-
switch (c) {
|
|
20
|
-
case "<":
|
|
21
|
-
return "<";
|
|
22
|
-
case ">":
|
|
23
|
-
return ">";
|
|
24
|
-
case "&":
|
|
25
|
-
return "&";
|
|
26
|
-
case "\"":
|
|
27
|
-
return """;
|
|
28
|
-
case "'":
|
|
29
|
-
return "'";
|
|
30
|
-
default:
|
|
31
|
-
return `&#${c.charCodeAt(0)};`;
|
|
32
|
-
}
|
|
33
|
-
});
|
|
34
|
-
};
|
|
@@ -1,111 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @fileoverview Shared functions to work with configs.
|
|
3
|
-
* @author Nicholas C. Zakas
|
|
4
|
-
*/
|
|
5
|
-
|
|
6
|
-
"use strict";
|
|
7
|
-
|
|
8
|
-
//-----------------------------------------------------------------------------
|
|
9
|
-
// Functions
|
|
10
|
-
//-----------------------------------------------------------------------------
|
|
11
|
-
|
|
12
|
-
/**
|
|
13
|
-
* Parses a ruleId into its plugin and rule parts.
|
|
14
|
-
* @param {string} ruleId The rule ID to parse.
|
|
15
|
-
* @returns {{pluginName:string,ruleName:string}} The plugin and rule
|
|
16
|
-
* parts of the ruleId;
|
|
17
|
-
*/
|
|
18
|
-
function parseRuleId(ruleId) {
|
|
19
|
-
let pluginName, ruleName;
|
|
20
|
-
|
|
21
|
-
// distinguish between core rules and plugin rules
|
|
22
|
-
if (ruleId.includes("/")) {
|
|
23
|
-
|
|
24
|
-
// mimic scoped npm packages
|
|
25
|
-
if (ruleId.startsWith("@")) {
|
|
26
|
-
pluginName = ruleId.slice(0, ruleId.lastIndexOf("/"));
|
|
27
|
-
} else {
|
|
28
|
-
pluginName = ruleId.slice(0, ruleId.indexOf("/"));
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
ruleName = ruleId.slice(pluginName.length + 1);
|
|
32
|
-
} else {
|
|
33
|
-
pluginName = "@";
|
|
34
|
-
ruleName = ruleId;
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
return {
|
|
38
|
-
pluginName,
|
|
39
|
-
ruleName
|
|
40
|
-
};
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
/**
|
|
44
|
-
* Retrieves a rule instance from a given config based on the ruleId.
|
|
45
|
-
* @param {string} ruleId The rule ID to look for.
|
|
46
|
-
* @param {FlatConfig} config The config to search.
|
|
47
|
-
* @returns {import("../shared/types").Rule|undefined} The rule if found
|
|
48
|
-
* or undefined if not.
|
|
49
|
-
*/
|
|
50
|
-
function getRuleFromConfig(ruleId, config) {
|
|
51
|
-
|
|
52
|
-
const { pluginName, ruleName } = parseRuleId(ruleId);
|
|
53
|
-
|
|
54
|
-
const plugin = config.plugins && config.plugins[pluginName];
|
|
55
|
-
let rule = plugin && plugin.rules && plugin.rules[ruleName];
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
// normalize function rules into objects
|
|
59
|
-
if (rule && typeof rule === "function") {
|
|
60
|
-
rule = {
|
|
61
|
-
create: rule
|
|
62
|
-
};
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
return rule;
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
/**
|
|
69
|
-
* Gets a complete options schema for a rule.
|
|
70
|
-
* @param {{create: Function, schema: (Array|null)}} rule A new-style rule object
|
|
71
|
-
* @returns {Object} JSON Schema for the rule's options.
|
|
72
|
-
*/
|
|
73
|
-
function getRuleOptionsSchema(rule) {
|
|
74
|
-
|
|
75
|
-
if (!rule) {
|
|
76
|
-
return null;
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
const schema = rule.schema || rule.meta && rule.meta.schema;
|
|
80
|
-
|
|
81
|
-
if (Array.isArray(schema)) {
|
|
82
|
-
if (schema.length) {
|
|
83
|
-
return {
|
|
84
|
-
type: "array",
|
|
85
|
-
items: schema,
|
|
86
|
-
minItems: 0,
|
|
87
|
-
maxItems: schema.length
|
|
88
|
-
};
|
|
89
|
-
}
|
|
90
|
-
return {
|
|
91
|
-
type: "array",
|
|
92
|
-
minItems: 0,
|
|
93
|
-
maxItems: 0
|
|
94
|
-
};
|
|
95
|
-
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
// Given a full schema, leave it alone
|
|
99
|
-
return schema || null;
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
//-----------------------------------------------------------------------------
|
|
104
|
-
// Exports
|
|
105
|
-
//-----------------------------------------------------------------------------
|
|
106
|
-
|
|
107
|
-
module.exports = {
|
|
108
|
-
parseRuleId,
|
|
109
|
-
getRuleFromConfig,
|
|
110
|
-
getRuleOptionsSchema
|
|
111
|
-
};
|
|
@@ -1,158 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @fileoverview Rule Validator
|
|
3
|
-
* @author Nicholas C. Zakas
|
|
4
|
-
*/
|
|
5
|
-
|
|
6
|
-
"use strict";
|
|
7
|
-
|
|
8
|
-
//-----------------------------------------------------------------------------
|
|
9
|
-
// Requirements
|
|
10
|
-
//-----------------------------------------------------------------------------
|
|
11
|
-
|
|
12
|
-
const ajvImport = require("../shared/ajv");
|
|
13
|
-
const ajv = ajvImport();
|
|
14
|
-
const {
|
|
15
|
-
parseRuleId,
|
|
16
|
-
getRuleFromConfig,
|
|
17
|
-
getRuleOptionsSchema
|
|
18
|
-
} = require("./flat-config-helpers");
|
|
19
|
-
const ruleReplacements = require("../../conf/replacements.json");
|
|
20
|
-
|
|
21
|
-
//-----------------------------------------------------------------------------
|
|
22
|
-
// Helpers
|
|
23
|
-
//-----------------------------------------------------------------------------
|
|
24
|
-
|
|
25
|
-
/**
|
|
26
|
-
* Throws a helpful error when a rule cannot be found.
|
|
27
|
-
* @param {Object} ruleId The rule identifier.
|
|
28
|
-
* @param {string} ruleId.pluginName The ID of the rule to find.
|
|
29
|
-
* @param {string} ruleId.ruleName The ID of the rule to find.
|
|
30
|
-
* @param {Object} config The config to search in.
|
|
31
|
-
* @throws {TypeError} For missing plugin or rule.
|
|
32
|
-
* @returns {void}
|
|
33
|
-
*/
|
|
34
|
-
function throwRuleNotFoundError({ pluginName, ruleName }, config) {
|
|
35
|
-
|
|
36
|
-
const ruleId = pluginName === "@" ? ruleName : `${pluginName}/${ruleName}`;
|
|
37
|
-
|
|
38
|
-
const errorMessageHeader = `Key "rules": Key "${ruleId}"`;
|
|
39
|
-
let errorMessage = `${errorMessageHeader}: Could not find plugin "${pluginName}".`;
|
|
40
|
-
|
|
41
|
-
// if the plugin exists then we need to check if the rule exists
|
|
42
|
-
if (config.plugins && config.plugins[pluginName]) {
|
|
43
|
-
const replacementRuleName = ruleReplacements.rules[ruleName];
|
|
44
|
-
|
|
45
|
-
if (pluginName === "@" && replacementRuleName) {
|
|
46
|
-
|
|
47
|
-
errorMessage = `${errorMessageHeader}: Rule "${ruleName}" was removed and replaced by "${replacementRuleName}".`;
|
|
48
|
-
|
|
49
|
-
} else {
|
|
50
|
-
|
|
51
|
-
errorMessage = `${errorMessageHeader}: Could not find "${ruleName}" in plugin "${pluginName}".`;
|
|
52
|
-
|
|
53
|
-
// otherwise, let's see if we can find the rule name elsewhere
|
|
54
|
-
for (const [otherPluginName, otherPlugin] of Object.entries(config.plugins)) {
|
|
55
|
-
if (otherPlugin.rules && otherPlugin.rules[ruleName]) {
|
|
56
|
-
errorMessage += ` Did you mean "${otherPluginName}/${ruleName}"?`;
|
|
57
|
-
break;
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
// falls through to throw error
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
throw new TypeError(errorMessage);
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
//-----------------------------------------------------------------------------
|
|
70
|
-
// Exports
|
|
71
|
-
//-----------------------------------------------------------------------------
|
|
72
|
-
|
|
73
|
-
/**
|
|
74
|
-
* Implements validation functionality for the rules portion of a config.
|
|
75
|
-
*/
|
|
76
|
-
class RuleValidator {
|
|
77
|
-
|
|
78
|
-
/**
|
|
79
|
-
* Creates a new instance.
|
|
80
|
-
*/
|
|
81
|
-
constructor() {
|
|
82
|
-
|
|
83
|
-
/**
|
|
84
|
-
* A collection of compiled validators for rules that have already
|
|
85
|
-
* been validated.
|
|
86
|
-
* @type {WeakMap}
|
|
87
|
-
*/
|
|
88
|
-
this.validators = new WeakMap();
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
/**
|
|
92
|
-
* Validates all of the rule configurations in a config against each
|
|
93
|
-
* rule's schema.
|
|
94
|
-
* @param {Object} config The full config to validate. This object must
|
|
95
|
-
* contain both the rules section and the plugins section.
|
|
96
|
-
* @returns {void}
|
|
97
|
-
* @throws {Error} If a rule's configuration does not match its schema.
|
|
98
|
-
*/
|
|
99
|
-
validate(config) {
|
|
100
|
-
|
|
101
|
-
if (!config.rules) {
|
|
102
|
-
return;
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
for (const [ruleId, ruleOptions] of Object.entries(config.rules)) {
|
|
106
|
-
|
|
107
|
-
// check for edge case
|
|
108
|
-
if (ruleId === "__proto__") {
|
|
109
|
-
continue;
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
/*
|
|
113
|
-
* If a rule is disabled, we don't do any validation. This allows
|
|
114
|
-
* users to safely set any value to 0 or "off" without worrying
|
|
115
|
-
* that it will cause a validation error.
|
|
116
|
-
*
|
|
117
|
-
* Note: ruleOptions is always an array at this point because
|
|
118
|
-
* this validation occurs after FlatConfigArray has merged and
|
|
119
|
-
* normalized values.
|
|
120
|
-
*/
|
|
121
|
-
if (ruleOptions[0] === 0) {
|
|
122
|
-
continue;
|
|
123
|
-
}
|
|
124
|
-
|
|
125
|
-
const rule = getRuleFromConfig(ruleId, config);
|
|
126
|
-
|
|
127
|
-
if (!rule) {
|
|
128
|
-
throwRuleNotFoundError(parseRuleId(ruleId), config);
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
// Precompile and cache validator the first time
|
|
132
|
-
if (!this.validators.has(rule)) {
|
|
133
|
-
const schema = getRuleOptionsSchema(rule);
|
|
134
|
-
|
|
135
|
-
if (schema) {
|
|
136
|
-
this.validators.set(rule, ajv.compile(schema));
|
|
137
|
-
}
|
|
138
|
-
}
|
|
139
|
-
|
|
140
|
-
const validateRule = this.validators.get(rule);
|
|
141
|
-
|
|
142
|
-
if (validateRule) {
|
|
143
|
-
|
|
144
|
-
validateRule(ruleOptions.slice(1));
|
|
145
|
-
|
|
146
|
-
if (validateRule.errors) {
|
|
147
|
-
throw new Error(`Key "rules": Key "${ruleId}": ${
|
|
148
|
-
validateRule.errors.map(
|
|
149
|
-
error => `\tValue ${JSON.stringify(error.data)} ${error.message}.\n`
|
|
150
|
-
).join("")
|
|
151
|
-
}`);
|
|
152
|
-
}
|
|
153
|
-
}
|
|
154
|
-
}
|
|
155
|
-
}
|
|
156
|
-
}
|
|
157
|
-
|
|
158
|
-
exports.RuleValidator = RuleValidator;
|