@tsonic/frontend 0.0.62 → 0.0.63
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 +30 -0
- 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/builder.test.js +223 -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 +384 -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 +7 -0
- package/dist/ir/program-context.d.ts.map +1 -1
- package/dist/ir/program-context.js +1 -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 +315 -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 +415 -0
- package/dist/ir/type-system/internal/universe/clr-type-parser.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 +1083 -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/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/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/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 +1 -1
- package/dist/resolver/import-resolution.d.ts.map +1 -1
- package/dist/resolver/import-resolution.js +2 -7
- 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/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 +2 -1
- 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 +112 -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
|
@@ -0,0 +1,657 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CLR Entry Converter
|
|
3
|
+
*
|
|
4
|
+
* Heritage extraction from tsbindgen .d.ts files and conversion pipeline
|
|
5
|
+
* from raw bindings.json types to NominalEntry structures.
|
|
6
|
+
*
|
|
7
|
+
* This module handles:
|
|
8
|
+
* - Extracting heritage edges (extends/implements) from tsbindgen .d.ts AST
|
|
9
|
+
* - Extracting member types and method signature optionals from .d.ts
|
|
10
|
+
* - Parsing normalized signatures for properties, fields, and methods
|
|
11
|
+
* - Converting RawBindingsType → NominalEntry
|
|
12
|
+
*/
|
|
13
|
+
import * as fs from "fs";
|
|
14
|
+
import * as ts from "typescript";
|
|
15
|
+
import { tsbindgenClrTypeNameToTsTypeName } from "../../../../tsbindgen/names.js";
|
|
16
|
+
import { makeTypeId, parseStableId } from "./types.js";
|
|
17
|
+
import { parseClrTypeString, splitTypeArguments, dtsTypeNodeToIrType, makeMethodSignatureKey, INSTANCE_SUFFIX, VIEWS_PREFIX, VIEWS_SUFFIX, stripTsBindgenInstanceSuffix, stripTsBindgenViewsWrapper, getRightmostPropertyAccessText, } from "./clr-type-parser.js";
|
|
18
|
+
export const extractHeritageFromTsBindgenDts = (dtsPath, tsNameToTypeId, entries) => {
|
|
19
|
+
const typeParametersByTsName = new Map();
|
|
20
|
+
const heritageByTsName = new Map();
|
|
21
|
+
const memberTypesByTsName = new Map();
|
|
22
|
+
const methodSignatureOptionalsByTsName = new Map();
|
|
23
|
+
const content = fs.readFileSync(dtsPath, "utf-8");
|
|
24
|
+
const sf = ts.createSourceFile(dtsPath, content, ts.ScriptTarget.Latest, true, ts.ScriptKind.TS);
|
|
25
|
+
const getEntry = (tsName) => {
|
|
26
|
+
const id = tsNameToTypeId.get(tsName);
|
|
27
|
+
return id ? entries.get(id.stableId) : undefined;
|
|
28
|
+
};
|
|
29
|
+
const addEdge = (sourceTsName, edge) => {
|
|
30
|
+
const list = heritageByTsName.get(sourceTsName) ?? [];
|
|
31
|
+
list.push(edge);
|
|
32
|
+
heritageByTsName.set(sourceTsName, list);
|
|
33
|
+
};
|
|
34
|
+
const recordMemberType = (sourceTsName, memberName, type) => {
|
|
35
|
+
const map = memberTypesByTsName.get(sourceTsName) ?? new Map();
|
|
36
|
+
// Prefer first-seen type for determinism; later duplicates are ignored.
|
|
37
|
+
if (!map.has(memberName)) {
|
|
38
|
+
map.set(memberName, type);
|
|
39
|
+
memberTypesByTsName.set(sourceTsName, map);
|
|
40
|
+
}
|
|
41
|
+
};
|
|
42
|
+
const recordMethodSignatureOptionals = (sourceTsName, signatureKey, optionals) => {
|
|
43
|
+
const map = methodSignatureOptionalsByTsName.get(sourceTsName) ??
|
|
44
|
+
new Map();
|
|
45
|
+
// Prefer first-seen for determinism; later duplicates are ignored.
|
|
46
|
+
if (!map.has(signatureKey)) {
|
|
47
|
+
map.set(signatureKey, optionals);
|
|
48
|
+
methodSignatureOptionalsByTsName.set(sourceTsName, map);
|
|
49
|
+
}
|
|
50
|
+
};
|
|
51
|
+
const getPropertyNameText = (name) => {
|
|
52
|
+
if (ts.isIdentifier(name))
|
|
53
|
+
return name.text;
|
|
54
|
+
if (ts.isStringLiteral(name))
|
|
55
|
+
return name.text;
|
|
56
|
+
if (ts.isNumericLiteral(name))
|
|
57
|
+
return name.text;
|
|
58
|
+
return undefined;
|
|
59
|
+
};
|
|
60
|
+
const extractMethodSignatureOptionalsFromMembers = (baseTsName, members, typeTypeParams, staticOverride) => {
|
|
61
|
+
const typeScope = new Set(typeTypeParams);
|
|
62
|
+
for (const member of members) {
|
|
63
|
+
if (!ts.isMethodSignature(member) && !ts.isMethodDeclaration(member))
|
|
64
|
+
continue;
|
|
65
|
+
const methodName = member.name && ts.isIdentifier(member.name)
|
|
66
|
+
? member.name.text
|
|
67
|
+
: undefined;
|
|
68
|
+
if (!methodName)
|
|
69
|
+
continue;
|
|
70
|
+
const methodTypeParams = (member.typeParameters ?? []).map((p) => p.name.text);
|
|
71
|
+
const inScopeTypeParams = new Set([
|
|
72
|
+
...Array.from(typeScope),
|
|
73
|
+
...methodTypeParams,
|
|
74
|
+
]);
|
|
75
|
+
const params = [];
|
|
76
|
+
for (const param of member.parameters) {
|
|
77
|
+
if (!param.type) {
|
|
78
|
+
// Deterministic: without an explicit type, we can't match this overload to metadata.
|
|
79
|
+
params.length = 0;
|
|
80
|
+
break;
|
|
81
|
+
}
|
|
82
|
+
params.push({
|
|
83
|
+
type: dtsTypeNodeToIrType(param.type, inScopeTypeParams, tsNameToTypeId),
|
|
84
|
+
isRest: param.dotDotDotToken !== undefined,
|
|
85
|
+
isOptional: param.questionToken !== undefined ||
|
|
86
|
+
param.initializer !== undefined,
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
if (params.length === 0 && member.parameters.length > 0) {
|
|
90
|
+
continue;
|
|
91
|
+
}
|
|
92
|
+
const returnType = member.type
|
|
93
|
+
? dtsTypeNodeToIrType(member.type, inScopeTypeParams, tsNameToTypeId)
|
|
94
|
+
: { kind: "voidType" };
|
|
95
|
+
const isStatic = staticOverride ??
|
|
96
|
+
(ts.isMethodDeclaration(member) &&
|
|
97
|
+
(member.modifiers?.some((m) => m.kind === ts.SyntaxKind.StaticKeyword) ??
|
|
98
|
+
false));
|
|
99
|
+
const signatureKey = makeMethodSignatureKey({
|
|
100
|
+
isStatic,
|
|
101
|
+
name: methodName,
|
|
102
|
+
typeParamCount: methodTypeParams.length,
|
|
103
|
+
parameters: params.map((p) => ({ type: p.type, isRest: p.isRest })),
|
|
104
|
+
returnType,
|
|
105
|
+
});
|
|
106
|
+
recordMethodSignatureOptionals(baseTsName, signatureKey, params.map((p) => p.isOptional));
|
|
107
|
+
}
|
|
108
|
+
};
|
|
109
|
+
const extractMemberTypesFromInstanceDecl = (baseTsName, members, inScopeTypeParams) => {
|
|
110
|
+
for (const member of members) {
|
|
111
|
+
if (ts.isPropertySignature(member)) {
|
|
112
|
+
const nameText = member.name
|
|
113
|
+
? getPropertyNameText(member.name)
|
|
114
|
+
: undefined;
|
|
115
|
+
if (!nameText || !member.type)
|
|
116
|
+
continue;
|
|
117
|
+
recordMemberType(baseTsName, nameText, dtsTypeNodeToIrType(member.type, inScopeTypeParams, tsNameToTypeId));
|
|
118
|
+
continue;
|
|
119
|
+
}
|
|
120
|
+
if (ts.isPropertyDeclaration(member)) {
|
|
121
|
+
const nameText = member.name
|
|
122
|
+
? getPropertyNameText(member.name)
|
|
123
|
+
: undefined;
|
|
124
|
+
if (!nameText || !member.type)
|
|
125
|
+
continue;
|
|
126
|
+
recordMemberType(baseTsName, nameText, dtsTypeNodeToIrType(member.type, inScopeTypeParams, tsNameToTypeId));
|
|
127
|
+
continue;
|
|
128
|
+
}
|
|
129
|
+
if (ts.isGetAccessorDeclaration(member)) {
|
|
130
|
+
const nameText = member.name
|
|
131
|
+
? getPropertyNameText(member.name)
|
|
132
|
+
: undefined;
|
|
133
|
+
if (!nameText || !member.type)
|
|
134
|
+
continue;
|
|
135
|
+
recordMemberType(baseTsName, nameText, dtsTypeNodeToIrType(member.type, inScopeTypeParams, tsNameToTypeId));
|
|
136
|
+
continue;
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
};
|
|
140
|
+
const computeEdgeKind = (source, target, preferred) => {
|
|
141
|
+
if (preferred)
|
|
142
|
+
return preferred;
|
|
143
|
+
if (source.kind === "interface")
|
|
144
|
+
return "extends";
|
|
145
|
+
return target.kind === "interface" ? "implements" : "extends";
|
|
146
|
+
};
|
|
147
|
+
const addHeritageFromHeritageClauses = (sourceTsName, sourceEntry, inScopeTypeParams, clauses, forceKind) => {
|
|
148
|
+
if (!clauses)
|
|
149
|
+
return;
|
|
150
|
+
for (const clause of clauses) {
|
|
151
|
+
for (const t of clause.types) {
|
|
152
|
+
const rawTarget = getRightmostPropertyAccessText(t.expression);
|
|
153
|
+
if (!rawTarget)
|
|
154
|
+
continue;
|
|
155
|
+
const targetTsName = stripTsBindgenInstanceSuffix(rawTarget);
|
|
156
|
+
const targetTypeId = tsNameToTypeId.get(targetTsName);
|
|
157
|
+
if (!targetTypeId)
|
|
158
|
+
continue;
|
|
159
|
+
const targetEntry = entries.get(targetTypeId.stableId);
|
|
160
|
+
if (!targetEntry)
|
|
161
|
+
continue;
|
|
162
|
+
const typeArguments = (t.typeArguments ?? []).map((a) => dtsTypeNodeToIrType(a, inScopeTypeParams, tsNameToTypeId));
|
|
163
|
+
addEdge(sourceTsName, {
|
|
164
|
+
kind: computeEdgeKind(sourceEntry, targetEntry, forceKind),
|
|
165
|
+
targetStableId: targetTypeId.stableId,
|
|
166
|
+
typeArguments,
|
|
167
|
+
});
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
};
|
|
171
|
+
const addHeritageFromViewsInterface = (viewsDecl) => {
|
|
172
|
+
const baseTsName = stripTsBindgenViewsWrapper(viewsDecl.name.text);
|
|
173
|
+
if (!baseTsName)
|
|
174
|
+
return;
|
|
175
|
+
const sourceEntry = getEntry(baseTsName);
|
|
176
|
+
if (!sourceEntry)
|
|
177
|
+
return;
|
|
178
|
+
const inScopeTypeParams = new Set((viewsDecl.typeParameters ?? []).map((p) => p.name.text));
|
|
179
|
+
for (const m of viewsDecl.members) {
|
|
180
|
+
if (!ts.isMethodSignature(m))
|
|
181
|
+
continue;
|
|
182
|
+
const methodName = m.name && ts.isIdentifier(m.name) ? m.name.text : undefined;
|
|
183
|
+
if (!methodName || !methodName.startsWith("As_"))
|
|
184
|
+
continue;
|
|
185
|
+
if (!m.type)
|
|
186
|
+
continue;
|
|
187
|
+
const returnType = dtsTypeNodeToIrType(m.type, inScopeTypeParams, tsNameToTypeId);
|
|
188
|
+
if (returnType.kind !== "referenceType")
|
|
189
|
+
continue;
|
|
190
|
+
const targetTsName = returnType.name;
|
|
191
|
+
const targetTypeId = tsNameToTypeId.get(targetTsName);
|
|
192
|
+
if (!targetTypeId)
|
|
193
|
+
continue;
|
|
194
|
+
const targetEntry = entries.get(targetTypeId.stableId);
|
|
195
|
+
if (!targetEntry)
|
|
196
|
+
continue;
|
|
197
|
+
addEdge(baseTsName, {
|
|
198
|
+
kind: computeEdgeKind(sourceEntry, targetEntry, "implements"),
|
|
199
|
+
targetStableId: targetTypeId.stableId,
|
|
200
|
+
typeArguments: returnType.typeArguments ?? [],
|
|
201
|
+
});
|
|
202
|
+
}
|
|
203
|
+
};
|
|
204
|
+
for (const stmt of sf.statements) {
|
|
205
|
+
// export interface Foo$instance<T> ...
|
|
206
|
+
if (ts.isInterfaceDeclaration(stmt) && stmt.name) {
|
|
207
|
+
const nameText = stmt.name.text;
|
|
208
|
+
// Views wrapper: __Foo$views<T> { As_IEnumerable_1(): IEnumerable_1$instance<T> }
|
|
209
|
+
if (nameText.startsWith(VIEWS_PREFIX) &&
|
|
210
|
+
nameText.endsWith(VIEWS_SUFFIX)) {
|
|
211
|
+
addHeritageFromViewsInterface(stmt);
|
|
212
|
+
continue;
|
|
213
|
+
}
|
|
214
|
+
if (!nameText.endsWith(INSTANCE_SUFFIX))
|
|
215
|
+
continue;
|
|
216
|
+
const baseTsName = stripTsBindgenInstanceSuffix(nameText);
|
|
217
|
+
const sourceEntry = getEntry(baseTsName);
|
|
218
|
+
if (!sourceEntry)
|
|
219
|
+
continue;
|
|
220
|
+
const typeParams = (stmt.typeParameters ?? []).map((p) => p.name.text);
|
|
221
|
+
if (!typeParametersByTsName.has(baseTsName)) {
|
|
222
|
+
typeParametersByTsName.set(baseTsName, typeParams);
|
|
223
|
+
}
|
|
224
|
+
const inScopeTypeParams = new Set(typeParams);
|
|
225
|
+
addHeritageFromHeritageClauses(baseTsName, sourceEntry, inScopeTypeParams, stmt.heritageClauses);
|
|
226
|
+
extractMemberTypesFromInstanceDecl(baseTsName, stmt.members, inScopeTypeParams);
|
|
227
|
+
extractMethodSignatureOptionalsFromMembers(baseTsName, stmt.members, typeParams);
|
|
228
|
+
continue;
|
|
229
|
+
}
|
|
230
|
+
// export abstract class Foo$instance { ... } (static namespaces)
|
|
231
|
+
if (ts.isClassDeclaration(stmt) && stmt.name) {
|
|
232
|
+
const nameText = stmt.name.text;
|
|
233
|
+
if (!nameText.endsWith(INSTANCE_SUFFIX))
|
|
234
|
+
continue;
|
|
235
|
+
const baseTsName = stripTsBindgenInstanceSuffix(nameText);
|
|
236
|
+
const sourceEntry = getEntry(baseTsName);
|
|
237
|
+
if (!sourceEntry)
|
|
238
|
+
continue;
|
|
239
|
+
const typeParams = (stmt.typeParameters ?? []).map((p) => p.name.text);
|
|
240
|
+
if (!typeParametersByTsName.has(baseTsName)) {
|
|
241
|
+
typeParametersByTsName.set(baseTsName, typeParams);
|
|
242
|
+
}
|
|
243
|
+
const inScopeTypeParams = new Set(typeParams);
|
|
244
|
+
// In a class declaration, TS encodes extends/implements explicitly.
|
|
245
|
+
if (stmt.heritageClauses) {
|
|
246
|
+
for (const clause of stmt.heritageClauses) {
|
|
247
|
+
if (clause.token === ts.SyntaxKind.ExtendsKeyword) {
|
|
248
|
+
addHeritageFromHeritageClauses(baseTsName, sourceEntry, inScopeTypeParams, [clause], "extends");
|
|
249
|
+
}
|
|
250
|
+
else if (clause.token === ts.SyntaxKind.ImplementsKeyword) {
|
|
251
|
+
addHeritageFromHeritageClauses(baseTsName, sourceEntry, inScopeTypeParams, [clause], "implements");
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
extractMemberTypesFromInstanceDecl(baseTsName, stmt.members, inScopeTypeParams);
|
|
256
|
+
extractMethodSignatureOptionalsFromMembers(baseTsName, stmt.members, typeParams);
|
|
257
|
+
}
|
|
258
|
+
// tsbindgen emits static members and constructors as top-level const containers:
|
|
259
|
+
// export const JsonValue: { create(...): JsonValue; new<T>(...): List_1<T>; ... }
|
|
260
|
+
//
|
|
261
|
+
// CLR metadata lacks optional parameter flags, so we hydrate them from the d.ts
|
|
262
|
+
// surface to support deterministic arity checks (and thus overload correction).
|
|
263
|
+
if (ts.isVariableStatement(stmt)) {
|
|
264
|
+
for (const decl of stmt.declarationList.declarations) {
|
|
265
|
+
if (!ts.isIdentifier(decl.name))
|
|
266
|
+
continue;
|
|
267
|
+
if (!decl.type || !ts.isTypeLiteralNode(decl.type))
|
|
268
|
+
continue;
|
|
269
|
+
const baseTsName = stripTsBindgenInstanceSuffix(decl.name.text);
|
|
270
|
+
extractMethodSignatureOptionalsFromMembers(baseTsName, decl.type.members, [], true);
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
// Dedup + stable sort per type (determinism)
|
|
275
|
+
const dedupedHeritageByTsName = new Map();
|
|
276
|
+
for (const [tsName, edges] of heritageByTsName) {
|
|
277
|
+
const seen = new Set();
|
|
278
|
+
const unique = [];
|
|
279
|
+
for (const e of edges) {
|
|
280
|
+
const key = `${e.kind}|${e.targetStableId}|${JSON.stringify(e.typeArguments)}`;
|
|
281
|
+
if (seen.has(key))
|
|
282
|
+
continue;
|
|
283
|
+
seen.add(key);
|
|
284
|
+
unique.push(e);
|
|
285
|
+
}
|
|
286
|
+
unique.sort((a, b) => {
|
|
287
|
+
const rank = (k) => (k === "extends" ? 0 : 1);
|
|
288
|
+
const ra = rank(a.kind);
|
|
289
|
+
const rb = rank(b.kind);
|
|
290
|
+
if (ra !== rb)
|
|
291
|
+
return ra - rb;
|
|
292
|
+
const stable = a.targetStableId.localeCompare(b.targetStableId);
|
|
293
|
+
if (stable !== 0)
|
|
294
|
+
return stable;
|
|
295
|
+
return JSON.stringify(a.typeArguments).localeCompare(JSON.stringify(b.typeArguments));
|
|
296
|
+
});
|
|
297
|
+
dedupedHeritageByTsName.set(tsName, unique);
|
|
298
|
+
}
|
|
299
|
+
return {
|
|
300
|
+
typeParametersByTsName,
|
|
301
|
+
heritageByTsName: dedupedHeritageByTsName,
|
|
302
|
+
memberTypesByTsName,
|
|
303
|
+
methodSignatureOptionalsByTsName,
|
|
304
|
+
};
|
|
305
|
+
};
|
|
306
|
+
export const enrichAssemblyEntriesFromTsBindgenDts = (entries, tsNameToTypeId, dtsPaths) => {
|
|
307
|
+
const mergedMemberTypes = new Map();
|
|
308
|
+
const mergedMethodSignatureOptionals = new Map();
|
|
309
|
+
for (const dtsPath of dtsPaths) {
|
|
310
|
+
try {
|
|
311
|
+
const info = extractHeritageFromTsBindgenDts(dtsPath, tsNameToTypeId, entries);
|
|
312
|
+
for (const [tsName, memberTypes] of info.memberTypesByTsName) {
|
|
313
|
+
const merged = mergedMemberTypes.get(tsName) ?? new Map();
|
|
314
|
+
for (const [memberName, type] of memberTypes) {
|
|
315
|
+
if (!merged.has(memberName)) {
|
|
316
|
+
merged.set(memberName, type);
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
mergedMemberTypes.set(tsName, merged);
|
|
320
|
+
}
|
|
321
|
+
for (const [tsName, signatureOptionals,] of info.methodSignatureOptionalsByTsName) {
|
|
322
|
+
const merged = mergedMethodSignatureOptionals.get(tsName) ??
|
|
323
|
+
new Map();
|
|
324
|
+
for (const [sigKey, optionals] of signatureOptionals) {
|
|
325
|
+
if (!merged.has(sigKey)) {
|
|
326
|
+
merged.set(sigKey, optionals);
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
mergedMethodSignatureOptionals.set(tsName, merged);
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
catch (e) {
|
|
333
|
+
console.warn(`Failed to parse tsbindgen d.ts for enrichment: ${dtsPath}`, e);
|
|
334
|
+
}
|
|
335
|
+
}
|
|
336
|
+
// Apply merged info to entries
|
|
337
|
+
for (const [tsName, typeId] of tsNameToTypeId) {
|
|
338
|
+
const entry = entries.get(typeId.stableId);
|
|
339
|
+
if (!entry)
|
|
340
|
+
continue;
|
|
341
|
+
const memberTypes = mergedMemberTypes.get(tsName);
|
|
342
|
+
const signatureOptionals = mergedMethodSignatureOptionals.get(tsName);
|
|
343
|
+
let updatedMembers;
|
|
344
|
+
if (memberTypes) {
|
|
345
|
+
for (const [memberName, type] of memberTypes) {
|
|
346
|
+
const member = entry.members.get(memberName);
|
|
347
|
+
if (!member)
|
|
348
|
+
continue;
|
|
349
|
+
if (!updatedMembers) {
|
|
350
|
+
updatedMembers = new Map(entry.members);
|
|
351
|
+
}
|
|
352
|
+
updatedMembers.set(memberName, { ...member, type });
|
|
353
|
+
}
|
|
354
|
+
}
|
|
355
|
+
if (signatureOptionals) {
|
|
356
|
+
const currentMembers = updatedMembers ?? entry.members;
|
|
357
|
+
for (const [memberName, member] of currentMembers) {
|
|
358
|
+
if (member.memberKind !== "method" || !member.signatures)
|
|
359
|
+
continue;
|
|
360
|
+
let memberChanged = false;
|
|
361
|
+
const updatedSignatures = member.signatures.map((sig) => {
|
|
362
|
+
const signatureKey = makeMethodSignatureKey({
|
|
363
|
+
isStatic: sig.isStatic,
|
|
364
|
+
name: memberName,
|
|
365
|
+
typeParamCount: sig.typeParameters.length,
|
|
366
|
+
parameters: sig.parameters.map((p) => ({
|
|
367
|
+
type: p.type,
|
|
368
|
+
isRest: p.isRest,
|
|
369
|
+
})),
|
|
370
|
+
returnType: sig.returnType,
|
|
371
|
+
});
|
|
372
|
+
const optionals = signatureOptionals.get(signatureKey);
|
|
373
|
+
if (!optionals)
|
|
374
|
+
return sig;
|
|
375
|
+
if (optionals.length !== sig.parameters.length)
|
|
376
|
+
return sig;
|
|
377
|
+
const updatedParams = sig.parameters.map((p, idx) => {
|
|
378
|
+
const isOptional = optionals[idx];
|
|
379
|
+
return isOptional === undefined || isOptional === p.isOptional
|
|
380
|
+
? p
|
|
381
|
+
: { ...p, isOptional };
|
|
382
|
+
});
|
|
383
|
+
if (updatedParams.every((p, idx) => p === sig.parameters[idx])) {
|
|
384
|
+
return sig;
|
|
385
|
+
}
|
|
386
|
+
memberChanged = true;
|
|
387
|
+
return { ...sig, parameters: updatedParams };
|
|
388
|
+
});
|
|
389
|
+
if (!memberChanged)
|
|
390
|
+
continue;
|
|
391
|
+
if (!updatedMembers) {
|
|
392
|
+
updatedMembers = new Map(entry.members);
|
|
393
|
+
}
|
|
394
|
+
updatedMembers.set(memberName, {
|
|
395
|
+
...member,
|
|
396
|
+
signatures: updatedSignatures,
|
|
397
|
+
});
|
|
398
|
+
}
|
|
399
|
+
}
|
|
400
|
+
if (!updatedMembers)
|
|
401
|
+
continue;
|
|
402
|
+
entries.set(typeId.stableId, { ...entry, members: updatedMembers });
|
|
403
|
+
}
|
|
404
|
+
};
|
|
405
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
406
|
+
// NORMALIZED SIGNATURE PARSING
|
|
407
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
408
|
+
/**
|
|
409
|
+
* Parse type from normalized signature for properties.
|
|
410
|
+
*
|
|
411
|
+
* Format for regular properties: "Name|:ReturnType|static=bool|accessor=get"
|
|
412
|
+
* Example: "Length|:System.Int32|static=false|accessor=get"
|
|
413
|
+
*
|
|
414
|
+
* Format for indexer properties: "Name|[IndexType]:ReturnType|static=bool|accessor=get"
|
|
415
|
+
* Example: "Chars|[System.Int32]:System.Char|static=false|accessor=get"
|
|
416
|
+
*/
|
|
417
|
+
export const parsePropertyType = (normalizedSig) => {
|
|
418
|
+
// Try indexer format first: Chars|[System.Int32]:System.Char|...
|
|
419
|
+
const indexerMatch = normalizedSig.match(/\|\[[^\]]*\]:([^|]+)\|/);
|
|
420
|
+
if (indexerMatch && indexerMatch[1]) {
|
|
421
|
+
return parseClrTypeString(indexerMatch[1]);
|
|
422
|
+
}
|
|
423
|
+
// Try regular property format: Length|:System.Int32|...
|
|
424
|
+
const colonMatch = normalizedSig.match(/\|:([^|]+)\|/);
|
|
425
|
+
if (colonMatch && colonMatch[1]) {
|
|
426
|
+
return parseClrTypeString(colonMatch[1]);
|
|
427
|
+
}
|
|
428
|
+
return { kind: "unknownType" };
|
|
429
|
+
};
|
|
430
|
+
/**
|
|
431
|
+
* Parse type from normalized signature for fields.
|
|
432
|
+
*
|
|
433
|
+
* Format: "Name|Type|static=bool|const=bool"
|
|
434
|
+
* Example: "Empty|System.String|static=true|const=false"
|
|
435
|
+
*/
|
|
436
|
+
export const parseFieldType = (normalizedSig) => {
|
|
437
|
+
const parts = normalizedSig.split("|");
|
|
438
|
+
if (parts.length >= 2 && parts[1]) {
|
|
439
|
+
return parseClrTypeString(parts[1]);
|
|
440
|
+
}
|
|
441
|
+
return { kind: "unknownType" };
|
|
442
|
+
};
|
|
443
|
+
/**
|
|
444
|
+
* Parse method signature from normalized signature.
|
|
445
|
+
*
|
|
446
|
+
* Format: "Name|(ParamTypes):ReturnType|static=bool"
|
|
447
|
+
* Example: "Substring|(System.Int32,System.Int32):System.String|static=false"
|
|
448
|
+
*/
|
|
449
|
+
export const parseMethodSignature = (normalizedSig, method) => {
|
|
450
|
+
// Parse return type
|
|
451
|
+
const returnMatch = normalizedSig.match(/\):([^|]+)\|/);
|
|
452
|
+
const returnType = returnMatch && returnMatch[1]
|
|
453
|
+
? parseClrTypeString(returnMatch[1])
|
|
454
|
+
: { kind: "voidType" };
|
|
455
|
+
// Parse parameter types
|
|
456
|
+
const paramsMatch = normalizedSig.match(/\|\(([^)]*)\):/);
|
|
457
|
+
const parameters = [];
|
|
458
|
+
const modifierByIndex = new Map();
|
|
459
|
+
for (const m of method.parameterModifiers ?? []) {
|
|
460
|
+
if (m.modifier === "ref" || m.modifier === "out" || m.modifier === "in") {
|
|
461
|
+
modifierByIndex.set(m.index, m.modifier);
|
|
462
|
+
}
|
|
463
|
+
}
|
|
464
|
+
if (paramsMatch && paramsMatch[1]) {
|
|
465
|
+
const paramTypes = splitTypeArguments(paramsMatch[1]);
|
|
466
|
+
for (let i = 0; i < paramTypes.length; i++) {
|
|
467
|
+
const rawParamType = paramTypes[i];
|
|
468
|
+
if (!rawParamType)
|
|
469
|
+
continue;
|
|
470
|
+
let paramType = rawParamType.trim();
|
|
471
|
+
let mode = modifierByIndex.get(i) ?? "value";
|
|
472
|
+
// Handle ref/out/in modifiers
|
|
473
|
+
if (paramType.endsWith("&")) {
|
|
474
|
+
// tsbindgen normalized signatures mark byref with '&'. Use the more
|
|
475
|
+
// precise modifier metadata when available.
|
|
476
|
+
mode = modifierByIndex.get(i) ?? "ref";
|
|
477
|
+
paramType = paramType.slice(0, -1);
|
|
478
|
+
}
|
|
479
|
+
parameters.push({
|
|
480
|
+
name: `p${i}`, // We don't have parameter names in normalized signature
|
|
481
|
+
type: parseClrTypeString(paramType),
|
|
482
|
+
mode,
|
|
483
|
+
isOptional: false,
|
|
484
|
+
isRest: false,
|
|
485
|
+
});
|
|
486
|
+
}
|
|
487
|
+
}
|
|
488
|
+
const typeParameters = method.arity > 0
|
|
489
|
+
? Array.from({ length: method.arity }, (_, i) => ({ name: `T${i}` }))
|
|
490
|
+
: [];
|
|
491
|
+
return {
|
|
492
|
+
stableId: method.stableId,
|
|
493
|
+
parameters,
|
|
494
|
+
returnType,
|
|
495
|
+
typeParameters,
|
|
496
|
+
parameterCount: method.parameterCount,
|
|
497
|
+
isStatic: method.isStatic,
|
|
498
|
+
isExtensionMethod: method.isExtensionMethod,
|
|
499
|
+
sourceInterface: method.sourceInterface,
|
|
500
|
+
normalizedSignature: normalizedSig,
|
|
501
|
+
};
|
|
502
|
+
};
|
|
503
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
504
|
+
// RAW TYPE → NOMINAL ENTRY CONVERSION
|
|
505
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
506
|
+
/**
|
|
507
|
+
* Convert raw metadata type to NominalEntry.
|
|
508
|
+
*/
|
|
509
|
+
export const convertRawType = (rawType, _namespace) => {
|
|
510
|
+
// Parse stableId
|
|
511
|
+
const parsed = parseStableId(rawType.stableId);
|
|
512
|
+
if (!parsed) {
|
|
513
|
+
throw new Error(`Invalid stableId: ${rawType.stableId}`);
|
|
514
|
+
}
|
|
515
|
+
const typeId = makeTypeId(rawType.stableId, rawType.clrName, parsed.assemblyName, tsbindgenClrTypeNameToTsTypeName(rawType.clrName));
|
|
516
|
+
// Convert kind
|
|
517
|
+
const kindMap = {
|
|
518
|
+
Class: "class",
|
|
519
|
+
Interface: "interface",
|
|
520
|
+
Struct: "struct",
|
|
521
|
+
Enum: "enum",
|
|
522
|
+
Delegate: "delegate",
|
|
523
|
+
};
|
|
524
|
+
const kind = kindMap[rawType.kind] ?? "class";
|
|
525
|
+
// Convert properties to members
|
|
526
|
+
const members = new Map();
|
|
527
|
+
for (const prop of rawType.properties) {
|
|
528
|
+
const propTsName = prop.clrName;
|
|
529
|
+
const memberEntry = {
|
|
530
|
+
tsName: propTsName,
|
|
531
|
+
clrName: prop.clrName,
|
|
532
|
+
memberKind: "property",
|
|
533
|
+
type: parsePropertyType(prop.normalizedSignature),
|
|
534
|
+
isStatic: prop.isStatic,
|
|
535
|
+
isReadonly: !prop.hasSetter,
|
|
536
|
+
isAbstract: prop.isAbstract,
|
|
537
|
+
isVirtual: prop.isVirtual,
|
|
538
|
+
isOverride: prop.isOverride,
|
|
539
|
+
isIndexer: prop.isIndexer,
|
|
540
|
+
hasGetter: prop.hasGetter,
|
|
541
|
+
hasSetter: prop.hasSetter,
|
|
542
|
+
stableId: prop.stableId,
|
|
543
|
+
};
|
|
544
|
+
members.set(propTsName, memberEntry);
|
|
545
|
+
}
|
|
546
|
+
// Convert fields to members
|
|
547
|
+
for (const field of rawType.fields) {
|
|
548
|
+
const fieldTsName = field.clrName;
|
|
549
|
+
const memberEntry = {
|
|
550
|
+
tsName: fieldTsName,
|
|
551
|
+
clrName: field.clrName,
|
|
552
|
+
memberKind: "field",
|
|
553
|
+
type: parseFieldType(field.normalizedSignature),
|
|
554
|
+
isStatic: field.isStatic,
|
|
555
|
+
isReadonly: field.isReadOnly || field.isLiteral,
|
|
556
|
+
isAbstract: false,
|
|
557
|
+
isVirtual: false,
|
|
558
|
+
isOverride: false,
|
|
559
|
+
isIndexer: false,
|
|
560
|
+
hasGetter: true,
|
|
561
|
+
hasSetter: !field.isReadOnly && !field.isLiteral,
|
|
562
|
+
stableId: field.stableId,
|
|
563
|
+
};
|
|
564
|
+
members.set(fieldTsName, memberEntry);
|
|
565
|
+
}
|
|
566
|
+
// Convert methods to members (grouped by name for overloads)
|
|
567
|
+
const methodsByName = new Map();
|
|
568
|
+
for (const method of rawType.methods) {
|
|
569
|
+
const existing = methodsByName.get(method.clrName) ?? [];
|
|
570
|
+
existing.push(method);
|
|
571
|
+
methodsByName.set(method.clrName, existing);
|
|
572
|
+
}
|
|
573
|
+
for (const [methodName, overloads] of methodsByName) {
|
|
574
|
+
const signatures = overloads.map((m) => parseMethodSignature(m.normalizedSignature, m));
|
|
575
|
+
const first = overloads[0];
|
|
576
|
+
if (!first)
|
|
577
|
+
continue; // Should never happen since we only add non-empty arrays
|
|
578
|
+
const memberEntry = {
|
|
579
|
+
tsName: methodName,
|
|
580
|
+
clrName: first.clrName,
|
|
581
|
+
memberKind: "method",
|
|
582
|
+
signatures,
|
|
583
|
+
isStatic: first.isStatic,
|
|
584
|
+
isReadonly: true, // methods are readonly
|
|
585
|
+
isAbstract: first.isAbstract,
|
|
586
|
+
isVirtual: first.isVirtual,
|
|
587
|
+
isOverride: first.isOverride,
|
|
588
|
+
isIndexer: false,
|
|
589
|
+
hasGetter: false,
|
|
590
|
+
hasSetter: false,
|
|
591
|
+
stableId: first.stableId,
|
|
592
|
+
};
|
|
593
|
+
members.set(methodName, memberEntry);
|
|
594
|
+
}
|
|
595
|
+
const typeParameters = rawType.typeParameters && rawType.typeParameters.length === rawType.arity
|
|
596
|
+
? rawType.typeParameters.map((name) => ({ name }))
|
|
597
|
+
: Array.from({ length: rawType.arity }, (_, i) => ({
|
|
598
|
+
name: i === 0 ? "T" : `T${i + 1}`,
|
|
599
|
+
}));
|
|
600
|
+
const heritage = [];
|
|
601
|
+
if (rawType.baseType) {
|
|
602
|
+
heritage.push({
|
|
603
|
+
kind: "extends",
|
|
604
|
+
targetStableId: rawType.baseType.stableId,
|
|
605
|
+
typeArguments: (rawType.baseType.typeArguments ?? []).map(parseClrTypeString),
|
|
606
|
+
});
|
|
607
|
+
}
|
|
608
|
+
for (const iface of rawType.interfaces ?? []) {
|
|
609
|
+
heritage.push({
|
|
610
|
+
kind: "implements",
|
|
611
|
+
targetStableId: iface.stableId,
|
|
612
|
+
typeArguments: (iface.typeArguments ?? []).map(parseClrTypeString),
|
|
613
|
+
});
|
|
614
|
+
}
|
|
615
|
+
// Dedup + stable sort (airplane-grade determinism)
|
|
616
|
+
const heritageSeen = new Set();
|
|
617
|
+
const heritageDeduped = [];
|
|
618
|
+
for (const edge of heritage) {
|
|
619
|
+
const key = `${edge.kind}|${edge.targetStableId}|${JSON.stringify(edge.typeArguments)}`;
|
|
620
|
+
if (heritageSeen.has(key))
|
|
621
|
+
continue;
|
|
622
|
+
heritageSeen.add(key);
|
|
623
|
+
heritageDeduped.push(edge);
|
|
624
|
+
}
|
|
625
|
+
heritageDeduped.sort((a, b) => {
|
|
626
|
+
const rank = (k) => (k === "extends" ? 0 : 1);
|
|
627
|
+
const ra = rank(a.kind);
|
|
628
|
+
const rb = rank(b.kind);
|
|
629
|
+
if (ra !== rb)
|
|
630
|
+
return ra - rb;
|
|
631
|
+
const stable = a.targetStableId.localeCompare(b.targetStableId);
|
|
632
|
+
if (stable !== 0)
|
|
633
|
+
return stable;
|
|
634
|
+
return JSON.stringify(a.typeArguments).localeCompare(JSON.stringify(b.typeArguments));
|
|
635
|
+
});
|
|
636
|
+
// Convert accessibility
|
|
637
|
+
const accessibilityMap = {
|
|
638
|
+
Public: "public",
|
|
639
|
+
Internal: "internal",
|
|
640
|
+
Private: "private",
|
|
641
|
+
Protected: "protected",
|
|
642
|
+
};
|
|
643
|
+
const accessibility = accessibilityMap[rawType.accessibility] ?? "public";
|
|
644
|
+
return {
|
|
645
|
+
typeId,
|
|
646
|
+
kind,
|
|
647
|
+
typeParameters,
|
|
648
|
+
heritage: heritageDeduped,
|
|
649
|
+
members,
|
|
650
|
+
origin: "assembly",
|
|
651
|
+
accessibility,
|
|
652
|
+
isAbstract: rawType.isAbstract,
|
|
653
|
+
isSealed: rawType.isSealed,
|
|
654
|
+
isStatic: rawType.isStatic,
|
|
655
|
+
};
|
|
656
|
+
};
|
|
657
|
+
//# sourceMappingURL=clr-entry-converter.js.map
|