@tsonic/frontend 0.0.1 → 0.0.2
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 -0
- package/{src/dependency-graph.ts → dist/dependency-graph.d.ts} +3 -11
- package/dist/dependency-graph.d.ts.map +1 -0
- package/dist/dependency-graph.js +9 -0
- package/dist/dependency-graph.js.map +1 -0
- package/dist/dotnet-metadata.d.ts +71 -0
- package/dist/dotnet-metadata.d.ts.map +1 -0
- package/dist/dotnet-metadata.js +78 -0
- package/dist/dotnet-metadata.js.map +1 -0
- package/dist/graph/builder.d.ts +10 -0
- package/dist/graph/builder.d.ts.map +1 -0
- package/dist/graph/builder.js +54 -0
- package/dist/graph/builder.js.map +1 -0
- package/dist/graph/circular.d.ts +10 -0
- package/dist/graph/circular.d.ts.map +1 -0
- package/dist/graph/circular.js +40 -0
- package/dist/graph/circular.js.map +1 -0
- package/dist/graph/extraction/exports.d.ts +10 -0
- package/dist/graph/extraction/exports.d.ts.map +1 -0
- package/dist/graph/extraction/exports.js +46 -0
- package/dist/graph/extraction/exports.js.map +1 -0
- package/dist/graph/extraction/imports.d.ts +11 -0
- package/dist/graph/extraction/imports.d.ts.map +1 -0
- package/dist/graph/extraction/imports.js +63 -0
- package/dist/graph/extraction/imports.js.map +1 -0
- package/dist/graph/extraction/index.d.ts +7 -0
- package/dist/graph/extraction/index.d.ts.map +1 -0
- package/{src/graph/extraction/index.ts → dist/graph/extraction/index.js} +1 -1
- package/dist/graph/extraction/index.js.map +1 -0
- package/dist/graph/extraction/orchestrator.d.ts +11 -0
- package/dist/graph/extraction/orchestrator.d.ts.map +1 -0
- package/dist/graph/extraction/orchestrator.js +78 -0
- package/dist/graph/extraction/orchestrator.js.map +1 -0
- package/dist/graph/extraction.d.ts +6 -0
- package/dist/graph/extraction.d.ts.map +1 -0
- package/{src/graph/extraction.ts → dist/graph/extraction.js} +2 -6
- package/dist/graph/extraction.js.map +1 -0
- package/dist/graph/helpers.d.ts +17 -0
- package/dist/graph/helpers.d.ts.map +1 -0
- package/dist/graph/helpers.js +40 -0
- package/dist/graph/helpers.js.map +1 -0
- package/{src/graph/index.ts → dist/graph/index.d.ts} +3 -11
- package/dist/graph/index.d.ts.map +1 -0
- package/dist/graph/index.js +8 -0
- package/dist/graph/index.js.map +1 -0
- package/{src/graph/types.ts → dist/graph/types.d.ts} +4 -5
- package/dist/graph/types.d.ts.map +1 -0
- package/dist/graph/types.js +5 -0
- package/dist/graph/types.js.map +1 -0
- package/dist/index.d.ts +26 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +43 -0
- package/dist/index.js.map +1 -0
- package/dist/ir/binding-resolution.test.d.ts +5 -0
- package/dist/ir/binding-resolution.test.d.ts.map +1 -0
- package/dist/ir/binding-resolution.test.js +513 -0
- package/dist/ir/binding-resolution.test.js.map +1 -0
- package/dist/ir/builder/exports.d.ts +10 -0
- package/dist/ir/builder/exports.d.ts.map +1 -0
- package/dist/ir/builder/exports.js +75 -0
- package/dist/ir/builder/exports.js.map +1 -0
- package/dist/ir/builder/helpers.d.ts +13 -0
- package/dist/ir/builder/helpers.d.ts.map +1 -0
- package/dist/ir/builder/helpers.js +23 -0
- package/dist/ir/builder/helpers.js.map +1 -0
- package/dist/ir/builder/imports.d.ts +18 -0
- package/dist/ir/builder/imports.d.ts.map +1 -0
- package/dist/ir/builder/imports.js +121 -0
- package/dist/ir/builder/imports.js.map +1 -0
- package/{src/ir/builder/index.ts → dist/ir/builder/index.d.ts} +1 -1
- package/dist/ir/builder/index.d.ts.map +1 -0
- package/dist/ir/builder/index.js +9 -0
- package/dist/ir/builder/index.js.map +1 -0
- package/dist/ir/builder/orchestrator.d.ts +18 -0
- package/dist/ir/builder/orchestrator.d.ts.map +1 -0
- package/dist/ir/builder/orchestrator.js +121 -0
- package/dist/ir/builder/orchestrator.js.map +1 -0
- package/dist/ir/builder/statements.d.ts +14 -0
- package/dist/ir/builder/statements.d.ts.map +1 -0
- package/dist/ir/builder/statements.js +43 -0
- package/dist/ir/builder/statements.js.map +1 -0
- package/dist/ir/builder/types.d.ts +8 -0
- package/dist/ir/builder/types.d.ts.map +1 -0
- package/dist/ir/builder/types.js +5 -0
- package/dist/ir/builder/types.js.map +1 -0
- package/dist/ir/builder/validation.d.ts +10 -0
- package/dist/ir/builder/validation.d.ts.map +1 -0
- package/dist/ir/builder/validation.js +86 -0
- package/dist/ir/builder/validation.js.map +1 -0
- package/{src/ir/builder.ts → dist/ir/builder.d.ts} +2 -5
- package/dist/ir/builder.d.ts.map +1 -0
- package/dist/ir/builder.js +10 -0
- package/dist/ir/builder.js.map +1 -0
- package/dist/ir/builder.test.d.ts +5 -0
- package/dist/ir/builder.test.d.ts.map +1 -0
- package/dist/ir/builder.test.js +493 -0
- package/dist/ir/builder.test.js.map +1 -0
- package/dist/ir/converters/expressions/access.d.ts +10 -0
- package/dist/ir/converters/expressions/access.d.ts.map +1 -0
- package/dist/ir/converters/expressions/access.js +85 -0
- package/dist/ir/converters/expressions/access.js.map +1 -0
- package/dist/ir/converters/expressions/calls.d.ts +14 -0
- package/dist/ir/converters/expressions/calls.d.ts.map +1 -0
- package/dist/ir/converters/expressions/calls.js +104 -0
- package/dist/ir/converters/expressions/calls.js.map +1 -0
- package/dist/ir/converters/expressions/collections.d.ts +14 -0
- package/dist/ir/converters/expressions/collections.d.ts.map +1 -0
- package/dist/ir/converters/expressions/collections.js +70 -0
- package/dist/ir/converters/expressions/collections.js.map +1 -0
- package/dist/ir/converters/expressions/functions.d.ts +14 -0
- package/dist/ir/converters/expressions/functions.d.ts.map +1 -0
- package/dist/ir/converters/expressions/functions.js +42 -0
- package/dist/ir/converters/expressions/functions.js.map +1 -0
- package/dist/ir/converters/expressions/helpers.d.ts +43 -0
- package/dist/ir/converters/expressions/helpers.d.ts.map +1 -0
- package/dist/ir/converters/expressions/helpers.js +210 -0
- package/dist/ir/converters/expressions/helpers.js.map +1 -0
- package/dist/ir/converters/expressions/index.d.ts +12 -0
- package/dist/ir/converters/expressions/index.d.ts.map +1 -0
- package/dist/ir/converters/expressions/index.js +20 -0
- package/dist/ir/converters/expressions/index.js.map +1 -0
- package/dist/ir/converters/expressions/literals.d.ts +10 -0
- package/dist/ir/converters/expressions/literals.d.ts.map +1 -0
- package/dist/ir/converters/expressions/literals.js +17 -0
- package/dist/ir/converters/expressions/literals.js.map +1 -0
- package/dist/ir/converters/expressions/operators.d.ts +18 -0
- package/dist/ir/converters/expressions/operators.d.ts.map +1 -0
- package/dist/ir/converters/expressions/operators.js +111 -0
- package/dist/ir/converters/expressions/operators.js.map +1 -0
- package/dist/ir/converters/expressions/other.d.ts +14 -0
- package/dist/ir/converters/expressions/other.d.ts.map +1 -0
- package/dist/ir/converters/expressions/other.js +44 -0
- package/dist/ir/converters/expressions/other.js.map +1 -0
- package/dist/ir/converters/statements/control/blocks.d.ts +10 -0
- package/dist/ir/converters/statements/control/blocks.d.ts.map +1 -0
- package/dist/ir/converters/statements/control/blocks.js +16 -0
- package/dist/ir/converters/statements/control/blocks.js.map +1 -0
- package/dist/ir/converters/statements/control/conditionals.d.ts +18 -0
- package/dist/ir/converters/statements/control/conditionals.d.ts.map +1 -0
- package/dist/ir/converters/statements/control/conditionals.js +46 -0
- package/dist/ir/converters/statements/control/conditionals.js.map +1 -0
- package/dist/ir/converters/statements/control/exceptions.d.ts +14 -0
- package/dist/ir/converters/statements/control/exceptions.d.ts.map +1 -0
- package/dist/ir/converters/statements/control/exceptions.js +33 -0
- package/dist/ir/converters/statements/control/exceptions.js.map +1 -0
- package/dist/ir/converters/statements/control/index.d.ts +8 -0
- package/dist/ir/converters/statements/control/index.d.ts.map +1 -0
- package/dist/ir/converters/statements/control/index.js +8 -0
- package/dist/ir/converters/statements/control/index.js.map +1 -0
- package/dist/ir/converters/statements/control/loops.d.ts +22 -0
- package/dist/ir/converters/statements/control/loops.d.ts.map +1 -0
- package/dist/ir/converters/statements/control/loops.js +75 -0
- package/dist/ir/converters/statements/control/loops.js.map +1 -0
- package/dist/ir/converters/statements/control.d.ts +6 -0
- package/dist/ir/converters/statements/control.d.ts.map +1 -0
- package/dist/ir/converters/statements/control.js +6 -0
- package/dist/ir/converters/statements/control.js.map +1 -0
- package/dist/ir/converters/statements/declarations/classes/constructors.d.ts +14 -0
- package/dist/ir/converters/statements/declarations/classes/constructors.d.ts.map +1 -0
- package/dist/ir/converters/statements/declarations/classes/constructors.js +91 -0
- package/dist/ir/converters/statements/declarations/classes/constructors.js.map +1 -0
- package/{src/ir/converters/statements/declarations/classes/index.ts → dist/ir/converters/statements/declarations/classes/index.d.ts} +2 -5
- package/dist/ir/converters/statements/declarations/classes/index.d.ts.map +1 -0
- package/dist/ir/converters/statements/declarations/classes/index.js +9 -0
- package/dist/ir/converters/statements/declarations/classes/index.js.map +1 -0
- package/dist/ir/converters/statements/declarations/classes/methods.d.ts +10 -0
- package/dist/ir/converters/statements/declarations/classes/methods.d.ts.map +1 -0
- package/dist/ir/converters/statements/declarations/classes/methods.js +39 -0
- package/dist/ir/converters/statements/declarations/classes/methods.js.map +1 -0
- package/dist/ir/converters/statements/declarations/classes/orchestrator.d.ts +10 -0
- package/dist/ir/converters/statements/declarations/classes/orchestrator.d.ts.map +1 -0
- package/dist/ir/converters/statements/declarations/classes/orchestrator.js +123 -0
- package/dist/ir/converters/statements/declarations/classes/orchestrator.js.map +1 -0
- package/dist/ir/converters/statements/declarations/classes/override-detection.d.ts +13 -0
- package/dist/ir/converters/statements/declarations/classes/override-detection.d.ts.map +1 -0
- package/dist/ir/converters/statements/declarations/classes/override-detection.js +79 -0
- package/dist/ir/converters/statements/declarations/classes/override-detection.js.map +1 -0
- package/dist/ir/converters/statements/declarations/classes/properties.d.ts +10 -0
- package/dist/ir/converters/statements/declarations/classes/properties.d.ts.map +1 -0
- package/dist/ir/converters/statements/declarations/classes/properties.js +42 -0
- package/dist/ir/converters/statements/declarations/classes/properties.js.map +1 -0
- package/dist/ir/converters/statements/declarations/classes.d.ts +6 -0
- package/dist/ir/converters/statements/declarations/classes.d.ts.map +1 -0
- package/{src/ir/converters/statements/declarations/classes.ts → dist/ir/converters/statements/declarations/classes.js} +1 -1
- package/dist/ir/converters/statements/declarations/classes.js.map +1 -0
- package/dist/ir/converters/statements/declarations/enums.d.ts +10 -0
- package/dist/ir/converters/statements/declarations/enums.d.ts.map +1 -0
- package/dist/ir/converters/statements/declarations/enums.js +24 -0
- package/dist/ir/converters/statements/declarations/enums.js.map +1 -0
- package/dist/ir/converters/statements/declarations/functions.d.ts +10 -0
- package/dist/ir/converters/statements/declarations/functions.d.ts.map +1 -0
- package/dist/ir/converters/statements/declarations/functions.js +28 -0
- package/dist/ir/converters/statements/declarations/functions.js.map +1 -0
- package/dist/ir/converters/statements/declarations/index.d.ts +11 -0
- package/dist/ir/converters/statements/declarations/index.d.ts.map +1 -0
- package/{src/ir/converters/statements/declarations/index.ts → dist/ir/converters/statements/declarations/index.js} +2 -5
- package/dist/ir/converters/statements/declarations/index.js.map +1 -0
- package/dist/ir/converters/statements/declarations/interfaces.d.ts +15 -0
- package/dist/ir/converters/statements/declarations/interfaces.d.ts.map +1 -0
- package/dist/ir/converters/statements/declarations/interfaces.js +96 -0
- package/dist/ir/converters/statements/declarations/interfaces.js.map +1 -0
- package/dist/ir/converters/statements/declarations/registry.d.ts +24 -0
- package/dist/ir/converters/statements/declarations/registry.d.ts.map +1 -0
- package/{src/ir/converters/statements/declarations/registry.ts → dist/ir/converters/statements/declarations/registry.js} +9 -16
- package/dist/ir/converters/statements/declarations/registry.js.map +1 -0
- package/dist/ir/converters/statements/declarations/type-aliases.d.ts +10 -0
- package/dist/ir/converters/statements/declarations/type-aliases.d.ts.map +1 -0
- package/dist/ir/converters/statements/declarations/type-aliases.js +19 -0
- package/dist/ir/converters/statements/declarations/type-aliases.js.map +1 -0
- package/dist/ir/converters/statements/declarations/variables.d.ts +10 -0
- package/dist/ir/converters/statements/declarations/variables.d.ts.map +1 -0
- package/dist/ir/converters/statements/declarations/variables.js +45 -0
- package/dist/ir/converters/statements/declarations/variables.js.map +1 -0
- package/dist/ir/converters/statements/declarations.d.ts +6 -0
- package/dist/ir/converters/statements/declarations.d.ts.map +1 -0
- package/dist/ir/converters/statements/declarations.js +6 -0
- package/dist/ir/converters/statements/declarations.js.map +1 -0
- package/dist/ir/converters/statements/helpers.d.ts +34 -0
- package/dist/ir/converters/statements/helpers.d.ts.map +1 -0
- package/dist/ir/converters/statements/helpers.js +137 -0
- package/dist/ir/converters/statements/helpers.js.map +1 -0
- package/dist/ir/converters/statements/index.d.ts +7 -0
- package/dist/ir/converters/statements/index.d.ts.map +1 -0
- package/dist/ir/converters/statements/index.js +10 -0
- package/dist/ir/converters/statements/index.js.map +1 -0
- package/dist/ir/expression-converter.d.ts +13 -0
- package/dist/ir/expression-converter.d.ts.map +1 -0
- package/dist/ir/expression-converter.js +167 -0
- package/dist/ir/expression-converter.js.map +1 -0
- package/dist/ir/generic-validator.d.ts +38 -0
- package/dist/ir/generic-validator.d.ts.map +1 -0
- package/dist/ir/generic-validator.js +69 -0
- package/dist/ir/generic-validator.js.map +1 -0
- package/dist/ir/hierarchical-bindings-e2e.test.d.ts +6 -0
- package/dist/ir/hierarchical-bindings-e2e.test.d.ts.map +1 -0
- package/dist/ir/hierarchical-bindings-e2e.test.js +124 -0
- package/dist/ir/hierarchical-bindings-e2e.test.js.map +1 -0
- package/{src/ir/index.ts → dist/ir/index.d.ts} +1 -1
- package/dist/ir/index.d.ts.map +1 -0
- package/dist/ir/index.js +6 -0
- package/dist/ir/index.js.map +1 -0
- package/dist/ir/statement-converter.d.ts +14 -0
- package/dist/ir/statement-converter.d.ts.map +1 -0
- package/dist/ir/statement-converter.js +100 -0
- package/dist/ir/statement-converter.js.map +1 -0
- package/dist/ir/type-converter/arrays.d.ts +10 -0
- package/dist/ir/type-converter/arrays.d.ts.map +1 -0
- package/dist/ir/type-converter/arrays.js +13 -0
- package/dist/ir/type-converter/arrays.js.map +1 -0
- package/dist/ir/type-converter/clr-type-resolver.d.ts +15 -0
- package/dist/ir/type-converter/clr-type-resolver.d.ts.map +1 -0
- package/dist/ir/type-converter/clr-type-resolver.js +120 -0
- package/dist/ir/type-converter/clr-type-resolver.js.map +1 -0
- package/dist/ir/type-converter/converter.d.ts +6 -0
- package/dist/ir/type-converter/converter.d.ts.map +1 -0
- package/dist/ir/type-converter/converter.js +6 -0
- package/dist/ir/type-converter/converter.js.map +1 -0
- package/dist/ir/type-converter/functions.d.ts +10 -0
- package/dist/ir/type-converter/functions.d.ts.map +1 -0
- package/dist/ir/type-converter/functions.js +15 -0
- package/dist/ir/type-converter/functions.js.map +1 -0
- package/dist/ir/type-converter/index.d.ts +7 -0
- package/dist/ir/type-converter/index.d.ts.map +1 -0
- package/{src/ir/type-converter/index.ts → dist/ir/type-converter/index.js} +2 -6
- package/dist/ir/type-converter/index.js.map +1 -0
- package/dist/ir/type-converter/inference.d.ts +20 -0
- package/dist/ir/type-converter/inference.d.ts.map +1 -0
- package/dist/ir/type-converter/inference.js +104 -0
- package/dist/ir/type-converter/inference.js.map +1 -0
- package/dist/ir/type-converter/literals.d.ts +10 -0
- package/dist/ir/type-converter/literals.d.ts.map +1 -0
- package/dist/ir/type-converter/literals.js +31 -0
- package/dist/ir/type-converter/literals.js.map +1 -0
- package/dist/ir/type-converter/objects.d.ts +16 -0
- package/dist/ir/type-converter/objects.d.ts.map +1 -0
- package/dist/ir/type-converter/objects.js +81 -0
- package/dist/ir/type-converter/objects.js.map +1 -0
- package/dist/ir/type-converter/orchestrator.d.ts +13 -0
- package/dist/ir/type-converter/orchestrator.d.ts.map +1 -0
- package/dist/ir/type-converter/orchestrator.js +59 -0
- package/dist/ir/type-converter/orchestrator.js.map +1 -0
- package/dist/ir/type-converter/patterns.d.ts +10 -0
- package/dist/ir/type-converter/patterns.d.ts.map +1 -0
- package/dist/ir/type-converter/patterns.js +66 -0
- package/dist/ir/type-converter/patterns.js.map +1 -0
- package/dist/ir/type-converter/primitives.d.ts +18 -0
- package/dist/ir/type-converter/primitives.d.ts.map +1 -0
- package/dist/ir/type-converter/primitives.js +47 -0
- package/dist/ir/type-converter/primitives.js.map +1 -0
- package/dist/ir/type-converter/references.d.ts +11 -0
- package/dist/ir/type-converter/references.d.ts.map +1 -0
- package/dist/ir/type-converter/references.js +51 -0
- package/dist/ir/type-converter/references.js.map +1 -0
- package/dist/ir/type-converter/unions-intersections.d.ts +14 -0
- package/dist/ir/type-converter/unions-intersections.d.ts.map +1 -0
- package/dist/ir/type-converter/unions-intersections.js +22 -0
- package/dist/ir/type-converter/unions-intersections.js.map +1 -0
- package/dist/ir/type-converter.d.ts +6 -0
- package/dist/ir/type-converter.d.ts.map +1 -0
- package/dist/ir/type-converter.js +6 -0
- package/dist/ir/type-converter.js.map +1 -0
- package/dist/ir/types/expressions.d.ts +164 -0
- package/dist/ir/types/expressions.d.ts.map +1 -0
- package/dist/ir/types/expressions.js +5 -0
- package/dist/ir/types/expressions.js.map +1 -0
- package/dist/ir/types/guards.d.ts +8 -0
- package/dist/ir/types/guards.d.ts.map +1 -0
- package/dist/ir/types/guards.js +31 -0
- package/dist/ir/types/guards.js.map +1 -0
- package/dist/ir/types/helpers.d.ts +65 -0
- package/dist/ir/types/helpers.d.ts.map +1 -0
- package/dist/ir/types/helpers.js +5 -0
- package/dist/ir/types/helpers.js.map +1 -0
- package/dist/ir/types/index.d.ts +11 -0
- package/dist/ir/types/index.d.ts.map +1 -0
- package/dist/ir/types/index.js +7 -0
- package/dist/ir/types/index.js.map +1 -0
- package/dist/ir/types/ir-types.d.ts +69 -0
- package/dist/ir/types/ir-types.d.ts.map +1 -0
- package/dist/ir/types/ir-types.js +5 -0
- package/dist/ir/types/ir-types.js.map +1 -0
- package/dist/ir/types/module.d.ts +56 -0
- package/dist/ir/types/module.d.ts.map +1 -0
- package/dist/ir/types/module.js +5 -0
- package/dist/ir/types/module.js.map +1 -0
- package/dist/ir/types/statements.d.ts +182 -0
- package/dist/ir/types/statements.d.ts.map +1 -0
- package/dist/ir/types/statements.js +5 -0
- package/dist/ir/types/statements.js.map +1 -0
- package/dist/ir/types.d.ts +7 -0
- package/dist/ir/types.d.ts.map +1 -0
- package/dist/ir/types.js +7 -0
- package/dist/ir/types.js.map +1 -0
- package/dist/metadata/bindings-loader.d.ts +41 -0
- package/dist/metadata/bindings-loader.d.ts.map +1 -0
- package/dist/metadata/bindings-loader.js +308 -0
- package/dist/metadata/bindings-loader.js.map +1 -0
- package/dist/metadata/bindings-loader.test.d.ts +5 -0
- package/dist/metadata/bindings-loader.test.d.ts.map +1 -0
- package/dist/metadata/bindings-loader.test.js +117 -0
- package/dist/metadata/bindings-loader.test.js.map +1 -0
- package/{src/metadata/index.ts → dist/metadata/index.d.ts} +2 -9
- package/dist/metadata/index.d.ts.map +1 -0
- package/dist/metadata/index.js +7 -0
- package/dist/metadata/index.js.map +1 -0
- package/dist/metadata/library-loader.d.ts +42 -0
- package/dist/metadata/library-loader.d.ts.map +1 -0
- package/dist/metadata/library-loader.js +126 -0
- package/dist/metadata/library-loader.js.map +1 -0
- package/dist/metadata/loader.d.ts +26 -0
- package/dist/metadata/loader.d.ts.map +1 -0
- package/dist/metadata/loader.js +333 -0
- package/dist/metadata/loader.js.map +1 -0
- package/dist/metadata/loader.test.d.ts +5 -0
- package/dist/metadata/loader.test.d.ts.map +1 -0
- package/dist/metadata/loader.test.js +119 -0
- package/dist/metadata/loader.test.js.map +1 -0
- package/dist/program/bindings.d.ts +111 -0
- package/dist/program/bindings.d.ts.map +1 -0
- package/dist/program/bindings.js +167 -0
- package/dist/program/bindings.js.map +1 -0
- package/dist/program/bindings.test.d.ts +5 -0
- package/dist/program/bindings.test.d.ts.map +1 -0
- package/dist/program/bindings.test.js +435 -0
- package/dist/program/bindings.test.js.map +1 -0
- package/dist/program/config.d.ts +9 -0
- package/dist/program/config.d.ts.map +1 -0
- package/dist/program/config.js +29 -0
- package/dist/program/config.js.map +1 -0
- package/dist/program/creation.d.ts +17 -0
- package/dist/program/creation.d.ts.map +1 -0
- package/dist/program/creation.js +180 -0
- package/dist/program/creation.js.map +1 -0
- package/dist/program/dependency-graph.d.ts +19 -0
- package/dist/program/dependency-graph.d.ts.map +1 -0
- package/dist/program/dependency-graph.js +166 -0
- package/dist/program/dependency-graph.js.map +1 -0
- package/dist/program/diagnostics.d.ts +23 -0
- package/dist/program/diagnostics.d.ts.map +1 -0
- package/dist/program/diagnostics.js +65 -0
- package/dist/program/diagnostics.js.map +1 -0
- package/{src/program/index.ts → dist/program/index.d.ts} +3 -10
- package/dist/program/index.d.ts.map +1 -0
- package/dist/program/index.js +11 -0
- package/dist/program/index.js.map +1 -0
- package/dist/program/metadata.d.ts +10 -0
- package/dist/program/metadata.d.ts.map +1 -0
- package/dist/program/metadata.js +56 -0
- package/dist/program/metadata.js.map +1 -0
- package/dist/program/queries.d.ts +10 -0
- package/dist/program/queries.d.ts.map +1 -0
- package/dist/program/queries.js +12 -0
- package/dist/program/queries.js.map +1 -0
- package/dist/program/types.d.ts +35 -0
- package/dist/program/types.d.ts.map +1 -0
- package/dist/program/types.js +5 -0
- package/dist/program/types.js.map +1 -0
- package/{src/program.ts → dist/program.d.ts} +2 -7
- package/dist/program.d.ts.map +1 -0
- package/dist/program.js +6 -0
- package/dist/program.js.map +1 -0
- package/dist/resolver/dotnet-import-resolver.d.ts +74 -0
- package/dist/resolver/dotnet-import-resolver.d.ts.map +1 -0
- package/dist/resolver/dotnet-import-resolver.js +183 -0
- package/dist/resolver/dotnet-import-resolver.js.map +1 -0
- package/dist/resolver/import-resolution.d.ts +20 -0
- package/dist/resolver/import-resolution.d.ts.map +1 -0
- package/dist/resolver/import-resolution.js +102 -0
- package/dist/resolver/import-resolution.js.map +1 -0
- package/dist/resolver/index.d.ts +10 -0
- package/dist/resolver/index.d.ts.map +1 -0
- package/dist/resolver/index.js +9 -0
- package/dist/resolver/index.js.map +1 -0
- package/dist/resolver/namespace.d.ts +20 -0
- package/dist/resolver/namespace.d.ts.map +1 -0
- package/dist/resolver/namespace.js +35 -0
- package/dist/resolver/namespace.js.map +1 -0
- package/dist/resolver/namespace.test.d.ts +2 -0
- package/dist/resolver/namespace.test.d.ts.map +1 -0
- package/dist/resolver/namespace.test.js +42 -0
- package/dist/resolver/namespace.test.js.map +1 -0
- package/dist/resolver/naming.d.ts +12 -0
- package/dist/resolver/naming.d.ts.map +1 -0
- package/dist/resolver/naming.js +30 -0
- package/dist/resolver/naming.js.map +1 -0
- package/dist/resolver/path-resolution.d.ts +8 -0
- package/dist/resolver/path-resolution.d.ts.map +1 -0
- package/dist/resolver/path-resolution.js +16 -0
- package/dist/resolver/path-resolution.js.map +1 -0
- package/dist/resolver/types.d.ts +13 -0
- package/dist/resolver/types.d.ts.map +1 -0
- package/dist/resolver/types.js +5 -0
- package/dist/resolver/types.js.map +1 -0
- package/dist/resolver.d.ts +7 -0
- package/dist/resolver.d.ts.map +1 -0
- package/dist/resolver.js +6 -0
- package/dist/resolver.js.map +1 -0
- package/dist/resolver.test.d.ts +5 -0
- package/dist/resolver.test.d.ts.map +1 -0
- package/dist/resolver.test.js +93 -0
- package/dist/resolver.test.js.map +1 -0
- package/dist/symbol-table/builder.d.ts +10 -0
- package/dist/symbol-table/builder.d.ts.map +1 -0
- package/dist/symbol-table/builder.js +105 -0
- package/dist/symbol-table/builder.js.map +1 -0
- package/dist/symbol-table/creation.d.ts +13 -0
- package/dist/symbol-table/creation.d.ts.map +1 -0
- package/dist/symbol-table/creation.js +36 -0
- package/dist/symbol-table/creation.js.map +1 -0
- package/dist/symbol-table/helpers.d.ts +9 -0
- package/dist/symbol-table/helpers.d.ts.map +1 -0
- package/dist/symbol-table/helpers.js +15 -0
- package/dist/symbol-table/helpers.js.map +1 -0
- package/{src/symbol-table/index.ts → dist/symbol-table/index.d.ts} +2 -6
- package/dist/symbol-table/index.d.ts.map +1 -0
- package/dist/symbol-table/index.js +8 -0
- package/dist/symbol-table/index.js.map +1 -0
- package/dist/symbol-table/queries.d.ts +17 -0
- package/dist/symbol-table/queries.d.ts.map +1 -0
- package/dist/symbol-table/queries.js +27 -0
- package/dist/symbol-table/queries.js.map +1 -0
- package/dist/symbol-table/types.d.ts +18 -0
- package/dist/symbol-table/types.d.ts.map +1 -0
- package/dist/symbol-table/types.js +5 -0
- package/dist/symbol-table/types.js.map +1 -0
- package/{src/symbol-table.ts → dist/symbol-table.d.ts} +2 -9
- package/dist/symbol-table.d.ts.map +1 -0
- package/dist/symbol-table.js +6 -0
- package/dist/symbol-table.js.map +1 -0
- package/dist/types/bindings.d.ts +153 -0
- package/dist/types/bindings.d.ts.map +1 -0
- package/dist/types/bindings.js +14 -0
- package/dist/types/bindings.js.map +1 -0
- package/dist/types/diagnostic.d.ts +30 -0
- package/dist/types/diagnostic.d.ts.map +1 -0
- package/dist/types/diagnostic.js +37 -0
- package/dist/types/diagnostic.js.map +1 -0
- package/dist/types/diagnostic.test.d.ts +5 -0
- package/dist/types/diagnostic.test.d.ts.map +1 -0
- package/dist/types/diagnostic.test.js +94 -0
- package/dist/types/diagnostic.test.js.map +1 -0
- package/dist/types/explicit-views.d.ts +97 -0
- package/dist/types/explicit-views.d.ts.map +1 -0
- package/dist/types/explicit-views.js +163 -0
- package/dist/types/explicit-views.js.map +1 -0
- package/dist/types/explicit-views.test.d.ts +5 -0
- package/dist/types/explicit-views.test.d.ts.map +1 -0
- package/dist/types/explicit-views.test.js +67 -0
- package/dist/types/explicit-views.test.js.map +1 -0
- package/dist/types/metadata.d.ts +196 -0
- package/dist/types/metadata.d.ts.map +1 -0
- package/dist/types/metadata.js +10 -0
- package/dist/types/metadata.js.map +1 -0
- package/dist/types/module.d.ts +51 -0
- package/dist/types/module.d.ts.map +1 -0
- package/dist/types/module.js +28 -0
- package/dist/types/module.js.map +1 -0
- package/dist/types/nested-types.d.ts +111 -0
- package/dist/types/nested-types.d.ts.map +1 -0
- package/dist/types/nested-types.js +176 -0
- package/dist/types/nested-types.js.map +1 -0
- package/dist/types/nested-types.test.d.ts +5 -0
- package/dist/types/nested-types.test.d.ts.map +1 -0
- package/dist/types/nested-types.test.js +135 -0
- package/dist/types/nested-types.test.js.map +1 -0
- package/dist/types/parameter-modifiers.d.ts +55 -0
- package/dist/types/parameter-modifiers.d.ts.map +1 -0
- package/dist/types/parameter-modifiers.js +144 -0
- package/dist/types/parameter-modifiers.js.map +1 -0
- package/dist/types/ref-parameters.d.ts +123 -0
- package/dist/types/ref-parameters.d.ts.map +1 -0
- package/dist/types/ref-parameters.js +203 -0
- package/dist/types/ref-parameters.js.map +1 -0
- package/dist/types/ref-parameters.test.d.ts +5 -0
- package/dist/types/ref-parameters.test.d.ts.map +1 -0
- package/dist/types/ref-parameters.test.js +147 -0
- package/dist/types/ref-parameters.test.js.map +1 -0
- package/dist/types/result.d.ts +26 -0
- package/dist/types/result.d.ts.map +1 -0
- package/dist/types/result.js +19 -0
- package/dist/types/result.js.map +1 -0
- package/dist/types/result.test.d.ts +5 -0
- package/dist/types/result.test.d.ts.map +1 -0
- package/dist/types/result.test.js +121 -0
- package/dist/types/result.test.js.map +1 -0
- package/dist/types/support-types.d.ts +103 -0
- package/dist/types/support-types.d.ts.map +1 -0
- package/dist/types/support-types.js +220 -0
- package/dist/types/support-types.js.map +1 -0
- package/dist/types/support-types.test.d.ts +5 -0
- package/dist/types/support-types.test.d.ts.map +1 -0
- package/dist/types/support-types.test.js +50 -0
- package/dist/types/support-types.test.js.map +1 -0
- package/dist/types/test-debug.d.ts.map +1 -0
- package/dist/types/test-debug.js.map +1 -0
- package/dist/types/test-harness.d.ts +34 -0
- package/dist/types/test-harness.d.ts.map +1 -0
- package/dist/types/test-harness.js +127 -0
- package/dist/types/test-harness.js.map +1 -0
- package/dist/validation/aot-safety.d.ts +24 -0
- package/dist/validation/aot-safety.d.ts.map +1 -0
- package/dist/validation/aot-safety.js +114 -0
- package/dist/validation/aot-safety.js.map +1 -0
- package/dist/validation/exports.d.ts +11 -0
- package/dist/validation/exports.d.ts.map +1 -0
- package/dist/validation/exports.js +56 -0
- package/dist/validation/exports.js.map +1 -0
- package/dist/validation/features.d.ts +11 -0
- package/dist/validation/features.d.ts.map +1 -0
- package/dist/validation/features.js +36 -0
- package/dist/validation/features.js.map +1 -0
- package/dist/validation/generics.d.ts +11 -0
- package/dist/validation/generics.d.ts.map +1 -0
- package/dist/validation/generics.js +31 -0
- package/dist/validation/generics.js.map +1 -0
- package/dist/validation/helpers.d.ts +15 -0
- package/dist/validation/helpers.d.ts.map +1 -0
- package/dist/validation/helpers.js +18 -0
- package/dist/validation/helpers.js.map +1 -0
- package/dist/validation/imports.d.ts +15 -0
- package/dist/validation/imports.d.ts.map +1 -0
- package/dist/validation/imports.js +42 -0
- package/dist/validation/imports.js.map +1 -0
- package/dist/validation/index.d.ts +11 -0
- package/dist/validation/index.d.ts.map +1 -0
- package/{src/validation/index.ts → dist/validation/index.js} +1 -1
- package/dist/validation/index.js.map +1 -0
- package/dist/validation/orchestrator.d.ts +15 -0
- package/dist/validation/orchestrator.d.ts.map +1 -0
- package/dist/validation/orchestrator.js +30 -0
- package/dist/validation/orchestrator.js.map +1 -0
- package/dist/validation/static-safety.d.ts +23 -0
- package/dist/validation/static-safety.d.ts.map +1 -0
- package/dist/validation/static-safety.js +165 -0
- package/dist/validation/static-safety.js.map +1 -0
- package/dist/validator.d.ts +6 -0
- package/dist/validator.d.ts.map +1 -0
- package/dist/validator.js +6 -0
- package/dist/validator.js.map +1 -0
- package/dist/validator.test.d.ts +11 -0
- package/dist/validator.test.d.ts.map +1 -0
- package/dist/validator.test.js +340 -0
- package/dist/validator.test.js.map +1 -0
- package/package.json +4 -1
- package/src/dotnet-metadata.ts +0 -121
- package/src/graph/builder.ts +0 -81
- package/src/graph/circular.ts +0 -58
- package/src/graph/extraction/exports.ts +0 -55
- package/src/graph/extraction/imports.ts +0 -81
- package/src/graph/extraction/orchestrator.ts +0 -99
- package/src/graph/helpers.ts +0 -51
- package/src/index.ts +0 -80
- package/src/ir/binding-resolution.test.ts +0 -585
- package/src/ir/builder/exports.ts +0 -78
- package/src/ir/builder/helpers.ts +0 -27
- package/src/ir/builder/imports.ts +0 -153
- package/src/ir/builder/orchestrator.ts +0 -178
- package/src/ir/builder/statements.ts +0 -55
- package/src/ir/builder/types.ts +0 -8
- package/src/ir/builder/validation.ts +0 -129
- package/src/ir/builder.test.ts +0 -581
- package/src/ir/converters/expressions/access.ts +0 -99
- package/src/ir/converters/expressions/calls.ts +0 -137
- package/src/ir/converters/expressions/collections.ts +0 -84
- package/src/ir/converters/expressions/functions.ts +0 -62
- package/src/ir/converters/expressions/helpers.ts +0 -264
- package/src/ir/converters/expressions/index.ts +0 -43
- package/src/ir/converters/expressions/literals.ts +0 -22
- package/src/ir/converters/expressions/operators.ts +0 -147
- package/src/ir/converters/expressions/other.ts +0 -60
- package/src/ir/converters/statements/control/blocks.ts +0 -22
- package/src/ir/converters/statements/control/conditionals.ts +0 -67
- package/src/ir/converters/statements/control/exceptions.ts +0 -43
- package/src/ir/converters/statements/control/index.ts +0 -17
- package/src/ir/converters/statements/control/loops.ts +0 -99
- package/src/ir/converters/statements/control.ts +0 -17
- package/src/ir/converters/statements/declarations/classes/constructors.ts +0 -120
- package/src/ir/converters/statements/declarations/classes/methods.ts +0 -61
- package/src/ir/converters/statements/declarations/classes/orchestrator.ts +0 -166
- package/src/ir/converters/statements/declarations/classes/override-detection.ts +0 -116
- package/src/ir/converters/statements/declarations/classes/properties.ts +0 -63
- package/src/ir/converters/statements/declarations/enums.ts +0 -29
- package/src/ir/converters/statements/declarations/functions.ts +0 -39
- package/src/ir/converters/statements/declarations/interfaces.ts +0 -131
- package/src/ir/converters/statements/declarations/type-aliases.ts +0 -25
- package/src/ir/converters/statements/declarations/variables.ts +0 -60
- package/src/ir/converters/statements/declarations.ts +0 -16
- package/src/ir/converters/statements/helpers.ts +0 -174
- package/src/ir/converters/statements/index.ts +0 -40
- package/src/ir/expression-converter.ts +0 -207
- package/src/ir/generic-validator.ts +0 -100
- package/src/ir/hierarchical-bindings-e2e.test.ts +0 -163
- package/src/ir/statement-converter.ts +0 -128
- package/src/ir/type-converter/arrays.ts +0 -20
- package/src/ir/type-converter/converter.ts +0 -10
- package/src/ir/type-converter/functions.ts +0 -22
- package/src/ir/type-converter/inference.ts +0 -122
- package/src/ir/type-converter/literals.ts +0 -40
- package/src/ir/type-converter/objects.ts +0 -107
- package/src/ir/type-converter/orchestrator.ts +0 -85
- package/src/ir/type-converter/patterns.ts +0 -73
- package/src/ir/type-converter/primitives.ts +0 -57
- package/src/ir/type-converter/references.ts +0 -64
- package/src/ir/type-converter/unions-intersections.ts +0 -34
- package/src/ir/type-converter.ts +0 -13
- package/src/ir/types/expressions.ts +0 -215
- package/src/ir/types/guards.ts +0 -39
- package/src/ir/types/helpers.ts +0 -135
- package/src/ir/types/index.ts +0 -108
- package/src/ir/types/ir-types.ts +0 -96
- package/src/ir/types/module.ts +0 -57
- package/src/ir/types/statements.ts +0 -238
- package/src/ir/types.ts +0 -97
- package/src/metadata/bindings-loader.test.ts +0 -144
- package/src/metadata/bindings-loader.ts +0 -357
- package/src/metadata/library-loader.ts +0 -153
- package/src/metadata/loader.test.ts +0 -156
- package/src/metadata/loader.ts +0 -382
- package/src/program/bindings.test.ts +0 -512
- package/src/program/bindings.ts +0 -253
- package/src/program/config.ts +0 -30
- package/src/program/creation.ts +0 -249
- package/src/program/dependency-graph.ts +0 -245
- package/src/program/diagnostics.ts +0 -103
- package/src/program/metadata.ts +0 -68
- package/src/program/queries.ts +0 -18
- package/src/program/types.ts +0 -38
- package/src/resolver/dotnet-import-resolver.ts +0 -226
- package/src/resolver/import-resolution.ts +0 -177
- package/src/resolver/index.ts +0 -18
- package/src/resolver/namespace.test.ts +0 -86
- package/src/resolver/namespace.ts +0 -42
- package/src/resolver/naming.ts +0 -38
- package/src/resolver/path-resolution.ts +0 -22
- package/src/resolver/types.ts +0 -15
- package/src/resolver.test.ts +0 -155
- package/src/resolver.ts +0 -14
- package/src/symbol-table/builder.ts +0 -114
- package/src/symbol-table/creation.ts +0 -42
- package/src/symbol-table/helpers.ts +0 -18
- package/src/symbol-table/queries.ts +0 -42
- package/src/symbol-table/types.ts +0 -28
- package/src/types/bindings.ts +0 -172
- package/src/types/diagnostic.test.ts +0 -164
- package/src/types/diagnostic.ts +0 -153
- package/src/types/explicit-views.test.ts +0 -113
- package/src/types/explicit-views.ts +0 -218
- package/src/types/metadata.ts +0 -229
- package/src/types/module.ts +0 -99
- package/src/types/nested-types.test.ts +0 -194
- package/src/types/nested-types.ts +0 -215
- package/src/types/parameter-modifiers.ts +0 -173
- package/src/types/ref-parameters.test.ts +0 -192
- package/src/types/ref-parameters.ts +0 -268
- package/src/types/result.test.ts +0 -157
- package/src/types/result.ts +0 -48
- package/src/types/support-types.test.ts +0 -81
- package/src/types/support-types.ts +0 -288
- package/src/types/test-harness.ts +0 -180
- package/src/validation/exports.ts +0 -98
- package/src/validation/features.ts +0 -89
- package/src/validation/generics.ts +0 -40
- package/src/validation/helpers.ts +0 -31
- package/src/validation/imports.ts +0 -97
- package/src/validation/orchestrator.ts +0 -51
- package/src/validation/static-safety.ts +0 -267
- package/src/validator.test.ts +0 -468
- package/src/validator.ts +0 -15
- package/tsconfig.json +0 -13
|
@@ -1,245 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Dependency graph builder - Multi-file compilation
|
|
3
|
-
* Traverses local imports using ts.resolveModuleName()
|
|
4
|
-
*/
|
|
5
|
-
|
|
6
|
-
import * as ts from "typescript";
|
|
7
|
-
import { relative, resolve } from "path";
|
|
8
|
-
import { Result, ok, error } from "../types/result.js";
|
|
9
|
-
import { Diagnostic, createDiagnostic } from "../types/diagnostic.js";
|
|
10
|
-
import { IrModule } from "../ir/types.js";
|
|
11
|
-
import { buildIrModule } from "../ir/builder/orchestrator.js";
|
|
12
|
-
import { createProgram, createCompilerOptions } from "./creation.js";
|
|
13
|
-
import { CompilerOptions } from "./types.js";
|
|
14
|
-
|
|
15
|
-
export type ModuleDependencyGraphResult = {
|
|
16
|
-
readonly modules: readonly IrModule[];
|
|
17
|
-
readonly entryModule: IrModule;
|
|
18
|
-
};
|
|
19
|
-
|
|
20
|
-
/**
|
|
21
|
-
* Extract module specifier from import or re-export declaration
|
|
22
|
-
* Returns the module specifier string literal, or null if not applicable
|
|
23
|
-
*/
|
|
24
|
-
const getModuleSpecifier = (stmt: ts.Statement): ts.StringLiteral | null => {
|
|
25
|
-
// Handle: import { x } from "./module"
|
|
26
|
-
if (
|
|
27
|
-
ts.isImportDeclaration(stmt) &&
|
|
28
|
-
ts.isStringLiteral(stmt.moduleSpecifier)
|
|
29
|
-
) {
|
|
30
|
-
return stmt.moduleSpecifier;
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
// Handle: export { x } from "./module" (re-exports)
|
|
34
|
-
if (
|
|
35
|
-
ts.isExportDeclaration(stmt) &&
|
|
36
|
-
stmt.moduleSpecifier &&
|
|
37
|
-
ts.isStringLiteral(stmt.moduleSpecifier)
|
|
38
|
-
) {
|
|
39
|
-
return stmt.moduleSpecifier;
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
return null;
|
|
43
|
-
};
|
|
44
|
-
|
|
45
|
-
/**
|
|
46
|
-
* Build complete module dependency graph from entry point
|
|
47
|
-
* Traverses all local imports and builds IR for all discovered modules
|
|
48
|
-
* Uses TypeScript's ts.resolveModuleName() for correct module resolution
|
|
49
|
-
*/
|
|
50
|
-
export const buildModuleDependencyGraph = (
|
|
51
|
-
entryFile: string,
|
|
52
|
-
options: CompilerOptions
|
|
53
|
-
): Result<ModuleDependencyGraphResult, readonly Diagnostic[]> => {
|
|
54
|
-
const diagnostics: Diagnostic[] = [];
|
|
55
|
-
|
|
56
|
-
// Normalize entry file and source root to absolute paths
|
|
57
|
-
const entryAbs = resolve(entryFile);
|
|
58
|
-
const sourceRootAbs = resolve(options.sourceRoot);
|
|
59
|
-
|
|
60
|
-
// Get TypeScript compiler options for module resolution
|
|
61
|
-
const compilerOptions = createCompilerOptions(options);
|
|
62
|
-
|
|
63
|
-
// Track all discovered files for later type checking
|
|
64
|
-
const allDiscoveredFiles: string[] = [];
|
|
65
|
-
|
|
66
|
-
// BFS to discover all local imports
|
|
67
|
-
const visited = new Set<string>();
|
|
68
|
-
const queue: string[] = [entryAbs];
|
|
69
|
-
|
|
70
|
-
// First pass: discover all files
|
|
71
|
-
while (queue.length > 0) {
|
|
72
|
-
const currentFile = queue.shift()!;
|
|
73
|
-
|
|
74
|
-
// Dedup by realpath (handles symlinks, relative paths)
|
|
75
|
-
const realPath = ts.sys.realpath?.(currentFile) ?? currentFile;
|
|
76
|
-
if (visited.has(realPath)) {
|
|
77
|
-
continue;
|
|
78
|
-
}
|
|
79
|
-
visited.add(realPath);
|
|
80
|
-
allDiscoveredFiles.push(realPath);
|
|
81
|
-
|
|
82
|
-
// Read source file directly from filesystem
|
|
83
|
-
const sourceText = ts.sys.readFile(currentFile);
|
|
84
|
-
if (!sourceText) {
|
|
85
|
-
// Missing file - add diagnostic but continue traversal
|
|
86
|
-
const relativeCurrent = relative(sourceRootAbs, currentFile);
|
|
87
|
-
diagnostics.push(
|
|
88
|
-
createDiagnostic(
|
|
89
|
-
"TSN1002",
|
|
90
|
-
"error",
|
|
91
|
-
`Cannot find module '${relativeCurrent}'`,
|
|
92
|
-
{
|
|
93
|
-
file: currentFile,
|
|
94
|
-
line: 1,
|
|
95
|
-
column: 1,
|
|
96
|
-
length: 1,
|
|
97
|
-
}
|
|
98
|
-
)
|
|
99
|
-
);
|
|
100
|
-
continue;
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
// Parse source file to extract imports
|
|
104
|
-
const sourceFile = ts.createSourceFile(
|
|
105
|
-
currentFile,
|
|
106
|
-
sourceText,
|
|
107
|
-
ts.ScriptTarget.Latest,
|
|
108
|
-
true
|
|
109
|
-
);
|
|
110
|
-
|
|
111
|
-
// Extract local imports and re-exports using TypeScript's resolution
|
|
112
|
-
for (const stmt of sourceFile.statements) {
|
|
113
|
-
// Handle import declarations: import { x } from "./module"
|
|
114
|
-
// Handle re-export declarations: export { x } from "./module"
|
|
115
|
-
const moduleSpecifier = getModuleSpecifier(stmt);
|
|
116
|
-
if (!moduleSpecifier) {
|
|
117
|
-
continue;
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
const importSpecifier = moduleSpecifier.text;
|
|
121
|
-
|
|
122
|
-
// Only process local imports (starts with . or /)
|
|
123
|
-
if (
|
|
124
|
-
!importSpecifier.startsWith(".") &&
|
|
125
|
-
!importSpecifier.startsWith("/")
|
|
126
|
-
) {
|
|
127
|
-
continue;
|
|
128
|
-
}
|
|
129
|
-
|
|
130
|
-
// Resolve using TypeScript's module resolution
|
|
131
|
-
const resolved = ts.resolveModuleName(
|
|
132
|
-
importSpecifier,
|
|
133
|
-
currentFile,
|
|
134
|
-
compilerOptions,
|
|
135
|
-
ts.sys
|
|
136
|
-
);
|
|
137
|
-
|
|
138
|
-
if (resolved.resolvedModule?.resolvedFileName) {
|
|
139
|
-
const resolvedPath = resolved.resolvedModule.resolvedFileName;
|
|
140
|
-
|
|
141
|
-
// Only include .ts files (not .d.ts) within source root
|
|
142
|
-
if (
|
|
143
|
-
resolvedPath.startsWith(sourceRootAbs) &&
|
|
144
|
-
resolvedPath.endsWith(".ts") &&
|
|
145
|
-
!resolvedPath.endsWith(".d.ts")
|
|
146
|
-
) {
|
|
147
|
-
queue.push(resolvedPath);
|
|
148
|
-
}
|
|
149
|
-
} else {
|
|
150
|
-
// Import resolution failed - add diagnostic with context
|
|
151
|
-
const relativeCurrent = relative(sourceRootAbs, currentFile);
|
|
152
|
-
diagnostics.push(
|
|
153
|
-
createDiagnostic(
|
|
154
|
-
"TSN1002",
|
|
155
|
-
"error",
|
|
156
|
-
`Cannot resolve import '${importSpecifier}' from '${relativeCurrent}'`,
|
|
157
|
-
{
|
|
158
|
-
file: currentFile,
|
|
159
|
-
line: stmt.getStart(sourceFile),
|
|
160
|
-
column: 1,
|
|
161
|
-
length: importSpecifier.length,
|
|
162
|
-
}
|
|
163
|
-
)
|
|
164
|
-
);
|
|
165
|
-
}
|
|
166
|
-
}
|
|
167
|
-
}
|
|
168
|
-
|
|
169
|
-
// If any diagnostics from discovery, fail the build
|
|
170
|
-
if (diagnostics.length > 0) {
|
|
171
|
-
return error(diagnostics);
|
|
172
|
-
}
|
|
173
|
-
|
|
174
|
-
// Ensure we discovered at least the entry file
|
|
175
|
-
if (allDiscoveredFiles.length === 0) {
|
|
176
|
-
return error([
|
|
177
|
-
createDiagnostic(
|
|
178
|
-
"TSN1002",
|
|
179
|
-
"error",
|
|
180
|
-
`No modules found starting from entry point '${entryFile}'`,
|
|
181
|
-
{
|
|
182
|
-
file: entryFile,
|
|
183
|
-
line: 1,
|
|
184
|
-
column: 1,
|
|
185
|
-
length: 1,
|
|
186
|
-
}
|
|
187
|
-
),
|
|
188
|
-
]);
|
|
189
|
-
}
|
|
190
|
-
|
|
191
|
-
// Second pass: Create TypeScript program with all discovered files for type checking
|
|
192
|
-
// Use absolute sourceRoot for consistency
|
|
193
|
-
const programResult = createProgram(allDiscoveredFiles, {
|
|
194
|
-
...options,
|
|
195
|
-
sourceRoot: sourceRootAbs,
|
|
196
|
-
});
|
|
197
|
-
|
|
198
|
-
if (!programResult.ok) {
|
|
199
|
-
return error(programResult.error.diagnostics);
|
|
200
|
-
}
|
|
201
|
-
|
|
202
|
-
const tsonicProgram = programResult.value;
|
|
203
|
-
|
|
204
|
-
// Third pass: Build IR for all discovered modules
|
|
205
|
-
const modules: IrModule[] = [];
|
|
206
|
-
|
|
207
|
-
for (const filePath of allDiscoveredFiles) {
|
|
208
|
-
const sourceFile = tsonicProgram.program.getSourceFile(filePath);
|
|
209
|
-
if (!sourceFile) {
|
|
210
|
-
// This shouldn't happen since we already verified files exist
|
|
211
|
-
continue;
|
|
212
|
-
}
|
|
213
|
-
|
|
214
|
-
const moduleResult = buildIrModule(sourceFile, tsonicProgram, {
|
|
215
|
-
sourceRoot: sourceRootAbs,
|
|
216
|
-
rootNamespace: options.rootNamespace,
|
|
217
|
-
});
|
|
218
|
-
|
|
219
|
-
if (!moduleResult.ok) {
|
|
220
|
-
diagnostics.push(moduleResult.error);
|
|
221
|
-
continue;
|
|
222
|
-
}
|
|
223
|
-
|
|
224
|
-
modules.push(moduleResult.value);
|
|
225
|
-
}
|
|
226
|
-
|
|
227
|
-
// If any diagnostics from IR building, fail the build
|
|
228
|
-
if (diagnostics.length > 0) {
|
|
229
|
-
return error(diagnostics);
|
|
230
|
-
}
|
|
231
|
-
|
|
232
|
-
// Sort modules by relative path for deterministic output
|
|
233
|
-
modules.sort((a, b) => a.filePath.localeCompare(b.filePath));
|
|
234
|
-
|
|
235
|
-
// Entry module is the first one (after sorting, it should be the entry file)
|
|
236
|
-
// But let's find it by matching the entry file path
|
|
237
|
-
const entryRelative = relative(sourceRootAbs, entryAbs).replace(/\\/g, "/");
|
|
238
|
-
const entryModule =
|
|
239
|
-
modules.find((m) => m.filePath === entryRelative) ?? modules[0]!;
|
|
240
|
-
|
|
241
|
-
return ok({
|
|
242
|
-
modules,
|
|
243
|
-
entryModule,
|
|
244
|
-
});
|
|
245
|
-
};
|
|
@@ -1,103 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* TypeScript diagnostics collection and conversion
|
|
3
|
-
*/
|
|
4
|
-
|
|
5
|
-
import * as ts from "typescript";
|
|
6
|
-
import {
|
|
7
|
-
Diagnostic,
|
|
8
|
-
DiagnosticsCollector,
|
|
9
|
-
createDiagnosticsCollector,
|
|
10
|
-
addDiagnostic,
|
|
11
|
-
createDiagnostic,
|
|
12
|
-
} from "../types/diagnostic.js";
|
|
13
|
-
|
|
14
|
-
/**
|
|
15
|
-
* Collect all TypeScript diagnostics from a program
|
|
16
|
-
*/
|
|
17
|
-
export const collectTsDiagnostics = (
|
|
18
|
-
program: ts.Program
|
|
19
|
-
): DiagnosticsCollector => {
|
|
20
|
-
const tsDiagnostics = [
|
|
21
|
-
...program.getConfigFileParsingDiagnostics(),
|
|
22
|
-
...program.getOptionsDiagnostics(),
|
|
23
|
-
...program.getSyntacticDiagnostics(),
|
|
24
|
-
...program.getGlobalDiagnostics(),
|
|
25
|
-
...program.getSemanticDiagnostics(),
|
|
26
|
-
];
|
|
27
|
-
|
|
28
|
-
return tsDiagnostics.reduce((collector, tsDiag) => {
|
|
29
|
-
const diagnostic = convertTsDiagnostic(tsDiag);
|
|
30
|
-
return diagnostic ? addDiagnostic(collector, diagnostic) : collector;
|
|
31
|
-
}, createDiagnosticsCollector());
|
|
32
|
-
};
|
|
33
|
-
|
|
34
|
-
/**
|
|
35
|
-
* Convert TypeScript diagnostic to Tsonic diagnostic
|
|
36
|
-
*/
|
|
37
|
-
export const convertTsDiagnostic = (
|
|
38
|
-
tsDiag: ts.Diagnostic
|
|
39
|
-
): Diagnostic | null => {
|
|
40
|
-
if (tsDiag.category === ts.DiagnosticCategory.Suggestion) {
|
|
41
|
-
return null; // Ignore suggestions
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
const message = ts.flattenDiagnosticMessageText(tsDiag.messageText, "\n");
|
|
45
|
-
|
|
46
|
-
// Ignore "type used as value" errors for .NET types
|
|
47
|
-
// These are handled by the Tsonic compiler
|
|
48
|
-
if (
|
|
49
|
-
message.includes("only refers to a type, but is being used as a value") &&
|
|
50
|
-
tsDiag.file
|
|
51
|
-
) {
|
|
52
|
-
// Check if this is a .NET import
|
|
53
|
-
const sourceText = tsDiag.file.getText();
|
|
54
|
-
if (
|
|
55
|
-
sourceText.includes('from "System') ||
|
|
56
|
-
sourceText.includes('from "Microsoft') ||
|
|
57
|
-
sourceText.includes('from "Windows')
|
|
58
|
-
) {
|
|
59
|
-
return null; // Ignore - will be handled by Tsonic
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
const severity =
|
|
64
|
-
tsDiag.category === ts.DiagnosticCategory.Error
|
|
65
|
-
? "error"
|
|
66
|
-
: tsDiag.category === ts.DiagnosticCategory.Warning
|
|
67
|
-
? "warning"
|
|
68
|
-
: "info";
|
|
69
|
-
|
|
70
|
-
const location =
|
|
71
|
-
tsDiag.file && tsDiag.start !== undefined
|
|
72
|
-
? getSourceLocation(tsDiag.file, tsDiag.start, tsDiag.length ?? 1)
|
|
73
|
-
: undefined;
|
|
74
|
-
|
|
75
|
-
return createDiagnostic(
|
|
76
|
-
"TSN2001", // Generic TypeScript error
|
|
77
|
-
severity,
|
|
78
|
-
message,
|
|
79
|
-
location
|
|
80
|
-
);
|
|
81
|
-
};
|
|
82
|
-
|
|
83
|
-
/**
|
|
84
|
-
* Get source location information from TypeScript source file
|
|
85
|
-
*/
|
|
86
|
-
export const getSourceLocation = (
|
|
87
|
-
file: ts.SourceFile,
|
|
88
|
-
start: number,
|
|
89
|
-
length: number
|
|
90
|
-
): {
|
|
91
|
-
readonly file: string;
|
|
92
|
-
readonly line: number;
|
|
93
|
-
readonly column: number;
|
|
94
|
-
readonly length: number;
|
|
95
|
-
} => {
|
|
96
|
-
const { line, character } = file.getLineAndCharacterOfPosition(start);
|
|
97
|
-
return {
|
|
98
|
-
file: file.fileName,
|
|
99
|
-
line: line + 1,
|
|
100
|
-
column: character + 1,
|
|
101
|
-
length,
|
|
102
|
-
};
|
|
103
|
-
};
|
package/src/program/metadata.ts
DELETED
|
@@ -1,68 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* .NET metadata file loading
|
|
3
|
-
*/
|
|
4
|
-
|
|
5
|
-
import * as fs from "node:fs";
|
|
6
|
-
import * as path from "node:path";
|
|
7
|
-
import {
|
|
8
|
-
DotnetMetadataRegistry,
|
|
9
|
-
DotnetMetadataFile,
|
|
10
|
-
} from "../dotnet-metadata.js";
|
|
11
|
-
|
|
12
|
-
/**
|
|
13
|
-
* Recursively scan a directory for .d.ts files
|
|
14
|
-
*/
|
|
15
|
-
const scanForDeclarationFiles = (dir: string): readonly string[] => {
|
|
16
|
-
if (!fs.existsSync(dir)) {
|
|
17
|
-
return [];
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
const results: string[] = [];
|
|
21
|
-
const entries = fs.readdirSync(dir, { withFileTypes: true });
|
|
22
|
-
|
|
23
|
-
for (const entry of entries) {
|
|
24
|
-
const fullPath = path.join(dir, entry.name);
|
|
25
|
-
if (entry.isDirectory()) {
|
|
26
|
-
results.push(...scanForDeclarationFiles(fullPath));
|
|
27
|
-
} else if (entry.name.endsWith(".d.ts")) {
|
|
28
|
-
results.push(fullPath);
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
return results;
|
|
33
|
-
};
|
|
34
|
-
|
|
35
|
-
/**
|
|
36
|
-
* Load .NET metadata files from configured type roots
|
|
37
|
-
* Looks for *.metadata.json files alongside .d.ts files
|
|
38
|
-
*/
|
|
39
|
-
export const loadDotnetMetadata = (
|
|
40
|
-
typeRoots: readonly string[]
|
|
41
|
-
): DotnetMetadataRegistry => {
|
|
42
|
-
const registry = new DotnetMetadataRegistry();
|
|
43
|
-
|
|
44
|
-
// Scan all type roots for .d.ts files
|
|
45
|
-
for (const typeRoot of typeRoots) {
|
|
46
|
-
const absoluteRoot = path.resolve(typeRoot);
|
|
47
|
-
const declFiles = scanForDeclarationFiles(absoluteRoot);
|
|
48
|
-
|
|
49
|
-
for (const declPath of declFiles) {
|
|
50
|
-
// Look for corresponding .metadata.json file
|
|
51
|
-
const metadataPath = declPath.replace(/\.d\.ts$/, ".metadata.json");
|
|
52
|
-
|
|
53
|
-
try {
|
|
54
|
-
if (fs.existsSync(metadataPath)) {
|
|
55
|
-
const content = fs.readFileSync(metadataPath, "utf-8");
|
|
56
|
-
const metadataFile = JSON.parse(content) as DotnetMetadataFile;
|
|
57
|
-
registry.loadMetadataFile(metadataPath, metadataFile);
|
|
58
|
-
}
|
|
59
|
-
} catch (err) {
|
|
60
|
-
// Silently skip files that can't be read or parsed
|
|
61
|
-
// In production, we might want to emit a warning diagnostic
|
|
62
|
-
console.warn(`Failed to load metadata from ${metadataPath}:`, err);
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
return registry;
|
|
68
|
-
};
|
package/src/program/queries.ts
DELETED
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Program query functions
|
|
3
|
-
*/
|
|
4
|
-
|
|
5
|
-
import * as ts from "typescript";
|
|
6
|
-
import * as path from "node:path";
|
|
7
|
-
import { TsonicProgram } from "./types.js";
|
|
8
|
-
|
|
9
|
-
/**
|
|
10
|
-
* Get a source file from the program by file path
|
|
11
|
-
*/
|
|
12
|
-
export const getSourceFile = (
|
|
13
|
-
program: TsonicProgram,
|
|
14
|
-
filePath: string
|
|
15
|
-
): ts.SourceFile | null => {
|
|
16
|
-
const absolutePath = path.resolve(filePath);
|
|
17
|
-
return program.program.getSourceFile(absolutePath) ?? null;
|
|
18
|
-
};
|
package/src/program/types.ts
DELETED
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Program type definitions
|
|
3
|
-
*/
|
|
4
|
-
|
|
5
|
-
import * as ts from "typescript";
|
|
6
|
-
import { DotnetMetadataRegistry } from "../dotnet-metadata.js";
|
|
7
|
-
import { BindingRegistry } from "./bindings.js";
|
|
8
|
-
import { DotNetImportResolver } from "../resolver/dotnet-import-resolver.js";
|
|
9
|
-
|
|
10
|
-
export type RuntimeMode = "js" | "dotnet";
|
|
11
|
-
|
|
12
|
-
export type CompilerOptions = {
|
|
13
|
-
readonly sourceRoot: string;
|
|
14
|
-
readonly rootNamespace: string;
|
|
15
|
-
readonly strict?: boolean;
|
|
16
|
-
readonly typeRoots?: readonly string[];
|
|
17
|
-
readonly verbose?: boolean;
|
|
18
|
-
/** Use TypeScript standard lib (Array, Promise, etc.) instead of noLib mode */
|
|
19
|
-
readonly useStandardLib?: boolean;
|
|
20
|
-
/**
|
|
21
|
-
* Runtime mode:
|
|
22
|
-
* - "js": JS built-ins available via Tsonic.JSRuntime
|
|
23
|
-
* - "dotnet": Pure .NET mode, JS built-ins forbidden
|
|
24
|
-
* Defaults to "js"
|
|
25
|
-
*/
|
|
26
|
-
readonly runtime?: RuntimeMode;
|
|
27
|
-
};
|
|
28
|
-
|
|
29
|
-
export type TsonicProgram = {
|
|
30
|
-
readonly program: ts.Program;
|
|
31
|
-
readonly checker: ts.TypeChecker;
|
|
32
|
-
readonly options: CompilerOptions;
|
|
33
|
-
readonly sourceFiles: readonly ts.SourceFile[];
|
|
34
|
-
readonly metadata: DotnetMetadataRegistry;
|
|
35
|
-
readonly bindings: BindingRegistry;
|
|
36
|
-
/** Resolver for .NET namespace imports (import-driven discovery) */
|
|
37
|
-
readonly dotnetResolver: DotNetImportResolver;
|
|
38
|
-
};
|
|
@@ -1,226 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Import-driven .NET namespace resolution
|
|
3
|
-
*
|
|
4
|
-
* Determines if an import specifier refers to a CLR namespace by checking
|
|
5
|
-
* if bindings.json exists in the package's namespace directory.
|
|
6
|
-
*
|
|
7
|
-
* This is the ONLY mechanism for detecting .NET imports - no heuristics,
|
|
8
|
-
* no special-casing for @tsonic/dotnet or any other package.
|
|
9
|
-
*/
|
|
10
|
-
|
|
11
|
-
import { existsSync } from "node:fs";
|
|
12
|
-
import { dirname, join } from "node:path";
|
|
13
|
-
import { createRequire } from "node:module";
|
|
14
|
-
|
|
15
|
-
/**
|
|
16
|
-
* Result of resolving a .NET import
|
|
17
|
-
*/
|
|
18
|
-
export type ResolvedDotNetImport =
|
|
19
|
-
| {
|
|
20
|
-
readonly isDotNet: true;
|
|
21
|
-
readonly packageName: string;
|
|
22
|
-
readonly resolvedNamespace: string;
|
|
23
|
-
readonly bindingsPath: string;
|
|
24
|
-
readonly metadataPath: string | undefined;
|
|
25
|
-
}
|
|
26
|
-
| {
|
|
27
|
-
readonly isDotNet: false;
|
|
28
|
-
};
|
|
29
|
-
|
|
30
|
-
/**
|
|
31
|
-
* Parsed module specifier
|
|
32
|
-
*/
|
|
33
|
-
type ParsedSpecifier = {
|
|
34
|
-
readonly packageName: string;
|
|
35
|
-
readonly subpath: string;
|
|
36
|
-
};
|
|
37
|
-
|
|
38
|
-
/**
|
|
39
|
-
* Resolver for .NET namespace imports
|
|
40
|
-
*
|
|
41
|
-
* An import is a CLR namespace import iff:
|
|
42
|
-
* - It's a package import with a subpath (e.g., @scope/pkg/Namespace)
|
|
43
|
-
* - The package contains bindings.json in that subpath directory
|
|
44
|
-
*
|
|
45
|
-
* This works for any bindings provider package, not just @tsonic/dotnet.
|
|
46
|
-
*/
|
|
47
|
-
export class DotNetImportResolver {
|
|
48
|
-
// Cache: packageName -> packageRoot (or null if not found)
|
|
49
|
-
private readonly pkgRootCache = new Map<string, string | null>();
|
|
50
|
-
|
|
51
|
-
// Cache: absolute bindingsPath -> exists
|
|
52
|
-
private readonly bindingsExistsCache = new Map<string, boolean>();
|
|
53
|
-
|
|
54
|
-
// require function for Node resolution from the base directory
|
|
55
|
-
private readonly require: NodeRequire;
|
|
56
|
-
|
|
57
|
-
constructor(baseDir: string) {
|
|
58
|
-
// Create a require function that resolves relative to baseDir
|
|
59
|
-
this.require = createRequire(join(baseDir, "package.json"));
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
/**
|
|
63
|
-
* Resolve an import specifier to determine if it's a CLR namespace import
|
|
64
|
-
*/
|
|
65
|
-
resolve(moduleSpecifier: string): ResolvedDotNetImport {
|
|
66
|
-
// Skip local imports
|
|
67
|
-
if (moduleSpecifier.startsWith(".") || moduleSpecifier.startsWith("/")) {
|
|
68
|
-
return { isDotNet: false };
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
// Parse the specifier into package name and subpath
|
|
72
|
-
const parsed = this.parseModuleSpecifier(moduleSpecifier);
|
|
73
|
-
if (!parsed) {
|
|
74
|
-
return { isDotNet: false };
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
const { packageName, subpath } = parsed;
|
|
78
|
-
|
|
79
|
-
// No subpath means it's not a namespace import (e.g., just "@tsonic/dotnet")
|
|
80
|
-
if (!subpath) {
|
|
81
|
-
return { isDotNet: false };
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
// Resolve package root using Node resolution
|
|
85
|
-
const pkgRoot = this.resolvePkgRoot(packageName);
|
|
86
|
-
if (!pkgRoot) {
|
|
87
|
-
return { isDotNet: false };
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
// Check if bindings.json exists in the namespace directory
|
|
91
|
-
const bindingsPath = join(pkgRoot, subpath, "bindings.json");
|
|
92
|
-
if (!this.hasBindings(bindingsPath)) {
|
|
93
|
-
return { isDotNet: false };
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
// Check for optional metadata.json
|
|
97
|
-
const metadataPath = join(pkgRoot, subpath, "internal", "metadata.json");
|
|
98
|
-
const hasMetadata = this.fileExists(metadataPath);
|
|
99
|
-
|
|
100
|
-
return {
|
|
101
|
-
isDotNet: true,
|
|
102
|
-
packageName,
|
|
103
|
-
resolvedNamespace: subpath,
|
|
104
|
-
bindingsPath,
|
|
105
|
-
metadataPath: hasMetadata ? metadataPath : undefined,
|
|
106
|
-
};
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
/**
|
|
110
|
-
* Parse a module specifier into package name and subpath
|
|
111
|
-
*
|
|
112
|
-
* Examples:
|
|
113
|
-
* - "@tsonic/dotnet/System.IO" -> { packageName: "@tsonic/dotnet", subpath: "System.IO" }
|
|
114
|
-
* - "lodash/fp" -> { packageName: "lodash", subpath: "fp" }
|
|
115
|
-
* - "@tsonic/dotnet" -> null (no subpath)
|
|
116
|
-
* - "lodash" -> null (no subpath)
|
|
117
|
-
*/
|
|
118
|
-
private parseModuleSpecifier(spec: string): ParsedSpecifier | null {
|
|
119
|
-
if (spec.startsWith("@")) {
|
|
120
|
-
// Scoped package: @scope/pkg/subpath
|
|
121
|
-
const match = spec.match(/^(@[^/]+\/[^/]+)(?:\/(.+))?$/);
|
|
122
|
-
if (!match) return null;
|
|
123
|
-
const packageName = match[1];
|
|
124
|
-
const subpath = match[2];
|
|
125
|
-
if (!packageName || !subpath) return null;
|
|
126
|
-
return { packageName, subpath };
|
|
127
|
-
} else {
|
|
128
|
-
// Regular package: pkg/subpath
|
|
129
|
-
const slashIdx = spec.indexOf("/");
|
|
130
|
-
if (slashIdx === -1) return null;
|
|
131
|
-
return {
|
|
132
|
-
packageName: spec.slice(0, slashIdx),
|
|
133
|
-
subpath: spec.slice(slashIdx + 1),
|
|
134
|
-
};
|
|
135
|
-
}
|
|
136
|
-
}
|
|
137
|
-
|
|
138
|
-
/**
|
|
139
|
-
* Resolve package root directory using Node resolution
|
|
140
|
-
*
|
|
141
|
-
* Uses require.resolve to find the package's package.json,
|
|
142
|
-
* then returns the directory containing it.
|
|
143
|
-
*/
|
|
144
|
-
private resolvePkgRoot(packageName: string): string | null {
|
|
145
|
-
const cached = this.pkgRootCache.get(packageName);
|
|
146
|
-
if (cached !== undefined) {
|
|
147
|
-
return cached;
|
|
148
|
-
}
|
|
149
|
-
|
|
150
|
-
try {
|
|
151
|
-
// Try to resolve the package's package.json directly
|
|
152
|
-
const pkgJsonPath = this.require.resolve(`${packageName}/package.json`);
|
|
153
|
-
const pkgRoot = dirname(pkgJsonPath);
|
|
154
|
-
this.pkgRootCache.set(packageName, pkgRoot);
|
|
155
|
-
return pkgRoot;
|
|
156
|
-
} catch {
|
|
157
|
-
// package.json might not be exported - try finding package root via node_modules path
|
|
158
|
-
// This works by looking for node_modules/<package-name> in the require paths
|
|
159
|
-
try {
|
|
160
|
-
const paths = this.require.resolve.paths(packageName);
|
|
161
|
-
if (paths) {
|
|
162
|
-
for (const searchPath of paths) {
|
|
163
|
-
// For scoped packages, the path structure is node_modules/@scope/name
|
|
164
|
-
const pkgDir = packageName.startsWith("@")
|
|
165
|
-
? join(searchPath, packageName)
|
|
166
|
-
: join(searchPath, packageName);
|
|
167
|
-
|
|
168
|
-
// Check if package.json exists at this location
|
|
169
|
-
if (existsSync(join(pkgDir, "package.json"))) {
|
|
170
|
-
this.pkgRootCache.set(packageName, pkgDir);
|
|
171
|
-
return pkgDir;
|
|
172
|
-
}
|
|
173
|
-
}
|
|
174
|
-
}
|
|
175
|
-
} catch {
|
|
176
|
-
// Fallback failed
|
|
177
|
-
}
|
|
178
|
-
|
|
179
|
-
this.pkgRootCache.set(packageName, null);
|
|
180
|
-
return null;
|
|
181
|
-
}
|
|
182
|
-
}
|
|
183
|
-
|
|
184
|
-
/**
|
|
185
|
-
* Check if bindings.json exists at the given path (cached)
|
|
186
|
-
*/
|
|
187
|
-
private hasBindings(bindingsPath: string): boolean {
|
|
188
|
-
const cached = this.bindingsExistsCache.get(bindingsPath);
|
|
189
|
-
if (cached !== undefined) {
|
|
190
|
-
return cached;
|
|
191
|
-
}
|
|
192
|
-
|
|
193
|
-
const exists = existsSync(bindingsPath);
|
|
194
|
-
this.bindingsExistsCache.set(bindingsPath, exists);
|
|
195
|
-
return exists;
|
|
196
|
-
}
|
|
197
|
-
|
|
198
|
-
/**
|
|
199
|
-
* Check if a file exists (not cached - used for optional files)
|
|
200
|
-
*/
|
|
201
|
-
private fileExists(filePath: string): boolean {
|
|
202
|
-
return existsSync(filePath);
|
|
203
|
-
}
|
|
204
|
-
|
|
205
|
-
/**
|
|
206
|
-
* Get all discovered binding paths (for loading)
|
|
207
|
-
*/
|
|
208
|
-
getDiscoveredBindingPaths(): ReadonlySet<string> {
|
|
209
|
-
const paths = new Set<string>();
|
|
210
|
-
for (const [path, exists] of this.bindingsExistsCache) {
|
|
211
|
-
if (exists) {
|
|
212
|
-
paths.add(path);
|
|
213
|
-
}
|
|
214
|
-
}
|
|
215
|
-
return paths;
|
|
216
|
-
}
|
|
217
|
-
}
|
|
218
|
-
|
|
219
|
-
/**
|
|
220
|
-
* Create a resolver instance for a given source root
|
|
221
|
-
*/
|
|
222
|
-
export const createDotNetImportResolver = (
|
|
223
|
-
sourceRoot: string
|
|
224
|
-
): DotNetImportResolver => {
|
|
225
|
-
return new DotNetImportResolver(sourceRoot);
|
|
226
|
-
};
|