@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
|
@@ -4,6 +4,36 @@
|
|
|
4
4
|
import * as ts from "typescript";
|
|
5
5
|
import { addDiagnostic, createDiagnostic, } from "../types/diagnostic.js";
|
|
6
6
|
import { getNodeLocation } from "./helpers.js";
|
|
7
|
+
const SUPPORTED_IMPORT_META_FIELDS = new Set(["url", "filename", "dirname"]);
|
|
8
|
+
const isSupportedImportMetaUsage = (node) => {
|
|
9
|
+
if (node.keywordToken !== ts.SyntaxKind.ImportKeyword ||
|
|
10
|
+
node.name.text !== "meta") {
|
|
11
|
+
return false;
|
|
12
|
+
}
|
|
13
|
+
const parent = node.parent;
|
|
14
|
+
return (ts.isPropertyAccessExpression(parent) &&
|
|
15
|
+
parent.expression === node &&
|
|
16
|
+
SUPPORTED_IMPORT_META_FIELDS.has(parent.name.text));
|
|
17
|
+
};
|
|
18
|
+
const isDynamicImportCall = (node) => node.expression.kind === ts.SyntaxKind.ImportKeyword;
|
|
19
|
+
const isSupportedDynamicImportUsage = (node) => {
|
|
20
|
+
if (!isDynamicImportCall(node))
|
|
21
|
+
return false;
|
|
22
|
+
if (node.arguments.length !== 1)
|
|
23
|
+
return false;
|
|
24
|
+
const [arg] = node.arguments;
|
|
25
|
+
if (!arg)
|
|
26
|
+
return false;
|
|
27
|
+
const isStaticSpecifier = ts.isStringLiteral(arg) || ts.isNoSubstitutionTemplateLiteral(arg);
|
|
28
|
+
if (!isStaticSpecifier)
|
|
29
|
+
return false;
|
|
30
|
+
const awaitExpr = node.parent;
|
|
31
|
+
if (!ts.isAwaitExpression(awaitExpr) || awaitExpr.expression !== node) {
|
|
32
|
+
return false;
|
|
33
|
+
}
|
|
34
|
+
const statement = awaitExpr.parent;
|
|
35
|
+
return (ts.isExpressionStatement(statement) && statement.expression === awaitExpr);
|
|
36
|
+
};
|
|
7
37
|
/**
|
|
8
38
|
* Validate that unsupported features are not used
|
|
9
39
|
*/
|
|
@@ -11,22 +41,17 @@ export const validateUnsupportedFeatures = (sourceFile, _program, collector) =>
|
|
|
11
41
|
const visitor = (node) => {
|
|
12
42
|
// Check for features we don't support yet
|
|
13
43
|
if (ts.isWithStatement(node)) {
|
|
14
|
-
collector = addDiagnostic(collector, createDiagnostic("TSN2001", "error", "'with' statement not supported", getNodeLocation(sourceFile, node)));
|
|
15
|
-
}
|
|
16
|
-
if (ts.isMetaProperty(node)) {
|
|
17
|
-
collector = addDiagnostic(collector, createDiagnostic("TSN2001", "error", "Meta properties (import.meta) not supported", getNodeLocation(sourceFile, node)));
|
|
44
|
+
collector = addDiagnostic(collector, createDiagnostic("TSN2001", "error", "'with' statement is not supported in strict AOT mode", getNodeLocation(sourceFile, node)));
|
|
18
45
|
}
|
|
19
|
-
if (ts.
|
|
20
|
-
|
|
21
|
-
collector = addDiagnostic(collector, createDiagnostic("TSN2001", "error", "Dynamic import() not supported", getNodeLocation(sourceFile, node), "Use static imports"));
|
|
46
|
+
if (ts.isMetaProperty(node) && !isSupportedImportMetaUsage(node)) {
|
|
47
|
+
collector = addDiagnostic(collector, createDiagnostic("TSN2001", "error", "Meta properties (import.meta) not supported in this form", getNodeLocation(sourceFile, node)));
|
|
22
48
|
}
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
if (["then", "catch", "finally"].includes(methodName)) {
|
|
28
|
-
collector = addDiagnostic(collector, createDiagnostic("TSN3011", "error", `Promise.${methodName}() is not supported`, getNodeLocation(sourceFile, node), "Use async/await instead of Promise chaining"));
|
|
49
|
+
if (ts.isCallExpression(node) && isDynamicImportCall(node)) {
|
|
50
|
+
if (isSupportedDynamicImportUsage(node)) {
|
|
51
|
+
ts.forEachChild(node, visitor);
|
|
52
|
+
return;
|
|
29
53
|
}
|
|
54
|
+
collector = addDiagnostic(collector, createDiagnostic("TSN2001", "error", 'Dynamic import() is only supported in side-effect form: await import("./module.js");', getNodeLocation(sourceFile, node), "Use static imports, or use side-effect form with a static string literal specifier."));
|
|
30
55
|
}
|
|
31
56
|
ts.forEachChild(node, visitor);
|
|
32
57
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"features.js","sourceRoot":"","sources":["../../src/validation/features.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,MAAM,YAAY,CAAC;AAEjC,OAAO,EAEL,aAAa,EACb,gBAAgB,GACjB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAE/C
|
|
1
|
+
{"version":3,"file":"features.js","sourceRoot":"","sources":["../../src/validation/features.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"features.test.d.ts","sourceRoot":"","sources":["../../src/validation/features.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,273 @@
|
|
|
1
|
+
import { describe, it } from "mocha";
|
|
2
|
+
import { expect } from "chai";
|
|
3
|
+
import * as ts from "typescript";
|
|
4
|
+
import { validateUnsupportedFeatures } from "./features.js";
|
|
5
|
+
import { createDiagnosticsCollector } from "../types/diagnostic.js";
|
|
6
|
+
import { DotnetMetadataRegistry } from "../dotnet-metadata.js";
|
|
7
|
+
import { BindingRegistry } from "../program/bindings.js";
|
|
8
|
+
import { createClrBindingsResolver } from "../resolver/clr-bindings-resolver.js";
|
|
9
|
+
import { createBinding } from "../ir/binding/index.js";
|
|
10
|
+
const createTestProgram = (source, fileName = "test.ts") => {
|
|
11
|
+
const sourceFile = ts.createSourceFile(fileName, source, ts.ScriptTarget.Latest, true, ts.ScriptKind.TS);
|
|
12
|
+
const compilerOptions = {
|
|
13
|
+
target: ts.ScriptTarget.ES2022,
|
|
14
|
+
module: ts.ModuleKind.NodeNext,
|
|
15
|
+
strict: true,
|
|
16
|
+
noEmit: true,
|
|
17
|
+
skipLibCheck: true,
|
|
18
|
+
};
|
|
19
|
+
const host = ts.createCompilerHost(compilerOptions);
|
|
20
|
+
const originalGetSourceFile = host.getSourceFile;
|
|
21
|
+
host.getSourceFile = (name, languageVersionOrOptions, onError, shouldCreateNewSourceFile) => {
|
|
22
|
+
if (name === fileName) {
|
|
23
|
+
return sourceFile;
|
|
24
|
+
}
|
|
25
|
+
return originalGetSourceFile.call(host, name, languageVersionOrOptions, onError, shouldCreateNewSourceFile);
|
|
26
|
+
};
|
|
27
|
+
const program = ts.createProgram([fileName], compilerOptions, host);
|
|
28
|
+
const checker = program.getTypeChecker();
|
|
29
|
+
return {
|
|
30
|
+
program,
|
|
31
|
+
checker,
|
|
32
|
+
options: {
|
|
33
|
+
projectRoot: "/test",
|
|
34
|
+
sourceRoot: "/test",
|
|
35
|
+
rootNamespace: "Test",
|
|
36
|
+
},
|
|
37
|
+
sourceFiles: [sourceFile],
|
|
38
|
+
declarationSourceFiles: [],
|
|
39
|
+
metadata: new DotnetMetadataRegistry(),
|
|
40
|
+
bindings: new BindingRegistry(),
|
|
41
|
+
clrResolver: createClrBindingsResolver("/test"),
|
|
42
|
+
binding: createBinding(checker),
|
|
43
|
+
sourceFile,
|
|
44
|
+
};
|
|
45
|
+
};
|
|
46
|
+
const runValidation = (sourceText) => {
|
|
47
|
+
const testProgram = createTestProgram(sourceText);
|
|
48
|
+
return validateUnsupportedFeatures(testProgram.sourceFile, testProgram, createDiagnosticsCollector());
|
|
49
|
+
};
|
|
50
|
+
const hasDiagnostic = (result, code, messageFragment) => result.diagnostics.some((d) => d.code === code &&
|
|
51
|
+
(messageFragment === undefined || d.message.includes(messageFragment)));
|
|
52
|
+
describe("validateUnsupportedFeatures", () => {
|
|
53
|
+
describe("TSN2001", () => {
|
|
54
|
+
it("rejects with-statement in strict AOT mode", () => {
|
|
55
|
+
const result = runValidation(`
|
|
56
|
+
const scope = { x: 1 };
|
|
57
|
+
with (scope) {
|
|
58
|
+
console.log(x);
|
|
59
|
+
}
|
|
60
|
+
`);
|
|
61
|
+
expect(result.hasErrors).to.equal(true);
|
|
62
|
+
expect(hasDiagnostic(result, "TSN2001", "'with' statement is not supported in strict AOT mode")).to.equal(true);
|
|
63
|
+
});
|
|
64
|
+
it("rejects nested with-statement in function body", () => {
|
|
65
|
+
const result = runValidation(`
|
|
66
|
+
function f(scope: { x: number }): number {
|
|
67
|
+
with (scope) {
|
|
68
|
+
return x;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
`);
|
|
72
|
+
expect(hasDiagnostic(result, "TSN2001", "'with' statement")).to.equal(true);
|
|
73
|
+
});
|
|
74
|
+
it("does not flag object property named 'with'", () => {
|
|
75
|
+
const result = runValidation(`
|
|
76
|
+
const obj = { with: 1 };
|
|
77
|
+
console.log(obj.with);
|
|
78
|
+
`);
|
|
79
|
+
expect(hasDiagnostic(result, "TSN2001", "'with' statement")).to.equal(false);
|
|
80
|
+
});
|
|
81
|
+
it("allows import.meta.url", () => {
|
|
82
|
+
const result = runValidation(`
|
|
83
|
+
const url = import.meta.url;
|
|
84
|
+
console.log(url);
|
|
85
|
+
`);
|
|
86
|
+
expect(hasDiagnostic(result, "TSN2001")).to.equal(false);
|
|
87
|
+
});
|
|
88
|
+
it("allows import.meta.filename", () => {
|
|
89
|
+
const result = runValidation(`
|
|
90
|
+
const file = import.meta.filename;
|
|
91
|
+
console.log(file);
|
|
92
|
+
`);
|
|
93
|
+
expect(hasDiagnostic(result, "TSN2001")).to.equal(false);
|
|
94
|
+
});
|
|
95
|
+
it("allows import.meta.dirname", () => {
|
|
96
|
+
const result = runValidation(`
|
|
97
|
+
const dir = import.meta.dirname;
|
|
98
|
+
console.log(dir);
|
|
99
|
+
`);
|
|
100
|
+
expect(hasDiagnostic(result, "TSN2001")).to.equal(false);
|
|
101
|
+
});
|
|
102
|
+
it("rejects unsupported import.meta fields", () => {
|
|
103
|
+
const result = runValidation(`
|
|
104
|
+
const bad = import.meta.env;
|
|
105
|
+
console.log(bad);
|
|
106
|
+
`);
|
|
107
|
+
expect(hasDiagnostic(result, "TSN2001", "import.meta")).to.equal(true);
|
|
108
|
+
});
|
|
109
|
+
it("rejects bare import.meta", () => {
|
|
110
|
+
const result = runValidation(`
|
|
111
|
+
const meta = import.meta;
|
|
112
|
+
console.log(meta);
|
|
113
|
+
`);
|
|
114
|
+
expect(hasDiagnostic(result, "TSN2001", "import.meta")).to.equal(true);
|
|
115
|
+
});
|
|
116
|
+
it("rejects dynamic import() when returned as a value", () => {
|
|
117
|
+
const result = runValidation(`
|
|
118
|
+
async function load() {
|
|
119
|
+
return import("./module.js");
|
|
120
|
+
}
|
|
121
|
+
`);
|
|
122
|
+
expect(hasDiagnostic(result, "TSN2001", "Dynamic import()")).to.equal(true);
|
|
123
|
+
});
|
|
124
|
+
it("rejects await import() when module namespace is consumed", () => {
|
|
125
|
+
const result = runValidation(`
|
|
126
|
+
async function load() {
|
|
127
|
+
const module = await import("./module.js");
|
|
128
|
+
return module;
|
|
129
|
+
}
|
|
130
|
+
`);
|
|
131
|
+
expect(hasDiagnostic(result, "TSN2001", "Dynamic import()")).to.equal(true);
|
|
132
|
+
});
|
|
133
|
+
it("allows dynamic import() in side-effect form", () => {
|
|
134
|
+
const result = runValidation(`
|
|
135
|
+
async function load() {
|
|
136
|
+
await import("./module.js");
|
|
137
|
+
}
|
|
138
|
+
`);
|
|
139
|
+
expect(hasDiagnostic(result, "TSN2001", "Dynamic import()")).to.equal(false);
|
|
140
|
+
});
|
|
141
|
+
it("rejects dynamic import() side-effect form with non-literal specifier", () => {
|
|
142
|
+
const result = runValidation(`
|
|
143
|
+
async function load(name: string) {
|
|
144
|
+
await import(name);
|
|
145
|
+
}
|
|
146
|
+
`);
|
|
147
|
+
expect(hasDiagnostic(result, "TSN2001", "Dynamic import()")).to.equal(true);
|
|
148
|
+
});
|
|
149
|
+
it("does not reject static import declarations", () => {
|
|
150
|
+
const result = runValidation(`
|
|
151
|
+
import { value } from "./module.js";
|
|
152
|
+
console.log(value);
|
|
153
|
+
`);
|
|
154
|
+
expect(hasDiagnostic(result, "TSN2001")).to.equal(false);
|
|
155
|
+
});
|
|
156
|
+
it("does not reject import type queries", () => {
|
|
157
|
+
const result = runValidation(`
|
|
158
|
+
type Foo = import("./module.js").Foo;
|
|
159
|
+
const x: Foo | undefined = undefined;
|
|
160
|
+
console.log(x);
|
|
161
|
+
`);
|
|
162
|
+
expect(hasDiagnostic(result, "TSN2001")).to.equal(false);
|
|
163
|
+
});
|
|
164
|
+
});
|
|
165
|
+
describe("Promise chaining support (TSN3011 retired)", () => {
|
|
166
|
+
it("allows Promise.then chaining", () => {
|
|
167
|
+
const result = runValidation(`
|
|
168
|
+
const p: Promise<number> = Promise.resolve(1);
|
|
169
|
+
p.then((x) => x + 1);
|
|
170
|
+
`);
|
|
171
|
+
expect(hasDiagnostic(result, "TSN3011")).to.equal(false);
|
|
172
|
+
});
|
|
173
|
+
it("allows Promise.catch chaining", () => {
|
|
174
|
+
const result = runValidation(`
|
|
175
|
+
const p: Promise<number> = Promise.resolve(1);
|
|
176
|
+
p.catch(() => 0);
|
|
177
|
+
`);
|
|
178
|
+
expect(hasDiagnostic(result, "TSN3011")).to.equal(false);
|
|
179
|
+
});
|
|
180
|
+
it("allows Promise.finally chaining", () => {
|
|
181
|
+
const result = runValidation(`
|
|
182
|
+
const p: Promise<number> = Promise.resolve(1);
|
|
183
|
+
p.finally(() => {});
|
|
184
|
+
`);
|
|
185
|
+
expect(hasDiagnostic(result, "TSN3011")).to.equal(false);
|
|
186
|
+
});
|
|
187
|
+
it("allows Promise chain composition", () => {
|
|
188
|
+
const result = runValidation(`
|
|
189
|
+
const p: Promise<number> = Promise.resolve(1);
|
|
190
|
+
p.then((x) => x + 1).catch(() => 0).finally(() => {});
|
|
191
|
+
`);
|
|
192
|
+
expect(hasDiagnostic(result, "TSN3011")).to.equal(false);
|
|
193
|
+
});
|
|
194
|
+
it("allows chaining on Promise returned by async functions", () => {
|
|
195
|
+
const result = runValidation(`
|
|
196
|
+
async function load(): Promise<number> {
|
|
197
|
+
return 1;
|
|
198
|
+
}
|
|
199
|
+
load().then((x) => x + 1);
|
|
200
|
+
`);
|
|
201
|
+
expect(hasDiagnostic(result, "TSN3011")).to.equal(false);
|
|
202
|
+
});
|
|
203
|
+
it("allows optional chaining on Promise receivers", () => {
|
|
204
|
+
const result = runValidation(`
|
|
205
|
+
const p: Promise<number> | undefined = Promise.resolve(1);
|
|
206
|
+
p?.then((x) => x + 1);
|
|
207
|
+
`);
|
|
208
|
+
expect(hasDiagnostic(result, "TSN3011")).to.equal(false);
|
|
209
|
+
});
|
|
210
|
+
it("does not flag class methods named then", () => {
|
|
211
|
+
const result = runValidation(`
|
|
212
|
+
class Builder {
|
|
213
|
+
then(v: number): number {
|
|
214
|
+
return v + 1;
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
const b = new Builder();
|
|
218
|
+
b.then(1);
|
|
219
|
+
`);
|
|
220
|
+
expect(hasDiagnostic(result, "TSN3011")).to.equal(false);
|
|
221
|
+
});
|
|
222
|
+
it("does not flag class methods named catch", () => {
|
|
223
|
+
const result = runValidation(`
|
|
224
|
+
class Catcher {
|
|
225
|
+
catch(v: number): number {
|
|
226
|
+
return v + 1;
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
const c = new Catcher();
|
|
230
|
+
c.catch(1);
|
|
231
|
+
`);
|
|
232
|
+
expect(hasDiagnostic(result, "TSN3011")).to.equal(false);
|
|
233
|
+
});
|
|
234
|
+
it("does not flag class methods named finally", () => {
|
|
235
|
+
const result = runValidation(`
|
|
236
|
+
class Finalizer {
|
|
237
|
+
finally(v: number): number {
|
|
238
|
+
return v + 1;
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
const f = new Finalizer();
|
|
242
|
+
f.finally(1);
|
|
243
|
+
`);
|
|
244
|
+
expect(hasDiagnostic(result, "TSN3011")).to.equal(false);
|
|
245
|
+
});
|
|
246
|
+
it("does not flag typed object callbacks named then", () => {
|
|
247
|
+
const result = runValidation(`
|
|
248
|
+
type Builder = { then(v: number): number };
|
|
249
|
+
const b: Builder = { then: (v: number) => v + 1 };
|
|
250
|
+
b.then(1);
|
|
251
|
+
`);
|
|
252
|
+
expect(hasDiagnostic(result, "TSN3011")).to.equal(false);
|
|
253
|
+
});
|
|
254
|
+
it("does not flag non-call property access to 'then'", () => {
|
|
255
|
+
const result = runValidation(`
|
|
256
|
+
const obj = { then: 123 };
|
|
257
|
+
const value = obj.then;
|
|
258
|
+
console.log(value);
|
|
259
|
+
`);
|
|
260
|
+
expect(hasDiagnostic(result, "TSN3011")).to.equal(false);
|
|
261
|
+
});
|
|
262
|
+
it("does not flag regular function name 'then'", () => {
|
|
263
|
+
const result = runValidation(`
|
|
264
|
+
function then(v: number): number {
|
|
265
|
+
return v + 1;
|
|
266
|
+
}
|
|
267
|
+
console.log(then(1));
|
|
268
|
+
`);
|
|
269
|
+
expect(hasDiagnostic(result, "TSN3011")).to.equal(false);
|
|
270
|
+
});
|
|
271
|
+
});
|
|
272
|
+
});
|
|
273
|
+
//# sourceMappingURL=features.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"features.test.js","sourceRoot":"","sources":["../../src/validation/features.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,5 +7,5 @@ import { DiagnosticsCollector } from "../types/diagnostic.js";
|
|
|
7
7
|
/**
|
|
8
8
|
* Validate generic types and constraints
|
|
9
9
|
*/
|
|
10
|
-
export declare const validateGenerics: (
|
|
10
|
+
export declare const validateGenerics: (_sourceFile: ts.SourceFile, _program: TsonicProgram, collector: DiagnosticsCollector) => DiagnosticsCollector;
|
|
11
11
|
//# sourceMappingURL=generics.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generics.d.ts","sourceRoot":"","sources":["../../src/validation/generics.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,MAAM,YAAY,CAAC;AACjC,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,oBAAoB,
|
|
1
|
+
{"version":3,"file":"generics.d.ts","sourceRoot":"","sources":["../../src/validation/generics.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,MAAM,YAAY,CAAC;AACjC,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAE9D;;GAEG;AACH,eAAO,MAAM,gBAAgB,GAC3B,aAAa,EAAE,CAAC,UAAU,EAC1B,UAAU,aAAa,EACvB,WAAW,oBAAoB,KAC9B,oBAGF,CAAC"}
|
|
@@ -1,35 +1,11 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Generic type validation
|
|
3
3
|
*/
|
|
4
|
-
import * as ts from "typescript";
|
|
5
|
-
import { addDiagnostic } from "../types/diagnostic.js";
|
|
6
|
-
import { checkForSymbolIndexSignature } from "../ir/generic-validator.js";
|
|
7
4
|
/**
|
|
8
5
|
* Validate generic types and constraints
|
|
9
6
|
*/
|
|
10
|
-
export const validateGenerics = (
|
|
11
|
-
//
|
|
12
|
-
if (process.env.DEBUG_GENERICS) {
|
|
13
|
-
console.log(`[validateGenerics] Checking: ${sourceFile.fileName}`);
|
|
14
|
-
}
|
|
15
|
-
const visitor = (node) => {
|
|
16
|
-
// Only check for truly unsupported features (no static C# mapping)
|
|
17
|
-
// Symbol index signatures - TSN7203
|
|
18
|
-
if (ts.isIndexSignatureDeclaration(node)) {
|
|
19
|
-
const symbolDiag = checkForSymbolIndexSignature(node, sourceFile);
|
|
20
|
-
if (symbolDiag) {
|
|
21
|
-
collector = addDiagnostic(collector, symbolDiag);
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
// Explicitly visit interface and type literal members
|
|
25
|
-
if (ts.isInterfaceDeclaration(node) || ts.isTypeLiteralNode(node)) {
|
|
26
|
-
for (const member of node.members) {
|
|
27
|
-
visitor(member);
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
ts.forEachChild(node, visitor);
|
|
31
|
-
};
|
|
32
|
-
visitor(sourceFile);
|
|
7
|
+
export const validateGenerics = (_sourceFile, _program, collector) => {
|
|
8
|
+
// TSN7203 retired; no generic-only blockers remain in this pass.
|
|
33
9
|
return collector;
|
|
34
10
|
};
|
|
35
11
|
//# sourceMappingURL=generics.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generics.js","sourceRoot":"","sources":["../../src/validation/generics.ts"],"names":[],"mappings":"AAAA;;GAEG;
|
|
1
|
+
{"version":3,"file":"generics.js","sourceRoot":"","sources":["../../src/validation/generics.ts"],"names":[],"mappings":"AAAA;;GAEG;AAMH;;GAEG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAC9B,WAA0B,EAC1B,QAAuB,EACvB,SAA+B,EACT,EAAE;IACxB,iEAAiE;IACjE,OAAO,SAAS,CAAC;AACnB,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"imports.d.ts","sourceRoot":"","sources":["../../src/validation/imports.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,MAAM,YAAY,CAAC;AACjC,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EACL,oBAAoB,EAGrB,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"imports.d.ts","sourceRoot":"","sources":["../../src/validation/imports.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,MAAM,YAAY,CAAC;AACjC,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EACL,oBAAoB,EAGrB,MAAM,wBAAwB,CAAC;AAKhC;;GAEG;AACH,eAAO,MAAM,eAAe,GAC1B,YAAY,EAAE,CAAC,UAAU,EACzB,SAAS,aAAa,EACtB,WAAW,oBAAoB,KAC9B,oBAuBF,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,yBAAyB,GACpC,MAAM,EAAE,CAAC,iBAAiB,EAC1B,YAAY,EAAE,CAAC,UAAU,EACzB,SAAS,aAAa,EACtB,WAAW,oBAAoB,KAC9B,oBAmFF,CAAC"}
|
|
@@ -4,21 +4,26 @@
|
|
|
4
4
|
import * as ts from "typescript";
|
|
5
5
|
import { addDiagnostic, createDiagnostic, } from "../types/diagnostic.js";
|
|
6
6
|
import { resolveImport } from "../resolver.js";
|
|
7
|
+
import { resolveNodeModuleAlias } from "../resolver/node-module-aliases.js";
|
|
7
8
|
import { getNodeLocation } from "./helpers.js";
|
|
8
9
|
/**
|
|
9
10
|
* Validate all imports in a source file
|
|
10
11
|
*/
|
|
11
12
|
export const validateImports = (sourceFile, program, collector) => {
|
|
13
|
+
let currentCollector = collector;
|
|
12
14
|
const visitor = (node) => {
|
|
13
15
|
if (ts.isImportDeclaration(node)) {
|
|
14
|
-
|
|
16
|
+
currentCollector = validateImportDeclaration(node, sourceFile, program, currentCollector);
|
|
17
|
+
return;
|
|
15
18
|
}
|
|
16
19
|
if (ts.isImportTypeNode(node)) {
|
|
17
|
-
|
|
20
|
+
// Supported: type-only imports are erased at runtime.
|
|
21
|
+
return;
|
|
18
22
|
}
|
|
19
|
-
|
|
23
|
+
ts.forEachChild(node, visitor);
|
|
20
24
|
};
|
|
21
|
-
|
|
25
|
+
visitor(sourceFile);
|
|
26
|
+
return currentCollector;
|
|
22
27
|
};
|
|
23
28
|
/**
|
|
24
29
|
* Validate a specific import declaration
|
|
@@ -28,11 +33,30 @@ export const validateImportDeclaration = (node, sourceFile, program, collector)
|
|
|
28
33
|
return addDiagnostic(collector, createDiagnostic("TSN2001", "error", "Dynamic imports not supported", getNodeLocation(sourceFile, node), "Use static import statements"));
|
|
29
34
|
}
|
|
30
35
|
const importPath = node.moduleSpecifier.text;
|
|
31
|
-
const result = resolveImport(importPath, sourceFile.fileName, program.options.sourceRoot, {
|
|
36
|
+
const result = resolveImport(importPath, sourceFile.fileName, program.options.sourceRoot, {
|
|
37
|
+
clrResolver: program.clrResolver,
|
|
38
|
+
bindings: program.bindings,
|
|
39
|
+
surface: program.options.surface,
|
|
40
|
+
});
|
|
32
41
|
if (!result.ok) {
|
|
33
42
|
const location = getNodeLocation(sourceFile, node.moduleSpecifier);
|
|
34
43
|
return addDiagnostic(collector, { ...result.error, location });
|
|
35
44
|
}
|
|
45
|
+
const nodeAlias = resolveNodeModuleAlias(importPath);
|
|
46
|
+
if (nodeAlias) {
|
|
47
|
+
if (node.importClause?.name) {
|
|
48
|
+
return addDiagnostic(collector, createDiagnostic("TSN1004", "error", `Default import is not supported for "${importPath}"`, getNodeLocation(sourceFile, node.importClause.name), `Use named import: import { ${nodeAlias.moduleName} } from "${importPath}";`));
|
|
49
|
+
}
|
|
50
|
+
if (node.importClause?.namedBindings &&
|
|
51
|
+
ts.isNamedImports(node.importClause.namedBindings)) {
|
|
52
|
+
for (const spec of node.importClause.namedBindings.elements) {
|
|
53
|
+
const importedName = (spec.propertyName ?? spec.name).text;
|
|
54
|
+
if (importedName !== nodeAlias.moduleName) {
|
|
55
|
+
return addDiagnostic(collector, createDiagnostic("TSN1004", "error", `Unsupported member import "${importedName}" from "${importPath}"`, getNodeLocation(sourceFile, spec), `Only "${nodeAlias.moduleName}" is exported from "${importPath}" in the Tsonic Node surface`));
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
36
60
|
// Check for default imports from local modules (we might want to restrict this)
|
|
37
61
|
if (result.value.isLocal && node.importClause?.name) {
|
|
38
62
|
return addDiagnostic(collector, createDiagnostic("TSN2001", "warning", "Default imports from local modules may not work as expected", getNodeLocation(sourceFile, node.importClause), "Consider using named imports"));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"imports.js","sourceRoot":"","sources":["../../src/validation/imports.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,MAAM,YAAY,CAAC;AAEjC,OAAO,EAEL,aAAa,EACb,gBAAgB,GACjB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAE/C;;GAEG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,CAC7B,UAAyB,EACzB,OAAsB,EACtB,SAA+B,EACT,EAAE;IACxB,MAAM,OAAO,GAAG,CAAC,IAAa,
|
|
1
|
+
{"version":3,"file":"imports.js","sourceRoot":"","sources":["../../src/validation/imports.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"imports.test.d.ts","sourceRoot":"","sources":["../../src/validation/imports.test.ts"],"names":[],"mappings":""}
|