@tsonic/emitter 0.0.76 → 0.0.78
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/dist/.tsbuildinfo +1 -1
- package/dist/array.test.js +8 -4
- package/dist/array.test.js.map +1 -1
- package/dist/core/format/backend-ast/invariants.test.js +5 -0
- package/dist/core/format/backend-ast/invariants.test.js.map +1 -1
- package/dist/core/format/backend-ast/printer-colon-detection.d.ts.map +1 -1
- package/dist/core/format/backend-ast/printer-colon-detection.js +2 -0
- package/dist/core/format/backend-ast/printer-colon-detection.js.map +1 -1
- package/dist/core/format/backend-ast/printer-expressions.d.ts.map +1 -1
- package/dist/core/format/backend-ast/printer-expressions.js +4 -0
- package/dist/core/format/backend-ast/printer-expressions.js.map +1 -1
- package/dist/core/format/backend-ast/printer-precedence.d.ts.map +1 -1
- package/dist/core/format/backend-ast/printer-precedence.js +1 -0
- package/dist/core/format/backend-ast/printer-precedence.js.map +1 -1
- package/dist/core/format/backend-ast/types/expression-ast.d.ts +5 -1
- package/dist/core/format/backend-ast/types/expression-ast.d.ts.map +1 -1
- package/dist/core/format/backend-ast/utils.d.ts +3 -0
- package/dist/core/format/backend-ast/utils.d.ts.map +1 -1
- package/dist/core/format/backend-ast/utils.js +39 -0
- package/dist/core/format/backend-ast/utils.js.map +1 -1
- package/dist/core/format/backend-ast/utils.test.js +13 -1
- package/dist/core/format/backend-ast/utils.test.js.map +1 -1
- package/dist/core/format/local-names.d.ts.map +1 -1
- package/dist/core/format/local-names.js +3 -2
- package/dist/core/format/local-names.js.map +1 -1
- package/dist/core/format/local-names.test.js +7 -6
- package/dist/core/format/local-names.test.js.map +1 -1
- package/dist/core/format/module-emitter/orchestrator.d.ts.map +1 -1
- package/dist/core/format/module-emitter/orchestrator.js +3 -1
- package/dist/core/format/module-emitter/orchestrator.js.map +1 -1
- package/dist/core/format/module-emitter/static-container.d.ts.map +1 -1
- package/dist/core/format/module-emitter/static-container.js +2 -4
- package/dist/core/format/module-emitter/static-container.js.map +1 -1
- package/dist/core/module-emitter-cases/class-and-recursion.test.js +4 -1
- package/dist/core/module-emitter-cases/class-and-recursion.test.js.map +1 -1
- package/dist/core/module-emitter-cases/static-containers.test.js +113 -2
- package/dist/core/module-emitter-cases/static-containers.test.js.map +1 -1
- package/dist/core/semantic/adapt-result.d.ts +20 -0
- package/dist/core/semantic/adapt-result.d.ts.map +1 -0
- package/dist/core/semantic/adapt-result.js +30 -0
- package/dist/core/semantic/adapt-result.js.map +1 -0
- package/dist/core/semantic/array-expected-types.d.ts.map +1 -1
- package/dist/core/semantic/array-expected-types.js +1 -1
- package/dist/core/semantic/array-expected-types.js.map +1 -1
- package/dist/core/semantic/assignment-flow.d.ts.map +1 -1
- package/dist/core/semantic/assignment-flow.js +28 -4
- package/dist/core/semantic/assignment-flow.js.map +1 -1
- package/dist/core/semantic/async-wrapper-types.d.ts +1 -0
- package/dist/core/semantic/async-wrapper-types.d.ts.map +1 -1
- package/dist/core/semantic/async-wrapper-types.js +19 -1
- package/dist/core/semantic/async-wrapper-types.js.map +1 -1
- package/dist/core/semantic/boolean-condition-main.d.ts.map +1 -1
- package/dist/core/semantic/boolean-condition-main.js +6 -2
- package/dist/core/semantic/boolean-condition-main.js.map +1 -1
- package/dist/core/semantic/boolean-context.test.js +2 -1
- package/dist/core/semantic/boolean-context.test.js.map +1 -1
- package/dist/core/semantic/broad-array-storage.d.ts.map +1 -1
- package/dist/core/semantic/broad-array-storage.js +2 -5
- package/dist/core/semantic/broad-array-storage.js.map +1 -1
- package/dist/core/semantic/broad-object-types.d.ts +1 -0
- package/dist/core/semantic/broad-object-types.d.ts.map +1 -1
- package/dist/core/semantic/broad-object-types.js +39 -0
- package/dist/core/semantic/broad-object-types.js.map +1 -1
- package/dist/core/semantic/clr-type-identity.d.ts +1 -2
- package/dist/core/semantic/clr-type-identity.d.ts.map +1 -1
- package/dist/core/semantic/clr-type-identity.js +3 -65
- package/dist/core/semantic/clr-type-identity.js.map +1 -1
- package/dist/core/semantic/comparable-types.d.ts.map +1 -1
- package/dist/core/semantic/comparable-types.js +61 -27
- package/dist/core/semantic/comparable-types.js.map +1 -1
- package/dist/core/semantic/comparable-types.test.js.map +1 -1
- package/dist/core/semantic/deterministic-type-keys.d.ts.map +1 -1
- package/dist/core/semantic/deterministic-type-keys.js +90 -37
- package/dist/core/semantic/deterministic-type-keys.js.map +1 -1
- package/dist/core/semantic/deterministic-type-keys.test.d.ts +2 -0
- package/dist/core/semantic/deterministic-type-keys.test.d.ts.map +1 -0
- package/dist/core/semantic/deterministic-type-keys.test.js +38 -0
- package/dist/core/semantic/deterministic-type-keys.test.js.map +1 -0
- package/dist/core/semantic/direct-storage-ir-types.d.ts +1 -1
- package/dist/core/semantic/direct-storage-ir-types.d.ts.map +1 -1
- package/dist/core/semantic/direct-storage-ir-types.js +12 -3
- package/dist/core/semantic/direct-storage-ir-types.js.map +1 -1
- package/dist/core/semantic/direct-value-surfaces.d.ts.map +1 -1
- package/dist/core/semantic/direct-value-surfaces.js +166 -6
- package/dist/core/semantic/direct-value-surfaces.js.map +1 -1
- package/dist/core/semantic/direct-value-surfaces.test.js +69 -6
- package/dist/core/semantic/direct-value-surfaces.test.js.map +1 -1
- package/dist/core/semantic/expected-type-matching.d.ts.map +1 -1
- package/dist/core/semantic/expected-type-matching.js +4 -5
- package/dist/core/semantic/expected-type-matching.js.map +1 -1
- package/dist/core/semantic/implicit-interfaces.d.ts.map +1 -1
- package/dist/core/semantic/implicit-interfaces.js.map +1 -1
- package/dist/core/semantic/imports-cases/basic-and-local.test.js +8 -8
- package/dist/core/semantic/imports-cases/basic-and-local.test.js.map +1 -1
- package/dist/core/semantic/imports.js +3 -2
- package/dist/core/semantic/imports.js.map +1 -1
- package/dist/core/semantic/index.d.ts +1 -1
- package/dist/core/semantic/index.d.ts.map +1 -1
- package/dist/core/semantic/index.js +1 -1
- package/dist/core/semantic/index.js.map +1 -1
- package/dist/core/semantic/instanceof-predicate-refinements.d.ts.map +1 -1
- package/dist/core/semantic/instanceof-predicate-refinements.js +2 -10
- package/dist/core/semantic/instanceof-predicate-refinements.js.map +1 -1
- package/dist/core/semantic/materialized-narrowing.d.ts +1 -0
- package/dist/core/semantic/materialized-narrowing.d.ts.map +1 -1
- package/dist/core/semantic/materialized-narrowing.js +170 -34
- package/dist/core/semantic/materialized-narrowing.js.map +1 -1
- package/dist/core/semantic/materialized-narrowing.test.js +24 -6
- package/dist/core/semantic/materialized-narrowing.test.js.map +1 -1
- package/dist/core/semantic/module-map.d.ts.map +1 -1
- package/dist/core/semantic/module-map.js +4 -6
- package/dist/core/semantic/module-map.js.map +1 -1
- package/dist/core/semantic/module-type-collisions.d.ts +7 -0
- package/dist/core/semantic/module-type-collisions.d.ts.map +1 -0
- package/dist/core/semantic/module-type-collisions.js +24 -0
- package/dist/core/semantic/module-type-collisions.js.map +1 -0
- package/dist/core/semantic/mutable-storage-helpers.d.ts +1 -1
- package/dist/core/semantic/mutable-storage-helpers.d.ts.map +1 -1
- package/dist/core/semantic/mutable-storage-helpers.js +5 -12
- package/dist/core/semantic/mutable-storage-helpers.js.map +1 -1
- package/dist/core/semantic/naming-collisions.d.ts.map +1 -1
- package/dist/core/semantic/naming-collisions.js +13 -3
- package/dist/core/semantic/naming-collisions.js.map +1 -1
- package/dist/core/semantic/narrowed-expression-types.d.ts +3 -1
- package/dist/core/semantic/narrowed-expression-types.d.ts.map +1 -1
- package/dist/core/semantic/narrowed-expression-types.js +139 -17
- package/dist/core/semantic/narrowed-expression-types.js.map +1 -1
- package/dist/core/semantic/narrowed-union-resolution.d.ts.map +1 -1
- package/dist/core/semantic/narrowed-union-resolution.js +14 -3
- package/dist/core/semantic/narrowed-union-resolution.js.map +1 -1
- package/dist/core/semantic/narrowing-builder-core.d.ts +3 -2
- package/dist/core/semantic/narrowing-builder-core.d.ts.map +1 -1
- package/dist/core/semantic/narrowing-builder-core.js +85 -126
- package/dist/core/semantic/narrowing-builder-core.js.map +1 -1
- package/dist/core/semantic/narrowing-builder-core.test.js +3 -2
- package/dist/core/semantic/narrowing-builder-core.test.js.map +1 -1
- package/dist/core/semantic/narrowing-builder-unions.d.ts.map +1 -1
- package/dist/core/semantic/narrowing-builder-unions.js +43 -7
- package/dist/core/semantic/narrowing-builder-unions.js.map +1 -1
- package/dist/core/semantic/narrowing-builders.d.ts +1 -1
- package/dist/core/semantic/narrowing-builders.d.ts.map +1 -1
- package/dist/core/semantic/narrowing-builders.js +1 -1
- package/dist/core/semantic/narrowing-builders.js.map +1 -1
- package/dist/core/semantic/narrowing-refinements.d.ts +1 -1
- package/dist/core/semantic/narrowing-refinements.d.ts.map +1 -1
- package/dist/core/semantic/narrowing-refinements.js +1 -1
- package/dist/core/semantic/narrowing-refinements.js.map +1 -1
- package/dist/core/semantic/nullable-typeof-refinements.d.ts +1 -5
- package/dist/core/semantic/nullable-typeof-refinements.d.ts.map +1 -1
- package/dist/core/semantic/nullable-typeof-refinements.js +136 -88
- package/dist/core/semantic/nullable-typeof-refinements.js.map +1 -1
- package/dist/core/semantic/nullish-value-helpers.d.ts +1 -1
- package/dist/core/semantic/nullish-value-helpers.d.ts.map +1 -1
- package/dist/core/semantic/nullish-value-helpers.js +18 -9
- package/dist/core/semantic/nullish-value-helpers.js.map +1 -1
- package/dist/core/semantic/runtime-materialization-targets.js +1 -1
- package/dist/core/semantic/runtime-materialization-targets.js.map +1 -1
- package/dist/core/semantic/runtime-reification.d.ts +1 -0
- package/dist/core/semantic/runtime-reification.d.ts.map +1 -1
- package/dist/core/semantic/runtime-reification.js +141 -35
- package/dist/core/semantic/runtime-reification.js.map +1 -1
- package/dist/core/semantic/runtime-union-family-preservation.js +1 -1
- package/dist/core/semantic/runtime-union-family-preservation.js.map +1 -1
- package/dist/core/semantic/runtime-union-frame.d.ts +6 -0
- package/dist/core/semantic/runtime-union-frame.d.ts.map +1 -0
- package/dist/core/semantic/runtime-union-frame.js +130 -0
- package/dist/core/semantic/runtime-union-frame.js.map +1 -0
- package/dist/core/semantic/runtime-union-matching.d.ts.map +1 -1
- package/dist/core/semantic/runtime-union-matching.js +13 -0
- package/dist/core/semantic/runtime-union-matching.js.map +1 -1
- package/dist/core/semantic/runtime-union-member-mapping.test.js +1 -1
- package/dist/core/semantic/runtime-union-member-mapping.test.js.map +1 -1
- package/dist/core/semantic/runtime-union-ordering.d.ts.map +1 -1
- package/dist/core/semantic/runtime-union-ordering.js +10 -22
- package/dist/core/semantic/runtime-union-ordering.js.map +1 -1
- package/dist/core/semantic/runtime-union-projection.d.ts.map +1 -1
- package/dist/core/semantic/runtime-union-projection.js +23 -7
- package/dist/core/semantic/runtime-union-projection.js.map +1 -1
- package/dist/core/semantic/runtime-union-projection.test.js +19 -1
- package/dist/core/semantic/runtime-union-projection.test.js.map +1 -1
- package/dist/core/semantic/runtime-union-registry.js +13 -13
- package/dist/core/semantic/runtime-union-registry.js.map +1 -1
- package/dist/core/semantic/runtime-unions.d.ts +3 -4
- package/dist/core/semantic/runtime-unions.d.ts.map +1 -1
- package/dist/core/semantic/runtime-unions.js +46 -145
- package/dist/core/semantic/runtime-unions.js.map +1 -1
- package/dist/core/semantic/runtime-unions.test.js +12 -7
- package/dist/core/semantic/runtime-unions.test.js.map +1 -1
- package/dist/core/semantic/semantic-union-members.d.ts.map +1 -1
- package/dist/core/semantic/semantic-union-members.js +1 -1
- package/dist/core/semantic/semantic-union-members.js.map +1 -1
- package/dist/core/semantic/storage-erased-adaptation.d.ts.map +1 -1
- package/dist/core/semantic/storage-erased-adaptation.js +8 -11
- package/dist/core/semantic/storage-erased-adaptation.js.map +1 -1
- package/dist/core/semantic/storage-erased-adaptation.test.js +4 -1
- package/dist/core/semantic/storage-erased-adaptation.test.js.map +1 -1
- package/dist/core/semantic/storage-types.d.ts +3 -0
- package/dist/core/semantic/storage-types.d.ts.map +1 -1
- package/dist/core/semantic/storage-types.js +17 -4
- package/dist/core/semantic/storage-types.js.map +1 -1
- package/dist/core/semantic/structural-shape-matching.d.ts +5 -1
- package/dist/core/semantic/structural-shape-matching.d.ts.map +1 -1
- package/dist/core/semantic/structural-shape-matching.js +29 -4
- package/dist/core/semantic/structural-shape-matching.js.map +1 -1
- package/dist/core/semantic/surface-member-semantics.d.ts +14 -0
- package/dist/core/semantic/surface-member-semantics.d.ts.map +1 -0
- package/dist/core/semantic/surface-member-semantics.js +41 -0
- package/dist/core/semantic/surface-member-semantics.js.map +1 -0
- package/dist/core/semantic/symbol-types.d.ts +2 -9
- package/dist/core/semantic/symbol-types.d.ts.map +1 -1
- package/dist/core/semantic/symbol-types.js +7 -11
- package/dist/core/semantic/symbol-types.js.map +1 -1
- package/dist/core/semantic/ternary-guards.d.ts +1 -1
- package/dist/core/semantic/ternary-guards.d.ts.map +1 -1
- package/dist/core/semantic/ternary-guards.js +2 -1
- package/dist/core/semantic/ternary-guards.js.map +1 -1
- package/dist/core/semantic/truthiness-evaluation.d.ts.map +1 -1
- package/dist/core/semantic/truthiness-evaluation.js +3 -3
- package/dist/core/semantic/truthiness-evaluation.js.map +1 -1
- package/dist/core/semantic/type-compatibility.d.ts +4 -2
- package/dist/core/semantic/type-compatibility.d.ts.map +1 -1
- package/dist/core/semantic/type-compatibility.js +62 -2
- package/dist/core/semantic/type-compatibility.js.map +1 -1
- package/dist/core/semantic/type-domains.d.ts +17 -0
- package/dist/core/semantic/type-domains.d.ts.map +1 -0
- package/dist/core/semantic/type-domains.js +7 -0
- package/dist/core/semantic/type-domains.js.map +1 -0
- package/dist/core/semantic/type-equivalence.d.ts.map +1 -1
- package/dist/core/semantic/type-equivalence.js +12 -7
- package/dist/core/semantic/type-equivalence.js.map +1 -1
- package/dist/core/semantic/type-equivalence.test.js +34 -0
- package/dist/core/semantic/type-equivalence.test.js.map +1 -1
- package/dist/core/semantic/type-resolution-cases/array-like-element.test.js +13 -4
- package/dist/core/semantic/type-resolution-cases/array-like-element.test.js.map +1 -1
- package/dist/core/semantic/type-resolution-cases/helpers.d.ts +2 -2
- package/dist/core/semantic/type-resolution-cases/helpers.d.ts.map +1 -1
- package/dist/core/semantic/type-resolution-cases/helpers.js +2 -2
- package/dist/core/semantic/type-resolution-cases/helpers.js.map +1 -1
- package/dist/core/semantic/type-resolution-cases/typeof-narrowing.test.d.ts +2 -0
- package/dist/core/semantic/type-resolution-cases/typeof-narrowing.test.d.ts.map +1 -0
- package/dist/core/semantic/type-resolution-cases/typeof-narrowing.test.js +36 -0
- package/dist/core/semantic/type-resolution-cases/typeof-narrowing.test.js.map +1 -0
- package/dist/core/semantic/type-resolution.test.d.ts +1 -1
- package/dist/core/semantic/type-resolution.test.d.ts.map +1 -1
- package/dist/core/semantic/type-resolution.test.js +1 -1
- package/dist/core/semantic/type-resolution.test.js.map +1 -1
- package/dist/core/semantic/type-substitution.d.ts.map +1 -1
- package/dist/core/semantic/type-substitution.js +2 -1
- package/dist/core/semantic/type-substitution.js.map +1 -1
- package/dist/core/semantic/typeof-comparison.d.ts +14 -0
- package/dist/core/semantic/typeof-comparison.d.ts.map +1 -0
- package/dist/core/semantic/typeof-comparison.js +47 -0
- package/dist/core/semantic/typeof-comparison.js.map +1 -0
- package/dist/core/semantic/union-predicate-matching.d.ts.map +1 -1
- package/dist/core/semantic/union-predicate-matching.js +1 -1
- package/dist/core/semantic/union-predicate-matching.js.map +1 -1
- package/dist/core/semantic/union-semantics.js +1 -1
- package/dist/core/semantic/union-semantics.js.map +1 -1
- package/dist/core/semantic/union-typeof-matching.d.ts.map +1 -1
- package/dist/core/semantic/union-typeof-matching.js +72 -22
- package/dist/core/semantic/union-typeof-matching.js.map +1 -1
- package/dist/core/semantic/variable-type-resolution.d.ts +1 -0
- package/dist/core/semantic/variable-type-resolution.d.ts.map +1 -1
- package/dist/core/semantic/variable-type-resolution.js +62 -6
- package/dist/core/semantic/variable-type-resolution.js.map +1 -1
- package/dist/duplicate-type-suppression.d.ts.map +1 -1
- package/dist/duplicate-type-suppression.js.map +1 -1
- package/dist/emitter-types/context.d.ts +1 -0
- package/dist/emitter-types/context.d.ts.map +1 -1
- package/dist/emitter-types/context.js +13 -1
- package/dist/emitter-types/context.js.map +1 -1
- package/dist/emitter-types/core.d.ts +10 -9
- package/dist/emitter-types/core.d.ts.map +1 -1
- package/dist/emitter-types/fqn.d.ts +0 -1
- package/dist/emitter-types/fqn.d.ts.map +1 -1
- package/dist/emitter-types/fqn.js +0 -1
- package/dist/emitter-types/fqn.js.map +1 -1
- package/dist/emitter-types/index.d.ts +1 -1
- package/dist/emitter-types/index.d.ts.map +1 -1
- package/dist/emitter-types/index.js +1 -1
- package/dist/emitter-types/index.js.map +1 -1
- package/dist/emitter.d.ts +3 -3
- package/dist/emitter.d.ts.map +1 -1
- package/dist/emitter.js +1 -7
- package/dist/emitter.js.map +1 -1
- package/dist/expression-emitter.d.ts.map +1 -1
- package/dist/expression-emitter.js +7 -2
- package/dist/expression-emitter.js.map +1 -1
- package/dist/expressions/access-binding.d.ts.map +1 -1
- package/dist/expressions/access-binding.js +38 -66
- package/dist/expressions/access-binding.js.map +1 -1
- package/dist/expressions/access-computed.d.ts.map +1 -1
- package/dist/expressions/access-computed.js +10 -15
- package/dist/expressions/access-computed.js.map +1 -1
- package/dist/expressions/access-function-length.d.ts +13 -0
- package/dist/expressions/access-function-length.d.ts.map +1 -0
- package/dist/expressions/access-function-length.js +115 -0
- package/dist/expressions/access-function-length.js.map +1 -0
- package/dist/expressions/access-length.d.ts +5 -11
- package/dist/expressions/access-length.d.ts.map +1 -1
- package/dist/expressions/access-length.js +18 -242
- package/dist/expressions/access-length.js.map +1 -1
- package/dist/expressions/access-length.test.js +17 -0
- package/dist/expressions/access-length.test.js.map +1 -1
- package/dist/expressions/access-property.d.ts +1 -2
- package/dist/expressions/access-property.d.ts.map +1 -1
- package/dist/expressions/access-property.js +20 -94
- package/dist/expressions/access-property.js.map +1 -1
- package/dist/expressions/access-resolution-receivers.d.ts.map +1 -1
- package/dist/expressions/access-resolution-receivers.js +24 -17
- package/dist/expressions/access-resolution-receivers.js.map +1 -1
- package/dist/expressions/access-resolution-types.d.ts.map +1 -1
- package/dist/expressions/access-resolution-types.js +7 -0
- package/dist/expressions/access-resolution-types.js.map +1 -1
- package/dist/expressions/access.d.ts +2 -2
- package/dist/expressions/access.d.ts.map +1 -1
- package/dist/expressions/access.js +11 -22
- package/dist/expressions/access.js.map +1 -1
- package/dist/expressions/architecture-invariants.test.js +112 -0
- package/dist/expressions/architecture-invariants.test.js.map +1 -1
- package/dist/expressions/await-normalization.d.ts.map +1 -1
- package/dist/expressions/await-normalization.js +53 -13
- package/dist/expressions/await-normalization.js.map +1 -1
- package/dist/expressions/awaitable-adaptation.d.ts +15 -0
- package/dist/expressions/awaitable-adaptation.d.ts.map +1 -0
- package/dist/expressions/awaitable-adaptation.js +174 -0
- package/dist/expressions/awaitable-adaptation.js.map +1 -0
- package/dist/expressions/calls/call-analysis.d.ts +0 -1
- package/dist/expressions/calls/call-analysis.d.ts.map +1 -1
- package/dist/expressions/calls/call-analysis.js +0 -7
- package/dist/expressions/calls/call-analysis.js.map +1 -1
- package/dist/expressions/calls/call-arguments-emit.d.ts.map +1 -1
- package/dist/expressions/calls/call-arguments-emit.js +236 -35
- package/dist/expressions/calls/call-arguments-emit.js.map +1 -1
- package/dist/expressions/calls/call-arguments-helpers.d.ts.map +1 -1
- package/dist/expressions/calls/call-arguments-helpers.js +2 -2
- package/dist/expressions/calls/call-arguments-helpers.js.map +1 -1
- package/dist/expressions/calls/call-array-interop.d.ts +1 -1
- package/dist/expressions/calls/call-array-interop.d.ts.map +1 -1
- package/dist/expressions/calls/call-array-interop.js +1 -1
- package/dist/expressions/calls/call-array-interop.js.map +1 -1
- package/dist/expressions/calls/call-array-mutation.d.ts +0 -1
- package/dist/expressions/calls/call-array-mutation.d.ts.map +1 -1
- package/dist/expressions/calls/call-array-mutation.js +9 -36
- package/dist/expressions/calls/call-array-mutation.js.map +1 -1
- package/dist/expressions/calls/call-array-wrapper.d.ts.map +1 -1
- package/dist/expressions/calls/call-array-wrapper.js +9 -12
- package/dist/expressions/calls/call-array-wrapper.js.map +1 -1
- package/dist/expressions/calls/call-emitter.d.ts +1 -1
- package/dist/expressions/calls/call-emitter.d.ts.map +1 -1
- package/dist/expressions/calls/call-emitter.js +85 -7
- package/dist/expressions/calls/call-emitter.js.map +1 -1
- package/dist/expressions/calls/call-json.d.ts +1 -1
- package/dist/expressions/calls/call-json.d.ts.map +1 -1
- package/dist/expressions/calls/call-json.js +50 -84
- package/dist/expressions/calls/call-json.js.map +1 -1
- package/dist/expressions/calls/call-promise-ir-types.d.ts.map +1 -1
- package/dist/expressions/calls/call-promise-ir-types.js.map +1 -1
- package/dist/expressions/calls/call-runtime-union-guards.d.ts.map +1 -1
- package/dist/expressions/calls/call-runtime-union-guards.js +10 -1
- package/dist/expressions/calls/call-runtime-union-guards.js.map +1 -1
- package/dist/expressions/calls/new-emitter-collections.d.ts +7 -4
- package/dist/expressions/calls/new-emitter-collections.d.ts.map +1 -1
- package/dist/expressions/calls/new-emitter-collections.js +64 -25
- package/dist/expressions/calls/new-emitter-collections.js.map +1 -1
- package/dist/expressions/calls/new-emitter.d.ts.map +1 -1
- package/dist/expressions/calls/new-emitter.js +4 -5
- package/dist/expressions/calls/new-emitter.js.map +1 -1
- package/dist/expressions/direct-storage-types.d.ts.map +1 -1
- package/dist/expressions/direct-storage-types.js +76 -15
- package/dist/expressions/direct-storage-types.js.map +1 -1
- package/dist/expressions/exact-comparison.d.ts.map +1 -1
- package/dist/expressions/exact-comparison.js +3 -1
- package/dist/expressions/exact-comparison.js.map +1 -1
- package/dist/expressions/expected-type-adaptation.d.ts +1 -1
- package/dist/expressions/expected-type-adaptation.d.ts.map +1 -1
- package/dist/expressions/expected-type-adaptation.js +164 -30
- package/dist/expressions/expected-type-adaptation.js.map +1 -1
- package/dist/expressions/expected-type-adaptation.test.js +81 -26
- package/dist/expressions/expected-type-adaptation.test.js.map +1 -1
- package/dist/expressions/identifier-storage/broad-storage-target.d.ts +4 -0
- package/dist/expressions/identifier-storage/broad-storage-target.d.ts.map +1 -0
- package/dist/expressions/identifier-storage/broad-storage-target.js +26 -0
- package/dist/expressions/identifier-storage/broad-storage-target.js.map +1 -0
- package/dist/expressions/identifier-storage/implicit-storage.d.ts +14 -0
- package/dist/expressions/identifier-storage/implicit-storage.d.ts.map +1 -0
- package/dist/expressions/identifier-storage/implicit-storage.js +44 -0
- package/dist/expressions/identifier-storage/implicit-storage.js.map +1 -0
- package/dist/expressions/identifier-storage/materialized-narrowed.d.ts +7 -0
- package/dist/expressions/identifier-storage/materialized-narrowed.d.ts.map +1 -0
- package/dist/expressions/identifier-storage/materialized-narrowed.js +92 -0
- package/dist/expressions/identifier-storage/materialized-narrowed.js.map +1 -0
- package/dist/expressions/identifier-storage/narrowed-storage-compatible.d.ts +14 -0
- package/dist/expressions/identifier-storage/narrowed-storage-compatible.d.ts.map +1 -0
- package/dist/expressions/identifier-storage/narrowed-storage-compatible.js +168 -0
- package/dist/expressions/identifier-storage/narrowed-storage-compatible.js.map +1 -0
- package/dist/expressions/identifier-storage/reified-storage.d.ts +7 -0
- package/dist/expressions/identifier-storage/reified-storage.d.ts.map +1 -0
- package/dist/expressions/identifier-storage/reified-storage.js +25 -0
- package/dist/expressions/identifier-storage/reified-storage.js.map +1 -0
- package/dist/expressions/identifier-storage/runtime-subset.d.ts +14 -0
- package/dist/expressions/identifier-storage/runtime-subset.d.ts.map +1 -0
- package/dist/expressions/identifier-storage/runtime-subset.js +100 -0
- package/dist/expressions/identifier-storage/runtime-subset.js.map +1 -0
- package/dist/expressions/identifier-storage/storage-compatible.d.ts +10 -0
- package/dist/expressions/identifier-storage/storage-compatible.d.ts.map +1 -0
- package/dist/expressions/identifier-storage/storage-compatible.js +76 -0
- package/dist/expressions/identifier-storage/storage-compatible.js.map +1 -0
- package/dist/expressions/identifier-storage/storage-surface-match.d.ts +4 -0
- package/dist/expressions/identifier-storage/storage-surface-match.d.ts.map +1 -0
- package/dist/expressions/identifier-storage/storage-surface-match.js +95 -0
- package/dist/expressions/identifier-storage/storage-surface-match.js.map +1 -0
- package/dist/expressions/identifier-storage/storage-surface-shared.d.ts +12 -0
- package/dist/expressions/identifier-storage/storage-surface-shared.d.ts.map +1 -0
- package/dist/expressions/identifier-storage/storage-surface-shared.js +77 -0
- package/dist/expressions/identifier-storage/storage-surface-shared.js.map +1 -0
- package/dist/expressions/identifier-storage/storage-surface.d.ts +9 -0
- package/dist/expressions/identifier-storage/storage-surface.d.ts.map +1 -0
- package/dist/expressions/identifier-storage/storage-surface.js +9 -0
- package/dist/expressions/identifier-storage/storage-surface.js.map +1 -0
- package/dist/expressions/identifier-storage.d.ts +1 -42
- package/dist/expressions/identifier-storage.d.ts.map +1 -1
- package/dist/expressions/identifier-storage.js +1 -477
- package/dist/expressions/identifier-storage.js.map +1 -1
- package/dist/expressions/identifiers.d.ts.map +1 -1
- package/dist/expressions/identifiers.js +7 -16
- package/dist/expressions/identifiers.js.map +1 -1
- package/dist/expressions/index-cases/array-wrapper-recursion-b.test.js +9 -3
- package/dist/expressions/index-cases/array-wrapper-recursion-b.test.js.map +1 -1
- package/dist/expressions/index-cases/array-wrapper-recursion-c.test.js +4 -1
- package/dist/expressions/index-cases/array-wrapper-recursion-c.test.js.map +1 -1
- package/dist/expressions/index-cases/basic-literals-and-calls.test.js +3 -3
- package/dist/expressions/index-cases/basic-literals-and-calls.test.js.map +1 -1
- package/dist/expressions/index-cases/defaults-and-char-context.test.js +8 -2
- package/dist/expressions/index-cases/defaults-and-char-context.test.js.map +1 -1
- package/dist/expressions/index-cases/dictionary-and-object-initializers-a.test.js +17 -20
- package/dist/expressions/index-cases/dictionary-and-object-initializers-a.test.js.map +1 -1
- package/dist/expressions/index-cases/dictionary-and-object-initializers-b.test.js +7 -8
- package/dist/expressions/index-cases/dictionary-and-object-initializers-b.test.js.map +1 -1
- package/dist/expressions/index-cases/helpers.d.ts +6 -4
- package/dist/expressions/index-cases/helpers.d.ts.map +1 -1
- package/dist/expressions/index-cases/helpers.js +31 -2
- package/dist/expressions/index-cases/helpers.js.map +1 -1
- package/dist/expressions/index-cases/nullable-and-comparisons.test.js +9 -9
- package/dist/expressions/index-cases/nullable-and-comparisons.test.js.map +1 -1
- package/dist/expressions/index-cases/runtime-subset-and-assertions.test.js +3 -3
- package/dist/expressions/index-cases/runtime-subset-and-assertions.test.js.map +1 -1
- package/dist/expressions/index-cases/runtime-union-reification-b.test.js +19 -13
- package/dist/expressions/index-cases/runtime-union-reification-b.test.js.map +1 -1
- package/dist/expressions/index-cases/string-and-array-fallbacks-a.test.js +22 -13
- package/dist/expressions/index-cases/string-and-array-fallbacks-a.test.js.map +1 -1
- package/dist/expressions/index-cases/string-and-array-fallbacks-b.test.js +5 -5
- package/dist/expressions/index-cases/string-and-array-fallbacks-b.test.js.map +1 -1
- package/dist/expressions/lambda-body.js +3 -3
- package/dist/expressions/lambda-body.js.map +1 -1
- package/dist/expressions/lambda-parameters.d.ts.map +1 -1
- package/dist/expressions/lambda-parameters.js +97 -12
- package/dist/expressions/lambda-parameters.js.map +1 -1
- package/dist/expressions/object-literal.d.ts.map +1 -1
- package/dist/expressions/object-literal.js +48 -18
- package/dist/expressions/object-literal.js.map +1 -1
- package/dist/expressions/operators/binary-dispatch.d.ts +1 -1
- package/dist/expressions/operators/binary-dispatch.d.ts.map +1 -1
- package/dist/expressions/operators/binary-dispatch.js +52 -12
- package/dist/expressions/operators/binary-dispatch.js.map +1 -1
- package/dist/expressions/operators/binary-helpers.d.ts.map +1 -1
- package/dist/expressions/operators/binary-helpers.js +11 -1
- package/dist/expressions/operators/binary-helpers.js.map +1 -1
- package/dist/expressions/operators/binary-special-ops.d.ts +1 -11
- package/dist/expressions/operators/binary-special-ops.d.ts.map +1 -1
- package/dist/expressions/operators/binary-special-ops.js +214 -218
- package/dist/expressions/operators/binary-special-ops.js.map +1 -1
- package/dist/expressions/operators/conditional-emitter.d.ts.map +1 -1
- package/dist/expressions/operators/conditional-emitter.js +89 -19
- package/dist/expressions/operators/conditional-emitter.js.map +1 -1
- package/dist/expressions/operators/logical-emitter.js +1 -1
- package/dist/expressions/operators/logical-emitter.js.map +1 -1
- package/dist/expressions/operators/unary-emitter.d.ts.map +1 -1
- package/dist/expressions/operators/unary-emitter.js +7 -50
- package/dist/expressions/operators/unary-emitter.js.map +1 -1
- package/dist/expressions/other.d.ts +2 -6
- package/dist/expressions/other.d.ts.map +1 -1
- package/dist/expressions/other.js +6 -13
- package/dist/expressions/other.js.map +1 -1
- package/dist/expressions/post-emission-adaptation.d.ts +1 -1
- package/dist/expressions/post-emission-adaptation.d.ts.map +1 -1
- package/dist/expressions/post-emission-adaptation.js +55 -150
- package/dist/expressions/post-emission-adaptation.js.map +1 -1
- package/dist/expressions/precedence.test.js +5 -46
- package/dist/expressions/precedence.test.js.map +1 -1
- package/dist/expressions/runtime-union-adaptation-projection.d.ts.map +1 -1
- package/dist/expressions/runtime-union-adaptation-projection.js +25 -4
- package/dist/expressions/runtime-union-adaptation-projection.js.map +1 -1
- package/dist/expressions/runtime-union-adaptation-upcast.d.ts +1 -1
- package/dist/expressions/runtime-union-adaptation-upcast.d.ts.map +1 -1
- package/dist/expressions/runtime-union-adaptation-upcast.js +281 -31
- package/dist/expressions/runtime-union-adaptation-upcast.js.map +1 -1
- package/dist/expressions/structural-anonymous-targets.d.ts.map +1 -1
- package/dist/expressions/structural-anonymous-targets.js +5 -0
- package/dist/expressions/structural-anonymous-targets.js.map +1 -1
- package/dist/expressions/structural-collection-adaptation.d.ts.map +1 -1
- package/dist/expressions/structural-collection-adaptation.js +4 -2
- package/dist/expressions/structural-collection-adaptation.js.map +1 -1
- package/dist/expressions/structural-object-adaptation.d.ts.map +1 -1
- package/dist/expressions/structural-object-adaptation.js +58 -3
- package/dist/expressions/structural-object-adaptation.js.map +1 -1
- package/dist/expressions/structural-property-model.d.ts.map +1 -1
- package/dist/expressions/structural-property-model.js +7 -3
- package/dist/expressions/structural-property-model.js.map +1 -1
- package/dist/expressions/structural-type-shapes.d.ts.map +1 -1
- package/dist/expressions/structural-type-shapes.js +1 -1
- package/dist/expressions/structural-type-shapes.js.map +1 -1
- package/dist/expressions/structural-type-shapes.test.js +2 -1
- package/dist/expressions/structural-type-shapes.test.js.map +1 -1
- package/dist/expressions/type-assertion-emitters.d.ts.map +1 -1
- package/dist/expressions/type-assertion-emitters.js +231 -15
- package/dist/expressions/type-assertion-emitters.js.map +1 -1
- package/dist/fixture-regression-mirrors.test.js +43 -112
- package/dist/fixture-regression-mirrors.test.js.map +1 -1
- package/dist/generated-files.d.ts +0 -1
- package/dist/generated-files.d.ts.map +1 -1
- package/dist/generated-files.js +0 -229
- package/dist/generated-files.js.map +1 -1
- package/dist/generated-files.test.js +53 -1
- package/dist/generated-files.test.js.map +1 -1
- package/dist/golden-tests/runner.d.ts.map +1 -1
- package/dist/golden-tests/runner.js +1 -0
- package/dist/golden-tests/runner.js.map +1 -1
- package/dist/integration-cases/arrow-and-generics-a.test.js +52 -32
- package/dist/integration-cases/arrow-and-generics-a.test.js.map +1 -1
- package/dist/integration-cases/arrow-and-generics-b.test.js +17 -23
- package/dist/integration-cases/arrow-and-generics-b.test.js.map +1 -1
- package/dist/integration-cases/await-and-intrinsics.test.js +12 -10
- package/dist/integration-cases/await-and-intrinsics.test.js.map +1 -1
- package/dist/integration-cases/clr-iterable-overloads.test.js +58 -27
- package/dist/integration-cases/clr-iterable-overloads.test.js.map +1 -1
- package/dist/integration-cases/full-module-and-promises.test.js +21 -19
- package/dist/integration-cases/full-module-and-promises.test.js.map +1 -1
- package/dist/integration-cases/helpers.d.ts.map +1 -1
- package/dist/integration-cases/helpers.js +12 -33
- package/dist/integration-cases/helpers.js.map +1 -1
- package/dist/integration-cases/may14-downstream-contracts.test.d.ts +2 -0
- package/dist/integration-cases/may14-downstream-contracts.test.d.ts.map +1 -0
- package/dist/integration-cases/may14-downstream-contracts.test.js +894 -0
- package/dist/integration-cases/may14-downstream-contracts.test.js.map +1 -0
- package/dist/integration-cases/object-literals-and-channels.test.js +10 -4
- package/dist/integration-cases/object-literals-and-channels.test.js.map +1 -1
- package/dist/integration-cases/regression-coverage-a.test.js +36 -30
- package/dist/integration-cases/regression-coverage-a.test.js.map +1 -1
- package/dist/integration-cases/regression-coverage-b.test.js +95 -111
- package/dist/integration-cases/regression-coverage-b.test.js.map +1 -1
- package/dist/integration-cases/regression-coverage-c.test.js +499 -197
- package/dist/integration-cases/regression-coverage-c.test.js.map +1 -1
- package/dist/integration.test.d.ts +1 -0
- package/dist/integration.test.d.ts.map +1 -1
- package/dist/integration.test.js +1 -0
- package/dist/integration.test.js.map +1 -1
- package/dist/json-aot-generic.test.js +48 -200
- package/dist/json-aot-generic.test.js.map +1 -1
- package/dist/statements/block-emitters/block-and-return.d.ts +1 -1
- package/dist/statements/block-emitters/block-and-return.d.ts.map +1 -1
- package/dist/statements/block-emitters/block-and-return.js +9 -3
- package/dist/statements/block-emitters/block-and-return.js.map +1 -1
- package/dist/statements/classes/members/properties.d.ts.map +1 -1
- package/dist/statements/classes/members/properties.js +2 -3
- package/dist/statements/classes/members/properties.js.map +1 -1
- package/dist/statements/classes/properties.d.ts.map +1 -1
- package/dist/statements/classes/properties.js.map +1 -1
- package/dist/statements/control/conditionals/architecture-invariants.test.d.ts +2 -0
- package/dist/statements/control/conditionals/architecture-invariants.test.d.ts.map +1 -0
- package/dist/statements/control/conditionals/architecture-invariants.test.js +19 -0
- package/dist/statements/control/conditionals/architecture-invariants.test.js.map +1 -0
- package/dist/statements/control/conditionals/branch-context.d.ts +4 -6
- package/dist/statements/control/conditionals/branch-context.d.ts.map +1 -1
- package/dist/statements/control/conditionals/branch-context.js +105 -32
- package/dist/statements/control/conditionals/branch-context.js.map +1 -1
- package/dist/statements/control/conditionals/guard-analysis.d.ts +2 -2
- package/dist/statements/control/conditionals/guard-analysis.d.ts.map +1 -1
- package/dist/statements/control/conditionals/guard-analysis.js +1 -1
- package/dist/statements/control/conditionals/guard-analysis.js.map +1 -1
- package/dist/statements/control/conditionals/guard-detectors-discriminant.d.ts +2 -1
- package/dist/statements/control/conditionals/guard-detectors-discriminant.d.ts.map +1 -1
- package/dist/statements/control/conditionals/guard-detectors-discriminant.js +83 -1
- package/dist/statements/control/conditionals/guard-detectors-discriminant.js.map +1 -1
- package/dist/statements/control/conditionals/guard-detectors-structural.d.ts +2 -7
- package/dist/statements/control/conditionals/guard-detectors-structural.d.ts.map +1 -1
- package/dist/statements/control/conditionals/guard-detectors-structural.js +47 -82
- package/dist/statements/control/conditionals/guard-detectors-structural.js.map +1 -1
- package/dist/statements/control/conditionals/guard-detectors.d.ts +2 -2
- package/dist/statements/control/conditionals/guard-detectors.d.ts.map +1 -1
- package/dist/statements/control/conditionals/guard-detectors.js +2 -2
- package/dist/statements/control/conditionals/guard-detectors.js.map +1 -1
- package/dist/statements/control/conditionals/guard-extraction.d.ts +5 -7
- package/dist/statements/control/conditionals/guard-extraction.d.ts.map +1 -1
- package/dist/statements/control/conditionals/guard-extraction.js +10 -190
- package/dist/statements/control/conditionals/guard-extraction.js.map +1 -1
- package/dist/statements/control/conditionals/guard-types.d.ts +16 -26
- package/dist/statements/control/conditionals/guard-types.d.ts.map +1 -1
- package/dist/statements/control/conditionals/guard-types.js +23 -1
- package/dist/statements/control/conditionals/guard-types.js.map +1 -1
- package/dist/statements/control/conditionals/if-emit-instanceof-guards.d.ts.map +1 -1
- package/dist/statements/control/conditionals/if-emit-instanceof-guards.js +5 -8
- package/dist/statements/control/conditionals/if-emit-instanceof-guards.js.map +1 -1
- package/dist/statements/control/conditionals/if-emit-predicate-guards.d.ts +2 -8
- package/dist/statements/control/conditionals/if-emit-predicate-guards.d.ts.map +1 -1
- package/dist/statements/control/conditionals/if-emit-predicate-guards.js +4 -84
- package/dist/statements/control/conditionals/if-emit-predicate-guards.js.map +1 -1
- package/dist/statements/control/conditionals/if-emit-property-discriminant-guards.d.ts +2 -0
- package/dist/statements/control/conditionals/if-emit-property-discriminant-guards.d.ts.map +1 -1
- package/dist/statements/control/conditionals/if-emit-property-discriminant-guards.js +87 -3
- package/dist/statements/control/conditionals/if-emit-property-discriminant-guards.js.map +1 -1
- package/dist/statements/control/conditionals/if-emit-typeof-array-guards.d.ts.map +1 -1
- package/dist/statements/control/conditionals/if-emit-typeof-array-guards.js +254 -20
- package/dist/statements/control/conditionals/if-emit-typeof-array-guards.js.map +1 -1
- package/dist/statements/control/conditionals/if-emit-union-guards.d.ts +2 -2
- package/dist/statements/control/conditionals/if-emit-union-guards.d.ts.map +1 -1
- package/dist/statements/control/conditionals/if-emit-union-guards.js +2 -2
- package/dist/statements/control/conditionals/if-emit-union-guards.js.map +1 -1
- package/dist/statements/control/conditionals/if-emitter.d.ts.map +1 -1
- package/dist/statements/control/conditionals/if-emitter.js +36 -43
- package/dist/statements/control/conditionals/if-emitter.js.map +1 -1
- package/dist/statements/control/conditionals/ir-branch-narrowings.d.ts +5 -0
- package/dist/statements/control/conditionals/ir-branch-narrowings.d.ts.map +1 -0
- package/dist/statements/control/conditionals/ir-branch-narrowings.js +16 -0
- package/dist/statements/control/conditionals/ir-branch-narrowings.js.map +1 -0
- package/dist/statements/control/loops.d.ts +2 -9
- package/dist/statements/control/loops.d.ts.map +1 -1
- package/dist/statements/control/loops.js +56 -48
- package/dist/statements/control/loops.js.map +1 -1
- package/dist/statements/declarations/classes.d.ts.map +1 -1
- package/dist/statements/declarations/classes.js.map +1 -1
- package/dist/statements/declarations/interfaces.d.ts.map +1 -1
- package/dist/statements/declarations/interfaces.js.map +1 -1
- package/dist/statements/declarations/structs.test.js +5 -4
- package/dist/statements/declarations/structs.test.js.map +1 -1
- package/dist/statements/declarations/type-aliases.js.map +1 -1
- package/dist/statements/declarations/variables.d.ts.map +1 -1
- package/dist/statements/declarations/variables.js +7 -4
- package/dist/statements/declarations/variables.js.map +1 -1
- package/dist/statements/statement-cases/flow-and-void.test.js +3 -3
- package/dist/statements/statement-cases/flow-and-void.test.js.map +1 -1
- package/dist/statements/statement-cases/helpers.d.ts +3 -2
- package/dist/statements/statement-cases/helpers.d.ts.map +1 -1
- package/dist/statements/statement-cases/helpers.js +1 -1
- package/dist/statements/statement-cases/helpers.js.map +1 -1
- package/dist/statements/statement-cases/if-and-instanceof-guards.test.js +21 -21
- package/dist/statements/statement-cases/if-and-instanceof-guards.test.js.map +1 -1
- package/dist/statements/statement-cases/union-guards-basic.test.js +3 -80
- package/dist/statements/statement-cases/union-guards-basic.test.js.map +1 -1
- package/dist/statements/statement-cases/union-guards-nullish-and-object.test.js +0 -196
- package/dist/statements/statement-cases/union-guards-nullish-and-object.test.js.map +1 -1
- package/dist/statements/statement-cases/union-guards-predicate-and-truthy.test.js +15 -15
- package/dist/statements/statement-cases/union-guards-predicate-and-truthy.test.js.map +1 -1
- package/dist/statements/statement-cases/union-guards-remapped-a.test.js +7 -189
- package/dist/statements/statement-cases/union-guards-remapped-a.test.js.map +1 -1
- package/dist/statements/statement-cases/union-guards-remapped-b.test.js +7 -193
- package/dist/statements/statement-cases/union-guards-remapped-b.test.js.map +1 -1
- package/dist/test-ir-strict.d.ts +7 -0
- package/dist/test-ir-strict.d.ts.map +1 -0
- package/dist/test-ir-strict.js +9 -0
- package/dist/test-ir-strict.js.map +1 -0
- package/dist/type-assertion.test.js +5 -4
- package/dist/type-assertion.test.js.map +1 -1
- package/dist/types/emitter.d.ts.map +1 -1
- package/dist/types/emitter.js +7 -1
- package/dist/types/emitter.js.map +1 -1
- package/dist/types/intersections.d.ts +2 -2
- package/dist/types/intersections.d.ts.map +1 -1
- package/dist/types/intersections.js +26 -6
- package/dist/types/intersections.js.map +1 -1
- package/dist/types/parameters.d.ts.map +1 -1
- package/dist/types/parameters.js +30 -5
- package/dist/types/parameters.js.map +1 -1
- package/dist/types/reference-structural-signatures.d.ts.map +1 -1
- package/dist/types/reference-structural-signatures.js +3 -6
- package/dist/types/reference-structural-signatures.js.map +1 -1
- package/dist/types/references-cases/array-and-cross-module.test.js +2 -4
- package/dist/types/references-cases/array-and-cross-module.test.js.map +1 -1
- package/dist/types/references-cases/bindings-and-local.test.js +2 -4
- package/dist/types/references-cases/bindings-and-local.test.js.map +1 -1
- package/dist/types/references-cases/helpers.d.ts +3 -2
- package/dist/types/references-cases/helpers.d.ts.map +1 -1
- package/dist/types/references-cases/helpers.js +2 -1
- package/dist/types/references-cases/helpers.js.map +1 -1
- package/dist/types/references.d.ts.map +1 -1
- package/dist/types/references.js +21 -2
- package/dist/types/references.js.map +1 -1
- package/dist/types/unions-cases/basic-and-ordering.test.js +51 -0
- package/dist/types/unions-cases/basic-and-ordering.test.js.map +1 -1
- package/dist/types/unions.d.ts.map +1 -1
- package/dist/types/unions.js +17 -0
- package/dist/types/unions.js.map +1 -1
- package/dist/types.d.ts +3 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +2 -1
- package/dist/types.js.map +1 -1
- package/package.json +2 -2
- package/dist/core/semantic/js-value-types.d.ts +0 -5
- package/dist/core/semantic/js-value-types.d.ts.map +0 -1
- package/dist/core/semantic/js-value-types.js +0 -42
- package/dist/core/semantic/js-value-types.js.map +0 -1
- package/dist/core/semantic/type-resolution-cases/narrow-typeof.test.d.ts +0 -2
- package/dist/core/semantic/type-resolution-cases/narrow-typeof.test.d.ts.map +0 -1
- package/dist/core/semantic/type-resolution-cases/narrow-typeof.test.js +0 -98
- package/dist/core/semantic/type-resolution-cases/narrow-typeof.test.js.map +0 -1
- package/dist/expressions/calls/call-dynamic-import.d.ts +0 -11
- package/dist/expressions/calls/call-dynamic-import.d.ts.map +0 -1
- package/dist/expressions/calls/call-dynamic-import.js +0 -148
- package/dist/expressions/calls/call-dynamic-import.js.map +0 -1
|
@@ -0,0 +1,894 @@
|
|
|
1
|
+
import { describe, it } from "mocha";
|
|
2
|
+
import { expect } from "chai";
|
|
3
|
+
import { compileProjectToCSharp, compileToCSharp } from "./helpers.js";
|
|
4
|
+
describe("May 14 downstream contract coverage", () => {
|
|
5
|
+
it("wraps contextual lambda expression-body returns into source-owned union aliases", () => {
|
|
6
|
+
const csharp = compileToCSharp(`
|
|
7
|
+
class Request {
|
|
8
|
+
body: string = "";
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
class Response {
|
|
12
|
+
json(value: string): Response {
|
|
13
|
+
return this;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
type NextFunction = (value?: string | null) => void | Promise<void>;
|
|
18
|
+
type IgnoredHandlerResult =
|
|
19
|
+
| void
|
|
20
|
+
| Response
|
|
21
|
+
| Promise<void | Response>;
|
|
22
|
+
type RequestHandler = (
|
|
23
|
+
req: Request,
|
|
24
|
+
res: Response,
|
|
25
|
+
next: NextFunction
|
|
26
|
+
) => IgnoredHandlerResult;
|
|
27
|
+
|
|
28
|
+
declare const app: {
|
|
29
|
+
post(path: string, handler: RequestHandler): void;
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
export function main(): void {
|
|
33
|
+
app.post("/echo", (req: Request, res: Response) => res.json(req.body));
|
|
34
|
+
}
|
|
35
|
+
`);
|
|
36
|
+
expect(csharp).to.match(/return global::Test\.IgnoredHandlerResult\.From\d\(res\.json\(req\.body\)\);/);
|
|
37
|
+
});
|
|
38
|
+
it("prefers exact contextual union return arms over broad object catch-all arms", () => {
|
|
39
|
+
const csharp = compileToCSharp(`
|
|
40
|
+
type JsValue =
|
|
41
|
+
| string
|
|
42
|
+
| number
|
|
43
|
+
| boolean
|
|
44
|
+
| object
|
|
45
|
+
| null
|
|
46
|
+
| undefined;
|
|
47
|
+
|
|
48
|
+
class Request {
|
|
49
|
+
body: JsValue = undefined;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
class Response {
|
|
53
|
+
json(value: JsValue): Response {
|
|
54
|
+
return this;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
type NextFunction = (value?: string | null) => void | Promise<void>;
|
|
59
|
+
type IgnoredHandlerResult =
|
|
60
|
+
| void
|
|
61
|
+
| JsValue
|
|
62
|
+
| Response
|
|
63
|
+
| Promise<void | JsValue | Response>;
|
|
64
|
+
type RequestHandler = (
|
|
65
|
+
req: Request,
|
|
66
|
+
res: Response,
|
|
67
|
+
next: NextFunction
|
|
68
|
+
) => IgnoredHandlerResult;
|
|
69
|
+
|
|
70
|
+
declare const app: {
|
|
71
|
+
post(path: string, handler: RequestHandler): void;
|
|
72
|
+
};
|
|
73
|
+
|
|
74
|
+
export function main(): void {
|
|
75
|
+
app.post("/echo", (req: Request, res: Response) => res.json(req.body));
|
|
76
|
+
}
|
|
77
|
+
`);
|
|
78
|
+
expect(csharp).to.match(/return global::Test\.IgnoredHandlerResult\.From\d\(res\.json\(req\.body\)\);/);
|
|
79
|
+
expect(csharp).to.not.include("return res.json(req.body);");
|
|
80
|
+
});
|
|
81
|
+
it("wraps source-package rest-handler expression returns into the declared handler carrier", () => {
|
|
82
|
+
const csharp = compileProjectToCSharp({
|
|
83
|
+
"node_modules/@fixture/mini-express/package.json": JSON.stringify({
|
|
84
|
+
name: "@fixture/mini-express",
|
|
85
|
+
version: "1.0.0",
|
|
86
|
+
type: "module",
|
|
87
|
+
exports: {
|
|
88
|
+
".": "./src/index.ts",
|
|
89
|
+
"./index.js": "./src/index.ts",
|
|
90
|
+
},
|
|
91
|
+
}, null, 2),
|
|
92
|
+
"node_modules/@fixture/mini-express/tsonic.package.json": JSON.stringify({
|
|
93
|
+
schemaVersion: 1,
|
|
94
|
+
kind: "tsonic-source-package",
|
|
95
|
+
surfaces: ["@tsonic/js"],
|
|
96
|
+
source: {
|
|
97
|
+
namespace: "Fixture.MiniExpress",
|
|
98
|
+
exports: {
|
|
99
|
+
".": "./src/index.ts",
|
|
100
|
+
"./index.js": "./src/index.ts",
|
|
101
|
+
},
|
|
102
|
+
},
|
|
103
|
+
}, null, 2),
|
|
104
|
+
"node_modules/@fixture/mini-express/src/index.ts": `
|
|
105
|
+
export type JsValue =
|
|
106
|
+
| string
|
|
107
|
+
| number
|
|
108
|
+
| boolean
|
|
109
|
+
| object
|
|
110
|
+
| null
|
|
111
|
+
| undefined;
|
|
112
|
+
export type PathSpec = string | RegExp | readonly PathSpec[];
|
|
113
|
+
export type NextFunction = (value?: string | null) => void | Promise<void>;
|
|
114
|
+
export type IgnoredHandlerResult =
|
|
115
|
+
| void
|
|
116
|
+
| JsValue
|
|
117
|
+
| Response
|
|
118
|
+
| Promise<void | JsValue | Response>;
|
|
119
|
+
export type RequestHandler = (
|
|
120
|
+
req: Request,
|
|
121
|
+
res: Response,
|
|
122
|
+
next: NextFunction
|
|
123
|
+
) => IgnoredHandlerResult;
|
|
124
|
+
|
|
125
|
+
export class Request {
|
|
126
|
+
body: JsValue = undefined;
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
export class Response {
|
|
130
|
+
json(value: JsValue): Response {
|
|
131
|
+
return this;
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
export class Application {
|
|
136
|
+
post(path: PathSpec, ...handlers: RequestHandler[]): Application {
|
|
137
|
+
return this;
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
export const express = {
|
|
142
|
+
create(): Application {
|
|
143
|
+
return new Application();
|
|
144
|
+
},
|
|
145
|
+
};
|
|
146
|
+
`,
|
|
147
|
+
"src/App.ts": `
|
|
148
|
+
import {
|
|
149
|
+
express,
|
|
150
|
+
type Request,
|
|
151
|
+
type Response,
|
|
152
|
+
} from "@fixture/mini-express/index.js";
|
|
153
|
+
|
|
154
|
+
const app = express.create();
|
|
155
|
+
|
|
156
|
+
app.post("/echo", (req: Request, res: Response) => res.json(req.body));
|
|
157
|
+
`,
|
|
158
|
+
}, "src/App.ts", { surface: "@tsonic/js" }, {
|
|
159
|
+
sourceRootRelativePath: "src",
|
|
160
|
+
rootNamespace: "ExpressHandlerCarrier",
|
|
161
|
+
});
|
|
162
|
+
expect(csharp).to.match(/return global::Fixture\.MiniExpress\.IgnoredHandlerResult\.From\d\(res\.json\(req\.body\)\);/);
|
|
163
|
+
expect(csharp).to.not.include("return res.json(req.body);");
|
|
164
|
+
});
|
|
165
|
+
it("materializes contextual union returns across lambda and function-expression positions", () => {
|
|
166
|
+
const csharp = compileToCSharp(`
|
|
167
|
+
export class Ok {}
|
|
168
|
+
export class Err {}
|
|
169
|
+
|
|
170
|
+
export type Result = Ok | Err;
|
|
171
|
+
export type Handler = () => Result;
|
|
172
|
+
export type Routes = { get: Handler };
|
|
173
|
+
|
|
174
|
+
declare function use(handler: Handler): void;
|
|
175
|
+
declare function take(result: Result): void;
|
|
176
|
+
declare function takeHandlers(handlers: Handler[]): void;
|
|
177
|
+
declare function takeRoute(route: Routes): void;
|
|
178
|
+
|
|
179
|
+
function ok(): Ok {
|
|
180
|
+
return new Ok();
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
function err(): Err {
|
|
184
|
+
return new Err();
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
export function directReturn(): Result {
|
|
188
|
+
return ok();
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
export function callArgument(): void {
|
|
192
|
+
take(ok());
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
export function expressionLambdaArgument(): void {
|
|
196
|
+
use(() => ok());
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
export function blockLambdaArgument(): void {
|
|
200
|
+
use(() => {
|
|
201
|
+
return ok();
|
|
202
|
+
});
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
export function functionExpressionArgument(): void {
|
|
206
|
+
use(function () {
|
|
207
|
+
return ok();
|
|
208
|
+
});
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
export const variableArrow: Handler = () => ok();
|
|
212
|
+
|
|
213
|
+
export const variableFunction: Handler = function () {
|
|
214
|
+
return ok();
|
|
215
|
+
};
|
|
216
|
+
|
|
217
|
+
export function returnedLambda(): Handler {
|
|
218
|
+
return () => ok();
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
export function arrayElement(): void {
|
|
222
|
+
takeHandlers([() => ok()]);
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
export function objectProperty(): void {
|
|
226
|
+
takeRoute({ get: () => ok() });
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
export function conditionalExpression(flag: boolean): void {
|
|
230
|
+
use(() => flag ? ok() : err());
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
export function nestedBlock(flag: boolean): void {
|
|
234
|
+
use(() => {
|
|
235
|
+
if (flag) {
|
|
236
|
+
return ok();
|
|
237
|
+
}
|
|
238
|
+
return err();
|
|
239
|
+
});
|
|
240
|
+
}
|
|
241
|
+
`);
|
|
242
|
+
expect([...csharp.matchAll(/Result\.From\d\(ok\(\)\)/g)]).to.have.length
|
|
243
|
+
.greaterThanOrEqual(10);
|
|
244
|
+
expect([...csharp.matchAll(/Result\.From\d\(err\(\)\)/g)]).to.have.length
|
|
245
|
+
.greaterThanOrEqual(2);
|
|
246
|
+
expect(csharp).to.match(/take\(global::Test\.Result\.From\d\(ok\(\)\)\);/);
|
|
247
|
+
expect(csharp).to.match(/return global::Test\.Result\.From\d\(ok\(\)\);/);
|
|
248
|
+
expect(csharp).to.not.match(/return ok\(\);/);
|
|
249
|
+
expect(csharp).to.not.match(/=> ok\(\)/);
|
|
250
|
+
});
|
|
251
|
+
it("materializes contextual async lambda returns through nested union carriers", () => {
|
|
252
|
+
const csharp = compileToCSharp(`
|
|
253
|
+
export class Ok {}
|
|
254
|
+
export class Err {}
|
|
255
|
+
|
|
256
|
+
export type Result = Ok | Err;
|
|
257
|
+
export type AsyncResult = Result | Promise<Result>;
|
|
258
|
+
export type AsyncHandler = () => AsyncResult;
|
|
259
|
+
|
|
260
|
+
declare function useAsync(handler: AsyncHandler): void;
|
|
261
|
+
|
|
262
|
+
function ok(): Ok {
|
|
263
|
+
return new Ok();
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
export function asyncExpression(): void {
|
|
267
|
+
useAsync(async () => ok());
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
export function asyncBlock(): void {
|
|
271
|
+
useAsync(async () => {
|
|
272
|
+
return ok();
|
|
273
|
+
});
|
|
274
|
+
}
|
|
275
|
+
`);
|
|
276
|
+
expect([...csharp.matchAll(/AsyncResult\.From\d\(/g)]).to.have.length(2);
|
|
277
|
+
expect([...csharp.matchAll(/Result\.From\d\(ok\(\)\)/g)]).to.have.length(2);
|
|
278
|
+
expect(csharp).to.include("Task.Run<global::Test.Result>");
|
|
279
|
+
expect(csharp).to.not.match(/return ok\(\);/);
|
|
280
|
+
});
|
|
281
|
+
it("adapts void promises returned through contextual union promise arms", () => {
|
|
282
|
+
const csharp = compileToCSharp(`
|
|
283
|
+
export type JsValue =
|
|
284
|
+
| string
|
|
285
|
+
| number
|
|
286
|
+
| boolean
|
|
287
|
+
| object
|
|
288
|
+
| null
|
|
289
|
+
| undefined;
|
|
290
|
+
|
|
291
|
+
export class Response {
|
|
292
|
+
set(name: string, value: string): Response {
|
|
293
|
+
return this;
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
export type NextFunction = (value?: string | null) => void | Promise<void>;
|
|
298
|
+
export type IgnoredHandlerResult =
|
|
299
|
+
| void
|
|
300
|
+
| JsValue
|
|
301
|
+
| Response
|
|
302
|
+
| Promise<void | JsValue | Response>;
|
|
303
|
+
export type RequestHandler = (
|
|
304
|
+
res: Response,
|
|
305
|
+
next: NextFunction
|
|
306
|
+
) => IgnoredHandlerResult;
|
|
307
|
+
|
|
308
|
+
declare function use(handler: RequestHandler): void;
|
|
309
|
+
|
|
310
|
+
export function main(): void {
|
|
311
|
+
use((res: Response, next: NextFunction) => {
|
|
312
|
+
res.set("x-middleware", "on");
|
|
313
|
+
return next();
|
|
314
|
+
});
|
|
315
|
+
}
|
|
316
|
+
`);
|
|
317
|
+
expect(csharp).to.match(/IgnoredHandlerResult\.From\d\(global::System\.Threading\.Tasks\.Task\.Run<object\?>\(async/);
|
|
318
|
+
expect(csharp).to.include("var __tsonic_await_task");
|
|
319
|
+
expect(csharp).to.match(/if \(__tsonic_await_task(?:_\d+)? == null\)/);
|
|
320
|
+
expect(csharp).to.match(/await __tsonic_await_task(?:_\d+)?;/);
|
|
321
|
+
expect(csharp).to.include("return default(object?);");
|
|
322
|
+
expect(csharp).to.not.match(/IgnoredHandlerResult\.From\d\(next\(/);
|
|
323
|
+
});
|
|
324
|
+
it("adapts promised concrete arms through contextual union promise arms", () => {
|
|
325
|
+
const csharp = compileToCSharp(`
|
|
326
|
+
export class Ok {}
|
|
327
|
+
export class Err {}
|
|
328
|
+
|
|
329
|
+
export type Result = Ok | Err;
|
|
330
|
+
export type AsyncOutcome = void | Promise<Result>;
|
|
331
|
+
|
|
332
|
+
function accept(value: AsyncOutcome): void {
|
|
333
|
+
}
|
|
334
|
+
|
|
335
|
+
async function okAsync(): Promise<Ok> {
|
|
336
|
+
return new Ok();
|
|
337
|
+
}
|
|
338
|
+
|
|
339
|
+
export function main(): void {
|
|
340
|
+
accept(okAsync());
|
|
341
|
+
}
|
|
342
|
+
`);
|
|
343
|
+
expect(csharp).to.include("accept(global::System.Threading.Tasks.Task.Run<global::Test.Result>(async");
|
|
344
|
+
expect(csharp).to.match(/var __tsonic_await_value(?:_\d+)? = await okAsync\(\);/);
|
|
345
|
+
expect(csharp).to.match(/return global::Test\.Result\.From\d\(__tsonic_await_value(?:_\d+)?\);/);
|
|
346
|
+
expect(csharp).to.not.include("accept(okAsync());");
|
|
347
|
+
});
|
|
348
|
+
it("passes declared locals to out parameters without discard lowering", () => {
|
|
349
|
+
const csharp = compileToCSharp(`
|
|
350
|
+
import type { int, out } from "@tsonic/core/types.js";
|
|
351
|
+
|
|
352
|
+
declare class Parser {
|
|
353
|
+
static TryParse(text: string, result: out<int>): boolean;
|
|
354
|
+
}
|
|
355
|
+
|
|
356
|
+
export function parse(text: string): int {
|
|
357
|
+
let parsed: int = 0;
|
|
358
|
+
if (Parser.TryParse(text, parsed as out<int>)) {
|
|
359
|
+
return parsed;
|
|
360
|
+
}
|
|
361
|
+
return -1;
|
|
362
|
+
}
|
|
363
|
+
`);
|
|
364
|
+
expect(csharp).to.include("Parser.TryParse(text, out parsed)");
|
|
365
|
+
expect(csharp).to.not.include("__tsonic_out_discard");
|
|
366
|
+
});
|
|
367
|
+
it("preserves CLR overload out parameter modes for Int32.TryParse", () => {
|
|
368
|
+
const csharp = compileToCSharp(`
|
|
369
|
+
import { Int32 } from "@tsonic/dotnet/System.js";
|
|
370
|
+
import type { int, out } from "@tsonic/core/types.js";
|
|
371
|
+
|
|
372
|
+
export function parseId(text: string): int {
|
|
373
|
+
let parsed: int = 0;
|
|
374
|
+
if (Int32.TryParse(text, parsed as out<int>)) {
|
|
375
|
+
return parsed;
|
|
376
|
+
}
|
|
377
|
+
return -1;
|
|
378
|
+
}
|
|
379
|
+
`);
|
|
380
|
+
expect(csharp).to.include("Int32.TryParse(text, out parsed)");
|
|
381
|
+
expect(csharp).to.not.include("Int32.TryParse(text, parsed)");
|
|
382
|
+
});
|
|
383
|
+
it("supports Record<string,T> reads, writes, and for-in key enumeration", () => {
|
|
384
|
+
const csharp = compileToCSharp(`
|
|
385
|
+
import type { int } from "@tsonic/core/types.js";
|
|
386
|
+
|
|
387
|
+
export function tally(metrics: Record<string, int>): int {
|
|
388
|
+
metrics["started"] = 1;
|
|
389
|
+
let total: int = 0;
|
|
390
|
+
for (const key in metrics) {
|
|
391
|
+
total = total + metrics[key];
|
|
392
|
+
}
|
|
393
|
+
return total;
|
|
394
|
+
}
|
|
395
|
+
`);
|
|
396
|
+
expect(csharp).to.include('metrics["started"] = 1');
|
|
397
|
+
expect(csharp).to.include("foreach (var key in metrics.Keys)");
|
|
398
|
+
expect(csharp).to.include("total = total + metrics[key]");
|
|
399
|
+
});
|
|
400
|
+
it("narrows closed structural unions with property-existence checks", () => {
|
|
401
|
+
const csharp = compileToCSharp(`
|
|
402
|
+
type AuthOk = { property_id: string };
|
|
403
|
+
type AuthError = { error: Promise<void> };
|
|
404
|
+
|
|
405
|
+
export function readPropertyId(auth: AuthOk | AuthError): string {
|
|
406
|
+
if ("error" in auth) {
|
|
407
|
+
return "denied";
|
|
408
|
+
}
|
|
409
|
+
return auth.property_id;
|
|
410
|
+
}
|
|
411
|
+
`);
|
|
412
|
+
expect(csharp).to.match(/auth\.Is\d+\(\)/);
|
|
413
|
+
expect(csharp).to.include(".property_id");
|
|
414
|
+
});
|
|
415
|
+
it("preserves string typeof narrowing through member access", () => {
|
|
416
|
+
const csharp = compileToCSharp(`
|
|
417
|
+
export function hasText(value: string | number | undefined): boolean {
|
|
418
|
+
if (typeof value === "string") {
|
|
419
|
+
return value.length > 0;
|
|
420
|
+
}
|
|
421
|
+
return false;
|
|
422
|
+
}
|
|
423
|
+
`, "/test/test.ts", { surface: "@tsonic/js" });
|
|
424
|
+
expect(csharp).to.include(".Length > 0");
|
|
425
|
+
expect(csharp).to.not.include("((string)value).Length");
|
|
426
|
+
});
|
|
427
|
+
it("lowers function length over function-type runtime-union arms without reflection", () => {
|
|
428
|
+
const csharp = compileToCSharp(`
|
|
429
|
+
type NextFunction = () => void;
|
|
430
|
+
interface Request {}
|
|
431
|
+
interface Response {}
|
|
432
|
+
type RequestHandler = (
|
|
433
|
+
req: Request,
|
|
434
|
+
res: Response,
|
|
435
|
+
next: NextFunction
|
|
436
|
+
) => void;
|
|
437
|
+
type ErrorRequestHandler = (
|
|
438
|
+
error: Error,
|
|
439
|
+
req: Request,
|
|
440
|
+
res: Response,
|
|
441
|
+
next: NextFunction
|
|
442
|
+
) => void;
|
|
443
|
+
|
|
444
|
+
export function isErrorHandler(
|
|
445
|
+
handler: RequestHandler | ErrorRequestHandler
|
|
446
|
+
): boolean {
|
|
447
|
+
return handler.length >= 4;
|
|
448
|
+
}
|
|
449
|
+
`, "/test/test.ts", { surface: "@tsonic/js" });
|
|
450
|
+
expect(csharp).to.include(".Match<int>(");
|
|
451
|
+
expect(csharp).to.include("=> 3");
|
|
452
|
+
expect(csharp).to.include("=> 4");
|
|
453
|
+
expect(csharp).to.not.include("handler.length");
|
|
454
|
+
expect(csharp).to.not.include("GetParameters");
|
|
455
|
+
});
|
|
456
|
+
it("lowers Number(...) over CLR numeric values through explicit numeric conversion", () => {
|
|
457
|
+
const csharp = compileToCSharp(`
|
|
458
|
+
import type { long } from "@tsonic/core/types.js";
|
|
459
|
+
|
|
460
|
+
declare class FileInfo {
|
|
461
|
+
Length: long;
|
|
462
|
+
}
|
|
463
|
+
|
|
464
|
+
export function size(info: FileInfo): number {
|
|
465
|
+
return Number(info.Length);
|
|
466
|
+
}
|
|
467
|
+
`, "/test/test.ts", { surface: "@tsonic/js" });
|
|
468
|
+
expect(csharp).to.include("(double)info.Length");
|
|
469
|
+
expect(csharp).to.not.include("Number(info.Length)");
|
|
470
|
+
});
|
|
471
|
+
it("infers generic constructor type arguments from constructor arguments", () => {
|
|
472
|
+
const csharp = compileToCSharp(`
|
|
473
|
+
class IntervalAsyncIterator<T> {
|
|
474
|
+
value: T;
|
|
475
|
+
constructor(value: T) {
|
|
476
|
+
this.value = value;
|
|
477
|
+
}
|
|
478
|
+
}
|
|
479
|
+
|
|
480
|
+
export function create(value: string): IntervalAsyncIterator<string> {
|
|
481
|
+
return new IntervalAsyncIterator(value);
|
|
482
|
+
}
|
|
483
|
+
`);
|
|
484
|
+
expect(csharp).to.include("new IntervalAsyncIterator<string>(value)");
|
|
485
|
+
});
|
|
486
|
+
it("emits readonly constructor-assigned fields as immutable C# members", () => {
|
|
487
|
+
const csharp = compileToCSharp(`
|
|
488
|
+
export class Segment {
|
|
489
|
+
readonly text: string;
|
|
490
|
+
|
|
491
|
+
constructor(text: string) {
|
|
492
|
+
this.text = text;
|
|
493
|
+
}
|
|
494
|
+
}
|
|
495
|
+
`);
|
|
496
|
+
expect(csharp).to.match(/readonly\s+string\s+text|private readonly string _text|public string text \{ get; init; \}/);
|
|
497
|
+
});
|
|
498
|
+
it("emits private static helpers and preserves private call sites", () => {
|
|
499
|
+
const csharp = compileToCSharp(`
|
|
500
|
+
export class Glob {
|
|
501
|
+
private static match(text: string): boolean {
|
|
502
|
+
return text.length > 0;
|
|
503
|
+
}
|
|
504
|
+
|
|
505
|
+
static test(text: string): boolean {
|
|
506
|
+
return Glob.match(text);
|
|
507
|
+
}
|
|
508
|
+
}
|
|
509
|
+
`, "/test/test.ts", { surface: "@tsonic/js" });
|
|
510
|
+
expect(csharp).to.include("private static bool match(string text)");
|
|
511
|
+
expect(csharp).to.include("return Glob.match(text);");
|
|
512
|
+
});
|
|
513
|
+
it("lowers dynamic JSON.parse to the JsValue runtime carrier", () => {
|
|
514
|
+
const csharp = compileToCSharp(`
|
|
515
|
+
import type { int, JsValue } from "@tsonic/core/types.js";
|
|
516
|
+
|
|
517
|
+
const isObject = (value: JsValue): value is Record<string, JsValue> => {
|
|
518
|
+
return value !== null && typeof value === "object" && !Array.isArray(value);
|
|
519
|
+
};
|
|
520
|
+
|
|
521
|
+
export function countMenuItems(text: string): int {
|
|
522
|
+
const root = JSON.parse(text);
|
|
523
|
+
if (!isObject(root)) return -1;
|
|
524
|
+
|
|
525
|
+
const entries = Object.entries(root);
|
|
526
|
+
for (let i = 0; i < entries.length; i++) {
|
|
527
|
+
const [key, value] = entries[i]!;
|
|
528
|
+
if (key === "menu" && Array.isArray(value)) {
|
|
529
|
+
const items = value as JsValue[];
|
|
530
|
+
return items.length;
|
|
531
|
+
}
|
|
532
|
+
}
|
|
533
|
+
|
|
534
|
+
return 0;
|
|
535
|
+
}
|
|
536
|
+
`, "/test/test.ts", { surface: "@tsonic/js" });
|
|
537
|
+
expect(csharp).to.include("global::Tsonic.Runtime.JSON.parse<object>(text)");
|
|
538
|
+
expect(csharp).to.include("value is global::System.Array");
|
|
539
|
+
expect(csharp).to.not.include("JsonSerializer.Deserialize<object>");
|
|
540
|
+
});
|
|
541
|
+
it("lowers typed Array length construction to native CLR arrays", () => {
|
|
542
|
+
const csharp = compileToCSharp(`
|
|
543
|
+
import type { char, int } from "@tsonic/core/types.js";
|
|
544
|
+
|
|
545
|
+
export function toChars(source: string): char[] {
|
|
546
|
+
const chars = new Array<char>(source.length);
|
|
547
|
+
for (let i: int = 0; i < source.length; i++) {
|
|
548
|
+
chars[i] = source[i]!;
|
|
549
|
+
}
|
|
550
|
+
return chars;
|
|
551
|
+
}
|
|
552
|
+
`, "/test/test.ts", { surface: "@tsonic/js" });
|
|
553
|
+
expect(csharp).to.include("var chars = new char[source.Length];");
|
|
554
|
+
expect(csharp).to.include("chars[i] = source[i];");
|
|
555
|
+
expect(csharp).to.not.include("new global::js.Array<char>");
|
|
556
|
+
});
|
|
557
|
+
it("lowers typed empty Array construction to native CLR arrays", () => {
|
|
558
|
+
const csharp = compileToCSharp(`
|
|
559
|
+
export function countLarge(): number {
|
|
560
|
+
const values = new Array<number>();
|
|
561
|
+
values.push(1, 2, 3, 4);
|
|
562
|
+
return values.filter((value) => value > 2).length;
|
|
563
|
+
}
|
|
564
|
+
`, "/test/test.ts", { surface: "@tsonic/js" });
|
|
565
|
+
expect(csharp).to.include("var values = new double[0];");
|
|
566
|
+
expect(csharp).to.include("global::Tsonic.Internal.ArrayInterop.WrapArray(values)");
|
|
567
|
+
expect(csharp).to.not.include("new global::js.Array<double>");
|
|
568
|
+
});
|
|
569
|
+
it("passes source-backed structural aliases through null guards without anonymous rematerialization", () => {
|
|
570
|
+
const csharp = compileToCSharp(`
|
|
571
|
+
type KeyRecord = { property_id: string; kind: string };
|
|
572
|
+
|
|
573
|
+
declare function lookupKey(token: string): Promise<KeyRecord | undefined>;
|
|
574
|
+
declare function handleIngestBody(key: KeyRecord): Promise<void>;
|
|
575
|
+
|
|
576
|
+
export async function handleIngest(token: string): Promise<void> {
|
|
577
|
+
const key = await lookupKey(token);
|
|
578
|
+
if (!key || key.kind !== "write") {
|
|
579
|
+
return;
|
|
580
|
+
}
|
|
581
|
+
|
|
582
|
+
await handleIngestBody(key);
|
|
583
|
+
}
|
|
584
|
+
`);
|
|
585
|
+
expect(csharp).to.include("await handleIngestBody(key)");
|
|
586
|
+
expect(csharp).to.not.include("__Anon_");
|
|
587
|
+
expect(csharp).to.not.include("(__Anon_");
|
|
588
|
+
});
|
|
589
|
+
it("preserves awaited source-backed structural aliases from imported modules", () => {
|
|
590
|
+
const csharp = compileProjectToCSharp({
|
|
591
|
+
"package.json": JSON.stringify({
|
|
592
|
+
name: "emitter-test-project",
|
|
593
|
+
version: "1.0.0",
|
|
594
|
+
type: "module",
|
|
595
|
+
}),
|
|
596
|
+
"src/db/clickmeter-db.ts": `
|
|
597
|
+
export type ApiKeyKind = "write" | "read";
|
|
598
|
+
export type KeyRecord = {
|
|
599
|
+
readonly property_id: string;
|
|
600
|
+
readonly kind: ApiKeyKind;
|
|
601
|
+
};
|
|
602
|
+
|
|
603
|
+
export class ClickmeterDb {
|
|
604
|
+
async lookupKey(_token: string): Promise<KeyRecord | undefined> {
|
|
605
|
+
return { property_id: "property", kind: "write" };
|
|
606
|
+
}
|
|
607
|
+
}
|
|
608
|
+
`,
|
|
609
|
+
"src/server/handlers/handle-ingest.ts": `
|
|
610
|
+
import type { KeyRecord } from "../../db/clickmeter-db.ts";
|
|
611
|
+
import { ClickmeterDb } from "../../db/clickmeter-db.ts";
|
|
612
|
+
|
|
613
|
+
const handleIngestBody = async (key: KeyRecord): Promise<void> => {
|
|
614
|
+
if (key.kind !== "write") return;
|
|
615
|
+
};
|
|
616
|
+
|
|
617
|
+
export const handleIngest = async (db: ClickmeterDb, token: string): Promise<void> => {
|
|
618
|
+
const key = await db.lookupKey(token);
|
|
619
|
+
if (!key || key.kind !== "write") {
|
|
620
|
+
return;
|
|
621
|
+
}
|
|
622
|
+
|
|
623
|
+
await handleIngestBody(key);
|
|
624
|
+
};
|
|
625
|
+
`,
|
|
626
|
+
}, "src/server/handlers/handle-ingest.ts", {}, { sourceRootRelativePath: "src", rootNamespace: "Clickmeter.Server" });
|
|
627
|
+
expect(csharp).to.include("await handleIngestBody(key);");
|
|
628
|
+
expect(csharp).to.not.include("await handleIngestBody(((global::System.Func");
|
|
629
|
+
expect(csharp).to.not.include("var __struct = (global::Clickmeter.Server.__Anon_");
|
|
630
|
+
});
|
|
631
|
+
it("keeps JS source-package coercion helpers isolated from downstream type names", () => {
|
|
632
|
+
const csharp = compileToCSharp(`
|
|
633
|
+
export class StringValue {}
|
|
634
|
+
|
|
635
|
+
export function logText(text: string): void {
|
|
636
|
+
console.log(text);
|
|
637
|
+
}
|
|
638
|
+
`, "/test/test.ts", { surface: "@tsonic/js" });
|
|
639
|
+
expect(csharp).to.include("global::js.Globals.String(values[i])");
|
|
640
|
+
expect(csharp).to.not.include("(global::Test.StringValue)values[i]");
|
|
641
|
+
});
|
|
642
|
+
it("projects optional value-type parameters after terminating nullish guards", () => {
|
|
643
|
+
const csharp = compileToCSharp(`
|
|
644
|
+
import type { int } from "@tsonic/core/types.js";
|
|
645
|
+
|
|
646
|
+
declare function consume(value: int): int;
|
|
647
|
+
|
|
648
|
+
export function read(value?: int): int {
|
|
649
|
+
if (value === undefined) {
|
|
650
|
+
return -1;
|
|
651
|
+
}
|
|
652
|
+
|
|
653
|
+
return consume(value);
|
|
654
|
+
}
|
|
655
|
+
`);
|
|
656
|
+
expect(csharp).to.include("return consume(value.Value);");
|
|
657
|
+
expect(csharp).to.not.include("return consume(value);");
|
|
658
|
+
});
|
|
659
|
+
it("projects optional value-type parameters inside narrowed ternary branches", () => {
|
|
660
|
+
const csharp = compileToCSharp(`
|
|
661
|
+
import type { int } from "@tsonic/core/types.js";
|
|
662
|
+
|
|
663
|
+
declare function consume(value: int): int;
|
|
664
|
+
|
|
665
|
+
export function read(value?: int): int {
|
|
666
|
+
return value === undefined ? -1 : consume(value);
|
|
667
|
+
}
|
|
668
|
+
`);
|
|
669
|
+
expect(csharp).to.include("consume(value.Value)");
|
|
670
|
+
expect(csharp).to.not.include("consume(value)");
|
|
671
|
+
});
|
|
672
|
+
it("materializes concrete reference returns into declared runtime unions", () => {
|
|
673
|
+
const csharp = compileToCSharp(`
|
|
674
|
+
export class Bytes {}
|
|
675
|
+
|
|
676
|
+
export function encode(bytes: Bytes, encoding?: string): string | Bytes {
|
|
677
|
+
if (encoding === undefined) {
|
|
678
|
+
return bytes;
|
|
679
|
+
}
|
|
680
|
+
|
|
681
|
+
return encoding;
|
|
682
|
+
}
|
|
683
|
+
`);
|
|
684
|
+
expect(csharp).to.match(/return global::Tsonic\.Internal\.(?:Union|Union2_[A-F0-9]+)<string, global::Test\.Bytes>\.From2\((?:\(global::Test\.Bytes\))?bytes\);/);
|
|
685
|
+
expect(csharp).to.not.include("return bytes;");
|
|
686
|
+
});
|
|
687
|
+
it("materializes first-arm concrete reference returns into declared runtime unions", () => {
|
|
688
|
+
const csharp = compileToCSharp(`
|
|
689
|
+
export function encode(bytes: Uint8Array, encoding?: string): Uint8Array | string {
|
|
690
|
+
if (encoding === undefined) {
|
|
691
|
+
return bytes;
|
|
692
|
+
}
|
|
693
|
+
|
|
694
|
+
return encoding;
|
|
695
|
+
}
|
|
696
|
+
`, "/test/test.ts", { surface: "@tsonic/js" });
|
|
697
|
+
expect(csharp).to.match(/return global::Tsonic\.Internal\.(?:Union|Union2_[A-F0-9]+)<global::js\.Uint8Array, string>\.From1\(bytes\);/);
|
|
698
|
+
expect(csharp).to.not.include("return bytes;");
|
|
699
|
+
});
|
|
700
|
+
it("uses broad storage typeof checks for recursive rest callback values", () => {
|
|
701
|
+
const csharp = compileToCSharp(`
|
|
702
|
+
type RuntimeObject = object;
|
|
703
|
+
type RuntimeArray = RuntimeValue[];
|
|
704
|
+
type RuntimeValue = string | number | boolean | RuntimeArray | RuntimeObject | null | undefined;
|
|
705
|
+
type EventListener = (...args: RuntimeValue[]) => void;
|
|
706
|
+
|
|
707
|
+
declare class EventEmitter {
|
|
708
|
+
prependOnceListener(eventName: string, listener: EventListener): EventEmitter;
|
|
709
|
+
emit(eventName: string, ...args: RuntimeValue[]): boolean;
|
|
710
|
+
}
|
|
711
|
+
|
|
712
|
+
export function run(emitter: EventEmitter): number {
|
|
713
|
+
let received = 0;
|
|
714
|
+
emitter.prependOnceListener("test", (value: RuntimeValue) => {
|
|
715
|
+
if (typeof value === "number") {
|
|
716
|
+
received = value;
|
|
717
|
+
}
|
|
718
|
+
});
|
|
719
|
+
emitter.emit("test", 42);
|
|
720
|
+
return received;
|
|
721
|
+
}
|
|
722
|
+
`);
|
|
723
|
+
expect(csharp).to.include("object? value = __unused_args[0];");
|
|
724
|
+
expect(csharp).to.include("if ((value is double || value is int))");
|
|
725
|
+
expect(csharp).to.include("received = (int)(value switch");
|
|
726
|
+
expect(csharp).to.not.match(/\bvalue\.Is\d+\(\)/);
|
|
727
|
+
});
|
|
728
|
+
it("allows broad runtime-value Array.isArray checks when returned as booleans", () => {
|
|
729
|
+
const csharp = compileToCSharp(`
|
|
730
|
+
type RuntimeObject = object;
|
|
731
|
+
type RuntimeArray = RuntimeValue[];
|
|
732
|
+
type RuntimeValue = string | number | boolean | RuntimeArray | RuntimeObject | null | undefined;
|
|
733
|
+
|
|
734
|
+
export function isArrayValue(value: RuntimeValue): boolean {
|
|
735
|
+
return Array.isArray(value);
|
|
736
|
+
}
|
|
737
|
+
`, "/test/test.ts", { surface: "@tsonic/js" });
|
|
738
|
+
expect(csharp).to.include("return value is global::System.Array;");
|
|
739
|
+
});
|
|
740
|
+
it("omits invalid object constraints for broad runtime-value generic bounds", () => {
|
|
741
|
+
const csharp = compileToCSharp(`
|
|
742
|
+
type RuntimeObject = object;
|
|
743
|
+
type RuntimeArray = RuntimeValue[];
|
|
744
|
+
type RuntimeValue = string | number | boolean | RuntimeArray | RuntimeObject | null | undefined;
|
|
745
|
+
|
|
746
|
+
export class TimersPromises {
|
|
747
|
+
async setImmediate<T extends RuntimeValue>(value?: T): Promise<T | undefined> {
|
|
748
|
+
return value;
|
|
749
|
+
}
|
|
750
|
+
}
|
|
751
|
+
`);
|
|
752
|
+
expect(csharp).to.match(/setImmediate<T>\(T\? value = default\)/);
|
|
753
|
+
expect(csharp).to.not.match(/where\s+T\s*:\s*object\b/);
|
|
754
|
+
expect(csharp).to.not.match(/where\s+T\s*:\s*global::System\.Object\b/);
|
|
755
|
+
});
|
|
756
|
+
it("materializes union array arms into broad recursive runtime-value arrays", () => {
|
|
757
|
+
const csharp = compileToCSharp(`
|
|
758
|
+
import type { int } from "@tsonic/core/types.js";
|
|
759
|
+
|
|
760
|
+
type RuntimeObject = object;
|
|
761
|
+
type RuntimeArray = RuntimeValue[];
|
|
762
|
+
type RuntimeValue = string | number | boolean | RuntimeArray | RuntimeObject | null | undefined;
|
|
763
|
+
|
|
764
|
+
class RecordWithTtl {
|
|
765
|
+
address: string = "";
|
|
766
|
+
ttl: int = 0;
|
|
767
|
+
}
|
|
768
|
+
|
|
769
|
+
export function count(result: Array<RecordWithTtl> | Array<string>): number {
|
|
770
|
+
const values = result as Array<RuntimeValue>;
|
|
771
|
+
return values.length;
|
|
772
|
+
}
|
|
773
|
+
`, "/test/test.ts", { surface: "@tsonic/js" });
|
|
774
|
+
expect(csharp).to.include("result.Match<object?[]>");
|
|
775
|
+
expect(csharp).to.include("global::System.Linq.Enumerable.Select");
|
|
776
|
+
expect(csharp).to.not.include("Cannot materialize runtime union arrayType to arrayType");
|
|
777
|
+
});
|
|
778
|
+
it("applies all conjunctive instanceof narrowings in branch bodies", () => {
|
|
779
|
+
const csharp = compileToCSharp(`
|
|
780
|
+
type RuntimeArray = RuntimeValue[];
|
|
781
|
+
type RuntimeValue = string | number | boolean | RuntimeArray | object | null | undefined;
|
|
782
|
+
|
|
783
|
+
const areUint8ArraysEqual = (left: Uint8Array, right: Uint8Array): boolean => {
|
|
784
|
+
return left.length === right.length;
|
|
785
|
+
};
|
|
786
|
+
|
|
787
|
+
export const areDeepEqual = (left: RuntimeValue, right: RuntimeValue): boolean => {
|
|
788
|
+
if (typeof left !== "object" || typeof right !== "object") {
|
|
789
|
+
return false;
|
|
790
|
+
}
|
|
791
|
+
|
|
792
|
+
if (left instanceof Uint8Array && right instanceof Uint8Array) {
|
|
793
|
+
return areUint8ArraysEqual(left, right);
|
|
794
|
+
}
|
|
795
|
+
|
|
796
|
+
return false;
|
|
797
|
+
};
|
|
798
|
+
`, "/test/test.ts", { surface: "@tsonic/nodejs" });
|
|
799
|
+
expect(csharp).to.match(/areUint8ArraysEqual\((?:\(global::js\.Uint8Array\))?left, \(global::js\.Uint8Array\)right\)/);
|
|
800
|
+
expect(csharp).to.not.include("areUint8ArraysEqual(left, right)");
|
|
801
|
+
});
|
|
802
|
+
it("preserves explicit subclass casts in conditional expressions", () => {
|
|
803
|
+
const csharp = compileToCSharp(`
|
|
804
|
+
export class JsonValue {
|
|
805
|
+
kind: string;
|
|
806
|
+
|
|
807
|
+
constructor(kind: string) {
|
|
808
|
+
this.kind = kind;
|
|
809
|
+
}
|
|
810
|
+
}
|
|
811
|
+
|
|
812
|
+
export class JsonArray extends JsonValue {
|
|
813
|
+
items: JsonValue[];
|
|
814
|
+
|
|
815
|
+
constructor(items: JsonValue[]) {
|
|
816
|
+
super("array");
|
|
817
|
+
this.items = items;
|
|
818
|
+
}
|
|
819
|
+
}
|
|
820
|
+
|
|
821
|
+
export class JsonObject extends JsonValue {
|
|
822
|
+
items: JsonValue[];
|
|
823
|
+
|
|
824
|
+
constructor(items: JsonValue[]) {
|
|
825
|
+
super("object");
|
|
826
|
+
this.items = items;
|
|
827
|
+
}
|
|
828
|
+
}
|
|
829
|
+
|
|
830
|
+
export const jsonArray = (value: JsonValue | undefined): JsonArray | undefined =>
|
|
831
|
+
value instanceof JsonArray ? (value as JsonArray) : undefined;
|
|
832
|
+
|
|
833
|
+
export const jsonObject = (value: JsonValue | undefined): JsonObject | undefined =>
|
|
834
|
+
value instanceof JsonObject ? (value as JsonObject) : undefined;
|
|
835
|
+
`, "/test/test.ts", { surface: "@tsonic/nodejs" });
|
|
836
|
+
expect(csharp).to.include("return value is JsonArray ? (JsonArray)value : default(JsonArray);");
|
|
837
|
+
expect(csharp).to.not.include("return value is JsonArray ? value : default(JsonArray);");
|
|
838
|
+
expect(csharp).to.include("return value is JsonObject ? (JsonObject)value : default(JsonObject);");
|
|
839
|
+
expect(csharp).to.not.include("return value is JsonObject ? value : default(JsonObject);");
|
|
840
|
+
});
|
|
841
|
+
it("widens mutable integer-initialized locals to JS numbers outside canonical loops", () => {
|
|
842
|
+
const csharp = compileToCSharp(`
|
|
843
|
+
export function pickLength(totalLength?: number): number {
|
|
844
|
+
let len = 0;
|
|
845
|
+
if (totalLength !== undefined) {
|
|
846
|
+
len = totalLength;
|
|
847
|
+
}
|
|
848
|
+
return len;
|
|
849
|
+
}
|
|
850
|
+
`, "/test/test.ts", { surface: "@tsonic/js" });
|
|
851
|
+
expect(csharp).to.include("double len = 0;");
|
|
852
|
+
expect(csharp).to.include("len = totalLength.Value;");
|
|
853
|
+
expect(csharp).to.not.include("var len = 0;");
|
|
854
|
+
});
|
|
855
|
+
it("keeps nullish-assigned nullable member checks on the nullable storage slot", () => {
|
|
856
|
+
const csharp = compileToCSharp(`
|
|
857
|
+
import type { int } from "@tsonic/core/types.js";
|
|
858
|
+
|
|
859
|
+
export class ProcessModule {
|
|
860
|
+
get exitCode(): int | undefined {
|
|
861
|
+
return undefined;
|
|
862
|
+
}
|
|
863
|
+
|
|
864
|
+
set exitCode(value: int | undefined) {}
|
|
865
|
+
}
|
|
866
|
+
|
|
867
|
+
export const process = new ProcessModule();
|
|
868
|
+
|
|
869
|
+
export function resetAndCheck(): boolean {
|
|
870
|
+
process.exitCode = undefined;
|
|
871
|
+
return process.exitCode === undefined;
|
|
872
|
+
}
|
|
873
|
+
`, "/test/test.ts", { surface: "@tsonic/nodejs" });
|
|
874
|
+
expect(csharp).to.include("process.exitCode = default(int?);");
|
|
875
|
+
expect(csharp).to.include("return process.exitCode == null;");
|
|
876
|
+
expect(csharp).to.not.include("process.exitCode.Value == null");
|
|
877
|
+
});
|
|
878
|
+
it("keeps canonical for-loop counters integral after mutable numeric widening", () => {
|
|
879
|
+
const csharp = compileToCSharp(`
|
|
880
|
+
export function sum(values: number[]): number {
|
|
881
|
+
for (let i = 0; i < values.length; i++) {
|
|
882
|
+
if (values[i]! > 10) {
|
|
883
|
+
return i;
|
|
884
|
+
}
|
|
885
|
+
}
|
|
886
|
+
return -1;
|
|
887
|
+
}
|
|
888
|
+
`, "/test/test.ts", { surface: "@tsonic/js" });
|
|
889
|
+
expect(csharp).to.include("for (int i = 0;");
|
|
890
|
+
expect(csharp).to.include("return i;");
|
|
891
|
+
expect(csharp).to.not.include("for (double i = 0;");
|
|
892
|
+
});
|
|
893
|
+
});
|
|
894
|
+
//# sourceMappingURL=may14-downstream-contracts.test.js.map
|