@tsonic/frontend 0.0.14 → 0.0.15
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/graph/builder.js +2 -2
- package/dist/graph/builder.js.map +1 -1
- package/dist/graph/extraction/imports.js +1 -1
- package/dist/graph/extraction/imports.js.map +1 -1
- package/dist/graph/extraction/orchestrator.d.ts.map +1 -1
- package/dist/graph/extraction/orchestrator.js +1 -1
- package/dist/graph/extraction/orchestrator.js.map +1 -1
- package/dist/ir/binding/index.d.ts +134 -0
- package/dist/ir/binding/index.d.ts.map +1 -0
- package/dist/ir/binding/index.js +725 -0
- package/dist/ir/binding/index.js.map +1 -0
- package/dist/ir/binding-resolution.test.js +193 -52
- package/dist/ir/binding-resolution.test.js.map +1 -1
- package/dist/ir/builder/exports.d.ts +20 -2
- package/dist/ir/builder/exports.d.ts.map +1 -1
- package/dist/ir/builder/exports.js +65 -6
- package/dist/ir/builder/exports.js.map +1 -1
- package/dist/ir/builder/imports.d.ts +9 -5
- package/dist/ir/builder/imports.d.ts.map +1 -1
- package/dist/ir/builder/imports.js +20 -31
- package/dist/ir/builder/imports.js.map +1 -1
- package/dist/ir/builder/orchestrator.d.ts +10 -1
- package/dist/ir/builder/orchestrator.d.ts.map +1 -1
- package/dist/ir/builder/orchestrator.js +25 -14
- package/dist/ir/builder/orchestrator.js.map +1 -1
- package/dist/ir/builder/statements.d.ts +7 -1
- package/dist/ir/builder/statements.d.ts.map +1 -1
- package/dist/ir/builder/statements.js +7 -2
- package/dist/ir/builder/statements.js.map +1 -1
- package/dist/ir/builder/types.d.ts +3 -0
- package/dist/ir/builder/types.d.ts.map +1 -1
- package/dist/ir/builder/validation.d.ts +4 -1
- package/dist/ir/builder/validation.d.ts.map +1 -1
- package/dist/ir/builder/validation.js +37 -37
- package/dist/ir/builder/validation.js.map +1 -1
- package/dist/ir/builder.test.js +54 -111
- package/dist/ir/builder.test.js.map +1 -1
- package/dist/ir/clr-type-mappings.d.ts +42 -0
- package/dist/ir/clr-type-mappings.d.ts.map +1 -0
- package/dist/ir/clr-type-mappings.js +139 -0
- package/dist/ir/clr-type-mappings.js.map +1 -0
- package/dist/ir/converters/anonymous-synthesis.d.ts +30 -8
- package/dist/ir/converters/anonymous-synthesis.d.ts.map +1 -1
- package/dist/ir/converters/anonymous-synthesis.js +46 -55
- package/dist/ir/converters/anonymous-synthesis.js.map +1 -1
- package/dist/ir/converters/context.d.ts +40 -0
- package/dist/ir/converters/context.d.ts.map +1 -0
- package/dist/ir/converters/context.js +24 -0
- package/dist/ir/converters/context.js.map +1 -0
- package/dist/ir/converters/expressions/access.d.ts +6 -1
- package/dist/ir/converters/expressions/access.d.ts.map +1 -1
- package/dist/ir/converters/expressions/access.js +239 -15
- package/dist/ir/converters/expressions/access.js.map +1 -1
- package/dist/ir/converters/expressions/calls.d.ts +24 -3
- package/dist/ir/converters/expressions/calls.d.ts.map +1 -1
- package/dist/ir/converters/expressions/calls.js +431 -391
- package/dist/ir/converters/expressions/calls.js.map +1 -1
- package/dist/ir/converters/expressions/collections.d.ts +16 -3
- package/dist/ir/converters/expressions/collections.d.ts.map +1 -1
- package/dist/ir/converters/expressions/collections.js +300 -46
- package/dist/ir/converters/expressions/collections.js.map +1 -1
- package/dist/ir/converters/expressions/functions.d.ts +10 -3
- package/dist/ir/converters/expressions/functions.d.ts.map +1 -1
- package/dist/ir/converters/expressions/functions.js +140 -32
- package/dist/ir/converters/expressions/functions.js.map +1 -1
- package/dist/ir/converters/expressions/helpers.d.ts +22 -23
- package/dist/ir/converters/expressions/helpers.d.ts.map +1 -1
- package/dist/ir/converters/expressions/helpers.js +242 -239
- package/dist/ir/converters/expressions/helpers.js.map +1 -1
- package/dist/ir/converters/expressions/index.d.ts +1 -1
- package/dist/ir/converters/expressions/index.d.ts.map +1 -1
- package/dist/ir/converters/expressions/index.js +1 -1
- package/dist/ir/converters/expressions/index.js.map +1 -1
- package/dist/ir/converters/expressions/literals.d.ts +12 -12
- package/dist/ir/converters/expressions/literals.d.ts.map +1 -1
- package/dist/ir/converters/expressions/literals.js +62 -17
- package/dist/ir/converters/expressions/literals.js.map +1 -1
- package/dist/ir/converters/expressions/numeric-recovery.test.d.ts +5 -2
- package/dist/ir/converters/expressions/numeric-recovery.test.d.ts.map +1 -1
- package/dist/ir/converters/expressions/numeric-recovery.test.js +62 -49
- package/dist/ir/converters/expressions/numeric-recovery.test.js.map +1 -1
- package/dist/ir/converters/expressions/operators.d.ts +13 -4
- package/dist/ir/converters/expressions/operators.d.ts.map +1 -1
- package/dist/ir/converters/expressions/operators.js +179 -33
- package/dist/ir/converters/expressions/operators.js.map +1 -1
- package/dist/ir/converters/expressions/other.d.ts +11 -3
- package/dist/ir/converters/expressions/other.d.ts.map +1 -1
- package/dist/ir/converters/expressions/other.js +26 -10
- package/dist/ir/converters/expressions/other.js.map +1 -1
- package/dist/ir/converters/statements/control/blocks.d.ts +8 -2
- package/dist/ir/converters/statements/control/blocks.d.ts.map +1 -1
- package/dist/ir/converters/statements/control/blocks.js +7 -2
- package/dist/ir/converters/statements/control/blocks.js.map +1 -1
- package/dist/ir/converters/statements/control/conditionals.d.ts +14 -4
- package/dist/ir/converters/statements/control/conditionals.d.ts.map +1 -1
- package/dist/ir/converters/statements/control/conditionals.js +19 -10
- package/dist/ir/converters/statements/control/conditionals.js.map +1 -1
- package/dist/ir/converters/statements/control/exceptions.d.ts +10 -3
- package/dist/ir/converters/statements/control/exceptions.d.ts.map +1 -1
- package/dist/ir/converters/statements/control/exceptions.js +13 -7
- package/dist/ir/converters/statements/control/exceptions.js.map +1 -1
- package/dist/ir/converters/statements/control/loops.d.ts +16 -5
- package/dist/ir/converters/statements/control/loops.d.ts.map +1 -1
- package/dist/ir/converters/statements/control/loops.js +25 -15
- package/dist/ir/converters/statements/control/loops.js.map +1 -1
- package/dist/ir/converters/statements/declarations/classes/constructors.d.ts +3 -2
- package/dist/ir/converters/statements/declarations/classes/constructors.d.ts.map +1 -1
- package/dist/ir/converters/statements/declarations/classes/constructors.js +11 -7
- package/dist/ir/converters/statements/declarations/classes/constructors.js.map +1 -1
- package/dist/ir/converters/statements/declarations/classes/methods.d.ts +2 -1
- package/dist/ir/converters/statements/declarations/classes/methods.d.ts.map +1 -1
- package/dist/ir/converters/statements/declarations/classes/methods.js +63 -11
- package/dist/ir/converters/statements/declarations/classes/methods.js.map +1 -1
- package/dist/ir/converters/statements/declarations/classes/orchestrator.d.ts +2 -1
- package/dist/ir/converters/statements/declarations/classes/orchestrator.d.ts.map +1 -1
- package/dist/ir/converters/statements/declarations/classes/orchestrator.js +60 -40
- package/dist/ir/converters/statements/declarations/classes/orchestrator.js.map +1 -1
- package/dist/ir/converters/statements/declarations/classes/override-detection.d.ts +6 -2
- package/dist/ir/converters/statements/declarations/classes/override-detection.d.ts.map +1 -1
- package/dist/ir/converters/statements/declarations/classes/override-detection.js +49 -50
- package/dist/ir/converters/statements/declarations/classes/override-detection.js.map +1 -1
- package/dist/ir/converters/statements/declarations/classes/properties.d.ts +9 -1
- package/dist/ir/converters/statements/declarations/classes/properties.d.ts.map +1 -1
- package/dist/ir/converters/statements/declarations/classes/properties.js +119 -16
- package/dist/ir/converters/statements/declarations/classes/properties.js.map +1 -1
- package/dist/ir/converters/statements/declarations/enums.d.ts +2 -1
- package/dist/ir/converters/statements/declarations/enums.d.ts.map +1 -1
- package/dist/ir/converters/statements/declarations/enums.js +8 -2
- package/dist/ir/converters/statements/declarations/enums.js.map +1 -1
- package/dist/ir/converters/statements/declarations/functions.d.ts +2 -1
- package/dist/ir/converters/statements/declarations/functions.d.ts.map +1 -1
- package/dist/ir/converters/statements/declarations/functions.js +11 -6
- package/dist/ir/converters/statements/declarations/functions.js.map +1 -1
- package/dist/ir/converters/statements/declarations/index.d.ts +3 -1
- package/dist/ir/converters/statements/declarations/index.d.ts.map +1 -1
- package/dist/ir/converters/statements/declarations/index.js +3 -1
- package/dist/ir/converters/statements/declarations/index.js.map +1 -1
- package/dist/ir/converters/statements/declarations/interfaces.d.ts +3 -2
- package/dist/ir/converters/statements/declarations/interfaces.d.ts.map +1 -1
- package/dist/ir/converters/statements/declarations/interfaces.js +26 -20
- package/dist/ir/converters/statements/declarations/interfaces.js.map +1 -1
- package/dist/ir/converters/statements/declarations/registry.d.ts +72 -0
- package/dist/ir/converters/statements/declarations/registry.d.ts.map +1 -1
- package/dist/ir/converters/statements/declarations/registry.js +92 -0
- package/dist/ir/converters/statements/declarations/registry.js.map +1 -1
- package/dist/ir/converters/statements/declarations/type-aliases.d.ts +2 -1
- package/dist/ir/converters/statements/declarations/type-aliases.d.ts.map +1 -1
- package/dist/ir/converters/statements/declarations/type-aliases.js +6 -4
- package/dist/ir/converters/statements/declarations/type-aliases.js.map +1 -1
- package/dist/ir/converters/statements/declarations/variables.d.ts +11 -1
- package/dist/ir/converters/statements/declarations/variables.d.ts.map +1 -1
- package/dist/ir/converters/statements/declarations/variables.js +123 -19
- package/dist/ir/converters/statements/declarations/variables.js.map +1 -1
- package/dist/ir/converters/statements/declarations.d.ts +4 -1
- package/dist/ir/converters/statements/declarations.d.ts.map +1 -1
- package/dist/ir/converters/statements/declarations.js +4 -1
- package/dist/ir/converters/statements/declarations.js.map +1 -1
- package/dist/ir/converters/statements/helpers.d.ts +4 -3
- package/dist/ir/converters/statements/helpers.d.ts.map +1 -1
- package/dist/ir/converters/statements/helpers.js +55 -31
- package/dist/ir/converters/statements/helpers.js.map +1 -1
- package/dist/ir/converters/statements/index.d.ts +1 -1
- package/dist/ir/converters/statements/index.d.ts.map +1 -1
- package/dist/ir/converters/statements/index.js +2 -1
- package/dist/ir/converters/statements/index.js.map +1 -1
- package/dist/ir/expression-converter.d.ts +10 -3
- package/dist/ir/expression-converter.d.ts.map +1 -1
- package/dist/ir/expression-converter.js +132 -57
- package/dist/ir/expression-converter.js.map +1 -1
- package/dist/ir/hierarchical-bindings-e2e.test.js +10 -6
- package/dist/ir/hierarchical-bindings-e2e.test.js.map +1 -1
- package/dist/ir/index.d.ts +5 -0
- package/dist/ir/index.d.ts.map +1 -1
- package/dist/ir/index.js +5 -0
- package/dist/ir/index.js.map +1 -1
- package/dist/ir/no-ts-type-inference.test.d.ts +17 -0
- package/dist/ir/no-ts-type-inference.test.d.ts.map +1 -0
- package/dist/ir/no-ts-type-inference.test.js +171 -0
- package/dist/ir/no-ts-type-inference.test.js.map +1 -0
- package/dist/ir/program-context.d.ts +74 -0
- package/dist/ir/program-context.d.ts.map +1 -0
- package/dist/ir/program-context.js +286 -0
- package/dist/ir/program-context.js.map +1 -0
- package/dist/ir/statement-converter.d.ts +14 -4
- package/dist/ir/statement-converter.d.ts.map +1 -1
- package/dist/ir/statement-converter.js +31 -21
- package/dist/ir/statement-converter.js.map +1 -1
- package/dist/ir/syntax/binding-patterns.d.ts +22 -0
- package/dist/ir/syntax/binding-patterns.d.ts.map +1 -0
- package/dist/ir/syntax/binding-patterns.js +92 -0
- package/dist/ir/syntax/binding-patterns.js.map +1 -0
- package/dist/ir/thisarg-inference.test.d.ts +8 -0
- package/dist/ir/thisarg-inference.test.d.ts.map +1 -0
- package/dist/ir/thisarg-inference.test.js +94 -0
- package/dist/ir/thisarg-inference.test.js.map +1 -0
- package/dist/ir/type-converter.d.ts +5 -2
- package/dist/ir/type-converter.d.ts.map +1 -1
- package/dist/ir/type-converter.js +5 -2
- package/dist/ir/type-converter.js.map +1 -1
- package/dist/ir/type-system/core.d.ts +29 -0
- package/dist/ir/type-system/core.d.ts.map +1 -0
- package/dist/ir/type-system/core.js +456 -0
- package/dist/ir/type-system/core.js.map +1 -0
- package/dist/ir/type-system/index.d.ts +21 -0
- package/dist/ir/type-system/index.d.ts.map +1 -0
- package/dist/ir/type-system/index.js +43 -0
- package/dist/ir/type-system/index.js.map +1 -0
- package/dist/ir/type-system/internal/handle-types.d.ts +98 -0
- package/dist/ir/type-system/internal/handle-types.d.ts.map +1 -0
- package/dist/ir/type-system/internal/handle-types.js +13 -0
- package/dist/ir/type-system/internal/handle-types.js.map +1 -0
- package/dist/ir/type-system/internal/nominal-env.d.ts +66 -0
- package/dist/ir/type-system/internal/nominal-env.d.ts.map +1 -0
- package/dist/ir/type-system/internal/nominal-env.js +301 -0
- package/dist/ir/type-system/internal/nominal-env.js.map +1 -0
- package/dist/ir/type-system/internal/type-converter/arrays.d.ts +11 -0
- package/dist/ir/type-system/internal/type-converter/arrays.d.ts.map +1 -0
- package/dist/ir/{type-converter → type-system/internal/type-converter}/arrays.js +2 -2
- package/dist/ir/type-system/internal/type-converter/arrays.js.map +1 -0
- package/dist/ir/type-system/internal/type-converter/converter.d.ts +17 -0
- package/dist/ir/type-system/internal/type-converter/converter.d.ts.map +1 -0
- package/dist/ir/type-system/internal/type-converter/converter.js +16 -0
- package/dist/ir/type-system/internal/type-converter/converter.js.map +1 -0
- package/dist/ir/type-system/internal/type-converter/functions.d.ts +14 -0
- package/dist/ir/type-system/internal/type-converter/functions.d.ts.map +1 -0
- package/dist/ir/type-system/internal/type-converter/functions.js +66 -0
- package/dist/ir/type-system/internal/type-converter/functions.js.map +1 -0
- package/dist/ir/type-system/internal/type-converter/index.d.ts +11 -0
- package/dist/ir/type-system/internal/type-converter/index.d.ts.map +1 -0
- package/dist/ir/type-system/internal/type-converter/index.js +11 -0
- package/dist/ir/type-system/internal/type-converter/index.js.map +1 -0
- package/dist/ir/type-system/internal/type-converter/inference.d.ts +37 -0
- package/dist/ir/type-system/internal/type-converter/inference.d.ts.map +1 -0
- package/dist/ir/type-system/internal/type-converter/inference.js +32 -0
- package/dist/ir/type-system/internal/type-converter/inference.js.map +1 -0
- package/dist/ir/{type-converter → type-system/internal/type-converter}/literals.d.ts +1 -1
- package/dist/ir/type-system/internal/type-converter/literals.d.ts.map +1 -0
- package/dist/ir/type-system/internal/type-converter/literals.js.map +1 -0
- package/dist/ir/type-system/internal/type-converter/objects.d.ts +20 -0
- package/dist/ir/type-system/internal/type-converter/objects.d.ts.map +1 -0
- package/dist/ir/{type-converter → type-system/internal/type-converter}/objects.js +56 -6
- package/dist/ir/type-system/internal/type-converter/objects.js.map +1 -0
- package/dist/ir/{type-converter → type-system/internal/type-converter}/orchestrator.d.ts +3 -2
- package/dist/ir/type-system/internal/type-converter/orchestrator.d.ts.map +1 -0
- package/dist/ir/{type-converter → type-system/internal/type-converter}/orchestrator.js +63 -21
- package/dist/ir/type-system/internal/type-converter/orchestrator.js.map +1 -0
- package/dist/ir/type-system/internal/type-converter/patterns.d.ts +12 -0
- package/dist/ir/type-system/internal/type-converter/patterns.d.ts.map +1 -0
- package/dist/ir/{type-converter → type-system/internal/type-converter}/patterns.js +22 -6
- package/dist/ir/type-system/internal/type-converter/patterns.js.map +1 -0
- package/dist/ir/{type-converter → type-system/internal/type-converter}/primitives.d.ts +1 -1
- package/dist/ir/type-system/internal/type-converter/primitives.d.ts.map +1 -0
- package/dist/ir/type-system/internal/type-converter/primitives.js.map +1 -0
- package/dist/ir/{type-converter → type-system/internal/type-converter}/references.d.ts +3 -2
- package/dist/ir/type-system/internal/type-converter/references.d.ts.map +1 -0
- package/dist/ir/type-system/internal/type-converter/references.js +551 -0
- package/dist/ir/type-system/internal/type-converter/references.js.map +1 -0
- package/dist/ir/type-system/internal/type-converter/unions-intersections.d.ts +15 -0
- package/dist/ir/type-system/internal/type-converter/unions-intersections.d.ts.map +1 -0
- package/dist/ir/type-system/internal/type-converter/unions-intersections.js +22 -0
- package/dist/ir/type-system/internal/type-converter/unions-intersections.js.map +1 -0
- package/dist/ir/{type-converter → type-system/internal/type-converter}/utility-types.d.ts +23 -36
- package/dist/ir/type-system/internal/type-converter/utility-types.d.ts.map +1 -0
- package/dist/ir/type-system/internal/type-converter/utility-types.js +879 -0
- package/dist/ir/type-system/internal/type-converter/utility-types.js.map +1 -0
- package/dist/ir/type-system/internal/type-converter/utility-types.test.d.ts.map +1 -0
- package/dist/ir/{type-converter → type-system/internal/type-converter}/utility-types.test.js +398 -120
- package/dist/ir/type-system/internal/type-converter/utility-types.test.js.map +1 -0
- package/dist/ir/type-system/internal/type-converter.d.ts +9 -0
- package/dist/ir/type-system/internal/type-converter.d.ts.map +1 -0
- package/dist/ir/type-system/internal/type-converter.js +9 -0
- package/dist/ir/type-system/internal/type-converter.js.map +1 -0
- package/dist/ir/type-system/internal/type-registry.d.ts +107 -0
- package/dist/ir/type-system/internal/type-registry.d.ts.map +1 -0
- package/dist/ir/type-system/internal/type-registry.js +534 -0
- package/dist/ir/type-system/internal/type-registry.js.map +1 -0
- package/dist/ir/type-system/internal/universe/alias-table.d.ts +92 -0
- package/dist/ir/type-system/internal/universe/alias-table.d.ts.map +1 -0
- package/dist/ir/type-system/internal/universe/alias-table.js +222 -0
- package/dist/ir/type-system/internal/universe/alias-table.js.map +1 -0
- package/dist/ir/type-system/internal/universe/clr-catalog.d.ts +44 -0
- package/dist/ir/type-system/internal/universe/clr-catalog.d.ts.map +1 -0
- package/dist/ir/type-system/internal/universe/clr-catalog.js +1176 -0
- package/dist/ir/type-system/internal/universe/clr-catalog.js.map +1 -0
- package/dist/ir/type-system/internal/universe/index.d.ts +26 -0
- package/dist/ir/type-system/internal/universe/index.d.ts.map +1 -0
- package/dist/ir/type-system/internal/universe/index.js +30 -0
- package/dist/ir/type-system/internal/universe/index.js.map +1 -0
- package/dist/ir/type-system/internal/universe/resolution.d.ts +115 -0
- package/dist/ir/type-system/internal/universe/resolution.d.ts.map +1 -0
- package/dist/ir/type-system/internal/universe/resolution.js +181 -0
- package/dist/ir/type-system/internal/universe/resolution.js.map +1 -0
- package/dist/ir/type-system/internal/universe/source-catalog.d.ts +62 -0
- package/dist/ir/type-system/internal/universe/source-catalog.d.ts.map +1 -0
- package/dist/ir/type-system/internal/universe/source-catalog.js +91 -0
- package/dist/ir/type-system/internal/universe/source-catalog.js.map +1 -0
- package/dist/ir/type-system/internal/universe/types.d.ts +436 -0
- package/dist/ir/type-system/internal/universe/types.d.ts.map +1 -0
- package/dist/ir/type-system/internal/universe/types.js +69 -0
- package/dist/ir/type-system/internal/universe/types.js.map +1 -0
- package/dist/ir/type-system/internal/universe/unified-universe.d.ts +70 -0
- package/dist/ir/type-system/internal/universe/unified-universe.d.ts.map +1 -0
- package/dist/ir/type-system/internal/universe/unified-universe.js +319 -0
- package/dist/ir/type-system/internal/universe/unified-universe.js.map +1 -0
- package/dist/ir/type-system/type-system.d.ts +617 -0
- package/dist/ir/type-system/type-system.d.ts.map +1 -0
- package/dist/ir/type-system/type-system.js +2420 -0
- package/dist/ir/type-system/type-system.js.map +1 -0
- package/dist/ir/type-system/types.d.ts +176 -0
- package/dist/ir/type-system/types.d.ts.map +1 -0
- package/dist/ir/type-system/types.js +80 -0
- package/dist/ir/type-system/types.js.map +1 -0
- package/dist/ir/type-universe/assembly-catalog.d.ts +44 -0
- package/dist/ir/type-universe/assembly-catalog.d.ts.map +1 -0
- package/dist/ir/type-universe/assembly-catalog.js +532 -0
- package/dist/ir/type-universe/assembly-catalog.js.map +1 -0
- package/dist/ir/type-universe/assembly-catalog.test.d.ts +7 -0
- package/dist/ir/type-universe/assembly-catalog.test.d.ts.map +1 -0
- package/dist/ir/type-universe/assembly-catalog.test.js +105 -0
- package/dist/ir/type-universe/assembly-catalog.test.js.map +1 -0
- package/dist/ir/type-universe/index.d.ts +19 -0
- package/dist/ir/type-universe/index.d.ts.map +1 -0
- package/dist/ir/type-universe/index.js +21 -0
- package/dist/ir/type-universe/index.js.map +1 -0
- package/dist/ir/type-universe/types.d.ts +436 -0
- package/dist/ir/type-universe/types.d.ts.map +1 -0
- package/dist/ir/type-universe/types.js +69 -0
- package/dist/ir/type-universe/types.js.map +1 -0
- package/dist/ir/type-universe/unified-catalog.d.ts +70 -0
- package/dist/ir/type-universe/unified-catalog.d.ts.map +1 -0
- package/dist/ir/type-universe/unified-catalog.js +319 -0
- package/dist/ir/type-universe/unified-catalog.js.map +1 -0
- package/dist/ir/type-universe/unified-catalog.test.d.ts +7 -0
- package/dist/ir/type-universe/unified-catalog.test.d.ts.map +1 -0
- package/dist/ir/type-universe/unified-catalog.test.js +135 -0
- package/dist/ir/type-universe/unified-catalog.test.js.map +1 -0
- package/dist/ir/types/expressions.d.ts +33 -7
- package/dist/ir/types/expressions.d.ts.map +1 -1
- package/dist/ir/types/helpers.d.ts +22 -2
- package/dist/ir/types/helpers.d.ts.map +1 -1
- package/dist/ir/types/index.d.ts +4 -2
- package/dist/ir/types/index.d.ts.map +1 -1
- package/dist/ir/types/index.js +1 -0
- package/dist/ir/types/index.js.map +1 -1
- package/dist/ir/types/ir-substitution.d.ts +144 -0
- package/dist/ir/types/ir-substitution.d.ts.map +1 -0
- package/dist/ir/types/ir-substitution.js +569 -0
- package/dist/ir/types/ir-substitution.js.map +1 -0
- package/dist/ir/types/ir-types.d.ts +9 -3
- package/dist/ir/types/ir-types.d.ts.map +1 -1
- package/dist/ir/types/numeric-helpers.d.ts +2 -1
- package/dist/ir/types/numeric-helpers.d.ts.map +1 -1
- package/dist/ir/types/numeric-helpers.js +9 -3
- package/dist/ir/types/numeric-helpers.js.map +1 -1
- package/dist/ir/types/statements.d.ts +13 -1
- package/dist/ir/types/statements.d.ts.map +1 -1
- package/dist/ir/types.d.ts +1 -1
- package/dist/ir/types.d.ts.map +1 -1
- package/dist/ir/types.js.map +1 -1
- package/dist/ir/validation/anonymous-type-lowering-pass.d.ts.map +1 -1
- package/dist/ir/validation/anonymous-type-lowering-pass.js +152 -8
- package/dist/ir/validation/anonymous-type-lowering-pass.js.map +1 -1
- package/dist/ir/validation/arrow-return-finalization-pass.d.ts +28 -0
- package/dist/ir/validation/arrow-return-finalization-pass.d.ts.map +1 -0
- package/dist/ir/validation/arrow-return-finalization-pass.js +416 -0
- package/dist/ir/validation/arrow-return-finalization-pass.js.map +1 -0
- package/dist/ir/validation/attribute-collection-pass.d.ts.map +1 -1
- package/dist/ir/validation/attribute-collection-pass.js +40 -6
- package/dist/ir/validation/attribute-collection-pass.js.map +1 -1
- package/dist/ir/validation/attribute-collection-pass.test.js +43 -36
- package/dist/ir/validation/attribute-collection-pass.test.js.map +1 -1
- package/dist/ir/validation/index.d.ts +3 -0
- package/dist/ir/validation/index.d.ts.map +1 -1
- package/dist/ir/validation/index.js +3 -0
- package/dist/ir/validation/index.js.map +1 -1
- package/dist/ir/validation/numeric-coercion-pass.d.ts +22 -16
- package/dist/ir/validation/numeric-coercion-pass.d.ts.map +1 -1
- package/dist/ir/validation/numeric-coercion-pass.js +159 -51
- package/dist/ir/validation/numeric-coercion-pass.js.map +1 -1
- package/dist/ir/validation/numeric-invariants.test.js +72 -108
- package/dist/ir/validation/numeric-invariants.test.js.map +1 -1
- package/dist/ir/validation/numeric-proof-pass.d.ts.map +1 -1
- package/dist/ir/validation/numeric-proof-pass.js +71 -23
- package/dist/ir/validation/numeric-proof-pass.js.map +1 -1
- package/dist/ir/validation/rest-type-synthesis-pass.d.ts +24 -0
- package/dist/ir/validation/rest-type-synthesis-pass.d.ts.map +1 -0
- package/dist/ir/validation/rest-type-synthesis-pass.js +417 -0
- package/dist/ir/validation/rest-type-synthesis-pass.js.map +1 -0
- package/dist/ir/validation/soundness-gate.d.ts +11 -1
- package/dist/ir/validation/soundness-gate.d.ts.map +1 -1
- package/dist/ir/validation/soundness-gate.js +42 -10
- package/dist/ir/validation/soundness-gate.js.map +1 -1
- package/dist/ir/validation/soundness-gate.test.js +19 -2
- package/dist/ir/validation/soundness-gate.test.js.map +1 -1
- package/dist/ir/validation/virtual-marking-pass.d.ts +16 -0
- package/dist/ir/validation/virtual-marking-pass.d.ts.map +1 -0
- package/dist/ir/validation/virtual-marking-pass.js +77 -0
- package/dist/ir/validation/virtual-marking-pass.js.map +1 -0
- package/dist/ir/validation/yield-lowering-pass.test.js +2 -2
- package/dist/ir/validation/yield-lowering-pass.test.js.map +1 -1
- package/dist/program/bindings.d.ts +28 -0
- package/dist/program/bindings.d.ts.map +1 -1
- package/dist/program/bindings.js +204 -2
- package/dist/program/bindings.js.map +1 -1
- package/dist/program/bindings.test.js +30 -0
- package/dist/program/bindings.test.js.map +1 -1
- package/dist/program/creation.d.ts.map +1 -1
- package/dist/program/creation.js +251 -4
- package/dist/program/creation.js.map +1 -1
- package/dist/program/dependency-graph.d.ts.map +1 -1
- package/dist/program/dependency-graph.js +25 -25
- package/dist/program/dependency-graph.js.map +1 -1
- package/dist/program/diagnostics.d.ts.map +1 -1
- package/dist/program/diagnostics.js +6 -0
- package/dist/program/diagnostics.js.map +1 -1
- package/dist/program/index.d.ts +1 -1
- package/dist/program/index.d.ts.map +1 -1
- package/dist/program/types.d.ts +8 -8
- package/dist/program/types.d.ts.map +1 -1
- package/dist/resolver/clr-bindings-resolver.d.ts +1 -0
- package/dist/resolver/clr-bindings-resolver.d.ts.map +1 -1
- package/dist/resolver/clr-bindings-resolver.js +90 -34
- package/dist/resolver/clr-bindings-resolver.js.map +1 -1
- package/dist/resolver/import-resolution.d.ts +16 -1
- package/dist/resolver/import-resolution.d.ts.map +1 -1
- package/dist/resolver/import-resolution.js +29 -12
- package/dist/resolver/import-resolution.js.map +1 -1
- package/dist/resolver/naming.d.ts +1 -1
- package/dist/resolver/naming.d.ts.map +1 -1
- package/dist/resolver/naming.js +13 -2
- package/dist/resolver/naming.js.map +1 -1
- package/dist/resolver.test.js +4 -0
- package/dist/resolver.test.js.map +1 -1
- package/dist/symbol-table/builder.d.ts +3 -1
- package/dist/symbol-table/builder.d.ts.map +1 -1
- package/dist/symbol-table/builder.js +9 -8
- package/dist/symbol-table/builder.js.map +1 -1
- package/dist/symbol-table/types.d.ts +2 -2
- package/dist/symbol-table/types.d.ts.map +1 -1
- package/dist/types/diagnostic.d.ts +12 -2
- package/dist/types/diagnostic.d.ts.map +1 -1
- package/dist/types/diagnostic.js +5 -1
- package/dist/types/diagnostic.js.map +1 -1
- package/dist/validation/extension-methods.d.ts +17 -0
- package/dist/validation/extension-methods.d.ts.map +1 -0
- package/dist/validation/extension-methods.js +133 -0
- package/dist/validation/extension-methods.js.map +1 -0
- package/dist/validation/generics.d.ts.map +1 -1
- package/dist/validation/generics.js +1 -129
- package/dist/validation/generics.js.map +1 -1
- package/dist/validation/imports.js +1 -1
- package/dist/validation/imports.js.map +1 -1
- package/dist/validation/index.d.ts +1 -0
- package/dist/validation/index.d.ts.map +1 -1
- package/dist/validation/index.js +1 -0
- package/dist/validation/index.js.map +1 -1
- package/dist/validation/orchestrator.d.ts.map +1 -1
- package/dist/validation/orchestrator.js +2 -0
- package/dist/validation/orchestrator.js.map +1 -1
- package/dist/validation/static-safety.d.ts +1 -0
- package/dist/validation/static-safety.d.ts.map +1 -1
- package/dist/validation/static-safety.js +366 -96
- package/dist/validation/static-safety.js.map +1 -1
- package/dist/validator.test.js +77 -1
- package/dist/validator.test.js.map +1 -1
- package/package.json +2 -2
- package/dist/ir/type-converter/arrays.d.ts +0 -10
- package/dist/ir/type-converter/arrays.d.ts.map +0 -1
- package/dist/ir/type-converter/arrays.js.map +0 -1
- package/dist/ir/type-converter/converter.d.ts +0 -6
- package/dist/ir/type-converter/converter.d.ts.map +0 -1
- package/dist/ir/type-converter/converter.js +0 -6
- package/dist/ir/type-converter/converter.js.map +0 -1
- package/dist/ir/type-converter/functions.d.ts +0 -10
- package/dist/ir/type-converter/functions.d.ts.map +0 -1
- package/dist/ir/type-converter/functions.js +0 -15
- package/dist/ir/type-converter/functions.js.map +0 -1
- package/dist/ir/type-converter/index.d.ts +0 -7
- package/dist/ir/type-converter/index.d.ts.map +0 -1
- package/dist/ir/type-converter/index.js +0 -7
- package/dist/ir/type-converter/index.js.map +0 -1
- package/dist/ir/type-converter/inference.d.ts +0 -32
- package/dist/ir/type-converter/inference.d.ts.map +0 -1
- package/dist/ir/type-converter/inference.js +0 -297
- package/dist/ir/type-converter/inference.js.map +0 -1
- package/dist/ir/type-converter/literals.d.ts.map +0 -1
- package/dist/ir/type-converter/literals.js.map +0 -1
- package/dist/ir/type-converter/objects.d.ts +0 -16
- package/dist/ir/type-converter/objects.d.ts.map +0 -1
- package/dist/ir/type-converter/objects.js.map +0 -1
- package/dist/ir/type-converter/orchestrator.d.ts.map +0 -1
- package/dist/ir/type-converter/orchestrator.js.map +0 -1
- package/dist/ir/type-converter/patterns.d.ts +0 -10
- package/dist/ir/type-converter/patterns.d.ts.map +0 -1
- package/dist/ir/type-converter/patterns.js.map +0 -1
- package/dist/ir/type-converter/primitives.d.ts.map +0 -1
- package/dist/ir/type-converter/primitives.js.map +0 -1
- package/dist/ir/type-converter/references.d.ts.map +0 -1
- package/dist/ir/type-converter/references.js +0 -371
- package/dist/ir/type-converter/references.js.map +0 -1
- package/dist/ir/type-converter/unions-intersections.d.ts +0 -14
- package/dist/ir/type-converter/unions-intersections.d.ts.map +0 -1
- package/dist/ir/type-converter/unions-intersections.js +0 -22
- package/dist/ir/type-converter/unions-intersections.js.map +0 -1
- package/dist/ir/type-converter/utility-types.d.ts.map +0 -1
- package/dist/ir/type-converter/utility-types.js +0 -528
- package/dist/ir/type-converter/utility-types.js.map +0 -1
- package/dist/ir/type-converter/utility-types.test.d.ts.map +0 -1
- package/dist/ir/type-converter/utility-types.test.js.map +0 -1
- /package/dist/ir/{type-converter → type-system/internal/type-converter}/literals.js +0 -0
- /package/dist/ir/{type-converter → type-system/internal/type-converter}/primitives.js +0 -0
- /package/dist/ir/{type-converter → type-system/internal/type-converter}/utility-types.test.d.ts +0 -0
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* INV-0 Enforcement Test: No TypeScript Computed Types in IR Pipeline
|
|
3
|
+
*
|
|
4
|
+
* This test enforces Alice's specification that the IR typing pipeline
|
|
5
|
+
* must NEVER use TypeScript's computed type APIs. All IR types must come from:
|
|
6
|
+
* - Declared TypeNodes (annotations, signatures, property types)
|
|
7
|
+
* - Globals TypeNodes (@tsonic/globals, BCL bindings)
|
|
8
|
+
* - Bounded deterministic inference (lexeme intent + expectedType threading)
|
|
9
|
+
*
|
|
10
|
+
* TS checker is allowed ONLY for:
|
|
11
|
+
* - Symbol lookup (getSymbolAtLocation)
|
|
12
|
+
* - Overload selection (getResolvedSignature)
|
|
13
|
+
* - Module resolution
|
|
14
|
+
* - symbol.getDeclarations()
|
|
15
|
+
*/
|
|
16
|
+
import { describe, it } from "mocha";
|
|
17
|
+
import { expect } from "chai";
|
|
18
|
+
import * as fs from "fs";
|
|
19
|
+
import * as path from "path";
|
|
20
|
+
import { fileURLToPath } from "url";
|
|
21
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
22
|
+
const __dirname = path.dirname(__filename);
|
|
23
|
+
/**
|
|
24
|
+
* Banned patterns that use TypeScript's computed type inference.
|
|
25
|
+
* These patterns extract types computed by the TS type checker,
|
|
26
|
+
* which violates deterministic IR typing.
|
|
27
|
+
*/
|
|
28
|
+
const BANNED_PATTERNS = [
|
|
29
|
+
// Core type inference APIs - extract computed types
|
|
30
|
+
/checker\.getTypeAtLocation\s*\(/g,
|
|
31
|
+
/checker\.getTypeOfSymbolAtLocation\s*\(/g,
|
|
32
|
+
/checker\.typeToTypeNode\s*\(/g,
|
|
33
|
+
// Type structure inspection - uses computed types
|
|
34
|
+
/checker\.getApparentType\s*\(/g,
|
|
35
|
+
/checker\.getBaseTypes\s*\(/g,
|
|
36
|
+
/checker\.getPropertiesOfType\s*\(/g,
|
|
37
|
+
// Type relationship APIs - uses computed types
|
|
38
|
+
/checker\.isTypeAssignableTo\s*\(/g,
|
|
39
|
+
/checker\.getWidenedType\s*\(/g,
|
|
40
|
+
/checker\.getContextualType\s*\(/g,
|
|
41
|
+
// Signature type extraction - should use declaration TypeNodes instead
|
|
42
|
+
/checker\.getSignaturesOfType\s*\(/g,
|
|
43
|
+
/checker\.getReturnTypeOfSignature\s*\(/g,
|
|
44
|
+
// Type parameter inference - should use bounded unification
|
|
45
|
+
/checker\.getTypeArguments\s*\(/g,
|
|
46
|
+
/checker\.inferTypeArguments\s*\(/g,
|
|
47
|
+
];
|
|
48
|
+
/**
|
|
49
|
+
* Allowed patterns - resolver-only usage of TS checker.
|
|
50
|
+
* These find declarations/symbols, but don't extract computed types.
|
|
51
|
+
*/
|
|
52
|
+
const ALLOWED_PATTERNS_INFO = [
|
|
53
|
+
"checker.getSymbolAtLocation - finds symbol, not type",
|
|
54
|
+
"checker.getResolvedSignature - picks overload, return type from declaration",
|
|
55
|
+
"checker.getPropertyOfType - finds member symbol, type from declaration",
|
|
56
|
+
"symbol.getDeclarations() - gets AST node, type from TypeNode",
|
|
57
|
+
"checker.getAliasedSymbol - resolves import aliases",
|
|
58
|
+
"checker.getExportSymbolOfSymbol - resolves exports",
|
|
59
|
+
];
|
|
60
|
+
/**
|
|
61
|
+
* Directories to scan for banned patterns.
|
|
62
|
+
*/
|
|
63
|
+
const IR_DIRECTORIES = [
|
|
64
|
+
"packages/frontend/src/ir/converters",
|
|
65
|
+
"packages/frontend/src/ir/type-converter",
|
|
66
|
+
"packages/frontend/src/ir/validation",
|
|
67
|
+
];
|
|
68
|
+
/**
|
|
69
|
+
* Files to exclude from scanning (allowed to use banned patterns).
|
|
70
|
+
* Intentionally empty — exclusions weaken enforcement.
|
|
71
|
+
*/
|
|
72
|
+
const EXCLUDED_FILES = [];
|
|
73
|
+
/**
|
|
74
|
+
* Get all TypeScript files in a directory recursively.
|
|
75
|
+
*/
|
|
76
|
+
const getTypeScriptFiles = (dir) => {
|
|
77
|
+
// From dist/ir/ go up to packages/frontend, then up to project root
|
|
78
|
+
const projectRoot = path.resolve(__dirname, "../../../..");
|
|
79
|
+
const fullPath = path.join(projectRoot, dir);
|
|
80
|
+
if (!fs.existsSync(fullPath)) {
|
|
81
|
+
return [];
|
|
82
|
+
}
|
|
83
|
+
const results = [];
|
|
84
|
+
const entries = fs.readdirSync(fullPath, { withFileTypes: true });
|
|
85
|
+
for (const entry of entries) {
|
|
86
|
+
const entryPath = path.join(fullPath, entry.name);
|
|
87
|
+
if (entry.isDirectory()) {
|
|
88
|
+
results.push(...getTypeScriptFiles(path.join(dir, entry.name)));
|
|
89
|
+
}
|
|
90
|
+
else if (entry.name.endsWith(".ts") && !entry.name.endsWith(".test.ts")) {
|
|
91
|
+
results.push(entryPath);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
return results;
|
|
95
|
+
};
|
|
96
|
+
/**
|
|
97
|
+
* Check a file for banned patterns.
|
|
98
|
+
*/
|
|
99
|
+
const checkFileForBannedPatterns = (filePath) => {
|
|
100
|
+
const content = fs.readFileSync(filePath, "utf-8");
|
|
101
|
+
const lines = content.split("\n");
|
|
102
|
+
const violations = [];
|
|
103
|
+
for (const pattern of BANNED_PATTERNS) {
|
|
104
|
+
// Reset regex state for each file
|
|
105
|
+
pattern.lastIndex = 0;
|
|
106
|
+
for (let lineNum = 0; lineNum < lines.length; lineNum++) {
|
|
107
|
+
const line = lines[lineNum];
|
|
108
|
+
if (line === undefined)
|
|
109
|
+
continue;
|
|
110
|
+
// Skip comments
|
|
111
|
+
const trimmed = line.trim();
|
|
112
|
+
if (trimmed.startsWith("//") || trimmed.startsWith("*")) {
|
|
113
|
+
continue;
|
|
114
|
+
}
|
|
115
|
+
// Reset for each line since we're using global flag
|
|
116
|
+
const testPattern = new RegExp(pattern.source);
|
|
117
|
+
if (testPattern.test(line)) {
|
|
118
|
+
violations.push({
|
|
119
|
+
pattern: pattern.source,
|
|
120
|
+
line: lineNum + 1,
|
|
121
|
+
text: line.trim().substring(0, 80),
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
return { file: filePath, violations };
|
|
127
|
+
};
|
|
128
|
+
describe("INV-0: No TS Computed Types in IR Pipeline", () => {
|
|
129
|
+
it("should not use banned TypeScript type inference APIs in IR converters", () => {
|
|
130
|
+
const allViolations = [];
|
|
131
|
+
for (const dir of IR_DIRECTORIES) {
|
|
132
|
+
const files = getTypeScriptFiles(dir);
|
|
133
|
+
for (const file of files) {
|
|
134
|
+
// Check if file is excluded
|
|
135
|
+
const relativePath = path.relative(path.resolve(__dirname, "../../../.."), file);
|
|
136
|
+
if (EXCLUDED_FILES.some((excluded) => relativePath.includes(excluded))) {
|
|
137
|
+
continue;
|
|
138
|
+
}
|
|
139
|
+
const result = checkFileForBannedPatterns(file);
|
|
140
|
+
if (result.violations.length > 0) {
|
|
141
|
+
allViolations.push(result);
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
if (allViolations.length > 0) {
|
|
146
|
+
const message = allViolations
|
|
147
|
+
.map((v) => {
|
|
148
|
+
const relativePath = path.relative(path.resolve(__dirname, "../../../.."), v.file);
|
|
149
|
+
const violationList = v.violations
|
|
150
|
+
.map((viol) => ` Line ${viol.line}: ${viol.pattern}\n ${viol.text}`)
|
|
151
|
+
.join("\n");
|
|
152
|
+
return `\n${relativePath}:\n${violationList}`;
|
|
153
|
+
})
|
|
154
|
+
.join("\n");
|
|
155
|
+
expect.fail(`Found ${allViolations.reduce((sum, v) => sum + v.violations.length, 0)} violations of INV-0 (no TS computed types):\n${message}\n\n` +
|
|
156
|
+
`These APIs must be replaced with TypeRegistry + NominalEnv lookups.\n` +
|
|
157
|
+
`See: packages/frontend/src/ir/type-registry.ts\n` +
|
|
158
|
+
`Allowed resolver-only patterns:\n${ALLOWED_PATTERNS_INFO.map((p) => ` - ${p}`).join("\n")}`);
|
|
159
|
+
}
|
|
160
|
+
});
|
|
161
|
+
it("should document all excluded files with migration plan", () => {
|
|
162
|
+
// Once all files are migrated, EXCLUDED_FILES should be empty
|
|
163
|
+
if (EXCLUDED_FILES.length > 0) {
|
|
164
|
+
console.log(`\nNote: ${EXCLUDED_FILES.length} files still excluded from INV-0 check:\n` +
|
|
165
|
+
EXCLUDED_FILES.map((f) => ` - ${f}`).join("\n"));
|
|
166
|
+
}
|
|
167
|
+
// This test passes but logs excluded files for visibility
|
|
168
|
+
expect(true).to.equal(true);
|
|
169
|
+
});
|
|
170
|
+
});
|
|
171
|
+
//# sourceMappingURL=no-ts-type-inference.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"no-ts-type-inference.test.js","sourceRoot":"","sources":["../../src/ir/no-ts-type-inference.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ProgramContext — Per-compilation context for all semantic state
|
|
3
|
+
*
|
|
4
|
+
* This is the ONLY place where internal registries are constructed and wired together.
|
|
5
|
+
* All converters and builder helpers receive context explicitly — no global state.
|
|
6
|
+
*
|
|
7
|
+
* Phase 6: NominalEnv is now TypeId-based, using UnifiedTypeCatalog.
|
|
8
|
+
*/
|
|
9
|
+
import type { Binding } from "./binding/index.js";
|
|
10
|
+
import type { TypeAuthority } from "./type-system/type-system.js";
|
|
11
|
+
import type { IrType } from "./types.js";
|
|
12
|
+
import type { DotnetMetadataRegistry } from "../dotnet-metadata.js";
|
|
13
|
+
import type { BindingRegistry } from "../program/bindings.js";
|
|
14
|
+
import type { ClrBindingsResolver } from "../resolver/clr-bindings-resolver.js";
|
|
15
|
+
import type { TsonicProgram } from "../program.js";
|
|
16
|
+
import type { IrBuildOptions } from "./builder/types.js";
|
|
17
|
+
/**
|
|
18
|
+
* ProgramContext — Per-compilation context owning all semantic state.
|
|
19
|
+
*
|
|
20
|
+
* This context object carries shared resources through the converter chain,
|
|
21
|
+
* eliminating the need for global singletons.
|
|
22
|
+
*
|
|
23
|
+
* INVARIANT: One program → one context. No global state.
|
|
24
|
+
*/
|
|
25
|
+
export type ProgramContext = {
|
|
26
|
+
/**
|
|
27
|
+
* Binding layer for symbol resolution.
|
|
28
|
+
*
|
|
29
|
+
* Provides resolveIdentifier, resolveCallSignature, etc.
|
|
30
|
+
*/
|
|
31
|
+
readonly binding: Binding;
|
|
32
|
+
/**
|
|
33
|
+
* TypeSystem for all type queries (Alice's spec).
|
|
34
|
+
*
|
|
35
|
+
* This is the ONLY source for type information. Converters should use
|
|
36
|
+
* TypeSystem methods instead of accessing TypeRegistry/NominalEnv directly.
|
|
37
|
+
*/
|
|
38
|
+
readonly typeSystem: TypeAuthority;
|
|
39
|
+
/**
|
|
40
|
+
* .NET metadata registry for imported types.
|
|
41
|
+
*/
|
|
42
|
+
readonly metadata: DotnetMetadataRegistry;
|
|
43
|
+
/**
|
|
44
|
+
* CLR bindings from tsbindgen.
|
|
45
|
+
*/
|
|
46
|
+
readonly bindings: BindingRegistry;
|
|
47
|
+
/**
|
|
48
|
+
* CLR namespace resolver for import-driven discovery.
|
|
49
|
+
*/
|
|
50
|
+
readonly clrResolver: ClrBindingsResolver;
|
|
51
|
+
/**
|
|
52
|
+
* Lexical type environment for lambda bodies.
|
|
53
|
+
*
|
|
54
|
+
* Used to type unannotated lambda parameters inside their body expressions
|
|
55
|
+
* deterministically, without consulting TypeScript inference.
|
|
56
|
+
*/
|
|
57
|
+
readonly lambdaTypeEnv?: ReadonlyMap<string, IrType>;
|
|
58
|
+
};
|
|
59
|
+
/**
|
|
60
|
+
* Create a ProgramContext for a compilation.
|
|
61
|
+
*
|
|
62
|
+
* This factory is the ONLY place that wires together the internal registries.
|
|
63
|
+
* It performs the full setup:
|
|
64
|
+
* 1. Build SourceCatalog / TypeRegistry using two-pass builder
|
|
65
|
+
* 2. Build CLR catalog from node_modules
|
|
66
|
+
* 3. Build UnifiedUniverse merging source and CLR types
|
|
67
|
+
* 4. Build NominalEnv from UnifiedTypeCatalog (TypeId-based)
|
|
68
|
+
* 5. Construct TypeSystem as single source of truth
|
|
69
|
+
*
|
|
70
|
+
* @param program - The TsonicProgram with type checker and bindings
|
|
71
|
+
* @param options - Build options (sourceRoot, rootNamespace)
|
|
72
|
+
*/
|
|
73
|
+
export declare const createProgramContext: (program: TsonicProgram, options: IrBuildOptions) => ProgramContext;
|
|
74
|
+
//# sourceMappingURL=program-context.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"program-context.d.ts","sourceRoot":"","sources":["../../src/ir/program-context.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAMH,OAAO,KAAK,EAAE,OAAO,EAAmB,MAAM,oBAAoB,CAAC;AACnE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAClE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AACpE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,sCAAsC,CAAC;AAChF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAWzD;;;;;;;GAOG;AACH,MAAM,MAAM,cAAc,GAAG;IAC3B;;;;OAIG;IACH,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAE1B;;;;;OAKG;IACH,QAAQ,CAAC,UAAU,EAAE,aAAa,CAAC;IAEnC;;OAEG;IACH,QAAQ,CAAC,QAAQ,EAAE,sBAAsB,CAAC;IAE1C;;OAEG;IACH,QAAQ,CAAC,QAAQ,EAAE,eAAe,CAAC;IAEnC;;OAEG;IACH,QAAQ,CAAC,WAAW,EAAE,mBAAmB,CAAC;IAE1C;;;;;OAKG;IACH,QAAQ,CAAC,aAAa,CAAC,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACtD,CAAC;AAEF;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,oBAAoB,GAC/B,SAAS,aAAa,EACtB,SAAS,cAAc,KACtB,cA2UF,CAAC"}
|
|
@@ -0,0 +1,286 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ProgramContext — Per-compilation context for all semantic state
|
|
3
|
+
*
|
|
4
|
+
* This is the ONLY place where internal registries are constructed and wired together.
|
|
5
|
+
* All converters and builder helpers receive context explicitly — no global state.
|
|
6
|
+
*
|
|
7
|
+
* Phase 6: NominalEnv is now TypeId-based, using UnifiedTypeCatalog.
|
|
8
|
+
*/
|
|
9
|
+
import * as fs from "node:fs";
|
|
10
|
+
import { createRequire } from "node:module";
|
|
11
|
+
import * as path from "path";
|
|
12
|
+
import * as ts from "typescript";
|
|
13
|
+
import { buildNominalEnv } from "./type-system/internal/nominal-env.js";
|
|
14
|
+
import { convertCapturedTypeNode } from "./type-system/internal/type-converter.js";
|
|
15
|
+
import { createTypeSystem } from "./type-system/type-system.js";
|
|
16
|
+
import { buildAliasTable, buildSourceCatalog, buildUnifiedUniverse, loadClrCatalog, } from "./type-system/internal/universe/index.js";
|
|
17
|
+
/**
|
|
18
|
+
* Create a ProgramContext for a compilation.
|
|
19
|
+
*
|
|
20
|
+
* This factory is the ONLY place that wires together the internal registries.
|
|
21
|
+
* It performs the full setup:
|
|
22
|
+
* 1. Build SourceCatalog / TypeRegistry using two-pass builder
|
|
23
|
+
* 2. Build CLR catalog from node_modules
|
|
24
|
+
* 3. Build UnifiedUniverse merging source and CLR types
|
|
25
|
+
* 4. Build NominalEnv from UnifiedTypeCatalog (TypeId-based)
|
|
26
|
+
* 5. Construct TypeSystem as single source of truth
|
|
27
|
+
*
|
|
28
|
+
* @param program - The TsonicProgram with type checker and bindings
|
|
29
|
+
* @param options - Build options (sourceRoot, rootNamespace)
|
|
30
|
+
*/
|
|
31
|
+
export const createProgramContext = (program, options) => {
|
|
32
|
+
// Build TypeRegistry from all source files INCLUDING declaration files from typeRoots
|
|
33
|
+
// Declaration files contain globals (String, Array, etc.) needed for method resolution
|
|
34
|
+
//
|
|
35
|
+
// PHASE 4 (Alice's spec): Use buildSourceCatalog with two-pass build.
|
|
36
|
+
// Pass A: Register all type names (skeleton)
|
|
37
|
+
// Pass B: Convert all type annotations (with stable resolution)
|
|
38
|
+
const packageRootCache = new Map();
|
|
39
|
+
const packageInfoCache = new Map();
|
|
40
|
+
const packageHasMetadataCache = new Map();
|
|
41
|
+
const findPackageRootForFile = (fileName) => {
|
|
42
|
+
const normalized = fileName.replace(/\\/g, "/");
|
|
43
|
+
if (packageRootCache.has(normalized))
|
|
44
|
+
return packageRootCache.get(normalized);
|
|
45
|
+
let dir = path.dirname(fileName);
|
|
46
|
+
while (true) {
|
|
47
|
+
const pkgJson = path.join(dir, "package.json");
|
|
48
|
+
if (fs.existsSync(pkgJson)) {
|
|
49
|
+
packageRootCache.set(normalized, dir);
|
|
50
|
+
return dir;
|
|
51
|
+
}
|
|
52
|
+
const parent = path.dirname(dir);
|
|
53
|
+
if (parent === dir) {
|
|
54
|
+
packageRootCache.set(normalized, undefined);
|
|
55
|
+
return undefined;
|
|
56
|
+
}
|
|
57
|
+
dir = parent;
|
|
58
|
+
}
|
|
59
|
+
};
|
|
60
|
+
const getPackageInfo = (pkgRoot) => {
|
|
61
|
+
if (packageInfoCache.has(pkgRoot))
|
|
62
|
+
return packageInfoCache.get(pkgRoot);
|
|
63
|
+
try {
|
|
64
|
+
const raw = fs.readFileSync(path.join(pkgRoot, "package.json"), "utf-8");
|
|
65
|
+
const parsed = JSON.parse(raw);
|
|
66
|
+
if (typeof parsed !== "object" || parsed === null) {
|
|
67
|
+
packageInfoCache.set(pkgRoot, undefined);
|
|
68
|
+
return undefined;
|
|
69
|
+
}
|
|
70
|
+
const name = typeof parsed.name === "string"
|
|
71
|
+
? parsed.name
|
|
72
|
+
: undefined;
|
|
73
|
+
const keywordsRaw = parsed.keywords;
|
|
74
|
+
const keywords = Array.isArray(keywordsRaw)
|
|
75
|
+
? keywordsRaw.filter((k) => typeof k === "string")
|
|
76
|
+
: [];
|
|
77
|
+
const peerDepsRaw = parsed
|
|
78
|
+
.peerDependencies;
|
|
79
|
+
const peerDependencies = peerDepsRaw && typeof peerDepsRaw === "object" && !Array.isArray(peerDepsRaw)
|
|
80
|
+
? Object.fromEntries(Object.entries(peerDepsRaw).filter((entry) => typeof entry[0] === "string" && typeof entry[1] === "string"))
|
|
81
|
+
: {};
|
|
82
|
+
const info = { name, keywords, peerDependencies };
|
|
83
|
+
packageInfoCache.set(pkgRoot, info);
|
|
84
|
+
return info;
|
|
85
|
+
}
|
|
86
|
+
catch {
|
|
87
|
+
packageInfoCache.set(pkgRoot, undefined);
|
|
88
|
+
return undefined;
|
|
89
|
+
}
|
|
90
|
+
};
|
|
91
|
+
const isTsonicClrPackage = (pkgRoot) => {
|
|
92
|
+
const info = getPackageInfo(pkgRoot);
|
|
93
|
+
if (!info)
|
|
94
|
+
return false;
|
|
95
|
+
if (info.name?.startsWith("@tsonic/"))
|
|
96
|
+
return true;
|
|
97
|
+
if (info.keywords.includes("tsonic"))
|
|
98
|
+
return true;
|
|
99
|
+
if (Object.prototype.hasOwnProperty.call(info.peerDependencies, "@tsonic/core")) {
|
|
100
|
+
return true;
|
|
101
|
+
}
|
|
102
|
+
return false;
|
|
103
|
+
};
|
|
104
|
+
const packageHasClrMetadata = (pkgRoot) => {
|
|
105
|
+
// Only treat explicitly marked Tsonic packages as CLR metadata packages.
|
|
106
|
+
// Many third-party npm packages ship random `metadata.json` files; scanning and
|
|
107
|
+
// excluding them would incorrectly drop their declaration files from SourceCatalog.
|
|
108
|
+
if (!isTsonicClrPackage(pkgRoot))
|
|
109
|
+
return false;
|
|
110
|
+
const cached = packageHasMetadataCache.get(pkgRoot);
|
|
111
|
+
if (cached !== undefined)
|
|
112
|
+
return cached;
|
|
113
|
+
let found = false;
|
|
114
|
+
const stack = [pkgRoot];
|
|
115
|
+
while (stack.length > 0 && !found) {
|
|
116
|
+
const currentDir = stack.pop();
|
|
117
|
+
if (!currentDir)
|
|
118
|
+
continue;
|
|
119
|
+
try {
|
|
120
|
+
for (const entry of fs.readdirSync(currentDir, { withFileTypes: true })) {
|
|
121
|
+
const fullPath = path.join(currentDir, entry.name);
|
|
122
|
+
if (entry.isFile() && entry.name === "metadata.json") {
|
|
123
|
+
found = true;
|
|
124
|
+
break;
|
|
125
|
+
}
|
|
126
|
+
if (entry.isDirectory()) {
|
|
127
|
+
// Avoid descending into nested node_modules if present.
|
|
128
|
+
if (entry.name === "node_modules")
|
|
129
|
+
continue;
|
|
130
|
+
stack.push(fullPath);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
catch {
|
|
135
|
+
// Ignore unreadable directories.
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
packageHasMetadataCache.set(pkgRoot, found);
|
|
139
|
+
return found;
|
|
140
|
+
};
|
|
141
|
+
const declarationSourceFiles = program.declarationSourceFiles.filter((sf) => {
|
|
142
|
+
const pkgRoot = findPackageRootForFile(sf.fileName);
|
|
143
|
+
if (!pkgRoot)
|
|
144
|
+
return true;
|
|
145
|
+
// tsbindgen-generated CLR declarations live in packages that include metadata.json
|
|
146
|
+
// and are already represented in the CLR catalog. Including them in SourceCatalog
|
|
147
|
+
// creates tsName collisions (e.g., `IEnumerable_1`) that break nominal resolution.
|
|
148
|
+
return !packageHasClrMetadata(pkgRoot);
|
|
149
|
+
});
|
|
150
|
+
const allSourceFiles = [...program.sourceFiles, ...declarationSourceFiles];
|
|
151
|
+
const { typeRegistry } = buildSourceCatalog({
|
|
152
|
+
sourceFiles: allSourceFiles,
|
|
153
|
+
checker: program.checker,
|
|
154
|
+
sourceRoot: options.sourceRoot,
|
|
155
|
+
rootNamespace: options.rootNamespace,
|
|
156
|
+
binding: program.binding,
|
|
157
|
+
});
|
|
158
|
+
// Load assembly type catalog for CLR stdlib types
|
|
159
|
+
// This enables member lookup on primitive types like string.length
|
|
160
|
+
const nodeModulesPath = path.resolve(program.options.projectRoot, "node_modules");
|
|
161
|
+
const require = createRequire(import.meta.url);
|
|
162
|
+
const findSiblingTsonicPackage = (startDir, dirName, expectedPackageName) => {
|
|
163
|
+
let dir = startDir;
|
|
164
|
+
while (true) {
|
|
165
|
+
const candidateRoot = path.join(dir, dirName);
|
|
166
|
+
const pkgJson = path.join(candidateRoot, "package.json");
|
|
167
|
+
if (fs.existsSync(pkgJson)) {
|
|
168
|
+
try {
|
|
169
|
+
const parsed = JSON.parse(fs.readFileSync(pkgJson, "utf-8"));
|
|
170
|
+
if (parsed.name === expectedPackageName) {
|
|
171
|
+
return candidateRoot;
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
catch {
|
|
175
|
+
// Ignore invalid package.json and keep searching.
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
const parent = path.dirname(dir);
|
|
179
|
+
if (parent === dir)
|
|
180
|
+
return undefined;
|
|
181
|
+
dir = parent;
|
|
182
|
+
}
|
|
183
|
+
};
|
|
184
|
+
const resolveTsonicPackageRoot = (dirName, expectedPackageName) => {
|
|
185
|
+
const projectPkgJson = path.join(nodeModulesPath, "@tsonic", dirName, "package.json");
|
|
186
|
+
if (fs.existsSync(projectPkgJson)) {
|
|
187
|
+
return path.dirname(projectPkgJson);
|
|
188
|
+
}
|
|
189
|
+
try {
|
|
190
|
+
const pkgJson = require.resolve(`@tsonic/${dirName}/package.json`);
|
|
191
|
+
return path.dirname(pkgJson);
|
|
192
|
+
}
|
|
193
|
+
catch {
|
|
194
|
+
// Fall through to sibling lookup.
|
|
195
|
+
}
|
|
196
|
+
return findSiblingTsonicPackage(program.options.projectRoot, dirName, expectedPackageName);
|
|
197
|
+
};
|
|
198
|
+
const extraPackageRoots = [];
|
|
199
|
+
// If the project doesn't have these packages installed, allow discovering them
|
|
200
|
+
// from sibling checkouts (common in a multi-repo workspace).
|
|
201
|
+
const jsInstalled = fs.existsSync(path.join(nodeModulesPath, "@tsonic", "js", "package.json"));
|
|
202
|
+
if (!jsInstalled) {
|
|
203
|
+
const jsRoot = resolveTsonicPackageRoot("js", "@tsonic/js");
|
|
204
|
+
if (jsRoot)
|
|
205
|
+
extraPackageRoots.push(jsRoot);
|
|
206
|
+
}
|
|
207
|
+
const nodejsInstalled = fs.existsSync(path.join(nodeModulesPath, "@tsonic", "nodejs", "package.json"));
|
|
208
|
+
if (!nodejsInstalled) {
|
|
209
|
+
const nodejsRoot = resolveTsonicPackageRoot("nodejs", "@tsonic/nodejs");
|
|
210
|
+
if (nodejsRoot)
|
|
211
|
+
extraPackageRoots.push(nodejsRoot);
|
|
212
|
+
}
|
|
213
|
+
// Ensure stdlib metadata is available even when the project has no node_modules
|
|
214
|
+
// (e.g., in a multi-repo workspace). dotnet provides CLR surface area for
|
|
215
|
+
// primitives (System.String, etc.) and core provides @tsonic/core aliases.
|
|
216
|
+
const dotnetInstalled = fs.existsSync(path.join(nodeModulesPath, "@tsonic", "dotnet", "package.json"));
|
|
217
|
+
if (!dotnetInstalled) {
|
|
218
|
+
const dotnetRoot = resolveTsonicPackageRoot("dotnet", "@tsonic/dotnet");
|
|
219
|
+
if (dotnetRoot)
|
|
220
|
+
extraPackageRoots.push(dotnetRoot);
|
|
221
|
+
}
|
|
222
|
+
const coreInstalled = fs.existsSync(path.join(nodeModulesPath, "@tsonic", "core", "package.json"));
|
|
223
|
+
if (!coreInstalled) {
|
|
224
|
+
const coreRoot = resolveTsonicPackageRoot("core", "@tsonic/core");
|
|
225
|
+
if (coreRoot)
|
|
226
|
+
extraPackageRoots.push(coreRoot);
|
|
227
|
+
}
|
|
228
|
+
// Include any additional CLR packages discovered via imports (e.g., efcore, aspnetcore).
|
|
229
|
+
// The CLR catalog loader scans node_modules/@tsonic by default; when developing in a
|
|
230
|
+
// multi-repo workspace (or running E2E fixtures without local node_modules),
|
|
231
|
+
// imports can resolve from sibling checkouts. Those package roots must be added
|
|
232
|
+
// explicitly so metadata.json files are discovered and loaded into the Universe.
|
|
233
|
+
const resolvePackageRootFromBindingsPath = (bindingsPath) => {
|
|
234
|
+
let dir = path.dirname(bindingsPath);
|
|
235
|
+
while (true) {
|
|
236
|
+
if (fs.existsSync(path.join(dir, "package.json")))
|
|
237
|
+
return dir;
|
|
238
|
+
const parent = path.dirname(dir);
|
|
239
|
+
if (parent === dir)
|
|
240
|
+
return undefined;
|
|
241
|
+
dir = parent;
|
|
242
|
+
}
|
|
243
|
+
};
|
|
244
|
+
for (const bindingsPath of program.clrResolver.getDiscoveredBindingPaths()) {
|
|
245
|
+
const pkgRoot = resolvePackageRootFromBindingsPath(bindingsPath);
|
|
246
|
+
if (pkgRoot)
|
|
247
|
+
extraPackageRoots.push(pkgRoot);
|
|
248
|
+
}
|
|
249
|
+
const assemblyCatalog = loadClrCatalog(nodeModulesPath, extraPackageRoots);
|
|
250
|
+
const aliasTable = buildAliasTable(assemblyCatalog);
|
|
251
|
+
// Build unified catalog merging source and assembly types
|
|
252
|
+
const unifiedCatalog = buildUnifiedUniverse(typeRegistry, assemblyCatalog, program.options.rootNamespace);
|
|
253
|
+
// Phase 6: Build NominalEnv from UnifiedTypeCatalog (TypeId-based)
|
|
254
|
+
// No longer requires TypeRegistry, convertType, or binding
|
|
255
|
+
const nominalEnv = buildNominalEnv(unifiedCatalog);
|
|
256
|
+
// Build TypeSystem — the single source of truth for all type queries (Alice's spec)
|
|
257
|
+
// TypeSystem encapsulates HandleRegistry, TypeRegistry, NominalEnv and type conversion
|
|
258
|
+
const bindingInternal = program.binding;
|
|
259
|
+
const typeSystem = createTypeSystem({
|
|
260
|
+
handleRegistry: bindingInternal._getHandleRegistry(),
|
|
261
|
+
typeRegistry,
|
|
262
|
+
nominalEnv,
|
|
263
|
+
// Phase 5: Use convertCapturedTypeNode to encapsulate cast in internal module
|
|
264
|
+
convertTypeNode: (node) => convertCapturedTypeNode(node, program.binding),
|
|
265
|
+
// Unified catalog for CLR assembly type lookups
|
|
266
|
+
unifiedCatalog,
|
|
267
|
+
aliasTable,
|
|
268
|
+
resolveIdentifier: (node) => ts.isIdentifier(node)
|
|
269
|
+
? program.binding.resolveIdentifier(node)
|
|
270
|
+
: undefined,
|
|
271
|
+
resolveCallSignature: (node) => ts.isCallExpression(node)
|
|
272
|
+
? program.binding.resolveCallSignature(node)
|
|
273
|
+
: undefined,
|
|
274
|
+
resolveConstructorSignature: (node) => ts.isNewExpression(node)
|
|
275
|
+
? program.binding.resolveConstructorSignature(node)
|
|
276
|
+
: undefined,
|
|
277
|
+
});
|
|
278
|
+
return {
|
|
279
|
+
binding: program.binding,
|
|
280
|
+
typeSystem,
|
|
281
|
+
metadata: program.metadata,
|
|
282
|
+
bindings: program.bindings,
|
|
283
|
+
clrResolver: program.clrResolver,
|
|
284
|
+
};
|
|
285
|
+
};
|
|
286
|
+
//# sourceMappingURL=program-context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"program-context.js","sourceRoot":"","sources":["../../src/ir/program-context.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Statement converter - TypeScript AST to IR statements
|
|
3
3
|
* Main dispatcher - delegates to specialized modules
|
|
4
|
+
*
|
|
5
|
+
* Phase 5 Step 4: Uses ProgramContext instead of global singletons.
|
|
4
6
|
*/
|
|
5
7
|
import * as ts from "typescript";
|
|
6
|
-
import { IrStatement } from "./types.js";
|
|
8
|
+
import { IrStatement, IrType } from "./types.js";
|
|
9
|
+
import type { ProgramContext } from "./program-context.js";
|
|
7
10
|
/**
|
|
8
11
|
* Result type for statement conversion.
|
|
9
12
|
* Some converters (like type aliases with synthetic types) return multiple statements.
|
|
@@ -11,8 +14,12 @@ import { IrStatement } from "./types.js";
|
|
|
11
14
|
export type ConvertStatementResult = IrStatement | readonly IrStatement[] | null;
|
|
12
15
|
/**
|
|
13
16
|
* Main statement converter dispatcher
|
|
17
|
+
*
|
|
18
|
+
* @param ctx - ProgramContext for TypeSystem and binding access
|
|
19
|
+
* @param expectedReturnType - Return type from enclosing function for contextual typing.
|
|
20
|
+
* Pass `undefined` explicitly when not inside a function.
|
|
14
21
|
*/
|
|
15
|
-
export declare const convertStatement: (node: ts.Node,
|
|
22
|
+
export declare const convertStatement: (node: ts.Node, ctx: ProgramContext, expectedReturnType: IrType | undefined) => ConvertStatementResult;
|
|
16
23
|
/**
|
|
17
24
|
* Flatten a convert statement result into an array of statements.
|
|
18
25
|
* Handles both single statements and arrays.
|
|
@@ -21,9 +28,12 @@ export declare const flattenStatementResult: (result: ConvertStatementResult) =>
|
|
|
21
28
|
/**
|
|
22
29
|
* Convert a statement and return a single statement (for contexts where arrays not expected).
|
|
23
30
|
* Type aliases inside control flow will return the first statement (usually the only one).
|
|
31
|
+
*
|
|
32
|
+
* @param ctx - ProgramContext for TypeSystem and binding access
|
|
33
|
+
* @param expectedReturnType - Return type from enclosing function for contextual typing.
|
|
34
|
+
* Must be passed through for return statements in nested blocks.
|
|
24
35
|
*/
|
|
25
|
-
export declare const convertStatementSingle: (node: ts.Node,
|
|
36
|
+
export declare const convertStatementSingle: (node: ts.Node, ctx: ProgramContext, expectedReturnType?: IrType) => IrStatement | null;
|
|
26
37
|
export { convertBlockStatement } from "./converters/statements/control.js";
|
|
27
38
|
export { convertParameters } from "./converters/statements/helpers.js";
|
|
28
|
-
export { setMetadataRegistry, setBindingRegistry, } from "./converters/statements/declarations.js";
|
|
29
39
|
//# sourceMappingURL=statement-converter.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"statement-converter.d.ts","sourceRoot":"","sources":["../../src/ir/statement-converter.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"statement-converter.d.ts","sourceRoot":"","sources":["../../src/ir/statement-converter.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,MAAM,YAAY,CAAC;AACjC,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAEjD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAuB3D;;;GAGG;AACH,MAAM,MAAM,sBAAsB,GAC9B,WAAW,GACX,SAAS,WAAW,EAAE,GACtB,IAAI,CAAC;AAWT;;;;;;GAMG;AACH,eAAO,MAAM,gBAAgB,GAC3B,MAAM,EAAE,CAAC,IAAI,EACb,KAAK,cAAc,EACnB,oBAAoB,MAAM,GAAG,SAAS,KACrC,sBA0FF,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,sBAAsB,GACjC,QAAQ,sBAAsB,KAC7B,SAAS,WAAW,EAStB,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,sBAAsB,GACjC,MAAM,EAAE,CAAC,IAAI,EACb,KAAK,cAAc,EACnB,qBAAqB,MAAM,KAC1B,WAAW,GAAG,IAYhB,CAAC;AAGF,OAAO,EAAE,qBAAqB,EAAE,MAAM,oCAAoC,CAAC;AAC3E,OAAO,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC"}
|