@codeperfect/eslint-plugin 2.0.0 → 2.2.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 +3 -2
- package/dist/.tsbuildinfo +1 -1
- package/dist/application/custom-rules.d.ts +8 -8
- package/dist/application/custom-rules.js +14 -14
- package/dist/application/index.d.ts +1 -1
- package/dist/application/index.d.ts.map +1 -1
- package/dist/application/index.js +2 -2
- package/dist/codeperfect-eslint-plugin-1.0.0.tgz +0 -0
- package/dist/domain/architecture/consistent-barrel-files/barrel-file-utilities.d.ts +3 -4
- package/dist/domain/architecture/consistent-barrel-files/barrel-file-utilities.d.ts.map +1 -1
- package/dist/domain/architecture/consistent-barrel-files/barrel-file-utilities.js +5 -3
- package/dist/domain/architecture/consistent-barrel-files/consistent-barrel-files-listeners.d.ts.map +1 -1
- package/dist/domain/architecture/consistent-barrel-files/consistent-barrel-files-listeners.js +17 -7
- package/dist/domain/architecture/consistent-barrel-files/exports-only-rule.d.ts.map +1 -1
- package/dist/domain/architecture/consistent-barrel-files/exports-only-rule.js +36 -4
- package/dist/domain/architecture/consistent-barrel-files/index.d.ts +2 -0
- package/dist/domain/architecture/consistent-barrel-files/index.d.ts.map +1 -1
- package/dist/domain/architecture/consistent-barrel-files/index.js +3 -1
- package/dist/domain/architecture/consistent-barrel-files/no-import-export-aliases-rule.d.ts +5 -0
- package/dist/domain/architecture/consistent-barrel-files/no-import-export-aliases-rule.d.ts.map +1 -0
- package/dist/domain/architecture/consistent-barrel-files/no-import-export-aliases-rule.js +247 -0
- package/dist/domain/architecture/consistent-barrel-files/no-import-export-extensions-rule.d.ts +5 -0
- package/dist/domain/architecture/consistent-barrel-files/no-import-export-extensions-rule.d.ts.map +1 -0
- package/dist/domain/architecture/consistent-barrel-files/no-import-export-extensions-rule.js +136 -0
- package/dist/domain/architecture/consistent-barrel-files/no-reexports-outside-barrels-rule.d.ts.map +1 -1
- package/dist/domain/architecture/consistent-barrel-files/no-reexports-outside-barrels-rule.js +8 -3
- package/dist/domain/architecture/consistent-barrel-files/rule.d.ts.map +1 -1
- package/dist/domain/architecture/consistent-barrel-files/rule.js +12 -5
- package/dist/domain/architecture/index.d.ts +2 -1
- package/dist/domain/architecture/index.d.ts.map +1 -1
- package/dist/domain/architecture/index.js +3 -2
- package/dist/domain/architecture/no-unused-exports/index.d.ts +3 -0
- package/dist/domain/architecture/no-unused-exports/index.d.ts.map +1 -0
- package/dist/domain/architecture/no-unused-exports/index.js +2 -0
- package/dist/domain/architecture/no-unused-exports/no-unused-exports-options.d.ts +50 -0
- package/dist/domain/architecture/no-unused-exports/no-unused-exports-options.d.ts.map +1 -0
- package/dist/domain/architecture/no-unused-exports/no-unused-exports-options.js +141 -0
- package/dist/domain/architecture/no-unused-exports/no-unused-exports-utilities.d.ts +49 -0
- package/dist/domain/architecture/no-unused-exports/no-unused-exports-utilities.d.ts.map +1 -0
- package/dist/domain/architecture/no-unused-exports/no-unused-exports-utilities.js +608 -0
- package/dist/domain/architecture/no-unused-exports/rule.d.ts +5 -0
- package/dist/domain/architecture/no-unused-exports/rule.d.ts.map +1 -0
- package/dist/domain/architecture/no-unused-exports/rule.js +82 -0
- package/dist/domain/architecture/no-unused-exports/types.d.ts +32 -0
- package/dist/domain/architecture/no-unused-exports/types.d.ts.map +1 -0
- package/dist/domain/architecture/no-unused-exports/types.js +2 -0
- package/dist/domain/core/no-multiple-declarators/rule.d.ts.map +1 -1
- package/dist/domain/core/no-multiple-declarators/rule.js +58 -6
- package/dist/domain/core/no-multiple-declarators/types.d.ts +3 -1
- package/dist/domain/core/no-multiple-declarators/types.d.ts.map +1 -1
- package/dist/domain/core/no-multiple-declarators/types.js +5 -2
- package/dist/domain/core/prefer-interface-types/rule.d.ts.map +1 -1
- package/dist/domain/core/prefer-interface-types/rule.js +94 -23
- package/dist/domain/custom-rule-documentation.d.ts +3 -14
- package/dist/domain/custom-rule-documentation.d.ts.map +1 -1
- package/dist/domain/custom-rule-documentation.js +3 -2
- package/dist/domain/docs/no-interface-member-docs/comment-utilities.d.ts.map +1 -1
- package/dist/domain/docs/no-interface-member-docs/comment-utilities.js +11 -2
- package/dist/domain/docs/no-interface-member-docs/parameter-tags.d.ts.map +1 -1
- package/dist/domain/docs/no-interface-member-docs/parameter-tags.js +1 -1
- package/dist/domain/docs/no-interface-member-docs/parameter-utilities.js +1 -1
- package/dist/domain/docs/no-interface-member-docs/rule.d.ts.map +1 -1
- package/dist/domain/docs/no-interface-member-docs/rule.js +12 -4
- package/dist/domain/docs/require-example-language/examples.d.ts +4 -15
- package/dist/domain/docs/require-example-language/examples.d.ts.map +1 -1
- package/dist/domain/docs/require-example-language/examples.js +119 -26
- package/dist/domain/docs/require-example-language/fixes.d.ts +1 -21
- package/dist/domain/docs/require-example-language/fixes.d.ts.map +1 -1
- package/dist/domain/docs/require-example-language/fixes.js +5 -2
- package/dist/domain/docs/require-example-language/reporting.d.ts +2 -38
- package/dist/domain/docs/require-example-language/reporting.d.ts.map +1 -1
- package/dist/domain/docs/require-example-language/reporting.js +2 -2
- package/dist/domain/docs/require-example-language/rule.d.ts.map +1 -1
- package/dist/domain/docs/require-example-language/rule.js +7 -3
- package/dist/domain/docs/require-example-language/types.d.ts +1 -1
- package/dist/domain/docs/require-example-language/types.d.ts.map +1 -1
- package/dist/domain/docs/require-example-language/types.js +1 -1
- package/dist/domain/docs/single-line-jsdoc/rule.d.ts +1 -2
- package/dist/domain/docs/single-line-jsdoc/rule.d.ts.map +1 -1
- package/dist/domain/docs/single-line-jsdoc/rule.js +18 -13
- package/dist/domain/index.d.ts +2 -3
- package/dist/domain/index.d.ts.map +1 -1
- package/dist/domain/index.js +3 -4
- package/dist/domain/testing/aaa/analyzer.analysis.d.ts +2 -78
- package/dist/domain/testing/aaa/analyzer.analysis.d.ts.map +1 -1
- package/dist/domain/testing/aaa/analyzer.analysis.helpers.d.ts +121 -3
- package/dist/domain/testing/aaa/analyzer.analysis.helpers.d.ts.map +1 -1
- package/dist/domain/testing/aaa/analyzer.analysis.helpers.js +199 -4
- package/dist/domain/testing/aaa/analyzer.analysis.js +30 -188
- package/dist/domain/testing/aaa/analyzer.assertions.d.ts +1 -92
- package/dist/domain/testing/aaa/analyzer.assertions.d.ts.map +1 -1
- package/dist/domain/testing/aaa/analyzer.assertions.helpers.d.ts +93 -0
- package/dist/domain/testing/aaa/analyzer.assertions.helpers.d.ts.map +1 -0
- package/dist/domain/testing/aaa/analyzer.assertions.helpers.js +184 -0
- package/dist/domain/testing/aaa/analyzer.assertions.js +5 -283
- package/dist/domain/testing/aaa/analyzer.assertions.operands.d.ts +62 -0
- package/dist/domain/testing/aaa/analyzer.assertions.operands.d.ts.map +1 -0
- package/dist/domain/testing/aaa/analyzer.assertions.operands.js +106 -0
- package/dist/domain/testing/aaa/analyzer.classification.d.ts +1 -74
- package/dist/domain/testing/aaa/analyzer.classification.d.ts.map +1 -1
- package/dist/domain/testing/aaa/analyzer.classification.helpers.d.ts +75 -0
- package/dist/domain/testing/aaa/analyzer.classification.helpers.d.ts.map +1 -0
- package/dist/domain/testing/aaa/analyzer.classification.helpers.js +202 -0
- package/dist/domain/testing/aaa/analyzer.classification.js +5 -201
- package/dist/domain/testing/aaa/analyzer.classification.traversal.d.ts +13 -0
- package/dist/domain/testing/aaa/analyzer.classification.traversal.d.ts.map +1 -0
- package/dist/domain/testing/aaa/analyzer.classification.traversal.js +32 -0
- package/dist/domain/testing/aaa/analyzer.super.d.ts +6 -13
- package/dist/domain/testing/aaa/analyzer.super.d.ts.map +1 -1
- package/dist/domain/testing/aaa/analyzer.super.helpers.d.ts +14 -0
- package/dist/domain/testing/aaa/analyzer.super.helpers.d.ts.map +1 -0
- package/dist/domain/testing/aaa/analyzer.super.helpers.js +64 -0
- package/dist/domain/testing/aaa/analyzer.super.js +29 -61
- package/dist/domain/testing/aaa/index.d.ts +1 -2
- package/dist/domain/testing/aaa/index.d.ts.map +1 -1
- package/dist/domain/testing/aaa/index.js +2 -2
- package/dist/domain/testing/aaa/types.d.ts +1 -1
- package/dist/domain/testing/aaa/types.d.ts.map +1 -1
- package/dist/domain/testing/aaa/types.js +1 -1
- package/dist/domain/testing/assert-actual-expected-names/rule.d.ts.map +1 -1
- package/dist/domain/testing/assert-actual-expected-names/rule.js +33 -5
- package/dist/domain/testing/enforce-aaa-phase-purity/index.d.ts +2 -1
- package/dist/domain/testing/enforce-aaa-phase-purity/index.d.ts.map +1 -1
- package/dist/domain/testing/enforce-aaa-phase-purity/index.js +3 -2
- package/dist/domain/testing/enforce-aaa-phase-purity/phase-purity-identifiers.d.ts +1 -1
- package/dist/domain/testing/enforce-aaa-phase-purity/phase-purity-identifiers.d.ts.map +1 -1
- package/dist/domain/testing/enforce-aaa-phase-purity/phase-purity-identifiers.js +1 -1
- package/dist/domain/testing/enforce-aaa-phase-purity/phase-purity-reporting.d.ts +1 -1
- package/dist/domain/testing/enforce-aaa-phase-purity/phase-purity-reporting.d.ts.map +1 -1
- package/dist/domain/testing/enforce-aaa-phase-purity/phase-purity-reporting.js +78 -16
- package/dist/domain/testing/{require-aaa-sections → enforce-aaa-structure}/missing-section-fixes.d.ts +1 -1
- package/dist/domain/testing/enforce-aaa-structure/missing-section-fixes.d.ts.map +1 -0
- package/dist/domain/testing/enforce-aaa-structure/missing-section-fixes.js +150 -0
- package/dist/domain/testing/enforce-aaa-structure/rule.d.ts.map +1 -1
- package/dist/domain/testing/enforce-aaa-structure/rule.js +165 -3
- package/dist/domain/testing/index.d.ts +0 -3
- package/dist/domain/testing/index.d.ts.map +1 -1
- package/dist/domain/testing/index.js +1 -4
- package/dist/domain/testing/prefer-vi-mocked-import/fix-import-statements.d.ts +1 -15
- package/dist/domain/testing/prefer-vi-mocked-import/fix-import-statements.d.ts.map +1 -1
- package/dist/domain/testing/prefer-vi-mocked-import/fix-import-statements.js +2 -71
- package/dist/domain/testing/prefer-vi-mocked-import/fix-imports.d.ts.map +1 -1
- package/dist/domain/testing/prefer-vi-mocked-import/fix-imports.js +4 -2
- package/dist/domain/testing/prefer-vi-mocked-import/fix.d.ts +1 -13
- package/dist/domain/testing/prefer-vi-mocked-import/fix.d.ts.map +1 -1
- package/dist/domain/testing/prefer-vi-mocked-import/fix.js +3 -21
- package/dist/domain/testing/prefer-vi-mocked-import/match-bindings.d.ts.map +1 -1
- package/dist/domain/testing/prefer-vi-mocked-import/match-bindings.js +2 -1
- package/dist/domain/testing/prefer-vi-mocked-import/match-declarations.d.ts.map +1 -1
- package/dist/domain/testing/prefer-vi-mocked-import/match-declarations.js +1 -1
- package/dist/domain/testing/prefer-vi-mocked-import/match-rewrites.js +6 -6
- package/dist/domain/testing/prefer-vi-mocked-import/match.d.ts +1 -12
- package/dist/domain/testing/prefer-vi-mocked-import/match.d.ts.map +1 -1
- package/dist/domain/testing/prefer-vi-mocked-import/match.js +149 -15
- package/dist/domain/testing/prefer-vi-mocked-import/rule.d.ts.map +1 -1
- package/dist/domain/testing/prefer-vi-mocked-import/rule.js +6 -3
- package/dist/domain/testing/require-act-result-capture/rule.d.ts.map +1 -1
- package/dist/domain/testing/require-act-result-capture/rule.js +42 -10
- package/dist/domain/testing/require-test-companion/index.d.ts +0 -1
- package/dist/domain/testing/require-test-companion/index.d.ts.map +1 -1
- package/dist/domain/testing/require-test-companion/index.js +1 -2
- package/dist/domain/testing/require-test-companion/require-test-companion-listeners.d.ts +2 -1
- package/dist/domain/testing/require-test-companion/require-test-companion-listeners.d.ts.map +1 -1
- package/dist/domain/testing/require-test-companion/require-test-companion-listeners.js +13 -58
- package/dist/domain/testing/require-test-companion/require-test-companion-options.d.ts +2 -1
- package/dist/domain/testing/require-test-companion/require-test-companion-options.d.ts.map +1 -1
- package/dist/domain/testing/require-test-companion/require-test-companion-options.js +6 -5
- package/dist/domain/testing/require-test-companion/rule.d.ts.map +1 -1
- package/dist/domain/testing/require-test-companion/rule.js +34 -9
- package/dist/domain/testing/single-act-statement/rule.d.ts.map +1 -1
- package/dist/domain/testing/single-act-statement/rule.js +11 -5
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -2
- package/dist/infrastructure/codeperfect-plugin.d.ts +6 -6
- package/dist/infrastructure/codeperfect-plugin.js +5 -5
- package/dist/infrastructure/presets.d.ts.map +1 -1
- package/dist/infrastructure/presets.js +23 -7
- package/package.json +37 -38
- package/dist/domain/architecture/consistent-barrel-files/exports-only-rule-test-utilities.d.ts +0 -41
- package/dist/domain/architecture/consistent-barrel-files/exports-only-rule-test-utilities.d.ts.map +0 -1
- package/dist/domain/architecture/consistent-barrel-files/exports-only-rule-test-utilities.js +0 -87
- package/dist/domain/architecture/consistent-barrel-files/no-reexports-outside-barrels-test-utilities.d.ts +0 -40
- package/dist/domain/architecture/consistent-barrel-files/no-reexports-outside-barrels-test-utilities.d.ts.map +0 -1
- package/dist/domain/architecture/consistent-barrel-files/no-reexports-outside-barrels-test-utilities.js +0 -91
- package/dist/domain/architecture/consistent-barrel-files/rule.repeat-runs.d.ts +0 -4
- package/dist/domain/architecture/consistent-barrel-files/rule.repeat-runs.d.ts.map +0 -1
- package/dist/domain/architecture/consistent-barrel-files/rule.repeat-runs.js +0 -4
- package/dist/domain/architecture/consistent-barrel-files/test-helpers.d.ts +0 -141
- package/dist/domain/architecture/consistent-barrel-files/test-helpers.d.ts.map +0 -1
- package/dist/domain/architecture/consistent-barrel-files/test-helpers.file-writers.d.ts +0 -20
- package/dist/domain/architecture/consistent-barrel-files/test-helpers.file-writers.d.ts.map +0 -1
- package/dist/domain/architecture/consistent-barrel-files/test-helpers.file-writers.js +0 -25
- package/dist/domain/architecture/consistent-barrel-files/test-helpers.js +0 -235
- package/dist/domain/core/no-multiple-declarators/rule-test-helpers.d.ts +0 -101
- package/dist/domain/core/no-multiple-declarators/rule-test-helpers.d.ts.map +0 -1
- package/dist/domain/core/no-multiple-declarators/rule-test-helpers.js +0 -108
- package/dist/domain/core/no-multiple-declarators/rule.fixes.d.ts +0 -35
- package/dist/domain/core/no-multiple-declarators/rule.fixes.d.ts.map +0 -1
- package/dist/domain/core/no-multiple-declarators/rule.fixes.js +0 -95
- package/dist/domain/core/no-multiple-declarators/rule.guardrails.d.ts +0 -4
- package/dist/domain/core/no-multiple-declarators/rule.guardrails.d.ts.map +0 -1
- package/dist/domain/core/no-multiple-declarators/rule.guardrails.js +0 -4
- package/dist/domain/core/no-multiple-declarators/rule.mocked-types.d.ts +0 -4
- package/dist/domain/core/no-multiple-declarators/rule.mocked-types.d.ts.map +0 -1
- package/dist/domain/core/no-multiple-declarators/rule.mocked-types.js +0 -4
- package/dist/domain/core/prefer-interface-types/test-helpers.d.ts +0 -110
- package/dist/domain/core/prefer-interface-types/test-helpers.d.ts.map +0 -1
- package/dist/domain/core/prefer-interface-types/test-helpers.js +0 -116
- package/dist/domain/docs/no-interface-member-docs/comment-utilities-test-helpers.d.ts +0 -89
- package/dist/domain/docs/no-interface-member-docs/comment-utilities-test-helpers.d.ts.map +0 -1
- package/dist/domain/docs/no-interface-member-docs/comment-utilities-test-helpers.js +0 -129
- package/dist/domain/docs/no-interface-member-docs/test-helpers.d.ts +0 -103
- package/dist/domain/docs/no-interface-member-docs/test-helpers.d.ts.map +0 -1
- package/dist/domain/docs/no-interface-member-docs/test-helpers.js +0 -157
- package/dist/domain/docs/require-example-language/create-fixer.d.ts +0 -5
- package/dist/domain/docs/require-example-language/create-fixer.d.ts.map +0 -1
- package/dist/domain/docs/require-example-language/create-fixer.js +0 -5
- package/dist/domain/docs/single-line-jsdoc/rule.edge-cases.d.ts +0 -4
- package/dist/domain/docs/single-line-jsdoc/rule.edge-cases.d.ts.map +0 -1
- package/dist/domain/docs/single-line-jsdoc/rule.edge-cases.js +0 -5
- package/dist/domain/docs/single-line-jsdoc/rule.node-lookups.d.ts +0 -4
- package/dist/domain/docs/single-line-jsdoc/rule.node-lookups.d.ts.map +0 -1
- package/dist/domain/docs/single-line-jsdoc/rule.node-lookups.js +0 -5
- package/dist/domain/docs/test-helpers.d.ts +0 -50
- package/dist/domain/docs/test-helpers.d.ts.map +0 -1
- package/dist/domain/docs/test-helpers.js +0 -107
- package/dist/domain/testing/aaa/analyzer.classification.member-patterns.d.ts +0 -9
- package/dist/domain/testing/aaa/analyzer.classification.member-patterns.d.ts.map +0 -1
- package/dist/domain/testing/aaa/analyzer.classification.member-patterns.js +0 -10
- package/dist/domain/testing/aaa/analyzer.d.ts +0 -46
- package/dist/domain/testing/aaa/analyzer.d.ts.map +0 -1
- package/dist/domain/testing/aaa/analyzer.js +0 -59
- package/dist/domain/testing/enforce-aaa-phase-purity/phase-purity-reporting.behavior.d.ts +0 -4
- package/dist/domain/testing/enforce-aaa-phase-purity/phase-purity-reporting.behavior.d.ts.map +0 -1
- package/dist/domain/testing/enforce-aaa-phase-purity/phase-purity-reporting.behavior.js +0 -4
- package/dist/domain/testing/enforce-aaa-phase-purity/rule-test-helpers.d.ts +0 -42
- package/dist/domain/testing/enforce-aaa-phase-purity/rule-test-helpers.d.ts.map +0 -1
- package/dist/domain/testing/enforce-aaa-phase-purity/rule-test-helpers.js +0 -188
- package/dist/domain/testing/enforce-aaa-phase-purity/rule.d.ts +0 -5
- package/dist/domain/testing/enforce-aaa-phase-purity/rule.d.ts.map +0 -1
- package/dist/domain/testing/enforce-aaa-phase-purity/rule.js +0 -34
- package/dist/domain/testing/prefer-vi-mocked-import/rule-test-helpers.d.ts +0 -20
- package/dist/domain/testing/prefer-vi-mocked-import/rule-test-helpers.d.ts.map +0 -1
- package/dist/domain/testing/prefer-vi-mocked-import/rule-test-helpers.js +0 -39
- package/dist/domain/testing/prefer-vitest-incremental-casts/ast-helpers.d.ts +0 -86
- package/dist/domain/testing/prefer-vitest-incremental-casts/ast-helpers.d.ts.map +0 -1
- package/dist/domain/testing/prefer-vitest-incremental-casts/ast-helpers.js +0 -150
- package/dist/domain/testing/prefer-vitest-incremental-casts/index.d.ts +0 -2
- package/dist/domain/testing/prefer-vitest-incremental-casts/index.d.ts.map +0 -1
- package/dist/domain/testing/prefer-vitest-incremental-casts/index.js +0 -2
- package/dist/domain/testing/prefer-vitest-incremental-casts/match-input.d.ts +0 -14
- package/dist/domain/testing/prefer-vitest-incremental-casts/match-input.d.ts.map +0 -1
- package/dist/domain/testing/prefer-vitest-incremental-casts/match-input.js +0 -81
- package/dist/domain/testing/prefer-vitest-incremental-casts/match.d.ts +0 -13
- package/dist/domain/testing/prefer-vitest-incremental-casts/match.d.ts.map +0 -1
- package/dist/domain/testing/prefer-vitest-incremental-casts/match.js +0 -189
- package/dist/domain/testing/prefer-vitest-incremental-casts/replacement-helpers.d.ts +0 -25
- package/dist/domain/testing/prefer-vitest-incremental-casts/replacement-helpers.d.ts.map +0 -1
- package/dist/domain/testing/prefer-vitest-incremental-casts/replacement-helpers.js +0 -92
- package/dist/domain/testing/prefer-vitest-incremental-casts/rule-test-helpers.d.ts +0 -32
- package/dist/domain/testing/prefer-vitest-incremental-casts/rule-test-helpers.d.ts.map +0 -1
- package/dist/domain/testing/prefer-vitest-incremental-casts/rule-test-helpers.js +0 -164
- package/dist/domain/testing/prefer-vitest-incremental-casts/rule.d.ts +0 -5
- package/dist/domain/testing/prefer-vitest-incremental-casts/rule.d.ts.map +0 -1
- package/dist/domain/testing/prefer-vitest-incremental-casts/rule.guardrails.d.ts +0 -4
- package/dist/domain/testing/prefer-vitest-incremental-casts/rule.guardrails.d.ts.map +0 -1
- package/dist/domain/testing/prefer-vitest-incremental-casts/rule.guardrails.js +0 -4
- package/dist/domain/testing/prefer-vitest-incremental-casts/rule.input-shapes.d.ts +0 -4
- package/dist/domain/testing/prefer-vitest-incremental-casts/rule.input-shapes.d.ts.map +0 -1
- package/dist/domain/testing/prefer-vitest-incremental-casts/rule.input-shapes.js +0 -4
- package/dist/domain/testing/prefer-vitest-incremental-casts/rule.js +0 -62
- package/dist/domain/testing/prefer-vitest-incremental-casts/rule.signature-fallback.d.ts +0 -4
- package/dist/domain/testing/prefer-vitest-incremental-casts/rule.signature-fallback.d.ts.map +0 -1
- package/dist/domain/testing/prefer-vitest-incremental-casts/rule.signature-fallback.js +0 -4
- package/dist/domain/testing/prefer-vitest-incremental-casts/type-helpers.d.ts +0 -24
- package/dist/domain/testing/prefer-vitest-incremental-casts/type-helpers.d.ts.map +0 -1
- package/dist/domain/testing/prefer-vitest-incremental-casts/type-helpers.js +0 -113
- package/dist/domain/testing/prefer-vitest-incremental-casts/type-shape-helpers.d.ts +0 -36
- package/dist/domain/testing/prefer-vitest-incremental-casts/type-shape-helpers.d.ts.map +0 -1
- package/dist/domain/testing/prefer-vitest-incremental-casts/type-shape-helpers.js +0 -138
- package/dist/domain/testing/prefer-vitest-incremental-casts/types.d.ts +0 -203
- package/dist/domain/testing/prefer-vitest-incremental-casts/types.d.ts.map +0 -1
- package/dist/domain/testing/prefer-vitest-incremental-casts/types.js +0 -2
- package/dist/domain/testing/require-aaa-sections/index.d.ts +0 -2
- package/dist/domain/testing/require-aaa-sections/index.d.ts.map +0 -1
- package/dist/domain/testing/require-aaa-sections/index.js +0 -2
- package/dist/domain/testing/require-aaa-sections/missing-section-fixes.d.ts.map +0 -1
- package/dist/domain/testing/require-aaa-sections/missing-section-fixes.js +0 -150
- package/dist/domain/testing/require-aaa-sections/rule.d.ts +0 -5
- package/dist/domain/testing/require-aaa-sections/rule.d.ts.map +0 -1
- package/dist/domain/testing/require-aaa-sections/rule.js +0 -129
- package/dist/domain/testing/require-aaa-sections/rule.reporting.d.ts +0 -104
- package/dist/domain/testing/require-aaa-sections/rule.reporting.d.ts.map +0 -1
- package/dist/domain/testing/require-aaa-sections/rule.reporting.js +0 -217
- package/dist/domain/testing/require-test-companion/require-test-companion-test-helpers.d.ts +0 -51
- package/dist/domain/testing/require-test-companion/require-test-companion-test-helpers.d.ts.map +0 -1
- package/dist/domain/testing/require-test-companion/require-test-companion-test-helpers.js +0 -184
- package/dist/domain/testing/require-test-companion/require-test-companion-utilities.d.ts +0 -28
- package/dist/domain/testing/require-test-companion/require-test-companion-utilities.d.ts.map +0 -1
- package/dist/domain/testing/require-test-companion/require-test-companion-utilities.js +0 -26
|
@@ -1,62 +0,0 @@
|
|
|
1
|
-
import { ESLintUtils } from "@typescript-eslint/utils";
|
|
2
|
-
import { createRuleDocumentation } from "../../custom-rule-documentation.js";
|
|
3
|
-
import { collectMatch } from "./match.js";
|
|
4
|
-
/**
|
|
5
|
-
* Resolves TypeScript parser services when the rule runs on a typed file.
|
|
6
|
-
* @param context ESLint rule context.
|
|
7
|
-
* @returns Parser services when TypeScript services are available.
|
|
8
|
-
* @example
|
|
9
|
-
* ```typescript
|
|
10
|
-
* const services = getParserServices(context);
|
|
11
|
-
* ```
|
|
12
|
-
*/
|
|
13
|
-
function getParserServices(context) {
|
|
14
|
-
try {
|
|
15
|
-
return ESLintUtils.getParserServices(context);
|
|
16
|
-
}
|
|
17
|
-
catch {
|
|
18
|
-
return void 0;
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
/** Enforces minimal nested casts for `vi.mock` and `vi.doMock` factory objects. */
|
|
22
|
-
const preferVitestIncrementalCastsRule = ESLintUtils.RuleCreator.withoutDocs({
|
|
23
|
-
create(context) {
|
|
24
|
-
const services = getParserServices(context);
|
|
25
|
-
if (services === void 0 || services.program === null) {
|
|
26
|
-
return {};
|
|
27
|
-
}
|
|
28
|
-
const checker = services.program.getTypeChecker();
|
|
29
|
-
const sourceText = context.sourceCode.text;
|
|
30
|
-
return {
|
|
31
|
-
CallExpression(node) {
|
|
32
|
-
const match = collectMatch({
|
|
33
|
-
callExpression: node,
|
|
34
|
-
checker,
|
|
35
|
-
services,
|
|
36
|
-
sourceText,
|
|
37
|
-
});
|
|
38
|
-
if (match === void 0) {
|
|
39
|
-
return;
|
|
40
|
-
}
|
|
41
|
-
context.report({
|
|
42
|
-
fix: (fixer) => fixer.replaceTextRange(match.returnExpressionRange, match.replacementText),
|
|
43
|
-
messageId: "preferVitestIncrementalCasts",
|
|
44
|
-
node,
|
|
45
|
-
});
|
|
46
|
-
},
|
|
47
|
-
};
|
|
48
|
-
},
|
|
49
|
-
defaultOptions: [],
|
|
50
|
-
meta: {
|
|
51
|
-
docs: createRuleDocumentation("prefer-vitest-incremental-casts", "Prefer minimal nested casts in vi.mock/vi.doMock factory return objects when TypeScript rejects the module shape."),
|
|
52
|
-
fixable: "code",
|
|
53
|
-
messages: {
|
|
54
|
-
preferVitestIncrementalCasts: "Normalize the mock factory to the smallest stable set of nested casts needed for the module type.",
|
|
55
|
-
},
|
|
56
|
-
schema: [],
|
|
57
|
-
type: "suggestion",
|
|
58
|
-
},
|
|
59
|
-
name: "prefer-vitest-incremental-casts",
|
|
60
|
-
});
|
|
61
|
-
export { preferVitestIncrementalCastsRule };
|
|
62
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kb21haW4vdGVzdGluZy9wcmVmZXItdml0ZXN0LWluY3JlbWVudGFsLWNhc3RzL3J1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBU3ZELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQzFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFFdkM7Ozs7Ozs7O0dBUUc7QUFDSCxTQUFTLGlCQUFpQixDQUN4QixPQUF5QjtJQUV6QixJQUFJLENBQUM7UUFDSCxPQUFPLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNoRCxDQUFDO0lBQUMsTUFBTSxDQUFDO1FBQ1AsT0FBTyxLQUFLLENBQUMsQ0FBQztJQUNoQixDQUFDO0FBQ0gsQ0FBQztBQUVELG1GQUFtRjtBQUNuRixNQUFNLGdDQUFnQyxHQUFHLFdBQVcsQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUcxRTtJQUNBLE1BQU0sQ0FBQyxPQUFPO1FBQ1osTUFBTSxRQUFRLEdBQUcsaUJBQWlCLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFNUMsSUFBSSxRQUFRLEtBQUssS0FBSyxDQUFDLElBQUksUUFBUSxDQUFDLE9BQU8sS0FBSyxJQUFJLEVBQUUsQ0FBQztZQUNyRCxPQUFPLEVBQUUsQ0FBQztRQUNaLENBQUM7UUFFRCxNQUFNLE9BQU8sR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ2xELE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDO1FBRTNDLE9BQU87WUFDTCxjQUFjLENBQUMsSUFBSTtnQkFDakIsTUFBTSxLQUFLLEdBQUcsWUFBWSxDQUFDO29CQUN6QixjQUFjLEVBQUUsSUFBSTtvQkFDcEIsT0FBTztvQkFDUCxRQUFRO29CQUNSLFVBQVU7aUJBQ1gsQ0FBQyxDQUFDO2dCQUVILElBQUksS0FBSyxLQUFLLEtBQUssQ0FBQyxFQUFFLENBQUM7b0JBQ3JCLE9BQU87Z0JBQ1QsQ0FBQztnQkFFRCxPQUFPLENBQUMsTUFBTSxDQUFDO29CQUNiLEdBQUcsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQ2IsS0FBSyxDQUFDLGdCQUFnQixDQUNwQixLQUFLLENBQUMscUJBQXFCLEVBQzNCLEtBQUssQ0FBQyxlQUFlLENBQ3RCO29CQUNILFNBQVMsRUFBRSw4QkFBOEI7b0JBQ3pDLElBQUk7aUJBQ0wsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztTQUNGLENBQUM7SUFDSixDQUFDO0lBQ0QsY0FBYyxFQUFFLEVBQUU7SUFDbEIsSUFBSSxFQUFFO1FBQ0osSUFBSSxFQUFFLHVCQUF1QixDQUMzQixpQ0FBaUMsRUFDakMsbUhBQW1ILENBQ3BIO1FBQ0QsT0FBTyxFQUFFLE1BQU07UUFDZixRQUFRLEVBQUU7WUFDUiw0QkFBNEIsRUFDMUIsbUdBQW1HO1NBQ3RHO1FBQ0QsTUFBTSxFQUFFLEVBQUU7UUFDVixJQUFJLEVBQUUsWUFBWTtLQUNuQjtJQUNELElBQUksRUFBRSxpQ0FBaUM7Q0FDeEMsQ0FBK0IsQ0FBQztBQUVqQyxPQUFPLEVBQUUsZ0NBQWdDLEVBQUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgUnVsZSB9IGZyb20gXCJlc2xpbnRcIjtcblxuaW1wb3J0IHsgRVNMaW50VXRpbHMgfSBmcm9tIFwiQHR5cGVzY3JpcHQtZXNsaW50L3V0aWxzXCI7XG5cbmltcG9ydCB0eXBlIHtcbiAgTWVzc2FnZUlkcyxcbiAgT3B0aW9ucyxcbiAgUGFyc2VyU2VydmljZXMsXG4gIFR5cGVkUnVsZUNvbnRleHQsXG59IGZyb20gXCIuL3R5cGVzXCI7XG5cbmltcG9ydCB7IGNyZWF0ZVJ1bGVEb2N1bWVudGF0aW9uIH0gZnJvbSBcIi4uLy4uL2N1c3RvbS1ydWxlLWRvY3VtZW50YXRpb25cIjtcbmltcG9ydCB7IGNvbGxlY3RNYXRjaCB9IGZyb20gXCIuL21hdGNoXCI7XG5cbi8qKlxuICogUmVzb2x2ZXMgVHlwZVNjcmlwdCBwYXJzZXIgc2VydmljZXMgd2hlbiB0aGUgcnVsZSBydW5zIG9uIGEgdHlwZWQgZmlsZS5cbiAqIEBwYXJhbSBjb250ZXh0IEVTTGludCBydWxlIGNvbnRleHQuXG4gKiBAcmV0dXJucyBQYXJzZXIgc2VydmljZXMgd2hlbiBUeXBlU2NyaXB0IHNlcnZpY2VzIGFyZSBhdmFpbGFibGUuXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3Qgc2VydmljZXMgPSBnZXRQYXJzZXJTZXJ2aWNlcyhjb250ZXh0KTtcbiAqIGBgYFxuICovXG5mdW5jdGlvbiBnZXRQYXJzZXJTZXJ2aWNlcyhcbiAgY29udGV4dDogVHlwZWRSdWxlQ29udGV4dCxcbik6IFBhcnNlclNlcnZpY2VzIHwgdW5kZWZpbmVkIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gRVNMaW50VXRpbHMuZ2V0UGFyc2VyU2VydmljZXMoY29udGV4dCk7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiB2b2lkIDA7XG4gIH1cbn1cblxuLyoqIEVuZm9yY2VzIG1pbmltYWwgbmVzdGVkIGNhc3RzIGZvciBgdmkubW9ja2AgYW5kIGB2aS5kb01vY2tgIGZhY3Rvcnkgb2JqZWN0cy4gKi9cbmNvbnN0IHByZWZlclZpdGVzdEluY3JlbWVudGFsQ2FzdHNSdWxlID0gRVNMaW50VXRpbHMuUnVsZUNyZWF0b3Iud2l0aG91dERvY3M8XG4gIE9wdGlvbnMsXG4gIE1lc3NhZ2VJZHNcbj4oe1xuICBjcmVhdGUoY29udGV4dCkge1xuICAgIGNvbnN0IHNlcnZpY2VzID0gZ2V0UGFyc2VyU2VydmljZXMoY29udGV4dCk7XG5cbiAgICBpZiAoc2VydmljZXMgPT09IHZvaWQgMCB8fCBzZXJ2aWNlcy5wcm9ncmFtID09PSBudWxsKSB7XG4gICAgICByZXR1cm4ge307XG4gICAgfVxuXG4gICAgY29uc3QgY2hlY2tlciA9IHNlcnZpY2VzLnByb2dyYW0uZ2V0VHlwZUNoZWNrZXIoKTtcbiAgICBjb25zdCBzb3VyY2VUZXh0ID0gY29udGV4dC5zb3VyY2VDb2RlLnRleHQ7XG5cbiAgICByZXR1cm4ge1xuICAgICAgQ2FsbEV4cHJlc3Npb24obm9kZSk6IHZvaWQge1xuICAgICAgICBjb25zdCBtYXRjaCA9IGNvbGxlY3RNYXRjaCh7XG4gICAgICAgICAgY2FsbEV4cHJlc3Npb246IG5vZGUsXG4gICAgICAgICAgY2hlY2tlcixcbiAgICAgICAgICBzZXJ2aWNlcyxcbiAgICAgICAgICBzb3VyY2VUZXh0LFxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAobWF0Y2ggPT09IHZvaWQgMCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnRleHQucmVwb3J0KHtcbiAgICAgICAgICBmaXg6IChmaXhlcikgPT5cbiAgICAgICAgICAgIGZpeGVyLnJlcGxhY2VUZXh0UmFuZ2UoXG4gICAgICAgICAgICAgIG1hdGNoLnJldHVybkV4cHJlc3Npb25SYW5nZSxcbiAgICAgICAgICAgICAgbWF0Y2gucmVwbGFjZW1lbnRUZXh0LFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICBtZXNzYWdlSWQ6IFwicHJlZmVyVml0ZXN0SW5jcmVtZW50YWxDYXN0c1wiLFxuICAgICAgICAgIG5vZGUsXG4gICAgICAgIH0pO1xuICAgICAgfSxcbiAgICB9O1xuICB9LFxuICBkZWZhdWx0T3B0aW9uczogW10sXG4gIG1ldGE6IHtcbiAgICBkb2NzOiBjcmVhdGVSdWxlRG9jdW1lbnRhdGlvbihcbiAgICAgIFwicHJlZmVyLXZpdGVzdC1pbmNyZW1lbnRhbC1jYXN0c1wiLFxuICAgICAgXCJQcmVmZXIgbWluaW1hbCBuZXN0ZWQgY2FzdHMgaW4gdmkubW9jay92aS5kb01vY2sgZmFjdG9yeSByZXR1cm4gb2JqZWN0cyB3aGVuIFR5cGVTY3JpcHQgcmVqZWN0cyB0aGUgbW9kdWxlIHNoYXBlLlwiLFxuICAgICksXG4gICAgZml4YWJsZTogXCJjb2RlXCIsXG4gICAgbWVzc2FnZXM6IHtcbiAgICAgIHByZWZlclZpdGVzdEluY3JlbWVudGFsQ2FzdHM6XG4gICAgICAgIFwiTm9ybWFsaXplIHRoZSBtb2NrIGZhY3RvcnkgdG8gdGhlIHNtYWxsZXN0IHN0YWJsZSBzZXQgb2YgbmVzdGVkIGNhc3RzIG5lZWRlZCBmb3IgdGhlIG1vZHVsZSB0eXBlLlwiLFxuICAgIH0sXG4gICAgc2NoZW1hOiBbXSxcbiAgICB0eXBlOiBcInN1Z2dlc3Rpb25cIixcbiAgfSxcbiAgbmFtZTogXCJwcmVmZXItdml0ZXN0LWluY3JlbWVudGFsLWNhc3RzXCIsXG59KSBhcyB1bmtub3duIGFzIFJ1bGUuUnVsZU1vZHVsZTtcblxuZXhwb3J0IHsgcHJlZmVyVml0ZXN0SW5jcmVtZW50YWxDYXN0c1J1bGUgfTtcbiJdfQ==
|
package/dist/domain/testing/prefer-vitest-incremental-casts/rule.signature-fallback.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"rule.signature-fallback.d.ts","sourceRoot":"","sources":["../../../../src/domain/testing/prefer-vitest-incremental-casts/rule.signature-fallback.ts"],"names":[],"mappings":"AAAA,4DAA4D;AAC5D,QAAA,MAAM,8BAA8B,4DACuB,CAAC;AAE5D,OAAO,EAAE,8BAA8B,EAAE,CAAC"}
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
/** Suite name for the signature-fallback companion spec. */
|
|
2
|
-
const ruleSignatureFallbackSuiteName = "prefer-vitest-incremental-casts rule signature fallback";
|
|
3
|
-
export { ruleSignatureFallbackSuiteName };
|
|
4
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVsZS5zaWduYXR1cmUtZmFsbGJhY2suanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvZG9tYWluL3Rlc3RpbmcvcHJlZmVyLXZpdGVzdC1pbmNyZW1lbnRhbC1jYXN0cy9ydWxlLnNpZ25hdHVyZS1mYWxsYmFjay50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSw0REFBNEQ7QUFDNUQsTUFBTSw4QkFBOEIsR0FDbEMseURBQXlELENBQUM7QUFFNUQsT0FBTyxFQUFFLDhCQUE4QixFQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiogU3VpdGUgbmFtZSBmb3IgdGhlIHNpZ25hdHVyZS1mYWxsYmFjayBjb21wYW5pb24gc3BlYy4gKi9cclxuY29uc3QgcnVsZVNpZ25hdHVyZUZhbGxiYWNrU3VpdGVOYW1lID1cclxuICBcInByZWZlci12aXRlc3QtaW5jcmVtZW50YWwtY2FzdHMgcnVsZSBzaWduYXR1cmUgZmFsbGJhY2tcIjtcclxuXHJcbmV4cG9ydCB7IHJ1bGVTaWduYXR1cmVGYWxsYmFja1N1aXRlTmFtZSB9O1xyXG4iXX0=
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
import type * as ts from "typescript";
|
|
2
|
-
import type { OuterCastContext, ResolveFactoryTargetTypeContext } from "./types.js";
|
|
3
|
-
/**
|
|
4
|
-
* Determines whether the object literal still needs an outer cast.
|
|
5
|
-
* @param context Data used to decide whether the full object needs casting.
|
|
6
|
-
* @returns True when the full object still needs casting.
|
|
7
|
-
* @example
|
|
8
|
-
* ```typescript
|
|
9
|
-
* const needsOuterCast = isOuterCastRequired(context);
|
|
10
|
-
* ```
|
|
11
|
-
*/
|
|
12
|
-
declare function isOuterCastRequired(context: OuterCastContext): boolean;
|
|
13
|
-
/**
|
|
14
|
-
* Resolves the target type the factory object should satisfy.
|
|
15
|
-
* @param context Type-resolution inputs for the current mock factory.
|
|
16
|
-
* @returns Target type for the rewritten object literal.
|
|
17
|
-
* @example
|
|
18
|
-
* ```typescript
|
|
19
|
-
* const targetType = resolveFactoryTargetType(context);
|
|
20
|
-
* ```
|
|
21
|
-
*/
|
|
22
|
-
declare function resolveFactoryTargetType(context: ResolveFactoryTargetTypeContext): ts.Type | undefined;
|
|
23
|
-
export { isOuterCastRequired, resolveFactoryTargetType };
|
|
24
|
-
//# sourceMappingURL=type-helpers.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"type-helpers.d.ts","sourceRoot":"","sources":["../../../../src/domain/testing/prefer-vitest-incremental-casts/type-helpers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,EAAE,MAAM,YAAY,CAAC;AAItC,OAAO,KAAK,EAEV,gBAAgB,EAChB,+BAA+B,EAEhC,MAAM,SAAS,CAAC;AA2IjB;;;;;;;;GAQG;AACH,iBAAS,mBAAmB,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAE/D;AAED;;;;;;;;GAQG;AACH,iBAAS,wBAAwB,CAC/B,OAAO,EAAE,+BAA+B,GACvC,EAAE,CAAC,IAAI,GAAG,SAAS,CAKrB;AAED,OAAO,EAAE,mBAAmB,EAAE,wBAAwB,EAAE,CAAC"}
|
|
@@ -1,113 +0,0 @@
|
|
|
1
|
-
import { SignatureKind } from "typescript";
|
|
2
|
-
import { isOuterCastRequired as isOuterCastRequiredImpl, normalizeObjectLikeType, resolveFactoryReturnType, } from "./type-shape-helpers.js";
|
|
3
|
-
/**
|
|
4
|
-
* Reads the contextual type assigned to the returned mock object literal.
|
|
5
|
-
* @param context Type-resolution inputs for the current mock factory.
|
|
6
|
-
* @returns Contextual object-like type when TypeScript provides one.
|
|
7
|
-
* @example
|
|
8
|
-
* ```typescript
|
|
9
|
-
* const targetType = getContextualFactoryTargetType(context);
|
|
10
|
-
* ```
|
|
11
|
-
*/
|
|
12
|
-
function getContextualFactoryTargetType(context) {
|
|
13
|
-
const { checker, objectExpression, services } = context;
|
|
14
|
-
return normalizeObjectLikeType(checker, checker.getContextualType(services.esTreeNodeToTSNodeMap.get(objectExpression)));
|
|
15
|
-
}
|
|
16
|
-
/**
|
|
17
|
-
* Resolves the factory return type for one compatible mock signature.
|
|
18
|
-
* @param context Inputs required to inspect one callable signature.
|
|
19
|
-
* @returns Normalized object-like return type when the signature matches.
|
|
20
|
-
* @example
|
|
21
|
-
* ```typescript
|
|
22
|
-
* const returnType = getMatchingSignatureReturnType(context);
|
|
23
|
-
* ```
|
|
24
|
-
*/
|
|
25
|
-
function getMatchingSignatureReturnType(context) {
|
|
26
|
-
const { checker, firstArgument, firstArgumentType, signature, tsFactoryArgument, } = context;
|
|
27
|
-
const [specifierParameter, factoryParameter] = signature.getParameters();
|
|
28
|
-
if (specifierParameter === void 0 || factoryParameter === void 0) {
|
|
29
|
-
return void 0;
|
|
30
|
-
}
|
|
31
|
-
const specifierParameterType = checker.getTypeOfSymbolAtLocation(specifierParameter, firstArgument);
|
|
32
|
-
if (!checker.isTypeAssignableTo(firstArgumentType, specifierParameterType)) {
|
|
33
|
-
return void 0;
|
|
34
|
-
}
|
|
35
|
-
return resolveFactoryReturnType(checker, checker.getTypeOfSymbolAtLocation(factoryParameter, tsFactoryArgument));
|
|
36
|
-
}
|
|
37
|
-
/**
|
|
38
|
-
* Resolves a target type by matching the mock call against callable signatures.
|
|
39
|
-
* @param context Type-resolution inputs for the current mock factory.
|
|
40
|
-
* @returns Object-like return type inferred from the matched signature.
|
|
41
|
-
* @example
|
|
42
|
-
* ```typescript
|
|
43
|
-
* const targetType = getSignatureFactoryTargetType(context);
|
|
44
|
-
* ```
|
|
45
|
-
*/
|
|
46
|
-
function getSignatureFactoryTargetType(context) {
|
|
47
|
-
const signatureMatchInputs = getSignatureMatchInputs(context);
|
|
48
|
-
if (signatureMatchInputs === void 0) {
|
|
49
|
-
return void 0;
|
|
50
|
-
}
|
|
51
|
-
for (const signature of context.checker.getSignaturesOfType(signatureMatchInputs.calleeType, SignatureKind.Call)) {
|
|
52
|
-
const returnType = getMatchingSignatureReturnType({
|
|
53
|
-
checker: context.checker,
|
|
54
|
-
firstArgument: signatureMatchInputs.firstArgument,
|
|
55
|
-
firstArgumentType: signatureMatchInputs.firstArgumentType,
|
|
56
|
-
signature,
|
|
57
|
-
tsFactoryArgument: signatureMatchInputs.tsFactoryArgument,
|
|
58
|
-
});
|
|
59
|
-
if (returnType !== void 0) {
|
|
60
|
-
return returnType;
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
return void 0;
|
|
64
|
-
}
|
|
65
|
-
/**
|
|
66
|
-
* Collects the TypeScript nodes and types needed for signature matching.
|
|
67
|
-
* @param context Type-resolution inputs for the current mock factory.
|
|
68
|
-
* @returns Normalized signature-matching inputs when the call has a first argument.
|
|
69
|
-
* @example
|
|
70
|
-
* ```typescript
|
|
71
|
-
* const inputs = getSignatureMatchInputs(context);
|
|
72
|
-
* ```
|
|
73
|
-
*/
|
|
74
|
-
function getSignatureMatchInputs(context) {
|
|
75
|
-
const tsCallExpression = context.services.esTreeNodeToTSNodeMap.get(context.callExpression);
|
|
76
|
-
const [firstArgument] = tsCallExpression.arguments;
|
|
77
|
-
if (firstArgument === void 0) {
|
|
78
|
-
return void 0;
|
|
79
|
-
}
|
|
80
|
-
return {
|
|
81
|
-
calleeType: context.checker.getTypeAtLocation(tsCallExpression.expression),
|
|
82
|
-
firstArgument,
|
|
83
|
-
firstArgumentType: context.checker.getTypeAtLocation(firstArgument),
|
|
84
|
-
tsFactoryArgument: context.services.esTreeNodeToTSNodeMap.get(context.factoryArgument),
|
|
85
|
-
};
|
|
86
|
-
}
|
|
87
|
-
/**
|
|
88
|
-
* Determines whether the object literal still needs an outer cast.
|
|
89
|
-
* @param context Data used to decide whether the full object needs casting.
|
|
90
|
-
* @returns True when the full object still needs casting.
|
|
91
|
-
* @example
|
|
92
|
-
* ```typescript
|
|
93
|
-
* const needsOuterCast = isOuterCastRequired(context);
|
|
94
|
-
* ```
|
|
95
|
-
*/
|
|
96
|
-
function isOuterCastRequired(context) {
|
|
97
|
-
return isOuterCastRequiredImpl(context);
|
|
98
|
-
}
|
|
99
|
-
/**
|
|
100
|
-
* Resolves the target type the factory object should satisfy.
|
|
101
|
-
* @param context Type-resolution inputs for the current mock factory.
|
|
102
|
-
* @returns Target type for the rewritten object literal.
|
|
103
|
-
* @example
|
|
104
|
-
* ```typescript
|
|
105
|
-
* const targetType = resolveFactoryTargetType(context);
|
|
106
|
-
* ```
|
|
107
|
-
*/
|
|
108
|
-
function resolveFactoryTargetType(context) {
|
|
109
|
-
return (getContextualFactoryTargetType(context) ??
|
|
110
|
-
getSignatureFactoryTargetType(context));
|
|
111
|
-
}
|
|
112
|
-
export { isOuterCastRequired, resolveFactoryTargetType };
|
|
113
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZS1oZWxwZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2RvbWFpbi90ZXN0aW5nL3ByZWZlci12aXRlc3QtaW5jcmVtZW50YWwtY2FzdHMvdHlwZS1oZWxwZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFTM0MsT0FBTyxFQUNMLG1CQUFtQixJQUFJLHVCQUF1QixFQUM5Qyx1QkFBdUIsRUFDdkIsd0JBQXdCLEdBQ3pCLE1BQU0sc0JBQXNCLENBQUM7QUFFOUI7Ozs7Ozs7O0dBUUc7QUFDSCxTQUFTLDhCQUE4QixDQUNyQyxPQUF3QztJQUV4QyxNQUFNLEVBQUUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLFFBQVEsRUFBRSxHQUFHLE9BQU8sQ0FBQztJQUV4RCxPQUFPLHVCQUF1QixDQUM1QixPQUFPLEVBQ1AsT0FBTyxDQUFDLGlCQUFpQixDQUN2QixRQUFRLENBQUMscUJBQXFCLENBQUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDLENBQ3JELENBQ0YsQ0FBQztBQUNKLENBQUM7QUFFRDs7Ozs7Ozs7R0FRRztBQUNILFNBQVMsOEJBQThCLENBQ3JDLE9BQTJDO0lBRTNDLE1BQU0sRUFDSixPQUFPLEVBQ1AsYUFBYSxFQUNiLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsaUJBQWlCLEdBQ2xCLEdBQUcsT0FBTyxDQUFDO0lBQ1osTUFBTSxDQUFDLGtCQUFrQixFQUFFLGdCQUFnQixDQUFDLEdBQUcsU0FBUyxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBRXpFLElBQUksa0JBQWtCLEtBQUssS0FBSyxDQUFDLElBQUksZ0JBQWdCLEtBQUssS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUNqRSxPQUFPLEtBQUssQ0FBQyxDQUFDO0lBQ2hCLENBQUM7SUFFRCxNQUFNLHNCQUFzQixHQUFHLE9BQU8sQ0FBQyx5QkFBeUIsQ0FDOUQsa0JBQWtCLEVBQ2xCLGFBQWEsQ0FDZCxDQUFDO0lBRUYsSUFBSSxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxpQkFBaUIsRUFBRSxzQkFBc0IsQ0FBQyxFQUFFLENBQUM7UUFDM0UsT0FBTyxLQUFLLENBQUMsQ0FBQztJQUNoQixDQUFDO0lBRUQsT0FBTyx3QkFBd0IsQ0FDN0IsT0FBTyxFQUNQLE9BQU8sQ0FBQyx5QkFBeUIsQ0FBQyxnQkFBZ0IsRUFBRSxpQkFBaUIsQ0FBQyxDQUN2RSxDQUFDO0FBQ0osQ0FBQztBQUVEOzs7Ozs7OztHQVFHO0FBQ0gsU0FBUyw2QkFBNkIsQ0FDcEMsT0FBd0M7SUFFeEMsTUFBTSxvQkFBb0IsR0FBRyx1QkFBdUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUU5RCxJQUFJLG9CQUFvQixLQUFLLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDcEMsT0FBTyxLQUFLLENBQUMsQ0FBQztJQUNoQixDQUFDO0lBRUQsS0FBSyxNQUFNLFNBQVMsSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLG1CQUFtQixDQUN6RCxvQkFBb0IsQ0FBQyxVQUFVLEVBQy9CLGFBQWEsQ0FBQyxJQUFJLENBQ25CLEVBQUUsQ0FBQztRQUNGLE1BQU0sVUFBVSxHQUFHLDhCQUE4QixDQUFDO1lBQ2hELE9BQU8sRUFBRSxPQUFPLENBQUMsT0FBTztZQUN4QixhQUFhLEVBQUUsb0JBQW9CLENBQUMsYUFBYTtZQUNqRCxpQkFBaUIsRUFBRSxvQkFBb0IsQ0FBQyxpQkFBaUI7WUFDekQsU0FBUztZQUNULGlCQUFpQixFQUFFLG9CQUFvQixDQUFDLGlCQUFpQjtTQUMxRCxDQUFDLENBQUM7UUFFSCxJQUFJLFVBQVUsS0FBSyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQzFCLE9BQU8sVUFBVSxDQUFDO1FBQ3BCLENBQUM7SUFDSCxDQUFDO0lBRUQsT0FBTyxLQUFLLENBQUMsQ0FBQztBQUNoQixDQUFDO0FBRUQ7Ozs7Ozs7O0dBUUc7QUFDSCxTQUFTLHVCQUF1QixDQUM5QixPQUF3QztJQUV4QyxNQUFNLGdCQUFnQixHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMscUJBQXFCLENBQUMsR0FBRyxDQUNqRSxPQUFPLENBQUMsY0FBYyxDQUN2QixDQUFDO0lBQ0YsTUFBTSxDQUFDLGFBQWEsQ0FBQyxHQUFHLGdCQUFnQixDQUFDLFNBQVMsQ0FBQztJQUVuRCxJQUFJLGFBQWEsS0FBSyxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQzdCLE9BQU8sS0FBSyxDQUFDLENBQUM7SUFDaEIsQ0FBQztJQUVELE9BQU87UUFDTCxVQUFVLEVBQUUsT0FBTyxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLENBQUM7UUFDMUUsYUFBYTtRQUNiLGlCQUFpQixFQUFFLE9BQU8sQ0FBQyxPQUFPLENBQUMsaUJBQWlCLENBQUMsYUFBYSxDQUFDO1FBQ25FLGlCQUFpQixFQUFFLE9BQU8sQ0FBQyxRQUFRLENBQUMscUJBQXFCLENBQUMsR0FBRyxDQUMzRCxPQUFPLENBQUMsZUFBZSxDQUN4QjtLQUNGLENBQUM7QUFDSixDQUFDO0FBRUQ7Ozs7Ozs7O0dBUUc7QUFDSCxTQUFTLG1CQUFtQixDQUFDLE9BQXlCO0lBQ3BELE9BQU8sdUJBQXVCLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDMUMsQ0FBQztBQUVEOzs7Ozs7OztHQVFHO0FBQ0gsU0FBUyx3QkFBd0IsQ0FDL0IsT0FBd0M7SUFFeEMsT0FBTyxDQUNMLDhCQUE4QixDQUFDLE9BQU8sQ0FBQztRQUN2Qyw2QkFBNkIsQ0FBQyxPQUFPLENBQUMsQ0FDdkMsQ0FBQztBQUNKLENBQUM7QUFFRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsd0JBQXdCLEVBQUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlICogYXMgdHMgZnJvbSBcInR5cGVzY3JpcHRcIjtcclxuXHJcbmltcG9ydCB7IFNpZ25hdHVyZUtpbmQgfSBmcm9tIFwidHlwZXNjcmlwdFwiO1xyXG5cclxuaW1wb3J0IHR5cGUge1xyXG4gIE1hdGNoaW5nU2lnbmF0dXJlUmV0dXJuVHlwZUNvbnRleHQsXHJcbiAgT3V0ZXJDYXN0Q29udGV4dCxcclxuICBSZXNvbHZlRmFjdG9yeVRhcmdldFR5cGVDb250ZXh0LFxyXG4gIFNpZ25hdHVyZU1hdGNoSW5wdXRzLFxyXG59IGZyb20gXCIuL3R5cGVzXCI7XHJcblxyXG5pbXBvcnQge1xyXG4gIGlzT3V0ZXJDYXN0UmVxdWlyZWQgYXMgaXNPdXRlckNhc3RSZXF1aXJlZEltcGwsXHJcbiAgbm9ybWFsaXplT2JqZWN0TGlrZVR5cGUsXHJcbiAgcmVzb2x2ZUZhY3RvcnlSZXR1cm5UeXBlLFxyXG59IGZyb20gXCIuL3R5cGUtc2hhcGUtaGVscGVyc1wiO1xyXG5cclxuLyoqXHJcbiAqIFJlYWRzIHRoZSBjb250ZXh0dWFsIHR5cGUgYXNzaWduZWQgdG8gdGhlIHJldHVybmVkIG1vY2sgb2JqZWN0IGxpdGVyYWwuXHJcbiAqIEBwYXJhbSBjb250ZXh0IFR5cGUtcmVzb2x1dGlvbiBpbnB1dHMgZm9yIHRoZSBjdXJyZW50IG1vY2sgZmFjdG9yeS5cclxuICogQHJldHVybnMgQ29udGV4dHVhbCBvYmplY3QtbGlrZSB0eXBlIHdoZW4gVHlwZVNjcmlwdCBwcm92aWRlcyBvbmUuXHJcbiAqIEBleGFtcGxlXHJcbiAqIGBgYHR5cGVzY3JpcHRcclxuICogY29uc3QgdGFyZ2V0VHlwZSA9IGdldENvbnRleHR1YWxGYWN0b3J5VGFyZ2V0VHlwZShjb250ZXh0KTtcclxuICogYGBgXHJcbiAqL1xyXG5mdW5jdGlvbiBnZXRDb250ZXh0dWFsRmFjdG9yeVRhcmdldFR5cGUoXHJcbiAgY29udGV4dDogUmVzb2x2ZUZhY3RvcnlUYXJnZXRUeXBlQ29udGV4dCxcclxuKTogdHMuVHlwZSB8IHVuZGVmaW5lZCB7XHJcbiAgY29uc3QgeyBjaGVja2VyLCBvYmplY3RFeHByZXNzaW9uLCBzZXJ2aWNlcyB9ID0gY29udGV4dDtcclxuXHJcbiAgcmV0dXJuIG5vcm1hbGl6ZU9iamVjdExpa2VUeXBlKFxyXG4gICAgY2hlY2tlcixcclxuICAgIGNoZWNrZXIuZ2V0Q29udGV4dHVhbFR5cGUoXHJcbiAgICAgIHNlcnZpY2VzLmVzVHJlZU5vZGVUb1RTTm9kZU1hcC5nZXQob2JqZWN0RXhwcmVzc2lvbiksXHJcbiAgICApLFxyXG4gICk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBSZXNvbHZlcyB0aGUgZmFjdG9yeSByZXR1cm4gdHlwZSBmb3Igb25lIGNvbXBhdGlibGUgbW9jayBzaWduYXR1cmUuXHJcbiAqIEBwYXJhbSBjb250ZXh0IElucHV0cyByZXF1aXJlZCB0byBpbnNwZWN0IG9uZSBjYWxsYWJsZSBzaWduYXR1cmUuXHJcbiAqIEByZXR1cm5zIE5vcm1hbGl6ZWQgb2JqZWN0LWxpa2UgcmV0dXJuIHR5cGUgd2hlbiB0aGUgc2lnbmF0dXJlIG1hdGNoZXMuXHJcbiAqIEBleGFtcGxlXHJcbiAqIGBgYHR5cGVzY3JpcHRcclxuICogY29uc3QgcmV0dXJuVHlwZSA9IGdldE1hdGNoaW5nU2lnbmF0dXJlUmV0dXJuVHlwZShjb250ZXh0KTtcclxuICogYGBgXHJcbiAqL1xyXG5mdW5jdGlvbiBnZXRNYXRjaGluZ1NpZ25hdHVyZVJldHVyblR5cGUoXHJcbiAgY29udGV4dDogTWF0Y2hpbmdTaWduYXR1cmVSZXR1cm5UeXBlQ29udGV4dCxcclxuKTogdHMuVHlwZSB8IHVuZGVmaW5lZCB7XHJcbiAgY29uc3Qge1xyXG4gICAgY2hlY2tlcixcclxuICAgIGZpcnN0QXJndW1lbnQsXHJcbiAgICBmaXJzdEFyZ3VtZW50VHlwZSxcclxuICAgIHNpZ25hdHVyZSxcclxuICAgIHRzRmFjdG9yeUFyZ3VtZW50LFxyXG4gIH0gPSBjb250ZXh0O1xyXG4gIGNvbnN0IFtzcGVjaWZpZXJQYXJhbWV0ZXIsIGZhY3RvcnlQYXJhbWV0ZXJdID0gc2lnbmF0dXJlLmdldFBhcmFtZXRlcnMoKTtcclxuXHJcbiAgaWYgKHNwZWNpZmllclBhcmFtZXRlciA9PT0gdm9pZCAwIHx8IGZhY3RvcnlQYXJhbWV0ZXIgPT09IHZvaWQgMCkge1xyXG4gICAgcmV0dXJuIHZvaWQgMDtcclxuICB9XHJcblxyXG4gIGNvbnN0IHNwZWNpZmllclBhcmFtZXRlclR5cGUgPSBjaGVja2VyLmdldFR5cGVPZlN5bWJvbEF0TG9jYXRpb24oXHJcbiAgICBzcGVjaWZpZXJQYXJhbWV0ZXIsXHJcbiAgICBmaXJzdEFyZ3VtZW50LFxyXG4gICk7XHJcblxyXG4gIGlmICghY2hlY2tlci5pc1R5cGVBc3NpZ25hYmxlVG8oZmlyc3RBcmd1bWVudFR5cGUsIHNwZWNpZmllclBhcmFtZXRlclR5cGUpKSB7XHJcbiAgICByZXR1cm4gdm9pZCAwO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHJlc29sdmVGYWN0b3J5UmV0dXJuVHlwZShcclxuICAgIGNoZWNrZXIsXHJcbiAgICBjaGVja2VyLmdldFR5cGVPZlN5bWJvbEF0TG9jYXRpb24oZmFjdG9yeVBhcmFtZXRlciwgdHNGYWN0b3J5QXJndW1lbnQpLFxyXG4gICk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBSZXNvbHZlcyBhIHRhcmdldCB0eXBlIGJ5IG1hdGNoaW5nIHRoZSBtb2NrIGNhbGwgYWdhaW5zdCBjYWxsYWJsZSBzaWduYXR1cmVzLlxyXG4gKiBAcGFyYW0gY29udGV4dCBUeXBlLXJlc29sdXRpb24gaW5wdXRzIGZvciB0aGUgY3VycmVudCBtb2NrIGZhY3RvcnkuXHJcbiAqIEByZXR1cm5zIE9iamVjdC1saWtlIHJldHVybiB0eXBlIGluZmVycmVkIGZyb20gdGhlIG1hdGNoZWQgc2lnbmF0dXJlLlxyXG4gKiBAZXhhbXBsZVxyXG4gKiBgYGB0eXBlc2NyaXB0XHJcbiAqIGNvbnN0IHRhcmdldFR5cGUgPSBnZXRTaWduYXR1cmVGYWN0b3J5VGFyZ2V0VHlwZShjb250ZXh0KTtcclxuICogYGBgXHJcbiAqL1xyXG5mdW5jdGlvbiBnZXRTaWduYXR1cmVGYWN0b3J5VGFyZ2V0VHlwZShcclxuICBjb250ZXh0OiBSZXNvbHZlRmFjdG9yeVRhcmdldFR5cGVDb250ZXh0LFxyXG4pOiB0cy5UeXBlIHwgdW5kZWZpbmVkIHtcclxuICBjb25zdCBzaWduYXR1cmVNYXRjaElucHV0cyA9IGdldFNpZ25hdHVyZU1hdGNoSW5wdXRzKGNvbnRleHQpO1xyXG5cclxuICBpZiAoc2lnbmF0dXJlTWF0Y2hJbnB1dHMgPT09IHZvaWQgMCkge1xyXG4gICAgcmV0dXJuIHZvaWQgMDtcclxuICB9XHJcblxyXG4gIGZvciAoY29uc3Qgc2lnbmF0dXJlIG9mIGNvbnRleHQuY2hlY2tlci5nZXRTaWduYXR1cmVzT2ZUeXBlKFxyXG4gICAgc2lnbmF0dXJlTWF0Y2hJbnB1dHMuY2FsbGVlVHlwZSxcclxuICAgIFNpZ25hdHVyZUtpbmQuQ2FsbCxcclxuICApKSB7XHJcbiAgICBjb25zdCByZXR1cm5UeXBlID0gZ2V0TWF0Y2hpbmdTaWduYXR1cmVSZXR1cm5UeXBlKHtcclxuICAgICAgY2hlY2tlcjogY29udGV4dC5jaGVja2VyLFxyXG4gICAgICBmaXJzdEFyZ3VtZW50OiBzaWduYXR1cmVNYXRjaElucHV0cy5maXJzdEFyZ3VtZW50LFxyXG4gICAgICBmaXJzdEFyZ3VtZW50VHlwZTogc2lnbmF0dXJlTWF0Y2hJbnB1dHMuZmlyc3RBcmd1bWVudFR5cGUsXHJcbiAgICAgIHNpZ25hdHVyZSxcclxuICAgICAgdHNGYWN0b3J5QXJndW1lbnQ6IHNpZ25hdHVyZU1hdGNoSW5wdXRzLnRzRmFjdG9yeUFyZ3VtZW50LFxyXG4gICAgfSk7XHJcblxyXG4gICAgaWYgKHJldHVyblR5cGUgIT09IHZvaWQgMCkge1xyXG4gICAgICByZXR1cm4gcmV0dXJuVHlwZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJldHVybiB2b2lkIDA7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBDb2xsZWN0cyB0aGUgVHlwZVNjcmlwdCBub2RlcyBhbmQgdHlwZXMgbmVlZGVkIGZvciBzaWduYXR1cmUgbWF0Y2hpbmcuXHJcbiAqIEBwYXJhbSBjb250ZXh0IFR5cGUtcmVzb2x1dGlvbiBpbnB1dHMgZm9yIHRoZSBjdXJyZW50IG1vY2sgZmFjdG9yeS5cclxuICogQHJldHVybnMgTm9ybWFsaXplZCBzaWduYXR1cmUtbWF0Y2hpbmcgaW5wdXRzIHdoZW4gdGhlIGNhbGwgaGFzIGEgZmlyc3QgYXJndW1lbnQuXHJcbiAqIEBleGFtcGxlXHJcbiAqIGBgYHR5cGVzY3JpcHRcclxuICogY29uc3QgaW5wdXRzID0gZ2V0U2lnbmF0dXJlTWF0Y2hJbnB1dHMoY29udGV4dCk7XHJcbiAqIGBgYFxyXG4gKi9cclxuZnVuY3Rpb24gZ2V0U2lnbmF0dXJlTWF0Y2hJbnB1dHMoXHJcbiAgY29udGV4dDogUmVzb2x2ZUZhY3RvcnlUYXJnZXRUeXBlQ29udGV4dCxcclxuKTogU2lnbmF0dXJlTWF0Y2hJbnB1dHMgfCB1bmRlZmluZWQge1xyXG4gIGNvbnN0IHRzQ2FsbEV4cHJlc3Npb24gPSBjb250ZXh0LnNlcnZpY2VzLmVzVHJlZU5vZGVUb1RTTm9kZU1hcC5nZXQoXHJcbiAgICBjb250ZXh0LmNhbGxFeHByZXNzaW9uLFxyXG4gICk7XHJcbiAgY29uc3QgW2ZpcnN0QXJndW1lbnRdID0gdHNDYWxsRXhwcmVzc2lvbi5hcmd1bWVudHM7XHJcblxyXG4gIGlmIChmaXJzdEFyZ3VtZW50ID09PSB2b2lkIDApIHtcclxuICAgIHJldHVybiB2b2lkIDA7XHJcbiAgfVxyXG5cclxuICByZXR1cm4ge1xyXG4gICAgY2FsbGVlVHlwZTogY29udGV4dC5jaGVja2VyLmdldFR5cGVBdExvY2F0aW9uKHRzQ2FsbEV4cHJlc3Npb24uZXhwcmVzc2lvbiksXHJcbiAgICBmaXJzdEFyZ3VtZW50LFxyXG4gICAgZmlyc3RBcmd1bWVudFR5cGU6IGNvbnRleHQuY2hlY2tlci5nZXRUeXBlQXRMb2NhdGlvbihmaXJzdEFyZ3VtZW50KSxcclxuICAgIHRzRmFjdG9yeUFyZ3VtZW50OiBjb250ZXh0LnNlcnZpY2VzLmVzVHJlZU5vZGVUb1RTTm9kZU1hcC5nZXQoXHJcbiAgICAgIGNvbnRleHQuZmFjdG9yeUFyZ3VtZW50LFxyXG4gICAgKSxcclxuICB9O1xyXG59XHJcblxyXG4vKipcclxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBvYmplY3QgbGl0ZXJhbCBzdGlsbCBuZWVkcyBhbiBvdXRlciBjYXN0LlxyXG4gKiBAcGFyYW0gY29udGV4dCBEYXRhIHVzZWQgdG8gZGVjaWRlIHdoZXRoZXIgdGhlIGZ1bGwgb2JqZWN0IG5lZWRzIGNhc3RpbmcuXHJcbiAqIEByZXR1cm5zIFRydWUgd2hlbiB0aGUgZnVsbCBvYmplY3Qgc3RpbGwgbmVlZHMgY2FzdGluZy5cclxuICogQGV4YW1wbGVcclxuICogYGBgdHlwZXNjcmlwdFxyXG4gKiBjb25zdCBuZWVkc091dGVyQ2FzdCA9IGlzT3V0ZXJDYXN0UmVxdWlyZWQoY29udGV4dCk7XHJcbiAqIGBgYFxyXG4gKi9cclxuZnVuY3Rpb24gaXNPdXRlckNhc3RSZXF1aXJlZChjb250ZXh0OiBPdXRlckNhc3RDb250ZXh0KTogYm9vbGVhbiB7XHJcbiAgcmV0dXJuIGlzT3V0ZXJDYXN0UmVxdWlyZWRJbXBsKGNvbnRleHQpO1xyXG59XHJcblxyXG4vKipcclxuICogUmVzb2x2ZXMgdGhlIHRhcmdldCB0eXBlIHRoZSBmYWN0b3J5IG9iamVjdCBzaG91bGQgc2F0aXNmeS5cclxuICogQHBhcmFtIGNvbnRleHQgVHlwZS1yZXNvbHV0aW9uIGlucHV0cyBmb3IgdGhlIGN1cnJlbnQgbW9jayBmYWN0b3J5LlxyXG4gKiBAcmV0dXJucyBUYXJnZXQgdHlwZSBmb3IgdGhlIHJld3JpdHRlbiBvYmplY3QgbGl0ZXJhbC5cclxuICogQGV4YW1wbGVcclxuICogYGBgdHlwZXNjcmlwdFxyXG4gKiBjb25zdCB0YXJnZXRUeXBlID0gcmVzb2x2ZUZhY3RvcnlUYXJnZXRUeXBlKGNvbnRleHQpO1xyXG4gKiBgYGBcclxuICovXHJcbmZ1bmN0aW9uIHJlc29sdmVGYWN0b3J5VGFyZ2V0VHlwZShcclxuICBjb250ZXh0OiBSZXNvbHZlRmFjdG9yeVRhcmdldFR5cGVDb250ZXh0LFxyXG4pOiB0cy5UeXBlIHwgdW5kZWZpbmVkIHtcclxuICByZXR1cm4gKFxyXG4gICAgZ2V0Q29udGV4dHVhbEZhY3RvcnlUYXJnZXRUeXBlKGNvbnRleHQpID8/XHJcbiAgICBnZXRTaWduYXR1cmVGYWN0b3J5VGFyZ2V0VHlwZShjb250ZXh0KVxyXG4gICk7XHJcbn1cclxuXHJcbmV4cG9ydCB7IGlzT3V0ZXJDYXN0UmVxdWlyZWQsIHJlc29sdmVGYWN0b3J5VGFyZ2V0VHlwZSB9O1xyXG4iXX0=
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
import type * as ts from "typescript";
|
|
2
|
-
import type { OuterCastContext } from "./types.js";
|
|
3
|
-
/**
|
|
4
|
-
* Determines whether the object literal still needs an outer cast.
|
|
5
|
-
* @param context Data used to decide whether the full object needs casting.
|
|
6
|
-
* @returns True when the full object still needs casting.
|
|
7
|
-
* @example
|
|
8
|
-
* ```typescript
|
|
9
|
-
* const needsOuterCast = isOuterCastRequired(context);
|
|
10
|
-
* ```
|
|
11
|
-
*/
|
|
12
|
-
declare function isOuterCastRequired(context: OuterCastContext): boolean;
|
|
13
|
-
/**
|
|
14
|
-
* Narrows a target type to the object-like type the fixer can reason about.
|
|
15
|
-
* @param checker TypeScript type checker instance.
|
|
16
|
-
* @param targetType Candidate target type.
|
|
17
|
-
* @returns Object-like type when the target can be normalized safely.
|
|
18
|
-
* @example
|
|
19
|
-
* ```typescript
|
|
20
|
-
* const normalizedType = normalizeObjectLikeType(checker, targetType);
|
|
21
|
-
* ```
|
|
22
|
-
*/
|
|
23
|
-
declare function normalizeObjectLikeType(checker: ts.TypeChecker, targetType: ts.Type | undefined): ts.Type | undefined;
|
|
24
|
-
/**
|
|
25
|
-
* Resolves the factory function's returned object type from its call signatures.
|
|
26
|
-
* @param checker TypeScript type checker instance.
|
|
27
|
-
* @param factoryParameterType Type of the factory callback parameter.
|
|
28
|
-
* @returns Normalized object-like return type when one is available.
|
|
29
|
-
* @example
|
|
30
|
-
* ```typescript
|
|
31
|
-
* const returnType = resolveFactoryReturnType(checker, factoryParameterType);
|
|
32
|
-
* ```
|
|
33
|
-
*/
|
|
34
|
-
declare function resolveFactoryReturnType(checker: ts.TypeChecker, factoryParameterType: ts.Type): ts.Type | undefined;
|
|
35
|
-
export { isOuterCastRequired, normalizeObjectLikeType, resolveFactoryReturnType, };
|
|
36
|
-
//# sourceMappingURL=type-shape-helpers.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"type-shape-helpers.d.ts","sourceRoot":"","sources":["../../../../src/domain/testing/prefer-vitest-incremental-casts/type-shape-helpers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,EAAE,MAAM,YAAY,CAAC;AAYtC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAoGhD;;;;;;;;GAQG;AACH,iBAAS,mBAAmB,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAoB/D;AAED;;;;;;;;;GASG;AACH,iBAAS,uBAAuB,CAC9B,OAAO,EAAE,EAAE,CAAC,WAAW,EACvB,UAAU,EAAE,EAAE,CAAC,IAAI,GAAG,SAAS,GAC9B,EAAE,CAAC,IAAI,GAAG,SAAS,CAqBrB;AAED;;;;;;;;;GASG;AACH,iBAAS,wBAAwB,CAC/B,OAAO,EAAE,EAAE,CAAC,WAAW,EACvB,oBAAoB,EAAE,EAAE,CAAC,IAAI,GAC5B,EAAE,CAAC,IAAI,GAAG,SAAS,CAgBrB;AAED,OAAO,EACL,mBAAmB,EACnB,uBAAuB,EACvB,wBAAwB,GACzB,CAAC"}
|
|
@@ -1,138 +0,0 @@
|
|
|
1
|
-
import { isMethodDeclaration, isMethodSignature, isParameter, isPropertyDeclaration, isPropertySignature, SignatureKind, SymbolFlags, } from "typescript";
|
|
2
|
-
/**
|
|
3
|
-
* Selects a single object-like branch from a union when one exists.
|
|
4
|
-
* @param checker TypeScript type checker instance.
|
|
5
|
-
* @param unionType Union type to inspect.
|
|
6
|
-
* @returns The single object-like branch when the union is unambiguous.
|
|
7
|
-
* @example
|
|
8
|
-
* ```typescript
|
|
9
|
-
* const branch = getSingleUnionObjectLikeType(checker, unionType);
|
|
10
|
-
* ```
|
|
11
|
-
*/
|
|
12
|
-
function getSingleUnionObjectLikeType(checker, unionType) {
|
|
13
|
-
const objectLikeTypes = unionType.types.filter((type) => hasObjectShape(checker, type));
|
|
14
|
-
return objectLikeTypes.length === 1 ? objectLikeTypes[0] : void 0;
|
|
15
|
-
}
|
|
16
|
-
/**
|
|
17
|
-
* Detects whether a TypeScript type has an object-like surface.
|
|
18
|
-
* @param checker TypeScript type checker instance.
|
|
19
|
-
* @param targetType Candidate target type.
|
|
20
|
-
* @returns True when the type exposes properties or callable signatures.
|
|
21
|
-
* @example
|
|
22
|
-
* ```typescript
|
|
23
|
-
* const objectLike = hasObjectShape(checker, targetType);
|
|
24
|
-
* ```
|
|
25
|
-
*/
|
|
26
|
-
function hasObjectShape(checker, targetType) {
|
|
27
|
-
return (checker.getPropertiesOfType(targetType).length > 0 ||
|
|
28
|
-
checker.getSignaturesOfType(targetType, SignatureKind.Call).length > 0 ||
|
|
29
|
-
checker.getSignaturesOfType(targetType, SignatureKind.Construct).length > 0);
|
|
30
|
-
}
|
|
31
|
-
/**
|
|
32
|
-
* Checks whether a TypeScript symbol flag is present without using bitwise syntax.
|
|
33
|
-
* @param flags Symbol flag bitset to inspect.
|
|
34
|
-
* @param flag Specific flag to test.
|
|
35
|
-
* @returns True when the flag is present in the bitset.
|
|
36
|
-
* @example
|
|
37
|
-
* ```typescript
|
|
38
|
-
* const hasOptionalFlag = hasSymbolFlag(SymbolFlags.Optional, SymbolFlags.Optional);
|
|
39
|
-
* ```
|
|
40
|
-
*/
|
|
41
|
-
function hasSymbolFlag(flags, flag) {
|
|
42
|
-
return Math.trunc(flags / flag) % 2 === 1;
|
|
43
|
-
}
|
|
44
|
-
/**
|
|
45
|
-
* Determines whether a symbol represents an optional object property.
|
|
46
|
-
* @param propertySymbol Property symbol being checked.
|
|
47
|
-
* @returns True when a declaration marks the property as optional.
|
|
48
|
-
* @example
|
|
49
|
-
* ```typescript
|
|
50
|
-
* const optional = isOptionalSymbol(propertySymbol);
|
|
51
|
-
* ```
|
|
52
|
-
*/
|
|
53
|
-
function isOptionalSymbol(propertySymbol) {
|
|
54
|
-
const flags = typeof propertySymbol.getFlags === "function"
|
|
55
|
-
? propertySymbol.getFlags()
|
|
56
|
-
: (propertySymbol.flags ?? 0);
|
|
57
|
-
if (hasSymbolFlag(flags, SymbolFlags.Optional)) {
|
|
58
|
-
return true;
|
|
59
|
-
}
|
|
60
|
-
const declarations = propertySymbol.getDeclarations() ?? [];
|
|
61
|
-
return declarations.some((declaration) => {
|
|
62
|
-
if (isParameter(declaration) ||
|
|
63
|
-
isPropertyDeclaration(declaration) ||
|
|
64
|
-
isPropertySignature(declaration) ||
|
|
65
|
-
isMethodDeclaration(declaration) ||
|
|
66
|
-
isMethodSignature(declaration)) {
|
|
67
|
-
return declaration.questionToken !== void 0;
|
|
68
|
-
}
|
|
69
|
-
return false;
|
|
70
|
-
});
|
|
71
|
-
}
|
|
72
|
-
/**
|
|
73
|
-
* Determines whether the object literal still needs an outer cast.
|
|
74
|
-
* @param context Data used to decide whether the full object needs casting.
|
|
75
|
-
* @returns True when the full object still needs casting.
|
|
76
|
-
* @example
|
|
77
|
-
* ```typescript
|
|
78
|
-
* const needsOuterCast = isOuterCastRequired(context);
|
|
79
|
-
* ```
|
|
80
|
-
*/
|
|
81
|
-
function isOuterCastRequired(context) {
|
|
82
|
-
const { checker, propertyNames, targetType } = context;
|
|
83
|
-
if (checker.getSignaturesOfType(targetType, SignatureKind.Call).length > 0) {
|
|
84
|
-
return true;
|
|
85
|
-
}
|
|
86
|
-
if (checker.getSignaturesOfType(targetType, SignatureKind.Construct).length > 0) {
|
|
87
|
-
return true;
|
|
88
|
-
}
|
|
89
|
-
return checker
|
|
90
|
-
.getPropertiesOfType(targetType)
|
|
91
|
-
.some((propertySymbol) => !isOptionalSymbol(propertySymbol) &&
|
|
92
|
-
!propertyNames.has(propertySymbol.getName()));
|
|
93
|
-
}
|
|
94
|
-
/**
|
|
95
|
-
* Narrows a target type to the object-like type the fixer can reason about.
|
|
96
|
-
* @param checker TypeScript type checker instance.
|
|
97
|
-
* @param targetType Candidate target type.
|
|
98
|
-
* @returns Object-like type when the target can be normalized safely.
|
|
99
|
-
* @example
|
|
100
|
-
* ```typescript
|
|
101
|
-
* const normalizedType = normalizeObjectLikeType(checker, targetType);
|
|
102
|
-
* ```
|
|
103
|
-
*/
|
|
104
|
-
function normalizeObjectLikeType(checker, targetType) {
|
|
105
|
-
if (targetType === void 0) {
|
|
106
|
-
return void 0;
|
|
107
|
-
}
|
|
108
|
-
const resolvedType = checker.getAwaitedType(targetType);
|
|
109
|
-
if (resolvedType === void 0) {
|
|
110
|
-
return void 0;
|
|
111
|
-
}
|
|
112
|
-
const directObjectLikeType = [resolvedType].find((type) => hasObjectShape(checker, type));
|
|
113
|
-
return (directObjectLikeType ??
|
|
114
|
-
(resolvedType.isUnion()
|
|
115
|
-
? getSingleUnionObjectLikeType(checker, resolvedType)
|
|
116
|
-
: void 0));
|
|
117
|
-
}
|
|
118
|
-
/**
|
|
119
|
-
* Resolves the factory function's returned object type from its call signatures.
|
|
120
|
-
* @param checker TypeScript type checker instance.
|
|
121
|
-
* @param factoryParameterType Type of the factory callback parameter.
|
|
122
|
-
* @returns Normalized object-like return type when one is available.
|
|
123
|
-
* @example
|
|
124
|
-
* ```typescript
|
|
125
|
-
* const returnType = resolveFactoryReturnType(checker, factoryParameterType);
|
|
126
|
-
* ```
|
|
127
|
-
*/
|
|
128
|
-
function resolveFactoryReturnType(checker, factoryParameterType) {
|
|
129
|
-
for (const factorySignature of checker.getSignaturesOfType(factoryParameterType, SignatureKind.Call)) {
|
|
130
|
-
const normalizedReturnType = normalizeObjectLikeType(checker, checker.getReturnTypeOfSignature(factorySignature));
|
|
131
|
-
if (normalizedReturnType !== void 0) {
|
|
132
|
-
return normalizedReturnType;
|
|
133
|
-
}
|
|
134
|
-
}
|
|
135
|
-
return void 0;
|
|
136
|
-
}
|
|
137
|
-
export { isOuterCastRequired, normalizeObjectLikeType, resolveFactoryReturnType, };
|
|
138
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZS1zaGFwZS1oZWxwZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2RvbWFpbi90ZXN0aW5nL3ByZWZlci12aXRlc3QtaW5jcmVtZW50YWwtY2FzdHMvdHlwZS1zaGFwZS1oZWxwZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFDTCxtQkFBbUIsRUFDbkIsaUJBQWlCLEVBQ2pCLFdBQVcsRUFDWCxxQkFBcUIsRUFDckIsbUJBQW1CLEVBQ25CLGFBQWEsRUFDYixXQUFXLEdBQ1osTUFBTSxZQUFZLENBQUM7QUFhcEI7Ozs7Ozs7OztHQVNHO0FBQ0gsU0FBUyw0QkFBNEIsQ0FDbkMsT0FBdUIsRUFDdkIsU0FBdUI7SUFFdkIsTUFBTSxlQUFlLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUN0RCxjQUFjLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUM5QixDQUFDO0lBRUYsT0FBTyxlQUFlLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNwRSxDQUFDO0FBRUQ7Ozs7Ozs7OztHQVNHO0FBQ0gsU0FBUyxjQUFjLENBQUMsT0FBdUIsRUFBRSxVQUFtQjtJQUNsRSxPQUFPLENBQ0wsT0FBTyxDQUFDLG1CQUFtQixDQUFDLFVBQVUsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDO1FBQ2xELE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxVQUFVLEVBQUUsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDO1FBQ3RFLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxVQUFVLEVBQUUsYUFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQzVFLENBQUM7QUFDSixDQUFDO0FBRUQ7Ozs7Ozs7OztHQVNHO0FBQ0gsU0FBUyxhQUFhLENBQUMsS0FBYSxFQUFFLElBQWlCO0lBQ3JELE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUM1QyxDQUFDO0FBRUQ7Ozs7Ozs7O0dBUUc7QUFDSCxTQUFTLGdCQUFnQixDQUFDLGNBQXlCO0lBQ2pELE1BQU0sS0FBSyxHQUNULE9BQU8sY0FBYyxDQUFDLFFBQVEsS0FBSyxVQUFVO1FBQzNDLENBQUMsQ0FBQyxjQUFjLENBQUMsUUFBUSxFQUFFO1FBQzNCLENBQUMsQ0FBQyxDQUFFLGNBQTBDLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBRS9ELElBQUksYUFBYSxDQUFDLEtBQUssRUFBRSxXQUFXLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztRQUMvQyxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxNQUFNLFlBQVksR0FBRyxjQUFjLENBQUMsZUFBZSxFQUFFLElBQUksRUFBRSxDQUFDO0lBRTVELE9BQU8sWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLFdBQVcsRUFBRSxFQUFFO1FBQ3ZDLElBQ0UsV0FBVyxDQUFDLFdBQVcsQ0FBQztZQUN4QixxQkFBcUIsQ0FBQyxXQUFXLENBQUM7WUFDbEMsbUJBQW1CLENBQUMsV0FBVyxDQUFDO1lBQ2hDLG1CQUFtQixDQUFDLFdBQVcsQ0FBQztZQUNoQyxpQkFBaUIsQ0FBQyxXQUFXLENBQUMsRUFDOUIsQ0FBQztZQUNELE9BQU8sV0FBVyxDQUFDLGFBQWEsS0FBSyxLQUFLLENBQUMsQ0FBQztRQUM5QyxDQUFDO1FBRUQsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDLENBQUMsQ0FBQztBQUNMLENBQUM7QUFFRDs7Ozs7Ozs7R0FRRztBQUNILFNBQVMsbUJBQW1CLENBQUMsT0FBeUI7SUFDcEQsTUFBTSxFQUFFLE9BQU8sRUFBRSxhQUFhLEVBQUUsVUFBVSxFQUFFLEdBQUcsT0FBTyxDQUFDO0lBRXZELElBQUksT0FBTyxDQUFDLG1CQUFtQixDQUFDLFVBQVUsRUFBRSxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQzNFLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELElBQ0UsT0FBTyxDQUFDLG1CQUFtQixDQUFDLFVBQVUsRUFBRSxhQUFhLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsRUFDM0UsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELE9BQU8sT0FBTztTQUNYLG1CQUFtQixDQUFDLFVBQVUsQ0FBQztTQUMvQixJQUFJLENBQ0gsQ0FBQyxjQUFjLEVBQUUsRUFBRSxDQUNqQixDQUFDLGdCQUFnQixDQUFDLGNBQWMsQ0FBQztRQUNqQyxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQy9DLENBQUM7QUFDTixDQUFDO0FBRUQ7Ozs7Ozs7OztHQVNHO0FBQ0gsU0FBUyx1QkFBdUIsQ0FDOUIsT0FBdUIsRUFDdkIsVUFBK0I7SUFFL0IsSUFBSSxVQUFVLEtBQUssS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUMxQixPQUFPLEtBQUssQ0FBQyxDQUFDO0lBQ2hCLENBQUM7SUFFRCxNQUFNLFlBQVksR0FBRyxPQUFPLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBRXhELElBQUksWUFBWSxLQUFLLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDNUIsT0FBTyxLQUFLLENBQUMsQ0FBQztJQUNoQixDQUFDO0lBRUQsTUFBTSxvQkFBb0IsR0FBRyxDQUFDLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQ3hELGNBQWMsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQzlCLENBQUM7SUFFRixPQUFPLENBQ0wsb0JBQW9CO1FBQ3BCLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRTtZQUNyQixDQUFDLENBQUMsNEJBQTRCLENBQUMsT0FBTyxFQUFFLFlBQVksQ0FBQztZQUNyRCxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FDWixDQUFDO0FBQ0osQ0FBQztBQUVEOzs7Ozs7Ozs7R0FTRztBQUNILFNBQVMsd0JBQXdCLENBQy9CLE9BQXVCLEVBQ3ZCLG9CQUE2QjtJQUU3QixLQUFLLE1BQU0sZ0JBQWdCLElBQUksT0FBTyxDQUFDLG1CQUFtQixDQUN4RCxvQkFBb0IsRUFDcEIsYUFBYSxDQUFDLElBQUksQ0FDbkIsRUFBRSxDQUFDO1FBQ0YsTUFBTSxvQkFBb0IsR0FBRyx1QkFBdUIsQ0FDbEQsT0FBTyxFQUNQLE9BQU8sQ0FBQyx3QkFBd0IsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUNuRCxDQUFDO1FBRUYsSUFBSSxvQkFBb0IsS0FBSyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3BDLE9BQU8sb0JBQW9CLENBQUM7UUFDOUIsQ0FBQztJQUNILENBQUM7SUFFRCxPQUFPLEtBQUssQ0FBQyxDQUFDO0FBQ2hCLENBQUM7QUFFRCxPQUFPLEVBQ0wsbUJBQW1CLEVBQ25CLHVCQUF1QixFQUN2Qix3QkFBd0IsR0FDekIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlICogYXMgdHMgZnJvbSBcInR5cGVzY3JpcHRcIjtcclxuXHJcbmltcG9ydCB7XHJcbiAgaXNNZXRob2REZWNsYXJhdGlvbixcclxuICBpc01ldGhvZFNpZ25hdHVyZSxcclxuICBpc1BhcmFtZXRlcixcclxuICBpc1Byb3BlcnR5RGVjbGFyYXRpb24sXHJcbiAgaXNQcm9wZXJ0eVNpZ25hdHVyZSxcclxuICBTaWduYXR1cmVLaW5kLFxyXG4gIFN5bWJvbEZsYWdzLFxyXG59IGZyb20gXCJ0eXBlc2NyaXB0XCI7XHJcblxyXG5pbXBvcnQgdHlwZSB7IE91dGVyQ2FzdENvbnRleHQgfSBmcm9tIFwiLi90eXBlc1wiO1xyXG5cclxuLyoqIE1pbmltYWwgc3ltYm9sLWZsYWcgc2hhcGUgdXNlZCBieSB1bml0LXRlc3QgZG91Ymxlcy4gKi9cclxuaW50ZXJmYWNlIFN5bWJvbFdpdGhPcHRpb25hbEZsYWdzIHtcclxuICAvKiogT3B0aW9uYWwgbnVtZXJpYyBmbGFnIGJpdHNldCBzdXBwbGllZCBieSB0ZXN0IGRvdWJsZXMuICovXHJcbiAgZmxhZ3M/OiBudW1iZXI7XHJcblxyXG4gIC8qKiBPcHRpb25hbCBnZXR0ZXIgdXNlZCBieSByZWFsIFR5cGVTY3JpcHQgc3ltYm9scy4gKi9cclxuICBnZXRGbGFncz86ICgpID0+IG51bWJlcjtcclxufVxyXG5cclxuLyoqXHJcbiAqIFNlbGVjdHMgYSBzaW5nbGUgb2JqZWN0LWxpa2UgYnJhbmNoIGZyb20gYSB1bmlvbiB3aGVuIG9uZSBleGlzdHMuXHJcbiAqIEBwYXJhbSBjaGVja2VyIFR5cGVTY3JpcHQgdHlwZSBjaGVja2VyIGluc3RhbmNlLlxyXG4gKiBAcGFyYW0gdW5pb25UeXBlIFVuaW9uIHR5cGUgdG8gaW5zcGVjdC5cclxuICogQHJldHVybnMgVGhlIHNpbmdsZSBvYmplY3QtbGlrZSBicmFuY2ggd2hlbiB0aGUgdW5pb24gaXMgdW5hbWJpZ3VvdXMuXHJcbiAqIEBleGFtcGxlXHJcbiAqIGBgYHR5cGVzY3JpcHRcclxuICogY29uc3QgYnJhbmNoID0gZ2V0U2luZ2xlVW5pb25PYmplY3RMaWtlVHlwZShjaGVja2VyLCB1bmlvblR5cGUpO1xyXG4gKiBgYGBcclxuICovXHJcbmZ1bmN0aW9uIGdldFNpbmdsZVVuaW9uT2JqZWN0TGlrZVR5cGUoXHJcbiAgY2hlY2tlcjogdHMuVHlwZUNoZWNrZXIsXHJcbiAgdW5pb25UeXBlOiB0cy5VbmlvblR5cGUsXHJcbik6IHRzLlR5cGUgfCB1bmRlZmluZWQge1xyXG4gIGNvbnN0IG9iamVjdExpa2VUeXBlcyA9IHVuaW9uVHlwZS50eXBlcy5maWx0ZXIoKHR5cGUpID0+XHJcbiAgICBoYXNPYmplY3RTaGFwZShjaGVja2VyLCB0eXBlKSxcclxuICApO1xyXG5cclxuICByZXR1cm4gb2JqZWN0TGlrZVR5cGVzLmxlbmd0aCA9PT0gMSA/IG9iamVjdExpa2VUeXBlc1swXSA6IHZvaWQgMDtcclxufVxyXG5cclxuLyoqXHJcbiAqIERldGVjdHMgd2hldGhlciBhIFR5cGVTY3JpcHQgdHlwZSBoYXMgYW4gb2JqZWN0LWxpa2Ugc3VyZmFjZS5cclxuICogQHBhcmFtIGNoZWNrZXIgVHlwZVNjcmlwdCB0eXBlIGNoZWNrZXIgaW5zdGFuY2UuXHJcbiAqIEBwYXJhbSB0YXJnZXRUeXBlIENhbmRpZGF0ZSB0YXJnZXQgdHlwZS5cclxuICogQHJldHVybnMgVHJ1ZSB3aGVuIHRoZSB0eXBlIGV4cG9zZXMgcHJvcGVydGllcyBvciBjYWxsYWJsZSBzaWduYXR1cmVzLlxyXG4gKiBAZXhhbXBsZVxyXG4gKiBgYGB0eXBlc2NyaXB0XHJcbiAqIGNvbnN0IG9iamVjdExpa2UgPSBoYXNPYmplY3RTaGFwZShjaGVja2VyLCB0YXJnZXRUeXBlKTtcclxuICogYGBgXHJcbiAqL1xyXG5mdW5jdGlvbiBoYXNPYmplY3RTaGFwZShjaGVja2VyOiB0cy5UeXBlQ2hlY2tlciwgdGFyZ2V0VHlwZTogdHMuVHlwZSk6IGJvb2xlYW4ge1xyXG4gIHJldHVybiAoXHJcbiAgICBjaGVja2VyLmdldFByb3BlcnRpZXNPZlR5cGUodGFyZ2V0VHlwZSkubGVuZ3RoID4gMCB8fFxyXG4gICAgY2hlY2tlci5nZXRTaWduYXR1cmVzT2ZUeXBlKHRhcmdldFR5cGUsIFNpZ25hdHVyZUtpbmQuQ2FsbCkubGVuZ3RoID4gMCB8fFxyXG4gICAgY2hlY2tlci5nZXRTaWduYXR1cmVzT2ZUeXBlKHRhcmdldFR5cGUsIFNpZ25hdHVyZUtpbmQuQ29uc3RydWN0KS5sZW5ndGggPiAwXHJcbiAgKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIENoZWNrcyB3aGV0aGVyIGEgVHlwZVNjcmlwdCBzeW1ib2wgZmxhZyBpcyBwcmVzZW50IHdpdGhvdXQgdXNpbmcgYml0d2lzZSBzeW50YXguXHJcbiAqIEBwYXJhbSBmbGFncyBTeW1ib2wgZmxhZyBiaXRzZXQgdG8gaW5zcGVjdC5cclxuICogQHBhcmFtIGZsYWcgU3BlY2lmaWMgZmxhZyB0byB0ZXN0LlxyXG4gKiBAcmV0dXJucyBUcnVlIHdoZW4gdGhlIGZsYWcgaXMgcHJlc2VudCBpbiB0aGUgYml0c2V0LlxyXG4gKiBAZXhhbXBsZVxyXG4gKiBgYGB0eXBlc2NyaXB0XHJcbiAqIGNvbnN0IGhhc09wdGlvbmFsRmxhZyA9IGhhc1N5bWJvbEZsYWcoU3ltYm9sRmxhZ3MuT3B0aW9uYWwsIFN5bWJvbEZsYWdzLk9wdGlvbmFsKTtcclxuICogYGBgXHJcbiAqL1xyXG5mdW5jdGlvbiBoYXNTeW1ib2xGbGFnKGZsYWdzOiBudW1iZXIsIGZsYWc6IFN5bWJvbEZsYWdzKTogYm9vbGVhbiB7XHJcbiAgcmV0dXJuIE1hdGgudHJ1bmMoZmxhZ3MgLyBmbGFnKSAlIDIgPT09IDE7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgYSBzeW1ib2wgcmVwcmVzZW50cyBhbiBvcHRpb25hbCBvYmplY3QgcHJvcGVydHkuXHJcbiAqIEBwYXJhbSBwcm9wZXJ0eVN5bWJvbCBQcm9wZXJ0eSBzeW1ib2wgYmVpbmcgY2hlY2tlZC5cclxuICogQHJldHVybnMgVHJ1ZSB3aGVuIGEgZGVjbGFyYXRpb24gbWFya3MgdGhlIHByb3BlcnR5IGFzIG9wdGlvbmFsLlxyXG4gKiBAZXhhbXBsZVxyXG4gKiBgYGB0eXBlc2NyaXB0XHJcbiAqIGNvbnN0IG9wdGlvbmFsID0gaXNPcHRpb25hbFN5bWJvbChwcm9wZXJ0eVN5bWJvbCk7XHJcbiAqIGBgYFxyXG4gKi9cclxuZnVuY3Rpb24gaXNPcHRpb25hbFN5bWJvbChwcm9wZXJ0eVN5bWJvbDogdHMuU3ltYm9sKTogYm9vbGVhbiB7XHJcbiAgY29uc3QgZmxhZ3MgPVxyXG4gICAgdHlwZW9mIHByb3BlcnR5U3ltYm9sLmdldEZsYWdzID09PSBcImZ1bmN0aW9uXCJcclxuICAgICAgPyBwcm9wZXJ0eVN5bWJvbC5nZXRGbGFncygpXHJcbiAgICAgIDogKChwcm9wZXJ0eVN5bWJvbCBhcyBTeW1ib2xXaXRoT3B0aW9uYWxGbGFncykuZmxhZ3MgPz8gMCk7XHJcblxyXG4gIGlmIChoYXNTeW1ib2xGbGFnKGZsYWdzLCBTeW1ib2xGbGFncy5PcHRpb25hbCkpIHtcclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgY29uc3QgZGVjbGFyYXRpb25zID0gcHJvcGVydHlTeW1ib2wuZ2V0RGVjbGFyYXRpb25zKCkgPz8gW107XHJcblxyXG4gIHJldHVybiBkZWNsYXJhdGlvbnMuc29tZSgoZGVjbGFyYXRpb24pID0+IHtcclxuICAgIGlmIChcclxuICAgICAgaXNQYXJhbWV0ZXIoZGVjbGFyYXRpb24pIHx8XHJcbiAgICAgIGlzUHJvcGVydHlEZWNsYXJhdGlvbihkZWNsYXJhdGlvbikgfHxcclxuICAgICAgaXNQcm9wZXJ0eVNpZ25hdHVyZShkZWNsYXJhdGlvbikgfHxcclxuICAgICAgaXNNZXRob2REZWNsYXJhdGlvbihkZWNsYXJhdGlvbikgfHxcclxuICAgICAgaXNNZXRob2RTaWduYXR1cmUoZGVjbGFyYXRpb24pXHJcbiAgICApIHtcclxuICAgICAgcmV0dXJuIGRlY2xhcmF0aW9uLnF1ZXN0aW9uVG9rZW4gIT09IHZvaWQgMDtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfSk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIG9iamVjdCBsaXRlcmFsIHN0aWxsIG5lZWRzIGFuIG91dGVyIGNhc3QuXHJcbiAqIEBwYXJhbSBjb250ZXh0IERhdGEgdXNlZCB0byBkZWNpZGUgd2hldGhlciB0aGUgZnVsbCBvYmplY3QgbmVlZHMgY2FzdGluZy5cclxuICogQHJldHVybnMgVHJ1ZSB3aGVuIHRoZSBmdWxsIG9iamVjdCBzdGlsbCBuZWVkcyBjYXN0aW5nLlxyXG4gKiBAZXhhbXBsZVxyXG4gKiBgYGB0eXBlc2NyaXB0XHJcbiAqIGNvbnN0IG5lZWRzT3V0ZXJDYXN0ID0gaXNPdXRlckNhc3RSZXF1aXJlZChjb250ZXh0KTtcclxuICogYGBgXHJcbiAqL1xyXG5mdW5jdGlvbiBpc091dGVyQ2FzdFJlcXVpcmVkKGNvbnRleHQ6IE91dGVyQ2FzdENvbnRleHQpOiBib29sZWFuIHtcclxuICBjb25zdCB7IGNoZWNrZXIsIHByb3BlcnR5TmFtZXMsIHRhcmdldFR5cGUgfSA9IGNvbnRleHQ7XHJcblxyXG4gIGlmIChjaGVja2VyLmdldFNpZ25hdHVyZXNPZlR5cGUodGFyZ2V0VHlwZSwgU2lnbmF0dXJlS2luZC5DYWxsKS5sZW5ndGggPiAwKSB7XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIGlmIChcclxuICAgIGNoZWNrZXIuZ2V0U2lnbmF0dXJlc09mVHlwZSh0YXJnZXRUeXBlLCBTaWduYXR1cmVLaW5kLkNvbnN0cnVjdCkubGVuZ3RoID4gMFxyXG4gICkge1xyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gY2hlY2tlclxyXG4gICAgLmdldFByb3BlcnRpZXNPZlR5cGUodGFyZ2V0VHlwZSlcclxuICAgIC5zb21lKFxyXG4gICAgICAocHJvcGVydHlTeW1ib2wpID0+XHJcbiAgICAgICAgIWlzT3B0aW9uYWxTeW1ib2wocHJvcGVydHlTeW1ib2wpICYmXHJcbiAgICAgICAgIXByb3BlcnR5TmFtZXMuaGFzKHByb3BlcnR5U3ltYm9sLmdldE5hbWUoKSksXHJcbiAgICApO1xyXG59XHJcblxyXG4vKipcclxuICogTmFycm93cyBhIHRhcmdldCB0eXBlIHRvIHRoZSBvYmplY3QtbGlrZSB0eXBlIHRoZSBmaXhlciBjYW4gcmVhc29uIGFib3V0LlxyXG4gKiBAcGFyYW0gY2hlY2tlciBUeXBlU2NyaXB0IHR5cGUgY2hlY2tlciBpbnN0YW5jZS5cclxuICogQHBhcmFtIHRhcmdldFR5cGUgQ2FuZGlkYXRlIHRhcmdldCB0eXBlLlxyXG4gKiBAcmV0dXJucyBPYmplY3QtbGlrZSB0eXBlIHdoZW4gdGhlIHRhcmdldCBjYW4gYmUgbm9ybWFsaXplZCBzYWZlbHkuXHJcbiAqIEBleGFtcGxlXHJcbiAqIGBgYHR5cGVzY3JpcHRcclxuICogY29uc3Qgbm9ybWFsaXplZFR5cGUgPSBub3JtYWxpemVPYmplY3RMaWtlVHlwZShjaGVja2VyLCB0YXJnZXRUeXBlKTtcclxuICogYGBgXHJcbiAqL1xyXG5mdW5jdGlvbiBub3JtYWxpemVPYmplY3RMaWtlVHlwZShcclxuICBjaGVja2VyOiB0cy5UeXBlQ2hlY2tlcixcclxuICB0YXJnZXRUeXBlOiB0cy5UeXBlIHwgdW5kZWZpbmVkLFxyXG4pOiB0cy5UeXBlIHwgdW5kZWZpbmVkIHtcclxuICBpZiAodGFyZ2V0VHlwZSA9PT0gdm9pZCAwKSB7XHJcbiAgICByZXR1cm4gdm9pZCAwO1xyXG4gIH1cclxuXHJcbiAgY29uc3QgcmVzb2x2ZWRUeXBlID0gY2hlY2tlci5nZXRBd2FpdGVkVHlwZSh0YXJnZXRUeXBlKTtcclxuXHJcbiAgaWYgKHJlc29sdmVkVHlwZSA9PT0gdm9pZCAwKSB7XHJcbiAgICByZXR1cm4gdm9pZCAwO1xyXG4gIH1cclxuXHJcbiAgY29uc3QgZGlyZWN0T2JqZWN0TGlrZVR5cGUgPSBbcmVzb2x2ZWRUeXBlXS5maW5kKCh0eXBlKSA9PlxyXG4gICAgaGFzT2JqZWN0U2hhcGUoY2hlY2tlciwgdHlwZSksXHJcbiAgKTtcclxuXHJcbiAgcmV0dXJuIChcclxuICAgIGRpcmVjdE9iamVjdExpa2VUeXBlID8/XHJcbiAgICAocmVzb2x2ZWRUeXBlLmlzVW5pb24oKVxyXG4gICAgICA/IGdldFNpbmdsZVVuaW9uT2JqZWN0TGlrZVR5cGUoY2hlY2tlciwgcmVzb2x2ZWRUeXBlKVxyXG4gICAgICA6IHZvaWQgMClcclxuICApO1xyXG59XHJcblxyXG4vKipcclxuICogUmVzb2x2ZXMgdGhlIGZhY3RvcnkgZnVuY3Rpb24ncyByZXR1cm5lZCBvYmplY3QgdHlwZSBmcm9tIGl0cyBjYWxsIHNpZ25hdHVyZXMuXHJcbiAqIEBwYXJhbSBjaGVja2VyIFR5cGVTY3JpcHQgdHlwZSBjaGVja2VyIGluc3RhbmNlLlxyXG4gKiBAcGFyYW0gZmFjdG9yeVBhcmFtZXRlclR5cGUgVHlwZSBvZiB0aGUgZmFjdG9yeSBjYWxsYmFjayBwYXJhbWV0ZXIuXHJcbiAqIEByZXR1cm5zIE5vcm1hbGl6ZWQgb2JqZWN0LWxpa2UgcmV0dXJuIHR5cGUgd2hlbiBvbmUgaXMgYXZhaWxhYmxlLlxyXG4gKiBAZXhhbXBsZVxyXG4gKiBgYGB0eXBlc2NyaXB0XHJcbiAqIGNvbnN0IHJldHVyblR5cGUgPSByZXNvbHZlRmFjdG9yeVJldHVyblR5cGUoY2hlY2tlciwgZmFjdG9yeVBhcmFtZXRlclR5cGUpO1xyXG4gKiBgYGBcclxuICovXHJcbmZ1bmN0aW9uIHJlc29sdmVGYWN0b3J5UmV0dXJuVHlwZShcclxuICBjaGVja2VyOiB0cy5UeXBlQ2hlY2tlcixcclxuICBmYWN0b3J5UGFyYW1ldGVyVHlwZTogdHMuVHlwZSxcclxuKTogdHMuVHlwZSB8IHVuZGVmaW5lZCB7XHJcbiAgZm9yIChjb25zdCBmYWN0b3J5U2lnbmF0dXJlIG9mIGNoZWNrZXIuZ2V0U2lnbmF0dXJlc09mVHlwZShcclxuICAgIGZhY3RvcnlQYXJhbWV0ZXJUeXBlLFxyXG4gICAgU2lnbmF0dXJlS2luZC5DYWxsLFxyXG4gICkpIHtcclxuICAgIGNvbnN0IG5vcm1hbGl6ZWRSZXR1cm5UeXBlID0gbm9ybWFsaXplT2JqZWN0TGlrZVR5cGUoXHJcbiAgICAgIGNoZWNrZXIsXHJcbiAgICAgIGNoZWNrZXIuZ2V0UmV0dXJuVHlwZU9mU2lnbmF0dXJlKGZhY3RvcnlTaWduYXR1cmUpLFxyXG4gICAgKTtcclxuXHJcbiAgICBpZiAobm9ybWFsaXplZFJldHVyblR5cGUgIT09IHZvaWQgMCkge1xyXG4gICAgICByZXR1cm4gbm9ybWFsaXplZFJldHVyblR5cGU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZXR1cm4gdm9pZCAwO1xyXG59XHJcblxyXG5leHBvcnQge1xyXG4gIGlzT3V0ZXJDYXN0UmVxdWlyZWQsXHJcbiAgbm9ybWFsaXplT2JqZWN0TGlrZVR5cGUsXHJcbiAgcmVzb2x2ZUZhY3RvcnlSZXR1cm5UeXBlLFxyXG59O1xyXG4iXX0=
|