@codeperfect/eslint-plugin 1.0.0 → 2.1.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 +145 -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 +90 -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 +51 -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 +222 -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 +148 -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} +3 -1
- package/dist/domain/custom-rule-documentation.d.ts.map +1 -0
- package/dist/domain/custom-rule-documentation.js +36 -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 +171 -0
- package/dist/domain/docs/no-interface-member-docs/test-helpers.d.ts.map +1 -0
- package/dist/{docs → domain/docs}/no-interface-member-docs/test-helpers.js +2 -2
- 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 +37 -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 +4 -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 +201 -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 +34 -0
- package/dist/domain/testing/aaa/analyzer.analysis.d.ts.map +1 -0
- package/dist/domain/testing/aaa/analyzer.analysis.helpers.d.ts +145 -0
- package/dist/domain/testing/aaa/analyzer.analysis.helpers.d.ts.map +1 -0
- package/dist/domain/testing/aaa/analyzer.analysis.helpers.js +203 -0
- package/dist/domain/testing/aaa/analyzer.analysis.js +82 -0
- package/dist/domain/testing/aaa/analyzer.analysis.unsupported.d.ts +4 -0
- package/dist/domain/testing/aaa/analyzer.analysis.unsupported.d.ts.map +1 -0
- package/dist/domain/testing/aaa/analyzer.analysis.unsupported.js +4 -0
- package/dist/domain/testing/aaa/analyzer.assertions.d.ts +18 -0
- package/dist/domain/testing/aaa/analyzer.assertions.d.ts.map +1 -0
- package/dist/domain/testing/aaa/analyzer.assertions.destructured.d.ts +4 -0
- package/dist/domain/testing/aaa/analyzer.assertions.destructured.d.ts.map +1 -0
- package/dist/domain/testing/aaa/analyzer.assertions.destructured.js +4 -0
- package/dist/domain/testing/aaa/analyzer.assertions.helpers.d.ts +95 -0
- package/dist/domain/testing/aaa/analyzer.assertions.helpers.d.ts.map +1 -0
- package/dist/domain/testing/aaa/analyzer.assertions.helpers.js +185 -0
- package/dist/domain/testing/aaa/analyzer.assertions.js +33 -0
- package/dist/domain/testing/aaa/analyzer.assertions.operands.d.ts +64 -0
- package/dist/domain/testing/aaa/analyzer.assertions.operands.d.ts.map +1 -0
- package/dist/domain/testing/aaa/analyzer.assertions.operands.js +105 -0
- package/dist/domain/testing/aaa/analyzer.classification.d.ts +16 -0
- package/dist/domain/testing/aaa/analyzer.classification.d.ts.map +1 -0
- package/dist/domain/testing/aaa/analyzer.classification.helpers.d.ts +77 -0
- package/dist/domain/testing/aaa/analyzer.classification.helpers.d.ts.map +1 -0
- package/dist/domain/testing/aaa/analyzer.classification.helpers.js +203 -0
- package/dist/domain/testing/aaa/analyzer.classification.js +31 -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.classification.mutations.d.ts +4 -0
- package/dist/domain/testing/aaa/analyzer.classification.mutations.d.ts.map +1 -0
- package/dist/domain/testing/aaa/analyzer.classification.mutations.js +4 -0
- package/dist/domain/testing/aaa/analyzer.classification.traversal.d.ts +15 -0
- package/dist/domain/testing/aaa/analyzer.classification.traversal.d.ts.map +1 -0
- package/dist/domain/testing/aaa/analyzer.classification.traversal.js +34 -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 +106 -0
- package/dist/domain/testing/aaa/analyzer.super.d.ts.map +1 -0
- package/dist/domain/testing/aaa/analyzer.super.helpers.d.ts +27 -0
- package/dist/domain/testing/aaa/analyzer.super.helpers.d.ts.map +1 -0
- package/dist/domain/testing/aaa/analyzer.super.helpers.js +66 -0
- package/dist/domain/testing/aaa/analyzer.super.js +211 -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 +116 -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.combined.d.ts +4 -0
- package/dist/domain/testing/enforce-aaa-phase-purity/phase-purity-reporting.behavior.combined.d.ts.map +1 -0
- package/dist/domain/testing/enforce-aaa-phase-purity/phase-purity-reporting.behavior.combined.js +4 -0
- package/dist/domain/testing/enforce-aaa-phase-purity/phase-purity-reporting.behavior.companion.d.ts +4 -0
- package/dist/domain/testing/enforce-aaa-phase-purity/phase-purity-reporting.behavior.companion.d.ts.map +1 -0
- package/dist/domain/testing/enforce-aaa-phase-purity/phase-purity-reporting.behavior.companion.js +4 -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 +37 -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 +88 -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 +39 -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 +97 -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 +174 -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 +84 -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 +195 -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 +96 -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 +88 -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 +187 -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 +134 -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 +216 -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 +109 -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 +82 -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 +37 -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 +67 -32
- 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/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 +0 -5
- 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/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,134 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Collects identifiers from an array pattern.
|
|
3
|
+
* @param pattern Array pattern to inspect.
|
|
4
|
+
* @param identifiers Identifier set updated in place.
|
|
5
|
+
* @example
|
|
6
|
+
* ```typescript
|
|
7
|
+
* collectArrayPatternIdentifiers({ elements: [], type: "ArrayPattern" }, new Set<string>());
|
|
8
|
+
* ```
|
|
9
|
+
*/
|
|
10
|
+
function collectArrayPatternIdentifiers(pattern, identifiers) {
|
|
11
|
+
const elements = pattern.elements;
|
|
12
|
+
for (const element of elements) {
|
|
13
|
+
if (element !== null && element !== void 0) {
|
|
14
|
+
collectPatternIdentifiers(element, identifiers);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Collects identifiers from an assignment pattern.
|
|
20
|
+
* @param pattern Assignment pattern to inspect.
|
|
21
|
+
* @param identifiers Identifier set updated in place.
|
|
22
|
+
* @example
|
|
23
|
+
* ```typescript
|
|
24
|
+
* collectAssignmentPatternIdentifiers({ left: { name: "value", type: "Identifier" }, right: { name: "fallback", type: "Identifier" }, type: "AssignmentPattern" } as ESTree.AssignmentPattern, new Set<string>());
|
|
25
|
+
* ```
|
|
26
|
+
*/
|
|
27
|
+
function collectAssignmentPatternIdentifiers(pattern, identifiers) {
|
|
28
|
+
collectPatternIdentifiers(pattern.left, identifiers);
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Collects identifiers from a plain identifier pattern.
|
|
32
|
+
* @param pattern Identifier pattern to inspect.
|
|
33
|
+
* @param identifiers Identifier set updated in place.
|
|
34
|
+
* @example
|
|
35
|
+
* ```typescript
|
|
36
|
+
* collectIdentifierPatternIdentifiers({ name: "value", type: "Identifier" }, new Set<string>());
|
|
37
|
+
* ```
|
|
38
|
+
*/
|
|
39
|
+
function collectIdentifierPatternIdentifiers(pattern, identifiers) {
|
|
40
|
+
identifiers.add(pattern.name);
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Collects identifiers from an object pattern.
|
|
44
|
+
* @param pattern Object pattern to inspect.
|
|
45
|
+
* @param identifiers Identifier set updated in place.
|
|
46
|
+
* @example
|
|
47
|
+
* ```typescript
|
|
48
|
+
* collectObjectPatternIdentifiers({ properties: [], type: "ObjectPattern" }, new Set<string>());
|
|
49
|
+
* ```
|
|
50
|
+
*/
|
|
51
|
+
function collectObjectPatternIdentifiers(pattern, identifiers) {
|
|
52
|
+
for (const property of pattern.properties) {
|
|
53
|
+
if (property.type === "Property") {
|
|
54
|
+
collectPatternIdentifiers(property.value, identifiers);
|
|
55
|
+
}
|
|
56
|
+
else {
|
|
57
|
+
collectPatternIdentifiers(property.argument, identifiers);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Collects all identifier names declared by a destructuring or identifier pattern.
|
|
63
|
+
* @param pattern Pattern node to inspect.
|
|
64
|
+
* @param identifiers Identifier set updated in place.
|
|
65
|
+
* @example
|
|
66
|
+
* ```typescript
|
|
67
|
+
* collectPatternIdentifiers({ name: "value", type: "Identifier" }, new Set<string>());
|
|
68
|
+
* ```
|
|
69
|
+
*/
|
|
70
|
+
function collectPatternIdentifiers(pattern, identifiers) {
|
|
71
|
+
getPatternIdentifierCollector(pattern)(pattern, identifiers);
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Collects identifiers from a rest element pattern.
|
|
75
|
+
* @param pattern Rest element to inspect.
|
|
76
|
+
* @param identifiers Identifier set updated in place.
|
|
77
|
+
* @example
|
|
78
|
+
* ```typescript
|
|
79
|
+
* collectRestPatternIdentifiers({ argument: { name: "value", type: "Identifier" }, type: "RestElement" }, new Set<string>());
|
|
80
|
+
* ```
|
|
81
|
+
*/
|
|
82
|
+
function collectRestPatternIdentifiers(pattern, identifiers) {
|
|
83
|
+
collectPatternIdentifiers(pattern.argument, identifiers);
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Ignores pattern kinds that do not declare identifiers.
|
|
87
|
+
* @param pattern Pattern to ignore.
|
|
88
|
+
* @param identifiers Identifier set left unchanged.
|
|
89
|
+
* @example
|
|
90
|
+
* ```typescript
|
|
91
|
+
* collectUnsupportedPatternIdentifiers({ object: { name: "value", type: "Identifier" }, property: { name: "member", type: "Identifier" }, computed: false, optional: false, type: "MemberExpression" }, new Set<string>());
|
|
92
|
+
* ```
|
|
93
|
+
*/
|
|
94
|
+
function collectUnsupportedPatternIdentifiers(pattern, identifiers) {
|
|
95
|
+
void pattern;
|
|
96
|
+
void identifiers;
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Gets the identifier collector for one supported pattern kind.
|
|
100
|
+
* @param pattern Pattern whose collector is needed.
|
|
101
|
+
* @returns Collector for the pattern, when one exists.
|
|
102
|
+
* @example
|
|
103
|
+
* ```typescript
|
|
104
|
+
* const collector = getPatternIdentifierCollector({ name: "value", type: "Identifier" });
|
|
105
|
+
* void collector;
|
|
106
|
+
* ```
|
|
107
|
+
*/
|
|
108
|
+
function getPatternIdentifierCollector(pattern) {
|
|
109
|
+
switch (pattern.type) {
|
|
110
|
+
case "ArrayPattern": {
|
|
111
|
+
return collectArrayPatternIdentifiers;
|
|
112
|
+
}
|
|
113
|
+
case "AssignmentPattern": {
|
|
114
|
+
return collectAssignmentPatternIdentifiers;
|
|
115
|
+
}
|
|
116
|
+
case "Identifier": {
|
|
117
|
+
return collectIdentifierPatternIdentifiers;
|
|
118
|
+
}
|
|
119
|
+
case "MemberExpression": {
|
|
120
|
+
return collectUnsupportedPatternIdentifiers;
|
|
121
|
+
}
|
|
122
|
+
case "ObjectPattern": {
|
|
123
|
+
return collectObjectPatternIdentifiers;
|
|
124
|
+
}
|
|
125
|
+
case "RestElement": {
|
|
126
|
+
return collectRestPatternIdentifiers;
|
|
127
|
+
}
|
|
128
|
+
default: {
|
|
129
|
+
return collectUnsupportedPatternIdentifiers;
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
export { collectPatternIdentifiers };
|
|
134
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGF0dGVybi1pZGVudGlmaWVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kb21haW4vdGVzdGluZy9lbmZvcmNlLWFhYS1waGFzZS1wdXJpdHkvcGF0dGVybi1pZGVudGlmaWVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFRQTs7Ozs7Ozs7R0FRRztBQUNILFNBQVMsOEJBQThCLENBQ3JDLE9BQXVCLEVBQ3ZCLFdBQXdCO0lBRXhCLE1BQU0sUUFBUSxHQUFJLE9BQStCLENBQUMsUUFJL0MsQ0FBQztJQUVKLEtBQUssTUFBTSxPQUFPLElBQUksUUFBUSxFQUFFLENBQUM7UUFDL0IsSUFBSSxPQUFPLEtBQUssSUFBSSxJQUFJLE9BQU8sS0FBSyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQzNDLHlCQUF5QixDQUFDLE9BQU8sRUFBRSxXQUFXLENBQUMsQ0FBQztRQUNsRCxDQUFDO0lBQ0gsQ0FBQztBQUNILENBQUM7QUFFRDs7Ozs7Ozs7R0FRRztBQUNILFNBQVMsbUNBQW1DLENBQzFDLE9BQXVCLEVBQ3ZCLFdBQXdCO0lBRXhCLHlCQUF5QixDQUN0QixPQUFvQyxDQUFDLElBQUksRUFDMUMsV0FBVyxDQUNaLENBQUM7QUFDSixDQUFDO0FBRUQ7Ozs7Ozs7O0dBUUc7QUFDSCxTQUFTLG1DQUFtQyxDQUMxQyxPQUF1QixFQUN2QixXQUF3QjtJQUV4QixXQUFXLENBQUMsR0FBRyxDQUFFLE9BQTZCLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDdkQsQ0FBQztBQUVEOzs7Ozs7OztHQVFHO0FBQ0gsU0FBUywrQkFBK0IsQ0FDdEMsT0FBdUIsRUFDdkIsV0FBd0I7SUFFeEIsS0FBSyxNQUFNLFFBQVEsSUFBSyxPQUFnQyxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ3BFLElBQUksUUFBUSxDQUFDLElBQUksS0FBSyxVQUFVLEVBQUUsQ0FBQztZQUNqQyx5QkFBeUIsQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBQ3pELENBQUM7YUFBTSxDQUFDO1lBQ04seUJBQXlCLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxXQUFXLENBQUMsQ0FBQztRQUM1RCxDQUFDO0lBQ0gsQ0FBQztBQUNILENBQUM7QUFFRDs7Ozs7Ozs7R0FRRztBQUNILFNBQVMseUJBQXlCLENBQ2hDLE9BQXVCLEVBQ3ZCLFdBQXdCO0lBRXhCLDZCQUE2QixDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxXQUFXLENBQUMsQ0FBQztBQUMvRCxDQUFDO0FBRUQ7Ozs7Ozs7O0dBUUc7QUFDSCxTQUFTLDZCQUE2QixDQUNwQyxPQUF1QixFQUN2QixXQUF3QjtJQUV4Qix5QkFBeUIsQ0FDdEIsT0FBOEIsQ0FBQyxRQUFRLEVBQ3hDLFdBQVcsQ0FDWixDQUFDO0FBQ0osQ0FBQztBQUVEOzs7Ozs7OztHQVFHO0FBQ0gsU0FBUyxvQ0FBb0MsQ0FDM0MsT0FBdUIsRUFDdkIsV0FBd0I7SUFFeEIsS0FBSyxPQUFPLENBQUM7SUFDYixLQUFLLFdBQVcsQ0FBQztBQUNuQixDQUFDO0FBRUQ7Ozs7Ozs7OztHQVNHO0FBQ0gsU0FBUyw2QkFBNkIsQ0FDcEMsT0FBdUI7SUFFdkIsUUFBUSxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDckIsS0FBSyxjQUFjLENBQUMsQ0FBQyxDQUFDO1lBQ3BCLE9BQU8sOEJBQThCLENBQUM7UUFDeEMsQ0FBQztRQUNELEtBQUssbUJBQW1CLENBQUMsQ0FBQyxDQUFDO1lBQ3pCLE9BQU8sbUNBQW1DLENBQUM7UUFDN0MsQ0FBQztRQUNELEtBQUssWUFBWSxDQUFDLENBQUMsQ0FBQztZQUNsQixPQUFPLG1DQUFtQyxDQUFDO1FBQzdDLENBQUM7UUFDRCxLQUFLLGtCQUFrQixDQUFDLENBQUMsQ0FBQztZQUN4QixPQUFPLG9DQUFvQyxDQUFDO1FBQzlDLENBQUM7UUFDRCxLQUFLLGVBQWUsQ0FBQyxDQUFDLENBQUM7WUFDckIsT0FBTywrQkFBK0IsQ0FBQztRQUN6QyxDQUFDO1FBQ0QsS0FBSyxhQUFhLENBQUMsQ0FBQyxDQUFDO1lBQ25CLE9BQU8sNkJBQTZCLENBQUM7UUFDdkMsQ0FBQztRQUNELE9BQU8sQ0FBQyxDQUFDLENBQUM7WUFDUixPQUFPLG9DQUFvQyxDQUFDO1FBQzlDLENBQUM7SUFDSCxDQUFDO0FBQ0gsQ0FBQztBQUVELE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgKiBhcyBFU1RyZWUgZnJvbSBcImVzdHJlZVwiO1xyXG5cclxuLyoqIEZ1bmN0aW9uIHNpZ25hdHVyZSBmb3IgcGF0dGVybiBpZGVudGlmaWVyIGNvbGxlY3RvcnMuICovXHJcbnR5cGUgUGF0dGVybklkZW50aWZpZXJDb2xsZWN0b3IgPSAoXHJcbiAgcGF0dGVybjogRVNUcmVlLlBhdHRlcm4sXHJcbiAgaWRlbnRpZmllcnM6IFNldDxzdHJpbmc+LFxyXG4pID0+IHZvaWQ7XHJcblxyXG4vKipcclxuICogQ29sbGVjdHMgaWRlbnRpZmllcnMgZnJvbSBhbiBhcnJheSBwYXR0ZXJuLlxyXG4gKiBAcGFyYW0gcGF0dGVybiBBcnJheSBwYXR0ZXJuIHRvIGluc3BlY3QuXHJcbiAqIEBwYXJhbSBpZGVudGlmaWVycyBJZGVudGlmaWVyIHNldCB1cGRhdGVkIGluIHBsYWNlLlxyXG4gKiBAZXhhbXBsZVxyXG4gKiBgYGB0eXBlc2NyaXB0XHJcbiAqIGNvbGxlY3RBcnJheVBhdHRlcm5JZGVudGlmaWVycyh7IGVsZW1lbnRzOiBbXSwgdHlwZTogXCJBcnJheVBhdHRlcm5cIiB9LCBuZXcgU2V0PHN0cmluZz4oKSk7XHJcbiAqIGBgYFxyXG4gKi9cclxuZnVuY3Rpb24gY29sbGVjdEFycmF5UGF0dGVybklkZW50aWZpZXJzKFxyXG4gIHBhdHRlcm46IEVTVHJlZS5QYXR0ZXJuLFxyXG4gIGlkZW50aWZpZXJzOiBTZXQ8c3RyaW5nPixcclxuKTogdm9pZCB7XHJcbiAgY29uc3QgZWxlbWVudHMgPSAocGF0dGVybiBhcyBFU1RyZWUuQXJyYXlQYXR0ZXJuKS5lbGVtZW50cyBhcyAoXHJcbiAgICB8IEVTVHJlZS5QYXR0ZXJuXHJcbiAgICB8IG51bGxcclxuICAgIHwgdW5kZWZpbmVkXHJcbiAgKVtdO1xyXG5cclxuICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgZWxlbWVudHMpIHtcclxuICAgIGlmIChlbGVtZW50ICE9PSBudWxsICYmIGVsZW1lbnQgIT09IHZvaWQgMCkge1xyXG4gICAgICBjb2xsZWN0UGF0dGVybklkZW50aWZpZXJzKGVsZW1lbnQsIGlkZW50aWZpZXJzKTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBDb2xsZWN0cyBpZGVudGlmaWVycyBmcm9tIGFuIGFzc2lnbm1lbnQgcGF0dGVybi5cclxuICogQHBhcmFtIHBhdHRlcm4gQXNzaWdubWVudCBwYXR0ZXJuIHRvIGluc3BlY3QuXHJcbiAqIEBwYXJhbSBpZGVudGlmaWVycyBJZGVudGlmaWVyIHNldCB1cGRhdGVkIGluIHBsYWNlLlxyXG4gKiBAZXhhbXBsZVxyXG4gKiBgYGB0eXBlc2NyaXB0XHJcbiAqIGNvbGxlY3RBc3NpZ25tZW50UGF0dGVybklkZW50aWZpZXJzKHsgbGVmdDogeyBuYW1lOiBcInZhbHVlXCIsIHR5cGU6IFwiSWRlbnRpZmllclwiIH0sIHJpZ2h0OiB7IG5hbWU6IFwiZmFsbGJhY2tcIiwgdHlwZTogXCJJZGVudGlmaWVyXCIgfSwgdHlwZTogXCJBc3NpZ25tZW50UGF0dGVyblwiIH0gYXMgRVNUcmVlLkFzc2lnbm1lbnRQYXR0ZXJuLCBuZXcgU2V0PHN0cmluZz4oKSk7XHJcbiAqIGBgYFxyXG4gKi9cclxuZnVuY3Rpb24gY29sbGVjdEFzc2lnbm1lbnRQYXR0ZXJuSWRlbnRpZmllcnMoXHJcbiAgcGF0dGVybjogRVNUcmVlLlBhdHRlcm4sXHJcbiAgaWRlbnRpZmllcnM6IFNldDxzdHJpbmc+LFxyXG4pOiB2b2lkIHtcclxuICBjb2xsZWN0UGF0dGVybklkZW50aWZpZXJzKFxyXG4gICAgKHBhdHRlcm4gYXMgRVNUcmVlLkFzc2lnbm1lbnRQYXR0ZXJuKS5sZWZ0LFxyXG4gICAgaWRlbnRpZmllcnMsXHJcbiAgKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIENvbGxlY3RzIGlkZW50aWZpZXJzIGZyb20gYSBwbGFpbiBpZGVudGlmaWVyIHBhdHRlcm4uXHJcbiAqIEBwYXJhbSBwYXR0ZXJuIElkZW50aWZpZXIgcGF0dGVybiB0byBpbnNwZWN0LlxyXG4gKiBAcGFyYW0gaWRlbnRpZmllcnMgSWRlbnRpZmllciBzZXQgdXBkYXRlZCBpbiBwbGFjZS5cclxuICogQGV4YW1wbGVcclxuICogYGBgdHlwZXNjcmlwdFxyXG4gKiBjb2xsZWN0SWRlbnRpZmllclBhdHRlcm5JZGVudGlmaWVycyh7IG5hbWU6IFwidmFsdWVcIiwgdHlwZTogXCJJZGVudGlmaWVyXCIgfSwgbmV3IFNldDxzdHJpbmc+KCkpO1xyXG4gKiBgYGBcclxuICovXHJcbmZ1bmN0aW9uIGNvbGxlY3RJZGVudGlmaWVyUGF0dGVybklkZW50aWZpZXJzKFxyXG4gIHBhdHRlcm46IEVTVHJlZS5QYXR0ZXJuLFxyXG4gIGlkZW50aWZpZXJzOiBTZXQ8c3RyaW5nPixcclxuKTogdm9pZCB7XHJcbiAgaWRlbnRpZmllcnMuYWRkKChwYXR0ZXJuIGFzIEVTVHJlZS5JZGVudGlmaWVyKS5uYW1lKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIENvbGxlY3RzIGlkZW50aWZpZXJzIGZyb20gYW4gb2JqZWN0IHBhdHRlcm4uXHJcbiAqIEBwYXJhbSBwYXR0ZXJuIE9iamVjdCBwYXR0ZXJuIHRvIGluc3BlY3QuXHJcbiAqIEBwYXJhbSBpZGVudGlmaWVycyBJZGVudGlmaWVyIHNldCB1cGRhdGVkIGluIHBsYWNlLlxyXG4gKiBAZXhhbXBsZVxyXG4gKiBgYGB0eXBlc2NyaXB0XHJcbiAqIGNvbGxlY3RPYmplY3RQYXR0ZXJuSWRlbnRpZmllcnMoeyBwcm9wZXJ0aWVzOiBbXSwgdHlwZTogXCJPYmplY3RQYXR0ZXJuXCIgfSwgbmV3IFNldDxzdHJpbmc+KCkpO1xyXG4gKiBgYGBcclxuICovXHJcbmZ1bmN0aW9uIGNvbGxlY3RPYmplY3RQYXR0ZXJuSWRlbnRpZmllcnMoXHJcbiAgcGF0dGVybjogRVNUcmVlLlBhdHRlcm4sXHJcbiAgaWRlbnRpZmllcnM6IFNldDxzdHJpbmc+LFxyXG4pOiB2b2lkIHtcclxuICBmb3IgKGNvbnN0IHByb3BlcnR5IG9mIChwYXR0ZXJuIGFzIEVTVHJlZS5PYmplY3RQYXR0ZXJuKS5wcm9wZXJ0aWVzKSB7XHJcbiAgICBpZiAocHJvcGVydHkudHlwZSA9PT0gXCJQcm9wZXJ0eVwiKSB7XHJcbiAgICAgIGNvbGxlY3RQYXR0ZXJuSWRlbnRpZmllcnMocHJvcGVydHkudmFsdWUsIGlkZW50aWZpZXJzKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbGxlY3RQYXR0ZXJuSWRlbnRpZmllcnMocHJvcGVydHkuYXJndW1lbnQsIGlkZW50aWZpZXJzKTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBDb2xsZWN0cyBhbGwgaWRlbnRpZmllciBuYW1lcyBkZWNsYXJlZCBieSBhIGRlc3RydWN0dXJpbmcgb3IgaWRlbnRpZmllciBwYXR0ZXJuLlxyXG4gKiBAcGFyYW0gcGF0dGVybiBQYXR0ZXJuIG5vZGUgdG8gaW5zcGVjdC5cclxuICogQHBhcmFtIGlkZW50aWZpZXJzIElkZW50aWZpZXIgc2V0IHVwZGF0ZWQgaW4gcGxhY2UuXHJcbiAqIEBleGFtcGxlXHJcbiAqIGBgYHR5cGVzY3JpcHRcclxuICogY29sbGVjdFBhdHRlcm5JZGVudGlmaWVycyh7IG5hbWU6IFwidmFsdWVcIiwgdHlwZTogXCJJZGVudGlmaWVyXCIgfSwgbmV3IFNldDxzdHJpbmc+KCkpO1xyXG4gKiBgYGBcclxuICovXHJcbmZ1bmN0aW9uIGNvbGxlY3RQYXR0ZXJuSWRlbnRpZmllcnMoXHJcbiAgcGF0dGVybjogRVNUcmVlLlBhdHRlcm4sXHJcbiAgaWRlbnRpZmllcnM6IFNldDxzdHJpbmc+LFxyXG4pOiB2b2lkIHtcclxuICBnZXRQYXR0ZXJuSWRlbnRpZmllckNvbGxlY3RvcihwYXR0ZXJuKShwYXR0ZXJuLCBpZGVudGlmaWVycyk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBDb2xsZWN0cyBpZGVudGlmaWVycyBmcm9tIGEgcmVzdCBlbGVtZW50IHBhdHRlcm4uXHJcbiAqIEBwYXJhbSBwYXR0ZXJuIFJlc3QgZWxlbWVudCB0byBpbnNwZWN0LlxyXG4gKiBAcGFyYW0gaWRlbnRpZmllcnMgSWRlbnRpZmllciBzZXQgdXBkYXRlZCBpbiBwbGFjZS5cclxuICogQGV4YW1wbGVcclxuICogYGBgdHlwZXNjcmlwdFxyXG4gKiBjb2xsZWN0UmVzdFBhdHRlcm5JZGVudGlmaWVycyh7IGFyZ3VtZW50OiB7IG5hbWU6IFwidmFsdWVcIiwgdHlwZTogXCJJZGVudGlmaWVyXCIgfSwgdHlwZTogXCJSZXN0RWxlbWVudFwiIH0sIG5ldyBTZXQ8c3RyaW5nPigpKTtcclxuICogYGBgXHJcbiAqL1xyXG5mdW5jdGlvbiBjb2xsZWN0UmVzdFBhdHRlcm5JZGVudGlmaWVycyhcclxuICBwYXR0ZXJuOiBFU1RyZWUuUGF0dGVybixcclxuICBpZGVudGlmaWVyczogU2V0PHN0cmluZz4sXHJcbik6IHZvaWQge1xyXG4gIGNvbGxlY3RQYXR0ZXJuSWRlbnRpZmllcnMoXHJcbiAgICAocGF0dGVybiBhcyBFU1RyZWUuUmVzdEVsZW1lbnQpLmFyZ3VtZW50LFxyXG4gICAgaWRlbnRpZmllcnMsXHJcbiAgKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIElnbm9yZXMgcGF0dGVybiBraW5kcyB0aGF0IGRvIG5vdCBkZWNsYXJlIGlkZW50aWZpZXJzLlxyXG4gKiBAcGFyYW0gcGF0dGVybiBQYXR0ZXJuIHRvIGlnbm9yZS5cclxuICogQHBhcmFtIGlkZW50aWZpZXJzIElkZW50aWZpZXIgc2V0IGxlZnQgdW5jaGFuZ2VkLlxyXG4gKiBAZXhhbXBsZVxyXG4gKiBgYGB0eXBlc2NyaXB0XHJcbiAqIGNvbGxlY3RVbnN1cHBvcnRlZFBhdHRlcm5JZGVudGlmaWVycyh7IG9iamVjdDogeyBuYW1lOiBcInZhbHVlXCIsIHR5cGU6IFwiSWRlbnRpZmllclwiIH0sIHByb3BlcnR5OiB7IG5hbWU6IFwibWVtYmVyXCIsIHR5cGU6IFwiSWRlbnRpZmllclwiIH0sIGNvbXB1dGVkOiBmYWxzZSwgb3B0aW9uYWw6IGZhbHNlLCB0eXBlOiBcIk1lbWJlckV4cHJlc3Npb25cIiB9LCBuZXcgU2V0PHN0cmluZz4oKSk7XHJcbiAqIGBgYFxyXG4gKi9cclxuZnVuY3Rpb24gY29sbGVjdFVuc3VwcG9ydGVkUGF0dGVybklkZW50aWZpZXJzKFxyXG4gIHBhdHRlcm46IEVTVHJlZS5QYXR0ZXJuLFxyXG4gIGlkZW50aWZpZXJzOiBTZXQ8c3RyaW5nPixcclxuKTogdm9pZCB7XHJcbiAgdm9pZCBwYXR0ZXJuO1xyXG4gIHZvaWQgaWRlbnRpZmllcnM7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBHZXRzIHRoZSBpZGVudGlmaWVyIGNvbGxlY3RvciBmb3Igb25lIHN1cHBvcnRlZCBwYXR0ZXJuIGtpbmQuXHJcbiAqIEBwYXJhbSBwYXR0ZXJuIFBhdHRlcm4gd2hvc2UgY29sbGVjdG9yIGlzIG5lZWRlZC5cclxuICogQHJldHVybnMgQ29sbGVjdG9yIGZvciB0aGUgcGF0dGVybiwgd2hlbiBvbmUgZXhpc3RzLlxyXG4gKiBAZXhhbXBsZVxyXG4gKiBgYGB0eXBlc2NyaXB0XHJcbiAqIGNvbnN0IGNvbGxlY3RvciA9IGdldFBhdHRlcm5JZGVudGlmaWVyQ29sbGVjdG9yKHsgbmFtZTogXCJ2YWx1ZVwiLCB0eXBlOiBcIklkZW50aWZpZXJcIiB9KTtcclxuICogdm9pZCBjb2xsZWN0b3I7XHJcbiAqIGBgYFxyXG4gKi9cclxuZnVuY3Rpb24gZ2V0UGF0dGVybklkZW50aWZpZXJDb2xsZWN0b3IoXHJcbiAgcGF0dGVybjogRVNUcmVlLlBhdHRlcm4sXHJcbik6IFBhdHRlcm5JZGVudGlmaWVyQ29sbGVjdG9yIHtcclxuICBzd2l0Y2ggKHBhdHRlcm4udHlwZSkge1xyXG4gICAgY2FzZSBcIkFycmF5UGF0dGVyblwiOiB7XHJcbiAgICAgIHJldHVybiBjb2xsZWN0QXJyYXlQYXR0ZXJuSWRlbnRpZmllcnM7XHJcbiAgICB9XHJcbiAgICBjYXNlIFwiQXNzaWdubWVudFBhdHRlcm5cIjoge1xyXG4gICAgICByZXR1cm4gY29sbGVjdEFzc2lnbm1lbnRQYXR0ZXJuSWRlbnRpZmllcnM7XHJcbiAgICB9XHJcbiAgICBjYXNlIFwiSWRlbnRpZmllclwiOiB7XHJcbiAgICAgIHJldHVybiBjb2xsZWN0SWRlbnRpZmllclBhdHRlcm5JZGVudGlmaWVycztcclxuICAgIH1cclxuICAgIGNhc2UgXCJNZW1iZXJFeHByZXNzaW9uXCI6IHtcclxuICAgICAgcmV0dXJuIGNvbGxlY3RVbnN1cHBvcnRlZFBhdHRlcm5JZGVudGlmaWVycztcclxuICAgIH1cclxuICAgIGNhc2UgXCJPYmplY3RQYXR0ZXJuXCI6IHtcclxuICAgICAgcmV0dXJuIGNvbGxlY3RPYmplY3RQYXR0ZXJuSWRlbnRpZmllcnM7XHJcbiAgICB9XHJcbiAgICBjYXNlIFwiUmVzdEVsZW1lbnRcIjoge1xyXG4gICAgICByZXR1cm4gY29sbGVjdFJlc3RQYXR0ZXJuSWRlbnRpZmllcnM7XHJcbiAgICB9XHJcbiAgICBkZWZhdWx0OiB7XHJcbiAgICAgIHJldHVybiBjb2xsZWN0VW5zdXBwb3J0ZWRQYXR0ZXJuSWRlbnRpZmllcnM7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgeyBjb2xsZWN0UGF0dGVybklkZW50aWZpZXJzIH07XHJcbiJdfQ==
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type * as ESTree from "estree";
|
|
2
|
+
import type { TestBlockAnalysis } from "../aaa/index.js";
|
|
3
|
+
/**
|
|
4
|
+
* Collects all identifiers referenced from the Assert phase.
|
|
5
|
+
* @param analysis Parsed test-block analysis.
|
|
6
|
+
* @returns Referenced identifier names from Assert statements.
|
|
7
|
+
* @example
|
|
8
|
+
* ```typescript
|
|
9
|
+
* getAssertReferencedIdentifiers({ statements: [] } as never);
|
|
10
|
+
* ```
|
|
11
|
+
*/
|
|
12
|
+
declare function getAssertReferencedIdentifiers(analysis: TestBlockAnalysis): Set<string>;
|
|
13
|
+
/**
|
|
14
|
+
* Checks whether an Act-phase declaration is later referenced from Assert.
|
|
15
|
+
* @param assertReferencedIdentifiers Referenced identifiers collected from Assert.
|
|
16
|
+
* @param statement Statement to inspect.
|
|
17
|
+
* @returns True when one declared identifier is asserted later.
|
|
18
|
+
* @example
|
|
19
|
+
* ```typescript
|
|
20
|
+
* isActResultAsserted(new Set<string>(), { type: "ExpressionStatement" } as never);
|
|
21
|
+
* ```
|
|
22
|
+
*/
|
|
23
|
+
declare function isActResultAsserted(assertReferencedIdentifiers: Set<string>, statement: ESTree.Statement): boolean;
|
|
24
|
+
export { getAssertReferencedIdentifiers, isActResultAsserted };
|
|
25
|
+
//# sourceMappingURL=phase-purity-identifiers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"phase-purity-identifiers.d.ts","sourceRoot":"","sources":["../../../../src/domain/testing/enforce-aaa-phase-purity/phase-purity-identifiers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,MAAM,QAAQ,CAAC;AAEtC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,QAAQ,CAAC;AAsHhD;;;;;;;;GAQG;AACH,iBAAS,8BAA8B,CACrC,QAAQ,EAAE,iBAAiB,GAC1B,GAAG,CAAC,MAAM,CAAC,CAQb;AAED;;;;;;;;;GASG;AACH,iBAAS,mBAAmB,CAC1B,2BAA2B,EAAE,GAAG,CAAC,MAAM,CAAC,EACxC,SAAS,EAAE,MAAM,CAAC,SAAS,GAC1B,OAAO,CAQT;AAoBD,OAAO,EAAE,8BAA8B,EAAE,mBAAmB,EAAE,CAAC"}
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
import { collectPatternIdentifiers } from "./pattern-identifiers.js";
|
|
2
|
+
/**
|
|
3
|
+
* Collects referenced identifiers from one Assert-phase statement.
|
|
4
|
+
* @param statement Statement to inspect.
|
|
5
|
+
* @param identifiers Identifier set updated in place.
|
|
6
|
+
* @example
|
|
7
|
+
* ```typescript
|
|
8
|
+
* collectAssertStatementIdentifiers({ type: "ExpressionStatement" } as never, new Set<string>());
|
|
9
|
+
* ```
|
|
10
|
+
*/
|
|
11
|
+
function collectAssertStatementIdentifiers(statement, identifiers) {
|
|
12
|
+
if (!statement.phases.includes("Assert")) {
|
|
13
|
+
return;
|
|
14
|
+
}
|
|
15
|
+
if (statement.node.type !== "VariableDeclaration") {
|
|
16
|
+
collectReferencedIdentifiers(statement.node, identifiers);
|
|
17
|
+
return;
|
|
18
|
+
}
|
|
19
|
+
for (const declaration of statement.node.declarations) {
|
|
20
|
+
if (declaration.init !== null && declaration.init !== void 0) {
|
|
21
|
+
collectReferencedIdentifiers(declaration.init, identifiers);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Collects referenced identifier names from an ESTree node.
|
|
27
|
+
* @param node Node to inspect.
|
|
28
|
+
* @param identifiers Identifier set updated in place.
|
|
29
|
+
* @example
|
|
30
|
+
* ```typescript
|
|
31
|
+
* collectReferencedIdentifiers({ name: "value", type: "Identifier" }, new Set<string>());
|
|
32
|
+
* ```
|
|
33
|
+
*/
|
|
34
|
+
function collectReferencedIdentifiers(node, identifiers) {
|
|
35
|
+
if (node.type === "Identifier") {
|
|
36
|
+
identifiers.add(node.name);
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
for (const [key, value] of Object.entries(node)) {
|
|
40
|
+
collectReferencedValue(key, value, identifiers);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Collects referenced identifiers from one object entry on an ESTree node.
|
|
45
|
+
* @param key Entry key being inspected.
|
|
46
|
+
* @param value Entry value being inspected.
|
|
47
|
+
* @param identifiers Identifier set updated in place.
|
|
48
|
+
* @example
|
|
49
|
+
* ```typescript
|
|
50
|
+
* collectReferencedValue("type", "Identifier", new Set<string>());
|
|
51
|
+
* ```
|
|
52
|
+
*/
|
|
53
|
+
function collectReferencedValue(key, value, identifiers) {
|
|
54
|
+
if (key === "parent") {
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
if (Array.isArray(value)) {
|
|
58
|
+
for (const item of value) {
|
|
59
|
+
if (isNode(item)) {
|
|
60
|
+
collectReferencedIdentifiers(item, identifiers);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
65
|
+
if (isNode(value)) {
|
|
66
|
+
collectReferencedIdentifiers(value, identifiers);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Gets identifiers declared by an Act-phase variable declaration.
|
|
71
|
+
* @param statement Statement to inspect.
|
|
72
|
+
* @returns Declared identifier names.
|
|
73
|
+
* @example
|
|
74
|
+
* ```typescript
|
|
75
|
+
* getActDeclaredIdentifiers({ declarations: [], kind: "const", type: "VariableDeclaration" } as never);
|
|
76
|
+
* ```
|
|
77
|
+
*/
|
|
78
|
+
function getActDeclaredIdentifiers(statement) {
|
|
79
|
+
const identifiers = new Set();
|
|
80
|
+
if (statement.type !== "VariableDeclaration") {
|
|
81
|
+
return identifiers;
|
|
82
|
+
}
|
|
83
|
+
for (const declaration of statement.declarations) {
|
|
84
|
+
collectPatternIdentifiers(declaration.id, identifiers);
|
|
85
|
+
}
|
|
86
|
+
return identifiers;
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Collects all identifiers referenced from the Assert phase.
|
|
90
|
+
* @param analysis Parsed test-block analysis.
|
|
91
|
+
* @returns Referenced identifier names from Assert statements.
|
|
92
|
+
* @example
|
|
93
|
+
* ```typescript
|
|
94
|
+
* getAssertReferencedIdentifiers({ statements: [] } as never);
|
|
95
|
+
* ```
|
|
96
|
+
*/
|
|
97
|
+
function getAssertReferencedIdentifiers(analysis) {
|
|
98
|
+
const identifiers = new Set();
|
|
99
|
+
for (const statement of analysis.statements) {
|
|
100
|
+
collectAssertStatementIdentifiers(statement, identifiers);
|
|
101
|
+
}
|
|
102
|
+
return identifiers;
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Checks whether an Act-phase declaration is later referenced from Assert.
|
|
106
|
+
* @param assertReferencedIdentifiers Referenced identifiers collected from Assert.
|
|
107
|
+
* @param statement Statement to inspect.
|
|
108
|
+
* @returns True when one declared identifier is asserted later.
|
|
109
|
+
* @example
|
|
110
|
+
* ```typescript
|
|
111
|
+
* isActResultAsserted(new Set<string>(), { type: "ExpressionStatement" } as never);
|
|
112
|
+
* ```
|
|
113
|
+
*/
|
|
114
|
+
function isActResultAsserted(assertReferencedIdentifiers, statement) {
|
|
115
|
+
for (const identifier of getActDeclaredIdentifiers(statement)) {
|
|
116
|
+
if (assertReferencedIdentifiers.has(identifier)) {
|
|
117
|
+
return true;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
return false;
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Checks whether an unknown value is an ESTree node.
|
|
124
|
+
* @param value Unknown value to inspect.
|
|
125
|
+
* @returns True when the value has the shape of an ESTree node.
|
|
126
|
+
* @example
|
|
127
|
+
* ```typescript
|
|
128
|
+
* isNode({ type: "Identifier" });
|
|
129
|
+
* ```
|
|
130
|
+
*/
|
|
131
|
+
function isNode(value) {
|
|
132
|
+
return (typeof value === "object" &&
|
|
133
|
+
value !== null &&
|
|
134
|
+
"type" in value &&
|
|
135
|
+
typeof value.type === "string");
|
|
136
|
+
}
|
|
137
|
+
export { getAssertReferencedIdentifiers, isActResultAsserted };
|
|
138
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGhhc2UtcHVyaXR5LWlkZW50aWZpZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2RvbWFpbi90ZXN0aW5nL2VuZm9yY2UtYWFhLXBoYXNlLXB1cml0eS9waGFzZS1wdXJpdHktaWRlbnRpZmllcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBSUEsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFRbEU7Ozs7Ozs7O0dBUUc7QUFDSCxTQUFTLGlDQUFpQyxDQUN4QyxTQUFrRCxFQUNsRCxXQUF3QjtJQUV4QixJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztRQUN6QyxPQUFPO0lBQ1QsQ0FBQztJQUVELElBQUksU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLEtBQUsscUJBQXFCLEVBQUUsQ0FBQztRQUNsRCw0QkFBNEIsQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBQzFELE9BQU87SUFDVCxDQUFDO0lBRUQsS0FBSyxNQUFNLFdBQVcsSUFBSSxTQUFTLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3RELElBQUksV0FBVyxDQUFDLElBQUksS0FBSyxJQUFJLElBQUksV0FBVyxDQUFDLElBQUksS0FBSyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQzdELDRCQUE0QixDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDOUQsQ0FBQztJQUNILENBQUM7QUFDSCxDQUFDO0FBRUQ7Ozs7Ozs7O0dBUUc7QUFDSCxTQUFTLDRCQUE0QixDQUNuQyxJQUFpQixFQUNqQixXQUF3QjtJQUV4QixJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssWUFBWSxFQUFFLENBQUM7UUFDL0IsV0FBVyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDM0IsT0FBTztJQUNULENBQUM7SUFFRCxLQUFLLE1BQU0sQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQ2hELHNCQUFzQixDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFDbEQsQ0FBQztBQUNILENBQUM7QUFFRDs7Ozs7Ozs7O0dBU0c7QUFDSCxTQUFTLHNCQUFzQixDQUM3QixHQUFXLEVBQ1gsS0FBYyxFQUNkLFdBQXdCO0lBRXhCLElBQUksR0FBRyxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQ3JCLE9BQU87SUFDVCxDQUFDO0lBRUQsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDekIsS0FBSyxNQUFNLElBQUksSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUN6QixJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO2dCQUNqQiw0QkFBNEIsQ0FBQyxJQUFJLEVBQUUsV0FBVyxDQUFDLENBQUM7WUFDbEQsQ0FBQztRQUNILENBQUM7UUFDRCxPQUFPO0lBQ1QsQ0FBQztJQUVELElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDbEIsNEJBQTRCLENBQUMsS0FBSyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBQ25ELENBQUM7QUFDSCxDQUFDO0FBRUQ7Ozs7Ozs7O0dBUUc7QUFDSCxTQUFTLHlCQUF5QixDQUFDLFNBQTJCO0lBQzVELE1BQU0sV0FBVyxHQUFHLElBQUksR0FBRyxFQUFVLENBQUM7SUFFdEMsSUFBSSxTQUFTLENBQUMsSUFBSSxLQUFLLHFCQUFxQixFQUFFLENBQUM7UUFDN0MsT0FBTyxXQUFXLENBQUM7SUFDckIsQ0FBQztJQUVELEtBQUssTUFBTSxXQUFXLElBQUksU0FBUyxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ2pELHlCQUF5QixDQUFDLFdBQVcsQ0FBQyxFQUFFLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFDekQsQ0FBQztJQUVELE9BQU8sV0FBVyxDQUFDO0FBQ3JCLENBQUM7QUFFRDs7Ozs7Ozs7R0FRRztBQUNILFNBQVMsOEJBQThCLENBQ3JDLFFBQTJCO0lBRTNCLE1BQU0sV0FBVyxHQUFHLElBQUksR0FBRyxFQUFVLENBQUM7SUFFdEMsS0FBSyxNQUFNLFNBQVMsSUFBSSxRQUFRLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDNUMsaUNBQWlDLENBQUMsU0FBUyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBQzVELENBQUM7SUFFRCxPQUFPLFdBQVcsQ0FBQztBQUNyQixDQUFDO0FBRUQ7Ozs7Ozs7OztHQVNHO0FBQ0gsU0FBUyxtQkFBbUIsQ0FDMUIsMkJBQXdDLEVBQ3hDLFNBQTJCO0lBRTNCLEtBQUssTUFBTSxVQUFVLElBQUkseUJBQXlCLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztRQUM5RCxJQUFJLDJCQUEyQixDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO1lBQ2hELE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztJQUNILENBQUM7SUFFRCxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUM7QUFFRDs7Ozs7Ozs7R0FRRztBQUNILFNBQVMsTUFBTSxDQUFDLEtBQWM7SUFDNUIsT0FBTyxDQUNMLE9BQU8sS0FBSyxLQUFLLFFBQVE7UUFDekIsS0FBSyxLQUFLLElBQUk7UUFDZCxNQUFNLElBQUksS0FBSztRQUNmLE9BQVEsS0FBdUIsQ0FBQyxJQUFJLEtBQUssUUFBUSxDQUNsRCxDQUFDO0FBQ0osQ0FBQztBQUVELE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxtQkFBbUIsRUFBRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgKiBhcyBFU1RyZWUgZnJvbSBcImVzdHJlZVwiO1xyXG5cclxuaW1wb3J0IHR5cGUgeyBUZXN0QmxvY2tBbmFseXNpcyB9IGZyb20gXCIuLi9hYWFcIjtcclxuXHJcbmltcG9ydCB7IGNvbGxlY3RQYXR0ZXJuSWRlbnRpZmllcnMgfSBmcm9tIFwiLi9wYXR0ZXJuLWlkZW50aWZpZXJzXCI7XHJcblxyXG4vKiogVHlwZSBkZWZpbml0aW9uIGZvciBydWxlIGRhdGEuICovXHJcbmludGVyZmFjZSBOb2RlQ2FuZGlkYXRlIHtcclxuICAvKiogT3B0aW9uYWwgRVNUcmVlIG5vZGUgdHlwZSBtYXJrZXIuICovXHJcbiAgdHlwZT86IHVua25vd247XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBDb2xsZWN0cyByZWZlcmVuY2VkIGlkZW50aWZpZXJzIGZyb20gb25lIEFzc2VydC1waGFzZSBzdGF0ZW1lbnQuXHJcbiAqIEBwYXJhbSBzdGF0ZW1lbnQgU3RhdGVtZW50IHRvIGluc3BlY3QuXHJcbiAqIEBwYXJhbSBpZGVudGlmaWVycyBJZGVudGlmaWVyIHNldCB1cGRhdGVkIGluIHBsYWNlLlxyXG4gKiBAZXhhbXBsZVxyXG4gKiBgYGB0eXBlc2NyaXB0XHJcbiAqIGNvbGxlY3RBc3NlcnRTdGF0ZW1lbnRJZGVudGlmaWVycyh7IHR5cGU6IFwiRXhwcmVzc2lvblN0YXRlbWVudFwiIH0gYXMgbmV2ZXIsIG5ldyBTZXQ8c3RyaW5nPigpKTtcclxuICogYGBgXHJcbiAqL1xyXG5mdW5jdGlvbiBjb2xsZWN0QXNzZXJ0U3RhdGVtZW50SWRlbnRpZmllcnMoXHJcbiAgc3RhdGVtZW50OiBUZXN0QmxvY2tBbmFseXNpc1tcInN0YXRlbWVudHNcIl1bbnVtYmVyXSxcclxuICBpZGVudGlmaWVyczogU2V0PHN0cmluZz4sXHJcbik6IHZvaWQge1xyXG4gIGlmICghc3RhdGVtZW50LnBoYXNlcy5pbmNsdWRlcyhcIkFzc2VydFwiKSkge1xyXG4gICAgcmV0dXJuO1xyXG4gIH1cclxuXHJcbiAgaWYgKHN0YXRlbWVudC5ub2RlLnR5cGUgIT09IFwiVmFyaWFibGVEZWNsYXJhdGlvblwiKSB7XHJcbiAgICBjb2xsZWN0UmVmZXJlbmNlZElkZW50aWZpZXJzKHN0YXRlbWVudC5ub2RlLCBpZGVudGlmaWVycyk7XHJcbiAgICByZXR1cm47XHJcbiAgfVxyXG5cclxuICBmb3IgKGNvbnN0IGRlY2xhcmF0aW9uIG9mIHN0YXRlbWVudC5ub2RlLmRlY2xhcmF0aW9ucykge1xyXG4gICAgaWYgKGRlY2xhcmF0aW9uLmluaXQgIT09IG51bGwgJiYgZGVjbGFyYXRpb24uaW5pdCAhPT0gdm9pZCAwKSB7XHJcbiAgICAgIGNvbGxlY3RSZWZlcmVuY2VkSWRlbnRpZmllcnMoZGVjbGFyYXRpb24uaW5pdCwgaWRlbnRpZmllcnMpO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIENvbGxlY3RzIHJlZmVyZW5jZWQgaWRlbnRpZmllciBuYW1lcyBmcm9tIGFuIEVTVHJlZSBub2RlLlxyXG4gKiBAcGFyYW0gbm9kZSBOb2RlIHRvIGluc3BlY3QuXHJcbiAqIEBwYXJhbSBpZGVudGlmaWVycyBJZGVudGlmaWVyIHNldCB1cGRhdGVkIGluIHBsYWNlLlxyXG4gKiBAZXhhbXBsZVxyXG4gKiBgYGB0eXBlc2NyaXB0XHJcbiAqIGNvbGxlY3RSZWZlcmVuY2VkSWRlbnRpZmllcnMoeyBuYW1lOiBcInZhbHVlXCIsIHR5cGU6IFwiSWRlbnRpZmllclwiIH0sIG5ldyBTZXQ8c3RyaW5nPigpKTtcclxuICogYGBgXHJcbiAqL1xyXG5mdW5jdGlvbiBjb2xsZWN0UmVmZXJlbmNlZElkZW50aWZpZXJzKFxyXG4gIG5vZGU6IEVTVHJlZS5Ob2RlLFxyXG4gIGlkZW50aWZpZXJzOiBTZXQ8c3RyaW5nPixcclxuKTogdm9pZCB7XHJcbiAgaWYgKG5vZGUudHlwZSA9PT0gXCJJZGVudGlmaWVyXCIpIHtcclxuICAgIGlkZW50aWZpZXJzLmFkZChub2RlLm5hbWUpO1xyXG4gICAgcmV0dXJuO1xyXG4gIH1cclxuXHJcbiAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMobm9kZSkpIHtcclxuICAgIGNvbGxlY3RSZWZlcmVuY2VkVmFsdWUoa2V5LCB2YWx1ZSwgaWRlbnRpZmllcnMpO1xyXG4gIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIENvbGxlY3RzIHJlZmVyZW5jZWQgaWRlbnRpZmllcnMgZnJvbSBvbmUgb2JqZWN0IGVudHJ5IG9uIGFuIEVTVHJlZSBub2RlLlxyXG4gKiBAcGFyYW0ga2V5IEVudHJ5IGtleSBiZWluZyBpbnNwZWN0ZWQuXHJcbiAqIEBwYXJhbSB2YWx1ZSBFbnRyeSB2YWx1ZSBiZWluZyBpbnNwZWN0ZWQuXHJcbiAqIEBwYXJhbSBpZGVudGlmaWVycyBJZGVudGlmaWVyIHNldCB1cGRhdGVkIGluIHBsYWNlLlxyXG4gKiBAZXhhbXBsZVxyXG4gKiBgYGB0eXBlc2NyaXB0XHJcbiAqIGNvbGxlY3RSZWZlcmVuY2VkVmFsdWUoXCJ0eXBlXCIsIFwiSWRlbnRpZmllclwiLCBuZXcgU2V0PHN0cmluZz4oKSk7XHJcbiAqIGBgYFxyXG4gKi9cclxuZnVuY3Rpb24gY29sbGVjdFJlZmVyZW5jZWRWYWx1ZShcclxuICBrZXk6IHN0cmluZyxcclxuICB2YWx1ZTogdW5rbm93bixcclxuICBpZGVudGlmaWVyczogU2V0PHN0cmluZz4sXHJcbik6IHZvaWQge1xyXG4gIGlmIChrZXkgPT09IFwicGFyZW50XCIpIHtcclxuICAgIHJldHVybjtcclxuICB9XHJcblxyXG4gIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xyXG4gICAgZm9yIChjb25zdCBpdGVtIG9mIHZhbHVlKSB7XHJcbiAgICAgIGlmIChpc05vZGUoaXRlbSkpIHtcclxuICAgICAgICBjb2xsZWN0UmVmZXJlbmNlZElkZW50aWZpZXJzKGl0ZW0sIGlkZW50aWZpZXJzKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuO1xyXG4gIH1cclxuXHJcbiAgaWYgKGlzTm9kZSh2YWx1ZSkpIHtcclxuICAgIGNvbGxlY3RSZWZlcmVuY2VkSWRlbnRpZmllcnModmFsdWUsIGlkZW50aWZpZXJzKTtcclxuICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBHZXRzIGlkZW50aWZpZXJzIGRlY2xhcmVkIGJ5IGFuIEFjdC1waGFzZSB2YXJpYWJsZSBkZWNsYXJhdGlvbi5cclxuICogQHBhcmFtIHN0YXRlbWVudCBTdGF0ZW1lbnQgdG8gaW5zcGVjdC5cclxuICogQHJldHVybnMgRGVjbGFyZWQgaWRlbnRpZmllciBuYW1lcy5cclxuICogQGV4YW1wbGVcclxuICogYGBgdHlwZXNjcmlwdFxyXG4gKiBnZXRBY3REZWNsYXJlZElkZW50aWZpZXJzKHsgZGVjbGFyYXRpb25zOiBbXSwga2luZDogXCJjb25zdFwiLCB0eXBlOiBcIlZhcmlhYmxlRGVjbGFyYXRpb25cIiB9IGFzIG5ldmVyKTtcclxuICogYGBgXHJcbiAqL1xyXG5mdW5jdGlvbiBnZXRBY3REZWNsYXJlZElkZW50aWZpZXJzKHN0YXRlbWVudDogRVNUcmVlLlN0YXRlbWVudCk6IFNldDxzdHJpbmc+IHtcclxuICBjb25zdCBpZGVudGlmaWVycyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xyXG5cclxuICBpZiAoc3RhdGVtZW50LnR5cGUgIT09IFwiVmFyaWFibGVEZWNsYXJhdGlvblwiKSB7XHJcbiAgICByZXR1cm4gaWRlbnRpZmllcnM7XHJcbiAgfVxyXG5cclxuICBmb3IgKGNvbnN0IGRlY2xhcmF0aW9uIG9mIHN0YXRlbWVudC5kZWNsYXJhdGlvbnMpIHtcclxuICAgIGNvbGxlY3RQYXR0ZXJuSWRlbnRpZmllcnMoZGVjbGFyYXRpb24uaWQsIGlkZW50aWZpZXJzKTtcclxuICB9XHJcblxyXG4gIHJldHVybiBpZGVudGlmaWVycztcclxufVxyXG5cclxuLyoqXHJcbiAqIENvbGxlY3RzIGFsbCBpZGVudGlmaWVycyByZWZlcmVuY2VkIGZyb20gdGhlIEFzc2VydCBwaGFzZS5cclxuICogQHBhcmFtIGFuYWx5c2lzIFBhcnNlZCB0ZXN0LWJsb2NrIGFuYWx5c2lzLlxyXG4gKiBAcmV0dXJucyBSZWZlcmVuY2VkIGlkZW50aWZpZXIgbmFtZXMgZnJvbSBBc3NlcnQgc3RhdGVtZW50cy5cclxuICogQGV4YW1wbGVcclxuICogYGBgdHlwZXNjcmlwdFxyXG4gKiBnZXRBc3NlcnRSZWZlcmVuY2VkSWRlbnRpZmllcnMoeyBzdGF0ZW1lbnRzOiBbXSB9IGFzIG5ldmVyKTtcclxuICogYGBgXHJcbiAqL1xyXG5mdW5jdGlvbiBnZXRBc3NlcnRSZWZlcmVuY2VkSWRlbnRpZmllcnMoXHJcbiAgYW5hbHlzaXM6IFRlc3RCbG9ja0FuYWx5c2lzLFxyXG4pOiBTZXQ8c3RyaW5nPiB7XHJcbiAgY29uc3QgaWRlbnRpZmllcnMgPSBuZXcgU2V0PHN0cmluZz4oKTtcclxuXHJcbiAgZm9yIChjb25zdCBzdGF0ZW1lbnQgb2YgYW5hbHlzaXMuc3RhdGVtZW50cykge1xyXG4gICAgY29sbGVjdEFzc2VydFN0YXRlbWVudElkZW50aWZpZXJzKHN0YXRlbWVudCwgaWRlbnRpZmllcnMpO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIGlkZW50aWZpZXJzO1xyXG59XHJcblxyXG4vKipcclxuICogQ2hlY2tzIHdoZXRoZXIgYW4gQWN0LXBoYXNlIGRlY2xhcmF0aW9uIGlzIGxhdGVyIHJlZmVyZW5jZWQgZnJvbSBBc3NlcnQuXHJcbiAqIEBwYXJhbSBhc3NlcnRSZWZlcmVuY2VkSWRlbnRpZmllcnMgUmVmZXJlbmNlZCBpZGVudGlmaWVycyBjb2xsZWN0ZWQgZnJvbSBBc3NlcnQuXHJcbiAqIEBwYXJhbSBzdGF0ZW1lbnQgU3RhdGVtZW50IHRvIGluc3BlY3QuXHJcbiAqIEByZXR1cm5zIFRydWUgd2hlbiBvbmUgZGVjbGFyZWQgaWRlbnRpZmllciBpcyBhc3NlcnRlZCBsYXRlci5cclxuICogQGV4YW1wbGVcclxuICogYGBgdHlwZXNjcmlwdFxyXG4gKiBpc0FjdFJlc3VsdEFzc2VydGVkKG5ldyBTZXQ8c3RyaW5nPigpLCB7IHR5cGU6IFwiRXhwcmVzc2lvblN0YXRlbWVudFwiIH0gYXMgbmV2ZXIpO1xyXG4gKiBgYGBcclxuICovXHJcbmZ1bmN0aW9uIGlzQWN0UmVzdWx0QXNzZXJ0ZWQoXHJcbiAgYXNzZXJ0UmVmZXJlbmNlZElkZW50aWZpZXJzOiBTZXQ8c3RyaW5nPixcclxuICBzdGF0ZW1lbnQ6IEVTVHJlZS5TdGF0ZW1lbnQsXHJcbik6IGJvb2xlYW4ge1xyXG4gIGZvciAoY29uc3QgaWRlbnRpZmllciBvZiBnZXRBY3REZWNsYXJlZElkZW50aWZpZXJzKHN0YXRlbWVudCkpIHtcclxuICAgIGlmIChhc3NlcnRSZWZlcmVuY2VkSWRlbnRpZmllcnMuaGFzKGlkZW50aWZpZXIpKSB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmV0dXJuIGZhbHNlO1xyXG59XHJcblxyXG4vKipcclxuICogQ2hlY2tzIHdoZXRoZXIgYW4gdW5rbm93biB2YWx1ZSBpcyBhbiBFU1RyZWUgbm9kZS5cclxuICogQHBhcmFtIHZhbHVlIFVua25vd24gdmFsdWUgdG8gaW5zcGVjdC5cclxuICogQHJldHVybnMgVHJ1ZSB3aGVuIHRoZSB2YWx1ZSBoYXMgdGhlIHNoYXBlIG9mIGFuIEVTVHJlZSBub2RlLlxyXG4gKiBAZXhhbXBsZVxyXG4gKiBgYGB0eXBlc2NyaXB0XHJcbiAqIGlzTm9kZSh7IHR5cGU6IFwiSWRlbnRpZmllclwiIH0pO1xyXG4gKiBgYGBcclxuICovXHJcbmZ1bmN0aW9uIGlzTm9kZSh2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIEVTVHJlZS5Ob2RlIHtcclxuICByZXR1cm4gKFxyXG4gICAgdHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiICYmXHJcbiAgICB2YWx1ZSAhPT0gbnVsbCAmJlxyXG4gICAgXCJ0eXBlXCIgaW4gdmFsdWUgJiZcclxuICAgIHR5cGVvZiAodmFsdWUgYXMgTm9kZUNhbmRpZGF0ZSkudHlwZSA9PT0gXCJzdHJpbmdcIlxyXG4gICk7XHJcbn1cclxuXHJcbmV4cG9ydCB7IGdldEFzc2VydFJlZmVyZW5jZWRJZGVudGlmaWVycywgaXNBY3RSZXN1bHRBc3NlcnRlZCB9O1xyXG4iXX0=
|
package/dist/domain/testing/enforce-aaa-phase-purity/phase-purity-reporting.behavior.combined.d.ts
ADDED
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
/** Companion module for combined-section phase purity behavior spec coverage. */
|
|
2
|
+
declare const phasePurityReportingBehaviorCombinedCompanion: true;
|
|
3
|
+
export { phasePurityReportingBehaviorCombinedCompanion };
|
|
4
|
+
//# sourceMappingURL=phase-purity-reporting.behavior.combined.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"phase-purity-reporting.behavior.combined.d.ts","sourceRoot":"","sources":["../../../../src/domain/testing/enforce-aaa-phase-purity/phase-purity-reporting.behavior.combined.ts"],"names":[],"mappings":"AAAA,iFAAiF;AACjF,QAAA,MAAM,6CAA6C,EAAG,IAAa,CAAC;AAEpE,OAAO,EAAE,6CAA6C,EAAE,CAAC"}
|
package/dist/domain/testing/enforce-aaa-phase-purity/phase-purity-reporting.behavior.combined.js
ADDED
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
/** Companion module for combined-section phase purity behavior spec coverage. */
|
|
2
|
+
const phasePurityReportingBehaviorCombinedCompanion = true;
|
|
3
|
+
export { phasePurityReportingBehaviorCombinedCompanion };
|
|
4
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGhhc2UtcHVyaXR5LXJlcG9ydGluZy5iZWhhdmlvci5jb21iaW5lZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kb21haW4vdGVzdGluZy9lbmZvcmNlLWFhYS1waGFzZS1wdXJpdHkvcGhhc2UtcHVyaXR5LXJlcG9ydGluZy5iZWhhdmlvci5jb21iaW5lZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxpRkFBaUY7QUFDakYsTUFBTSw2Q0FBNkMsR0FBRyxJQUFhLENBQUM7QUFFcEUsT0FBTyxFQUFFLDZDQUE2QyxFQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiogQ29tcGFuaW9uIG1vZHVsZSBmb3IgY29tYmluZWQtc2VjdGlvbiBwaGFzZSBwdXJpdHkgYmVoYXZpb3Igc3BlYyBjb3ZlcmFnZS4gKi9cclxuY29uc3QgcGhhc2VQdXJpdHlSZXBvcnRpbmdCZWhhdmlvckNvbWJpbmVkQ29tcGFuaW9uID0gdHJ1ZSBhcyBjb25zdDtcclxuXHJcbmV4cG9ydCB7IHBoYXNlUHVyaXR5UmVwb3J0aW5nQmVoYXZpb3JDb21iaW5lZENvbXBhbmlvbiB9O1xyXG4iXX0=
|
package/dist/domain/testing/enforce-aaa-phase-purity/phase-purity-reporting.behavior.companion.d.ts
ADDED
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
/** Companion module for phase purity reporting companion marker spec coverage. */
|
|
2
|
+
declare const phasePurityReportingBehaviorCompanionCompanion: true;
|
|
3
|
+
export { phasePurityReportingBehaviorCompanionCompanion };
|
|
4
|
+
//# sourceMappingURL=phase-purity-reporting.behavior.companion.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"phase-purity-reporting.behavior.companion.d.ts","sourceRoot":"","sources":["../../../../src/domain/testing/enforce-aaa-phase-purity/phase-purity-reporting.behavior.companion.ts"],"names":[],"mappings":"AAAA,kFAAkF;AAClF,QAAA,MAAM,8CAA8C,EAAG,IAAa,CAAC;AAErE,OAAO,EAAE,8CAA8C,EAAE,CAAC"}
|
package/dist/domain/testing/enforce-aaa-phase-purity/phase-purity-reporting.behavior.companion.js
ADDED
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
/** Companion module for phase purity reporting companion marker spec coverage. */
|
|
2
|
+
const phasePurityReportingBehaviorCompanionCompanion = true;
|
|
3
|
+
export { phasePurityReportingBehaviorCompanionCompanion };
|
|
4
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGhhc2UtcHVyaXR5LXJlcG9ydGluZy5iZWhhdmlvci5jb21wYW5pb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvZG9tYWluL3Rlc3RpbmcvZW5mb3JjZS1hYWEtcGhhc2UtcHVyaXR5L3BoYXNlLXB1cml0eS1yZXBvcnRpbmcuYmVoYXZpb3IuY29tcGFuaW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGtGQUFrRjtBQUNsRixNQUFNLDhDQUE4QyxHQUFHLElBQWEsQ0FBQztBQUVyRSxPQUFPLEVBQUUsOENBQThDLEVBQUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKiBDb21wYW5pb24gbW9kdWxlIGZvciBwaGFzZSBwdXJpdHkgcmVwb3J0aW5nIGNvbXBhbmlvbiBtYXJrZXIgc3BlYyBjb3ZlcmFnZS4gKi9cclxuY29uc3QgcGhhc2VQdXJpdHlSZXBvcnRpbmdCZWhhdmlvckNvbXBhbmlvbkNvbXBhbmlvbiA9IHRydWUgYXMgY29uc3Q7XHJcblxyXG5leHBvcnQgeyBwaGFzZVB1cml0eVJlcG9ydGluZ0JlaGF2aW9yQ29tcGFuaW9uQ29tcGFuaW9uIH07XHJcbiJdfQ==
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"phase-purity-reporting.behavior.d.ts","sourceRoot":"","sources":["../../../../src/domain/testing/enforce-aaa-phase-purity/phase-purity-reporting.behavior.ts"],"names":[],"mappings":"AAAA,sEAAsE;AACtE,QAAA,MAAM,qCAAqC,OAAO,CAAC;AAEnD,OAAO,EAAE,qCAAqC,EAAE,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
/** Companion marker for the phase-purity reporting behavior tests. */
|
|
2
|
+
const phasePurityReportingBehaviorCompanion = true;
|
|
3
|
+
export { phasePurityReportingBehaviorCompanion };
|
|
4
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGhhc2UtcHVyaXR5LXJlcG9ydGluZy5iZWhhdmlvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kb21haW4vdGVzdGluZy9lbmZvcmNlLWFhYS1waGFzZS1wdXJpdHkvcGhhc2UtcHVyaXR5LXJlcG9ydGluZy5iZWhhdmlvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxzRUFBc0U7QUFDdEUsTUFBTSxxQ0FBcUMsR0FBRyxJQUFJLENBQUM7QUFFbkQsT0FBTyxFQUFFLHFDQUFxQyxFQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiogQ29tcGFuaW9uIG1hcmtlciBmb3IgdGhlIHBoYXNlLXB1cml0eSByZXBvcnRpbmcgYmVoYXZpb3IgdGVzdHMuICovXHJcbmNvbnN0IHBoYXNlUHVyaXR5UmVwb3J0aW5nQmVoYXZpb3JDb21wYW5pb24gPSB0cnVlO1xyXG5cclxuZXhwb3J0IHsgcGhhc2VQdXJpdHlSZXBvcnRpbmdCZWhhdmlvckNvbXBhbmlvbiB9O1xyXG4iXX0=
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { Rule } from "eslint";
|
|
2
|
+
import type { TestBlockAnalysis } from "../aaa/index.js";
|
|
3
|
+
/**
|
|
4
|
+
* Reports all enforce-aaa-phase-purity violations for one test block.
|
|
5
|
+
* @param context ESLint rule context.
|
|
6
|
+
* @param analysis Parsed test-block analysis.
|
|
7
|
+
* @example
|
|
8
|
+
* ```typescript
|
|
9
|
+
* reportPhasePurityViolations({ report() {} } as never, { sectionComments: [], statements: [] } as never);
|
|
10
|
+
* ```
|
|
11
|
+
*/
|
|
12
|
+
declare function reportPhasePurityViolations(context: Rule.RuleContext, analysis: TestBlockAnalysis): void;
|
|
13
|
+
export { reportPhasePurityViolations };
|
|
14
|
+
//# sourceMappingURL=phase-purity-reporting.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"phase-purity-reporting.d.ts","sourceRoot":"","sources":["../../../../src/domain/testing/enforce-aaa-phase-purity/phase-purity-reporting.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAEnC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,QAAQ,CAAC;AAqNhD;;;;;;;;GAQG;AACH,iBAAS,2BAA2B,CAClC,OAAO,EAAE,IAAI,CAAC,WAAW,EACzB,QAAQ,EAAE,iBAAiB,GAC1B,IAAI,CAyBN;AAgCD,OAAO,EAAE,2BAA2B,EAAE,CAAC"}
|
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
import { hasAssertion, hasAsyncLogic, hasAwait, hasCapturableActResult, hasMutation, isMeaningfulActStatement, isSetupLikeStatement, isValidAssertStatement, } from "../aaa/index.js";
|
|
2
|
+
import { getAssertReferencedIdentifiers, isActResultAsserted, } from "./phase-purity-identifiers.js";
|
|
3
|
+
/**
|
|
4
|
+
* Collects the phase-purity state for one analyzed statement.
|
|
5
|
+
* @param assertReferencedIdentifiers Referenced identifiers collected from Assert.
|
|
6
|
+
* @param statement Statement entry to classify.
|
|
7
|
+
* @returns Phase-purity state for the statement.
|
|
8
|
+
* @example
|
|
9
|
+
* ```typescript
|
|
10
|
+
* const state = getStatementPurityState(new Set<string>(), { node: { type: "ExpressionStatement" } as never, phases: [] });
|
|
11
|
+
* void state;
|
|
12
|
+
* ```
|
|
13
|
+
*/
|
|
14
|
+
function getStatementPurityState(assertReferencedIdentifiers, statement) {
|
|
15
|
+
const allowsArrange = statement.phases.includes("Arrange");
|
|
16
|
+
const allowsAct = statement.phases.includes("Act");
|
|
17
|
+
const allowsAssert = statement.phases.includes("Assert");
|
|
18
|
+
const containsAssertion = hasAssertion(statement.node);
|
|
19
|
+
const containsAsyncLogic = hasAsyncLogic(statement.node);
|
|
20
|
+
const containsAwait = hasAwait(statement.node);
|
|
21
|
+
const containsMutation = hasMutation(statement.node);
|
|
22
|
+
const isMeaningfulAct = isMeaningfulActStatement(statement.node);
|
|
23
|
+
const isMeaningfulActContent = isMeaningfulAct ||
|
|
24
|
+
hasCapturableActResult(statement.node) ||
|
|
25
|
+
isActResultAsserted(assertReferencedIdentifiers, statement.node);
|
|
26
|
+
return {
|
|
27
|
+
allowsAct,
|
|
28
|
+
allowsArrange,
|
|
29
|
+
allowsAssert,
|
|
30
|
+
containsAssertion,
|
|
31
|
+
containsAsyncLogic,
|
|
32
|
+
containsAwait,
|
|
33
|
+
containsMutation,
|
|
34
|
+
isMeaningfulAct,
|
|
35
|
+
isMeaningfulActContent,
|
|
36
|
+
isSetupLike: isSetupLikeStatement(statement.node),
|
|
37
|
+
isValidAssert: isValidAssertStatement(statement.node),
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Checks whether the analyzed test block declares all AAA section comments.
|
|
42
|
+
* @param analysis Parsed test-block analysis.
|
|
43
|
+
* @returns True when Arrange, Act, and Assert are all present.
|
|
44
|
+
* @example
|
|
45
|
+
* ```typescript
|
|
46
|
+
* const complete = hasAllAaaSections({ sectionComments: [] } as never);
|
|
47
|
+
* void complete;
|
|
48
|
+
* ```
|
|
49
|
+
*/
|
|
50
|
+
function hasAllAaaSections(analysis) {
|
|
51
|
+
return ["Arrange", "Act", "Assert"].every((phase) => analysis.sectionComments.some((sectionComment) => sectionComment.phases.includes(phase)));
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Reports Act-only phase violations for one statement.
|
|
55
|
+
* @param context ESLint rule context.
|
|
56
|
+
* @param statement Statement entry to report against.
|
|
57
|
+
* @param purityState Phase-purity state for the statement.
|
|
58
|
+
* @example
|
|
59
|
+
* ```typescript
|
|
60
|
+
* reportActOnlyStatement({ report() {} } as never, { node: {} as never, phases: [] }, {} as never);
|
|
61
|
+
* ```
|
|
62
|
+
*/
|
|
63
|
+
function reportActOnlyStatement(context, statement, purityState) {
|
|
64
|
+
if (purityState.containsAssertion && !purityState.allowsAssert) {
|
|
65
|
+
context.report({
|
|
66
|
+
messageId: "assertionOutsideAssert",
|
|
67
|
+
node: statement.node,
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
if (purityState.allowsAssert &&
|
|
71
|
+
purityState.containsAssertion &&
|
|
72
|
+
!purityState.isValidAssert) {
|
|
73
|
+
context.report({ messageId: "nonAssertionInAssert", node: statement.node });
|
|
74
|
+
}
|
|
75
|
+
if (purityState.isSetupLike && !purityState.isMeaningfulActContent) {
|
|
76
|
+
context.report({ messageId: "setupAfterAct", node: statement.node });
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Reports Arrange-only phase violations for one statement.
|
|
81
|
+
* @param context ESLint rule context.
|
|
82
|
+
* @param statement Statement entry to report against.
|
|
83
|
+
* @param purityState Phase-purity state for the statement.
|
|
84
|
+
* @example
|
|
85
|
+
* ```typescript
|
|
86
|
+
* reportArrangeOnlyStatement({ report() {} } as never, { node: {} as never, phases: [] }, {} as never);
|
|
87
|
+
* ```
|
|
88
|
+
*/
|
|
89
|
+
function reportArrangeOnlyStatement(context, statement, purityState) {
|
|
90
|
+
if (purityState.containsAssertion && !purityState.allowsAssert) {
|
|
91
|
+
context.report({
|
|
92
|
+
messageId: "assertionOutsideAssert",
|
|
93
|
+
node: statement.node,
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
if (purityState.containsAwait) {
|
|
97
|
+
context.report({ messageId: "awaitOutsideAct", node: statement.node });
|
|
98
|
+
}
|
|
99
|
+
if (purityState.containsAsyncLogic) {
|
|
100
|
+
context.report({ messageId: "asyncInArrange", node: statement.node });
|
|
101
|
+
}
|
|
102
|
+
if (purityState.isMeaningfulAct) {
|
|
103
|
+
context.report({ messageId: "actionInArrange", node: statement.node });
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Reports Assert-only phase violations for one statement.
|
|
108
|
+
* @param context ESLint rule context.
|
|
109
|
+
* @param statement Statement entry to report against.
|
|
110
|
+
* @param purityState Phase-purity state for the statement.
|
|
111
|
+
* @example
|
|
112
|
+
* ```typescript
|
|
113
|
+
* reportAssertOnlyStatement({ report() {} } as never, { node: {} as never, phases: [] }, {} as never);
|
|
114
|
+
* ```
|
|
115
|
+
*/
|
|
116
|
+
function reportAssertOnlyStatement(context, statement, purityState) {
|
|
117
|
+
if (purityState.containsAwait) {
|
|
118
|
+
context.report({ messageId: "awaitOutsideAct", node: statement.node });
|
|
119
|
+
}
|
|
120
|
+
if (purityState.containsMutation) {
|
|
121
|
+
context.report({ messageId: "mutationAfterAct", node: statement.node });
|
|
122
|
+
return;
|
|
123
|
+
}
|
|
124
|
+
if (!purityState.isValidAssert) {
|
|
125
|
+
context.report({ messageId: "nonAssertionInAssert", node: statement.node });
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Reports all enforce-aaa-phase-purity violations for one test block.
|
|
130
|
+
* @param context ESLint rule context.
|
|
131
|
+
* @param analysis Parsed test-block analysis.
|
|
132
|
+
* @example
|
|
133
|
+
* ```typescript
|
|
134
|
+
* reportPhasePurityViolations({ report() {} } as never, { sectionComments: [], statements: [] } as never);
|
|
135
|
+
* ```
|
|
136
|
+
*/
|
|
137
|
+
function reportPhasePurityViolations(context, analysis) {
|
|
138
|
+
if (!hasAllAaaSections(analysis)) {
|
|
139
|
+
return;
|
|
140
|
+
}
|
|
141
|
+
let hasMeaningfulAct = false;
|
|
142
|
+
const assertReferencedIdentifiers = getAssertReferencedIdentifiers(analysis);
|
|
143
|
+
for (const statement of analysis.statements) {
|
|
144
|
+
const purityState = getStatementPurityState(assertReferencedIdentifiers, statement);
|
|
145
|
+
hasMeaningfulAct ||=
|
|
146
|
+
purityState.allowsAct && purityState.isMeaningfulActContent;
|
|
147
|
+
reportStatementViolations(context, statement, purityState);
|
|
148
|
+
}
|
|
149
|
+
if (!hasMeaningfulAct) {
|
|
150
|
+
context.report({
|
|
151
|
+
messageId: "missingMeaningfulAct",
|
|
152
|
+
node: analysis.callExpression,
|
|
153
|
+
});
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Reports any phase-purity violations for one statement.
|
|
158
|
+
* @param context ESLint rule context.
|
|
159
|
+
* @param statement Statement entry to report against.
|
|
160
|
+
* @param purityState Phase-purity state for the statement.
|
|
161
|
+
* @example
|
|
162
|
+
* ```typescript
|
|
163
|
+
* reportStatementViolations({ report() {} } as never, { node: {} as never, phases: [] }, {} as never);
|
|
164
|
+
* ```
|
|
165
|
+
*/
|
|
166
|
+
function reportStatementViolations(context, statement, purityState) {
|
|
167
|
+
if (purityState.allowsArrange && !purityState.allowsAct) {
|
|
168
|
+
reportArrangeOnlyStatement(context, statement, purityState);
|
|
169
|
+
return;
|
|
170
|
+
}
|
|
171
|
+
if (purityState.allowsAct && !purityState.allowsArrange) {
|
|
172
|
+
reportActOnlyStatement(context, statement, purityState);
|
|
173
|
+
return;
|
|
174
|
+
}
|
|
175
|
+
if (purityState.allowsAssert && !purityState.allowsAct) {
|
|
176
|
+
reportAssertOnlyStatement(context, statement, purityState);
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
export { reportPhasePurityViolations };
|
|
180
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGhhc2UtcHVyaXR5LXJlcG9ydGluZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kb21haW4vdGVzdGluZy9lbmZvcmNlLWFhYS1waGFzZS1wdXJpdHkvcGhhc2UtcHVyaXR5LXJlcG9ydGluZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFJQSxPQUFPLEVBQ0wsWUFBWSxFQUNaLGFBQWEsRUFDYixRQUFRLEVBQ1Isc0JBQXNCLEVBQ3RCLFdBQVcsRUFDWCx3QkFBd0IsRUFDeEIsb0JBQW9CLEVBQ3BCLHNCQUFzQixHQUN2QixNQUFNLFFBQVEsQ0FBQztBQUNoQixPQUFPLEVBQ0wsOEJBQThCLEVBQzlCLG1CQUFtQixHQUNwQixNQUFNLDRCQUE0QixDQUFDO0FBc0NwQzs7Ozs7Ozs7OztHQVVHO0FBQ0gsU0FBUyx1QkFBdUIsQ0FDOUIsMkJBQXdDLEVBQ3hDLFNBQWtEO0lBRWxELE1BQU0sYUFBYSxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQzNELE1BQU0sU0FBUyxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ25ELE1BQU0sWUFBWSxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3pELE1BQU0saUJBQWlCLEdBQUcsWUFBWSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN2RCxNQUFNLGtCQUFrQixHQUFHLGFBQWEsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDekQsTUFBTSxhQUFhLEdBQUcsUUFBUSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMvQyxNQUFNLGdCQUFnQixHQUFHLFdBQVcsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDckQsTUFBTSxlQUFlLEdBQUcsd0JBQXdCLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2pFLE1BQU0sc0JBQXNCLEdBQzFCLGVBQWU7UUFDZixzQkFBc0IsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDO1FBQ3RDLG1CQUFtQixDQUFDLDJCQUEyQixFQUFFLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUVuRSxPQUFPO1FBQ0wsU0FBUztRQUNULGFBQWE7UUFDYixZQUFZO1FBQ1osaUJBQWlCO1FBQ2pCLGtCQUFrQjtRQUNsQixhQUFhO1FBQ2IsZ0JBQWdCO1FBQ2hCLGVBQWU7UUFDZixzQkFBc0I7UUFDdEIsV0FBVyxFQUFFLG9CQUFvQixDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUM7UUFDakQsYUFBYSxFQUFFLHNCQUFzQixDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUM7S0FDdEQsQ0FBQztBQUNKLENBQUM7QUFFRDs7Ozs7Ozs7O0dBU0c7QUFDSCxTQUFTLGlCQUFpQixDQUFDLFFBQTJCO0lBQ3BELE9BQU8sQ0FBQyxTQUFTLEVBQUUsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQ2xELFFBQVEsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUMsY0FBYyxFQUFFLEVBQUUsQ0FDL0MsY0FBYyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsS0FBYyxDQUFDLENBQy9DLENBQ0YsQ0FBQztBQUNKLENBQUM7QUFFRDs7Ozs7Ozs7O0dBU0c7QUFDSCxTQUFTLHNCQUFzQixDQUM3QixPQUF5QixFQUN6QixTQUFrRCxFQUNsRCxXQUFpQztJQUVqQyxJQUFJLFdBQVcsQ0FBQyxpQkFBaUIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUMvRCxPQUFPLENBQUMsTUFBTSxDQUFDO1lBQ2IsU0FBUyxFQUFFLHdCQUF3QjtZQUNuQyxJQUFJLEVBQUUsU0FBUyxDQUFDLElBQUk7U0FDckIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELElBQ0UsV0FBVyxDQUFDLFlBQVk7UUFDeEIsV0FBVyxDQUFDLGlCQUFpQjtRQUM3QixDQUFDLFdBQVcsQ0FBQyxhQUFhLEVBQzFCLENBQUM7UUFDRCxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUUsU0FBUyxFQUFFLHNCQUFzQixFQUFFLElBQUksRUFBRSxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUM5RSxDQUFDO0lBRUQsSUFBSSxXQUFXLENBQUMsV0FBVyxJQUFJLENBQUMsV0FBVyxDQUFDLHNCQUFzQixFQUFFLENBQUM7UUFDbkUsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFLFNBQVMsRUFBRSxlQUFlLEVBQUUsSUFBSSxFQUFFLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ3ZFLENBQUM7QUFDSCxDQUFDO0FBRUQ7Ozs7Ozs7OztHQVNHO0FBQ0gsU0FBUywwQkFBMEIsQ0FDakMsT0FBeUIsRUFDekIsU0FBa0QsRUFDbEQsV0FBaUM7SUFFakMsSUFBSSxXQUFXLENBQUMsaUJBQWlCLElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDL0QsT0FBTyxDQUFDLE1BQU0sQ0FBQztZQUNiLFNBQVMsRUFBRSx3QkFBd0I7WUFDbkMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxJQUFJO1NBQ3JCLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxJQUFJLFdBQVcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUM5QixPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUUsU0FBUyxFQUFFLGlCQUFpQixFQUFFLElBQUksRUFBRSxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUN6RSxDQUFDO0lBRUQsSUFBSSxXQUFXLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUNuQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFLElBQUksRUFBRSxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUN4RSxDQUFDO0lBRUQsSUFBSSxXQUFXLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDaEMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFLFNBQVMsRUFBRSxpQkFBaUIsRUFBRSxJQUFJLEVBQUUsU0FBUyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7SUFDekUsQ0FBQztBQUNILENBQUM7QUFFRDs7Ozs7Ozs7O0dBU0c7QUFDSCxTQUFTLHlCQUF5QixDQUNoQyxPQUF5QixFQUN6QixTQUFrRCxFQUNsRCxXQUFpQztJQUVqQyxJQUFJLFdBQVcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUM5QixPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUUsU0FBUyxFQUFFLGlCQUFpQixFQUFFLElBQUksRUFBRSxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUN6RSxDQUFDO0lBRUQsSUFBSSxXQUFXLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUNqQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUUsU0FBUyxFQUFFLGtCQUFrQixFQUFFLElBQUksRUFBRSxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUN4RSxPQUFPO0lBQ1QsQ0FBQztJQUVELElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDL0IsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFLFNBQVMsRUFBRSxzQkFBc0IsRUFBRSxJQUFJLEVBQUUsU0FBUyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7SUFDOUUsQ0FBQztBQUNILENBQUM7QUFFRDs7Ozs7Ozs7R0FRRztBQUNILFNBQVMsMkJBQTJCLENBQ2xDLE9BQXlCLEVBQ3pCLFFBQTJCO0lBRTNCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO1FBQ2pDLE9BQU87SUFDVCxDQUFDO0lBRUQsSUFBSSxnQkFBZ0IsR0FBRyxLQUFLLENBQUM7SUFDN0IsTUFBTSwyQkFBMkIsR0FBRyw4QkFBOEIsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUU3RSxLQUFLLE1BQU0sU0FBUyxJQUFJLFFBQVEsQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUM1QyxNQUFNLFdBQVcsR0FBRyx1QkFBdUIsQ0FDekMsMkJBQTJCLEVBQzNCLFNBQVMsQ0FDVixDQUFDO1FBRUYsZ0JBQWdCO1lBQ2QsV0FBVyxDQUFDLFNBQVMsSUFBSSxXQUFXLENBQUMsc0JBQXNCLENBQUM7UUFDOUQseUJBQXlCLENBQUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxXQUFXLENBQUMsQ0FBQztJQUM3RCxDQUFDO0lBRUQsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDdEIsT0FBTyxDQUFDLE1BQU0sQ0FBQztZQUNiLFNBQVMsRUFBRSxzQkFBc0I7WUFDakMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxjQUFjO1NBQzlCLENBQUMsQ0FBQztJQUNMLENBQUM7QUFDSCxDQUFDO0FBRUQ7Ozs7Ozs7OztHQVNHO0FBQ0gsU0FBUyx5QkFBeUIsQ0FDaEMsT0FBeUIsRUFDekIsU0FBa0QsRUFDbEQsV0FBaUM7SUFFakMsSUFBSSxXQUFXLENBQUMsYUFBYSxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ3hELDBCQUEwQixDQUFDLE9BQU8sRUFBRSxTQUFTLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDNUQsT0FBTztJQUNULENBQUM7SUFFRCxJQUFJLFdBQVcsQ0FBQyxTQUFTLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDeEQsc0JBQXNCLENBQUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxXQUFXLENBQUMsQ0FBQztRQUN4RCxPQUFPO0lBQ1QsQ0FBQztJQUVELElBQUksV0FBVyxDQUFDLFlBQVksSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUN2RCx5QkFBeUIsQ0FBQyxPQUFPLEVBQUUsU0FBUyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBQzdELENBQUM7QUFDSCxDQUFDO0FBRUQsT0FBTyxFQUFFLDJCQUEyQixFQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFJ1bGUgfSBmcm9tIFwiZXNsaW50XCI7XHJcblxyXG5pbXBvcnQgdHlwZSB7IFRlc3RCbG9ja0FuYWx5c2lzIH0gZnJvbSBcIi4uL2FhYVwiO1xyXG5cclxuaW1wb3J0IHtcclxuICBoYXNBc3NlcnRpb24sXHJcbiAgaGFzQXN5bmNMb2dpYyxcclxuICBoYXNBd2FpdCxcclxuICBoYXNDYXB0dXJhYmxlQWN0UmVzdWx0LFxyXG4gIGhhc011dGF0aW9uLFxyXG4gIGlzTWVhbmluZ2Z1bEFjdFN0YXRlbWVudCxcclxuICBpc1NldHVwTGlrZVN0YXRlbWVudCxcclxuICBpc1ZhbGlkQXNzZXJ0U3RhdGVtZW50LFxyXG59IGZyb20gXCIuLi9hYWFcIjtcclxuaW1wb3J0IHtcclxuICBnZXRBc3NlcnRSZWZlcmVuY2VkSWRlbnRpZmllcnMsXHJcbiAgaXNBY3RSZXN1bHRBc3NlcnRlZCxcclxufSBmcm9tIFwiLi9waGFzZS1wdXJpdHktaWRlbnRpZmllcnNcIjtcclxuXHJcbi8qKiBUeXBlIGRlZmluaXRpb24gZm9yIHJ1bGUgZGF0YS4gKi9cclxuaW50ZXJmYWNlIFN0YXRlbWVudFB1cml0eVN0YXRlIHtcclxuICAvKiogV2hldGhlciB0aGUgc3RhdGVtZW50IGJlbG9uZ3MgdG8gQWN0LiAqL1xyXG4gIGFsbG93c0FjdDogYm9vbGVhbjtcclxuXHJcbiAgLyoqIFdoZXRoZXIgdGhlIHN0YXRlbWVudCBiZWxvbmdzIHRvIEFycmFuZ2UuICovXHJcbiAgYWxsb3dzQXJyYW5nZTogYm9vbGVhbjtcclxuXHJcbiAgLyoqIFdoZXRoZXIgdGhlIHN0YXRlbWVudCBiZWxvbmdzIHRvIEFzc2VydC4gKi9cclxuICBhbGxvd3NBc3NlcnQ6IGJvb2xlYW47XHJcblxyXG4gIC8qKiBXaGV0aGVyIHRoZSBzdGF0ZW1lbnQgY29udGFpbnMgYW4gYXNzZXJ0aW9uLiAqL1xyXG4gIGNvbnRhaW5zQXNzZXJ0aW9uOiBib29sZWFuO1xyXG5cclxuICAvKiogV2hldGhlciB0aGUgc3RhdGVtZW50IGNvbnRhaW5zIGFzeW5jIGxvZ2ljLiAqL1xyXG4gIGNvbnRhaW5zQXN5bmNMb2dpYzogYm9vbGVhbjtcclxuXHJcbiAgLyoqIFdoZXRoZXIgdGhlIHN0YXRlbWVudCBjb250YWlucyBhbiBhd2FpdCBleHByZXNzaW9uLiAqL1xyXG4gIGNvbnRhaW5zQXdhaXQ6IGJvb2xlYW47XHJcblxyXG4gIC8qKiBXaGV0aGVyIHRoZSBzdGF0ZW1lbnQgbXV0YXRlcyBzdGF0ZS4gKi9cclxuICBjb250YWluc011dGF0aW9uOiBib29sZWFuO1xyXG5cclxuICAvKiogV2hldGhlciB0aGUgc3RhdGVtZW50IHBlcmZvcm1zIG1lYW5pbmdmdWwgQWN0IHdvcmsuICovXHJcbiAgaXNNZWFuaW5nZnVsQWN0OiBib29sZWFuO1xyXG5cclxuICAvKiogV2hldGhlciB0aGUgc3RhdGVtZW50IGNvdW50cyBhcyBtZWFuaW5nZnVsIEFjdCBjb250ZW50IG92ZXJhbGwuICovXHJcbiAgaXNNZWFuaW5nZnVsQWN0Q29udGVudDogYm9vbGVhbjtcclxuXHJcbiAgLyoqIFdoZXRoZXIgdGhlIHN0YXRlbWVudCBsb29rcyBsaWtlIHNldHVwLiAqL1xyXG4gIGlzU2V0dXBMaWtlOiBib29sZWFuO1xyXG5cclxuICAvKiogV2hldGhlciB0aGUgc3RhdGVtZW50IGlzIGEgdmFsaWQgYXNzZXJ0LXBoYXNlIHN0YXRlbWVudC4gKi9cclxuICBpc1ZhbGlkQXNzZXJ0OiBib29sZWFuO1xyXG59XHJcblxyXG4vKipcclxuICogQ29sbGVjdHMgdGhlIHBoYXNlLXB1cml0eSBzdGF0ZSBmb3Igb25lIGFuYWx5emVkIHN0YXRlbWVudC5cclxuICogQHBhcmFtIGFzc2VydFJlZmVyZW5jZWRJZGVudGlmaWVycyBSZWZlcmVuY2VkIGlkZW50aWZpZXJzIGNvbGxlY3RlZCBmcm9tIEFzc2VydC5cclxuICogQHBhcmFtIHN0YXRlbWVudCBTdGF0ZW1lbnQgZW50cnkgdG8gY2xhc3NpZnkuXHJcbiAqIEByZXR1cm5zIFBoYXNlLXB1cml0eSBzdGF0ZSBmb3IgdGhlIHN0YXRlbWVudC5cclxuICogQGV4YW1wbGVcclxuICogYGBgdHlwZXNjcmlwdFxyXG4gKiBjb25zdCBzdGF0ZSA9IGdldFN0YXRlbWVudFB1cml0eVN0YXRlKG5ldyBTZXQ8c3RyaW5nPigpLCB7IG5vZGU6IHsgdHlwZTogXCJFeHByZXNzaW9uU3RhdGVtZW50XCIgfSBhcyBuZXZlciwgcGhhc2VzOiBbXSB9KTtcclxuICogdm9pZCBzdGF0ZTtcclxuICogYGBgXHJcbiAqL1xyXG5mdW5jdGlvbiBnZXRTdGF0ZW1lbnRQdXJpdHlTdGF0ZShcclxuICBhc3NlcnRSZWZlcmVuY2VkSWRlbnRpZmllcnM6IFNldDxzdHJpbmc+LFxyXG4gIHN0YXRlbWVudDogVGVzdEJsb2NrQW5hbHlzaXNbXCJzdGF0ZW1lbnRzXCJdW251bWJlcl0sXHJcbik6IFN0YXRlbWVudFB1cml0eVN0YXRlIHtcclxuICBjb25zdCBhbGxvd3NBcnJhbmdlID0gc3RhdGVtZW50LnBoYXNlcy5pbmNsdWRlcyhcIkFycmFuZ2VcIik7XHJcbiAgY29uc3QgYWxsb3dzQWN0ID0gc3RhdGVtZW50LnBoYXNlcy5pbmNsdWRlcyhcIkFjdFwiKTtcclxuICBjb25zdCBhbGxvd3NBc3NlcnQgPSBzdGF0ZW1lbnQucGhhc2VzLmluY2x1ZGVzKFwiQXNzZXJ0XCIpO1xyXG4gIGNvbnN0IGNvbnRhaW5zQXNzZXJ0aW9uID0gaGFzQXNzZXJ0aW9uKHN0YXRlbWVudC5ub2RlKTtcclxuICBjb25zdCBjb250YWluc0FzeW5jTG9naWMgPSBoYXNBc3luY0xvZ2ljKHN0YXRlbWVudC5ub2RlKTtcclxuICBjb25zdCBjb250YWluc0F3YWl0ID0gaGFzQXdhaXQoc3RhdGVtZW50Lm5vZGUpO1xyXG4gIGNvbnN0IGNvbnRhaW5zTXV0YXRpb24gPSBoYXNNdXRhdGlvbihzdGF0ZW1lbnQubm9kZSk7XHJcbiAgY29uc3QgaXNNZWFuaW5nZnVsQWN0ID0gaXNNZWFuaW5nZnVsQWN0U3RhdGVtZW50KHN0YXRlbWVudC5ub2RlKTtcclxuICBjb25zdCBpc01lYW5pbmdmdWxBY3RDb250ZW50ID1cclxuICAgIGlzTWVhbmluZ2Z1bEFjdCB8fFxyXG4gICAgaGFzQ2FwdHVyYWJsZUFjdFJlc3VsdChzdGF0ZW1lbnQubm9kZSkgfHxcclxuICAgIGlzQWN0UmVzdWx0QXNzZXJ0ZWQoYXNzZXJ0UmVmZXJlbmNlZElkZW50aWZpZXJzLCBzdGF0ZW1lbnQubm9kZSk7XHJcblxyXG4gIHJldHVybiB7XHJcbiAgICBhbGxvd3NBY3QsXHJcbiAgICBhbGxvd3NBcnJhbmdlLFxyXG4gICAgYWxsb3dzQXNzZXJ0LFxyXG4gICAgY29udGFpbnNBc3NlcnRpb24sXHJcbiAgICBjb250YWluc0FzeW5jTG9naWMsXHJcbiAgICBjb250YWluc0F3YWl0LFxyXG4gICAgY29udGFpbnNNdXRhdGlvbixcclxuICAgIGlzTWVhbmluZ2Z1bEFjdCxcclxuICAgIGlzTWVhbmluZ2Z1bEFjdENvbnRlbnQsXHJcbiAgICBpc1NldHVwTGlrZTogaXNTZXR1cExpa2VTdGF0ZW1lbnQoc3RhdGVtZW50Lm5vZGUpLFxyXG4gICAgaXNWYWxpZEFzc2VydDogaXNWYWxpZEFzc2VydFN0YXRlbWVudChzdGF0ZW1lbnQubm9kZSksXHJcbiAgfTtcclxufVxyXG5cclxuLyoqXHJcbiAqIENoZWNrcyB3aGV0aGVyIHRoZSBhbmFseXplZCB0ZXN0IGJsb2NrIGRlY2xhcmVzIGFsbCBBQUEgc2VjdGlvbiBjb21tZW50cy5cclxuICogQHBhcmFtIGFuYWx5c2lzIFBhcnNlZCB0ZXN0LWJsb2NrIGFuYWx5c2lzLlxyXG4gKiBAcmV0dXJucyBUcnVlIHdoZW4gQXJyYW5nZSwgQWN0LCBhbmQgQXNzZXJ0IGFyZSBhbGwgcHJlc2VudC5cclxuICogQGV4YW1wbGVcclxuICogYGBgdHlwZXNjcmlwdFxyXG4gKiBjb25zdCBjb21wbGV0ZSA9IGhhc0FsbEFhYVNlY3Rpb25zKHsgc2VjdGlvbkNvbW1lbnRzOiBbXSB9IGFzIG5ldmVyKTtcclxuICogdm9pZCBjb21wbGV0ZTtcclxuICogYGBgXHJcbiAqL1xyXG5mdW5jdGlvbiBoYXNBbGxBYWFTZWN0aW9ucyhhbmFseXNpczogVGVzdEJsb2NrQW5hbHlzaXMpOiBib29sZWFuIHtcclxuICByZXR1cm4gW1wiQXJyYW5nZVwiLCBcIkFjdFwiLCBcIkFzc2VydFwiXS5ldmVyeSgocGhhc2UpID0+XHJcbiAgICBhbmFseXNpcy5zZWN0aW9uQ29tbWVudHMuc29tZSgoc2VjdGlvbkNvbW1lbnQpID0+XHJcbiAgICAgIHNlY3Rpb25Db21tZW50LnBoYXNlcy5pbmNsdWRlcyhwaGFzZSBhcyBuZXZlciksXHJcbiAgICApLFxyXG4gICk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBSZXBvcnRzIEFjdC1vbmx5IHBoYXNlIHZpb2xhdGlvbnMgZm9yIG9uZSBzdGF0ZW1lbnQuXHJcbiAqIEBwYXJhbSBjb250ZXh0IEVTTGludCBydWxlIGNvbnRleHQuXHJcbiAqIEBwYXJhbSBzdGF0ZW1lbnQgU3RhdGVtZW50IGVudHJ5IHRvIHJlcG9ydCBhZ2FpbnN0LlxyXG4gKiBAcGFyYW0gcHVyaXR5U3RhdGUgUGhhc2UtcHVyaXR5IHN0YXRlIGZvciB0aGUgc3RhdGVtZW50LlxyXG4gKiBAZXhhbXBsZVxyXG4gKiBgYGB0eXBlc2NyaXB0XHJcbiAqIHJlcG9ydEFjdE9ubHlTdGF0ZW1lbnQoeyByZXBvcnQoKSB7fSB9IGFzIG5ldmVyLCB7IG5vZGU6IHt9IGFzIG5ldmVyLCBwaGFzZXM6IFtdIH0sIHt9IGFzIG5ldmVyKTtcclxuICogYGBgXHJcbiAqL1xyXG5mdW5jdGlvbiByZXBvcnRBY3RPbmx5U3RhdGVtZW50KFxyXG4gIGNvbnRleHQ6IFJ1bGUuUnVsZUNvbnRleHQsXHJcbiAgc3RhdGVtZW50OiBUZXN0QmxvY2tBbmFseXNpc1tcInN0YXRlbWVudHNcIl1bbnVtYmVyXSxcclxuICBwdXJpdHlTdGF0ZTogU3RhdGVtZW50UHVyaXR5U3RhdGUsXHJcbik6IHZvaWQge1xyXG4gIGlmIChwdXJpdHlTdGF0ZS5jb250YWluc0Fzc2VydGlvbiAmJiAhcHVyaXR5U3RhdGUuYWxsb3dzQXNzZXJ0KSB7XHJcbiAgICBjb250ZXh0LnJlcG9ydCh7XHJcbiAgICAgIG1lc3NhZ2VJZDogXCJhc3NlcnRpb25PdXRzaWRlQXNzZXJ0XCIsXHJcbiAgICAgIG5vZGU6IHN0YXRlbWVudC5ub2RlLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBpZiAoXHJcbiAgICBwdXJpdHlTdGF0ZS5hbGxvd3NBc3NlcnQgJiZcclxuICAgIHB1cml0eVN0YXRlLmNvbnRhaW5zQXNzZXJ0aW9uICYmXHJcbiAgICAhcHVyaXR5U3RhdGUuaXNWYWxpZEFzc2VydFxyXG4gICkge1xyXG4gICAgY29udGV4dC5yZXBvcnQoeyBtZXNzYWdlSWQ6IFwibm9uQXNzZXJ0aW9uSW5Bc3NlcnRcIiwgbm9kZTogc3RhdGVtZW50Lm5vZGUgfSk7XHJcbiAgfVxyXG5cclxuICBpZiAocHVyaXR5U3RhdGUuaXNTZXR1cExpa2UgJiYgIXB1cml0eVN0YXRlLmlzTWVhbmluZ2Z1bEFjdENvbnRlbnQpIHtcclxuICAgIGNvbnRleHQucmVwb3J0KHsgbWVzc2FnZUlkOiBcInNldHVwQWZ0ZXJBY3RcIiwgbm9kZTogc3RhdGVtZW50Lm5vZGUgfSk7XHJcbiAgfVxyXG59XHJcblxyXG4vKipcclxuICogUmVwb3J0cyBBcnJhbmdlLW9ubHkgcGhhc2UgdmlvbGF0aW9ucyBmb3Igb25lIHN0YXRlbWVudC5cclxuICogQHBhcmFtIGNvbnRleHQgRVNMaW50IHJ1bGUgY29udGV4dC5cclxuICogQHBhcmFtIHN0YXRlbWVudCBTdGF0ZW1lbnQgZW50cnkgdG8gcmVwb3J0IGFnYWluc3QuXHJcbiAqIEBwYXJhbSBwdXJpdHlTdGF0ZSBQaGFzZS1wdXJpdHkgc3RhdGUgZm9yIHRoZSBzdGF0ZW1lbnQuXHJcbiAqIEBleGFtcGxlXHJcbiAqIGBgYHR5cGVzY3JpcHRcclxuICogcmVwb3J0QXJyYW5nZU9ubHlTdGF0ZW1lbnQoeyByZXBvcnQoKSB7fSB9IGFzIG5ldmVyLCB7IG5vZGU6IHt9IGFzIG5ldmVyLCBwaGFzZXM6IFtdIH0sIHt9IGFzIG5ldmVyKTtcclxuICogYGBgXHJcbiAqL1xyXG5mdW5jdGlvbiByZXBvcnRBcnJhbmdlT25seVN0YXRlbWVudChcclxuICBjb250ZXh0OiBSdWxlLlJ1bGVDb250ZXh0LFxyXG4gIHN0YXRlbWVudDogVGVzdEJsb2NrQW5hbHlzaXNbXCJzdGF0ZW1lbnRzXCJdW251bWJlcl0sXHJcbiAgcHVyaXR5U3RhdGU6IFN0YXRlbWVudFB1cml0eVN0YXRlLFxyXG4pOiB2b2lkIHtcclxuICBpZiAocHVyaXR5U3RhdGUuY29udGFpbnNBc3NlcnRpb24gJiYgIXB1cml0eVN0YXRlLmFsbG93c0Fzc2VydCkge1xyXG4gICAgY29udGV4dC5yZXBvcnQoe1xyXG4gICAgICBtZXNzYWdlSWQ6IFwiYXNzZXJ0aW9uT3V0c2lkZUFzc2VydFwiLFxyXG4gICAgICBub2RlOiBzdGF0ZW1lbnQubm9kZSxcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgaWYgKHB1cml0eVN0YXRlLmNvbnRhaW5zQXdhaXQpIHtcclxuICAgIGNvbnRleHQucmVwb3J0KHsgbWVzc2FnZUlkOiBcImF3YWl0T3V0c2lkZUFjdFwiLCBub2RlOiBzdGF0ZW1lbnQubm9kZSB9KTtcclxuICB9XHJcblxyXG4gIGlmIChwdXJpdHlTdGF0ZS5jb250YWluc0FzeW5jTG9naWMpIHtcclxuICAgIGNvbnRleHQucmVwb3J0KHsgbWVzc2FnZUlkOiBcImFzeW5jSW5BcnJhbmdlXCIsIG5vZGU6IHN0YXRlbWVudC5ub2RlIH0pO1xyXG4gIH1cclxuXHJcbiAgaWYgKHB1cml0eVN0YXRlLmlzTWVhbmluZ2Z1bEFjdCkge1xyXG4gICAgY29udGV4dC5yZXBvcnQoeyBtZXNzYWdlSWQ6IFwiYWN0aW9uSW5BcnJhbmdlXCIsIG5vZGU6IHN0YXRlbWVudC5ub2RlIH0pO1xyXG4gIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIFJlcG9ydHMgQXNzZXJ0LW9ubHkgcGhhc2UgdmlvbGF0aW9ucyBmb3Igb25lIHN0YXRlbWVudC5cclxuICogQHBhcmFtIGNvbnRleHQgRVNMaW50IHJ1bGUgY29udGV4dC5cclxuICogQHBhcmFtIHN0YXRlbWVudCBTdGF0ZW1lbnQgZW50cnkgdG8gcmVwb3J0IGFnYWluc3QuXHJcbiAqIEBwYXJhbSBwdXJpdHlTdGF0ZSBQaGFzZS1wdXJpdHkgc3RhdGUgZm9yIHRoZSBzdGF0ZW1lbnQuXHJcbiAqIEBleGFtcGxlXHJcbiAqIGBgYHR5cGVzY3JpcHRcclxuICogcmVwb3J0QXNzZXJ0T25seVN0YXRlbWVudCh7IHJlcG9ydCgpIHt9IH0gYXMgbmV2ZXIsIHsgbm9kZToge30gYXMgbmV2ZXIsIHBoYXNlczogW10gfSwge30gYXMgbmV2ZXIpO1xyXG4gKiBgYGBcclxuICovXHJcbmZ1bmN0aW9uIHJlcG9ydEFzc2VydE9ubHlTdGF0ZW1lbnQoXHJcbiAgY29udGV4dDogUnVsZS5SdWxlQ29udGV4dCxcclxuICBzdGF0ZW1lbnQ6IFRlc3RCbG9ja0FuYWx5c2lzW1wic3RhdGVtZW50c1wiXVtudW1iZXJdLFxyXG4gIHB1cml0eVN0YXRlOiBTdGF0ZW1lbnRQdXJpdHlTdGF0ZSxcclxuKTogdm9pZCB7XHJcbiAgaWYgKHB1cml0eVN0YXRlLmNvbnRhaW5zQXdhaXQpIHtcclxuICAgIGNvbnRleHQucmVwb3J0KHsgbWVzc2FnZUlkOiBcImF3YWl0T3V0c2lkZUFjdFwiLCBub2RlOiBzdGF0ZW1lbnQubm9kZSB9KTtcclxuICB9XHJcblxyXG4gIGlmIChwdXJpdHlTdGF0ZS5jb250YWluc011dGF0aW9uKSB7XHJcbiAgICBjb250ZXh0LnJlcG9ydCh7IG1lc3NhZ2VJZDogXCJtdXRhdGlvbkFmdGVyQWN0XCIsIG5vZGU6IHN0YXRlbWVudC5ub2RlIH0pO1xyXG4gICAgcmV0dXJuO1xyXG4gIH1cclxuXHJcbiAgaWYgKCFwdXJpdHlTdGF0ZS5pc1ZhbGlkQXNzZXJ0KSB7XHJcbiAgICBjb250ZXh0LnJlcG9ydCh7IG1lc3NhZ2VJZDogXCJub25Bc3NlcnRpb25JbkFzc2VydFwiLCBub2RlOiBzdGF0ZW1lbnQubm9kZSB9KTtcclxuICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBSZXBvcnRzIGFsbCBlbmZvcmNlLWFhYS1waGFzZS1wdXJpdHkgdmlvbGF0aW9ucyBmb3Igb25lIHRlc3QgYmxvY2suXHJcbiAqIEBwYXJhbSBjb250ZXh0IEVTTGludCBydWxlIGNvbnRleHQuXHJcbiAqIEBwYXJhbSBhbmFseXNpcyBQYXJzZWQgdGVzdC1ibG9jayBhbmFseXNpcy5cclxuICogQGV4YW1wbGVcclxuICogYGBgdHlwZXNjcmlwdFxyXG4gKiByZXBvcnRQaGFzZVB1cml0eVZpb2xhdGlvbnMoeyByZXBvcnQoKSB7fSB9IGFzIG5ldmVyLCB7IHNlY3Rpb25Db21tZW50czogW10sIHN0YXRlbWVudHM6IFtdIH0gYXMgbmV2ZXIpO1xyXG4gKiBgYGBcclxuICovXHJcbmZ1bmN0aW9uIHJlcG9ydFBoYXNlUHVyaXR5VmlvbGF0aW9ucyhcclxuICBjb250ZXh0OiBSdWxlLlJ1bGVDb250ZXh0LFxyXG4gIGFuYWx5c2lzOiBUZXN0QmxvY2tBbmFseXNpcyxcclxuKTogdm9pZCB7XHJcbiAgaWYgKCFoYXNBbGxBYWFTZWN0aW9ucyhhbmFseXNpcykpIHtcclxuICAgIHJldHVybjtcclxuICB9XHJcblxyXG4gIGxldCBoYXNNZWFuaW5nZnVsQWN0ID0gZmFsc2U7XHJcbiAgY29uc3QgYXNzZXJ0UmVmZXJlbmNlZElkZW50aWZpZXJzID0gZ2V0QXNzZXJ0UmVmZXJlbmNlZElkZW50aWZpZXJzKGFuYWx5c2lzKTtcclxuXHJcbiAgZm9yIChjb25zdCBzdGF0ZW1lbnQgb2YgYW5hbHlzaXMuc3RhdGVtZW50cykge1xyXG4gICAgY29uc3QgcHVyaXR5U3RhdGUgPSBnZXRTdGF0ZW1lbnRQdXJpdHlTdGF0ZShcclxuICAgICAgYXNzZXJ0UmVmZXJlbmNlZElkZW50aWZpZXJzLFxyXG4gICAgICBzdGF0ZW1lbnQsXHJcbiAgICApO1xyXG5cclxuICAgIGhhc01lYW5pbmdmdWxBY3QgfHw9XHJcbiAgICAgIHB1cml0eVN0YXRlLmFsbG93c0FjdCAmJiBwdXJpdHlTdGF0ZS5pc01lYW5pbmdmdWxBY3RDb250ZW50O1xyXG4gICAgcmVwb3J0U3RhdGVtZW50VmlvbGF0aW9ucyhjb250ZXh0LCBzdGF0ZW1lbnQsIHB1cml0eVN0YXRlKTtcclxuICB9XHJcblxyXG4gIGlmICghaGFzTWVhbmluZ2Z1bEFjdCkge1xyXG4gICAgY29udGV4dC5yZXBvcnQoe1xyXG4gICAgICBtZXNzYWdlSWQ6IFwibWlzc2luZ01lYW5pbmdmdWxBY3RcIixcclxuICAgICAgbm9kZTogYW5hbHlzaXMuY2FsbEV4cHJlc3Npb24sXHJcbiAgICB9KTtcclxuICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBSZXBvcnRzIGFueSBwaGFzZS1wdXJpdHkgdmlvbGF0aW9ucyBmb3Igb25lIHN0YXRlbWVudC5cclxuICogQHBhcmFtIGNvbnRleHQgRVNMaW50IHJ1bGUgY29udGV4dC5cclxuICogQHBhcmFtIHN0YXRlbWVudCBTdGF0ZW1lbnQgZW50cnkgdG8gcmVwb3J0IGFnYWluc3QuXHJcbiAqIEBwYXJhbSBwdXJpdHlTdGF0ZSBQaGFzZS1wdXJpdHkgc3RhdGUgZm9yIHRoZSBzdGF0ZW1lbnQuXHJcbiAqIEBleGFtcGxlXHJcbiAqIGBgYHR5cGVzY3JpcHRcclxuICogcmVwb3J0U3RhdGVtZW50VmlvbGF0aW9ucyh7IHJlcG9ydCgpIHt9IH0gYXMgbmV2ZXIsIHsgbm9kZToge30gYXMgbmV2ZXIsIHBoYXNlczogW10gfSwge30gYXMgbmV2ZXIpO1xyXG4gKiBgYGBcclxuICovXHJcbmZ1bmN0aW9uIHJlcG9ydFN0YXRlbWVudFZpb2xhdGlvbnMoXHJcbiAgY29udGV4dDogUnVsZS5SdWxlQ29udGV4dCxcclxuICBzdGF0ZW1lbnQ6IFRlc3RCbG9ja0FuYWx5c2lzW1wic3RhdGVtZW50c1wiXVtudW1iZXJdLFxyXG4gIHB1cml0eVN0YXRlOiBTdGF0ZW1lbnRQdXJpdHlTdGF0ZSxcclxuKTogdm9pZCB7XHJcbiAgaWYgKHB1cml0eVN0YXRlLmFsbG93c0FycmFuZ2UgJiYgIXB1cml0eVN0YXRlLmFsbG93c0FjdCkge1xyXG4gICAgcmVwb3J0QXJyYW5nZU9ubHlTdGF0ZW1lbnQoY29udGV4dCwgc3RhdGVtZW50LCBwdXJpdHlTdGF0ZSk7XHJcbiAgICByZXR1cm47XHJcbiAgfVxyXG5cclxuICBpZiAocHVyaXR5U3RhdGUuYWxsb3dzQWN0ICYmICFwdXJpdHlTdGF0ZS5hbGxvd3NBcnJhbmdlKSB7XHJcbiAgICByZXBvcnRBY3RPbmx5U3RhdGVtZW50KGNvbnRleHQsIHN0YXRlbWVudCwgcHVyaXR5U3RhdGUpO1xyXG4gICAgcmV0dXJuO1xyXG4gIH1cclxuXHJcbiAgaWYgKHB1cml0eVN0YXRlLmFsbG93c0Fzc2VydCAmJiAhcHVyaXR5U3RhdGUuYWxsb3dzQWN0KSB7XHJcbiAgICByZXBvcnRBc3NlcnRPbmx5U3RhdGVtZW50KGNvbnRleHQsIHN0YXRlbWVudCwgcHVyaXR5U3RhdGUpO1xyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IHsgcmVwb3J0UGhhc2VQdXJpdHlWaW9sYXRpb25zIH07XHJcbiJdfQ==
|