@tsonic/frontend 0.0.62 → 0.0.64
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/dependency-graph.d.ts +1 -1
- package/dist/dependency-graph.d.ts.map +1 -1
- package/dist/dependency-graph.js +1 -1
- package/dist/dependency-graph.js.map +1 -1
- package/dist/dotnet-metadata.d.ts +0 -12
- package/dist/dotnet-metadata.d.ts.map +1 -1
- package/dist/dotnet-metadata.js +0 -24
- package/dist/dotnet-metadata.js.map +1 -1
- package/dist/generic-function-values.d.ts +11 -0
- package/dist/generic-function-values.d.ts.map +1 -0
- package/dist/generic-function-values.js +243 -0
- package/dist/generic-function-values.js.map +1 -0
- package/dist/generic-function-values.test.d.ts +2 -0
- package/dist/generic-function-values.test.d.ts.map +1 -0
- package/dist/generic-function-values.test.js +256 -0
- package/dist/generic-function-values.test.js.map +1 -0
- package/dist/graph/extraction/imports.d.ts +5 -0
- package/dist/graph/extraction/imports.d.ts.map +1 -1
- package/dist/graph/extraction/imports.js +39 -1
- package/dist/graph/extraction/imports.js.map +1 -1
- package/dist/graph/extraction/index.d.ts +1 -1
- package/dist/graph/extraction/index.d.ts.map +1 -1
- package/dist/graph/extraction/index.js +1 -1
- package/dist/graph/extraction/index.js.map +1 -1
- package/dist/graph/extraction/orchestrator.d.ts.map +1 -1
- package/dist/graph/extraction/orchestrator.js +16 -2
- package/dist/graph/extraction/orchestrator.js.map +1 -1
- package/dist/graph/extraction.d.ts +1 -1
- package/dist/graph/extraction.d.ts.map +1 -1
- package/dist/graph/extraction.js +1 -1
- package/dist/graph/extraction.js.map +1 -1
- package/dist/ir/binding/binding-factory.d.ts +17 -0
- package/dist/ir/binding/binding-factory.d.ts.map +1 -0
- package/dist/ir/binding/binding-factory.js +765 -0
- package/dist/ir/binding/binding-factory.js.map +1 -0
- package/dist/ir/binding/binding-helpers.d.ts +90 -0
- package/dist/ir/binding/binding-helpers.d.ts.map +1 -0
- package/dist/ir/binding/binding-helpers.js +387 -0
- package/dist/ir/binding/binding-helpers.js.map +1 -0
- package/dist/ir/binding/binding-types.d.ts +203 -0
- package/dist/ir/binding/binding-types.d.ts.map +1 -0
- package/dist/ir/binding/binding-types.js +9 -0
- package/dist/ir/binding/binding-types.js.map +1 -0
- package/dist/ir/binding/index.d.ts +4 -158
- package/dist/ir/binding/index.d.ts.map +1 -1
- package/dist/ir/binding/index.js +3 -1134
- package/dist/ir/binding/index.js.map +1 -1
- package/dist/ir/binding-resolution.test.js +248 -0
- package/dist/ir/binding-resolution.test.js.map +1 -1
- package/dist/ir/builder/imports.d.ts.map +1 -1
- package/dist/ir/builder/imports.js +8 -1
- package/dist/ir/builder/imports.js.map +1 -1
- package/dist/ir/builder.test.js +360 -0
- package/dist/ir/builder.test.js.map +1 -1
- package/dist/ir/converters/anonymous-synthesis.d.ts +3 -3
- package/dist/ir/converters/anonymous-synthesis.d.ts.map +1 -1
- package/dist/ir/converters/anonymous-synthesis.js +45 -8
- package/dist/ir/converters/anonymous-synthesis.js.map +1 -1
- package/dist/ir/converters/expressions/access/access-converter.d.ts +14 -0
- package/dist/ir/converters/expressions/access/access-converter.d.ts.map +1 -0
- package/dist/ir/converters/expressions/access/access-converter.js +141 -0
- package/dist/ir/converters/expressions/access/access-converter.js.map +1 -0
- package/dist/ir/converters/expressions/access/binding-resolution.d.ts +35 -0
- package/dist/ir/converters/expressions/access/binding-resolution.d.ts.map +1 -0
- package/dist/ir/converters/expressions/access/binding-resolution.js +447 -0
- package/dist/ir/converters/expressions/access/binding-resolution.js.map +1 -0
- package/dist/ir/converters/expressions/access/member-resolution.d.ts +67 -0
- package/dist/ir/converters/expressions/access/member-resolution.d.ts.map +1 -0
- package/dist/ir/converters/expressions/access/member-resolution.js +262 -0
- package/dist/ir/converters/expressions/access/member-resolution.js.map +1 -0
- package/dist/ir/converters/expressions/access.d.ts +1 -7
- package/dist/ir/converters/expressions/access.d.ts.map +1 -1
- package/dist/ir/converters/expressions/access.js +1 -720
- package/dist/ir/converters/expressions/access.js.map +1 -1
- package/dist/ir/converters/expressions/calls/call-converter.d.ts +23 -0
- package/dist/ir/converters/expressions/calls/call-converter.d.ts.map +1 -0
- package/dist/ir/converters/expressions/calls/call-converter.js +526 -0
- package/dist/ir/converters/expressions/calls/call-converter.js.map +1 -0
- package/dist/ir/converters/expressions/calls/call-site-analysis.d.ts +53 -0
- package/dist/ir/converters/expressions/calls/call-site-analysis.d.ts.map +1 -0
- package/dist/ir/converters/expressions/calls/call-site-analysis.js +554 -0
- package/dist/ir/converters/expressions/calls/call-site-analysis.js.map +1 -0
- package/dist/ir/converters/expressions/calls/new-converter.d.ts +21 -0
- package/dist/ir/converters/expressions/calls/new-converter.d.ts.map +1 -0
- package/dist/ir/converters/expressions/calls/new-converter.js +182 -0
- package/dist/ir/converters/expressions/calls/new-converter.js.map +1 -0
- package/dist/ir/converters/expressions/calls.d.ts +2 -28
- package/dist/ir/converters/expressions/calls.d.ts.map +1 -1
- package/dist/ir/converters/expressions/calls.js +2 -1344
- package/dist/ir/converters/expressions/calls.js.map +1 -1
- package/dist/ir/converters/expressions/collections.d.ts.map +1 -1
- package/dist/ir/converters/expressions/collections.js +37 -6
- package/dist/ir/converters/expressions/collections.js.map +1 -1
- package/dist/ir/converters/expressions/functions.js +1 -1
- package/dist/ir/converters/expressions/functions.js.map +1 -1
- package/dist/ir/converters/expressions/helpers.d.ts.map +1 -1
- package/dist/ir/converters/expressions/helpers.js +1 -0
- package/dist/ir/converters/expressions/helpers.js.map +1 -1
- package/dist/ir/converters/expressions/other.d.ts.map +1 -1
- package/dist/ir/converters/expressions/other.js +3 -2
- package/dist/ir/converters/expressions/other.js.map +1 -1
- package/dist/ir/converters/flow-narrowing.d.ts.map +1 -1
- package/dist/ir/converters/flow-narrowing.js +3 -2
- package/dist/ir/converters/flow-narrowing.js.map +1 -1
- package/dist/ir/converters/statements/declarations/classes/methods.js +1 -1
- package/dist/ir/converters/statements/declarations/classes/methods.js.map +1 -1
- package/dist/ir/converters/statements/declarations/type-aliases.js +1 -1
- package/dist/ir/converters/statements/declarations/type-aliases.js.map +1 -1
- package/dist/ir/converters/statements/declarations/variables.d.ts +2 -2
- package/dist/ir/converters/statements/declarations/variables.d.ts.map +1 -1
- package/dist/ir/converters/statements/declarations/variables.js +289 -2
- package/dist/ir/converters/statements/declarations/variables.js.map +1 -1
- package/dist/ir/expression-converter.d.ts +0 -1
- package/dist/ir/expression-converter.d.ts.map +1 -1
- package/dist/ir/expression-converter.js +0 -2
- package/dist/ir/expression-converter.js.map +1 -1
- package/dist/ir/generic-function-value-lowering.test.d.ts +2 -0
- package/dist/ir/generic-function-value-lowering.test.d.ts.map +1 -0
- package/dist/ir/generic-function-value-lowering.test.js +312 -0
- package/dist/ir/generic-function-value-lowering.test.js.map +1 -0
- package/dist/ir/generic-validator.d.ts +3 -4
- package/dist/ir/generic-validator.d.ts.map +1 -1
- package/dist/ir/generic-validator.js +3 -35
- package/dist/ir/generic-validator.js.map +1 -1
- package/dist/ir/program-context.d.ts +12 -0
- package/dist/ir/program-context.d.ts.map +1 -1
- package/dist/ir/program-context.js +2 -0
- package/dist/ir/program-context.js.map +1 -1
- package/dist/ir/statement-converter.d.ts +0 -2
- package/dist/ir/statement-converter.d.ts.map +1 -1
- package/dist/ir/statement-converter.js +0 -3
- package/dist/ir/statement-converter.js.map +1 -1
- package/dist/ir/type-system/internal/handle-types.d.ts +16 -16
- package/dist/ir/type-system/internal/handle-types.d.ts.map +1 -1
- package/dist/ir/type-system/internal/nominal-env.d.ts +0 -2
- package/dist/ir/type-system/internal/nominal-env.d.ts.map +1 -1
- package/dist/ir/type-system/internal/nominal-env.js +2 -6
- package/dist/ir/type-system/internal/nominal-env.js.map +1 -1
- package/dist/ir/type-system/internal/type-converter/converter.d.ts +3 -1
- package/dist/ir/type-system/internal/type-converter/converter.d.ts.map +1 -1
- package/dist/ir/type-system/internal/type-converter/converter.js +3 -1
- package/dist/ir/type-system/internal/type-converter/converter.js.map +1 -1
- package/dist/ir/type-system/internal/type-converter/objects.js +7 -1
- package/dist/ir/type-system/internal/type-converter/objects.js.map +1 -1
- package/dist/ir/type-system/internal/type-converter/orchestrator.d.ts +0 -2
- package/dist/ir/type-system/internal/type-converter/orchestrator.d.ts.map +1 -1
- package/dist/ir/type-system/internal/type-converter/orchestrator.js +322 -23
- package/dist/ir/type-system/internal/type-converter/orchestrator.js.map +1 -1
- package/dist/ir/type-system/internal/type-converter/orchestrator.test.d.ts +2 -0
- package/dist/ir/type-system/internal/type-converter/orchestrator.test.d.ts.map +1 -0
- package/dist/ir/type-system/internal/type-converter/orchestrator.test.js +265 -0
- package/dist/ir/type-system/internal/type-converter/orchestrator.test.js.map +1 -0
- package/dist/ir/type-system/internal/type-converter/primitives.d.ts.map +1 -1
- package/dist/ir/type-system/internal/type-converter/primitives.js +5 -0
- package/dist/ir/type-system/internal/type-converter/primitives.js.map +1 -1
- package/dist/ir/type-system/internal/type-converter/references.d.ts.map +1 -1
- package/dist/ir/type-system/internal/type-converter/references.js +67 -29
- package/dist/ir/type-system/internal/type-converter/references.js.map +1 -1
- package/dist/ir/type-system/internal/type-converter/utility-types.d.ts.map +1 -1
- package/dist/ir/type-system/internal/type-converter/utility-types.js +145 -0
- package/dist/ir/type-system/internal/type-converter/utility-types.js.map +1 -1
- package/dist/ir/type-system/internal/type-converter/utility-types.test.js +91 -1
- package/dist/ir/type-system/internal/type-converter/utility-types.test.js.map +1 -1
- package/dist/ir/type-system/internal/type-registry.d.ts +1 -1
- package/dist/ir/type-system/internal/type-registry.js +7 -7
- package/dist/ir/type-system/internal/type-registry.js.map +1 -1
- package/dist/ir/type-system/internal/universe/alias-table.d.ts +0 -14
- package/dist/ir/type-system/internal/universe/alias-table.d.ts.map +1 -1
- package/dist/ir/type-system/internal/universe/alias-table.js +0 -17
- package/dist/ir/type-system/internal/universe/alias-table.js.map +1 -1
- package/dist/ir/type-system/internal/universe/clr-catalog.d.ts +3 -0
- package/dist/ir/type-system/internal/universe/clr-catalog.d.ts.map +1 -1
- package/dist/ir/type-system/internal/universe/clr-catalog.js +4 -1044
- package/dist/ir/type-system/internal/universe/clr-catalog.js.map +1 -1
- package/dist/ir/type-system/internal/universe/clr-entry-converter.d.ts +51 -0
- package/dist/ir/type-system/internal/universe/clr-entry-converter.d.ts.map +1 -0
- package/dist/ir/type-system/internal/universe/clr-entry-converter.js +657 -0
- package/dist/ir/type-system/internal/universe/clr-entry-converter.js.map +1 -0
- package/dist/ir/type-system/internal/universe/clr-type-parser.d.ts +52 -0
- package/dist/ir/type-system/internal/universe/clr-type-parser.d.ts.map +1 -0
- package/dist/ir/type-system/internal/universe/clr-type-parser.js +481 -0
- package/dist/ir/type-system/internal/universe/clr-type-parser.js.map +1 -0
- package/dist/ir/type-system/internal/universe/clr-type-parser.test.d.ts +2 -0
- package/dist/ir/type-system/internal/universe/clr-type-parser.test.d.ts.map +1 -0
- package/dist/ir/type-system/internal/universe/clr-type-parser.test.js +55 -0
- package/dist/ir/type-system/internal/universe/clr-type-parser.test.js.map +1 -0
- package/dist/ir/type-system/internal/universe/index.d.ts +1 -1
- package/dist/ir/type-system/internal/universe/index.d.ts.map +1 -1
- package/dist/ir/type-system/internal/universe/index.js +1 -3
- package/dist/ir/type-system/internal/universe/index.js.map +1 -1
- package/dist/ir/type-system/internal/universe/unified-universe.test.js +2 -0
- package/dist/ir/type-system/internal/universe/unified-universe.test.js.map +1 -1
- package/dist/ir/type-system/type-system-call-resolution.d.ts +69 -0
- package/dist/ir/type-system/type-system-call-resolution.d.ts.map +1 -0
- package/dist/ir/type-system/type-system-call-resolution.js +1121 -0
- package/dist/ir/type-system/type-system-call-resolution.js.map +1 -0
- package/dist/ir/type-system/type-system-inference.d.ts +98 -0
- package/dist/ir/type-system/type-system-inference.d.ts.map +1 -0
- package/dist/ir/type-system/type-system-inference.js +1121 -0
- package/dist/ir/type-system/type-system-inference.js.map +1 -0
- package/dist/ir/type-system/type-system-relations.d.ts +15 -0
- package/dist/ir/type-system/type-system-relations.d.ts.map +1 -0
- package/dist/ir/type-system/type-system-relations.js +152 -0
- package/dist/ir/type-system/type-system-relations.js.map +1 -0
- package/dist/ir/type-system/type-system-state.d.ts +436 -0
- package/dist/ir/type-system/type-system-state.d.ts.map +1 -0
- package/dist/ir/type-system/type-system-state.js +212 -0
- package/dist/ir/type-system/type-system-state.js.map +1 -0
- package/dist/ir/type-system/type-system-utilities.d.ts +56 -0
- package/dist/ir/type-system/type-system-utilities.d.ts.map +1 -0
- package/dist/ir/type-system/type-system-utilities.js +373 -0
- package/dist/ir/type-system/type-system-utilities.js.map +1 -0
- package/dist/ir/type-system/type-system.d.ts +17 -358
- package/dist/ir/type-system/type-system.d.ts.map +1 -1
- package/dist/ir/type-system/type-system.js +67 -2945
- package/dist/ir/type-system/type-system.js.map +1 -1
- package/dist/ir/types/index.d.ts +1 -0
- 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.js +1 -1
- package/dist/ir/types/ir-substitution.js.map +1 -1
- package/dist/ir/types/statements.d.ts +1 -1
- package/dist/ir/types/type-ops.d.ts +9 -0
- package/dist/ir/types/type-ops.d.ts.map +1 -0
- package/dist/ir/types/type-ops.js +134 -0
- package/dist/ir/types/type-ops.js.map +1 -0
- package/dist/ir/types/type-ops.test.d.ts +2 -0
- package/dist/ir/types/type-ops.test.d.ts.map +1 -0
- package/dist/ir/types/type-ops.test.js +73 -0
- package/dist/ir/types/type-ops.test.js.map +1 -0
- package/dist/ir/validation/anonymous-type-lowering-pass.d.ts.map +1 -1
- package/dist/ir/validation/anonymous-type-lowering-pass.js +34 -0
- package/dist/ir/validation/anonymous-type-lowering-pass.js.map +1 -1
- package/dist/ir/validation/anonymous-type-lowering-regressions.test.d.ts +2 -0
- package/dist/ir/validation/anonymous-type-lowering-regressions.test.d.ts.map +1 -0
- package/dist/ir/validation/anonymous-type-lowering-regressions.test.js +121 -0
- package/dist/ir/validation/anonymous-type-lowering-regressions.test.js.map +1 -0
- package/dist/ir/validation/attribute-collection/arg-extractor.d.ts +58 -0
- package/dist/ir/validation/attribute-collection/arg-extractor.d.ts.map +1 -0
- package/dist/ir/validation/attribute-collection/arg-extractor.js +284 -0
- package/dist/ir/validation/attribute-collection/arg-extractor.js.map +1 -0
- package/dist/ir/validation/attribute-collection/marker-parser.d.ts +28 -0
- package/dist/ir/validation/attribute-collection/marker-parser.d.ts.map +1 -0
- package/dist/ir/validation/attribute-collection/marker-parser.js +404 -0
- package/dist/ir/validation/attribute-collection/marker-parser.js.map +1 -0
- package/dist/ir/validation/attribute-collection/orchestrator.d.ts +28 -0
- package/dist/ir/validation/attribute-collection/orchestrator.d.ts.map +1 -0
- package/dist/ir/validation/attribute-collection/orchestrator.js +332 -0
- package/dist/ir/validation/attribute-collection/orchestrator.js.map +1 -0
- package/dist/ir/validation/attribute-collection-pass.d.ts +1 -23
- package/dist/ir/validation/attribute-collection-pass.d.ts.map +1 -1
- package/dist/ir/validation/attribute-collection-pass.js +1 -961
- package/dist/ir/validation/attribute-collection-pass.js.map +1 -1
- package/dist/ir/validation/attribute-collection-pass.test.js +12 -6
- package/dist/ir/validation/attribute-collection-pass.test.js.map +1 -1
- package/dist/ir/validation/numeric-invariants.test.js +29 -0
- 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 +21 -0
- package/dist/ir/validation/numeric-proof-pass.js.map +1 -1
- package/dist/ir/validation/soundness-gate.d.ts.map +1 -1
- package/dist/ir/validation/soundness-gate.js +2 -1
- package/dist/ir/validation/soundness-gate.js.map +1 -1
- package/dist/ir/validation/soundness-gate.test.js +69 -0
- package/dist/ir/validation/soundness-gate.test.js.map +1 -1
- package/dist/ir/validation/yield-lowering-pass.d.ts +11 -5
- package/dist/ir/validation/yield-lowering-pass.d.ts.map +1 -1
- package/dist/ir/validation/yield-lowering-pass.js +942 -48
- package/dist/ir/validation/yield-lowering-pass.js.map +1 -1
- package/dist/ir/validation/yield-lowering-pass.test.js +1333 -127
- package/dist/ir/validation/yield-lowering-pass.test.js.map +1 -1
- package/dist/program/binding-loader.d.ts +37 -0
- package/dist/program/binding-loader.d.ts.map +1 -0
- package/dist/program/binding-loader.js +155 -0
- package/dist/program/binding-loader.js.map +1 -0
- package/dist/program/binding-registry.d.ts +106 -0
- package/dist/program/binding-registry.d.ts.map +1 -0
- package/dist/program/binding-registry.js +590 -0
- package/dist/program/binding-registry.js.map +1 -0
- package/dist/program/binding-types.d.ts +166 -0
- package/dist/program/binding-types.d.ts.map +1 -0
- package/dist/program/binding-types.js +57 -0
- package/dist/program/binding-types.js.map +1 -0
- package/dist/program/bindings.d.ts +6 -271
- package/dist/program/bindings.d.ts.map +1 -1
- package/dist/program/bindings.js +7 -781
- package/dist/program/bindings.js.map +1 -1
- package/dist/program/creation.d.ts.map +1 -1
- package/dist/program/creation.js +104 -13
- package/dist/program/creation.js.map +1 -1
- package/dist/program/creation.test.js +133 -1
- package/dist/program/creation.test.js.map +1 -1
- package/dist/program/diagnostics.d.ts +1 -1
- package/dist/program/diagnostics.d.ts.map +1 -1
- package/dist/program/diagnostics.js +47 -2
- package/dist/program/diagnostics.js.map +1 -1
- package/dist/program/diagnostics.test.d.ts +2 -0
- package/dist/program/diagnostics.test.d.ts.map +1 -0
- package/dist/program/diagnostics.test.js +58 -0
- package/dist/program/diagnostics.test.js.map +1 -0
- package/dist/program/types.d.ts +2 -0
- package/dist/program/types.d.ts.map +1 -1
- package/dist/resolver/clr-bindings-resolver.d.ts +0 -1
- package/dist/resolver/clr-bindings-resolver.d.ts.map +1 -1
- package/dist/resolver/clr-bindings-resolver.js +22 -32
- package/dist/resolver/clr-bindings-resolver.js.map +1 -1
- package/dist/resolver/clr-bindings-resolver.test.js +0 -27
- package/dist/resolver/clr-bindings-resolver.test.js.map +1 -1
- package/dist/resolver/import-resolution.d.ts +3 -1
- package/dist/resolver/import-resolution.d.ts.map +1 -1
- package/dist/resolver/import-resolution.js +14 -11
- package/dist/resolver/import-resolution.js.map +1 -1
- package/dist/resolver/naming.d.ts.map +1 -1
- package/dist/resolver/naming.js +1 -0
- package/dist/resolver/naming.js.map +1 -1
- package/dist/resolver/node-module-aliases.d.ts +6 -0
- package/dist/resolver/node-module-aliases.d.ts.map +1 -0
- package/dist/resolver/node-module-aliases.js +164 -0
- package/dist/resolver/node-module-aliases.js.map +1 -0
- package/dist/resolver/node-module-aliases.test.d.ts +2 -0
- package/dist/resolver/node-module-aliases.test.d.ts.map +1 -0
- package/dist/resolver/node-module-aliases.test.js +64 -0
- package/dist/resolver/node-module-aliases.test.js.map +1 -0
- package/dist/resolver.test.js +103 -0
- package/dist/resolver.test.js.map +1 -1
- package/dist/surface/js-surface-shims.d.ts +3 -0
- package/dist/surface/js-surface-shims.d.ts.map +1 -0
- package/dist/surface/js-surface-shims.js +332 -0
- package/dist/surface/js-surface-shims.js.map +1 -0
- package/dist/surface/js-surface-shims.test.d.ts +2 -0
- package/dist/surface/js-surface-shims.test.d.ts.map +1 -0
- package/dist/surface/js-surface-shims.test.js +53 -0
- package/dist/surface/js-surface-shims.test.js.map +1 -0
- package/dist/surface/profiles.d.ts +10 -0
- package/dist/surface/profiles.d.ts.map +1 -0
- package/dist/surface/profiles.js +65 -0
- package/dist/surface/profiles.js.map +1 -0
- package/dist/surface/profiles.test.d.ts +2 -0
- package/dist/surface/profiles.test.d.ts.map +1 -0
- package/dist/surface/profiles.test.js +44 -0
- package/dist/surface/profiles.test.js.map +1 -0
- package/dist/types/diagnostic.d.ts +1 -1
- package/dist/types/diagnostic.d.ts.map +1 -1
- package/dist/types/diagnostic.js.map +1 -1
- package/dist/validation/features.d.ts.map +1 -1
- package/dist/validation/features.js +38 -13
- package/dist/validation/features.js.map +1 -1
- package/dist/validation/features.test.d.ts +2 -0
- package/dist/validation/features.test.d.ts.map +1 -0
- package/dist/validation/features.test.js +273 -0
- package/dist/validation/features.test.js.map +1 -0
- package/dist/validation/generics.d.ts +1 -1
- package/dist/validation/generics.d.ts.map +1 -1
- package/dist/validation/generics.js +2 -26
- package/dist/validation/generics.js.map +1 -1
- package/dist/validation/imports.d.ts.map +1 -1
- package/dist/validation/imports.js +29 -5
- package/dist/validation/imports.js.map +1 -1
- package/dist/validation/imports.test.d.ts +2 -0
- package/dist/validation/imports.test.d.ts.map +1 -0
- package/dist/validation/imports.test.js +211 -0
- package/dist/validation/imports.test.js.map +1 -0
- package/dist/validation/static-safety.d.ts +6 -6
- package/dist/validation/static-safety.d.ts.map +1 -1
- package/dist/validation/static-safety.js +163 -109
- package/dist/validation/static-safety.js.map +1 -1
- package/dist/validation/unsupported-utility-types.d.ts +3 -3
- package/dist/validation/unsupported-utility-types.d.ts.map +1 -1
- package/dist/validation/unsupported-utility-types.js +4 -7
- package/dist/validation/unsupported-utility-types.js.map +1 -1
- package/dist/validator.maximus.test.d.ts +2 -0
- package/dist/validator.maximus.test.d.ts.map +1 -0
- package/dist/validator.maximus.test.js +1214 -0
- package/dist/validator.maximus.test.js.map +1 -0
- package/dist/validator.test.js +152 -18
- package/dist/validator.test.js.map +1 -1
- package/package.json +1 -1
- package/dist/ir/converters/statements/declarations/registry.d.ts +0 -96
- package/dist/ir/converters/statements/declarations/registry.d.ts.map +0 -1
- package/dist/ir/converters/statements/declarations/registry.js +0 -130
- package/dist/ir/converters/statements/declarations/registry.js.map +0 -1
- package/dist/ir/this-parameter-inference.test.d.ts +0 -13
- package/dist/ir/this-parameter-inference.test.d.ts.map +0 -1
- package/dist/ir/this-parameter-inference.test.js +0 -165
- package/dist/ir/this-parameter-inference.test.js.map +0 -1
- package/dist/metadata/bindings-loader.d.ts +0 -41
- package/dist/metadata/bindings-loader.d.ts.map +0 -1
- package/dist/metadata/bindings-loader.js +0 -308
- package/dist/metadata/bindings-loader.js.map +0 -1
- package/dist/metadata/bindings-loader.test.d.ts +0 -5
- package/dist/metadata/bindings-loader.test.d.ts.map +0 -1
- package/dist/metadata/bindings-loader.test.js +0 -117
- package/dist/metadata/bindings-loader.test.js.map +0 -1
- package/dist/metadata/index.d.ts +0 -8
- package/dist/metadata/index.d.ts.map +0 -1
- package/dist/metadata/index.js +0 -7
- package/dist/metadata/index.js.map +0 -1
- package/dist/metadata/library-loader.d.ts +0 -42
- package/dist/metadata/library-loader.d.ts.map +0 -1
- package/dist/metadata/library-loader.js +0 -126
- package/dist/metadata/library-loader.js.map +0 -1
- package/dist/metadata/loader.d.ts +0 -26
- package/dist/metadata/loader.d.ts.map +0 -1
- package/dist/metadata/loader.js +0 -333
- package/dist/metadata/loader.js.map +0 -1
- package/dist/metadata/loader.test.d.ts +0 -5
- package/dist/metadata/loader.test.d.ts.map +0 -1
- package/dist/metadata/loader.test.js +0 -119
- package/dist/metadata/loader.test.js.map +0 -1
- package/dist/resolver/naming-policy.d.ts +0 -20
- package/dist/resolver/naming-policy.d.ts.map +0 -1
- package/dist/resolver/naming-policy.js +0 -40
- package/dist/resolver/naming-policy.js.map +0 -1
- package/dist/types/bindings.d.ts +0 -153
- package/dist/types/bindings.d.ts.map +0 -1
- package/dist/types/bindings.js +0 -14
- package/dist/types/bindings.js.map +0 -1
- package/dist/types/metadata.d.ts +0 -196
- package/dist/types/metadata.d.ts.map +0 -1
- package/dist/types/metadata.js +0 -10
- package/dist/types/metadata.js.map +0 -1
- package/dist/types/nested-types.d.ts +0 -111
- package/dist/types/nested-types.d.ts.map +0 -1
- package/dist/types/nested-types.js +0 -176
- package/dist/types/nested-types.js.map +0 -1
- package/dist/types/nested-types.test.d.ts +0 -5
- package/dist/types/nested-types.test.d.ts.map +0 -1
- package/dist/types/nested-types.test.js +0 -135
- package/dist/types/nested-types.test.js.map +0 -1
- package/dist/types/ref-parameters.d.ts +0 -123
- package/dist/types/ref-parameters.d.ts.map +0 -1
- package/dist/types/ref-parameters.js +0 -203
- package/dist/types/ref-parameters.js.map +0 -1
- package/dist/types/ref-parameters.test.d.ts +0 -5
- package/dist/types/ref-parameters.test.d.ts.map +0 -1
- package/dist/types/ref-parameters.test.js +0 -147
- package/dist/types/ref-parameters.test.js.map +0 -1
|
@@ -1,130 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Metadata and binding registry management
|
|
3
|
-
*
|
|
4
|
-
* Provides module-level singletons for:
|
|
5
|
-
* - DotnetMetadataRegistry: .NET metadata for imported types
|
|
6
|
-
* - BindingRegistry: CLR bindings from tsbindgen
|
|
7
|
-
* - TypeRegistry: AST-based type declarations (opaque, set by orchestrator)
|
|
8
|
-
* - NominalEnv: Inheritance chain substitution (opaque, set by orchestrator)
|
|
9
|
-
*
|
|
10
|
-
* ALICE'S SPEC: This module does NOT import internal types.
|
|
11
|
-
* TypeRegistry and NominalEnv are stored as opaque values.
|
|
12
|
-
* Only the orchestrator (which IS allowed to import internals) knows the actual types.
|
|
13
|
-
*/
|
|
14
|
-
import { DotnetMetadataRegistry } from "../../../../dotnet-metadata.js";
|
|
15
|
-
import { BindingRegistry } from "../../../../program/bindings.js";
|
|
16
|
-
/**
|
|
17
|
-
* Module-level metadata registry singleton
|
|
18
|
-
* Set once at the start of compilation via setMetadataRegistry()
|
|
19
|
-
*/
|
|
20
|
-
let _metadataRegistry = new DotnetMetadataRegistry();
|
|
21
|
-
/**
|
|
22
|
-
* Module-level binding registry singleton
|
|
23
|
-
* Set once at the start of compilation via setBindingRegistry()
|
|
24
|
-
*/
|
|
25
|
-
let _bindingRegistry = new BindingRegistry();
|
|
26
|
-
/**
|
|
27
|
-
* Module-level type registry singleton (opaque)
|
|
28
|
-
* Set once at the start of compilation via setTypeRegistry()
|
|
29
|
-
* Used for AST-based type declaration lookups (deterministic typing)
|
|
30
|
-
*
|
|
31
|
-
* ALICE'S SPEC: Stored as opaque value. Only orchestrator knows actual type.
|
|
32
|
-
*/
|
|
33
|
-
let _typeRegistry = undefined;
|
|
34
|
-
/**
|
|
35
|
-
* Module-level nominal env singleton (opaque)
|
|
36
|
-
* Set once at the start of compilation via setNominalEnv()
|
|
37
|
-
* Used for inheritance chain substitution (deterministic typing)
|
|
38
|
-
*
|
|
39
|
-
* ALICE'S SPEC: Stored as opaque value. Only orchestrator knows actual type.
|
|
40
|
-
*/
|
|
41
|
-
let _nominalEnv = undefined;
|
|
42
|
-
/**
|
|
43
|
-
* Module-level TypeSystem singleton
|
|
44
|
-
* Set once at the start of compilation via setTypeSystem()
|
|
45
|
-
* This is the single source of truth for all type queries (Alice's spec)
|
|
46
|
-
*/
|
|
47
|
-
let _typeSystem = undefined;
|
|
48
|
-
/**
|
|
49
|
-
* Set the metadata registry for this compilation
|
|
50
|
-
* Called once at the start of IR building
|
|
51
|
-
*/
|
|
52
|
-
export const setMetadataRegistry = (registry) => {
|
|
53
|
-
_metadataRegistry = registry;
|
|
54
|
-
};
|
|
55
|
-
/**
|
|
56
|
-
* Get the current metadata registry
|
|
57
|
-
*/
|
|
58
|
-
export const getMetadataRegistry = () => _metadataRegistry;
|
|
59
|
-
/**
|
|
60
|
-
* Set the binding registry for this compilation
|
|
61
|
-
* Called once at the start of IR building
|
|
62
|
-
*/
|
|
63
|
-
export const setBindingRegistry = (registry) => {
|
|
64
|
-
_bindingRegistry = registry;
|
|
65
|
-
};
|
|
66
|
-
/**
|
|
67
|
-
* Get the current binding registry
|
|
68
|
-
*/
|
|
69
|
-
export const getBindingRegistry = () => _bindingRegistry;
|
|
70
|
-
/**
|
|
71
|
-
* Set the type registry for this compilation (opaque)
|
|
72
|
-
* Called once at the start of IR building by orchestrator
|
|
73
|
-
*
|
|
74
|
-
* ALICE'S SPEC: Parameter is opaque. Orchestrator passes actual TypeRegistry.
|
|
75
|
-
*/
|
|
76
|
-
export const setTypeRegistry = (registry) => {
|
|
77
|
-
_typeRegistry = registry;
|
|
78
|
-
};
|
|
79
|
-
/**
|
|
80
|
-
* Internal accessor for TypeSystem construction only.
|
|
81
|
-
* NOT for use in converters - use TypeSystem methods instead.
|
|
82
|
-
*
|
|
83
|
-
* ALICE'S SPEC: Returns opaque value. Orchestrator casts to actual type.
|
|
84
|
-
*/
|
|
85
|
-
export const _internalGetTypeRegistry = () => _typeRegistry;
|
|
86
|
-
/**
|
|
87
|
-
* Set the nominal env for this compilation (opaque)
|
|
88
|
-
* Called once at the start of IR building by orchestrator
|
|
89
|
-
*
|
|
90
|
-
* ALICE'S SPEC: Parameter is opaque. Orchestrator passes actual NominalEnv.
|
|
91
|
-
*/
|
|
92
|
-
export const setNominalEnv = (env) => {
|
|
93
|
-
_nominalEnv = env;
|
|
94
|
-
};
|
|
95
|
-
/**
|
|
96
|
-
* Internal accessor for TypeSystem construction only.
|
|
97
|
-
* NOT for use in converters - use TypeSystem methods instead.
|
|
98
|
-
*
|
|
99
|
-
* ALICE'S SPEC: Returns opaque value. Orchestrator casts to actual type.
|
|
100
|
-
*/
|
|
101
|
-
export const _internalGetNominalEnv = () => _nominalEnv;
|
|
102
|
-
/**
|
|
103
|
-
* Set the TypeSystem for this compilation.
|
|
104
|
-
* Called once at the start of IR building, after TypeRegistry and NominalEnv are created.
|
|
105
|
-
*
|
|
106
|
-
* This is the ONLY way to set the global TypeSystem. All converters should
|
|
107
|
-
* eventually receive TypeSystem as a parameter, but during migration they
|
|
108
|
-
* can access it via getTypeSystem().
|
|
109
|
-
*/
|
|
110
|
-
export const setTypeSystem = (ts) => {
|
|
111
|
-
_typeSystem = ts;
|
|
112
|
-
};
|
|
113
|
-
/**
|
|
114
|
-
* Get the current TypeSystem.
|
|
115
|
-
* Returns undefined if not yet initialized.
|
|
116
|
-
*
|
|
117
|
-
* During Step 7 migration, converters can use this to access TypeSystem
|
|
118
|
-
* before they are fully migrated to receive it as a parameter.
|
|
119
|
-
*/
|
|
120
|
-
export const getTypeSystem = () => _typeSystem;
|
|
121
|
-
/**
|
|
122
|
-
* Clear type registry, nominal env, and TypeSystem.
|
|
123
|
-
* Called between compilations to prevent stale data.
|
|
124
|
-
*/
|
|
125
|
-
export const clearTypeRegistries = () => {
|
|
126
|
-
_typeRegistry = undefined;
|
|
127
|
-
_nominalEnv = undefined;
|
|
128
|
-
_typeSystem = undefined;
|
|
129
|
-
};
|
|
130
|
-
//# sourceMappingURL=registry.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../../../src/ir/converters/statements/declarations/registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AACxE,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAelE;;;GAGG;AACH,IAAI,iBAAiB,GAA2B,IAAI,sBAAsB,EAAE,CAAC;AAE7E;;;GAGG;AACH,IAAI,gBAAgB,GAAoB,IAAI,eAAe,EAAE,CAAC;AAE9D;;;;;;GAMG;AACH,IAAI,aAAa,GAAmC,SAAS,CAAC;AAE9D;;;;;;GAMG;AACH,IAAI,WAAW,GAAiC,SAAS,CAAC;AAE1D;;;;GAIG;AACH,IAAI,WAAW,GAA2B,SAAS,CAAC;AAEpD;;;GAGG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,QAAgC,EAAQ,EAAE;IAC5E,iBAAiB,GAAG,QAAQ,CAAC;AAC/B,CAAC,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,GAA2B,EAAE,CAC9D,iBAAiB,CAAC;AAEpB;;;GAGG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,QAAyB,EAAQ,EAAE;IACpE,gBAAgB,GAAG,QAAQ,CAAC;AAC9B,CAAC,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,GAAoB,EAAE,CAAC,gBAAgB,CAAC;AAE1E;;;;;GAKG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,QAA4B,EAAQ,EAAE;IACpE,aAAa,GAAG,QAAQ,CAAC;AAC3B,CAAC,CAAC;AAEF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG,GAAmC,EAAE,CAC3E,aAAa,CAAC;AAEhB;;;;;GAKG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,GAAqB,EAAQ,EAAE;IAC3D,WAAW,GAAG,GAAG,CAAC;AACpB,CAAC,CAAC;AAEF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,GAAiC,EAAE,CACvE,WAAW,CAAC;AAEd;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,EAAc,EAAQ,EAAE;IACpD,WAAW,GAAG,EAAE,CAAC;AACnB,CAAC,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,GAA2B,EAAE,CAAC,WAAW,CAAC;AAEvE;;;GAGG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,GAAS,EAAE;IAC5C,aAAa,GAAG,SAAS,CAAC;IAC1B,WAAW,GAAG,SAAS,CAAC;IACxB,WAAW,GAAG,SAAS,CAAC;AAC1B,CAAC,CAAC"}
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Tests for TypeScript `this:` parameters in call signatures.
|
|
3
|
-
*
|
|
4
|
-
* tsbindgen uses TS `this:` parameters for extension-method-like surfaces, e.g.:
|
|
5
|
-
* Where<T>(this: IQueryable<T>, ...): Rewrap<this, IQueryable<T>>
|
|
6
|
-
*
|
|
7
|
-
* For airplane-grade deterministic typing, Tsonic must:
|
|
8
|
-
* - exclude `this` from call arity (it's not a call-site argument)
|
|
9
|
-
* - infer method type parameters from the receiver via the `this` parameter type
|
|
10
|
-
* - erase Rewrap<TReceiver, TNewShape> to the runtime shape (TNewShape)
|
|
11
|
-
*/
|
|
12
|
-
export {};
|
|
13
|
-
//# sourceMappingURL=this-parameter-inference.test.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"this-parameter-inference.test.d.ts","sourceRoot":"","sources":["../../src/ir/this-parameter-inference.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG"}
|
|
@@ -1,165 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Tests for TypeScript `this:` parameters in call signatures.
|
|
3
|
-
*
|
|
4
|
-
* tsbindgen uses TS `this:` parameters for extension-method-like surfaces, e.g.:
|
|
5
|
-
* Where<T>(this: IQueryable<T>, ...): Rewrap<this, IQueryable<T>>
|
|
6
|
-
*
|
|
7
|
-
* For airplane-grade deterministic typing, Tsonic must:
|
|
8
|
-
* - exclude `this` from call arity (it's not a call-site argument)
|
|
9
|
-
* - infer method type parameters from the receiver via the `this` parameter type
|
|
10
|
-
* - erase Rewrap<TReceiver, TNewShape> to the runtime shape (TNewShape)
|
|
11
|
-
*/
|
|
12
|
-
import { describe, it } from "mocha";
|
|
13
|
-
import { expect } from "chai";
|
|
14
|
-
import * as ts from "typescript";
|
|
15
|
-
import { buildIrModule } from "./builder.js";
|
|
16
|
-
import { createProgramContext } from "./program-context.js";
|
|
17
|
-
import { DotnetMetadataRegistry } from "../dotnet-metadata.js";
|
|
18
|
-
import { BindingRegistry } from "../program/bindings.js";
|
|
19
|
-
import { createClrBindingsResolver } from "../resolver/clr-bindings-resolver.js";
|
|
20
|
-
import { createBinding } from "./binding/index.js";
|
|
21
|
-
describe("TS `this:` parameter inference", () => {
|
|
22
|
-
const createTestProgram = (source, fileName = "sample.ts") => {
|
|
23
|
-
const sourceFile = ts.createSourceFile(fileName, source, ts.ScriptTarget.ES2022, true, ts.ScriptKind.TS);
|
|
24
|
-
const compilerOptions = {
|
|
25
|
-
target: ts.ScriptTarget.ES2022,
|
|
26
|
-
module: ts.ModuleKind.NodeNext,
|
|
27
|
-
strict: true,
|
|
28
|
-
noEmit: true,
|
|
29
|
-
};
|
|
30
|
-
const host = ts.createCompilerHost(compilerOptions);
|
|
31
|
-
const originalGetSourceFile = host.getSourceFile;
|
|
32
|
-
host.getSourceFile = (name, languageVersionOrOptions, onError, shouldCreateNewSourceFile) => {
|
|
33
|
-
if (name === fileName) {
|
|
34
|
-
return sourceFile;
|
|
35
|
-
}
|
|
36
|
-
return originalGetSourceFile.call(host, name, languageVersionOrOptions, onError, shouldCreateNewSourceFile);
|
|
37
|
-
};
|
|
38
|
-
const program = ts.createProgram([fileName], compilerOptions, host);
|
|
39
|
-
const checker = program.getTypeChecker();
|
|
40
|
-
const testProgram = {
|
|
41
|
-
program,
|
|
42
|
-
checker,
|
|
43
|
-
options: {
|
|
44
|
-
projectRoot: process.cwd(),
|
|
45
|
-
sourceRoot: process.cwd(),
|
|
46
|
-
rootNamespace: "TestApp",
|
|
47
|
-
strict: true,
|
|
48
|
-
},
|
|
49
|
-
sourceFiles: [sourceFile],
|
|
50
|
-
declarationSourceFiles: [],
|
|
51
|
-
metadata: new DotnetMetadataRegistry(),
|
|
52
|
-
bindings: new BindingRegistry(),
|
|
53
|
-
clrResolver: createClrBindingsResolver("/test"),
|
|
54
|
-
binding: createBinding(checker),
|
|
55
|
-
};
|
|
56
|
-
const options = { sourceRoot: "/test", rootNamespace: "TestApp" };
|
|
57
|
-
const ctx = createProgramContext(testProgram, options);
|
|
58
|
-
return { testProgram, ctx, options };
|
|
59
|
-
};
|
|
60
|
-
it("infers method type parameters from the receiver via `this:`", () => {
|
|
61
|
-
const source = `
|
|
62
|
-
import type { Rewrap } from "@tsonic/core/lang.js";
|
|
63
|
-
|
|
64
|
-
interface IQueryable_1<T> {}
|
|
65
|
-
|
|
66
|
-
interface __Ext_System_Linq_IQueryable_1<T> {
|
|
67
|
-
First<TSource>(this: IQueryable_1<TSource>): Rewrap<this, TSource>;
|
|
68
|
-
Where<TSource>(this: IQueryable_1<TSource>, predicate: (x: TSource) => boolean): Rewrap<this, IQueryable_1<TSource>>;
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
declare const xs: IQueryable_1<string> & __Ext_System_Linq_IQueryable_1<string>;
|
|
72
|
-
|
|
73
|
-
export function testFirst(): string {
|
|
74
|
-
return xs.First();
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
export function testWhere(): void {
|
|
78
|
-
const ys = xs.Where((x) => x.length > 0);
|
|
79
|
-
void ys;
|
|
80
|
-
}
|
|
81
|
-
`;
|
|
82
|
-
const { testProgram, ctx, options } = createTestProgram(source);
|
|
83
|
-
const sourceFile = testProgram.sourceFiles[0];
|
|
84
|
-
if (!sourceFile)
|
|
85
|
-
throw new Error("Failed to create source file");
|
|
86
|
-
// Provide minimal tsbindgen-style CLR bindings so __Ext_* members are treated
|
|
87
|
-
// as valid extension methods (avoids TSN4004 during IR build).
|
|
88
|
-
ctx.bindings.addBindings("/test/System.Linq/bindings.json", {
|
|
89
|
-
namespace: "System.Linq",
|
|
90
|
-
types: [
|
|
91
|
-
{
|
|
92
|
-
clrName: "System.Linq.Queryable",
|
|
93
|
-
assemblyName: "System.Linq",
|
|
94
|
-
methods: [
|
|
95
|
-
{
|
|
96
|
-
clrName: "First",
|
|
97
|
-
normalizedSignature: "First|(IQueryable_1):System.String|static=true",
|
|
98
|
-
parameterCount: 1,
|
|
99
|
-
declaringClrType: "System.Linq.Queryable",
|
|
100
|
-
declaringAssemblyName: "System.Linq",
|
|
101
|
-
isExtensionMethod: true,
|
|
102
|
-
},
|
|
103
|
-
{
|
|
104
|
-
clrName: "Where",
|
|
105
|
-
normalizedSignature: "Where|(IQueryable_1,System.Func_2):IQueryable_1|static=true",
|
|
106
|
-
parameterCount: 2,
|
|
107
|
-
declaringClrType: "System.Linq.Queryable",
|
|
108
|
-
declaringAssemblyName: "System.Linq",
|
|
109
|
-
isExtensionMethod: true,
|
|
110
|
-
},
|
|
111
|
-
],
|
|
112
|
-
properties: [],
|
|
113
|
-
fields: [],
|
|
114
|
-
},
|
|
115
|
-
],
|
|
116
|
-
});
|
|
117
|
-
const result = buildIrModule(sourceFile, testProgram, options, ctx);
|
|
118
|
-
expect(result.ok).to.equal(true);
|
|
119
|
-
if (!result.ok)
|
|
120
|
-
return;
|
|
121
|
-
// No deterministic typing diagnostics should be emitted for this pattern.
|
|
122
|
-
expect(ctx.diagnostics.map((d) => d.code)).to.deep.equal([]);
|
|
123
|
-
const module = result.value;
|
|
124
|
-
const testFirstFn = module.body.find((stmt) => stmt.kind === "functionDeclaration" && stmt.name === "testFirst");
|
|
125
|
-
if (!testFirstFn || testFirstFn.kind !== "functionDeclaration") {
|
|
126
|
-
throw new Error("Expected function declaration 'testFirst'");
|
|
127
|
-
}
|
|
128
|
-
const returnStmt = testFirstFn.body.statements.find((s) => s.kind === "returnStatement");
|
|
129
|
-
if (!returnStmt || returnStmt.kind !== "returnStatement") {
|
|
130
|
-
throw new Error("Expected return statement in testFirst()");
|
|
131
|
-
}
|
|
132
|
-
const firstCall = returnStmt.expression;
|
|
133
|
-
if (!firstCall || firstCall.kind !== "call") {
|
|
134
|
-
throw new Error("Expected call expression in testFirst() return");
|
|
135
|
-
}
|
|
136
|
-
expect(firstCall.inferredType).to.deep.equal({
|
|
137
|
-
kind: "primitiveType",
|
|
138
|
-
name: "string",
|
|
139
|
-
});
|
|
140
|
-
const testWhereFn = module.body.find((stmt) => stmt.kind === "functionDeclaration" && stmt.name === "testWhere");
|
|
141
|
-
if (!testWhereFn || testWhereFn.kind !== "functionDeclaration") {
|
|
142
|
-
throw new Error("Expected function declaration 'testWhere'");
|
|
143
|
-
}
|
|
144
|
-
const varStmt = testWhereFn.body.statements.find((s) => s.kind === "variableDeclaration");
|
|
145
|
-
if (!varStmt || varStmt.kind !== "variableDeclaration") {
|
|
146
|
-
throw new Error("Expected variable declaration in testWhere()");
|
|
147
|
-
}
|
|
148
|
-
const init = varStmt.declarations[0]?.initializer;
|
|
149
|
-
if (!init || init.kind !== "call") {
|
|
150
|
-
throw new Error("Expected call initializer for ys");
|
|
151
|
-
}
|
|
152
|
-
expect(init.inferredType).to.not.equal(undefined);
|
|
153
|
-
if (!init.inferredType)
|
|
154
|
-
return;
|
|
155
|
-
expect(init.inferredType.kind).to.equal("referenceType");
|
|
156
|
-
if (init.inferredType.kind === "referenceType") {
|
|
157
|
-
expect(init.inferredType.name).to.equal("IQueryable_1");
|
|
158
|
-
expect(init.inferredType.typeArguments?.[0]).to.deep.equal({
|
|
159
|
-
kind: "primitiveType",
|
|
160
|
-
name: "string",
|
|
161
|
-
});
|
|
162
|
-
}
|
|
163
|
-
});
|
|
164
|
-
});
|
|
165
|
-
//# sourceMappingURL=this-parameter-inference.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"this-parameter-inference.test.js","sourceRoot":"","sources":["../../src/ir/this-parameter-inference.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;AACrC,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAC9B,OAAO,KAAK,EAAE,MAAM,YAAY,CAAC;AACjC,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,yBAAyB,EAAE,MAAM,sCAAsC,CAAC;AACjF,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAEnD,QAAQ,CAAC,gCAAgC,EAAE,GAAG,EAAE;IAC9C,MAAM,iBAAiB,GAAG,CAAC,MAAc,EAAE,QAAQ,GAAG,WAAW,EAAE,EAAE;QACnE,MAAM,UAAU,GAAG,EAAE,CAAC,gBAAgB,CACpC,QAAQ,EACR,MAAM,EACN,EAAE,CAAC,YAAY,CAAC,MAAM,EACtB,IAAI,EACJ,EAAE,CAAC,UAAU,CAAC,EAAE,CACjB,CAAC;QAEF,MAAM,eAAe,GAAuB;YAC1C,MAAM,EAAE,EAAE,CAAC,YAAY,CAAC,MAAM;YAC9B,MAAM,EAAE,EAAE,CAAC,UAAU,CAAC,QAAQ;YAC9B,MAAM,EAAE,IAAI;YACZ,MAAM,EAAE,IAAI;SACb,CAAC;QAEF,MAAM,IAAI,GAAG,EAAE,CAAC,kBAAkB,CAAC,eAAe,CAAC,CAAC;QACpD,MAAM,qBAAqB,GAAG,IAAI,CAAC,aAAa,CAAC;QACjD,IAAI,CAAC,aAAa,GAAG,CACnB,IAAY,EACZ,wBAAsE,EACtE,OAAmC,EACnC,yBAAmC,EACnC,EAAE;YACF,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;gBACtB,OAAO,UAAU,CAAC;YACpB,CAAC;YACD,OAAO,qBAAqB,CAAC,IAAI,CAC/B,IAAI,EACJ,IAAI,EACJ,wBAAwB,EACxB,OAAO,EACP,yBAAyB,CAC1B,CAAC;QACJ,CAAC,CAAC;QAEF,MAAM,OAAO,GAAG,EAAE,CAAC,aAAa,CAAC,CAAC,QAAQ,CAAC,EAAE,eAAe,EAAE,IAAI,CAAC,CAAC;QACpE,MAAM,OAAO,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;QAEzC,MAAM,WAAW,GAAG;YAClB,OAAO;YACP,OAAO;YACP,OAAO,EAAE;gBACP,WAAW,EAAE,OAAO,CAAC,GAAG,EAAE;gBAC1B,UAAU,EAAE,OAAO,CAAC,GAAG,EAAE;gBACzB,aAAa,EAAE,SAAS;gBACxB,MAAM,EAAE,IAAI;aACb;YACD,WAAW,EAAE,CAAC,UAAU,CAAC;YACzB,sBAAsB,EAAE,EAAE;YAC1B,QAAQ,EAAE,IAAI,sBAAsB,EAAE;YACtC,QAAQ,EAAE,IAAI,eAAe,EAAE;YAC/B,WAAW,EAAE,yBAAyB,CAAC,OAAO,CAAC;YAC/C,OAAO,EAAE,aAAa,CAAC,OAAO,CAAC;SAChC,CAAC;QAEF,MAAM,OAAO,GAAG,EAAE,UAAU,EAAE,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,CAAC;QAClE,MAAM,GAAG,GAAG,oBAAoB,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;QAEvD,OAAO,EAAE,WAAW,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC;IACvC,CAAC,CAAC;IAEF,EAAE,CAAC,6DAA6D,EAAE,GAAG,EAAE;QACrE,MAAM,MAAM,GAAG;;;;;;;;;;;;;;;;;;;;KAoBd,CAAC;QAEF,MAAM,EAAE,WAAW,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC;QAChE,MAAM,UAAU,GAAG,WAAW,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;QAC9C,IAAI,CAAC,UAAU;YAAE,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;QAEjE,8EAA8E;QAC9E,+DAA+D;QAC/D,GAAG,CAAC,QAAQ,CAAC,WAAW,CAAC,iCAAiC,EAAE;YAC1D,SAAS,EAAE,aAAa;YACxB,KAAK,EAAE;gBACL;oBACE,OAAO,EAAE,uBAAuB;oBAChC,YAAY,EAAE,aAAa;oBAC3B,OAAO,EAAE;wBACP;4BACE,OAAO,EAAE,OAAO;4BAChB,mBAAmB,EAAE,gDAAgD;4BACrE,cAAc,EAAE,CAAC;4BACjB,gBAAgB,EAAE,uBAAuB;4BACzC,qBAAqB,EAAE,aAAa;4BACpC,iBAAiB,EAAE,IAAI;yBACxB;wBACD;4BACE,OAAO,EAAE,OAAO;4BAChB,mBAAmB,EACjB,6DAA6D;4BAC/D,cAAc,EAAE,CAAC;4BACjB,gBAAgB,EAAE,uBAAuB;4BACzC,qBAAqB,EAAE,aAAa;4BACpC,iBAAiB,EAAE,IAAI;yBACxB;qBACF;oBACD,UAAU,EAAE,EAAE;oBACd,MAAM,EAAE,EAAE;iBACX;aACF;SACF,CAAC,CAAC;QAEH,MAAM,MAAM,GAAG,aAAa,CAAC,UAAU,EAAE,WAAW,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC;QACpE,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACjC,IAAI,CAAC,MAAM,CAAC,EAAE;YAAE,OAAO;QAEvB,0EAA0E;QAC1E,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAE7D,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC;QAE5B,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAClC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,qBAAqB,IAAI,IAAI,CAAC,IAAI,KAAK,WAAW,CAC3E,CAAC;QACF,IAAI,CAAC,WAAW,IAAI,WAAW,CAAC,IAAI,KAAK,qBAAqB,EAAE,CAAC;YAC/D,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;QAC/D,CAAC;QAED,MAAM,UAAU,GAAG,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CACjD,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,iBAAiB,CACpC,CAAC;QACF,IAAI,CAAC,UAAU,IAAI,UAAU,CAAC,IAAI,KAAK,iBAAiB,EAAE,CAAC;YACzD,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;QAC9D,CAAC;QAED,MAAM,SAAS,GAAG,UAAU,CAAC,UAAU,CAAC;QACxC,IAAI,CAAC,SAAS,IAAI,SAAS,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YAC5C,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;QACpE,CAAC;QAED,MAAM,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC;YAC3C,IAAI,EAAE,eAAe;YACrB,IAAI,EAAE,QAAQ;SACf,CAAC,CAAC;QAEH,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAClC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,qBAAqB,IAAI,IAAI,CAAC,IAAI,KAAK,WAAW,CAC3E,CAAC;QACF,IAAI,CAAC,WAAW,IAAI,WAAW,CAAC,IAAI,KAAK,qBAAqB,EAAE,CAAC;YAC/D,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;QAC/D,CAAC;QAED,MAAM,OAAO,GAAG,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAC9C,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,qBAAqB,CACxC,CAAC;QACF,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,IAAI,KAAK,qBAAqB,EAAE,CAAC;YACvD,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;QAClE,CAAC;QAED,MAAM,IAAI,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC;QAClD,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YAClC,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;QACtD,CAAC;QAED,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QAClD,IAAI,CAAC,IAAI,CAAC,YAAY;YAAE,OAAO;QAE/B,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;QACzD,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,KAAK,eAAe,EAAE,CAAC;YAC/C,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;YACxD,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC;gBACzD,IAAI,EAAE,eAAe;gBACrB,IAAI,EAAE,QAAQ;aACf,CAAC,CAAC;QACL,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Bindings JSON loader - Reads and validates .bindings.json files from tsbindgen.
|
|
3
|
-
*
|
|
4
|
-
* This module provides pure functions to load runtime binding files and validate
|
|
5
|
-
* their structure against the expected schema.
|
|
6
|
-
*
|
|
7
|
-
* @see spec/bindings.md for complete schema documentation
|
|
8
|
-
*/
|
|
9
|
-
import type { Result } from "../types/result.ts";
|
|
10
|
-
import type { Diagnostic } from "../types/diagnostic.ts";
|
|
11
|
-
import type { BindingsFile, TypeBinding } from "../types/bindings.ts";
|
|
12
|
-
/**
|
|
13
|
-
* Load and parse a bindings.json file.
|
|
14
|
-
*
|
|
15
|
-
* @param filePath - Absolute path to the .bindings.json file
|
|
16
|
-
* @returns Result containing parsed bindings or diagnostics
|
|
17
|
-
*/
|
|
18
|
-
export declare const loadBindingsFile: (filePath: string) => Result<BindingsFile, Diagnostic[]>;
|
|
19
|
-
/**
|
|
20
|
-
* Load bindings from a directory containing .bindings.json files.
|
|
21
|
-
*
|
|
22
|
-
* @param directoryPath - Path to directory containing bindings files
|
|
23
|
-
* @returns Result containing array of loaded bindings files or diagnostics
|
|
24
|
-
*/
|
|
25
|
-
export declare const loadBindingsDirectory: (directoryPath: string) => Result<BindingsFile[], Diagnostic[]>;
|
|
26
|
-
/**
|
|
27
|
-
* Build a registry of type bindings for fast lookup by TypeScript emit name.
|
|
28
|
-
*
|
|
29
|
-
* @param bindingsFiles - Array of loaded bindings files
|
|
30
|
-
* @returns Map from tsEmitName to TypeBinding
|
|
31
|
-
*/
|
|
32
|
-
export declare const buildBindingsRegistry: (bindingsFiles: readonly BindingsFile[]) => ReadonlyMap<string, TypeBinding>;
|
|
33
|
-
/**
|
|
34
|
-
* Look up a type binding by fully-qualified TypeScript emit name.
|
|
35
|
-
*
|
|
36
|
-
* @param registry - Bindings registry
|
|
37
|
-
* @param qualifiedTsName - Fully qualified TS name (e.g., "System.Collections.Generic.List_1")
|
|
38
|
-
* @returns TypeBinding if found, undefined otherwise
|
|
39
|
-
*/
|
|
40
|
-
export declare const lookupTypeBinding: (registry: ReadonlyMap<string, TypeBinding>, qualifiedTsName: string) => TypeBinding | undefined;
|
|
41
|
-
//# sourceMappingURL=bindings-loader.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"bindings-loader.d.ts","sourceRoot":"","sources":["../../src/metadata/bindings-loader.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAEtE;;;;;GAKG;AACH,eAAO,MAAM,gBAAgB,GAC3B,UAAU,MAAM,KACf,MAAM,CAAC,YAAY,EAAE,UAAU,EAAE,CA2DnC,CAAC;AAmKF;;;;;GAKG;AACH,eAAO,MAAM,qBAAqB,GAChC,eAAe,MAAM,KACpB,MAAM,CAAC,YAAY,EAAE,EAAE,UAAU,EAAE,CAoErC,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,qBAAqB,GAChC,eAAe,SAAS,YAAY,EAAE,KACrC,WAAW,CAAC,MAAM,EAAE,WAAW,CAWjC,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,iBAAiB,GAC5B,UAAU,WAAW,CAAC,MAAM,EAAE,WAAW,CAAC,EAC1C,iBAAiB,MAAM,KACtB,WAAW,GAAG,SAEhB,CAAC"}
|
|
@@ -1,308 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Bindings JSON loader - Reads and validates .bindings.json files from tsbindgen.
|
|
3
|
-
*
|
|
4
|
-
* This module provides pure functions to load runtime binding files and validate
|
|
5
|
-
* their structure against the expected schema.
|
|
6
|
-
*
|
|
7
|
-
* @see spec/bindings.md for complete schema documentation
|
|
8
|
-
*/
|
|
9
|
-
import * as fs from "fs";
|
|
10
|
-
import * as path from "path";
|
|
11
|
-
/**
|
|
12
|
-
* Load and parse a bindings.json file.
|
|
13
|
-
*
|
|
14
|
-
* @param filePath - Absolute path to the .bindings.json file
|
|
15
|
-
* @returns Result containing parsed bindings or diagnostics
|
|
16
|
-
*/
|
|
17
|
-
export const loadBindingsFile = (filePath) => {
|
|
18
|
-
// Check file exists
|
|
19
|
-
if (!fs.existsSync(filePath)) {
|
|
20
|
-
return {
|
|
21
|
-
ok: false,
|
|
22
|
-
error: [
|
|
23
|
-
{
|
|
24
|
-
code: "TSN9101",
|
|
25
|
-
message: `Bindings file not found: ${filePath}`,
|
|
26
|
-
severity: "error",
|
|
27
|
-
location: undefined,
|
|
28
|
-
},
|
|
29
|
-
],
|
|
30
|
-
};
|
|
31
|
-
}
|
|
32
|
-
// Read file contents
|
|
33
|
-
let content;
|
|
34
|
-
try {
|
|
35
|
-
content = fs.readFileSync(filePath, "utf-8");
|
|
36
|
-
}
|
|
37
|
-
catch (error) {
|
|
38
|
-
return {
|
|
39
|
-
ok: false,
|
|
40
|
-
error: [
|
|
41
|
-
{
|
|
42
|
-
code: "TSN9102",
|
|
43
|
-
message: `Failed to read bindings file: ${error}`,
|
|
44
|
-
severity: "error",
|
|
45
|
-
location: undefined,
|
|
46
|
-
},
|
|
47
|
-
],
|
|
48
|
-
};
|
|
49
|
-
}
|
|
50
|
-
// Parse JSON
|
|
51
|
-
let parsed;
|
|
52
|
-
try {
|
|
53
|
-
parsed = JSON.parse(content);
|
|
54
|
-
}
|
|
55
|
-
catch (error) {
|
|
56
|
-
return {
|
|
57
|
-
ok: false,
|
|
58
|
-
error: [
|
|
59
|
-
{
|
|
60
|
-
code: "TSN9103",
|
|
61
|
-
message: `Invalid JSON in bindings file: ${error}`,
|
|
62
|
-
severity: "error",
|
|
63
|
-
location: undefined,
|
|
64
|
-
},
|
|
65
|
-
],
|
|
66
|
-
};
|
|
67
|
-
}
|
|
68
|
-
// Validate structure
|
|
69
|
-
const validation = validateBindingsFile(parsed, filePath);
|
|
70
|
-
if (!validation.ok) {
|
|
71
|
-
return validation;
|
|
72
|
-
}
|
|
73
|
-
return { ok: true, value: validation.value };
|
|
74
|
-
};
|
|
75
|
-
/**
|
|
76
|
-
* Validate that parsed JSON matches BindingsFile schema.
|
|
77
|
-
*
|
|
78
|
-
* @param data - Parsed JSON data
|
|
79
|
-
* @param filePath - File path for error messages
|
|
80
|
-
* @returns Result containing validated bindings or diagnostics
|
|
81
|
-
*/
|
|
82
|
-
const validateBindingsFile = (data, filePath) => {
|
|
83
|
-
const diagnostics = [];
|
|
84
|
-
if (typeof data !== "object" || data === null) {
|
|
85
|
-
return {
|
|
86
|
-
ok: false,
|
|
87
|
-
error: [
|
|
88
|
-
{
|
|
89
|
-
code: "TSN9104",
|
|
90
|
-
message: `Bindings file must be an object, got ${typeof data}`,
|
|
91
|
-
severity: "error",
|
|
92
|
-
location: undefined,
|
|
93
|
-
},
|
|
94
|
-
],
|
|
95
|
-
};
|
|
96
|
-
}
|
|
97
|
-
const obj = data;
|
|
98
|
-
// Validate namespace
|
|
99
|
-
if (typeof obj.namespace !== "string") {
|
|
100
|
-
diagnostics.push({
|
|
101
|
-
code: "TSN9105",
|
|
102
|
-
message: `Missing or invalid 'namespace' field in ${path.basename(filePath)}`,
|
|
103
|
-
severity: "error",
|
|
104
|
-
location: undefined,
|
|
105
|
-
});
|
|
106
|
-
}
|
|
107
|
-
// Validate types array
|
|
108
|
-
if (!Array.isArray(obj.types)) {
|
|
109
|
-
diagnostics.push({
|
|
110
|
-
code: "TSN9106",
|
|
111
|
-
message: `Missing or invalid 'types' field in ${path.basename(filePath)}`,
|
|
112
|
-
severity: "error",
|
|
113
|
-
location: undefined,
|
|
114
|
-
});
|
|
115
|
-
}
|
|
116
|
-
else {
|
|
117
|
-
// Validate each type binding
|
|
118
|
-
for (let i = 0; i < obj.types.length; i++) {
|
|
119
|
-
const typeValidation = validateTypeBinding(obj.types[i], filePath, i);
|
|
120
|
-
if (!typeValidation.ok) {
|
|
121
|
-
diagnostics.push(...typeValidation.error);
|
|
122
|
-
}
|
|
123
|
-
}
|
|
124
|
-
}
|
|
125
|
-
if (diagnostics.length > 0) {
|
|
126
|
-
return { ok: false, error: diagnostics };
|
|
127
|
-
}
|
|
128
|
-
return { ok: true, value: obj };
|
|
129
|
-
};
|
|
130
|
-
/**
|
|
131
|
-
* Validate a single TypeBinding object.
|
|
132
|
-
*
|
|
133
|
-
* @param data - Type binding to validate
|
|
134
|
-
* @param filePath - File path for error messages
|
|
135
|
-
* @param index - Type index in array
|
|
136
|
-
* @returns Result indicating validation success or errors
|
|
137
|
-
*/
|
|
138
|
-
const validateTypeBinding = (data, filePath, index) => {
|
|
139
|
-
const diagnostics = [];
|
|
140
|
-
const context = `type binding ${index} in ${path.basename(filePath)}`;
|
|
141
|
-
if (typeof data !== "object" || data === null) {
|
|
142
|
-
return {
|
|
143
|
-
ok: false,
|
|
144
|
-
error: [
|
|
145
|
-
{
|
|
146
|
-
code: "TSN9107",
|
|
147
|
-
message: `Invalid ${context}: must be an object`,
|
|
148
|
-
severity: "error",
|
|
149
|
-
location: undefined,
|
|
150
|
-
},
|
|
151
|
-
],
|
|
152
|
-
};
|
|
153
|
-
}
|
|
154
|
-
const type = data;
|
|
155
|
-
// Validate required string fields
|
|
156
|
-
const requiredStringFields = ["clrName", "tsEmitName", "assemblyName"];
|
|
157
|
-
for (const field of requiredStringFields) {
|
|
158
|
-
if (typeof type[field] !== "string") {
|
|
159
|
-
diagnostics.push({
|
|
160
|
-
code: "TSN9108",
|
|
161
|
-
message: `Invalid ${context}: missing or invalid '${field}'`,
|
|
162
|
-
severity: "error",
|
|
163
|
-
location: undefined,
|
|
164
|
-
});
|
|
165
|
-
}
|
|
166
|
-
}
|
|
167
|
-
// Validate metadataToken
|
|
168
|
-
if (typeof type.metadataToken !== "number") {
|
|
169
|
-
diagnostics.push({
|
|
170
|
-
code: "TSN9109",
|
|
171
|
-
message: `Invalid ${context}: 'metadataToken' must be a number`,
|
|
172
|
-
severity: "error",
|
|
173
|
-
location: undefined,
|
|
174
|
-
});
|
|
175
|
-
}
|
|
176
|
-
// Validate optional array fields (V1 Definitions)
|
|
177
|
-
const v1ArrayFields = ["methods", "properties", "fields", "events"];
|
|
178
|
-
for (const field of v1ArrayFields) {
|
|
179
|
-
if (type[field] !== undefined && !Array.isArray(type[field])) {
|
|
180
|
-
diagnostics.push({
|
|
181
|
-
code: "TSN9110",
|
|
182
|
-
message: `Invalid ${context}: '${field}' must be an array if present`,
|
|
183
|
-
severity: "error",
|
|
184
|
-
location: undefined,
|
|
185
|
-
});
|
|
186
|
-
}
|
|
187
|
-
}
|
|
188
|
-
// Validate optional array fields (V2 Exposures)
|
|
189
|
-
const v2ArrayFields = [
|
|
190
|
-
"exposedMethods",
|
|
191
|
-
"exposedProperties",
|
|
192
|
-
"exposedFields",
|
|
193
|
-
"exposedEvents",
|
|
194
|
-
];
|
|
195
|
-
for (const field of v2ArrayFields) {
|
|
196
|
-
if (type[field] !== undefined && !Array.isArray(type[field])) {
|
|
197
|
-
diagnostics.push({
|
|
198
|
-
code: "TSN9111",
|
|
199
|
-
message: `Invalid ${context}: '${field}' must be an array if present`,
|
|
200
|
-
severity: "error",
|
|
201
|
-
location: undefined,
|
|
202
|
-
});
|
|
203
|
-
}
|
|
204
|
-
}
|
|
205
|
-
// Note: We're doing basic structural validation here
|
|
206
|
-
// More detailed validation of nested objects (method bindings, etc.)
|
|
207
|
-
// can be added in future iterations if needed
|
|
208
|
-
if (diagnostics.length > 0) {
|
|
209
|
-
return { ok: false, error: diagnostics };
|
|
210
|
-
}
|
|
211
|
-
return { ok: true, value: type };
|
|
212
|
-
};
|
|
213
|
-
/**
|
|
214
|
-
* Load bindings from a directory containing .bindings.json files.
|
|
215
|
-
*
|
|
216
|
-
* @param directoryPath - Path to directory containing bindings files
|
|
217
|
-
* @returns Result containing array of loaded bindings files or diagnostics
|
|
218
|
-
*/
|
|
219
|
-
export const loadBindingsDirectory = (directoryPath) => {
|
|
220
|
-
if (!fs.existsSync(directoryPath)) {
|
|
221
|
-
return {
|
|
222
|
-
ok: false,
|
|
223
|
-
error: [
|
|
224
|
-
{
|
|
225
|
-
code: "TSN9112",
|
|
226
|
-
message: `Bindings directory not found: ${directoryPath}`,
|
|
227
|
-
severity: "error",
|
|
228
|
-
location: undefined,
|
|
229
|
-
},
|
|
230
|
-
],
|
|
231
|
-
};
|
|
232
|
-
}
|
|
233
|
-
const stats = fs.statSync(directoryPath);
|
|
234
|
-
if (!stats.isDirectory()) {
|
|
235
|
-
return {
|
|
236
|
-
ok: false,
|
|
237
|
-
error: [
|
|
238
|
-
{
|
|
239
|
-
code: "TSN9113",
|
|
240
|
-
message: `Not a directory: ${directoryPath}`,
|
|
241
|
-
severity: "error",
|
|
242
|
-
location: undefined,
|
|
243
|
-
},
|
|
244
|
-
],
|
|
245
|
-
};
|
|
246
|
-
}
|
|
247
|
-
// Find all .bindings.json files
|
|
248
|
-
const files = fs
|
|
249
|
-
.readdirSync(directoryPath)
|
|
250
|
-
.filter((file) => file.endsWith(".bindings.json"))
|
|
251
|
-
.map((file) => path.join(directoryPath, file));
|
|
252
|
-
if (files.length === 0) {
|
|
253
|
-
return {
|
|
254
|
-
ok: false,
|
|
255
|
-
error: [
|
|
256
|
-
{
|
|
257
|
-
code: "TSN9114",
|
|
258
|
-
message: `No .bindings.json files found in ${directoryPath}`,
|
|
259
|
-
severity: "warning",
|
|
260
|
-
location: undefined,
|
|
261
|
-
},
|
|
262
|
-
],
|
|
263
|
-
};
|
|
264
|
-
}
|
|
265
|
-
// Load each file
|
|
266
|
-
const bindingsFiles = [];
|
|
267
|
-
const diagnostics = [];
|
|
268
|
-
for (const file of files) {
|
|
269
|
-
const result = loadBindingsFile(file);
|
|
270
|
-
if (result.ok) {
|
|
271
|
-
bindingsFiles.push(result.value);
|
|
272
|
-
}
|
|
273
|
-
else {
|
|
274
|
-
diagnostics.push(...result.error);
|
|
275
|
-
}
|
|
276
|
-
}
|
|
277
|
-
if (diagnostics.length > 0) {
|
|
278
|
-
return { ok: false, error: diagnostics };
|
|
279
|
-
}
|
|
280
|
-
return { ok: true, value: bindingsFiles };
|
|
281
|
-
};
|
|
282
|
-
/**
|
|
283
|
-
* Build a registry of type bindings for fast lookup by TypeScript emit name.
|
|
284
|
-
*
|
|
285
|
-
* @param bindingsFiles - Array of loaded bindings files
|
|
286
|
-
* @returns Map from tsEmitName to TypeBinding
|
|
287
|
-
*/
|
|
288
|
-
export const buildBindingsRegistry = (bindingsFiles) => {
|
|
289
|
-
const registry = new Map();
|
|
290
|
-
for (const file of bindingsFiles) {
|
|
291
|
-
for (const typeBinding of file.types) {
|
|
292
|
-
const key = `${file.namespace}.${typeBinding.tsEmitName}`;
|
|
293
|
-
registry.set(key, typeBinding);
|
|
294
|
-
}
|
|
295
|
-
}
|
|
296
|
-
return registry;
|
|
297
|
-
};
|
|
298
|
-
/**
|
|
299
|
-
* Look up a type binding by fully-qualified TypeScript emit name.
|
|
300
|
-
*
|
|
301
|
-
* @param registry - Bindings registry
|
|
302
|
-
* @param qualifiedTsName - Fully qualified TS name (e.g., "System.Collections.Generic.List_1")
|
|
303
|
-
* @returns TypeBinding if found, undefined otherwise
|
|
304
|
-
*/
|
|
305
|
-
export const lookupTypeBinding = (registry, qualifiedTsName) => {
|
|
306
|
-
return registry.get(qualifiedTsName);
|
|
307
|
-
};
|
|
308
|
-
//# sourceMappingURL=bindings-loader.js.map
|