@codeperfect/eslint-plugin 1.0.0 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +26 -4
- package/dist/.tsbuildinfo +1 -1
- package/dist/{custom-rules.d.ts → application/custom-rules.d.ts} +3 -0
- package/dist/application/custom-rules.d.ts.map +1 -0
- package/dist/application/custom-rules.js +74 -0
- package/dist/application/index.d.ts +4 -0
- package/dist/application/index.d.ts.map +1 -0
- package/dist/application/index.js +3 -0
- package/dist/codeperfect-eslint-plugin-1.0.0.tgz +0 -0
- package/dist/domain/architecture/consistent-barrel-files/barrel-file-utilities.d.ts +56 -0
- package/dist/domain/architecture/consistent-barrel-files/barrel-file-utilities.d.ts.map +1 -0
- package/dist/domain/architecture/consistent-barrel-files/barrel-file-utilities.js +149 -0
- package/dist/{architecture → domain/architecture}/consistent-barrel-files/consistent-barrel-files-listeners.d.ts +4 -4
- package/dist/domain/architecture/consistent-barrel-files/consistent-barrel-files-listeners.d.ts.map +1 -0
- package/dist/domain/architecture/consistent-barrel-files/consistent-barrel-files-listeners.js +98 -0
- package/dist/domain/architecture/consistent-barrel-files/consistent-barrel-files-options.d.ts +45 -0
- package/dist/domain/architecture/consistent-barrel-files/consistent-barrel-files-options.d.ts.map +1 -0
- package/dist/domain/architecture/consistent-barrel-files/consistent-barrel-files-options.js +64 -0
- package/dist/{architecture → domain/architecture}/consistent-barrel-files/exports-only-rule-test-utilities.d.ts +5 -4
- package/dist/domain/architecture/consistent-barrel-files/exports-only-rule-test-utilities.d.ts.map +1 -0
- package/dist/domain/architecture/consistent-barrel-files/exports-only-rule-test-utilities.js +87 -0
- package/dist/domain/architecture/consistent-barrel-files/exports-only-rule.d.ts.map +1 -0
- package/dist/domain/architecture/consistent-barrel-files/exports-only-rule.js +140 -0
- package/dist/domain/architecture/consistent-barrel-files/index.d.ts +5 -0
- package/dist/domain/architecture/consistent-barrel-files/index.d.ts.map +1 -0
- package/dist/domain/architecture/consistent-barrel-files/index.js +4 -0
- package/dist/domain/architecture/consistent-barrel-files/no-reexports-outside-barrels-rule.d.ts.map +1 -0
- package/dist/domain/architecture/consistent-barrel-files/no-reexports-outside-barrels-rule.js +85 -0
- package/dist/{architecture → domain/architecture}/consistent-barrel-files/no-reexports-outside-barrels-test-utilities.d.ts +1 -1
- package/dist/domain/architecture/consistent-barrel-files/no-reexports-outside-barrels-test-utilities.d.ts.map +1 -0
- package/dist/domain/architecture/consistent-barrel-files/no-reexports-outside-barrels-test-utilities.js +91 -0
- package/dist/{architecture → domain/architecture}/consistent-barrel-files/no-reexports-outside-barrels-utilities.d.ts +4 -6
- package/dist/domain/architecture/consistent-barrel-files/no-reexports-outside-barrels-utilities.d.ts.map +1 -0
- package/dist/domain/architecture/consistent-barrel-files/no-reexports-outside-barrels-utilities.js +95 -0
- package/dist/domain/architecture/consistent-barrel-files/rule.d.ts.map +1 -0
- package/dist/domain/architecture/consistent-barrel-files/rule.js +43 -0
- package/dist/domain/architecture/consistent-barrel-files/rule.repeat-runs.d.ts +4 -0
- package/dist/domain/architecture/consistent-barrel-files/rule.repeat-runs.d.ts.map +1 -0
- package/dist/domain/architecture/consistent-barrel-files/rule.repeat-runs.js +4 -0
- package/dist/{architecture → domain/architecture}/consistent-barrel-files/test-helpers.d.ts +48 -48
- package/dist/domain/architecture/consistent-barrel-files/test-helpers.d.ts.map +1 -0
- package/dist/domain/architecture/consistent-barrel-files/test-helpers.file-writers.d.ts +20 -0
- package/dist/domain/architecture/consistent-barrel-files/test-helpers.file-writers.d.ts.map +1 -0
- package/dist/domain/architecture/consistent-barrel-files/test-helpers.file-writers.js +25 -0
- package/dist/domain/architecture/consistent-barrel-files/test-helpers.js +235 -0
- package/dist/domain/architecture/consistent-barrel-files/types.d.ts +19 -0
- package/dist/domain/architecture/consistent-barrel-files/types.d.ts.map +1 -0
- package/dist/domain/architecture/consistent-barrel-files/types.js +2 -0
- package/dist/{architecture → domain/architecture}/index.d.ts +1 -1
- package/dist/domain/architecture/index.d.ts.map +1 -0
- package/dist/domain/architecture/index.js +2 -0
- package/dist/{core → domain/core}/index.d.ts +2 -2
- package/dist/domain/core/index.d.ts.map +1 -0
- package/dist/domain/core/index.js +3 -0
- package/dist/domain/core/no-multiple-declarators/index.d.ts +2 -0
- package/dist/domain/core/no-multiple-declarators/index.d.ts.map +1 -0
- package/dist/domain/core/no-multiple-declarators/index.js +2 -0
- package/dist/domain/core/no-multiple-declarators/rule-test-helpers.d.ts +101 -0
- package/dist/domain/core/no-multiple-declarators/rule-test-helpers.d.ts.map +1 -0
- package/dist/domain/core/no-multiple-declarators/rule-test-helpers.js +108 -0
- package/dist/{core → domain/core}/no-multiple-declarators/rule.d.ts +1 -0
- package/dist/domain/core/no-multiple-declarators/rule.d.ts.map +1 -0
- package/dist/domain/core/no-multiple-declarators/rule.fixes.d.ts +35 -0
- package/dist/domain/core/no-multiple-declarators/rule.fixes.d.ts.map +1 -0
- package/dist/domain/core/no-multiple-declarators/rule.fixes.js +95 -0
- package/dist/domain/core/no-multiple-declarators/rule.guardrails.d.ts +4 -0
- package/dist/domain/core/no-multiple-declarators/rule.guardrails.d.ts.map +1 -0
- package/dist/domain/core/no-multiple-declarators/rule.guardrails.js +4 -0
- package/dist/domain/core/no-multiple-declarators/rule.js +219 -0
- package/dist/domain/core/no-multiple-declarators/rule.mocked-types.d.ts +4 -0
- package/dist/domain/core/no-multiple-declarators/rule.mocked-types.d.ts.map +1 -0
- package/dist/domain/core/no-multiple-declarators/rule.mocked-types.js +4 -0
- package/dist/domain/core/no-multiple-declarators/types.d.ts +77 -0
- package/dist/domain/core/no-multiple-declarators/types.d.ts.map +1 -0
- package/dist/domain/core/no-multiple-declarators/types.js +38 -0
- package/dist/domain/core/prefer-interface-types/index.d.ts +2 -0
- package/dist/domain/core/prefer-interface-types/index.d.ts.map +1 -0
- package/dist/domain/core/prefer-interface-types/index.js +2 -0
- package/dist/domain/core/prefer-interface-types/rule.d.ts.map +1 -0
- package/dist/domain/core/prefer-interface-types/rule.js +145 -0
- package/dist/domain/core/prefer-interface-types/test-helpers.d.ts.map +1 -0
- package/dist/domain/core/prefer-interface-types/test-helpers.js +116 -0
- package/dist/{custom-rule-documentation.d.ts → domain/custom-rule-documentation.d.ts} +1 -1
- package/dist/domain/custom-rule-documentation.d.ts.map +1 -0
- package/dist/domain/custom-rule-documentation.js +35 -0
- package/dist/domain/docs/index.d.ts +4 -0
- package/dist/domain/docs/index.d.ts.map +1 -0
- package/dist/domain/docs/index.js +4 -0
- package/dist/domain/docs/no-interface-member-docs/comment-utilities-test-helpers.d.ts.map +1 -0
- package/dist/domain/docs/no-interface-member-docs/comment-utilities-test-helpers.js +129 -0
- package/dist/{docs → domain/docs}/no-interface-member-docs/comment-utilities.d.ts +1 -1
- package/dist/domain/docs/no-interface-member-docs/comment-utilities.d.ts.map +1 -0
- package/dist/domain/docs/no-interface-member-docs/comment-utilities.js +146 -0
- package/dist/domain/docs/no-interface-member-docs/index.d.ts +2 -0
- package/dist/domain/docs/no-interface-member-docs/index.d.ts.map +1 -0
- package/dist/domain/docs/no-interface-member-docs/index.js +2 -0
- package/dist/{docs → domain/docs}/no-interface-member-docs/parameter-tags.d.ts +1 -1
- package/dist/domain/docs/no-interface-member-docs/parameter-tags.d.ts.map +1 -0
- package/dist/domain/docs/no-interface-member-docs/parameter-tags.js +101 -0
- package/dist/{docs → domain/docs}/no-interface-member-docs/parameter-utilities.d.ts +1 -1
- package/dist/domain/docs/no-interface-member-docs/parameter-utilities.d.ts.map +1 -0
- package/dist/domain/docs/no-interface-member-docs/parameter-utilities.js +125 -0
- package/dist/domain/docs/no-interface-member-docs/rule.d.ts.map +1 -0
- package/dist/domain/docs/no-interface-member-docs/rule.js +168 -0
- package/dist/domain/docs/no-interface-member-docs/test-helpers.d.ts.map +1 -0
- package/dist/domain/docs/no-interface-member-docs/test-helpers.js +157 -0
- package/dist/{docs → domain/docs}/no-interface-member-docs/types.d.ts +2 -2
- package/dist/domain/docs/no-interface-member-docs/types.d.ts.map +1 -0
- package/dist/domain/docs/no-interface-member-docs/types.js +2 -0
- package/dist/domain/docs/require-example-language/create-fixer.d.ts +5 -0
- package/dist/domain/docs/require-example-language/create-fixer.d.ts.map +1 -0
- package/dist/domain/docs/require-example-language/create-fixer.js +5 -0
- package/dist/domain/docs/require-example-language/empty-fence-fixes.d.ts.map +1 -0
- package/dist/domain/docs/require-example-language/empty-fence-fixes.js +169 -0
- package/dist/domain/docs/require-example-language/example-utilities.d.ts.map +1 -0
- package/dist/domain/docs/require-example-language/example-utilities.js +76 -0
- package/dist/{docs → domain/docs}/require-example-language/examples.d.ts +1 -1
- package/dist/domain/docs/require-example-language/examples.d.ts.map +1 -0
- package/dist/domain/docs/require-example-language/examples.js +181 -0
- package/dist/{docs → domain/docs}/require-example-language/fixes.d.ts +2 -2
- package/dist/domain/docs/require-example-language/fixes.d.ts.map +1 -0
- package/dist/domain/docs/require-example-language/fixes.js +182 -0
- package/dist/domain/docs/require-example-language/index.d.ts +3 -0
- package/dist/domain/docs/require-example-language/index.d.ts.map +1 -0
- package/dist/domain/docs/require-example-language/index.js +2 -0
- package/dist/{docs → domain/docs}/require-example-language/reporting.d.ts +1 -1
- package/dist/domain/docs/require-example-language/reporting.d.ts.map +1 -0
- package/dist/domain/docs/require-example-language/reporting.js +148 -0
- package/dist/domain/docs/require-example-language/rule.d.ts.map +1 -0
- package/dist/domain/docs/require-example-language/rule.js +34 -0
- package/dist/domain/docs/require-example-language/types.d.ts.map +1 -0
- package/dist/domain/docs/require-example-language/types.js +2 -0
- package/dist/domain/docs/single-line-jsdoc/index.d.ts +2 -0
- package/dist/domain/docs/single-line-jsdoc/index.d.ts.map +1 -0
- package/dist/domain/docs/single-line-jsdoc/index.js +2 -0
- package/dist/domain/docs/single-line-jsdoc/rule.d.ts.map +1 -0
- package/dist/domain/docs/single-line-jsdoc/rule.edge-cases.d.ts +4 -0
- package/dist/domain/docs/single-line-jsdoc/rule.edge-cases.d.ts.map +1 -0
- package/dist/domain/docs/single-line-jsdoc/rule.edge-cases.js +5 -0
- package/dist/domain/docs/single-line-jsdoc/rule.js +196 -0
- package/dist/domain/docs/single-line-jsdoc/rule.node-lookups.d.ts +4 -0
- package/dist/domain/docs/single-line-jsdoc/rule.node-lookups.d.ts.map +1 -0
- package/dist/domain/docs/single-line-jsdoc/rule.node-lookups.js +5 -0
- package/dist/domain/docs/single-line-jsdoc/single-line-jsdoc-content.d.ts.map +1 -0
- package/dist/domain/docs/single-line-jsdoc/single-line-jsdoc-content.js +95 -0
- package/dist/{docs → domain/docs}/single-line-jsdoc/single-line-jsdoc-utilities.d.ts +1 -1
- package/dist/domain/docs/single-line-jsdoc/single-line-jsdoc-utilities.d.ts.map +1 -0
- package/dist/domain/docs/single-line-jsdoc/single-line-jsdoc-utilities.js +140 -0
- package/dist/domain/docs/test-helpers.d.ts.map +1 -0
- package/dist/domain/docs/test-helpers.js +107 -0
- package/dist/domain/index.d.ts +6 -0
- package/dist/domain/index.d.ts.map +1 -0
- package/dist/domain/index.js +6 -0
- package/dist/domain/testing/aaa/analyzer.analysis.d.ts +92 -0
- package/dist/domain/testing/aaa/analyzer.analysis.d.ts.map +1 -0
- package/dist/domain/testing/aaa/analyzer.analysis.helpers.d.ts +4 -0
- package/dist/domain/testing/aaa/analyzer.analysis.helpers.d.ts.map +1 -0
- package/dist/domain/testing/aaa/analyzer.analysis.helpers.js +4 -0
- package/dist/domain/testing/aaa/analyzer.analysis.js +247 -0
- package/dist/domain/testing/aaa/analyzer.assertions.d.ts +93 -0
- package/dist/domain/testing/aaa/analyzer.assertions.d.ts.map +1 -0
- package/dist/domain/testing/aaa/analyzer.assertions.js +283 -0
- package/dist/domain/testing/aaa/analyzer.classification.d.ts +75 -0
- package/dist/domain/testing/aaa/analyzer.classification.d.ts.map +1 -0
- package/dist/domain/testing/aaa/analyzer.classification.js +201 -0
- package/dist/domain/testing/aaa/analyzer.classification.member-patterns.d.ts +9 -0
- package/dist/domain/testing/aaa/analyzer.classification.member-patterns.d.ts.map +1 -0
- package/dist/domain/testing/aaa/analyzer.classification.member-patterns.js +10 -0
- package/dist/domain/testing/aaa/analyzer.d.ts +46 -0
- package/dist/domain/testing/aaa/analyzer.d.ts.map +1 -0
- package/dist/domain/testing/aaa/analyzer.js +59 -0
- package/dist/domain/testing/aaa/analyzer.super.d.ts +107 -0
- package/dist/domain/testing/aaa/analyzer.super.d.ts.map +1 -0
- package/dist/domain/testing/aaa/analyzer.super.js +228 -0
- package/dist/{testing → domain/testing}/aaa/index.d.ts +2 -2
- package/dist/domain/testing/aaa/index.d.ts.map +1 -0
- package/dist/domain/testing/aaa/index.js +2 -0
- package/dist/domain/testing/aaa/types.d.ts +58 -0
- package/dist/domain/testing/aaa/types.d.ts.map +1 -0
- package/dist/domain/testing/aaa/types.js +2 -0
- package/dist/domain/testing/assert-actual-expected-names/index.d.ts +2 -0
- package/dist/domain/testing/assert-actual-expected-names/index.d.ts.map +1 -0
- package/dist/domain/testing/assert-actual-expected-names/index.js +2 -0
- package/dist/{testing → domain/testing}/assert-actual-expected-names/rule.d.ts +1 -0
- package/dist/domain/testing/assert-actual-expected-names/rule.d.ts.map +1 -0
- package/dist/domain/testing/assert-actual-expected-names/rule.js +113 -0
- package/dist/domain/testing/enforce-aaa-phase-purity/index.d.ts +2 -0
- package/dist/domain/testing/enforce-aaa-phase-purity/index.d.ts.map +1 -0
- package/dist/domain/testing/enforce-aaa-phase-purity/index.js +2 -0
- package/dist/domain/testing/enforce-aaa-phase-purity/pattern-identifiers.d.ts +13 -0
- package/dist/domain/testing/enforce-aaa-phase-purity/pattern-identifiers.d.ts.map +1 -0
- package/dist/domain/testing/enforce-aaa-phase-purity/pattern-identifiers.js +134 -0
- package/dist/domain/testing/enforce-aaa-phase-purity/phase-purity-identifiers.d.ts +25 -0
- package/dist/domain/testing/enforce-aaa-phase-purity/phase-purity-identifiers.d.ts.map +1 -0
- package/dist/domain/testing/enforce-aaa-phase-purity/phase-purity-identifiers.js +138 -0
- package/dist/domain/testing/enforce-aaa-phase-purity/phase-purity-reporting.behavior.d.ts +4 -0
- package/dist/domain/testing/enforce-aaa-phase-purity/phase-purity-reporting.behavior.d.ts.map +1 -0
- package/dist/domain/testing/enforce-aaa-phase-purity/phase-purity-reporting.behavior.js +4 -0
- package/dist/domain/testing/enforce-aaa-phase-purity/phase-purity-reporting.d.ts +14 -0
- package/dist/domain/testing/enforce-aaa-phase-purity/phase-purity-reporting.d.ts.map +1 -0
- package/dist/domain/testing/enforce-aaa-phase-purity/phase-purity-reporting.js +180 -0
- package/dist/domain/testing/enforce-aaa-phase-purity/rule-test-helpers.d.ts +42 -0
- package/dist/domain/testing/enforce-aaa-phase-purity/rule-test-helpers.d.ts.map +1 -0
- package/dist/domain/testing/enforce-aaa-phase-purity/rule-test-helpers.js +188 -0
- package/dist/{testing → domain/testing}/enforce-aaa-phase-purity/rule.d.ts +1 -0
- package/dist/domain/testing/enforce-aaa-phase-purity/rule.d.ts.map +1 -0
- package/dist/domain/testing/enforce-aaa-phase-purity/rule.js +34 -0
- package/dist/domain/testing/enforce-aaa-structure/index.d.ts +2 -0
- package/dist/domain/testing/enforce-aaa-structure/index.d.ts.map +1 -0
- package/dist/domain/testing/enforce-aaa-structure/index.js +2 -0
- package/dist/{testing → domain/testing}/enforce-aaa-structure/rule.d.ts +1 -0
- package/dist/domain/testing/enforce-aaa-structure/rule.d.ts.map +1 -0
- package/dist/domain/testing/enforce-aaa-structure/rule.js +85 -0
- package/dist/{testing → domain/testing}/index.d.ts +9 -8
- package/dist/domain/testing/index.d.ts.map +1 -0
- package/dist/domain/testing/index.js +10 -0
- package/dist/domain/testing/prefer-vi-mocked-import/fix-import-statements.d.ts +29 -0
- package/dist/domain/testing/prefer-vi-mocked-import/fix-import-statements.d.ts.map +1 -0
- package/dist/domain/testing/prefer-vi-mocked-import/fix-import-statements.js +90 -0
- package/dist/domain/testing/prefer-vi-mocked-import/fix-import-updates.d.ts +31 -0
- package/dist/domain/testing/prefer-vi-mocked-import/fix-import-updates.d.ts.map +1 -0
- package/dist/domain/testing/prefer-vi-mocked-import/fix-import-updates.js +43 -0
- package/dist/domain/testing/prefer-vi-mocked-import/fix-imports.d.ts +16 -0
- package/dist/domain/testing/prefer-vi-mocked-import/fix-imports.d.ts.map +1 -0
- package/dist/domain/testing/prefer-vi-mocked-import/fix-imports.js +205 -0
- package/dist/domain/testing/prefer-vi-mocked-import/fix.d.ts +28 -0
- package/dist/domain/testing/prefer-vi-mocked-import/fix.d.ts.map +1 -0
- package/dist/domain/testing/prefer-vi-mocked-import/fix.js +171 -0
- package/dist/domain/testing/prefer-vi-mocked-import/index.d.ts +2 -0
- package/dist/domain/testing/prefer-vi-mocked-import/index.d.ts.map +1 -0
- package/dist/domain/testing/prefer-vi-mocked-import/index.js +2 -0
- package/dist/{testing → domain/testing}/prefer-vi-mocked-import/match-bindings.d.ts +1 -1
- package/dist/domain/testing/prefer-vi-mocked-import/match-bindings.d.ts.map +1 -0
- package/dist/domain/testing/prefer-vi-mocked-import/match-bindings.js +52 -0
- package/dist/{testing → domain/testing}/prefer-vi-mocked-import/match-declarations.d.ts +2 -1
- package/dist/domain/testing/prefer-vi-mocked-import/match-declarations.d.ts.map +1 -0
- package/dist/domain/testing/prefer-vi-mocked-import/match-declarations.js +131 -0
- package/dist/domain/testing/prefer-vi-mocked-import/match-helpers.d.ts.map +1 -0
- package/dist/domain/testing/prefer-vi-mocked-import/match-helpers.js +102 -0
- package/dist/{testing → domain/testing}/prefer-vi-mocked-import/match-imports.d.ts +1 -1
- package/dist/domain/testing/prefer-vi-mocked-import/match-imports.d.ts.map +1 -0
- package/dist/domain/testing/prefer-vi-mocked-import/match-imports.js +156 -0
- package/dist/{testing → domain/testing}/prefer-vi-mocked-import/match-rewrites.d.ts +1 -1
- package/dist/domain/testing/prefer-vi-mocked-import/match-rewrites.d.ts.map +1 -0
- package/dist/domain/testing/prefer-vi-mocked-import/match-rewrites.js +119 -0
- package/dist/domain/testing/prefer-vi-mocked-import/match-walk.d.ts.map +1 -0
- package/dist/domain/testing/prefer-vi-mocked-import/match-walk.js +62 -0
- package/dist/domain/testing/prefer-vi-mocked-import/match.d.ts +26 -0
- package/dist/domain/testing/prefer-vi-mocked-import/match.d.ts.map +1 -0
- package/dist/domain/testing/prefer-vi-mocked-import/match.js +198 -0
- package/dist/domain/testing/prefer-vi-mocked-import/rule-test-helpers.d.ts +20 -0
- package/dist/domain/testing/prefer-vi-mocked-import/rule-test-helpers.d.ts.map +1 -0
- package/dist/domain/testing/prefer-vi-mocked-import/rule-test-helpers.js +39 -0
- package/dist/domain/testing/prefer-vi-mocked-import/rule.d.ts.map +1 -0
- package/dist/domain/testing/prefer-vi-mocked-import/rule.js +36 -0
- package/dist/{testing → domain/testing}/prefer-vi-mocked-import/types.d.ts +1 -1
- package/dist/domain/testing/prefer-vi-mocked-import/types.d.ts.map +1 -0
- package/dist/domain/testing/prefer-vi-mocked-import/types.js +2 -0
- package/dist/domain/testing/prefer-vitest-incremental-casts/ast-helpers.d.ts +86 -0
- package/dist/domain/testing/prefer-vitest-incremental-casts/ast-helpers.d.ts.map +1 -0
- package/dist/domain/testing/prefer-vitest-incremental-casts/ast-helpers.js +150 -0
- package/dist/domain/testing/prefer-vitest-incremental-casts/index.d.ts +2 -0
- package/dist/domain/testing/prefer-vitest-incremental-casts/index.d.ts.map +1 -0
- package/dist/domain/testing/prefer-vitest-incremental-casts/index.js +2 -0
- package/dist/domain/testing/prefer-vitest-incremental-casts/match-input.d.ts +14 -0
- package/dist/domain/testing/prefer-vitest-incremental-casts/match-input.d.ts.map +1 -0
- package/dist/domain/testing/prefer-vitest-incremental-casts/match-input.js +81 -0
- package/dist/domain/testing/prefer-vitest-incremental-casts/match.d.ts +13 -0
- package/dist/domain/testing/prefer-vitest-incremental-casts/match.d.ts.map +1 -0
- package/dist/domain/testing/prefer-vitest-incremental-casts/match.js +189 -0
- package/dist/domain/testing/prefer-vitest-incremental-casts/replacement-helpers.d.ts +25 -0
- package/dist/domain/testing/prefer-vitest-incremental-casts/replacement-helpers.d.ts.map +1 -0
- package/dist/domain/testing/prefer-vitest-incremental-casts/replacement-helpers.js +92 -0
- package/dist/domain/testing/prefer-vitest-incremental-casts/rule-test-helpers.d.ts +32 -0
- package/dist/domain/testing/prefer-vitest-incremental-casts/rule-test-helpers.d.ts.map +1 -0
- package/dist/domain/testing/prefer-vitest-incremental-casts/rule-test-helpers.js +164 -0
- package/dist/domain/testing/prefer-vitest-incremental-casts/rule.d.ts +5 -0
- package/dist/domain/testing/prefer-vitest-incremental-casts/rule.d.ts.map +1 -0
- package/dist/domain/testing/prefer-vitest-incremental-casts/rule.guardrails.d.ts +4 -0
- package/dist/domain/testing/prefer-vitest-incremental-casts/rule.guardrails.d.ts.map +1 -0
- package/dist/domain/testing/prefer-vitest-incremental-casts/rule.guardrails.js +4 -0
- package/dist/domain/testing/prefer-vitest-incremental-casts/rule.input-shapes.d.ts +4 -0
- package/dist/domain/testing/prefer-vitest-incremental-casts/rule.input-shapes.d.ts.map +1 -0
- package/dist/domain/testing/prefer-vitest-incremental-casts/rule.input-shapes.js +4 -0
- package/dist/domain/testing/prefer-vitest-incremental-casts/rule.js +62 -0
- package/dist/domain/testing/prefer-vitest-incremental-casts/rule.signature-fallback.d.ts +4 -0
- package/dist/domain/testing/prefer-vitest-incremental-casts/rule.signature-fallback.d.ts.map +1 -0
- package/dist/domain/testing/prefer-vitest-incremental-casts/rule.signature-fallback.js +4 -0
- package/dist/domain/testing/prefer-vitest-incremental-casts/type-helpers.d.ts +24 -0
- package/dist/domain/testing/prefer-vitest-incremental-casts/type-helpers.d.ts.map +1 -0
- package/dist/domain/testing/prefer-vitest-incremental-casts/type-helpers.js +113 -0
- package/dist/domain/testing/prefer-vitest-incremental-casts/type-shape-helpers.d.ts +36 -0
- package/dist/domain/testing/prefer-vitest-incremental-casts/type-shape-helpers.d.ts.map +1 -0
- package/dist/domain/testing/prefer-vitest-incremental-casts/type-shape-helpers.js +138 -0
- package/dist/domain/testing/prefer-vitest-incremental-casts/types.d.ts +203 -0
- package/dist/domain/testing/prefer-vitest-incremental-casts/types.d.ts.map +1 -0
- package/dist/domain/testing/prefer-vitest-incremental-casts/types.js +2 -0
- package/dist/domain/testing/require-aaa-sections/index.d.ts +2 -0
- package/dist/domain/testing/require-aaa-sections/index.d.ts.map +1 -0
- package/dist/domain/testing/require-aaa-sections/index.js +2 -0
- package/dist/domain/testing/require-aaa-sections/missing-section-fixes.d.ts +17 -0
- package/dist/domain/testing/require-aaa-sections/missing-section-fixes.d.ts.map +1 -0
- package/dist/domain/testing/require-aaa-sections/missing-section-fixes.js +150 -0
- package/dist/{testing → domain/testing}/require-aaa-sections/rule.d.ts +1 -0
- package/dist/domain/testing/require-aaa-sections/rule.d.ts.map +1 -0
- package/dist/domain/testing/require-aaa-sections/rule.js +129 -0
- package/dist/domain/testing/require-aaa-sections/rule.reporting.d.ts +104 -0
- package/dist/domain/testing/require-aaa-sections/rule.reporting.d.ts.map +1 -0
- package/dist/domain/testing/require-aaa-sections/rule.reporting.js +217 -0
- package/dist/domain/testing/require-act-result-capture/index.d.ts +2 -0
- package/dist/domain/testing/require-act-result-capture/index.d.ts.map +1 -0
- package/dist/domain/testing/require-act-result-capture/index.js +2 -0
- package/dist/{testing → domain/testing}/require-act-result-capture/rule.d.ts +1 -0
- package/dist/domain/testing/require-act-result-capture/rule.d.ts.map +1 -0
- package/dist/domain/testing/require-act-result-capture/rule.js +106 -0
- package/dist/domain/testing/require-test-companion/index.d.ts +3 -0
- package/dist/domain/testing/require-test-companion/index.d.ts.map +1 -0
- package/dist/domain/testing/require-test-companion/index.js +3 -0
- package/dist/{testing → domain/testing}/require-test-companion/require-test-companion-listeners.d.ts +1 -1
- package/dist/domain/testing/require-test-companion/require-test-companion-listeners.d.ts.map +1 -0
- package/dist/domain/testing/require-test-companion/require-test-companion-listeners.js +145 -0
- package/dist/domain/testing/require-test-companion/require-test-companion-options.d.ts.map +1 -0
- package/dist/domain/testing/require-test-companion/require-test-companion-options.js +113 -0
- package/dist/{testing → domain/testing}/require-test-companion/require-test-companion-test-helpers.d.ts +1 -1
- package/dist/domain/testing/require-test-companion/require-test-companion-test-helpers.d.ts.map +1 -0
- package/dist/domain/testing/require-test-companion/require-test-companion-test-helpers.js +184 -0
- package/dist/{testing → domain/testing}/require-test-companion/require-test-companion-utilities.d.ts +1 -1
- package/dist/domain/testing/require-test-companion/require-test-companion-utilities.d.ts.map +1 -0
- package/dist/domain/testing/require-test-companion/require-test-companion-utilities.js +26 -0
- package/dist/domain/testing/require-test-companion/rule.d.ts.map +1 -0
- package/dist/domain/testing/require-test-companion/rule.js +57 -0
- package/dist/domain/testing/require-test-companion/types.d.ts.map +1 -0
- package/dist/domain/testing/require-test-companion/types.js +2 -0
- package/dist/domain/testing/single-act-statement/index.d.ts +2 -0
- package/dist/domain/testing/single-act-statement/index.d.ts.map +1 -0
- package/dist/domain/testing/single-act-statement/index.js +2 -0
- package/dist/{testing → domain/testing}/single-act-statement/rule.d.ts +1 -0
- package/dist/domain/testing/single-act-statement/rule.d.ts.map +1 -0
- package/dist/domain/testing/single-act-statement/rule.js +34 -0
- package/dist/index.d.ts +4 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -6
- package/dist/{codeperfect-plugin.d.ts → infrastructure/codeperfect-plugin.d.ts} +2 -0
- package/dist/infrastructure/codeperfect-plugin.d.ts.map +1 -0
- package/dist/infrastructure/codeperfect-plugin.js +30 -0
- package/dist/infrastructure/index.d.ts +5 -0
- package/dist/infrastructure/index.d.ts.map +1 -0
- package/dist/infrastructure/index.js +4 -0
- package/dist/infrastructure/presets.d.ts +18 -0
- package/dist/infrastructure/presets.d.ts.map +1 -0
- package/dist/infrastructure/presets.js +81 -0
- package/package.json +54 -27
- package/dist/architecture/consistent-barrel-files/consistent-barrel-files-listeners.d.ts.map +0 -1
- package/dist/architecture/consistent-barrel-files/consistent-barrel-files-listeners.js +0 -131
- package/dist/architecture/consistent-barrel-files/consistent-barrel-files-options.d.ts +0 -48
- package/dist/architecture/consistent-barrel-files/consistent-barrel-files-options.d.ts.map +0 -1
- package/dist/architecture/consistent-barrel-files/consistent-barrel-files-options.js +0 -126
- package/dist/architecture/consistent-barrel-files/exports-only-rule-test-utilities.d.ts.map +0 -1
- package/dist/architecture/consistent-barrel-files/exports-only-rule-test-utilities.js +0 -90
- package/dist/architecture/consistent-barrel-files/exports-only-rule.d.ts.map +0 -1
- package/dist/architecture/consistent-barrel-files/exports-only-rule.js +0 -218
- package/dist/architecture/consistent-barrel-files/index.d.ts +0 -5
- package/dist/architecture/consistent-barrel-files/index.d.ts.map +0 -1
- package/dist/architecture/consistent-barrel-files/index.js +0 -4
- package/dist/architecture/consistent-barrel-files/no-reexports-outside-barrels-rule.d.ts.map +0 -1
- package/dist/architecture/consistent-barrel-files/no-reexports-outside-barrels-rule.js +0 -100
- package/dist/architecture/consistent-barrel-files/no-reexports-outside-barrels-test-utilities.d.ts.map +0 -1
- package/dist/architecture/consistent-barrel-files/no-reexports-outside-barrels-test-utilities.js +0 -90
- package/dist/architecture/consistent-barrel-files/no-reexports-outside-barrels-utilities.d.ts.map +0 -1
- package/dist/architecture/consistent-barrel-files/no-reexports-outside-barrels-utilities.js +0 -154
- package/dist/architecture/consistent-barrel-files/rule.d.ts.map +0 -1
- package/dist/architecture/consistent-barrel-files/rule.js +0 -58
- package/dist/architecture/consistent-barrel-files/test-helpers.d.ts.map +0 -1
- package/dist/architecture/consistent-barrel-files/test-helpers.js +0 -229
- package/dist/architecture/consistent-barrel-files/types.d.ts +0 -25
- package/dist/architecture/consistent-barrel-files/types.d.ts.map +0 -1
- package/dist/architecture/consistent-barrel-files/types.js +0 -2
- package/dist/architecture/index.d.ts.map +0 -1
- package/dist/architecture/index.js +0 -2
- package/dist/benchmark-rules.d.ts +0 -83
- package/dist/benchmark-rules.d.ts.map +0 -1
- package/dist/benchmark-rules.js +0 -175
- package/dist/codeperfect-plugin.d.ts.map +0 -1
- package/dist/codeperfect-plugin.js +0 -29
- package/dist/core/index.d.ts.map +0 -1
- package/dist/core/index.js +0 -3
- package/dist/core/no-multiple-declarators/index.d.ts +0 -2
- package/dist/core/no-multiple-declarators/index.d.ts.map +0 -1
- package/dist/core/no-multiple-declarators/index.js +0 -2
- package/dist/core/no-multiple-declarators/rule.d.ts.map +0 -1
- package/dist/core/no-multiple-declarators/rule.js +0 -100
- package/dist/core/prefer-interface-types/index.d.ts +0 -2
- package/dist/core/prefer-interface-types/index.d.ts.map +0 -1
- package/dist/core/prefer-interface-types/index.js +0 -2
- package/dist/core/prefer-interface-types/rule.d.ts.map +0 -1
- package/dist/core/prefer-interface-types/rule.js +0 -145
- package/dist/core/prefer-interface-types/test-helpers.d.ts.map +0 -1
- package/dist/core/prefer-interface-types/test-helpers.js +0 -116
- package/dist/custom-rule-documentation.d.ts.map +0 -1
- package/dist/custom-rule-documentation.js +0 -35
- package/dist/custom-rules.d.ts.map +0 -1
- package/dist/custom-rules.js +0 -70
- package/dist/docs/index.d.ts +0 -4
- package/dist/docs/index.d.ts.map +0 -1
- package/dist/docs/index.js +0 -4
- package/dist/docs/no-interface-member-docs/comment-utilities-test-helpers.d.ts.map +0 -1
- package/dist/docs/no-interface-member-docs/comment-utilities-test-helpers.js +0 -129
- package/dist/docs/no-interface-member-docs/comment-utilities.d.ts.map +0 -1
- package/dist/docs/no-interface-member-docs/comment-utilities.js +0 -146
- package/dist/docs/no-interface-member-docs/index.d.ts +0 -2
- package/dist/docs/no-interface-member-docs/index.d.ts.map +0 -1
- package/dist/docs/no-interface-member-docs/index.js +0 -2
- package/dist/docs/no-interface-member-docs/parameter-tags.d.ts.map +0 -1
- package/dist/docs/no-interface-member-docs/parameter-tags.js +0 -101
- package/dist/docs/no-interface-member-docs/parameter-utilities.d.ts.map +0 -1
- package/dist/docs/no-interface-member-docs/parameter-utilities.js +0 -125
- package/dist/docs/no-interface-member-docs/rule.d.ts.map +0 -1
- package/dist/docs/no-interface-member-docs/rule.js +0 -168
- package/dist/docs/no-interface-member-docs/test-helpers.d.ts.map +0 -1
- package/dist/docs/no-interface-member-docs/test-helpers.js +0 -157
- package/dist/docs/no-interface-member-docs/types.d.ts.map +0 -1
- package/dist/docs/no-interface-member-docs/types.js +0 -2
- package/dist/docs/require-example-language/empty-fence-fixes.d.ts.map +0 -1
- package/dist/docs/require-example-language/empty-fence-fixes.js +0 -169
- package/dist/docs/require-example-language/example-utilities.d.ts.map +0 -1
- package/dist/docs/require-example-language/example-utilities.js +0 -76
- package/dist/docs/require-example-language/examples.d.ts.map +0 -1
- package/dist/docs/require-example-language/examples.js +0 -181
- package/dist/docs/require-example-language/fixes.d.ts.map +0 -1
- package/dist/docs/require-example-language/fixes.js +0 -182
- package/dist/docs/require-example-language/index.d.ts +0 -3
- package/dist/docs/require-example-language/index.d.ts.map +0 -1
- package/dist/docs/require-example-language/index.js +0 -2
- package/dist/docs/require-example-language/reporting.d.ts.map +0 -1
- package/dist/docs/require-example-language/reporting.js +0 -145
- package/dist/docs/require-example-language/rule.d.ts.map +0 -1
- package/dist/docs/require-example-language/rule.js +0 -34
- package/dist/docs/require-example-language/types.d.ts.map +0 -1
- package/dist/docs/require-example-language/types.js +0 -2
- package/dist/docs/single-line-jsdoc/index.d.ts +0 -2
- package/dist/docs/single-line-jsdoc/index.d.ts.map +0 -1
- package/dist/docs/single-line-jsdoc/index.js +0 -2
- package/dist/docs/single-line-jsdoc/rule.d.ts.map +0 -1
- package/dist/docs/single-line-jsdoc/rule.js +0 -196
- package/dist/docs/single-line-jsdoc/single-line-jsdoc-content.d.ts.map +0 -1
- package/dist/docs/single-line-jsdoc/single-line-jsdoc-content.js +0 -95
- package/dist/docs/single-line-jsdoc/single-line-jsdoc-utilities.d.ts.map +0 -1
- package/dist/docs/single-line-jsdoc/single-line-jsdoc-utilities.js +0 -140
- package/dist/docs/test-helpers.d.ts.map +0 -1
- package/dist/docs/test-helpers.js +0 -107
- package/dist/presets.d.ts +0 -10
- package/dist/presets.d.ts.map +0 -1
- package/dist/presets.js +0 -50
- package/dist/rules/index.d.ts +0 -5
- package/dist/rules/index.d.ts.map +0 -1
- package/dist/rules/index.js +0 -6
- package/dist/testing/aaa/analyzer.d.ts +0 -36
- package/dist/testing/aaa/analyzer.d.ts.map +0 -1
- package/dist/testing/aaa/analyzer.js +0 -490
- package/dist/testing/aaa/index.d.ts.map +0 -1
- package/dist/testing/aaa/index.js +0 -2
- package/dist/testing/aaa/types.d.ts +0 -31
- package/dist/testing/aaa/types.d.ts.map +0 -1
- package/dist/testing/aaa/types.js +0 -2
- package/dist/testing/assert-actual-expected-names/index.d.ts +0 -2
- package/dist/testing/assert-actual-expected-names/index.d.ts.map +0 -1
- package/dist/testing/assert-actual-expected-names/index.js +0 -2
- package/dist/testing/assert-actual-expected-names/rule.d.ts.map +0 -1
- package/dist/testing/assert-actual-expected-names/rule.js +0 -54
- package/dist/testing/enforce-aaa-phase-purity/index.d.ts +0 -2
- package/dist/testing/enforce-aaa-phase-purity/index.d.ts.map +0 -1
- package/dist/testing/enforce-aaa-phase-purity/index.js +0 -2
- package/dist/testing/enforce-aaa-phase-purity/rule.d.ts.map +0 -1
- package/dist/testing/enforce-aaa-phase-purity/rule.js +0 -110
- package/dist/testing/enforce-aaa-structure/index.d.ts +0 -2
- package/dist/testing/enforce-aaa-structure/index.d.ts.map +0 -1
- package/dist/testing/enforce-aaa-structure/index.js +0 -2
- package/dist/testing/enforce-aaa-structure/rule.d.ts.map +0 -1
- package/dist/testing/enforce-aaa-structure/rule.js +0 -48
- package/dist/testing/index.d.ts.map +0 -1
- package/dist/testing/index.js +0 -9
- package/dist/testing/prefer-vi-mocked-import/fix.d.ts +0 -16
- package/dist/testing/prefer-vi-mocked-import/fix.d.ts.map +0 -1
- package/dist/testing/prefer-vi-mocked-import/fix.js +0 -224
- package/dist/testing/prefer-vi-mocked-import/index.d.ts +0 -2
- package/dist/testing/prefer-vi-mocked-import/index.d.ts.map +0 -1
- package/dist/testing/prefer-vi-mocked-import/index.js +0 -2
- package/dist/testing/prefer-vi-mocked-import/match-bindings.d.ts.map +0 -1
- package/dist/testing/prefer-vi-mocked-import/match-bindings.js +0 -52
- package/dist/testing/prefer-vi-mocked-import/match-declarations.d.ts.map +0 -1
- package/dist/testing/prefer-vi-mocked-import/match-declarations.js +0 -99
- package/dist/testing/prefer-vi-mocked-import/match-helpers.d.ts.map +0 -1
- package/dist/testing/prefer-vi-mocked-import/match-helpers.js +0 -102
- package/dist/testing/prefer-vi-mocked-import/match-imports.d.ts.map +0 -1
- package/dist/testing/prefer-vi-mocked-import/match-imports.js +0 -156
- package/dist/testing/prefer-vi-mocked-import/match-rewrites.d.ts.map +0 -1
- package/dist/testing/prefer-vi-mocked-import/match-rewrites.js +0 -119
- package/dist/testing/prefer-vi-mocked-import/match-walk.d.ts.map +0 -1
- package/dist/testing/prefer-vi-mocked-import/match-walk.js +0 -62
- package/dist/testing/prefer-vi-mocked-import/match.d.ts +0 -15
- package/dist/testing/prefer-vi-mocked-import/match.d.ts.map +0 -1
- package/dist/testing/prefer-vi-mocked-import/match.js +0 -193
- package/dist/testing/prefer-vi-mocked-import/rule.d.ts.map +0 -1
- package/dist/testing/prefer-vi-mocked-import/rule.js +0 -32
- package/dist/testing/prefer-vi-mocked-import/types.d.ts.map +0 -1
- package/dist/testing/prefer-vi-mocked-import/types.js +0 -2
- package/dist/testing/require-aaa-sections/index.d.ts +0 -2
- package/dist/testing/require-aaa-sections/index.d.ts.map +0 -1
- package/dist/testing/require-aaa-sections/index.js +0 -2
- package/dist/testing/require-aaa-sections/rule.d.ts.map +0 -1
- package/dist/testing/require-aaa-sections/rule.js +0 -111
- package/dist/testing/require-act-result-capture/index.d.ts +0 -2
- package/dist/testing/require-act-result-capture/index.d.ts.map +0 -1
- package/dist/testing/require-act-result-capture/index.js +0 -2
- package/dist/testing/require-act-result-capture/rule.d.ts.map +0 -1
- package/dist/testing/require-act-result-capture/rule.js +0 -34
- package/dist/testing/require-test-companion/index.d.ts +0 -3
- package/dist/testing/require-test-companion/index.d.ts.map +0 -1
- package/dist/testing/require-test-companion/index.js +0 -3
- package/dist/testing/require-test-companion/require-test-companion-listeners.d.ts.map +0 -1
- package/dist/testing/require-test-companion/require-test-companion-listeners.js +0 -145
- package/dist/testing/require-test-companion/require-test-companion-options.d.ts.map +0 -1
- package/dist/testing/require-test-companion/require-test-companion-options.js +0 -112
- package/dist/testing/require-test-companion/require-test-companion-test-helpers.d.ts.map +0 -1
- package/dist/testing/require-test-companion/require-test-companion-test-helpers.js +0 -183
- package/dist/testing/require-test-companion/require-test-companion-utilities.d.ts.map +0 -1
- package/dist/testing/require-test-companion/require-test-companion-utilities.js +0 -26
- package/dist/testing/require-test-companion/rule.d.ts.map +0 -1
- package/dist/testing/require-test-companion/rule.js +0 -57
- package/dist/testing/require-test-companion/types.d.ts.map +0 -1
- package/dist/testing/require-test-companion/types.js +0 -2
- package/dist/testing/single-act-statement/index.d.ts +0 -2
- package/dist/testing/single-act-statement/index.d.ts.map +0 -1
- package/dist/testing/single-act-statement/index.js +0 -2
- package/dist/testing/single-act-statement/rule.d.ts.map +0 -1
- package/dist/testing/single-act-statement/rule.js +0 -33
- /package/dist/{architecture → domain/architecture}/consistent-barrel-files/exports-only-rule.d.ts +0 -0
- /package/dist/{architecture → domain/architecture}/consistent-barrel-files/no-reexports-outside-barrels-rule.d.ts +0 -0
- /package/dist/{architecture → domain/architecture}/consistent-barrel-files/rule.d.ts +0 -0
- /package/dist/{core → domain/core}/prefer-interface-types/rule.d.ts +0 -0
- /package/dist/{core → domain/core}/prefer-interface-types/test-helpers.d.ts +0 -0
- /package/dist/{docs → domain/docs}/no-interface-member-docs/comment-utilities-test-helpers.d.ts +0 -0
- /package/dist/{docs → domain/docs}/no-interface-member-docs/rule.d.ts +0 -0
- /package/dist/{docs → domain/docs}/no-interface-member-docs/test-helpers.d.ts +0 -0
- /package/dist/{docs → domain/docs}/require-example-language/empty-fence-fixes.d.ts +0 -0
- /package/dist/{docs → domain/docs}/require-example-language/example-utilities.d.ts +0 -0
- /package/dist/{docs → domain/docs}/require-example-language/rule.d.ts +0 -0
- /package/dist/{docs → domain/docs}/require-example-language/types.d.ts +0 -0
- /package/dist/{docs → domain/docs}/single-line-jsdoc/rule.d.ts +0 -0
- /package/dist/{docs → domain/docs}/single-line-jsdoc/single-line-jsdoc-content.d.ts +0 -0
- /package/dist/{docs → domain/docs}/test-helpers.d.ts +0 -0
- /package/dist/{testing → domain/testing}/prefer-vi-mocked-import/match-helpers.d.ts +0 -0
- /package/dist/{testing → domain/testing}/prefer-vi-mocked-import/match-walk.d.ts +0 -0
- /package/dist/{testing → domain/testing}/prefer-vi-mocked-import/rule.d.ts +0 -0
- /package/dist/{testing → domain/testing}/require-test-companion/require-test-companion-options.d.ts +0 -0
- /package/dist/{testing → domain/testing}/require-test-companion/rule.d.ts +0 -0
- /package/dist/{testing → domain/testing}/require-test-companion/types.d.ts +0 -0
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
import { createRuleDocumentation } from "../../custom-rule-documentation.js";
|
|
2
|
+
import { analyzeTestBlock, getLineStartRange, getPhaseBoundaryComments, hasBlankLineBeforeComment, } from "../aaa/index.js";
|
|
3
|
+
import { buildMissingSectionFixes } from "./missing-section-fixes.js";
|
|
4
|
+
/** Enforces explicit AAA section comments and spacing within supported test blocks. */
|
|
5
|
+
const requireAaaSectionsRule = {
|
|
6
|
+
create(context) {
|
|
7
|
+
return {
|
|
8
|
+
CallExpression(node) {
|
|
9
|
+
const analysis = analyzeTestBlock(context, node);
|
|
10
|
+
if (analysis === void 0) {
|
|
11
|
+
return;
|
|
12
|
+
}
|
|
13
|
+
reportMissingSections(context, analysis);
|
|
14
|
+
reportEmptySections(context, analysis);
|
|
15
|
+
reportCodeBeforeArrange(context, analysis);
|
|
16
|
+
reportBlankLineSeparators(context, analysis);
|
|
17
|
+
},
|
|
18
|
+
};
|
|
19
|
+
},
|
|
20
|
+
meta: {
|
|
21
|
+
docs: createRuleDocumentation("require-aaa-sections", "Require strict // Arrange, // Act, and // Assert markers in supported test blocks."),
|
|
22
|
+
fixable: "code",
|
|
23
|
+
messages: {
|
|
24
|
+
blankLineBeforeSection: "Insert a blank line before the // {{section}} section comment.",
|
|
25
|
+
codeBeforeArrange: "Move setup statements below the first // Arrange section comment.",
|
|
26
|
+
emptySection: "The // {{section}} section must contain code; comments alone do not count.",
|
|
27
|
+
missingSections: "Add the missing AAA section comments: {{sections}}.",
|
|
28
|
+
},
|
|
29
|
+
schema: [],
|
|
30
|
+
type: "layout",
|
|
31
|
+
},
|
|
32
|
+
};
|
|
33
|
+
/**
|
|
34
|
+
* Reports section comments that are missing a blank line above them.
|
|
35
|
+
* @param context ESLint rule context.
|
|
36
|
+
* @param analysis Parsed test-block analysis.
|
|
37
|
+
* @example
|
|
38
|
+
* ```typescript
|
|
39
|
+
* reportBlankLineSeparators({ report() {} } as never, { sectionComments: [], sourceText: "" } as never);
|
|
40
|
+
* ```
|
|
41
|
+
*/
|
|
42
|
+
function reportBlankLineSeparators(context, analysis) {
|
|
43
|
+
for (const sectionComment of getPhaseBoundaryComments(analysis)) {
|
|
44
|
+
if (!hasBlankLineBeforeComment(analysis.sourceText, sectionComment.comment)) {
|
|
45
|
+
context.report({
|
|
46
|
+
data: { section: sectionComment.phases.join(" & ") },
|
|
47
|
+
fix: (fixer) => fixer.insertTextBeforeRange(getLineStartRange(analysis.sourceText, sectionComment.comment.loc.start.line), analysis.newline),
|
|
48
|
+
messageId: "blankLineBeforeSection",
|
|
49
|
+
node: sectionComment.comment,
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Reports executable statements that appear before the first Arrange section.
|
|
56
|
+
* @param context ESLint rule context.
|
|
57
|
+
* @param analysis Parsed test-block analysis.
|
|
58
|
+
* @example
|
|
59
|
+
* ```typescript
|
|
60
|
+
* reportCodeBeforeArrange({ report() {} } as never, { sectionComments: [], statements: [] } as never);
|
|
61
|
+
* ```
|
|
62
|
+
*/
|
|
63
|
+
function reportCodeBeforeArrange(context, analysis) {
|
|
64
|
+
const firstArrangeLine = analysis.sectionComments.find((sectionComment) => sectionComment.phases.includes("Arrange"))?.comment.loc.start.line;
|
|
65
|
+
if (firstArrangeLine === void 0) {
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
68
|
+
const statementBeforeArrange = analysis.statements.find((statement) => statement.node.loc.start.line < firstArrangeLine);
|
|
69
|
+
if (statementBeforeArrange === void 0) {
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
context.report({
|
|
73
|
+
messageId: "codeBeforeArrange",
|
|
74
|
+
node: statementBeforeArrange.node,
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Reports Arrange sections that contain only comments or whitespace.
|
|
79
|
+
* @param context ESLint rule context.
|
|
80
|
+
* @param analysis Parsed test-block analysis.
|
|
81
|
+
* @example
|
|
82
|
+
* ```typescript
|
|
83
|
+
* reportEmptySections({ report() {} } as never, { sectionComments: [], statements: [] } as never);
|
|
84
|
+
* ```
|
|
85
|
+
*/
|
|
86
|
+
function reportEmptySections(context, analysis) {
|
|
87
|
+
for (const [index, sectionComment] of analysis.sectionComments.entries()) {
|
|
88
|
+
const nextSectionLine = analysis.sectionComments[index + 1]?.comment.loc.start.line;
|
|
89
|
+
const hasArrangePhase = sectionComment.phases.includes("Arrange");
|
|
90
|
+
const hasCodeInSection = analysis.statements.some((statement) => {
|
|
91
|
+
const statementLine = statement.node.loc.start.line;
|
|
92
|
+
return (statementLine > sectionComment.comment.loc.start.line &&
|
|
93
|
+
(nextSectionLine === void 0 || statementLine < nextSectionLine));
|
|
94
|
+
});
|
|
95
|
+
if (hasArrangePhase && !hasCodeInSection) {
|
|
96
|
+
context.report({
|
|
97
|
+
data: { section: sectionComment.phases.join(" & ") },
|
|
98
|
+
messageId: "emptySection",
|
|
99
|
+
node: sectionComment.comment,
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Reports any AAA section markers that are missing from a supported test block.
|
|
106
|
+
* @param context ESLint rule context.
|
|
107
|
+
* @param analysis Parsed test-block analysis.
|
|
108
|
+
* @example
|
|
109
|
+
* ```typescript
|
|
110
|
+
* reportMissingSections({ report() {} } as never, { sectionComments: [] } as never);
|
|
111
|
+
* ```
|
|
112
|
+
*/
|
|
113
|
+
function reportMissingSections(context, analysis) {
|
|
114
|
+
const presentSections = new Set(analysis.sectionComments.flatMap((sectionComment) => sectionComment.phases));
|
|
115
|
+
const missingSections = ["Arrange", "Act", "Assert"].filter((phase) => !presentSections.has(phase));
|
|
116
|
+
if (missingSections.length === 0) {
|
|
117
|
+
return;
|
|
118
|
+
}
|
|
119
|
+
context.report({
|
|
120
|
+
data: { sections: missingSections.join(", ") },
|
|
121
|
+
fix: analysis.bodyLineCount >= 3
|
|
122
|
+
? (fixer) => buildMissingSectionFixes(analysis, missingSections, fixer)
|
|
123
|
+
: void 0,
|
|
124
|
+
messageId: "missingSections",
|
|
125
|
+
node: analysis.callExpression,
|
|
126
|
+
});
|
|
127
|
+
}
|
|
128
|
+
export { requireAaaSectionsRule };
|
|
129
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kb21haW4vdGVzdGluZy9yZXF1aXJlLWFhYS1zZWN0aW9ucy9ydWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUlBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQzFFLE9BQU8sRUFDTCxnQkFBZ0IsRUFDaEIsaUJBQWlCLEVBQ2pCLHdCQUF3QixFQUN4Qix5QkFBeUIsR0FDMUIsTUFBTSxRQUFRLENBQUM7QUFDaEIsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFbkUsdUZBQXVGO0FBQ3ZGLE1BQU0sc0JBQXNCLEdBQW9CO0lBQzlDLE1BQU0sQ0FBQyxPQUF5QjtRQUM5QixPQUFPO1lBQ0wsY0FBYyxDQUFDLElBQUk7Z0JBQ2pCLE1BQU0sUUFBUSxHQUFHLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQztnQkFDakQsSUFBSSxRQUFRLEtBQUssS0FBSyxDQUFDLEVBQUUsQ0FBQztvQkFDeEIsT0FBTztnQkFDVCxDQUFDO2dCQUVELHFCQUFxQixDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsQ0FBQztnQkFDekMsbUJBQW1CLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQyxDQUFDO2dCQUN2Qyx1QkFBdUIsQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLENBQUM7Z0JBQzNDLHlCQUF5QixDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsQ0FBQztZQUMvQyxDQUFDO1NBQzBCLENBQUM7SUFDaEMsQ0FBQztJQUNELElBQUksRUFBRTtRQUNKLElBQUksRUFBRSx1QkFBdUIsQ0FDM0Isc0JBQXNCLEVBQ3RCLG9GQUFvRixDQUNyRjtRQUNELE9BQU8sRUFBRSxNQUFNO1FBQ2YsUUFBUSxFQUFFO1lBQ1Isc0JBQXNCLEVBQ3BCLGdFQUFnRTtZQUNsRSxpQkFBaUIsRUFDZixtRUFBbUU7WUFDckUsWUFB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Q3BDLHdCQUF3QixDQUFDLFFBQVEsRUFBRSxlQUFlLEVBQUUsS0FBSyxDQUFDO1lBQzlELENBQUMsQ0FBQyxLQUFLLENBQUM7UUFDWixTQUFTLEVBQUUsaUJBQWlCO1FBQzVCLElBQUksRUFBRSxRQUFRLENBQUMsY0FBYztLQUM5QixDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQsT0FBTyxFQUFFLHNCQUFzQixFQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFJ1bGUgfSBmcm9tIFwiZXNsaW50XCI7XG5cbmltcG9ydCB0eXBlIHsgVGVzdEJsb2NrQW5hbHlzaXMgfSBmcm9tIFwiLi4vYWFhXCI7XG5cbmltcG9ydCB7IGNyZWF0ZVJ1bGVEb2N1bWVudGF0aW9uIH0gZnJvbSBcIi4uLy4uL2N1c3RvbS1ydWxlLWRvY3VtZW50YXRpb25cIjtcbmltcG9ydCB7XG4gIGFuYWx5emVUZXN0QmxvY2ssXG4gIGdldExpbmVTdGFydFJhbmdlLFxuICBnZXRQaGFzZUJvdW5kYXJ5Q29tbWVudHMsXG4gIGhhc0JsYW5rTGluZUJlZm9yZUNvbW1lbnQsXG59IGZyb20gXCIuLi9hYWFcIjtcbmltcG9ydCB7IGJ1aWxkTWlzc2luZ1NlY3Rpb25GaXhlcyB9IGZyb20gXCIuL21pc3Npbmctc2VjdGlvbi1maXhlc1wiO1xuXG4vKiogRW5mb3JjZXMgZXhwbGljaXQgQUFBIHNlY3Rpb24gY29tbWVudHMgYW5kIHNwYWNpbmcgd2l0aGluIHN1cHBvcnRlZCB0ZXN0IGJsb2Nrcy4gKi9cbmNvbnN0IHJlcXVpcmVBYWFTZWN0aW9uc1J1bGU6IFJ1bGUuUnVsZU1vZHVsZSA9IHtcbiAgY3JlYXRlKGNvbnRleHQ6IFJ1bGUuUnVsZUNvbnRleHQpOiBSdWxlLlJ1bGVMaXN0ZW5lciB7XG4gICAgcmV0dXJuIHtcbiAgICAgIENhbGxFeHByZXNzaW9uKG5vZGUpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgYW5hbHlzaXMgPSBhbmFseXplVGVzdEJsb2NrKGNvbnRleHQsIG5vZGUpO1xuICAgICAgICBpZiAoYW5hbHlzaXMgPT09IHZvaWQgMCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlcG9ydE1pc3NpbmdTZWN0aW9ucyhjb250ZXh0LCBhbmFseXNpcyk7XG4gICAgICAgIHJlcG9ydEVtcHR5U2VjdGlvbnMoY29udGV4dCwgYW5hbHlzaXMpO1xuICAgICAgICByZXBvcnRDb2RlQmVmb3JlQXJyYW5nZShjb250ZXh0LCBhbmFseXNpcyk7XG4gICAgICAgIHJlcG9ydEJsYW5rTGluZVNlcGFyYXRvcnMoY29udGV4dCwgYW5hbHlzaXMpO1xuICAgICAgfSxcbiAgICB9IHNhdGlzZmllcyBSdWxlLlJ1bGVMaXN0ZW5lcjtcbiAgfSxcbiAgbWV0YToge1xuICAgIGRvY3M6IGNyZWF0ZVJ1bGVEb2N1bWVudGF0aW9uKFxuICAgICAgXCJyZXF1aXJlLWFhYS1zZWN0aW9uc1wiLFxuICAgICAgXCJSZXF1aXJlIHN0cmljdCAvLyBBcnJhbmdlLCAvLyBBY3QsIGFuZCAvLyBBc3NlcnQgbWFya2VycyBpbiBzdXBwb3J0ZWQgdGVzdCBibG9ja3MuXCIsXG4gICAgKSxcbiAgICBmaXhhYmxlOiBcImNvZGVcIixcbiAgICBtZXNzYWdlczoge1xuICAgICAgYmxhbmtMaW5lQmVmb3JlU2VjdGlvbjpcbiAgICAgICAgXCJJbnNlcnQgYSBibGFuayBsaW5lIGJlZm9yZSB0aGUgLy8ge3tzZWN0aW9ufX0gc2VjdGlvbiBjb21tZW50LlwiLFxuICAgICAgY29kZUJlZm9yZUFycmFuZ2U6XG4gICAgICAgIFwiTW92ZSBzZXR1cCBzdGF0ZW1lbnRzIGJlbG93IHRoZSBmaXJzdCAvLyBBcnJhbmdlIHNlY3Rpb24gY29tbWVudC5cIixcbiAgICAgIGVtcHR5U2VjdGlvbjpcbiAgICAgICAgXCJUaGUgLy8ge3tzZWN0aW9ufX0gc2VjdGlvbiBtdXN0IGNvbnRhaW4gY29kZTsgY29tbWVudHMgYWxvbmUgZG8gbm90IGNvdW50LlwiLFxuICAgICAgbWlzc2luZ1NlY3Rpb25zOiBcIkFkZCB0aGUgbWlzc2luZyBBQUEgc2VjdGlvbiBjb21tZW50czoge3tzZWN0aW9uc319LlwiLFxuICAgIH0sXG4gICAgc2NoZW1hOiBbXSxcbiAgICB0eXBlOiBcImxheW91dFwiLFxuICB9LFxufTtcblxuLyoqXG4gKiBSZXBvcnRzIHNlY3Rpb24gY29tbWVudHMgdGhhdCBhcmUgbWlzc2luZyBhIGJsYW5rIGxpbmUgYWJvdmUgdGhlbS5cbiAqIEBwYXJhbSBjb250ZXh0IEVTTGludCBydWxlIGNvbnRleHQuXG4gKiBAcGFyYW0gYW5hbHlzaXMgUGFyc2VkIHRlc3QtYmxvY2sgYW5hbHlzaXMuXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogcmVwb3J0QmxhbmtMaW5lU2VwYXJhdG9ycyh7IHJlcG9ydCgpIHt9IH0gYXMgbmV2ZXIsIHsgc2VjdGlvbkNvbW1lbnRzOiBbXSwgc291cmNlVGV4dDogXCJcIiB9IGFzIG5ldmVyKTtcbiAqIGBgYFxuICovXG5mdW5jdGlvbiByZXBvcnRCbGFua0xpbmVTZXBhcmF0b3JzKFxuICBjb250ZXh0OiBSdWxlLlJ1bGVDb250ZXh0LFxuICBhbmFseXNpczogVGVzdEJsb2NrQW5hbHlzaXMsXG4pOiB2b2lkIHtcbiAgZm9yIChjb25zdCBzZWN0aW9uQ29tbWVudCBvZiBnZXRQaGFzZUJvdW5kYXJ5Q29tbWVudHMoYW5hbHlzaXMpKSB7XG4gICAgaWYgKFxuICAgICAgIWhhc0JsYW5rTGluZUJlZm9yZUNvbW1lbnQoYW5hbHlzaXMuc291cmNlVGV4dCwgc2VjdGlvbkNvbW1lbnQuY29tbWVudClcbiAgICApIHtcbiAgICAgIGNvbnRleHQucmVwb3J0KHtcbiAgICAgICAgZGF0YTogeyBzZWN0aW9uOiBzZWN0aW9uQ29tbWVudC5waGFzZXMuam9pbihcIiAmIFwiKSB9LFxuICAgICAgICBmaXg6IChmaXhlcikgPT5cbiAgICAgICAgICBmaXhlci5pbnNlcnRUZXh0QmVmb3JlUmFuZ2UoXG4gICAgICAgICAgICBnZXRMaW5lU3RhcnRSYW5nZShcbiAgICAgICAgICAgICAgYW5hbHlzaXMuc291cmNlVGV4dCxcbiAgICAgICAgICAgICAgc2VjdGlvbkNvbW1lbnQuY29tbWVudC5sb2Muc3RhcnQubGluZSxcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBhbmFseXNpcy5uZXdsaW5lLFxuICAgICAgICAgICksXG4gICAgICAgIG1lc3NhZ2VJZDogXCJibGFua0xpbmVCZWZvcmVTZWN0aW9uXCIsXG4gICAgICAgIG5vZGU6IHNlY3Rpb25Db21tZW50LmNvbW1lbnQsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBSZXBvcnRzIGV4ZWN1dGFibGUgc3RhdGVtZW50cyB0aGF0IGFwcGVhciBiZWZvcmUgdGhlIGZpcnN0IEFycmFuZ2Ugc2VjdGlvbi5cbiAqIEBwYXJhbSBjb250ZXh0IEVTTGludCBydWxlIGNvbnRleHQuXG4gKiBAcGFyYW0gYW5hbHlzaXMgUGFyc2VkIHRlc3QtYmxvY2sgYW5hbHlzaXMuXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogcmVwb3J0Q29kZUJlZm9yZUFycmFuZ2UoeyByZXBvcnQoKSB7fSB9IGFzIG5ldmVyLCB7IHNlY3Rpb25Db21tZW50czogW10sIHN0YXRlbWVudHM6IFtdIH0gYXMgbmV2ZXIpO1xuICogYGBgXG4gKi9cbmZ1bmN0aW9uIHJlcG9ydENvZGVCZWZvcmVBcnJhbmdlKFxuICBjb250ZXh0OiBSdWxlLlJ1bGVDb250ZXh0LFxuICBhbmFseXNpczogVGVzdEJsb2NrQW5hbHlzaXMsXG4pOiB2b2lkIHtcbiAgY29uc3QgZmlyc3RBcnJhbmdlTGluZSA9IGFuYWx5c2lzLnNlY3Rpb25Db21tZW50cy5maW5kKChzZWN0aW9uQ29tbWVudCkgPT5cbiAgICBzZWN0aW9uQ29tbWVudC5waGFzZXMuaW5jbHVkZXMoXCJBcnJhbmdlXCIpLFxuICApPy5jb21tZW50LmxvYy5zdGFydC5saW5lO1xuICBpZiAoZmlyc3RBcnJhbmdlTGluZSA9PT0gdm9pZCAwKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3Qgc3RhdGVtZW50QmVmb3JlQXJyYW5nZSA9IGFuYWx5c2lzLnN0YXRlbWVudHMuZmluZChcbiAgICAoc3RhdGVtZW50KSA9PiBzdGF0ZW1lbnQubm9kZS5sb2Muc3RhcnQubGluZSA8IGZpcnN0QXJyYW5nZUxpbmUsXG4gICk7XG4gIGlmIChzdGF0ZW1lbnRCZWZvcmVBcnJhbmdlID09PSB2b2lkIDApIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb250ZXh0LnJlcG9ydCh7XG4gICAgbWVzc2FnZUlkOiBcImNvZGVCZWZvcmVBcnJhbmdlXCIsXG4gICAgbm9kZTogc3RhdGVtZW50QmVmb3JlQXJyYW5nZS5ub2RlLFxuICB9KTtcbn1cblxuLyoqXG4gKiBSZXBvcnRzIEFycmFuZ2Ugc2VjdGlvbnMgdGhhdCBjb250YWluIG9ubHkgY29tbWVudHMgb3Igd2hpdGVzcGFjZS5cbiAqIEBwYXJhbSBjb250ZXh0IEVTTGludCBydWxlIGNvbnRleHQuXG4gKiBAcGFyYW0gYW5hbHlzaXMgUGFyc2VkIHRlc3QtYmxvY2sgYW5hbHlzaXMuXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogcmVwb3J0RW1wdHlTZWN0aW9ucyh7IHJlcG9ydCgpIHt9IH0gYXMgbmV2ZXIsIHsgc2VjdGlvbkNvbW1lbnRzOiBbXSwgc3RhdGVtZW50czogW10gfSBhcyBuZXZlcik7XG4gKiBgYGBcbiAqL1xuZnVuY3Rpb24gcmVwb3J0RW1wdHlTZWN0aW9ucyhcbiAgY29udGV4dDogUnVsZS5SdWxlQ29udGV4dCxcbiAgYW5hbHlzaXM6IFRlc3RCbG9ja0FuYWx5c2lzLFxuKTogdm9pZCB7XG4gIGZvciAoY29uc3QgW2luZGV4LCBzZWN0aW9uQ29tbWVudF0gb2YgYW5hbHlzaXMuc2VjdGlvbkNvbW1lbnRzLmVudHJpZXMoKSkge1xuICAgIGNvbnN0IG5leHRTZWN0aW9uTGluZSA9XG4gICAgICBhbmFseXNpcy5zZWN0aW9uQ29tbWVudHNbaW5kZXggKyAxXT8uY29tbWVudC5sb2Muc3RhcnQubGluZTtcbiAgICBjb25zdCBoYXNBcnJhbmdlUGhhc2UgPSBzZWN0aW9uQ29tbWVudC5waGFzZXMuaW5jbHVkZXMoXCJBcnJhbmdlXCIpO1xuICAgIGNvbnN0IGhhc0NvZGVJblNlY3Rpb24gPSBhbmFseXNpcy5zdGF0ZW1lbnRzLnNvbWUoKHN0YXRlbWVudCkgPT4ge1xuICAgICAgY29uc3Qgc3RhdGVtZW50TGluZSA9IHN0YXRlbWVudC5ub2RlLmxvYy5zdGFydC5saW5lO1xuXG4gICAgICByZXR1cm4gKFxuICAgICAgICBzdGF0ZW1lbnRMaW5lID4gc2VjdGlvbkNvbW1lbnQuY29tbWVudC5sb2Muc3RhcnQubGluZSAmJlxuICAgICAgICAobmV4dFNlY3Rpb25MaW5lID09PSB2b2lkIDAgfHwgc3RhdGVtZW50TGluZSA8IG5leHRTZWN0aW9uTGluZSlcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICBpZiAoaGFzQXJyYW5nZVBoYXNlICYmICFoYXNDb2RlSW5TZWN0aW9uKSB7XG4gICAgICBjb250ZXh0LnJlcG9ydCh7XG4gICAgICAgIGRhdGE6IHsgc2VjdGlvbjogc2VjdGlvbkNvbW1lbnQucGhhc2VzLmpvaW4oXCIgJiBcIikgfSxcbiAgICAgICAgbWVzc2FnZUlkOiBcImVtcHR5U2VjdGlvblwiLFxuICAgICAgICBub2RlOiBzZWN0aW9uQ29tbWVudC5jb21tZW50LFxuICAgICAgfSk7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogUmVwb3J0cyBhbnkgQUFBIHNlY3Rpb24gbWFya2VycyB0aGF0IGFyZSBtaXNzaW5nIGZyb20gYSBzdXBwb3J0ZWQgdGVzdCBibG9jay5cbiAqIEBwYXJhbSBjb250ZXh0IEVTTGludCBydWxlIGNvbnRleHQuXG4gKiBAcGFyYW0gYW5hbHlzaXMgUGFyc2VkIHRlc3QtYmxvY2sgYW5hbHlzaXMuXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogcmVwb3J0TWlzc2luZ1NlY3Rpb25zKHsgcmVwb3J0KCkge30gfSBhcyBuZXZlciwgeyBzZWN0aW9uQ29tbWVudHM6IFtdIH0gYXMgbmV2ZXIpO1xuICogYGBgXG4gKi9cbmZ1bmN0aW9uIHJlcG9ydE1pc3NpbmdTZWN0aW9ucyhcbiAgY29udGV4dDogUnVsZS5SdWxlQ29udGV4dCxcbiAgYW5hbHlzaXM6IFRlc3RCbG9ja0FuYWx5c2lzLFxuKTogdm9pZCB7XG4gIGNvbnN0IHByZXNlbnRTZWN0aW9ucyA9IG5ldyBTZXQoXG4gICAgYW5hbHlzaXMuc2VjdGlvbkNvbW1lbnRzLmZsYXRNYXAoKHNlY3Rpb25Db21tZW50KSA9PiBzZWN0aW9uQ29tbWVudC5waGFzZXMpLFxuICApO1xuICBjb25zdCBtaXNzaW5nU2VjdGlvbnMgPSAoW1wiQXJyYW5nZVwiLCBcIkFjdFwiLCBcIkFzc2VydFwiXSBhcyBjb25zdCkuZmlsdGVyKFxuICAgIChwaGFzZSkgPT4gIXByZXNlbnRTZWN0aW9ucy5oYXMocGhhc2UpLFxuICApO1xuXG4gIGlmIChtaXNzaW5nU2VjdGlvbnMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29udGV4dC5yZXBvcnQoe1xuICAgIGRhdGE6IHsgc2VjdGlvbnM6IG1pc3NpbmdTZWN0aW9ucy5qb2luKFwiLCBcIikgfSxcbiAgICBmaXg6XG4gICAgICBhbmFseXNpcy5ib2R5TGluZUNvdW50ID49IDNcbiAgICAgICAgPyAoZml4ZXI6IFJ1bGUuUnVsZUZpeGVyKTogUnVsZS5GaXhbXSA9PlxuICAgICAgICAgICAgYnVpbGRNaXNzaW5nU2VjdGlvbkZpeGVzKGFuYWx5c2lzLCBtaXNzaW5nU2VjdGlvbnMsIGZpeGVyKVxuICAgICAgICA6IHZvaWQgMCxcbiAgICBtZXNzYWdlSWQ6IFwibWlzc2luZ1NlY3Rpb25zXCIsXG4gICAgbm9kZTogYW5hbHlzaXMuY2FsbEV4cHJlc3Npb24sXG4gIH0pO1xufVxuXG5leHBvcnQgeyByZXF1aXJlQWFhU2VjdGlvbnNSdWxlIH07XG4iXX0=
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import type { Rule } from "eslint";
|
|
2
|
+
import type { TestBlockAnalysis } from "../aaa/index.js";
|
|
3
|
+
/** Mocked AAA helper exports consumed by the rule. */
|
|
4
|
+
interface AaaModuleMock {
|
|
5
|
+
/** Mocked analyzer entry point. */
|
|
6
|
+
analyzeTestBlock: () => TestBlockAnalysis;
|
|
7
|
+
/** Mocked line-start helper. */
|
|
8
|
+
getLineStartRange: () => [number, number];
|
|
9
|
+
/** Mocked boundary-comment helper. */
|
|
10
|
+
getPhaseBoundaryComments: (analysis: TestBlockAnalysis) => TestBlockAnalysis["sectionComments"];
|
|
11
|
+
/** Mocked blank-line helper. */
|
|
12
|
+
hasBlankLineBeforeComment: () => false;
|
|
13
|
+
}
|
|
14
|
+
/** Mocked missing-section-fixes module. */
|
|
15
|
+
interface MissingSectionFixesModule {
|
|
16
|
+
/** Mocked fix builder. */
|
|
17
|
+
buildMissingSectionFixes: () => Rule.Fix[];
|
|
18
|
+
}
|
|
19
|
+
/** Message identifiers emitted by the rule under test. */
|
|
20
|
+
type RequireAaaSectionsMessageId = "blankLineBeforeSection" | "codeBeforeArrange" | "emptySection" | "missingSections";
|
|
21
|
+
/** Captured result from the mocked reporting scenario. */
|
|
22
|
+
interface ScenarioResult {
|
|
23
|
+
/** Fix emitted for the blank-line report. */
|
|
24
|
+
blankLineFix: Rule.Fix | Rule.Fix[] | undefined;
|
|
25
|
+
/** Fixes recorded by the synthetic fixer. */
|
|
26
|
+
insertedFixes: Rule.Fix[];
|
|
27
|
+
/** Message identifiers emitted in report order. */
|
|
28
|
+
messageIds: (RequireAaaSectionsMessageId | undefined)[];
|
|
29
|
+
/** Fix emitted for the missing-sections report. */
|
|
30
|
+
missingSectionsFix: Rule.Fix | Rule.Fix[] | undefined;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Creates the mocked AAA helper module.
|
|
34
|
+
* @returns Mocked exports consumed by the rule module.
|
|
35
|
+
* @example
|
|
36
|
+
* ```typescript
|
|
37
|
+
* const mockModule = createAaaModuleMock(); void mockModule;
|
|
38
|
+
* ```
|
|
39
|
+
*/
|
|
40
|
+
declare function createAaaModuleMock(): AaaModuleMock;
|
|
41
|
+
/**
|
|
42
|
+
* Creates the mocked missing-section-fixes module.
|
|
43
|
+
* @param buildMissingSectionFixes Mocked fix builder.
|
|
44
|
+
* @returns Mocked module exposing the provided fix builder.
|
|
45
|
+
* @example
|
|
46
|
+
* ```typescript
|
|
47
|
+
* const mockModule = createMissingSectionFixesModule(() => []); void mockModule;
|
|
48
|
+
* ```
|
|
49
|
+
*/
|
|
50
|
+
declare function createMissingSectionFixesModule(buildMissingSectionFixes: () => Rule.Fix[]): MissingSectionFixesModule;
|
|
51
|
+
/**
|
|
52
|
+
* Creates a fixer that records inserted text edits.
|
|
53
|
+
* @param insertedFixes Collection updated when the fixer inserts text.
|
|
54
|
+
* @returns Rule fixer that records inserted edits.
|
|
55
|
+
* @example
|
|
56
|
+
* ```typescript
|
|
57
|
+
* const fixer = createRecordedFixer([]); void fixer;
|
|
58
|
+
* ```
|
|
59
|
+
*/
|
|
60
|
+
declare function createRecordedFixer(insertedFixes: Rule.Fix[]): Rule.RuleFixer;
|
|
61
|
+
/**
|
|
62
|
+
* Creates the minimal rule context used by the mocked scenario.
|
|
63
|
+
* @param reports Report descriptors captured during rule execution.
|
|
64
|
+
* @returns Rule context that records emitted reports.
|
|
65
|
+
* @example
|
|
66
|
+
* ```typescript
|
|
67
|
+
* const context = createRuleContext([]); void context;
|
|
68
|
+
* ```
|
|
69
|
+
*/
|
|
70
|
+
declare function createRuleContext(reports: Rule.ReportDescriptor[]): Rule.RuleContext;
|
|
71
|
+
/**
|
|
72
|
+
* Reads the fix emitted by a report descriptor.
|
|
73
|
+
* @param descriptor Report descriptor to evaluate.
|
|
74
|
+
* @param fixer Synthetic fixer passed into the descriptor callback.
|
|
75
|
+
* @returns Fix output produced by the descriptor.
|
|
76
|
+
* @example
|
|
77
|
+
* ```typescript
|
|
78
|
+
* const fix = getDescriptorFix(void 0, {} as never); void fix;
|
|
79
|
+
* ```
|
|
80
|
+
*/
|
|
81
|
+
declare function getDescriptorFix(descriptor: Rule.ReportDescriptor | undefined, fixer: Rule.RuleFixer): Rule.Fix | Rule.Fix[] | undefined;
|
|
82
|
+
/**
|
|
83
|
+
* Reads the message identifier from a report descriptor when present.
|
|
84
|
+
* @param descriptor Report descriptor emitted by the rule.
|
|
85
|
+
* @returns Supported message identifier when present.
|
|
86
|
+
* @example
|
|
87
|
+
* ```typescript
|
|
88
|
+
* const messageId = getReportMessageId({ messageId: "missingSections" } as Rule.ReportDescriptor);
|
|
89
|
+
* void messageId;
|
|
90
|
+
* ```
|
|
91
|
+
*/
|
|
92
|
+
declare function getReportMessageId(descriptor: Rule.ReportDescriptor): RequireAaaSectionsMessageId | undefined;
|
|
93
|
+
/**
|
|
94
|
+
* Loads the rule module after test mocks have been applied.
|
|
95
|
+
* @returns The rule module under test.
|
|
96
|
+
* @example
|
|
97
|
+
* ```typescript
|
|
98
|
+
* const rule = await loadRequireAaaSectionsRule(); void rule;
|
|
99
|
+
* ```
|
|
100
|
+
*/
|
|
101
|
+
declare function loadRequireAaaSectionsRule(): Promise<Rule.RuleModule>;
|
|
102
|
+
export { createAaaModuleMock, createMissingSectionFixesModule, createRecordedFixer, createRuleContext, getDescriptorFix, getReportMessageId, loadRequireAaaSectionsRule, };
|
|
103
|
+
export type { ScenarioResult };
|
|
104
|
+
//# sourceMappingURL=rule.reporting.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rule.reporting.d.ts","sourceRoot":"","sources":["../../../../src/domain/testing/require-aaa-sections/rule.reporting.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAEnC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,QAAQ,CAAC;AAEhD,sDAAsD;AACtD,UAAU,aAAa;IACrB,mCAAmC;IACnC,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;IAC1C,gCAAgC;IAChC,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC1C,sCAAsC;IACtC,wBAAwB,EAAE,CACxB,QAAQ,EAAE,iBAAiB,KACxB,iBAAiB,CAAC,iBAAiB,CAAC,CAAC;IAC1C,gCAAgC;IAChC,yBAAyB,EAAE,MAAM,KAAK,CAAC;CACxC;AAED,2CAA2C;AAC3C,UAAU,yBAAyB;IACjC,0BAA0B;IAC1B,wBAAwB,EAAE,MAAM,IAAI,CAAC,GAAG,EAAE,CAAC;CAC5C;AAED,0DAA0D;AAC1D,KAAK,2BAA2B,GAC5B,wBAAwB,GACxB,mBAAmB,GACnB,cAAc,GACd,iBAAiB,CAAC;AAQtB,0DAA0D;AAC1D,UAAU,cAAc;IACtB,6CAA6C;IAC7C,YAAY,EAAE,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;IAChD,6CAA6C;IAC7C,aAAa,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;IAC1B,mDAAmD;IACnD,UAAU,EAAE,CAAC,2BAA2B,GAAG,SAAS,CAAC,EAAE,CAAC;IACxD,mDAAmD;IACnD,kBAAkB,EAAE,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;CACvD;AAcD;;;;;;;GAOG;AACH,iBAAS,mBAAmB,IAAI,aAAa,CAO5C;AAED;;;;;;;;GAQG;AACH,iBAAS,+BAA+B,CACtC,wBAAwB,EAAE,MAAM,IAAI,CAAC,GAAG,EAAE,GACzC,yBAAyB,CAE3B;AAsDD;;;;;;;;GAQG;AACH,iBAAS,mBAAmB,CAAC,aAAa,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,SAAS,CAQtE;AAED;;;;;;;;GAQG;AACH,iBAAS,iBAAiB,CAAC,OAAO,EAAE,IAAI,CAAC,gBAAgB,EAAE,GAAG,IAAI,CAAC,WAAW,CAM7E;AAED;;;;;;;;;GASG;AACH,iBAAS,gBAAgB,CACvB,UAAU,EAAE,IAAI,CAAC,gBAAgB,GAAG,SAAS,EAC7C,KAAK,EAAE,IAAI,CAAC,SAAS,GACpB,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAcnC;AA8BD;;;;;;;;;GASG;AACH,iBAAS,kBAAkB,CACzB,UAAU,EAAE,IAAI,CAAC,gBAAgB,GAChC,2BAA2B,GAAG,SAAS,CAQzC;AAuBD;;;;;;;GAOG;AACH,iBAAe,0BAA0B,IAAI,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAGpE;AAED,OAAO,EACL,mBAAmB,EACnB,+BAA+B,EAC/B,mBAAmB,EACnB,iBAAiB,EACjB,gBAAgB,EAChB,kBAAkB,EAClB,0BAA0B,GAC3B,CAAC;AAEF,YAAY,EAAE,cAAc,EAAE,CAAC"}
|
|
@@ -0,0 +1,217 @@
|
|
|
1
|
+
/* eslint max-lines: ["error", 310] -- Mocked reporting helpers in this focused spec companion require verbose typed fixtures and examples. */
|
|
2
|
+
/**
|
|
3
|
+
* Returns false so the mocked rule path always reports a missing blank line.
|
|
4
|
+
* @returns False for every invocation.
|
|
5
|
+
* @example
|
|
6
|
+
* ```typescript
|
|
7
|
+
* const actual = alwaysReturnFalse(); void actual;
|
|
8
|
+
* ```
|
|
9
|
+
*/
|
|
10
|
+
function alwaysReturnFalse() {
|
|
11
|
+
return false;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Creates the mocked AAA helper module.
|
|
15
|
+
* @returns Mocked exports consumed by the rule module.
|
|
16
|
+
* @example
|
|
17
|
+
* ```typescript
|
|
18
|
+
* const mockModule = createAaaModuleMock(); void mockModule;
|
|
19
|
+
* ```
|
|
20
|
+
*/
|
|
21
|
+
function createAaaModuleMock() {
|
|
22
|
+
return {
|
|
23
|
+
analyzeTestBlock: createMockAnalysis,
|
|
24
|
+
getLineStartRange: getMockLineStartRange,
|
|
25
|
+
getPhaseBoundaryComments: getMockPhaseBoundaryComments,
|
|
26
|
+
hasBlankLineBeforeComment: alwaysReturnFalse,
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Creates the mocked missing-section-fixes module.
|
|
31
|
+
* @param buildMissingSectionFixes Mocked fix builder.
|
|
32
|
+
* @returns Mocked module exposing the provided fix builder.
|
|
33
|
+
* @example
|
|
34
|
+
* ```typescript
|
|
35
|
+
* const mockModule = createMissingSectionFixesModule(() => []); void mockModule;
|
|
36
|
+
* ```
|
|
37
|
+
*/
|
|
38
|
+
function createMissingSectionFixesModule(buildMissingSectionFixes) {
|
|
39
|
+
return { buildMissingSectionFixes };
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Builds the synthetic analysis returned by the mocked AAA helpers.
|
|
43
|
+
* @returns Minimal test-block analysis used by the regression scenario.
|
|
44
|
+
* @example
|
|
45
|
+
* ```typescript
|
|
46
|
+
* const analysis = createMockAnalysis(); void analysis;
|
|
47
|
+
* ```
|
|
48
|
+
*/
|
|
49
|
+
function createMockAnalysis() {
|
|
50
|
+
return {
|
|
51
|
+
bodyLineCount: 4,
|
|
52
|
+
callExpression: { type: "CallExpression" },
|
|
53
|
+
newline: "\n",
|
|
54
|
+
sectionComments: [
|
|
55
|
+
{
|
|
56
|
+
comment: {
|
|
57
|
+
loc: { end: { line: 2 }, start: { line: 2 } },
|
|
58
|
+
type: "Line",
|
|
59
|
+
},
|
|
60
|
+
phases: ["Arrange"],
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
comment: {
|
|
64
|
+
loc: { end: { line: 4 }, start: { line: 4 } },
|
|
65
|
+
type: "Line",
|
|
66
|
+
},
|
|
67
|
+
phases: ["Act"],
|
|
68
|
+
},
|
|
69
|
+
],
|
|
70
|
+
sourceText: [
|
|
71
|
+
"const setup = createSetup();",
|
|
72
|
+
"// Arrange",
|
|
73
|
+
"run();",
|
|
74
|
+
"// Act",
|
|
75
|
+
].join("\n"),
|
|
76
|
+
statements: [
|
|
77
|
+
{
|
|
78
|
+
node: {
|
|
79
|
+
loc: { end: { line: 1 }, start: { line: 1 } },
|
|
80
|
+
type: "ExpressionStatement",
|
|
81
|
+
},
|
|
82
|
+
},
|
|
83
|
+
{
|
|
84
|
+
node: {
|
|
85
|
+
loc: { end: { line: 3 }, start: { line: 3 } },
|
|
86
|
+
type: "ExpressionStatement",
|
|
87
|
+
},
|
|
88
|
+
},
|
|
89
|
+
],
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Creates a fixer that records inserted text edits.
|
|
94
|
+
* @param insertedFixes Collection updated when the fixer inserts text.
|
|
95
|
+
* @returns Rule fixer that records inserted edits.
|
|
96
|
+
* @example
|
|
97
|
+
* ```typescript
|
|
98
|
+
* const fixer = createRecordedFixer([]); void fixer;
|
|
99
|
+
* ```
|
|
100
|
+
*/
|
|
101
|
+
function createRecordedFixer(insertedFixes) {
|
|
102
|
+
return {
|
|
103
|
+
insertTextBeforeRange(range, text) {
|
|
104
|
+
const fix = { range, text };
|
|
105
|
+
insertedFixes.push(fix);
|
|
106
|
+
return fix;
|
|
107
|
+
},
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Creates the minimal rule context used by the mocked scenario.
|
|
112
|
+
* @param reports Report descriptors captured during rule execution.
|
|
113
|
+
* @returns Rule context that records emitted reports.
|
|
114
|
+
* @example
|
|
115
|
+
* ```typescript
|
|
116
|
+
* const context = createRuleContext([]); void context;
|
|
117
|
+
* ```
|
|
118
|
+
*/
|
|
119
|
+
function createRuleContext(reports) {
|
|
120
|
+
return {
|
|
121
|
+
report(descriptor) {
|
|
122
|
+
reports.push(descriptor);
|
|
123
|
+
},
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Reads the fix emitted by a report descriptor.
|
|
128
|
+
* @param descriptor Report descriptor to evaluate.
|
|
129
|
+
* @param fixer Synthetic fixer passed into the descriptor callback.
|
|
130
|
+
* @returns Fix output produced by the descriptor.
|
|
131
|
+
* @example
|
|
132
|
+
* ```typescript
|
|
133
|
+
* const fix = getDescriptorFix(void 0, {} as never); void fix;
|
|
134
|
+
* ```
|
|
135
|
+
*/
|
|
136
|
+
function getDescriptorFix(descriptor, fixer) {
|
|
137
|
+
const actual = descriptor?.fix?.(fixer);
|
|
138
|
+
if (!(actual instanceof Object)) {
|
|
139
|
+
return void 0;
|
|
140
|
+
}
|
|
141
|
+
if (Array.isArray(actual) || "range" in actual) {
|
|
142
|
+
return actual;
|
|
143
|
+
}
|
|
144
|
+
const iterableFixes = actual;
|
|
145
|
+
return [...iterableFixes];
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Reads the mocked line-start range for the blank-line fix.
|
|
149
|
+
* @returns Synthetic range used by the rule fix.
|
|
150
|
+
* @example
|
|
151
|
+
* ```typescript
|
|
152
|
+
* const range = getMockLineStartRange(); void range;
|
|
153
|
+
* ```
|
|
154
|
+
*/
|
|
155
|
+
function getMockLineStartRange() {
|
|
156
|
+
return [7, 7];
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* Returns the phase-boundary comments from the mocked analysis.
|
|
160
|
+
* @param analysis Parsed analysis used by the mocked rule helpers.
|
|
161
|
+
* @returns Only comments that begin a later AAA phase.
|
|
162
|
+
* @example
|
|
163
|
+
* ```typescript
|
|
164
|
+
* const comments = getMockPhaseBoundaryComments(createMockAnalysis());
|
|
165
|
+
* void comments;
|
|
166
|
+
* ```
|
|
167
|
+
*/
|
|
168
|
+
function getMockPhaseBoundaryComments(analysis) {
|
|
169
|
+
return analysis.sectionComments.slice(1);
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* Reads the message identifier from a report descriptor when present.
|
|
173
|
+
* @param descriptor Report descriptor emitted by the rule.
|
|
174
|
+
* @returns Supported message identifier when present.
|
|
175
|
+
* @example
|
|
176
|
+
* ```typescript
|
|
177
|
+
* const messageId = getReportMessageId({ messageId: "missingSections" } as Rule.ReportDescriptor);
|
|
178
|
+
* void messageId;
|
|
179
|
+
* ```
|
|
180
|
+
*/
|
|
181
|
+
function getReportMessageId(descriptor) {
|
|
182
|
+
if (!("messageId" in descriptor) ||
|
|
183
|
+
!isRequireAaaSectionsMessageId(descriptor.messageId)) {
|
|
184
|
+
return void 0;
|
|
185
|
+
}
|
|
186
|
+
return descriptor.messageId;
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* Checks whether an unknown value is a valid rule message identifier.
|
|
190
|
+
* @param value Value to validate.
|
|
191
|
+
* @returns Whether the value is a supported message identifier.
|
|
192
|
+
* @example
|
|
193
|
+
* ```typescript
|
|
194
|
+
* const actual = isRequireAaaSectionsMessageId("missingSections");
|
|
195
|
+
* void actual;
|
|
196
|
+
* ```
|
|
197
|
+
*/
|
|
198
|
+
function isRequireAaaSectionsMessageId(value) {
|
|
199
|
+
return (value === "blankLineBeforeSection" ||
|
|
200
|
+
value === "codeBeforeArrange" ||
|
|
201
|
+
value === "emptySection" ||
|
|
202
|
+
value === "missingSections");
|
|
203
|
+
}
|
|
204
|
+
/**
|
|
205
|
+
* Loads the rule module after test mocks have been applied.
|
|
206
|
+
* @returns The rule module under test.
|
|
207
|
+
* @example
|
|
208
|
+
* ```typescript
|
|
209
|
+
* const rule = await loadRequireAaaSectionsRule(); void rule;
|
|
210
|
+
* ```
|
|
211
|
+
*/
|
|
212
|
+
async function loadRequireAaaSectionsRule() {
|
|
213
|
+
return (await import("./rule.js"))
|
|
214
|
+
.requireAaaSectionsRule;
|
|
215
|
+
}
|
|
216
|
+
export { createAaaModuleMock, createMissingSectionFixesModule, createRecordedFixer, createRuleContext, getDescriptorFix, getReportMessageId, loadRequireAaaSectionsRule, };
|
|
217
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVsZS5yZXBvcnRpbmcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvZG9tYWluL3Rlc3RpbmcvcmVxdWlyZS1hYWEtc2VjdGlvbnMvcnVsZS5yZXBvcnRpbmcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsOElBQThJO0FBbUQ5STs7Ozs7OztHQU9HO0FBQ0gsU0FBUyxpQkFBaUI7SUFDeEIsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDO0FBRUQ7Ozs7Ozs7R0FPRztBQUNILFNBQVMsbUJBQW1CO0lBQzFCLE9BQU87UUFDTCxnQkFBZ0IsRUFBRSxrQkFBa0I7UUFDcEMsaUJBQWlCLEVBQUUscUJBQXFCO1FBQ3hDLHdCQUF3QixFQUFFLDRCQUE0QjtRQUN0RCx5QkFBeUIsRUFBRSxpQkFBaUI7S0FDN0MsQ0FBQztBQUNKLENBQUM7QUFFRDs7Ozs7Ozs7R0FRRztBQUNILFNBQVMsK0JBQStCLENBQ3RDLHdCQUEwQztJQUUxQyxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsQ0FBQztBQUN0QyxDQUFDO0FBRUQ7Ozs7Ozs7R0FPRztBQUNILFNBQVMsa0JBQWtCO0lBQ3pCLE9BQU87UUFDTCxhQUFhLEVBQUUsQ0FBQztRQUNoQixjQUFjLEVBQUUsRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLEVBQUU7UUFDMUMsT0FBTyxFQUFFLElBQUk7UUFDYixlQUFlLEVBQUU7WUFDZjtnQkFDRSxPQUFPLEVBQUU7b0JBQ1AsR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxFQUFFLEtBQUssRUFBRSxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsRUFBRTtvQkFDN0MsSUFBSSxFQUFFLE1BQU07aUJBQ2I7Z0JBQ0QsTUFBTSxFQUFFLENBQUMsU0FBUyxDQUFDO2FBQ3BCO1lBQ0Q7Z0JBQ0UsT0FBTyxFQUFFO29CQUNQLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLElBQUksRUFBRSxDQUFDLEVB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O0lBRWQsT0FBTyxDQUNMLEtBQUssS0FBSyx3QkFBd0I7UUFDbEMsS0FBSyxLQUFLLG1CQUFtQjtRQUM3QixLQUFLLEtBQUssY0FBYztRQUN4QixLQUFLLEtBQUssaUJBQWlCLENBQzVCLENBQUM7QUFDSixDQUFDO0FBRUQ7Ozs7Ozs7R0FPRztBQUNILEtBQUssVUFBVSwwQkFBMEI7SUFDdkMsT0FBUSxDQUFDLE1BQU0sTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUF5QjtTQUNyRCxzQkFBc0IsQ0FBQztBQUM1QixDQUFDO0FBRUQsT0FBTyxFQUNMLG1CQUFtQixFQUNuQiwrQkFBK0IsRUFDL0IsbUJBQW1CLEVBQ25CLGlCQUFpQixFQUNqQixnQkFBZ0IsRUFDaEIsa0JBQWtCLEVBQ2xCLDBCQUEwQixHQUMzQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50IG1heC1saW5lczogW1wiZXJyb3JcIiwgMzEwXSAtLSBNb2NrZWQgcmVwb3J0aW5nIGhlbHBlcnMgaW4gdGhpcyBmb2N1c2VkIHNwZWMgY29tcGFuaW9uIHJlcXVpcmUgdmVyYm9zZSB0eXBlZCBmaXh0dXJlcyBhbmQgZXhhbXBsZXMuICovXHJcblxyXG5pbXBvcnQgdHlwZSB7IFJ1bGUgfSBmcm9tIFwiZXNsaW50XCI7XHJcblxyXG5pbXBvcnQgdHlwZSB7IFRlc3RCbG9ja0FuYWx5c2lzIH0gZnJvbSBcIi4uL2FhYVwiO1xyXG5cclxuLyoqIE1vY2tlZCBBQUEgaGVscGVyIGV4cG9ydHMgY29uc3VtZWQgYnkgdGhlIHJ1bGUuICovXHJcbmludGVyZmFjZSBBYWFNb2R1bGVNb2NrIHtcclxuICAvKiogTW9ja2VkIGFuYWx5emVyIGVudHJ5IHBvaW50LiAqL1xyXG4gIGFuYWx5emVUZXN0QmxvY2s6ICgpID0+IFRlc3RCbG9ja0FuYWx5c2lzO1xyXG4gIC8qKiBNb2NrZWQgbGluZS1zdGFydCBoZWxwZXIuICovXHJcbiAgZ2V0TGluZVN0YXJ0UmFuZ2U6ICgpID0+IFtudW1iZXIsIG51bWJlcl07XHJcbiAgLyoqIE1vY2tlZCBib3VuZGFyeS1jb21tZW50IGhlbHBlci4gKi9cclxuICBnZXRQaGFzZUJvdW5kYXJ5Q29tbWVudHM6IChcclxuICAgIGFuYWx5c2lzOiBUZXN0QmxvY2tBbmFseXNpcyxcclxuICApID0+IFRlc3RCbG9ja0FuYWx5c2lzW1wic2VjdGlvbkNvbW1lbnRzXCJdO1xyXG4gIC8qKiBNb2NrZWQgYmxhbmstbGluZSBoZWxwZXIuICovXHJcbiAgaGFzQmxhbmtMaW5lQmVmb3JlQ29tbWVudDogKCkgPT4gZmFsc2U7XHJcbn1cclxuXHJcbi8qKiBNb2NrZWQgbWlzc2luZy1zZWN0aW9uLWZpeGVzIG1vZHVsZS4gKi9cclxuaW50ZXJmYWNlIE1pc3NpbmdTZWN0aW9uRml4ZXNNb2R1bGUge1xyXG4gIC8qKiBNb2NrZWQgZml4IGJ1aWxkZXIuICovXHJcbiAgYnVpbGRNaXNzaW5nU2VjdGlvbkZpeGVzOiAoKSA9PiBSdWxlLkZpeFtdO1xyXG59XHJcblxyXG4vKiogTWVzc2FnZSBpZGVudGlmaWVycyBlbWl0dGVkIGJ5IHRoZSBydWxlIHVuZGVyIHRlc3QuICovXHJcbnR5cGUgUmVxdWlyZUFhYVNlY3Rpb25zTWVzc2FnZUlkID1cclxuICB8IFwiYmxhbmtMaW5lQmVmb3JlU2VjdGlvblwiXHJcbiAgfCBcImNvZGVCZWZvcmVBcnJhbmdlXCJcclxuICB8IFwiZW1wdHlTZWN0aW9uXCJcclxuICB8IFwibWlzc2luZ1NlY3Rpb25zXCI7XHJcblxyXG4vKiogVHlwZWQgbmFtZXNwYWNlIGZvciB0aGUgbGF6aWx5IGltcG9ydGVkIHJ1bGUgbW9kdWxlLiAqL1xyXG5pbnRlcmZhY2UgUnVsZU1vZHVsZU5hbWVzcGFjZSB7XHJcbiAgLyoqIFJ1bGUgbW9kdWxlIGxvYWRlZCBhZnRlciBtb2NrcyBoYXZlIGJlZW4gYXBwbGllZC4gKi9cclxuICByZXF1aXJlQWFhU2VjdGlvbnNSdWxlOiBSdWxlLlJ1bGVNb2R1bGU7XHJcbn1cclxuXHJcbi8qKiBDYXB0dXJlZCByZXN1bHQgZnJvbSB0aGUgbW9ja2VkIHJlcG9ydGluZyBzY2VuYXJpby4gKi9cclxuaW50ZXJmYWNlIFNjZW5hcmlvUmVzdWx0IHtcclxuICAvKiogRml4IGVtaXR0ZWQgZm9yIHRoZSBibGFuay1saW5lIHJlcG9ydC4gKi9cclxuICBibGFua0xpbmVGaXg6IFJ1bGUuRml4IHwgUnVsZS5GaXhbXSB8IHVuZGVmaW5lZDtcclxuICAvKiogRml4ZXMgcmVjb3JkZWQgYnkgdGhlIHN5bnRoZXRpYyBmaXhlci4gKi9cclxuICBpbnNlcnRlZEZpeGVzOiBSdWxlLkZpeFtdO1xyXG4gIC8qKiBNZXNzYWdlIGlkZW50aWZpZXJzIGVtaXR0ZWQgaW4gcmVwb3J0IG9yZGVyLiAqL1xyXG4gIG1lc3NhZ2VJZHM6IChSZXF1aXJlQWFhU2VjdGlvbnNNZXNzYWdlSWQgfCB1bmRlZmluZWQpW107XHJcbiAgLyoqIEZpeCBlbWl0dGVkIGZvciB0aGUgbWlzc2luZy1zZWN0aW9ucyByZXBvcnQuICovXHJcbiAgbWlzc2luZ1NlY3Rpb25zRml4OiBSdWxlLkZpeCB8IFJ1bGUuRml4W10gfCB1bmRlZmluZWQ7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBSZXR1cm5zIGZhbHNlIHNvIHRoZSBtb2NrZWQgcnVsZSBwYXRoIGFsd2F5cyByZXBvcnRzIGEgbWlzc2luZyBibGFuayBsaW5lLlxyXG4gKiBAcmV0dXJucyBGYWxzZSBmb3IgZXZlcnkgaW52b2NhdGlvbi5cclxuICogQGV4YW1wbGVcclxuICogYGBgdHlwZXNjcmlwdFxyXG4gKiBjb25zdCBhY3R1YWwgPSBhbHdheXNSZXR1cm5GYWxzZSgpOyB2b2lkIGFjdHVhbDtcclxuICogYGBgXHJcbiAqL1xyXG5mdW5jdGlvbiBhbHdheXNSZXR1cm5GYWxzZSgpOiBmYWxzZSB7XHJcbiAgcmV0dXJuIGZhbHNlO1xyXG59XHJcblxyXG4vKipcclxuICogQ3JlYXRlcyB0aGUgbW9ja2VkIEFBQSBoZWxwZXIgbW9kdWxlLlxyXG4gKiBAcmV0dXJucyBNb2NrZWQgZXhwb3J0cyBjb25zdW1lZCBieSB0aGUgcnVsZSBtb2R1bGUuXHJcbiAqIEBleGFtcGxlXHJcbiAqIGBgYHR5cGVzY3JpcHRcclxuICogY29uc3QgbW9ja01vZHVsZSA9IGNyZWF0ZUFhYU1vZHVsZU1vY2soKTsgdm9pZCBtb2NrTW9kdWxlO1xyXG4gKiBgYGBcclxuICovXHJcbmZ1bmN0aW9uIGNyZWF0ZUFhYU1vZHVsZU1vY2soKTogQWFhTW9kdWxlTW9jayB7XHJcbiAgcmV0dXJuIHtcclxuICAgIGFuYWx5emVUZXN0QmxvY2s6IGNyZWF0ZU1vY2tBbmFseXNpcyxcclxuICAgIGdldExpbmVTdGFydFJhbmdlOiBnZXRNb2NrTGluZVN0YXJ0UmFuZ2UsXHJcbiAgICBnZXRQaGFzZUJvdW5kYXJ5Q29tbWVudHM6IGdldE1vY2tQaGFzZUJvdW5kYXJ5Q29tbWVudHMsXHJcbiAgICBoYXNCbGFua0xpbmVCZWZvcmVDb21tZW50OiBhbHdheXNSZXR1cm5GYWxzZSxcclxuICB9O1xyXG59XHJcblxyXG4vKipcclxuICogQ3JlYXRlcyB0aGUgbW9ja2VkIG1pc3Npbmctc2VjdGlvbi1maXhlcyBtb2R1bGUuXHJcbiAqIEBwYXJhbSBidWlsZE1pc3NpbmdTZWN0aW9uRml4ZXMgTW9ja2VkIGZpeCBidWlsZGVyLlxyXG4gKiBAcmV0dXJucyBNb2NrZWQgbW9kdWxlIGV4cG9zaW5nIHRoZSBwcm92aWRlZCBmaXggYnVpbGRlci5cclxuICogQGV4YW1wbGVcclxuICogYGBgdHlwZXNjcmlwdFxyXG4gKiBjb25zdCBtb2NrTW9kdWxlID0gY3JlYXRlTWlzc2luZ1NlY3Rpb25GaXhlc01vZHVsZSgoKSA9PiBbXSk7IHZvaWQgbW9ja01vZHVsZTtcclxuICogYGBgXHJcbiAqL1xyXG5mdW5jdGlvbiBjcmVhdGVNaXNzaW5nU2VjdGlvbkZpeGVzTW9kdWxlKFxyXG4gIGJ1aWxkTWlzc2luZ1NlY3Rpb25GaXhlczogKCkgPT4gUnVsZS5GaXhbXSxcclxuKTogTWlzc2luZ1NlY3Rpb25GaXhlc01vZHVsZSB7XHJcbiAgcmV0dXJuIHsgYnVpbGRNaXNzaW5nU2VjdGlvbkZpeGVzIH07XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBCdWlsZHMgdGhlIHN5bnRoZXRpYyBhbmFseXNpcyByZXR1cm5lZCBieSB0aGUgbW9ja2VkIEFBQSBoZWxwZXJzLlxyXG4gKiBAcmV0dXJucyBNaW5pbWFsIHRlc3QtYmxvY2sgYW5hbHlzaXMgdXNlZCBieSB0aGUgcmVncmVzc2lvbiBzY2VuYXJpby5cclxuICogQGV4YW1wbGVcclxuICogYGBgdHlwZXNjcmlwdFxyXG4gKiBjb25zdCBhbmFseXNpcyA9IGNyZWF0ZU1vY2tBbmFseXNpcygpOyB2b2lkIGFuYWx5c2lzO1xyXG4gKiBgYGBcclxuICovXHJcbmZ1bmN0aW9uIGNyZWF0ZU1vY2tBbmFseXNpcygpOiBUZXN0QmxvY2tBbmFseXNpcyB7XHJcbiAgcmV0dXJuIHtcclxuICAgIGJvZHlMaW5lQ291bnQ6IDQsXHJcbiAgICBjYWxsRXhwcmVzc2lvbjogeyB0eXBlOiBcIkNhbGxFeHByZXNzaW9uXCIgfSxcclxuICAgIG5ld2xpbmU6IFwiXFxuXCIsXHJcbiAgICBzZWN0aW9uQ29tbWVudHM6IFtcclxuICAgICAge1xyXG4gICAgICAgIGNvbW1lbnQ6IHtcclxuICAgICAgICAgIGxvYzogeyBlbmQ6IHsgbGluZTogMiB9LCBzdGFydDogeyBsaW5lOiAyIH0gfSxcclxuICAgICAgICAgIHR5cGU6IFwiTGluZVwiLFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgcGhhc2VzOiBbXCJBcnJhbmdlXCJdLFxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgY29tbWVudDoge1xyXG4gICAgICAgICAgbG9jOiB7IGVuZDogeyBsaW5lOiA0IH0sIHN0YXJ0OiB7IGxpbmU6IDQgfSB9LFxyXG4gICAgICAgICAgdHlwZTogXCJMaW5lXCIsXHJcbiAgICAgICAgfSxcclxuICAgICAgICBwaGFzZXM6IFtcIkFjdFwiXSxcclxuICAgICAgfSxcclxuICAgIF0sXHJcbiAgICBzb3VyY2VUZXh0OiBbXHJcbiAgICAgIFwiY29uc3Qgc2V0dXAgPSBjcmVhdGVTZXR1cCgpO1wiLFxyXG4gICAgICBcIi8vIEFycmFuZ2VcIixcclxuICAgICAgXCJydW4oKTtcIixcclxuICAgICAgXCIvLyBBY3RcIixcclxuICAgIF0uam9pbihcIlxcblwiKSxcclxuICAgIHN0YXRlbWVudHM6IFtcclxuICAgICAge1xyXG4gICAgICAgIG5vZGU6IHtcclxuICAgICAgICAgIGxvYzogeyBlbmQ6IHsgbGluZTogMSB9LCBzdGFydDogeyBsaW5lOiAxIH0gfSxcclxuICAgICAgICAgIHR5cGU6IFwiRXhwcmVzc2lvblN0YXRlbWVudFwiLFxyXG4gICAgICAgIH0sXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBub2RlOiB7XHJcbiAgICAgICAgICBsb2M6IHsgZW5kOiB7IGxpbmU6IDMgfSwgc3RhcnQ6IHsgbGluZTogMyB9IH0sXHJcbiAgICAgICAgICB0eXBlOiBcIkV4cHJlc3Npb25TdGF0ZW1lbnRcIixcclxuICAgICAgICB9LFxyXG4gICAgICB9LFxyXG4gICAgXSxcclxuICB9IGFzIFRlc3RCbG9ja0FuYWx5c2lzO1xyXG59XHJcblxyXG4vKipcclxuICogQ3JlYXRlcyBhIGZpeGVyIHRoYXQgcmVjb3JkcyBpbnNlcnRlZCB0ZXh0IGVkaXRzLlxyXG4gKiBAcGFyYW0gaW5zZXJ0ZWRGaXhlcyBDb2xsZWN0aW9uIHVwZGF0ZWQgd2hlbiB0aGUgZml4ZXIgaW5zZXJ0cyB0ZXh0LlxyXG4gKiBAcmV0dXJucyBSdWxlIGZpeGVyIHRoYXQgcmVjb3JkcyBpbnNlcnRlZCBlZGl0cy5cclxuICogQGV4YW1wbGVcclxuICogYGBgdHlwZXNjcmlwdFxyXG4gKiBjb25zdCBmaXhlciA9IGNyZWF0ZVJlY29yZGVkRml4ZXIoW10pOyB2b2lkIGZpeGVyO1xyXG4gKiBgYGBcclxuICovXHJcbmZ1bmN0aW9uIGNyZWF0ZVJlY29yZGVkRml4ZXIoaW5zZXJ0ZWRGaXhlczogUnVsZS5GaXhbXSk6IFJ1bGUuUnVsZUZpeGVyIHtcclxuICByZXR1cm4ge1xyXG4gICAgaW5zZXJ0VGV4dEJlZm9yZVJhbmdlKHJhbmdlOiBbbnVtYmVyLCBudW1iZXJdLCB0ZXh0OiBzdHJpbmcpOiBSdWxlLkZpeCB7XHJcbiAgICAgIGNvbnN0IGZpeDogUnVsZS5GaXggPSB7IHJhbmdlLCB0ZXh0IH07XHJcbiAgICAgIGluc2VydGVkRml4ZXMucHVzaChmaXgpO1xyXG4gICAgICByZXR1cm4gZml4O1xyXG4gICAgfSxcclxuICB9IGFzIFJ1bGUuUnVsZUZpeGVyO1xyXG59XHJcblxyXG4vKipcclxuICogQ3JlYXRlcyB0aGUgbWluaW1hbCBydWxlIGNvbnRleHQgdXNlZCBieSB0aGUgbW9ja2VkIHNjZW5hcmlvLlxyXG4gKiBAcGFyYW0gcmVwb3J0cyBSZXBvcnQgZGVzY3JpcHRvcnMgY2FwdHVyZWQgZHVyaW5nIHJ1bGUgZXhlY3V0aW9uLlxyXG4gKiBAcmV0dXJucyBSdWxlIGNvbnRleHQgdGhhdCByZWNvcmRzIGVtaXR0ZWQgcmVwb3J0cy5cclxuICogQGV4YW1wbGVcclxuICogYGBgdHlwZXNjcmlwdFxyXG4gKiBjb25zdCBjb250ZXh0ID0gY3JlYXRlUnVsZUNvbnRleHQoW10pOyB2b2lkIGNvbnRleHQ7XHJcbiAqIGBgYFxyXG4gKi9cclxuZnVuY3Rpb24gY3JlYXRlUnVsZUNvbnRleHQocmVwb3J0czogUnVsZS5SZXBvcnREZXNjcmlwdG9yW10pOiBSdWxlLlJ1bGVDb250ZXh0IHtcclxuICByZXR1cm4ge1xyXG4gICAgcmVwb3J0KGRlc2NyaXB0b3I6IFJ1bGUuUmVwb3J0RGVzY3JpcHRvcik6IHZvaWQge1xyXG4gICAgICByZXBvcnRzLnB1c2goZGVzY3JpcHRvcik7XHJcbiAgICB9LFxyXG4gIH0gYXMgUnVsZS5SdWxlQ29udGV4dDtcclxufVxyXG5cclxuLyoqXHJcbiAqIFJlYWRzIHRoZSBmaXggZW1pdHRlZCBieSBhIHJlcG9ydCBkZXNjcmlwdG9yLlxyXG4gKiBAcGFyYW0gZGVzY3JpcHRvciBSZXBvcnQgZGVzY3JpcHRvciB0byBldmFsdWF0ZS5cclxuICogQHBhcmFtIGZpeGVyIFN5bnRoZXRpYyBmaXhlciBwYXNzZWQgaW50byB0aGUgZGVzY3JpcHRvciBjYWxsYmFjay5cclxuICogQHJldHVybnMgRml4IG91dHB1dCBwcm9kdWNlZCBieSB0aGUgZGVzY3JpcHRvci5cclxuICogQGV4YW1wbGVcclxuICogYGBgdHlwZXNjcmlwdFxyXG4gKiBjb25zdCBmaXggPSBnZXREZXNjcmlwdG9yRml4KHZvaWQgMCwge30gYXMgbmV2ZXIpOyB2b2lkIGZpeDtcclxuICogYGBgXHJcbiAqL1xyXG5mdW5jdGlvbiBnZXREZXNjcmlwdG9yRml4KFxyXG4gIGRlc2NyaXB0b3I6IFJ1bGUuUmVwb3J0RGVzY3JpcHRvciB8IHVuZGVmaW5lZCxcclxuICBmaXhlcjogUnVsZS5SdWxlRml4ZXIsXHJcbik6IFJ1bGUuRml4IHwgUnVsZS5GaXhbXSB8IHVuZGVmaW5lZCB7XHJcbiAgY29uc3QgYWN0dWFsID0gZGVzY3JpcHRvcj8uZml4Py4oZml4ZXIpO1xyXG5cclxuICBpZiAoIShhY3R1YWwgaW5zdGFuY2VvZiBPYmplY3QpKSB7XHJcbiAgICByZXR1cm4gdm9pZCAwO1xyXG4gIH1cclxuXHJcbiAgaWYgKEFycmF5LmlzQXJyYXkoYWN0dWFsKSB8fCBcInJhbmdlXCIgaW4gYWN0dWFsKSB7XHJcbiAgICByZXR1cm4gYWN0dWFsO1xyXG4gIH1cclxuXHJcbiAgY29uc3QgaXRlcmFibGVGaXhlczogSXRlcmFibGU8UnVsZS5GaXg+ID0gYWN0dWFsO1xyXG5cclxuICByZXR1cm4gWy4uLml0ZXJhYmxlRml4ZXNdO1xyXG59XHJcblxyXG4vKipcclxuICogUmVhZHMgdGhlIG1vY2tlZCBsaW5lLXN0YXJ0IHJhbmdlIGZvciB0aGUgYmxhbmstbGluZSBmaXguXHJcbiAqIEByZXR1cm5zIFN5bnRoZXRpYyByYW5nZSB1c2VkIGJ5IHRoZSBydWxlIGZpeC5cclxuICogQGV4YW1wbGVcclxuICogYGBgdHlwZXNjcmlwdFxyXG4gKiBjb25zdCByYW5nZSA9IGdldE1vY2tMaW5lU3RhcnRSYW5nZSgpOyB2b2lkIHJhbmdlO1xyXG4gKiBgYGBcclxuICovXHJcbmZ1bmN0aW9uIGdldE1vY2tMaW5lU3RhcnRSYW5nZSgpOiBbbnVtYmVyLCBudW1iZXJdIHtcclxuICByZXR1cm4gWzcsIDddO1xyXG59XHJcblxyXG4vKipcclxuICogUmV0dXJucyB0aGUgcGhhc2UtYm91bmRhcnkgY29tbWVudHMgZnJvbSB0aGUgbW9ja2VkIGFuYWx5c2lzLlxyXG4gKiBAcGFyYW0gYW5hbHlzaXMgUGFyc2VkIGFuYWx5c2lzIHVzZWQgYnkgdGhlIG1vY2tlZCBydWxlIGhlbHBlcnMuXHJcbiAqIEByZXR1cm5zIE9ubHkgY29tbWVudHMgdGhhdCBiZWdpbiBhIGxhdGVyIEFBQSBwaGFzZS5cclxuICogQGV4YW1wbGVcclxuICogYGBgdHlwZXNjcmlwdFxyXG4gKiBjb25zdCBjb21tZW50cyA9IGdldE1vY2tQaGFzZUJvdW5kYXJ5Q29tbWVudHMoY3JlYXRlTW9ja0FuYWx5c2lzKCkpO1xyXG4gKiB2b2lkIGNvbW1lbnRzO1xyXG4gKiBgYGBcclxuICovXHJcbmZ1bmN0aW9uIGdldE1vY2tQaGFzZUJvdW5kYXJ5Q29tbWVudHMoXHJcbiAgYW5hbHlzaXM6IFRlc3RCbG9ja0FuYWx5c2lzLFxyXG4pOiBUZXN0QmxvY2tBbmFseXNpc1tcInNlY3Rpb25Db21tZW50c1wiXSB7XHJcbiAgcmV0dXJuIGFuYWx5c2lzLnNlY3Rpb25Db21tZW50cy5zbGljZSgxKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIFJlYWRzIHRoZSBtZXNzYWdlIGlkZW50aWZpZXIgZnJvbSBhIHJlcG9ydCBkZXNjcmlwdG9yIHdoZW4gcHJlc2VudC5cclxuICogQHBhcmFtIGRlc2NyaXB0b3IgUmVwb3J0IGRlc2NyaXB0b3IgZW1pdHRlZCBieSB0aGUgcnVsZS5cclxuICogQHJldHVybnMgU3VwcG9ydGVkIG1lc3NhZ2UgaWRlbnRpZmllciB3aGVuIHByZXNlbnQuXHJcbiAqIEBleGFtcGxlXHJcbiAqIGBgYHR5cGVzY3JpcHRcclxuICogY29uc3QgbWVzc2FnZUlkID0gZ2V0UmVwb3J0TWVzc2FnZUlkKHsgbWVzc2FnZUlkOiBcIm1pc3NpbmdTZWN0aW9uc1wiIH0gYXMgUnVsZS5SZXBvcnREZXNjcmlwdG9yKTtcclxuICogdm9pZCBtZXNzYWdlSWQ7XHJcbiAqIGBgYFxyXG4gKi9cclxuZnVuY3Rpb24gZ2V0UmVwb3J0TWVzc2FnZUlkKFxyXG4gIGRlc2NyaXB0b3I6IFJ1bGUuUmVwb3J0RGVzY3JpcHRvcixcclxuKTogUmVxdWlyZUFhYVNlY3Rpb25zTWVzc2FnZUlkIHwgdW5kZWZpbmVkIHtcclxuICBpZiAoXHJcbiAgICAhKFwibWVzc2FnZUlkXCIgaW4gZGVzY3JpcHRvcikgfHxcclxuICAgICFpc1JlcXVpcmVBYWFTZWN0aW9uc01lc3NhZ2VJZChkZXNjcmlwdG9yLm1lc3NhZ2VJZClcclxuICApIHtcclxuICAgIHJldHVybiB2b2lkIDA7XHJcbiAgfVxyXG4gIHJldHVybiBkZXNjcmlwdG9yLm1lc3NhZ2VJZDtcclxufVxyXG5cclxuLyoqXHJcbiAqIENoZWNrcyB3aGV0aGVyIGFuIHVua25vd24gdmFsdWUgaXMgYSB2YWxpZCBydWxlIG1lc3NhZ2UgaWRlbnRpZmllci5cclxuICogQHBhcmFtIHZhbHVlIFZhbHVlIHRvIHZhbGlkYXRlLlxyXG4gKiBAcmV0dXJucyBXaGV0aGVyIHRoZSB2YWx1ZSBpcyBhIHN1cHBvcnRlZCBtZXNzYWdlIGlkZW50aWZpZXIuXHJcbiAqIEBleGFtcGxlXHJcbiAqIGBgYHR5cGVzY3JpcHRcclxuICogY29uc3QgYWN0dWFsID0gaXNSZXF1aXJlQWFhU2VjdGlvbnNNZXNzYWdlSWQoXCJtaXNzaW5nU2VjdGlvbnNcIik7XHJcbiAqIHZvaWQgYWN0dWFsO1xyXG4gKiBgYGBcclxuICovXHJcbmZ1bmN0aW9uIGlzUmVxdWlyZUFhYVNlY3Rpb25zTWVzc2FnZUlkKFxyXG4gIHZhbHVlOiB1bmtub3duLFxyXG4pOiB2YWx1ZSBpcyBSZXF1aXJlQWFhU2VjdGlvbnNNZXNzYWdlSWQge1xyXG4gIHJldHVybiAoXHJcbiAgICB2YWx1ZSA9PT0gXCJibGFua0xpbmVCZWZvcmVTZWN0aW9uXCIgfHxcclxuICAgIHZhbHVlID09PSBcImNvZGVCZWZvcmVBcnJhbmdlXCIgfHxcclxuICAgIHZhbHVlID09PSBcImVtcHR5U2VjdGlvblwiIHx8XHJcbiAgICB2YWx1ZSA9PT0gXCJtaXNzaW5nU2VjdGlvbnNcIlxyXG4gICk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBMb2FkcyB0aGUgcnVsZSBtb2R1bGUgYWZ0ZXIgdGVzdCBtb2NrcyBoYXZlIGJlZW4gYXBwbGllZC5cclxuICogQHJldHVybnMgVGhlIHJ1bGUgbW9kdWxlIHVuZGVyIHRlc3QuXHJcbiAqIEBleGFtcGxlXHJcbiAqIGBgYHR5cGVzY3JpcHRcclxuICogY29uc3QgcnVsZSA9IGF3YWl0IGxvYWRSZXF1aXJlQWFhU2VjdGlvbnNSdWxlKCk7IHZvaWQgcnVsZTtcclxuICogYGBgXHJcbiAqL1xyXG5hc3luYyBmdW5jdGlvbiBsb2FkUmVxdWlyZUFhYVNlY3Rpb25zUnVsZSgpOiBQcm9taXNlPFJ1bGUuUnVsZU1vZHVsZT4ge1xyXG4gIHJldHVybiAoKGF3YWl0IGltcG9ydChcIi4vcnVsZVwiKSkgYXMgUnVsZU1vZHVsZU5hbWVzcGFjZSlcclxuICAgIC5yZXF1aXJlQWFhU2VjdGlvbnNSdWxlO1xyXG59XHJcblxyXG5leHBvcnQge1xyXG4gIGNyZWF0ZUFhYU1vZHVsZU1vY2ssXHJcbiAgY3JlYXRlTWlzc2luZ1NlY3Rpb25GaXhlc01vZHVsZSxcclxuICBjcmVhdGVSZWNvcmRlZEZpeGVyLFxyXG4gIGNyZWF0ZVJ1bGVDb250ZXh0LFxyXG4gIGdldERlc2NyaXB0b3JGaXgsXHJcbiAgZ2V0UmVwb3J0TWVzc2FnZUlkLFxyXG4gIGxvYWRSZXF1aXJlQWFhU2VjdGlvbnNSdWxlLFxyXG59O1xyXG5cclxuZXhwb3J0IHR5cGUgeyBTY2VuYXJpb1Jlc3VsdCB9O1xyXG4iXX0=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/domain/testing/require-act-result-capture/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,2BAA2B,EAAE,MAAM,QAAQ,CAAC"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export { requireActResultCaptureRule } from "./rule.js";
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvZG9tYWluL3Rlc3RpbmcvcmVxdWlyZS1hY3QtcmVzdWx0LWNhcHR1cmUvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHsgcmVxdWlyZUFjdFJlc3VsdENhcHR1cmVSdWxlIH0gZnJvbSBcIi4vcnVsZVwiO1xuIl19
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rule.d.ts","sourceRoot":"","sources":["../../../../src/domain/testing/require-act-result-capture/rule.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AA4FnC,mFAAmF;AACnF,QAAA,MAAM,2BAA2B,EAAE,IAAI,CAAC,UAqCvC,CAAC;AAEF,OAAO,EAAE,2BAA2B,EAAE,CAAC"}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
import { createRuleDocumentation } from "../../custom-rule-documentation.js";
|
|
2
|
+
import { analyzeTestBlock, hasCapturableActResult } from "../aaa/index.js";
|
|
3
|
+
/**
|
|
4
|
+
* Checks whether a call reports through `context.report(...)`.
|
|
5
|
+
* @param expression Call expression to inspect.
|
|
6
|
+
* @returns True when the call targets `context.report`.
|
|
7
|
+
* @example
|
|
8
|
+
* ```typescript
|
|
9
|
+
* const matches = isContextReportCall({} as ESTree.CallExpression);
|
|
10
|
+
* void matches;
|
|
11
|
+
* ```
|
|
12
|
+
*/
|
|
13
|
+
function isContextReportCall(expression) {
|
|
14
|
+
return (expression.callee.type === "MemberExpression" &&
|
|
15
|
+
expression.callee.object.type === "Identifier" &&
|
|
16
|
+
expression.callee.object.name === "context" &&
|
|
17
|
+
expression.callee.property.type === "Identifier" &&
|
|
18
|
+
expression.callee.property.name === "report");
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Checks whether an Act statement is already delegated to a known helper.
|
|
22
|
+
* @param statement Statement to inspect.
|
|
23
|
+
* @returns True when the statement is handled by a helper wrapper.
|
|
24
|
+
* @example
|
|
25
|
+
* ```typescript
|
|
26
|
+
* const handled = isHelperDrivenAct({} as ESTree.Statement);
|
|
27
|
+
* void handled;
|
|
28
|
+
* ```
|
|
29
|
+
*/
|
|
30
|
+
function isHelperDrivenAct(statement) {
|
|
31
|
+
if (statement.type !== "ExpressionStatement") {
|
|
32
|
+
return false;
|
|
33
|
+
}
|
|
34
|
+
const { expression } = statement;
|
|
35
|
+
if (expression.type !== "CallExpression") {
|
|
36
|
+
return false;
|
|
37
|
+
}
|
|
38
|
+
return (isContextReportCall(expression) ||
|
|
39
|
+
isNamedHelperCall(expression) ||
|
|
40
|
+
isRuleCreateCall(expression));
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Checks whether a call targets one of the known Act helper wrappers.
|
|
44
|
+
* @param expression Call expression to inspect.
|
|
45
|
+
* @returns True when the helper name matches the allowlist.
|
|
46
|
+
* @example
|
|
47
|
+
* ```typescript
|
|
48
|
+
* const matches = isNamedHelperCall({} as ESTree.CallExpression);
|
|
49
|
+
* void matches;
|
|
50
|
+
* ```
|
|
51
|
+
*/
|
|
52
|
+
function isNamedHelperCall(expression) {
|
|
53
|
+
return (expression.callee.type === "Identifier" &&
|
|
54
|
+
/^(?:report[A-Z]\w*|run(?:FunctionListener|Listener|Rule))$/u.test(expression.callee.name));
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Checks whether a call targets `*.Rule.create(...)`.
|
|
58
|
+
* @param expression Call expression to inspect.
|
|
59
|
+
* @returns True when the call targets a rule factory create method.
|
|
60
|
+
* @example
|
|
61
|
+
* ```typescript
|
|
62
|
+
* const matches = isRuleCreateCall({} as ESTree.CallExpression);
|
|
63
|
+
* void matches;
|
|
64
|
+
* ```
|
|
65
|
+
*/
|
|
66
|
+
function isRuleCreateCall(expression) {
|
|
67
|
+
return (expression.callee.type === "MemberExpression" &&
|
|
68
|
+
expression.callee.object.type === "Identifier" &&
|
|
69
|
+
expression.callee.object.name.endsWith("Rule") &&
|
|
70
|
+
expression.callee.property.type === "Identifier" &&
|
|
71
|
+
expression.callee.property.name === "create");
|
|
72
|
+
}
|
|
73
|
+
/** Requires Act-phase expressions to capture non-void results before asserting. */
|
|
74
|
+
const requireActResultCaptureRule = {
|
|
75
|
+
create(context) {
|
|
76
|
+
return {
|
|
77
|
+
CallExpression(node) {
|
|
78
|
+
const analysis = analyzeTestBlock(context, node);
|
|
79
|
+
if (analysis === void 0) {
|
|
80
|
+
return;
|
|
81
|
+
}
|
|
82
|
+
for (const statement of analysis.statements) {
|
|
83
|
+
if (statement.phases.includes("Act") &&
|
|
84
|
+
!statement.phases.includes("Assert") &&
|
|
85
|
+
!isHelperDrivenAct(statement.node) &&
|
|
86
|
+
hasCapturableActResult(statement.node)) {
|
|
87
|
+
context.report({
|
|
88
|
+
messageId: "captureActResult",
|
|
89
|
+
node: statement.node,
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
},
|
|
94
|
+
};
|
|
95
|
+
},
|
|
96
|
+
meta: {
|
|
97
|
+
docs: createRuleDocumentation("require-act-result-capture", "Require non-void Act expressions to store the observed result before assertions."),
|
|
98
|
+
messages: {
|
|
99
|
+
captureActResult: "Capture the // Act result in a named variable before asserting on it.",
|
|
100
|
+
},
|
|
101
|
+
schema: [],
|
|
102
|
+
type: "suggestion",
|
|
103
|
+
},
|
|
104
|
+
};
|
|
105
|
+
export { requireActResultCaptureRule };
|
|
106
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kb21haW4vdGVzdGluZy9yZXF1aXJlLWFjdC1yZXN1bHQtY2FwdHVyZS9ydWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUdBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQzFFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxzQkFBc0IsRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUVsRTs7Ozs7Ozs7O0dBU0c7QUFDSCxTQUFTLG1CQUFtQixDQUFDLFVBQWlDO0lBQzVELE9BQU8sQ0FDTCxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksS0FBSyxrQkFBa0I7UUFDN0MsVUFBVSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxLQUFLLFlBQVk7UUFDOUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxLQUFLLFNBQVM7UUFDM0MsVUFBVSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxLQUFLLFlBQVk7UUFDaEQsVUFBVSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxLQUFLLFFBQVEsQ0FDN0MsQ0FBQztBQUNKLENBQUM7QUFFRDs7Ozs7Ozs7O0dBU0c7QUFDSCxTQUFTLGlCQUFpQixDQUFDLFNBQTJCO0lBQ3BELElBQUksU0FBUyxDQUFDLElBQUksS0FBSyxxQkFBcUIsRUFBRSxDQUFDO1FBQzdDLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVELE1BQU0sRUFBRSxVQUFVLEVBQUUsR0FBRyxTQUFTLENBQUM7SUFDakMsSUFBSSxVQUFVLENBQUMsSUFBSSxLQUFLLGdCQUFnQixFQUFFLENBQUM7UUFDekMsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQsT0FBTyxDQUNMLG1CQUFtQixDQUFDLFVBQVUsQ0FBQztRQUMvQixpQkFBaUIsQ0FBQyxVQUFVLENBQUM7UUFDN0IsZ0JBQWdCLENBQUMsVUFBVSxDQUFDLENBQzdCLENBQUM7QUFDSixDQUFDO0FBRUQ7Ozs7Ozs7OztHQVNHO0FBQ0gsU0FBUyxpQkFBaUIsQ0FBQyxVQUFpQztJQUMxRCxPQUFPLENBQ0wsVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEtBQUssWUFBWTtRQUN2Qyw2REFBNkQsQ0FBQyxJQUFJLENBQ2hFLFVBQVUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUN2QixDQUNGLENBQUM7QUFDSixDQUFDO0FBRUQ7Ozs7Ozs7OztHQVNHO0FBQ0gsU0FBUyxnQkFBZ0IsQ0FBQyxVQUFpQztJQUN6RCxPQUFPLENBQ0wsVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEtBQUssa0JBQWtCO1FBQzdDLFVBQVUsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksS0FBSyxZQUFZO1FBQzlDLFVBQVUsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDO1FBQzlDLFVBQVUsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksS0FBSyxZQUFZO1FBQ2hELFVBQVUsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksS0FBSyxRQUFRLENBQzdDLENBQUM7QUFDSixDQUFDO0FBRUQsbUZBQW1GO0FBQ25GLE1BQU0sMkJBQTJCLEdBQW9CO0lBQ25ELE1BQU0sQ0FBQyxPQUF5QjtRQUM5QixPQUFPO1lBQ0wsY0FBYyxDQUFDLElBQUk7Z0JBQ2pCLE1BQU0sUUFBUSxHQUFHLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQztnQkFDakQsSUFBSSxRQUFRLEtBQUssS0FBSyxDQUFDLEVBQUUsQ0FBQztvQkFDeEIsT0FBTztnQkFDVCxDQUFDO2dCQUVELEtBQUssTUFBTSxTQUFTLElBQUksUUFBUSxDQUFDLFVBQVUsRUFBRSxDQUFDO29CQUM1QyxJQUNFLFNBQVMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQzt3QkFDaEMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUM7d0JBQ3BDLENBQUMsaUJBQWlCLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQzt3QkFDbEMsc0JBQXNCLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUN0QyxDQUFDO3dCQUNELE9BQU8sQ0FBQyxNQUFNLENBQUM7NEJBQ2IsU0FBUyxFQUFFLGtCQUFrQjs0QkFDN0IsSUFBSSxFQUFFLFNBQVMsQ0FBQyxJQUFJO3lCQUNyQixDQUFDLENBQUM7b0JBQ0wsQ0FBQztnQkFDSCxDQUFDO1lBQ0gsQ0FBQztTQUMwQixDQUFDO0lBQ2hDLENBQUM7SUFDRCxJQUFJLEVBQUU7UUFDSixJQUFJLEVBQUUsdUJBQXVCLENBQzNCLDRCQUE0QixFQUM1QixrRkFBa0YsQ0FDbkY7UUFDRCxRQUFRLEVBQUU7WUFDUixnQkFBZ0IsRUFDZCx1RUFBdUU7U0FDMUU7UUFDRCxNQUFNLEVBQUUsRUFBRTtRQUNWLElBQUksRUFBRSxZQUFZO0tBQ25CO0NBQ0YsQ0FBQztBQUVGLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBSdWxlIH0gZnJvbSBcImVzbGludFwiO1xuaW1wb3J0IHR5cGUgKiBhcyBFU1RyZWUgZnJvbSBcImVzdHJlZVwiO1xuXG5pbXBvcnQgeyBjcmVhdGVSdWxlRG9jdW1lbnRhdGlvbiB9IGZyb20gXCIuLi8uLi9jdXN0b20tcnVsZS1kb2N1bWVudGF0aW9uXCI7XG5pbXBvcnQgeyBhbmFseXplVGVzdEJsb2NrLCBoYXNDYXB0dXJhYmxlQWN0UmVzdWx0IH0gZnJvbSBcIi4uL2FhYVwiO1xuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIGEgY2FsbCByZXBvcnRzIHRocm91Z2ggYGNvbnRleHQucmVwb3J0KC4uLilgLlxuICogQHBhcmFtIGV4cHJlc3Npb24gQ2FsbCBleHByZXNzaW9uIHRvIGluc3BlY3QuXG4gKiBAcmV0dXJucyBUcnVlIHdoZW4gdGhlIGNhbGwgdGFyZ2V0cyBgY29udGV4dC5yZXBvcnRgLlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IG1hdGNoZXMgPSBpc0NvbnRleHRSZXBvcnRDYWxsKHt9IGFzIEVTVHJlZS5DYWxsRXhwcmVzc2lvbik7XG4gKiB2b2lkIG1hdGNoZXM7XG4gKiBgYGBcbiAqL1xuZnVuY3Rpb24gaXNDb250ZXh0UmVwb3J0Q2FsbChleHByZXNzaW9uOiBFU1RyZWUuQ2FsbEV4cHJlc3Npb24pOiBib29sZWFuIHtcbiAgcmV0dXJuIChcbiAgICBleHByZXNzaW9uLmNhbGxlZS50eXBlID09PSBcIk1lbWJlckV4cHJlc3Npb25cIiAmJlxuICAgIGV4cHJlc3Npb24uY2FsbGVlLm9iamVjdC50eXBlID09PSBcIklkZW50aWZpZXJcIiAmJlxuICAgIGV4cHJlc3Npb24uY2FsbGVlLm9iamVjdC5uYW1lID09PSBcImNvbnRleHRcIiAmJlxuICAgIGV4cHJlc3Npb24uY2FsbGVlLnByb3BlcnR5LnR5cGUgPT09IFwiSWRlbnRpZmllclwiICYmXG4gICAgZXhwcmVzc2lvbi5jYWxsZWUucHJvcGVydHkubmFtZSA9PT0gXCJyZXBvcnRcIlxuICApO1xufVxuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIGFuIEFjdCBzdGF0ZW1lbnQgaXMgYWxyZWFkeSBkZWxlZ2F0ZWQgdG8gYSBrbm93biBoZWxwZXIuXG4gKiBAcGFyYW0gc3RhdGVtZW50IFN0YXRlbWVudCB0byBpbnNwZWN0LlxuICogQHJldHVybnMgVHJ1ZSB3aGVuIHRoZSBzdGF0ZW1lbnQgaXMgaGFuZGxlZCBieSBhIGhlbHBlciB3cmFwcGVyLlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IGhhbmRsZWQgPSBpc0hlbHBlckRyaXZlbkFjdCh7fSBhcyBFU1RyZWUuU3RhdGVtZW50KTtcbiAqIHZvaWQgaGFuZGxlZDtcbiAqIGBgYFxuICovXG5mdW5jdGlvbiBpc0hlbHBlckRyaXZlbkFjdChzdGF0ZW1lbnQ6IEVTVHJlZS5TdGF0ZW1lbnQpOiBib29sZWFuIHtcbiAgaWYgKHN0YXRlbWVudC50eXBlICE9PSBcIkV4cHJlc3Npb25TdGF0ZW1lbnRcIikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IHsgZXhwcmVzc2lvbiB9ID0gc3RhdGVtZW50O1xuICBpZiAoZXhwcmVzc2lvbi50eXBlICE9PSBcIkNhbGxFeHByZXNzaW9uXCIpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gKFxuICAgIGlzQ29udGV4dFJlcG9ydENhbGwoZXhwcmVzc2lvbikgfHxcbiAgICBpc05hbWVkSGVscGVyQ2FsbChleHByZXNzaW9uKSB8fFxuICAgIGlzUnVsZUNyZWF0ZUNhbGwoZXhwcmVzc2lvbilcbiAgKTtcbn1cblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciBhIGNhbGwgdGFyZ2V0cyBvbmUgb2YgdGhlIGtub3duIEFjdCBoZWxwZXIgd3JhcHBlcnMuXG4gKiBAcGFyYW0gZXhwcmVzc2lvbiBDYWxsIGV4cHJlc3Npb24gdG8gaW5zcGVjdC5cbiAqIEByZXR1cm5zIFRydWUgd2hlbiB0aGUgaGVscGVyIG5hbWUgbWF0Y2hlcyB0aGUgYWxsb3dsaXN0LlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IG1hdGNoZXMgPSBpc05hbWVkSGVscGVyQ2FsbCh7fSBhcyBFU1RyZWUuQ2FsbEV4cHJlc3Npb24pO1xuICogdm9pZCBtYXRjaGVzO1xuICogYGBgXG4gKi9cbmZ1bmN0aW9uIGlzTmFtZWRIZWxwZXJDYWxsKGV4cHJlc3Npb246IEVTVHJlZS5DYWxsRXhwcmVzc2lvbik6IGJvb2xlYW4ge1xuICByZXR1cm4gKFxuICAgIGV4cHJlc3Npb24uY2FsbGVlLnR5cGUgPT09IFwiSWRlbnRpZmllclwiICYmXG4gICAgL14oPzpyZXBvcnRbQS1aXVxcdyp8cnVuKD86RnVuY3Rpb25MaXN0ZW5lcnxMaXN0ZW5lcnxSdWxlKSkkL3UudGVzdChcbiAgICAgIGV4cHJlc3Npb24uY2FsbGVlLm5hbWUsXG4gICAgKVxuICApO1xufVxuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIGEgY2FsbCB0YXJnZXRzIGAqLlJ1bGUuY3JlYXRlKC4uLilgLlxuICogQHBhcmFtIGV4cHJlc3Npb24gQ2FsbCBleHByZXNzaW9uIHRvIGluc3BlY3QuXG4gKiBAcmV0dXJucyBUcnVlIHdoZW4gdGhlIGNhbGwgdGFyZ2V0cyBhIHJ1bGUgZmFjdG9yeSBjcmVhdGUgbWV0aG9kLlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IG1hdGNoZXMgPSBpc1J1bGVDcmVhdGVDYWxsKHt9IGFzIEVTVHJlZS5DYWxsRXhwcmVzc2lvbik7XG4gKiB2b2lkIG1hdGNoZXM7XG4gKiBgYGBcbiAqL1xuZnVuY3Rpb24gaXNSdWxlQ3JlYXRlQ2FsbChleHByZXNzaW9uOiBFU1RyZWUuQ2FsbEV4cHJlc3Npb24pOiBib29sZWFuIHtcbiAgcmV0dXJuIChcbiAgICBleHByZXNzaW9uLmNhbGxlZS50eXBlID09PSBcIk1lbWJlckV4cHJlc3Npb25cIiAmJlxuICAgIGV4cHJlc3Npb24uY2FsbGVlLm9iamVjdC50eXBlID09PSBcIklkZW50aWZpZXJcIiAmJlxuICAgIGV4cHJlc3Npb24uY2FsbGVlLm9iamVjdC5uYW1lLmVuZHNXaXRoKFwiUnVsZVwiKSAmJlxuICAgIGV4cHJlc3Npb24uY2FsbGVlLnByb3BlcnR5LnR5cGUgPT09IFwiSWRlbnRpZmllclwiICYmXG4gICAgZXhwcmVzc2lvbi5jYWxsZWUucHJvcGVydHkubmFtZSA9PT0gXCJjcmVhdGVcIlxuICApO1xufVxuXG4vKiogUmVxdWlyZXMgQWN0LXBoYXNlIGV4cHJlc3Npb25zIHRvIGNhcHR1cmUgbm9uLXZvaWQgcmVzdWx0cyBiZWZvcmUgYXNzZXJ0aW5nLiAqL1xuY29uc3QgcmVxdWlyZUFjdFJlc3VsdENhcHR1cmVSdWxlOiBSdWxlLlJ1bGVNb2R1bGUgPSB7XG4gIGNyZWF0ZShjb250ZXh0OiBSdWxlLlJ1bGVDb250ZXh0KTogUnVsZS5SdWxlTGlzdGVuZXIge1xuICAgIHJldHVybiB7XG4gICAgICBDYWxsRXhwcmVzc2lvbihub2RlKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGFuYWx5c2lzID0gYW5hbHl6ZVRlc3RCbG9jayhjb250ZXh0LCBub2RlKTtcbiAgICAgICAgaWYgKGFuYWx5c2lzID09PSB2b2lkIDApIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGNvbnN0IHN0YXRlbWVudCBvZiBhbmFseXNpcy5zdGF0ZW1lbnRzKSB7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgc3RhdGVtZW50LnBoYXNlcy5pbmNsdWRlcyhcIkFjdFwiKSAmJlxuICAgICAgICAgICAgIXN0YXRlbWVudC5waGFzZXMuaW5jbHVkZXMoXCJBc3NlcnRcIikgJiZcbiAgICAgICAgICAgICFpc0hlbHBlckRyaXZlbkFjdChzdGF0ZW1lbnQubm9kZSkgJiZcbiAgICAgICAgICAgIGhhc0NhcHR1cmFibGVBY3RSZXN1bHQoc3RhdGVtZW50Lm5vZGUpXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBjb250ZXh0LnJlcG9ydCh7XG4gICAgICAgICAgICAgIG1lc3NhZ2VJZDogXCJjYXB0dXJlQWN0UmVzdWx0XCIsXG4gICAgICAgICAgICAgIG5vZGU6IHN0YXRlbWVudC5ub2RlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LFxuICAgIH0gc2F0aXNmaWVzIFJ1bGUuUnVsZUxpc3RlbmVyO1xuICB9LFxuICBtZXRhOiB7XG4gICAgZG9jczogY3JlYXRlUnVsZURvY3VtZW50YXRpb24oXG4gICAgICBcInJlcXVpcmUtYWN0LXJlc3VsdC1jYXB0dXJlXCIsXG4gICAgICBcIlJlcXVpcmUgbm9uLXZvaWQgQWN0IGV4cHJlc3Npb25zIHRvIHN0b3JlIHRoZSBvYnNlcnZlZCByZXN1bHQgYmVmb3JlIGFzc2VydGlvbnMuXCIsXG4gICAgKSxcbiAgICBtZXNzYWdlczoge1xuICAgICAgY2FwdHVyZUFjdFJlc3VsdDpcbiAgICAgICAgXCJDYXB0dXJlIHRoZSAvLyBBY3QgcmVzdWx0IGluIGEgbmFtZWQgdmFyaWFibGUgYmVmb3JlIGFzc2VydGluZyBvbiBpdC5cIixcbiAgICB9LFxuICAgIHNjaGVtYTogW10sXG4gICAgdHlwZTogXCJzdWdnZXN0aW9uXCIsXG4gIH0sXG59O1xuXG5leHBvcnQgeyByZXF1aXJlQWN0UmVzdWx0Q2FwdHVyZVJ1bGUgfTtcbiJdfQ==
|