@geastack/compiler 1.0.15
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +202 -0
- package/README.md +149 -0
- package/dist/cli-analyze.d.ts +1 -0
- package/dist/cli-analyze.js +61 -0
- package/dist/cli-coverage.d.ts +1 -0
- package/dist/cli-coverage.js +329 -0
- package/dist/cli-emit.d.ts +10 -0
- package/dist/cli-emit.js +398 -0
- package/dist/cli-module-graph.d.ts +18 -0
- package/dist/cli-module-graph.js +123 -0
- package/dist/cli-package-source.d.ts +5 -0
- package/dist/cli-package-source.js +116 -0
- package/dist/cli-project.d.ts +2 -0
- package/dist/cli-project.js +60 -0
- package/dist/cli.d.ts +2 -0
- package/dist/cli.js +199 -0
- package/dist/compiler.d.ts +228 -0
- package/dist/compiler.js +1029 -0
- package/dist/conversion/algebra.d.ts +218 -0
- package/dist/conversion/algebra.js +155 -0
- package/dist/conversion/build.d.ts +67 -0
- package/dist/conversion/build.js +1378 -0
- package/dist/conversion/derive.d.ts +37 -0
- package/dist/conversion/derive.js +260 -0
- package/dist/conversion/graph-validation.d.ts +8 -0
- package/dist/conversion/graph-validation.js +97 -0
- package/dist/conversion/native-callable-adapter.d.ts +13 -0
- package/dist/conversion/native-callable-adapter.js +53 -0
- package/dist/conversion/native-class-reference.d.ts +12 -0
- package/dist/conversion/native-class-reference.js +39 -0
- package/dist/conversion/native-payload-transport.d.ts +25 -0
- package/dist/conversion/native-payload-transport.js +33 -0
- package/dist/conversion/native-selection.d.ts +49 -0
- package/dist/conversion/native-selection.js +135 -0
- package/dist/conversion/native-sum.d.ts +42 -0
- package/dist/conversion/native-sum.js +115 -0
- package/dist/conversion/nodes.d.ts +55 -0
- package/dist/conversion/nodes.js +91 -0
- package/dist/conversion/operand-view.d.ts +14 -0
- package/dist/conversion/operand-view.js +20 -0
- package/dist/conversion/record-view.d.ts +157 -0
- package/dist/conversion/record-view.js +273 -0
- package/dist/conversion/registry.d.ts +217 -0
- package/dist/conversion/registry.js +1 -0
- package/dist/diagnostics/model.d.ts +76 -0
- package/dist/diagnostics/model.js +60 -0
- package/dist/diagnostics/sweep.d.ts +31 -0
- package/dist/diagnostics/sweep.js +112 -0
- package/dist/identity/ids.d.ts +179 -0
- package/dist/identity/ids.js +212 -0
- package/dist/ir/absent-class-arm.d.ts +48 -0
- package/dist/ir/absent-class-arm.js +157 -0
- package/dist/ir/borrow-effects.d.ts +23 -0
- package/dist/ir/borrow-effects.js +151 -0
- package/dist/ir/borrowed-call-arguments.d.ts +40 -0
- package/dist/ir/borrowed-call-arguments.js +117 -0
- package/dist/ir/build.d.ts +168 -0
- package/dist/ir/build.js +459 -0
- package/dist/ir/call-dispatch.d.ts +38 -0
- package/dist/ir/call-dispatch.js +502 -0
- package/dist/ir/call-entry.d.ts +142 -0
- package/dist/ir/call-entry.js +386 -0
- package/dist/ir/callable-class-flow.d.ts +27 -0
- package/dist/ir/callable-class-flow.js +1386 -0
- package/dist/ir/callable-field-slots.d.ts +22 -0
- package/dist/ir/callable-field-slots.js +166 -0
- package/dist/ir/callable-identity-demand.d.ts +52 -0
- package/dist/ir/callable-identity-demand.js +460 -0
- package/dist/ir/callable-member-candidates.d.ts +9 -0
- package/dist/ir/callable-member-candidates.js +39 -0
- package/dist/ir/callable-records.d.ts +21 -0
- package/dist/ir/callable-records.js +411 -0
- package/dist/ir/captures.d.ts +26 -0
- package/dist/ir/captures.js +335 -0
- package/dist/ir/certificate.d.ts +45 -0
- package/dist/ir/certificate.js +47 -0
- package/dist/ir/certify/carrier-keys.d.ts +73 -0
- package/dist/ir/certify/carrier-keys.js +221 -0
- package/dist/ir/certify/function-source.d.ts +4 -0
- package/dist/ir/certify/function-source.js +28 -0
- package/dist/ir/certify/has-property-key.d.ts +88 -0
- package/dist/ir/certify/has-property-key.js +116 -0
- package/dist/ir/certify/instanceof-key.d.ts +24 -0
- package/dist/ir/certify/instanceof-key.js +35 -0
- package/dist/ir/certify/property-access-keys.d.ts +172 -0
- package/dist/ir/certify/property-access-keys.js +291 -0
- package/dist/ir/certify/property-access.d.ts +3 -0
- package/dist/ir/certify/property-access.js +597 -0
- package/dist/ir/certify/runtime-helper.d.ts +3 -0
- package/dist/ir/certify/runtime-helper.js +326 -0
- package/dist/ir/certify/typeof-operand.d.ts +14 -0
- package/dist/ir/certify/typeof-operand.js +16 -0
- package/dist/ir/certify.d.ts +123 -0
- package/dist/ir/certify.js +481 -0
- package/dist/ir/class-evaluation.d.ts +26 -0
- package/dist/ir/class-evaluation.js +50 -0
- package/dist/ir/class-static-fields.d.ts +60 -0
- package/dist/ir/class-static-fields.js +108 -0
- package/dist/ir/construct-entry.d.ts +26 -0
- package/dist/ir/construct-entry.js +117 -0
- package/dist/ir/dead-values.d.ts +90 -0
- package/dist/ir/dead-values.js +184 -0
- package/dist/ir/deferral.d.ts +99 -0
- package/dist/ir/deferral.js +409 -0
- package/dist/ir/dense-loops.d.ts +230 -0
- package/dist/ir/dense-loops.js +697 -0
- package/dist/ir/dominance.d.ts +82 -0
- package/dist/ir/dominance.js +268 -0
- package/dist/ir/emission-representations.d.ts +71 -0
- package/dist/ir/emission-representations.js +350 -0
- package/dist/ir/facts.d.ts +218 -0
- package/dist/ir/facts.js +181 -0
- package/dist/ir/fixed-data-definition.d.ts +19 -0
- package/dist/ir/fixed-data-definition.js +49 -0
- package/dist/ir/generator-split.d.ts +38 -0
- package/dist/ir/generator-split.js +329 -0
- package/dist/ir/hoist.d.ts +55 -0
- package/dist/ir/hoist.js +375 -0
- package/dist/ir/instantiation.d.ts +61 -0
- package/dist/ir/instantiation.js +137 -0
- package/dist/ir/integer-storage.d.ts +170 -0
- package/dist/ir/integer-storage.js +822 -0
- package/dist/ir/integers.d.ts +161 -0
- package/dist/ir/integers.js +539 -0
- package/dist/ir/integrity-restrictions.d.ts +50 -0
- package/dist/ir/integrity-restrictions.js +118 -0
- package/dist/ir/local-iterators.d.ts +4 -0
- package/dist/ir/local-iterators.js +27 -0
- package/dist/ir/lower-allocation.d.ts +4 -0
- package/dist/ir/lower-allocation.js +325 -0
- package/dist/ir/lower-completion.d.ts +15 -0
- package/dist/ir/lower-completion.js +25 -0
- package/dist/ir/lower-destructuring.d.ts +5 -0
- package/dist/ir/lower-destructuring.js +693 -0
- package/dist/ir/lower-element.d.ts +29 -0
- package/dist/ir/lower-element.js +111 -0
- package/dist/ir/lower-exceptions.d.ts +47 -0
- package/dist/ir/lower-exceptions.js +92 -0
- package/dist/ir/lower-flow.d.ts +137 -0
- package/dist/ir/lower-flow.js +600 -0
- package/dist/ir/lower-graph.d.ts +218 -0
- package/dist/ir/lower-graph.js +687 -0
- package/dist/ir/lower-invocation.d.ts +4 -0
- package/dist/ir/lower-invocation.js +514 -0
- package/dist/ir/lower-narrow.d.ts +53 -0
- package/dist/ir/lower-narrow.js +320 -0
- package/dist/ir/lower-operands.d.ts +272 -0
- package/dist/ir/lower-operands.js +461 -0
- package/dist/ir/lower-property.d.ts +21 -0
- package/dist/ir/lower-property.js +132 -0
- package/dist/ir/lower-protocol.d.ts +11 -0
- package/dist/ir/lower-protocol.js +118 -0
- package/dist/ir/lower-short-circuit.d.ts +41 -0
- package/dist/ir/lower-short-circuit.js +63 -0
- package/dist/ir/lower.d.ts +82 -0
- package/dist/ir/lower.js +1346 -0
- package/dist/ir/model.d.ts +1474 -0
- package/dist/ir/model.js +6 -0
- package/dist/ir/native-absent-property.d.ts +3 -0
- package/dist/ir/native-absent-property.js +13 -0
- package/dist/ir/native-array-transport.d.ts +7 -0
- package/dist/ir/native-array-transport.js +46 -0
- package/dist/ir/native-callable-bind.d.ts +9 -0
- package/dist/ir/native-callable-bind.js +30 -0
- package/dist/ir/native-carrier-predicate.d.ts +34 -0
- package/dist/ir/native-carrier-predicate.js +49 -0
- package/dist/ir/native-class-accessor.d.ts +18 -0
- package/dist/ir/native-class-accessor.js +52 -0
- package/dist/ir/native-class-construction.d.ts +16 -0
- package/dist/ir/native-class-construction.js +71 -0
- package/dist/ir/native-class-initialization.d.ts +15 -0
- package/dist/ir/native-class-initialization.js +56 -0
- package/dist/ir/native-class-origins.d.ts +13 -0
- package/dist/ir/native-class-origins.js +237 -0
- package/dist/ir/native-dictionary-transport.d.ts +6 -0
- package/dist/ir/native-dictionary-transport.js +37 -0
- package/dist/ir/native-enumeration.d.ts +14 -0
- package/dist/ir/native-enumeration.js +26 -0
- package/dist/ir/native-equality.d.ts +10 -0
- package/dist/ir/native-equality.js +18 -0
- package/dist/ir/native-field-owner.d.ts +37 -0
- package/dist/ir/native-field-owner.js +183 -0
- package/dist/ir/native-fixed-layout.d.ts +41 -0
- package/dist/ir/native-fixed-layout.js +232 -0
- package/dist/ir/native-host-construction.d.ts +53 -0
- package/dist/ir/native-host-construction.js +62 -0
- package/dist/ir/native-key-query.d.ts +4 -0
- package/dist/ir/native-key-query.js +38 -0
- package/dist/ir/native-merge-transport.d.ts +25 -0
- package/dist/ir/native-merge-transport.js +71 -0
- package/dist/ir/native-record-index-transport.d.ts +11 -0
- package/dist/ir/native-record-index-transport.js +34 -0
- package/dist/ir/native-record-index.d.ts +12 -0
- package/dist/ir/native-record-index.js +27 -0
- package/dist/ir/native-reflect-field.d.ts +5 -0
- package/dist/ir/native-reflect-field.js +33 -0
- package/dist/ir/native-sequence-transport.d.ts +7 -0
- package/dist/ir/native-sequence-transport.js +53 -0
- package/dist/ir/numeric-intrinsics.d.ts +13 -0
- package/dist/ir/numeric-intrinsics.js +57 -0
- package/dist/ir/object-value-conversions.d.ts +20 -0
- package/dist/ir/object-value-conversions.js +50 -0
- package/dist/ir/physical-class-reflection.d.ts +9 -0
- package/dist/ir/physical-class-reflection.js +57 -0
- package/dist/ir/presence-proof.d.ts +42 -0
- package/dist/ir/presence-proof.js +490 -0
- package/dist/ir/program-facts.d.ts +106 -0
- package/dist/ir/program-facts.js +319 -0
- package/dist/ir/proven-branches.d.ts +16 -0
- package/dist/ir/proven-branches.js +219 -0
- package/dist/ir/queries.d.ts +41 -0
- package/dist/ir/queries.js +213 -0
- package/dist/ir/reflection-demand.d.ts +64 -0
- package/dist/ir/reflection-demand.js +1394 -0
- package/dist/ir/refusal.d.ts +43 -0
- package/dist/ir/refusal.js +28 -0
- package/dist/ir/shake.d.ts +37 -0
- package/dist/ir/shake.js +1078 -0
- package/dist/ir/static-callables.d.ts +11 -0
- package/dist/ir/static-callables.js +163 -0
- package/dist/ir/string-layout-reuse.d.ts +13 -0
- package/dist/ir/string-layout-reuse.js +39 -0
- package/dist/ir/string-length-reuse.d.ts +8 -0
- package/dist/ir/string-length-reuse.js +47 -0
- package/dist/ir/transfer.d.ts +78 -0
- package/dist/ir/transfer.js +270 -0
- package/dist/ir/type-query-results.d.ts +25 -0
- package/dist/ir/type-query-results.js +96 -0
- package/dist/ir/typed-property-access.d.ts +100 -0
- package/dist/ir/typed-property-access.js +161 -0
- package/dist/ir/verify.d.ts +19 -0
- package/dist/ir/verify.js +355 -0
- package/dist/plugins/apple/constructors.d.ts +112 -0
- package/dist/plugins/apple/constructors.js +217 -0
- package/dist/plugins/apple/host.d.ts +181 -0
- package/dist/plugins/apple/host.js +262 -0
- package/dist/plugins/apple/jsx.d.ts +2 -0
- package/dist/plugins/apple/jsx.js +293 -0
- package/dist/plugins/apple/members.d.ts +16 -0
- package/dist/plugins/apple/members.js +190 -0
- package/dist/plugins/apple/plugin.d.ts +2 -0
- package/dist/plugins/apple/plugin.js +156 -0
- package/dist/plugins/gea/component-classes.d.ts +25 -0
- package/dist/plugins/gea/component-classes.js +162 -0
- package/dist/plugins/gea/component-inline.d.ts +13 -0
- package/dist/plugins/gea/component-inline.js +532 -0
- package/dist/plugins/gea/constructors.d.ts +23 -0
- package/dist/plugins/gea/constructors.js +100 -0
- package/dist/plugins/gea/contract.d.ts +150 -0
- package/dist/plugins/gea/contract.js +195 -0
- package/dist/plugins/gea/element-ref.d.ts +31 -0
- package/dist/plugins/gea/element-ref.js +45 -0
- package/dist/plugins/gea/host.d.ts +520 -0
- package/dist/plugins/gea/host.js +762 -0
- package/dist/plugins/gea/lower.d.ts +6 -0
- package/dist/plugins/gea/lower.js +195 -0
- package/dist/plugins/gea/members.d.ts +22 -0
- package/dist/plugins/gea/members.js +221 -0
- package/dist/plugins/gea/plugin.d.ts +22 -0
- package/dist/plugins/gea/plugin.js +307 -0
- package/dist/plugins/gea/prelude.d.ts +78 -0
- package/dist/plugins/gea/prelude.js +153 -0
- package/dist/plugins/gea/producer.d.ts +5 -0
- package/dist/plugins/gea/producer.js +52 -0
- package/dist/plugins/gea/reactive-slots.d.ts +49 -0
- package/dist/plugins/gea/reactive-slots.js +578 -0
- package/dist/plugins/gea/render-bridge.d.ts +6 -0
- package/dist/plugins/gea/render-bridge.js +281 -0
- package/dist/plugins/gea/slots.d.ts +15 -0
- package/dist/plugins/gea/slots.js +36 -0
- package/dist/plugins/gea/template-analysis.d.ts +151 -0
- package/dist/plugins/gea/template-analysis.js +346 -0
- package/dist/plugins/gea/user-agent-styles.d.ts +9 -0
- package/dist/plugins/gea/user-agent-styles.js +94 -0
- package/dist/plugins/installed.d.ts +19 -0
- package/dist/plugins/installed.js +21 -0
- package/dist/plugins/load.d.ts +7 -0
- package/dist/plugins/load.js +207 -0
- package/dist/plugins/model.d.ts +735 -0
- package/dist/plugins/model.js +47 -0
- package/dist/plugins/webgl/host.d.ts +77 -0
- package/dist/plugins/webgl/host.js +162 -0
- package/dist/plugins/webgl/plugin.d.ts +40 -0
- package/dist/plugins/webgl/plugin.js +99 -0
- package/dist/preflight/obligations.d.ts +206 -0
- package/dist/preflight/obligations.js +36 -0
- package/dist/preflight/report.d.ts +20 -0
- package/dist/preflight/report.js +61 -0
- package/dist/preflight/run.d.ts +39 -0
- package/dist/preflight/run.js +403 -0
- package/dist/project-preparation.d.ts +33 -0
- package/dist/project-preparation.js +314 -0
- package/dist/projection/abi.d.ts +82 -0
- package/dist/projection/abi.js +349 -0
- package/dist/projection/apply-arguments.d.ts +12 -0
- package/dist/projection/apply-arguments.js +20 -0
- package/dist/projection/bindings.d.ts +250 -0
- package/dist/projection/bindings.js +340 -0
- package/dist/projection/callee.d.ts +196 -0
- package/dist/projection/callee.js +444 -0
- package/dist/projection/class-property-presence.d.ts +28 -0
- package/dist/projection/class-property-presence.js +58 -0
- package/dist/projection/class-prototype.d.ts +5 -0
- package/dist/projection/class-prototype.js +23 -0
- package/dist/projection/class-storage.d.ts +26 -0
- package/dist/projection/class-storage.js +236 -0
- package/dist/projection/classes.d.ts +283 -0
- package/dist/projection/classes.js +944 -0
- package/dist/projection/coercions.d.ts +20 -0
- package/dist/projection/coercions.js +33 -0
- package/dist/projection/dispatch.d.ts +167 -0
- package/dist/projection/dispatch.js +379 -0
- package/dist/projection/fields.d.ts +123 -0
- package/dist/projection/fields.js +383 -0
- package/dist/projection/instance-test.d.ts +78 -0
- package/dist/projection/instance-test.js +156 -0
- package/dist/projection/slots.d.ts +146 -0
- package/dist/projection/slots.js +663 -0
- package/dist/projection/synthesized-abi.d.ts +61 -0
- package/dist/projection/synthesized-abi.js +94 -0
- package/dist/representation/array-index.d.ts +14 -0
- package/dist/representation/array-index.js +17 -0
- package/dist/representation/callable-object.d.ts +3 -0
- package/dist/representation/callable-object.js +6 -0
- package/dist/representation/collections.d.ts +84 -0
- package/dist/representation/collections.js +139 -0
- package/dist/representation/derive.d.ts +159 -0
- package/dist/representation/derive.js +2546 -0
- package/dist/representation/difference.d.ts +30 -0
- package/dist/representation/difference.js +240 -0
- package/dist/representation/field-descriptor-policy.d.ts +19 -0
- package/dist/representation/field-descriptor-policy.js +39 -0
- package/dist/representation/function-constructor.d.ts +13 -0
- package/dist/representation/function-constructor.js +9 -0
- package/dist/representation/host-abi.d.ts +32 -0
- package/dist/representation/host-abi.js +97 -0
- package/dist/representation/host-templates.d.ts +67 -0
- package/dist/representation/host-templates.js +94 -0
- package/dist/representation/intersection.d.ts +84 -0
- package/dist/representation/intersection.js +149 -0
- package/dist/representation/literal-destination.d.ts +43 -0
- package/dist/representation/literal-destination.js +133 -0
- package/dist/representation/merge.d.ts +18 -0
- package/dist/representation/merge.js +83 -0
- package/dist/representation/model.d.ts +1160 -0
- package/dist/representation/model.js +1019 -0
- package/dist/representation/numeric-index.d.ts +13 -0
- package/dist/representation/numeric-index.js +29 -0
- package/dist/representation/object-shape.d.ts +109 -0
- package/dist/representation/object-shape.js +123 -0
- package/dist/representation/optional.d.ts +12 -0
- package/dist/representation/optional.js +87 -0
- package/dist/representation/plan.d.ts +60 -0
- package/dist/representation/plan.js +78 -0
- package/dist/representation/policies.d.ts +589 -0
- package/dist/representation/policies.js +107 -0
- package/dist/representation/primitive-domain.d.ts +1 -0
- package/dist/representation/primitive-domain.js +1 -0
- package/dist/representation/primitives.d.ts +44 -0
- package/dist/representation/primitives.js +78 -0
- package/dist/representation/publish.d.ts +49 -0
- package/dist/representation/publish.js +648 -0
- package/dist/representation/record-fields.d.ts +96 -0
- package/dist/representation/record-fields.js +116 -0
- package/dist/representation/template-object.d.ts +11 -0
- package/dist/representation/template-object.js +26 -0
- package/dist/representation/union.d.ts +30 -0
- package/dist/representation/union.js +324 -0
- package/dist/representation/value-records.d.ts +3 -0
- package/dist/representation/value-records.js +307 -0
- package/dist/representation/verify.d.ts +17 -0
- package/dist/representation/verify.js +221 -0
- package/dist/semantics/alias-this-field-declaration-transform.d.ts +4 -0
- package/dist/semantics/alias-this-field-declaration-transform.js +207 -0
- package/dist/semantics/ambient-type-realization-transform.d.ts +62 -0
- package/dist/semantics/ambient-type-realization-transform.js +168 -0
- package/dist/semantics/ambient.d.ts +24 -0
- package/dist/semantics/ambient.js +119 -0
- package/dist/semantics/borrowed-builtin-call-bind-source-transform.d.ts +4 -0
- package/dist/semantics/borrowed-builtin-call-bind-source-transform.js +341 -0
- package/dist/semantics/callable-origins.d.ts +46 -0
- package/dist/semantics/callable-origins.js +354 -0
- package/dist/semantics/class-alias.d.ts +7 -0
- package/dist/semantics/class-alias.js +37 -0
- package/dist/semantics/class-heritage.d.ts +34 -0
- package/dist/semantics/class-heritage.js +104 -0
- package/dist/semantics/commonjs-wrapper.d.ts +69 -0
- package/dist/semantics/commonjs-wrapper.js +231 -0
- package/dist/semantics/constructor-slot-subclasses.d.ts +28 -0
- package/dist/semantics/constructor-slot-subclasses.js +112 -0
- package/dist/semantics/declaration-overlay-transform.d.ts +35 -0
- package/dist/semantics/declaration-overlay-transform.js +2157 -0
- package/dist/semantics/define-property-source-transform.d.ts +4 -0
- package/dist/semantics/define-property-source-transform.js +437 -0
- package/dist/semantics/diagnostic-source-preparation.d.ts +24 -0
- package/dist/semantics/diagnostic-source-preparation.js +82 -0
- package/dist/semantics/documentation-ranges.d.ts +22 -0
- package/dist/semantics/documentation-ranges.js +36 -0
- package/dist/semantics/dynamic-fallback.d.ts +86 -0
- package/dist/semantics/dynamic-fallback.js +249 -0
- package/dist/semantics/frontend-timing.d.ts +6 -0
- package/dist/semantics/frontend-timing.js +35 -0
- package/dist/semantics/frontend.d.ts +504 -0
- package/dist/semantics/frontend.js +1157 -0
- package/dist/semantics/host-declaration-provenance.d.ts +11 -0
- package/dist/semantics/host-declaration-provenance.js +18 -0
- package/dist/semantics/host-methods.d.ts +24 -0
- package/dist/semantics/host-methods.js +74 -0
- package/dist/semantics/host-protocols.d.ts +429 -0
- package/dist/semantics/host-protocols.js +1501 -0
- package/dist/semantics/inherited-accessor.d.ts +7 -0
- package/dist/semantics/inherited-accessor.js +48 -0
- package/dist/semantics/interface-families.d.ts +70 -0
- package/dist/semantics/interface-families.js +180 -0
- package/dist/semantics/interface-implementors.d.ts +53 -0
- package/dist/semantics/interface-implementors.js +87 -0
- package/dist/semantics/jsdoc-namepath-transform.d.ts +4 -0
- package/dist/semantics/jsdoc-namepath-transform.js +85 -0
- package/dist/semantics/model/coverage.d.ts +68 -0
- package/dist/semantics/model/coverage.js +73 -0
- package/dist/semantics/model/edges.d.ts +103 -0
- package/dist/semantics/model/edges.js +20 -0
- package/dist/semantics/model/graph.d.ts +55 -0
- package/dist/semantics/model/graph.js +129 -0
- package/dist/semantics/model/operands.d.ts +159 -0
- package/dist/semantics/model/operands.js +26 -0
- package/dist/semantics/model/operations.d.ts +496 -0
- package/dist/semantics/model/operations.js +2 -0
- package/dist/semantics/model/primitive-domain.d.ts +26 -0
- package/dist/semantics/model/primitive-domain.js +38 -0
- package/dist/semantics/model/selected-signature.d.ts +261 -0
- package/dist/semantics/model/selected-signature.js +55 -0
- package/dist/semantics/model/structural-type-table.d.ts +93 -0
- package/dist/semantics/model/structural-type-table.js +237 -0
- package/dist/semantics/model/structural-types.d.ts +367 -0
- package/dist/semantics/model/structural-types.js +200 -0
- package/dist/semantics/module-resolution.d.ts +23 -0
- package/dist/semantics/module-resolution.js +227 -0
- package/dist/semantics/new-callee-class-tag-source-transform.d.ts +4 -0
- package/dist/semantics/new-callee-class-tag-source-transform.js +64 -0
- package/dist/semantics/node-project.d.ts +13 -0
- package/dist/semantics/node-project.js +107 -0
- package/dist/semantics/node-source-hooks.d.ts +1 -0
- package/dist/semantics/node-source-hooks.js +63 -0
- package/dist/semantics/normalize/absent-globals.d.ts +143 -0
- package/dist/semantics/normalize/absent-globals.js +191 -0
- package/dist/semantics/normalize/arguments-objects.d.ts +43 -0
- package/dist/semantics/normalize/arguments-objects.js +60 -0
- package/dist/semantics/normalize/asserted-arm-absence.d.ts +28 -0
- package/dist/semantics/normalize/asserted-arm-absence.js +61 -0
- package/dist/semantics/normalize/assignment-patterns.d.ts +70 -0
- package/dist/semantics/normalize/assignment-patterns.js +147 -0
- package/dist/semantics/normalize/bag-absence.d.ts +8 -0
- package/dist/semantics/normalize/bag-absence.js +42 -0
- package/dist/semantics/normalize/binding-fixpoint.d.ts +36 -0
- package/dist/semantics/normalize/binding-fixpoint.js +140 -0
- package/dist/semantics/normalize/callback-parameter-contracts.d.ts +16 -0
- package/dist/semantics/normalize/callback-parameter-contracts.js +91 -0
- package/dist/semantics/normalize/cells/agreement.d.ts +46 -0
- package/dist/semantics/normalize/cells/agreement.js +34 -0
- package/dist/semantics/normalize/cells/candidates.d.ts +17 -0
- package/dist/semantics/normalize/cells/candidates.js +35 -0
- package/dist/semantics/normalize/cells/facts.d.ts +19 -0
- package/dist/semantics/normalize/cells/facts.js +90 -0
- package/dist/semantics/normalize/cells/index.d.ts +10 -0
- package/dist/semantics/normalize/cells/index.js +6 -0
- package/dist/semantics/normalize/cells/model.d.ts +98 -0
- package/dist/semantics/normalize/cells/model.js +2 -0
- package/dist/semantics/normalize/cells/policies/bag.d.ts +44 -0
- package/dist/semantics/normalize/cells/policies/bag.js +114 -0
- package/dist/semantics/normalize/cells/policies/collection.d.ts +42 -0
- package/dist/semantics/normalize/cells/policies/collection.js +218 -0
- package/dist/semantics/normalize/cells/policies/field.d.ts +28 -0
- package/dist/semantics/normalize/cells/policies/field.js +40 -0
- package/dist/semantics/normalize/cells/policies/index.d.ts +49 -0
- package/dist/semantics/normalize/cells/policies/index.js +58 -0
- package/dist/semantics/normalize/cells/policies/local.d.ts +18 -0
- package/dist/semantics/normalize/cells/policies/local.js +37 -0
- package/dist/semantics/normalize/cells/policies/parameter.d.ts +28 -0
- package/dist/semantics/normalize/cells/policies/parameter.js +39 -0
- package/dist/semantics/normalize/cells/policies/return.d.ts +26 -0
- package/dist/semantics/normalize/cells/policies/return.js +45 -0
- package/dist/semantics/normalize/cells/policies/shared.d.ts +33 -0
- package/dist/semantics/normalize/cells/policies/shared.js +45 -0
- package/dist/semantics/normalize/cells/policy.d.ts +72 -0
- package/dist/semantics/normalize/cells/policy.js +18 -0
- package/dist/semantics/normalize/cells/registry.d.ts +14 -0
- package/dist/semantics/normalize/cells/registry.js +17 -0
- package/dist/semantics/normalize/census-refusal.d.ts +62 -0
- package/dist/semantics/normalize/census-refusal.js +27 -0
- package/dist/semantics/normalize/census.d.ts +109 -0
- package/dist/semantics/normalize/census.js +667 -0
- package/dist/semantics/normalize/collection-bindings.d.ts +278 -0
- package/dist/semantics/normalize/collection-bindings.js +677 -0
- package/dist/semantics/normalize/commonjs-module-record.d.ts +21 -0
- package/dist/semantics/normalize/commonjs-module-record.js +289 -0
- package/dist/semantics/normalize/commonjs-require.d.ts +13 -0
- package/dist/semantics/normalize/commonjs-require.js +1527 -0
- package/dist/semantics/normalize/contribution.d.ts +63 -0
- package/dist/semantics/normalize/contribution.js +172 -0
- package/dist/semantics/normalize/dead-typeof-guards.d.ts +64 -0
- package/dist/semantics/normalize/dead-typeof-guards.js +152 -0
- package/dist/semantics/normalize/deferred-intrinsic-protocols.d.ts +57 -0
- package/dist/semantics/normalize/deferred-intrinsic-protocols.js +109 -0
- package/dist/semantics/normalize/derived-expression-type.d.ts +1070 -0
- package/dist/semantics/normalize/derived-expression-type.js +3463 -0
- package/dist/semantics/normalize/evaluation-order.d.ts +16 -0
- package/dist/semantics/normalize/evaluation-order.js +37 -0
- package/dist/semantics/normalize/field-bindings.d.ts +167 -0
- package/dist/semantics/normalize/field-bindings.js +1125 -0
- package/dist/semantics/normalize/flow/array-element-continuation.d.ts +27 -0
- package/dist/semantics/normalize/flow/array-element-continuation.js +1452 -0
- package/dist/semantics/normalize/flow/callable-array-origins.d.ts +42 -0
- package/dist/semantics/normalize/flow/callable-array-origins.js +318 -0
- package/dist/semantics/normalize/flow/callable-completions.d.ts +45 -0
- package/dist/semantics/normalize/flow/callable-completions.js +82 -0
- package/dist/semantics/normalize/flow/callable-reach.d.ts +237 -0
- package/dist/semantics/normalize/flow/callable-reach.js +7174 -0
- package/dist/semantics/normalize/flow/class-family-member-read.d.ts +16 -0
- package/dist/semantics/normalize/flow/class-family-member-read.js +992 -0
- package/dist/semantics/normalize/flow/collection-value-continuation.d.ts +21 -0
- package/dist/semantics/normalize/flow/collection-value-continuation.js +192 -0
- package/dist/semantics/normalize/flow/component-solver.d.ts +199 -0
- package/dist/semantics/normalize/flow/component-solver.js +587 -0
- package/dist/semantics/normalize/flow/computed-key-set.d.ts +84 -0
- package/dist/semantics/normalize/flow/computed-key-set.js +660 -0
- package/dist/semantics/normalize/flow/export-importers.d.ts +24 -0
- package/dist/semantics/normalize/flow/export-importers.js +269 -0
- package/dist/semantics/normalize/flow/host-text-sink.d.ts +25 -0
- package/dist/semantics/normalize/flow/host-text-sink.js +87 -0
- package/dist/semantics/normalize/flow/intrinsic-array-callback-frames.d.ts +84 -0
- package/dist/semantics/normalize/flow/intrinsic-array-callback-frames.js +180 -0
- package/dist/semantics/normalize/flow/intrinsic-data-definition.d.ts +35 -0
- package/dist/semantics/normalize/flow/intrinsic-data-definition.js +140 -0
- package/dist/semantics/normalize/flow/invocation-facts.d.ts +98 -0
- package/dist/semantics/normalize/flow/invocation-facts.js +257 -0
- package/dist/semantics/normalize/flow/member-call-forwarding.d.ts +122 -0
- package/dist/semantics/normalize/flow/member-call-forwarding.js +835 -0
- package/dist/semantics/normalize/flow/model.d.ts +357 -0
- package/dist/semantics/normalize/flow/model.js +177 -0
- package/dist/semantics/normalize/flow/native-collection-protocol.d.ts +24 -0
- package/dist/semantics/normalize/flow/native-collection-protocol.js +252 -0
- package/dist/semantics/normalize/flow/node-path-token.d.ts +3 -0
- package/dist/semantics/normalize/flow/node-path-token.js +53 -0
- package/dist/semantics/normalize/flow/object-binding-continuation.d.ts +11 -0
- package/dist/semantics/normalize/flow/object-binding-continuation.js +42 -0
- package/dist/semantics/normalize/flow/origin-authority.d.ts +56 -0
- package/dist/semantics/normalize/flow/origin-authority.js +2 -0
- package/dist/semantics/normalize/flow/owned-class-receivers.d.ts +35 -0
- package/dist/semantics/normalize/flow/owned-class-receivers.js +191 -0
- package/dist/semantics/normalize/flow/parameter-values.d.ts +27 -0
- package/dist/semantics/normalize/flow/parameter-values.js +251 -0
- package/dist/semantics/normalize/flow/proof-hypotheses.d.ts +66 -0
- package/dist/semantics/normalize/flow/proof-hypotheses.js +162 -0
- package/dist/semantics/normalize/flow/record-alias-closure.d.ts +27 -0
- package/dist/semantics/normalize/flow/record-alias-closure.js +298 -0
- package/dist/semantics/normalize/flow/seeded-origins.d.ts +43 -0
- package/dist/semantics/normalize/flow/seeded-origins.js +54 -0
- package/dist/semantics/normalize/flow/source-class-data.d.ts +132 -0
- package/dist/semantics/normalize/flow/source-class-data.js +838 -0
- package/dist/semantics/normalize/flow/source-class-instanceof.d.ts +13 -0
- package/dist/semantics/normalize/flow/source-class-instanceof.js +37 -0
- package/dist/semantics/normalize/flow/source-class-static-data.d.ts +16 -0
- package/dist/semantics/normalize/flow/source-class-static-data.js +47 -0
- package/dist/semantics/normalize/flow/source-construction-frames.d.ts +12 -0
- package/dist/semantics/normalize/flow/source-construction-frames.js +118 -0
- package/dist/semantics/normalize/flow/source-invocation-frame-layout.d.ts +34 -0
- package/dist/semantics/normalize/flow/source-invocation-frame-layout.js +78 -0
- package/dist/semantics/normalize/flow/source-invocation-receiver.d.ts +37 -0
- package/dist/semantics/normalize/flow/source-invocation-receiver.js +95 -0
- package/dist/semantics/normalize/flow/source-prototype-method-identity.d.ts +23 -0
- package/dist/semantics/normalize/flow/source-prototype-method-identity.js +81 -0
- package/dist/semantics/normalize/flow/source-record-data.d.ts +29 -0
- package/dist/semantics/normalize/flow/source-record-data.js +626 -0
- package/dist/semantics/normalize/flow/source-value-session.d.ts +77 -0
- package/dist/semantics/normalize/flow/source-value-session.js +3089 -0
- package/dist/semantics/normalize/flow/targets.d.ts +118 -0
- package/dist/semantics/normalize/flow/targets.js +405 -0
- package/dist/semantics/normalize/flow/value-flow.d.ts +36 -0
- package/dist/semantics/normalize/flow/value-flow.js +823 -0
- package/dist/semantics/normalize/flow/value-provenance.d.ts +31 -0
- package/dist/semantics/normalize/flow/value-provenance.js +112 -0
- package/dist/semantics/normalize/gating.d.ts +51 -0
- package/dist/semantics/normalize/gating.js +560 -0
- package/dist/semantics/normalize/generic-function-choice.d.ts +31 -0
- package/dist/semantics/normalize/generic-function-choice.js +115 -0
- package/dist/semantics/normalize/global-host-mutations.d.ts +51 -0
- package/dist/semantics/normalize/global-host-mutations.js +5989 -0
- package/dist/semantics/normalize/host-effect-contracts.d.ts +77 -0
- package/dist/semantics/normalize/host-effect-contracts.js +143 -0
- package/dist/semantics/normalize/host-mutation-computed-keys.d.ts +38 -0
- package/dist/semantics/normalize/host-mutation-computed-keys.js +26 -0
- package/dist/semantics/normalize/host-mutation-key-reader.d.ts +66 -0
- package/dist/semantics/normalize/host-mutation-key-reader.js +192 -0
- package/dist/semantics/normalize/host-mutation-keys.d.ts +114 -0
- package/dist/semantics/normalize/host-mutation-keys.js +183 -0
- package/dist/semantics/normalize/identities.d.ts +172 -0
- package/dist/semantics/normalize/identities.js +426 -0
- package/dist/semantics/normalize/implicit-arguments-tuple.d.ts +97 -0
- package/dist/semantics/normalize/implicit-arguments-tuple.js +197 -0
- package/dist/semantics/normalize/implicit-arguments.d.ts +11 -0
- package/dist/semantics/normalize/implicit-arguments.js +39 -0
- package/dist/semantics/normalize/instantiation.d.ts +73 -0
- package/dist/semantics/normalize/instantiation.js +399 -0
- package/dist/semantics/normalize/intrinsic-property-call.d.ts +18 -0
- package/dist/semantics/normalize/intrinsic-property-call.js +69 -0
- package/dist/semantics/normalize/intrinsic-prototype.d.ts +41 -0
- package/dist/semantics/normalize/intrinsic-prototype.js +87 -0
- package/dist/semantics/normalize/intrinsic-static-member.d.ts +14 -0
- package/dist/semantics/normalize/intrinsic-static-member.js +23 -0
- package/dist/semantics/normalize/jsdoc-type-names.d.ts +32 -0
- package/dist/semantics/normalize/jsdoc-type-names.js +512 -0
- package/dist/semantics/normalize/keyof.d.ts +32 -0
- package/dist/semantics/normalize/keyof.js +110 -0
- package/dist/semantics/normalize/local-bindings.d.ts +176 -0
- package/dist/semantics/normalize/local-bindings.js +1826 -0
- package/dist/semantics/normalize/logical-result-type.d.ts +16 -0
- package/dist/semantics/normalize/logical-result-type.js +102 -0
- package/dist/semantics/normalize/namespace-paths.d.ts +57 -0
- package/dist/semantics/normalize/namespace-paths.js +108 -0
- package/dist/semantics/normalize/normalize.d.ts +57 -0
- package/dist/semantics/normalize/normalize.js +68 -0
- package/dist/semantics/normalize/object-bag-bindings.d.ts +305 -0
- package/dist/semantics/normalize/object-bag-bindings.js +1290 -0
- package/dist/semantics/normalize/omitted-stated-parameter.d.ts +53 -0
- package/dist/semantics/normalize/omitted-stated-parameter.js +59 -0
- package/dist/semantics/normalize/open-type-form.d.ts +10 -0
- package/dist/semantics/normalize/open-type-form.js +32 -0
- package/dist/semantics/normalize/parameter-bindings.d.ts +361 -0
- package/dist/semantics/normalize/parameter-bindings.js +3339 -0
- package/dist/semantics/normalize/parameter-slot.d.ts +264 -0
- package/dist/semantics/normalize/parameter-slot.js +491 -0
- package/dist/semantics/normalize/physical-overload-result.d.ts +77 -0
- package/dist/semantics/normalize/physical-overload-result.js +99 -0
- package/dist/semantics/normalize/primitive-property-absence.d.ts +12 -0
- package/dist/semantics/normalize/primitive-property-absence.js +60 -0
- package/dist/semantics/normalize/producer-context.d.ts +376 -0
- package/dist/semantics/normalize/producer-context.js +1 -0
- package/dist/semantics/normalize/producers/allocations.d.ts +3 -0
- package/dist/semantics/normalize/producers/allocations.js +863 -0
- package/dist/semantics/normalize/producers/binding-kind.d.ts +37 -0
- package/dist/semantics/normalize/producers/binding-kind.js +36 -0
- package/dist/semantics/normalize/producers/bindings.d.ts +85 -0
- package/dist/semantics/normalize/producers/bindings.js +710 -0
- package/dist/semantics/normalize/producers/boundary.d.ts +34 -0
- package/dist/semantics/normalize/producers/boundary.js +123 -0
- package/dist/semantics/normalize/producers/class-lifecycle.d.ts +3 -0
- package/dist/semantics/normalize/producers/class-lifecycle.js +902 -0
- package/dist/semantics/normalize/producers/computations.d.ts +3 -0
- package/dist/semantics/normalize/producers/computations.js +613 -0
- package/dist/semantics/normalize/producers/control-loops.d.ts +30 -0
- package/dist/semantics/normalize/producers/control-loops.js +91 -0
- package/dist/semantics/normalize/producers/control.d.ts +30 -0
- package/dist/semantics/normalize/producers/control.js +923 -0
- package/dist/semantics/normalize/producers/declaration-lifecycle.d.ts +3 -0
- package/dist/semantics/normalize/producers/declaration-lifecycle.js +390 -0
- package/dist/semantics/normalize/producers/destructuring.d.ts +45 -0
- package/dist/semantics/normalize/producers/destructuring.js +1180 -0
- package/dist/semantics/normalize/producers/dynamic-language.d.ts +3 -0
- package/dist/semantics/normalize/producers/dynamic-language.js +70 -0
- package/dist/semantics/normalize/producers/erasure.d.ts +51 -0
- package/dist/semantics/normalize/producers/erasure.js +90 -0
- package/dist/semantics/normalize/producers/installed.d.ts +3 -0
- package/dist/semantics/normalize/producers/installed.js +55 -0
- package/dist/semantics/normalize/producers/invocations.d.ts +35 -0
- package/dist/semantics/normalize/producers/invocations.js +1796 -0
- package/dist/semantics/normalize/producers/iteration-yield.d.ts +59 -0
- package/dist/semantics/normalize/producers/iteration-yield.js +235 -0
- package/dist/semantics/normalize/producers/jsx.d.ts +3 -0
- package/dist/semantics/normalize/producers/jsx.js +360 -0
- package/dist/semantics/normalize/producers/mint.d.ts +39 -0
- package/dist/semantics/normalize/producers/mint.js +44 -0
- package/dist/semantics/normalize/producers/nullish.d.ts +16 -0
- package/dist/semantics/normalize/producers/nullish.js +27 -0
- package/dist/semantics/normalize/producers/object-assignment.d.ts +8 -0
- package/dist/semantics/normalize/producers/object-assignment.js +204 -0
- package/dist/semantics/normalize/producers/object-tag.d.ts +9 -0
- package/dist/semantics/normalize/producers/object-tag.js +119 -0
- package/dist/semantics/normalize/producers/optional-chain.d.ts +44 -0
- package/dist/semantics/normalize/producers/optional-chain.js +75 -0
- package/dist/semantics/normalize/producers/properties.d.ts +21 -0
- package/dist/semantics/normalize/producers/properties.js +1053 -0
- package/dist/semantics/normalize/producers/protocol.d.ts +67 -0
- package/dist/semantics/normalize/producers/protocol.js +695 -0
- package/dist/semantics/normalize/producers/references.d.ts +53 -0
- package/dist/semantics/normalize/producers/references.js +1027 -0
- package/dist/semantics/normalize/producers/shared.d.ts +561 -0
- package/dist/semantics/normalize/producers/shared.js +1683 -0
- package/dist/semantics/normalize/producers/spread-arguments.d.ts +72 -0
- package/dist/semantics/normalize/producers/spread-arguments.js +375 -0
- package/dist/semantics/normalize/producers/tagged-template.d.ts +5 -0
- package/dist/semantics/normalize/producers/tagged-template.js +307 -0
- package/dist/semantics/normalize/producers/tuple-spread.d.ts +189 -0
- package/dist/semantics/normalize/producers/tuple-spread.js +279 -0
- package/dist/semantics/normalize/property-key-domain.d.ts +36 -0
- package/dist/semantics/normalize/property-key-domain.js +150 -0
- package/dist/semantics/normalize/reachability.d.ts +189 -0
- package/dist/semantics/normalize/reachability.js +1057 -0
- package/dist/semantics/normalize/reassigned-bindings.d.ts +13 -0
- package/dist/semantics/normalize/reassigned-bindings.js +41 -0
- package/dist/semantics/normalize/record-storage-families.d.ts +11 -0
- package/dist/semantics/normalize/record-storage-families.js +109 -0
- package/dist/semantics/normalize/return-bindings.d.ts +260 -0
- package/dist/semantics/normalize/return-bindings.js +1311 -0
- package/dist/semantics/normalize/return-paths.d.ts +2 -0
- package/dist/semantics/normalize/return-paths.js +28 -0
- package/dist/semantics/normalize/script-global-redefinition.d.ts +44 -0
- package/dist/semantics/normalize/script-global-redefinition.js +75 -0
- package/dist/semantics/normalize/specialization.d.ts +201 -0
- package/dist/semantics/normalize/specialization.js +1824 -0
- package/dist/semantics/normalize/structural-array-element.d.ts +176 -0
- package/dist/semantics/normalize/structural-array-element.js +700 -0
- package/dist/semantics/normalize/structural-array-read.d.ts +13 -0
- package/dist/semantics/normalize/structural-array-read.js +124 -0
- package/dist/semantics/normalize/structural-callable.d.ts +12 -0
- package/dist/semantics/normalize/structural-callable.js +82 -0
- package/dist/semantics/normalize/structural-creation-order.d.ts +32 -0
- package/dist/semantics/normalize/structural-creation-order.js +111 -0
- package/dist/semantics/normalize/structural-declarations.d.ts +395 -0
- package/dist/semantics/normalize/structural-declarations.js +968 -0
- package/dist/semantics/normalize/structural-declared-body.d.ts +25 -0
- package/dist/semantics/normalize/structural-declared-body.js +147 -0
- package/dist/semantics/normalize/structural-generics.d.ts +56 -0
- package/dist/semantics/normalize/structural-generics.js +120 -0
- package/dist/semantics/normalize/structural-indexed-access.d.ts +11 -0
- package/dist/semantics/normalize/structural-indexed-access.js +126 -0
- package/dist/semantics/normalize/structural-instantiated-member.d.ts +64 -0
- package/dist/semantics/normalize/structural-instantiated-member.js +407 -0
- package/dist/semantics/normalize/structural-joins.d.ts +44 -0
- package/dist/semantics/normalize/structural-joins.js +143 -0
- package/dist/semantics/normalize/structural-layout-relevance.d.ts +29 -0
- package/dist/semantics/normalize/structural-layout-relevance.js +391 -0
- package/dist/semantics/normalize/structural-layout-type.d.ts +11 -0
- package/dist/semantics/normalize/structural-layout-type.js +1468 -0
- package/dist/semantics/normalize/structural-leaves.d.ts +49 -0
- package/dist/semantics/normalize/structural-leaves.js +125 -0
- package/dist/semantics/normalize/structural-local-union.d.ts +13 -0
- package/dist/semantics/normalize/structural-local-union.js +133 -0
- package/dist/semantics/normalize/structural-members.d.ts +26 -0
- package/dist/semantics/normalize/structural-members.js +84 -0
- package/dist/semantics/normalize/structural-mutable-method.d.ts +15 -0
- package/dist/semantics/normalize/structural-mutable-method.js +109 -0
- package/dist/semantics/normalize/structural-parts.d.ts +131 -0
- package/dist/semantics/normalize/structural-parts.js +737 -0
- package/dist/semantics/normalize/structural-receiver.d.ts +66 -0
- package/dist/semantics/normalize/structural-receiver.js +551 -0
- package/dist/semantics/normalize/structural-rules.d.ts +112 -0
- package/dist/semantics/normalize/structural-rules.js +93 -0
- package/dist/semantics/normalize/structural-self-reference.d.ts +150 -0
- package/dist/semantics/normalize/structural-self-reference.js +494 -0
- package/dist/semantics/normalize/structural.d.ts +202 -0
- package/dist/semantics/normalize/structural.js +4218 -0
- package/dist/semantics/normalize/unreduced-type-form.d.ts +41 -0
- package/dist/semantics/normalize/unreduced-type-form.js +53 -0
- package/dist/semantics/normalize/unresolvable-names.d.ts +56 -0
- package/dist/semantics/normalize/unresolvable-names.js +140 -0
- package/dist/semantics/package-sources.d.ts +16 -0
- package/dist/semantics/package-sources.js +365 -0
- package/dist/semantics/program.d.ts +151 -0
- package/dist/semantics/program.js +667 -0
- package/dist/semantics/prototype-install-source-transform.d.ts +4 -0
- package/dist/semantics/prototype-install-source-transform.js +341 -0
- package/dist/semantics/prototype-object-class-source-transform.d.ts +4 -0
- package/dist/semantics/prototype-object-class-source-transform.js +525 -0
- package/dist/semantics/prototype-reparenting.d.ts +50 -0
- package/dist/semantics/prototype-reparenting.js +317 -0
- package/dist/semantics/stable-checker.d.ts +10 -0
- package/dist/semantics/stable-checker.js +148 -0
- package/dist/semantics/subclass-member-overlay-transform.d.ts +35 -0
- package/dist/semantics/subclass-member-overlay-transform.js +1418 -0
- package/dist/semantics/symbol-keyed-expando-source-transform.d.ts +4 -0
- package/dist/semantics/symbol-keyed-expando-source-transform.js +66 -0
- package/dist/semantics/this-constructor-source-transform.d.ts +4 -0
- package/dist/semantics/this-constructor-source-transform.js +122 -0
- package/dist/semantics/uninstantiable-classes.d.ts +22 -0
- package/dist/semantics/uninstantiable-classes.js +75 -0
- package/dist/targets/cpp/balanced-units.d.ts +3 -0
- package/dist/targets/cpp/balanced-units.js +58 -0
- package/dist/targets/cpp/borrowed-call-entry.d.ts +30 -0
- package/dist/targets/cpp/borrowed-call-entry.js +68 -0
- package/dist/targets/cpp/captures.d.ts +68 -0
- package/dist/targets/cpp/captures.js +269 -0
- package/dist/targets/cpp/class-layout.d.ts +313 -0
- package/dist/targets/cpp/class-layout.js +483 -0
- package/dist/targets/cpp/class-properties/computed-method-value.d.ts +25 -0
- package/dist/targets/cpp/class-properties/computed-method-value.js +22 -0
- package/dist/targets/cpp/class-properties/emit-class-properties.d.ts +216 -0
- package/dist/targets/cpp/class-properties/emit-class-properties.js +917 -0
- package/dist/targets/cpp/class-properties/native-prototype.d.ts +11 -0
- package/dist/targets/cpp/class-properties/native-prototype.js +101 -0
- package/dist/targets/cpp/class-ref-transport.d.ts +12 -0
- package/dist/targets/cpp/class-ref-transport.js +32 -0
- package/dist/targets/cpp/conversions.d.ts +3 -0
- package/dist/targets/cpp/conversions.js +2027 -0
- package/dist/targets/cpp/deferral-safety.d.ts +82 -0
- package/dist/targets/cpp/deferral-safety.js +86 -0
- package/dist/targets/cpp/direct-call-receivers.d.ts +37 -0
- package/dist/targets/cpp/direct-call-receivers.js +79 -0
- package/dist/targets/cpp/document.d.ts +74 -0
- package/dist/targets/cpp/document.js +106 -0
- package/dist/targets/cpp/emit-allocation.d.ts +60 -0
- package/dist/targets/cpp/emit-allocation.js +573 -0
- package/dist/targets/cpp/emit-arrays.d.ts +119 -0
- package/dist/targets/cpp/emit-arrays.js +1047 -0
- package/dist/targets/cpp/emit-binding-reference.d.ts +17 -0
- package/dist/targets/cpp/emit-binding-reference.js +120 -0
- package/dist/targets/cpp/emit-bindings.d.ts +158 -0
- package/dist/targets/cpp/emit-bindings.js +769 -0
- package/dist/targets/cpp/emit-buffers.d.ts +156 -0
- package/dist/targets/cpp/emit-buffers.js +573 -0
- package/dist/targets/cpp/emit-callable.d.ts +230 -0
- package/dist/targets/cpp/emit-callable.js +2154 -0
- package/dist/targets/cpp/emit-carrier-members.d.ts +406 -0
- package/dist/targets/cpp/emit-carrier-members.js +1224 -0
- package/dist/targets/cpp/emit-coercion.d.ts +26 -0
- package/dist/targets/cpp/emit-coercion.js +39 -0
- package/dist/targets/cpp/emit-context.d.ts +1882 -0
- package/dist/targets/cpp/emit-context.js +904 -0
- package/dist/targets/cpp/emit-dynamic-properties.d.ts +174 -0
- package/dist/targets/cpp/emit-dynamic-properties.js +1249 -0
- package/dist/targets/cpp/emit-equality.d.ts +39 -0
- package/dist/targets/cpp/emit-equality.js +472 -0
- package/dist/targets/cpp/emit-exceptions.d.ts +104 -0
- package/dist/targets/cpp/emit-exceptions.js +513 -0
- package/dist/targets/cpp/emit-field-owner.d.ts +4 -0
- package/dist/targets/cpp/emit-field-owner.js +27 -0
- package/dist/targets/cpp/emit-in.d.ts +31 -0
- package/dist/targets/cpp/emit-in.js +426 -0
- package/dist/targets/cpp/emit-instanceof.d.ts +19 -0
- package/dist/targets/cpp/emit-instanceof.js +601 -0
- package/dist/targets/cpp/emit-integers.d.ts +68 -0
- package/dist/targets/cpp/emit-integers.js +184 -0
- package/dist/targets/cpp/emit-iterator.d.ts +100 -0
- package/dist/targets/cpp/emit-iterator.js +1137 -0
- package/dist/targets/cpp/emit-json.d.ts +73 -0
- package/dist/targets/cpp/emit-json.js +823 -0
- package/dist/targets/cpp/emit-jsx.d.ts +74 -0
- package/dist/targets/cpp/emit-jsx.js +806 -0
- package/dist/targets/cpp/emit-mixed-binary.d.ts +51 -0
- package/dist/targets/cpp/emit-mixed-binary.js +60 -0
- package/dist/targets/cpp/emit-namespaces.d.ts +101 -0
- package/dist/targets/cpp/emit-namespaces.js +133 -0
- package/dist/targets/cpp/emit-narrowing.d.ts +738 -0
- package/dist/targets/cpp/emit-narrowing.js +3967 -0
- package/dist/targets/cpp/emit-native-equality.d.ts +3 -0
- package/dist/targets/cpp/emit-native-equality.js +14 -0
- package/dist/targets/cpp/emit-native-selection.d.ts +5 -0
- package/dist/targets/cpp/emit-native-selection.js +37 -0
- package/dist/targets/cpp/emit-object-tag.d.ts +4 -0
- package/dist/targets/cpp/emit-object-tag.js +108 -0
- package/dist/targets/cpp/emit-owned-record.d.ts +2 -0
- package/dist/targets/cpp/emit-owned-record.js +15 -0
- package/dist/targets/cpp/emit-presence.d.ts +78 -0
- package/dist/targets/cpp/emit-presence.js +376 -0
- package/dist/targets/cpp/emit-properties.d.ts +105 -0
- package/dist/targets/cpp/emit-properties.js +1640 -0
- package/dist/targets/cpp/emit-record-view.d.ts +20 -0
- package/dist/targets/cpp/emit-record-view.js +354 -0
- package/dist/targets/cpp/emit-return.d.ts +5 -0
- package/dist/targets/cpp/emit-return.js +237 -0
- package/dist/targets/cpp/emit-sum-widening.d.ts +10 -0
- package/dist/targets/cpp/emit-sum-widening.js +69 -0
- package/dist/targets/cpp/emit-tonumber.d.ts +38 -0
- package/dist/targets/cpp/emit-tonumber.js +177 -0
- package/dist/targets/cpp/emit-tostring.d.ts +92 -0
- package/dist/targets/cpp/emit-tostring.js +556 -0
- package/dist/targets/cpp/emit-typeof.d.ts +49 -0
- package/dist/targets/cpp/emit-typeof.js +317 -0
- package/dist/targets/cpp/emit-union-properties.d.ts +181 -0
- package/dist/targets/cpp/emit-union-properties.js +1281 -0
- package/dist/targets/cpp/emit.d.ts +45 -0
- package/dist/targets/cpp/emit.js +2225 -0
- package/dist/targets/cpp/error-types.d.ts +4 -0
- package/dist/targets/cpp/error-types.js +11 -0
- package/dist/targets/cpp/function-source-reads.d.ts +72 -0
- package/dist/targets/cpp/function-source-reads.js +148 -0
- package/dist/targets/cpp/host/atomics.d.ts +25 -0
- package/dist/targets/cpp/host/atomics.js +63 -0
- package/dist/targets/cpp/host/core-globals.d.ts +108 -0
- package/dist/targets/cpp/host/core-globals.js +158 -0
- package/dist/targets/cpp/host/dynamic-argument-members.d.ts +42 -0
- package/dist/targets/cpp/host/dynamic-argument-members.js +61 -0
- package/dist/targets/cpp/host/emit-host-arity.d.ts +139 -0
- package/dist/targets/cpp/host/emit-host-arity.js +232 -0
- package/dist/targets/cpp/host/emit-host-invoke.d.ts +91 -0
- package/dist/targets/cpp/host/emit-host-invoke.js +1105 -0
- package/dist/targets/cpp/host/emit-host-object.d.ts +55 -0
- package/dist/targets/cpp/host/emit-host-object.js +2206 -0
- package/dist/targets/cpp/host/emit-host-properties.d.ts +69 -0
- package/dist/targets/cpp/host/emit-host-properties.js +533 -0
- package/dist/targets/cpp/host/emit-host-reflect.d.ts +4 -0
- package/dist/targets/cpp/host/emit-host-reflect.js +180 -0
- package/dist/targets/cpp/host/emit-host-value.d.ts +120 -0
- package/dist/targets/cpp/host/emit-host-value.js +392 -0
- package/dist/targets/cpp/host/host-members.d.ts +505 -0
- package/dist/targets/cpp/host/host-members.js +819 -0
- package/dist/targets/cpp/host/host-method-aliases.d.ts +30 -0
- package/dist/targets/cpp/host/host-method-aliases.js +76 -0
- package/dist/targets/cpp/host/native-protocols.d.ts +47 -0
- package/dist/targets/cpp/host/native-protocols.js +183 -0
- package/dist/targets/cpp/host/object-protocol.d.ts +351 -0
- package/dist/targets/cpp/host/object-protocol.js +671 -0
- package/dist/targets/cpp/host-namespace-reads.d.ts +83 -0
- package/dist/targets/cpp/host-namespace-reads.js +113 -0
- package/dist/targets/cpp/manifest/capabilities.d.ts +39 -0
- package/dist/targets/cpp/manifest/capabilities.js +1484 -0
- package/dist/targets/cpp/manifest.d.ts +23 -0
- package/dist/targets/cpp/manifest.js +113 -0
- package/dist/targets/cpp/native-error-base.d.ts +38 -0
- package/dist/targets/cpp/native-error-base.js +74 -0
- package/dist/targets/cpp/native-narrowing-transport.d.ts +12 -0
- package/dist/targets/cpp/native-narrowing-transport.js +151 -0
- package/dist/targets/cpp/native-selection-helpers.d.ts +11 -0
- package/dist/targets/cpp/native-selection-helpers.js +46 -0
- package/dist/targets/cpp/native-symbol-keys.d.ts +8 -0
- package/dist/targets/cpp/native-symbol-keys.js +34 -0
- package/dist/targets/cpp/ownership.d.ts +43 -0
- package/dist/targets/cpp/ownership.js +38 -0
- package/dist/targets/cpp/owning-conversion-input.d.ts +14 -0
- package/dist/targets/cpp/owning-conversion-input.js +12 -0
- package/dist/targets/cpp/property-read-claims.d.ts +62 -0
- package/dist/targets/cpp/property-read-claims.js +23 -0
- package/dist/targets/cpp/property-store-claims.d.ts +62 -0
- package/dist/targets/cpp/property-store-claims.js +26 -0
- package/dist/targets/cpp/prototype/emit-prototype-array.d.ts +111 -0
- package/dist/targets/cpp/prototype/emit-prototype-array.js +602 -0
- package/dist/targets/cpp/prototype/emit-prototype-date.d.ts +133 -0
- package/dist/targets/cpp/prototype/emit-prototype-date.js +515 -0
- package/dist/targets/cpp/prototype/emit-prototype-error.d.ts +13 -0
- package/dist/targets/cpp/prototype/emit-prototype-error.js +54 -0
- package/dist/targets/cpp/prototype/emit-prototype-invoke.d.ts +34 -0
- package/dist/targets/cpp/prototype/emit-prototype-invoke.js +1003 -0
- package/dist/targets/cpp/prototype/emit-prototype-iterator.d.ts +47 -0
- package/dist/targets/cpp/prototype/emit-prototype-iterator.js +250 -0
- package/dist/targets/cpp/prototype/emit-prototype-promise.d.ts +46 -0
- package/dist/targets/cpp/prototype/emit-prototype-promise.js +143 -0
- package/dist/targets/cpp/prototype/emit-prototype-regexp.d.ts +335 -0
- package/dist/targets/cpp/prototype/emit-prototype-regexp.js +853 -0
- package/dist/targets/cpp/prototype/emit-prototype-string.d.ts +42 -0
- package/dist/targets/cpp/prototype/emit-prototype-string.js +252 -0
- package/dist/targets/cpp/prototype/prototype-method-reads.d.ts +25 -0
- package/dist/targets/cpp/prototype/prototype-method-reads.js +182 -0
- package/dist/targets/cpp/reactive-dependencies.d.ts +140 -0
- package/dist/targets/cpp/reactive-dependencies.js +432 -0
- package/dist/targets/cpp/reactive-origins.d.ts +44 -0
- package/dist/targets/cpp/reactive-origins.js +82 -0
- package/dist/targets/cpp/records.d.ts +277 -0
- package/dist/targets/cpp/records.js +2427 -0
- package/dist/targets/cpp/recursive-containers.d.ts +43 -0
- package/dist/targets/cpp/recursive-containers.js +144 -0
- package/dist/targets/cpp/regexp-types.d.ts +56 -0
- package/dist/targets/cpp/regexp-types.js +59 -0
- package/dist/targets/cpp/substrate.d.ts +125 -0
- package/dist/targets/cpp/substrate.js +12 -0
- package/dist/targets/cpp/translation-unit.d.ts +219 -0
- package/dist/targets/cpp/translation-unit.js +2063 -0
- package/dist/targets/cpp/types.d.ts +280 -0
- package/dist/targets/cpp/types.js +1135 -0
- package/dist/targets/cpp/virtual-methods.d.ts +95 -0
- package/dist/targets/cpp/virtual-methods.js +264 -0
- package/package.json +95 -0
- package/src/targets/cpp/runtime/gea_dynamic_proxy.h +824 -0
- package/src/targets/cpp/runtime/gea_eval.h +1376 -0
- package/src/targets/cpp/runtime/gea_native_class_prototype.h +44 -0
- package/src/targets/cpp/runtime/gea_runtime.h +29222 -0
- package/src/targets/cpp/runtime/gea_runtime_builtins.cpp +55 -0
|
@@ -0,0 +1,227 @@
|
|
|
1
|
+
import ts from 'typescript';
|
|
2
|
+
import { dirname, resolve } from 'node:path';
|
|
3
|
+
import { createPackageSourceHost } from './package-sources.js';
|
|
4
|
+
export const isDeclarationPath = (file) => /\.d\.(?:ts|mts|cts)$/.test(file);
|
|
5
|
+
export const moduleExtension = (file) => {
|
|
6
|
+
if (file.endsWith('.d.mts'))
|
|
7
|
+
return ts.Extension.Dmts;
|
|
8
|
+
if (file.endsWith('.d.cts'))
|
|
9
|
+
return ts.Extension.Dcts;
|
|
10
|
+
if (file.endsWith('.d.ts'))
|
|
11
|
+
return ts.Extension.Dts;
|
|
12
|
+
if (file.endsWith('.tsx'))
|
|
13
|
+
return ts.Extension.Tsx;
|
|
14
|
+
if (file.endsWith('.mts'))
|
|
15
|
+
return ts.Extension.Mts;
|
|
16
|
+
if (file.endsWith('.cts'))
|
|
17
|
+
return ts.Extension.Cts;
|
|
18
|
+
if (file.endsWith('.mjs'))
|
|
19
|
+
return ts.Extension.Mjs;
|
|
20
|
+
if (file.endsWith('.cjs'))
|
|
21
|
+
return ts.Extension.Cjs;
|
|
22
|
+
if (file.endsWith('.jsx'))
|
|
23
|
+
return ts.Extension.Jsx;
|
|
24
|
+
if (file.endsWith('.js'))
|
|
25
|
+
return ts.Extension.Js;
|
|
26
|
+
if (file.endsWith('.json'))
|
|
27
|
+
return ts.Extension.Json;
|
|
28
|
+
return ts.Extension.Ts;
|
|
29
|
+
};
|
|
30
|
+
/** The package that owns a resolved file, using the program host's own view. */
|
|
31
|
+
const packageRootOf = (file, host) => {
|
|
32
|
+
let directory = dirname(resolve(file));
|
|
33
|
+
for (;;) {
|
|
34
|
+
if (host.fileExists(`${directory}/package.json`))
|
|
35
|
+
return directory;
|
|
36
|
+
const parent = dirname(directory);
|
|
37
|
+
if (parent === directory)
|
|
38
|
+
return undefined;
|
|
39
|
+
directory = parent;
|
|
40
|
+
}
|
|
41
|
+
};
|
|
42
|
+
/**
|
|
43
|
+
* A declaration may describe an implementation only when the same package
|
|
44
|
+
* ships both. In particular, `@types/three` is a third party package and must
|
|
45
|
+
* not replace Three's real JavaScript source, including for type-only imports.
|
|
46
|
+
*/
|
|
47
|
+
const ownedDeclaration = (declaration, implementation, host) => {
|
|
48
|
+
if (!declaration || !implementation)
|
|
49
|
+
return declaration;
|
|
50
|
+
const declaredPackage = packageRootOf(declaration.resolvedFileName, host);
|
|
51
|
+
const implementedPackage = packageRootOf(implementation.resolvedFileName, host);
|
|
52
|
+
return declaredPackage !== undefined && declaredPackage === implementedPackage ? declaration : undefined;
|
|
53
|
+
};
|
|
54
|
+
/** Remove type-only lookup metadata, preserving runtime condition order and null exclusions. */
|
|
55
|
+
const runtimeConditions = (value) => {
|
|
56
|
+
if (Array.isArray(value))
|
|
57
|
+
return value.map(runtimeConditions);
|
|
58
|
+
if (value === null || typeof value !== 'object')
|
|
59
|
+
return value;
|
|
60
|
+
return Object.fromEntries(Object.entries(value)
|
|
61
|
+
.filter(([key]) => key !== 'types' && !key.startsWith('types@'))
|
|
62
|
+
.map(([key, entry]) => [key, runtimeConditions(entry)]));
|
|
63
|
+
};
|
|
64
|
+
/**
|
|
65
|
+
* Ask the same resolver two questions, through separate caches. Hiding declarations
|
|
66
|
+
* only on the implementation view keeps TypeScript's exports/imports, conditions,
|
|
67
|
+
* paths, package self references, and nested dependency search authoritative.
|
|
68
|
+
* No package names, source-directory guesses, or package code execution belong here.
|
|
69
|
+
*/
|
|
70
|
+
export const createModuleResolver = (host, options, declarationModules = new Set(), packageSources = []) => {
|
|
71
|
+
const currentDirectory = host.getCurrentDirectory?.() ?? ts.sys.getCurrentDirectory();
|
|
72
|
+
const canonical = ts.sys.useCaseSensitiveFileNames ? (file) => file : (file) => file.toLowerCase();
|
|
73
|
+
const typesCache = ts.createModuleResolutionCache(currentDirectory, canonical, options);
|
|
74
|
+
const runtimeCache = ts.createModuleResolutionCache(currentDirectory, canonical, options);
|
|
75
|
+
const sources = createPackageSourceHost(host, packageSources);
|
|
76
|
+
const manifests = new Map();
|
|
77
|
+
const runtimeHost = {
|
|
78
|
+
...sources.host,
|
|
79
|
+
fileExists: (file) => !isDeclarationPath(file) && sources.host.fileExists(file),
|
|
80
|
+
readFile: (file) => {
|
|
81
|
+
if (!file.endsWith('/package.json'))
|
|
82
|
+
return sources.host.readFile(file);
|
|
83
|
+
if (manifests.has(file))
|
|
84
|
+
return manifests.get(file);
|
|
85
|
+
const text = sources.host.readFile(file);
|
|
86
|
+
if (text === undefined)
|
|
87
|
+
return undefined;
|
|
88
|
+
let result = text;
|
|
89
|
+
try {
|
|
90
|
+
const manifest = JSON.parse(text);
|
|
91
|
+
if (manifest !== null && typeof manifest === 'object' && !Array.isArray(manifest)) {
|
|
92
|
+
const fields = Object.fromEntries(Object.entries(manifest).filter(([key]) => !['types', 'typings', 'typesVersions'].includes(key)));
|
|
93
|
+
if ('exports' in fields)
|
|
94
|
+
fields.exports = runtimeConditions(fields.exports);
|
|
95
|
+
if ('imports' in fields)
|
|
96
|
+
fields.imports = runtimeConditions(fields.imports);
|
|
97
|
+
result = JSON.stringify(fields);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
catch {
|
|
101
|
+
// Preserve malformed metadata for the resolver's own diagnostic behaviour.
|
|
102
|
+
}
|
|
103
|
+
manifests.set(file, result);
|
|
104
|
+
return result;
|
|
105
|
+
}
|
|
106
|
+
};
|
|
107
|
+
const nativeModule = (specifier) => declarationModules.has(specifier) ||
|
|
108
|
+
[...declarationModules].some((pattern) => pattern.endsWith('/*') && specifier.startsWith(pattern.slice(0, -1)));
|
|
109
|
+
return {
|
|
110
|
+
resolve: (specifier, containingFile, mode, statedTarget) => {
|
|
111
|
+
const typed = ts.resolveModuleName(specifier, containingFile, options, host, typesCache, undefined, mode).resolvedModule;
|
|
112
|
+
const native = nativeModule(specifier);
|
|
113
|
+
let declaration = typed && isDeclarationPath(typed.resolvedFileName) ? typed : undefined;
|
|
114
|
+
// A plugin that declares a module native owns its declarations, and the
|
|
115
|
+
// importing file is not always able to reach them: a package inside the
|
|
116
|
+
// module graph may import a peer the bundler resolved through the *app's*
|
|
117
|
+
// node_modules rather than its own, leaving `node_modules/@scope` empty
|
|
118
|
+
// next to the importer. The file the graph itself resolved to always lives
|
|
119
|
+
// inside the owning package, so ask again from there before concluding the
|
|
120
|
+
// declarations are missing -- otherwise the native package's runtime
|
|
121
|
+
// JavaScript is compiled as ordinary source and its classes collide with
|
|
122
|
+
// the host-bound ambient ones they shadow.
|
|
123
|
+
if (native && declaration === undefined && statedTarget !== undefined && !isDeclarationPath(statedTarget)) {
|
|
124
|
+
const owned = ts.resolveModuleName(specifier, statedTarget, options, host, typesCache, undefined, mode).resolvedModule;
|
|
125
|
+
if (owned && isDeclarationPath(owned.resolvedFileName))
|
|
126
|
+
declaration = owned;
|
|
127
|
+
}
|
|
128
|
+
if (native && declaration)
|
|
129
|
+
return { typeDeclaration: declaration, declaration, implementation: undefined, native };
|
|
130
|
+
if (statedTarget !== undefined) {
|
|
131
|
+
const target = { resolvedFileName: statedTarget, extension: moduleExtension(statedTarget), isExternalLibraryImport: false };
|
|
132
|
+
if (isDeclarationPath(statedTarget))
|
|
133
|
+
return { typeDeclaration: target, declaration: target, implementation: undefined, native: true };
|
|
134
|
+
// Fail closed rather than substituting source for a module a plugin
|
|
135
|
+
// declared native: no declarations is a broken installation, and the
|
|
136
|
+
// resulting "cannot find module" names it, where a source overlay would
|
|
137
|
+
// silently duplicate every host-bound type.
|
|
138
|
+
if (native)
|
|
139
|
+
return { typeDeclaration: undefined, declaration: undefined, implementation: undefined, native };
|
|
140
|
+
return {
|
|
141
|
+
typeDeclaration: declaration,
|
|
142
|
+
declaration: ownedDeclaration(declaration, target, host),
|
|
143
|
+
implementation: target,
|
|
144
|
+
native: false
|
|
145
|
+
};
|
|
146
|
+
}
|
|
147
|
+
// Relative imports inside declaration trees must continue to describe types.
|
|
148
|
+
// They never cause executable files to be substituted into those trees.
|
|
149
|
+
if (isDeclarationPath(containingFile)) {
|
|
150
|
+
return {
|
|
151
|
+
typeDeclaration: declaration,
|
|
152
|
+
declaration,
|
|
153
|
+
implementation: typed && !isDeclarationPath(typed.resolvedFileName) ? typed : undefined,
|
|
154
|
+
native
|
|
155
|
+
};
|
|
156
|
+
}
|
|
157
|
+
const resolved = ts.resolveModuleName(specifier, sources.containingFile(specifier, containingFile), options, runtimeHost, runtimeCache, undefined, mode).resolvedModule;
|
|
158
|
+
const source = resolved ? sources.sourceOf(resolved.resolvedFileName) : undefined;
|
|
159
|
+
const implementation = resolved && source ? { ...resolved, resolvedFileName: source, extension: moduleExtension(source) } : resolved;
|
|
160
|
+
return { typeDeclaration: declaration, declaration: ownedDeclaration(declaration, implementation, host), implementation, native };
|
|
161
|
+
}
|
|
162
|
+
};
|
|
163
|
+
};
|
|
164
|
+
export const typeOnlyModuleUse = (literal, checker, verbatim = false) => {
|
|
165
|
+
const erasedBinding = (name) => {
|
|
166
|
+
if (!checker || verbatim)
|
|
167
|
+
return false;
|
|
168
|
+
let symbol = checker.getSymbolAtLocation(name);
|
|
169
|
+
if (symbol && (symbol.flags & ts.SymbolFlags.Alias) !== 0)
|
|
170
|
+
symbol = checker.getAliasedSymbol(symbol);
|
|
171
|
+
return symbol !== undefined && (symbol.flags & ts.SymbolFlags.Value) === 0;
|
|
172
|
+
};
|
|
173
|
+
let node = literal.parent;
|
|
174
|
+
while (node) {
|
|
175
|
+
if (ts.isImportTypeNode(node) || ts.isJSDocImportTag(node))
|
|
176
|
+
return true;
|
|
177
|
+
if (ts.isImportDeclaration(node)) {
|
|
178
|
+
const clause = node.importClause;
|
|
179
|
+
if (clause?.isTypeOnly)
|
|
180
|
+
return true;
|
|
181
|
+
const bindings = clause?.namedBindings;
|
|
182
|
+
return ((!clause?.name || erasedBinding(clause.name)) &&
|
|
183
|
+
bindings !== undefined &&
|
|
184
|
+
ts.isNamedImports(bindings) &&
|
|
185
|
+
bindings.elements.length > 0 &&
|
|
186
|
+
bindings.elements.every((item) => item.isTypeOnly || erasedBinding(item.name)));
|
|
187
|
+
}
|
|
188
|
+
if (ts.isExportDeclaration(node)) {
|
|
189
|
+
return (node.isTypeOnly ||
|
|
190
|
+
(node.exportClause !== undefined &&
|
|
191
|
+
ts.isNamedExports(node.exportClause) &&
|
|
192
|
+
node.exportClause.elements.length > 0 &&
|
|
193
|
+
node.exportClause.elements.every((item) => item.isTypeOnly || erasedBinding(item.name))));
|
|
194
|
+
}
|
|
195
|
+
if (ts.isImportEqualsDeclaration(node))
|
|
196
|
+
return node.isTypeOnly;
|
|
197
|
+
node = node.parent;
|
|
198
|
+
}
|
|
199
|
+
return false;
|
|
200
|
+
};
|
|
201
|
+
/** A single-file source map is explicit provenance; a directory name is not. */
|
|
202
|
+
export const mappedTypeScriptSource = (file, host) => {
|
|
203
|
+
if (!/\.(?:js|mjs|cjs|jsx)$/.test(file))
|
|
204
|
+
return undefined;
|
|
205
|
+
const text = host.readFile(`${file}.map`);
|
|
206
|
+
if (text === undefined)
|
|
207
|
+
return undefined;
|
|
208
|
+
try {
|
|
209
|
+
const map = JSON.parse(text);
|
|
210
|
+
if (map === null || typeof map !== 'object')
|
|
211
|
+
return undefined;
|
|
212
|
+
const fields = map;
|
|
213
|
+
if (!Array.isArray(fields.sources) || fields.sources.length !== 1 || typeof fields.sources[0] !== 'string')
|
|
214
|
+
return undefined;
|
|
215
|
+
if (fields.sourceRoot !== undefined && typeof fields.sourceRoot !== 'string')
|
|
216
|
+
return undefined;
|
|
217
|
+
const source = fields.sources[0];
|
|
218
|
+
const root = fields.sourceRoot ?? '';
|
|
219
|
+
if (/^[a-z]+:/i.test(source) || /^[a-z]+:/i.test(root))
|
|
220
|
+
return undefined;
|
|
221
|
+
const target = resolve(dirname(file), root, source);
|
|
222
|
+
return /\.(?:ts|mts|cts|tsx)$/.test(target) && !isDeclarationPath(target) && host.fileExists(target) ? target : undefined;
|
|
223
|
+
}
|
|
224
|
+
catch {
|
|
225
|
+
return undefined;
|
|
226
|
+
}
|
|
227
|
+
};
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import ts from 'typescript';
|
|
2
|
+
const isJavaScriptFile = (fileName) => fileName.endsWith('.js') || fileName.endsWith('.mjs') || fileName.endsWith('.cjs');
|
|
3
|
+
const returnsAValue = (body) => body.statements.some((statement) => ts.isReturnStatement(statement) && statement.expression !== undefined);
|
|
4
|
+
const alreadyTagged = (node) => ts.getJSDocTags(node).some((tag) => tag.tagName.text === 'class' || tag.tagName.text === 'constructor');
|
|
5
|
+
/** The functions `new F()` can name in this file, by name: declarations, and `var F = function () {}` initializers. */
|
|
6
|
+
const constructibleFunctionsIn = (file) => {
|
|
7
|
+
const found = new Map();
|
|
8
|
+
const visit = (node) => {
|
|
9
|
+
if (ts.isFunctionDeclaration(node) && node.name && node.body)
|
|
10
|
+
found.set(node.name.text, node);
|
|
11
|
+
if (ts.isVariableDeclaration(node) &&
|
|
12
|
+
ts.isIdentifier(node.name) &&
|
|
13
|
+
node.initializer &&
|
|
14
|
+
ts.isFunctionExpression(node.initializer) &&
|
|
15
|
+
node.initializer.body) {
|
|
16
|
+
found.set(node.name.text, node.initializer);
|
|
17
|
+
}
|
|
18
|
+
ts.forEachChild(node, visit);
|
|
19
|
+
};
|
|
20
|
+
visit(file);
|
|
21
|
+
return found;
|
|
22
|
+
};
|
|
23
|
+
const candidatesIn = (file) => {
|
|
24
|
+
const functions = constructibleFunctionsIn(file);
|
|
25
|
+
if (functions.size === 0)
|
|
26
|
+
return [];
|
|
27
|
+
const constructed = new Set();
|
|
28
|
+
const called = new Set();
|
|
29
|
+
const visit = (node) => {
|
|
30
|
+
if (ts.isNewExpression(node) && ts.isIdentifier(node.expression))
|
|
31
|
+
constructed.add(node.expression.text);
|
|
32
|
+
if (ts.isCallExpression(node) && ts.isIdentifier(node.expression))
|
|
33
|
+
called.add(node.expression.text);
|
|
34
|
+
ts.forEachChild(node, visit);
|
|
35
|
+
};
|
|
36
|
+
visit(file);
|
|
37
|
+
const found = [];
|
|
38
|
+
for (const [name, fn] of functions) {
|
|
39
|
+
if (!constructed.has(name) || called.has(name))
|
|
40
|
+
continue;
|
|
41
|
+
if (!fn.body || returnsAValue(fn.body) || alreadyTagged(fn))
|
|
42
|
+
continue;
|
|
43
|
+
// Into an existing JSDoc block, never beside it: a second block placed
|
|
44
|
+
// between a `@param` block and its function detached the first one's
|
|
45
|
+
// parameter types (the checker read the parameters as implicit `any`).
|
|
46
|
+
const docs = ts.getJSDocCommentsAndTags(fn).filter(ts.isJSDoc);
|
|
47
|
+
const last = docs[docs.length - 1];
|
|
48
|
+
found.push(last ? { at: last.end - 2, text: ' @class ' } : { at: fn.getStart(file), text: '/** @class */ ' });
|
|
49
|
+
}
|
|
50
|
+
return found.sort((a, b) => a.at - b.at);
|
|
51
|
+
};
|
|
52
|
+
export const newCalleeClassTagSourceTransform = (input) => {
|
|
53
|
+
if (!isJavaScriptFile(input.fileName) || !input.text.includes('new '))
|
|
54
|
+
return null;
|
|
55
|
+
const file = ts.createSourceFile(input.fileName, input.text, ts.ScriptTarget.Latest, true, ts.ScriptKind.JS);
|
|
56
|
+
const candidates = candidatesIn(file);
|
|
57
|
+
if (candidates.length === 0)
|
|
58
|
+
return null;
|
|
59
|
+
let rewritten = input.text;
|
|
60
|
+
for (const candidate of [...candidates].reverse()) {
|
|
61
|
+
rewritten = `${rewritten.slice(0, candidate.at)}${candidate.text}${rewritten.slice(candidate.at)}`;
|
|
62
|
+
}
|
|
63
|
+
return rewritten;
|
|
64
|
+
};
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import ts from 'typescript';
|
|
2
|
+
export interface NodeProject {
|
|
3
|
+
readonly root: string;
|
|
4
|
+
readonly manifest: Record<string, unknown>;
|
|
5
|
+
readonly projectFile: string | undefined;
|
|
6
|
+
readonly entries: readonly {
|
|
7
|
+
name: string;
|
|
8
|
+
file: string;
|
|
9
|
+
}[];
|
|
10
|
+
}
|
|
11
|
+
/** Parse literal launch commands, never run a project's application or shell code. */
|
|
12
|
+
export declare const startEntry: (script: string, scripts: Record<string, unknown>, seen?: Set<string>) => string | undefined;
|
|
13
|
+
export declare const discoverNodeProject: (directory: string, host?: ts.System) => NodeProject;
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
import ts from 'typescript';
|
|
2
|
+
import { dirname, resolve, basename, extname } from 'node:path';
|
|
3
|
+
import { createPackageSourceHost } from './package-sources.js';
|
|
4
|
+
const object = (value) => value !== null && typeof value === 'object' && !Array.isArray(value) ? value : {};
|
|
5
|
+
/** Parse literal launch commands, never run a project's application or shell code. */
|
|
6
|
+
export const startEntry = (script, scripts, seen = new Set()) => {
|
|
7
|
+
if (/[;&|`$<>\n]/.test(script))
|
|
8
|
+
return undefined;
|
|
9
|
+
const words = script.match(/"[^"\n]*"|'[^'\n]*'|[^\s]+/g)?.map((word) => word.replace(/^(['"])(.*)\1$/, '$2')) ?? [];
|
|
10
|
+
while (words[0] && /^[\w]+=[^\s]*$/.test(words[0]))
|
|
11
|
+
words.shift();
|
|
12
|
+
if (words[0] === 'cross-env')
|
|
13
|
+
words.shift();
|
|
14
|
+
while (words[0] && /^[\w]+=[^\s]*$/.test(words[0]))
|
|
15
|
+
words.shift();
|
|
16
|
+
const launcher = words.shift();
|
|
17
|
+
if (['npm', 'pnpm', 'yarn'].includes(launcher ?? '')) {
|
|
18
|
+
if (words[0] === 'run')
|
|
19
|
+
words.shift();
|
|
20
|
+
const name = words[0];
|
|
21
|
+
if (!name || seen.has(name) || typeof scripts[name] !== 'string')
|
|
22
|
+
return undefined;
|
|
23
|
+
seen.add(name);
|
|
24
|
+
return startEntry(scripts[name], scripts, seen);
|
|
25
|
+
}
|
|
26
|
+
if (!['node', 'tsx', 'ts-node', 'ts-node-esm'].includes(launcher ?? ''))
|
|
27
|
+
return undefined;
|
|
28
|
+
const takesValue = new Set(['--require', '-r', '--import', '--loader', '--experimental-loader', '--conditions', '-C', '--project', '-P']);
|
|
29
|
+
while (words[0]?.startsWith('-')) {
|
|
30
|
+
const flag = words.shift();
|
|
31
|
+
if (['-e', '--eval', '-p', '--print', '--test'].includes(flag))
|
|
32
|
+
return undefined;
|
|
33
|
+
if (takesValue.has(flag))
|
|
34
|
+
words.shift();
|
|
35
|
+
}
|
|
36
|
+
return words[0];
|
|
37
|
+
};
|
|
38
|
+
export const discoverNodeProject = (directory, host = ts.sys) => {
|
|
39
|
+
let root = resolve(directory);
|
|
40
|
+
while (!host.fileExists(resolve(root, 'package.json'))) {
|
|
41
|
+
const parent = dirname(root);
|
|
42
|
+
if (parent === root)
|
|
43
|
+
throw new Error(`No package.json found from ${directory}`);
|
|
44
|
+
root = parent;
|
|
45
|
+
}
|
|
46
|
+
const manifest = object(JSON.parse(host.readFile(resolve(root, 'package.json'))));
|
|
47
|
+
const projectFile = ts.findConfigFile(root, host.fileExists);
|
|
48
|
+
const sources = createPackageSourceHost(host);
|
|
49
|
+
const entryFile = (value) => {
|
|
50
|
+
if (typeof value !== 'string' || value.includes('*'))
|
|
51
|
+
return undefined;
|
|
52
|
+
const file = sources.sourceOf(resolve(root, value));
|
|
53
|
+
if (host.fileExists(file) && !/\.d\.[cm]?ts$/.test(file))
|
|
54
|
+
return file;
|
|
55
|
+
if (!extname(file)) {
|
|
56
|
+
const candidates = ['.ts', '.mts', '.cts', '.js', '.mjs', '.cjs'].map((extension) => file + extension).filter(host.fileExists);
|
|
57
|
+
if (candidates.length === 1)
|
|
58
|
+
return candidates[0];
|
|
59
|
+
}
|
|
60
|
+
return undefined;
|
|
61
|
+
};
|
|
62
|
+
const name = typeof manifest.name === 'string' ? manifest.name.split('/').pop() : basename(root);
|
|
63
|
+
const scripts = object(manifest.scripts);
|
|
64
|
+
const launch = typeof scripts.start === 'string' ? startEntry(scripts.start, scripts) : undefined;
|
|
65
|
+
const launched = entryFile(launch);
|
|
66
|
+
if (launched)
|
|
67
|
+
return { root, manifest, projectFile, entries: [{ name, file: launched }] };
|
|
68
|
+
if (launch)
|
|
69
|
+
throw new Error(`The start script names ${launch}, but neither it nor its declared source exists.`);
|
|
70
|
+
const bins = typeof manifest.bin === 'string' ? { [name]: manifest.bin } : object(manifest.bin);
|
|
71
|
+
if (Object.keys(bins).length > 0) {
|
|
72
|
+
const entries = Object.entries(bins).map(([name, value]) => {
|
|
73
|
+
const file = entryFile(value);
|
|
74
|
+
if (!file)
|
|
75
|
+
throw new Error(`Cannot find the source for package bin ${name}: ${String(value)}`);
|
|
76
|
+
return { name, file };
|
|
77
|
+
});
|
|
78
|
+
return { root, manifest, projectFile, entries };
|
|
79
|
+
}
|
|
80
|
+
const publicEntry = (value) => {
|
|
81
|
+
const direct = entryFile(value);
|
|
82
|
+
if (direct)
|
|
83
|
+
return direct;
|
|
84
|
+
const fields = object(value);
|
|
85
|
+
if ('.' in fields)
|
|
86
|
+
return publicEntry(fields['.']);
|
|
87
|
+
for (const [key, target] of Object.entries(fields)) {
|
|
88
|
+
if (!['node', 'import', 'require', 'default'].includes(key))
|
|
89
|
+
continue;
|
|
90
|
+
const file = publicEntry(target);
|
|
91
|
+
if (file)
|
|
92
|
+
return file;
|
|
93
|
+
}
|
|
94
|
+
return undefined;
|
|
95
|
+
};
|
|
96
|
+
const main = publicEntry(manifest.exports) ?? entryFile(manifest.main) ?? entryFile(manifest.source);
|
|
97
|
+
if (main)
|
|
98
|
+
return { root, manifest, projectFile, entries: [{ name, file: main }] };
|
|
99
|
+
const conventional = ['src/index', 'src/main', 'src/server', 'index', 'main', 'server']
|
|
100
|
+
.flatMap((stem) => ['.ts', '.mts', '.cts', '.js', '.mjs', '.cjs'].map((extension) => resolve(root, stem + extension)))
|
|
101
|
+
.filter(host.fileExists);
|
|
102
|
+
if (conventional.length === 1)
|
|
103
|
+
return { root, manifest, projectFile, entries: [{ name, file: conventional[0] }] };
|
|
104
|
+
throw new Error(conventional.length > 1
|
|
105
|
+
? `Ambiguous application entry: ${conventional.join(', ')}. Declare scripts.start or bin in package.json.`
|
|
106
|
+
: 'No executable entry was found. Declare scripts.start, bin, or main in package.json.');
|
|
107
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
// The corpus oracle asks the compiler's resolver which source implements an
|
|
2
|
+
// import, then lets Node/tsx execute it. It never borrows the native host shims.
|
|
3
|
+
import { registerHooks, isBuiltin } from 'node:module';
|
|
4
|
+
import { fileURLToPath, pathToFileURL } from 'node:url';
|
|
5
|
+
import { resolve, dirname, sep } from 'node:path';
|
|
6
|
+
import ts from 'typescript';
|
|
7
|
+
import { createModuleResolver } from './module-resolution.js';
|
|
8
|
+
import { defaultCompilerOptions } from './program.js';
|
|
9
|
+
const serialized = process.env.GEATSC_SOURCE_CONTEXT;
|
|
10
|
+
if (serialized) {
|
|
11
|
+
const context = JSON.parse(serialized);
|
|
12
|
+
let options = { ...defaultCompilerOptions, types: [] };
|
|
13
|
+
if (context.projectFile) {
|
|
14
|
+
const config = ts.readConfigFile(context.projectFile, ts.sys.readFile);
|
|
15
|
+
if (config.error)
|
|
16
|
+
throw new Error(ts.flattenDiagnosticMessageText(config.error.messageText, '\n'));
|
|
17
|
+
options = { ...options, ...ts.parseJsonConfigFileContent(config.config, ts.sys, dirname(context.projectFile)).options };
|
|
18
|
+
}
|
|
19
|
+
const resolver = createModuleResolver(ts.sys, options, new Set(), context.packageSources);
|
|
20
|
+
const selected = new Set();
|
|
21
|
+
const roots = [resolve(context.root), ...context.packageSources.map((source) => resolve(source.root))];
|
|
22
|
+
const inSource = (url) => {
|
|
23
|
+
if (!url?.startsWith('file:'))
|
|
24
|
+
return false;
|
|
25
|
+
const file = fileURLToPath(url);
|
|
26
|
+
return selected.has(url) || roots.some((root) => file === root || file.startsWith(`${root}${sep}`));
|
|
27
|
+
};
|
|
28
|
+
registerHooks({
|
|
29
|
+
resolve(specifier, hookContext, nextResolve) {
|
|
30
|
+
if (isBuiltin(specifier) || (!inSource(hookContext.parentURL) && !inSource(specifier)))
|
|
31
|
+
return nextResolve(specifier, hookContext);
|
|
32
|
+
if (specifier.startsWith('file:') && (specifier.includes('?') || specifier.includes('#')))
|
|
33
|
+
return nextResolve(specifier, hookContext);
|
|
34
|
+
const from = hookContext.parentURL?.startsWith('file:') ? fileURLToPath(hookContext.parentURL) : resolve(context.root, '__entry__.ts');
|
|
35
|
+
const name = specifier.startsWith('file:') ? fileURLToPath(specifier) : specifier;
|
|
36
|
+
const mode = hookContext.conditions.includes('require') ? ts.ModuleKind.CommonJS : ts.ModuleKind.ESNext;
|
|
37
|
+
const result = resolver.resolve(name, from, mode).implementation;
|
|
38
|
+
if (!result)
|
|
39
|
+
return nextResolve(specifier, hookContext);
|
|
40
|
+
const url = pathToFileURL(result.resolvedFileName).href;
|
|
41
|
+
selected.add(url);
|
|
42
|
+
return nextResolve(url, hookContext);
|
|
43
|
+
},
|
|
44
|
+
load(url, hookContext, nextLoad) {
|
|
45
|
+
if (!selected.has(url) || !/\.[cm]?tsx?$/.test(fileURLToPath(url)))
|
|
46
|
+
return nextLoad(url, hookContext);
|
|
47
|
+
const file = fileURLToPath(url);
|
|
48
|
+
const source = ts.sys.readFile(file);
|
|
49
|
+
if (source === undefined)
|
|
50
|
+
throw new Error(`Source disappeared: ${file}`);
|
|
51
|
+
const ast = ts.createSourceFile(file, source, ts.ScriptTarget.Latest, true);
|
|
52
|
+
const commonJS = file.endsWith('.cts') || ast.statements.some((statement) => ts.isExportAssignment(statement) && statement.isExportEquals);
|
|
53
|
+
// A source checkout may have type:commonjs while its published import
|
|
54
|
+
// branch is ESM. Transpile the source module itself; package-scope format
|
|
55
|
+
// inference would add a spurious second default export around it.
|
|
56
|
+
const transformed = ts.transpileModule(source, {
|
|
57
|
+
fileName: file,
|
|
58
|
+
compilerOptions: { ...options, module: commonJS ? ts.ModuleKind.CommonJS : ts.ModuleKind.ESNext, noEmit: false, declaration: false }
|
|
59
|
+
});
|
|
60
|
+
return { format: commonJS ? 'commonjs' : 'module', source: transformed.outputText, shortCircuit: true };
|
|
61
|
+
}
|
|
62
|
+
});
|
|
63
|
+
}
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
import ts from 'typescript';
|
|
2
|
+
import type { NamespacePathCensus } from './namespace-paths.js';
|
|
3
|
+
/**
|
|
4
|
+
* The ambient globals an installed host declares it does NOT provide.
|
|
5
|
+
*
|
|
6
|
+
* An ambient declaration is a contract with a host: `declare var VideoFrame:
|
|
7
|
+
* {...}` says something out there defines this. TypeScript has no way to say
|
|
8
|
+
* the opposite, so a compiler with no other source of truth believes every one
|
|
9
|
+
* of them -- and that belief is a measured silent miscompile. `typeof
|
|
10
|
+
* VideoFrame !== 'undefined'` folds to `true` because the value's carrier is a
|
|
11
|
+
* constructor, while the same unit emits `extern gea::ConstructorObject<...>
|
|
12
|
+
* VideoFrame;` for a symbol no object file defines. The program is told a value
|
|
13
|
+
* exists, takes the branch that reads `image.displayWidth` off something that
|
|
14
|
+
* is not a `VideoFrame`, and the failure lands in the linker or at runtime
|
|
15
|
+
* rather than here.
|
|
16
|
+
*
|
|
17
|
+
* three.js is written to run where these may not exist and says so in its own
|
|
18
|
+
* source, guarding every one with `typeof X !== 'undefined'`. A native ANGLE
|
|
19
|
+
* context is exactly such a place. `PluginCapabilities.absentGlobals` is where
|
|
20
|
+
* a host states it; this turns that statement into the one thing the rest of
|
|
21
|
+
* the compiler already knows how to reason about -- the type `undefined`.
|
|
22
|
+
*
|
|
23
|
+
* ## Why the type, and not a refusal or a carrier
|
|
24
|
+
*
|
|
25
|
+
* `undefined` is the language's OWN answer for a global that is not there, and
|
|
26
|
+
* every stage downstream already handles it: `typeof` yields `'undefined'`, the
|
|
27
|
+
* guard's other branch is dead, the binding is not external so no `extern` is
|
|
28
|
+
* emitted, and a program that reads the value anyway is refused by the ordinary
|
|
29
|
+
* rules for reading `undefined` rather than by a special case invented here.
|
|
30
|
+
*
|
|
31
|
+
* Refusing instead would reject a program that is correct precisely because it
|
|
32
|
+
* checked, which is the opposite of what the guard is for.
|
|
33
|
+
*
|
|
34
|
+
* ## One authority
|
|
35
|
+
*
|
|
36
|
+
* Answering the DECLARATION and every REFERENCE from the same table is the
|
|
37
|
+
* whole of it. A binding whose declaration said `undefined` while its
|
|
38
|
+
* references said `VideoFrameConstructor` would be two carriers for one cell --
|
|
39
|
+
* the defect shape this compiler has paid for repeatedly. Both routes go
|
|
40
|
+
* through `typeAt` below.
|
|
41
|
+
*
|
|
42
|
+
* A host that states nothing gets `emptyAbsentGlobalCensus`, whose `typeAt` is
|
|
43
|
+
* `() => null`, and nothing about such a program changes.
|
|
44
|
+
*/
|
|
45
|
+
export interface AbsentGlobalCensus {
|
|
46
|
+
/**
|
|
47
|
+
* `undefined` when this node reads a global a host declared absent, or `null`
|
|
48
|
+
* when nothing here improves on the checker's answer.
|
|
49
|
+
*
|
|
50
|
+
* `null` is the normal case: the census answers only for names an installed
|
|
51
|
+
* host actually listed.
|
|
52
|
+
*/
|
|
53
|
+
readonly typeAt: (node: ts.Node) => ts.Type | null;
|
|
54
|
+
/**
|
|
55
|
+
* `type`, unless it names an ambient TYPE a host declared absent -- in which
|
|
56
|
+
* case `never`.
|
|
57
|
+
*
|
|
58
|
+
* `absentGlobals` is a fact about a VALUE (`typeAt` above): a host saying
|
|
59
|
+
* `HTMLImageElement` is absent says the *constructor* is not there. It says
|
|
60
|
+
* nothing yet about the TYPE `HTMLImageElement` -- the interface a program's
|
|
61
|
+
* own ambient declarations (three.js's JSDoc `@param
|
|
62
|
+
* {(HTMLImageElement|HTMLCanvasElement)} image`, straight off lib.dom) can
|
|
63
|
+
* still name in a position this compiler never asked the value for. This is
|
|
64
|
+
* that missing type-level counterpart, built the same way and for the same
|
|
65
|
+
* reason: no ambient VALUE means no way for a program running on this host to
|
|
66
|
+
* ever hold a value of that ambient TYPE either, so a position typed
|
|
67
|
+
* (in part) that way can be told the arm is `never` -- the language's own
|
|
68
|
+
* empty type, which every existing consumer of a structural union already
|
|
69
|
+
* drops before building an arm (`representation/union.ts`'s `isNever`).
|
|
70
|
+
*
|
|
71
|
+
* Deliberately a `ts.Type -> ts.Type` function and not an attempt to hand
|
|
72
|
+
* back a narrowed union: `ts.TypeChecker.getUnionType` is not on the public
|
|
73
|
+
* surface (`producers/bindings.ts`'s `withoutUndefinedMember` hit the same
|
|
74
|
+
* wall and solved it the same way -- filter the STRUCTURAL union instead of
|
|
75
|
+
* reconstructing a `ts.Type`). Applying this to each member of a union
|
|
76
|
+
* *before* it is interned needs no such reconstruction at all: every member
|
|
77
|
+
* is already its own independent `ts.Type`, `getNeverType()` is public, and
|
|
78
|
+
* a member that becomes `never` is dropped by the existing structural rule
|
|
79
|
+
* with no new plumbing. See `structural.ts`'s union case for where this
|
|
80
|
+
* wants to be called -- `type.types.map(typeOf)` becomes
|
|
81
|
+
* `type.types.map((member) => typeOf(absent.substituteAbsentType(member)))`.
|
|
82
|
+
*
|
|
83
|
+
* Resolution is by SYMBOL, exactly as `typeAt` resolves by symbol rather
|
|
84
|
+
* than by spelling: only a type whose OWN declaration is the standard
|
|
85
|
+
* library's ambient one is answered, so a program's own same-named type is
|
|
86
|
+
* untouched. Idempotent and total on every `ts.Type` -- it is safe to call
|
|
87
|
+
* on anything, including a type that is not an object type at all, and it
|
|
88
|
+
* always returns a real type rather than `null`, because unlike `typeAt`
|
|
89
|
+
* there is no "no answer" case: the type is either named-absent or it is
|
|
90
|
+
* simply itself.
|
|
91
|
+
*/
|
|
92
|
+
readonly substituteAbsentType: (type: ts.Type) => ts.Type;
|
|
93
|
+
/** Declared or undeclared host-absent globals answered, for measurement. */
|
|
94
|
+
readonly absentCount: number;
|
|
95
|
+
/**
|
|
96
|
+
* The ambient declarations this census denied.
|
|
97
|
+
*
|
|
98
|
+
* Exposed because a cell's STORAGE CLASS is decided in two places -- the
|
|
99
|
+
* binding producer, and the frontend's own ambient-value census that the
|
|
100
|
+
* projection reads (`FrontendResult.externalBindings`) -- and both have to
|
|
101
|
+
* reach the same answer. A declaration that stayed external in one of them
|
|
102
|
+
* emits `extern gea::Undefined VideoFrame;`: a symbol nothing defines, for a
|
|
103
|
+
* value this compiler has just concluded is not there.
|
|
104
|
+
*/
|
|
105
|
+
readonly declarations: ReadonlySet<ts.Declaration>;
|
|
106
|
+
}
|
|
107
|
+
/** A census that answers for nothing, for a compilation whose hosts state no absent name. */
|
|
108
|
+
export declare const emptyAbsentGlobalCensus: AbsentGlobalCensus;
|
|
109
|
+
/** Whether a declaration is the PLATFORM's rather than the program's -- see `platformDeclarationTest`. */
|
|
110
|
+
type PlatformTest = (node: ts.Declaration) => boolean;
|
|
111
|
+
/**
|
|
112
|
+
* The test for "this declaration is the platform's, not the program's".
|
|
113
|
+
*
|
|
114
|
+
* `hasNoDefaultLib` alone is too narrow. `@types/webxr` is a DefinitelyTyped
|
|
115
|
+
* package describing a browser API; it stands in exactly the relation to the
|
|
116
|
+
* program that `lib.dom.d.ts` does -- the program installed it, did not write
|
|
117
|
+
* it, and holds no opinion about whether the platform implements it. Restricted
|
|
118
|
+
* to `hasNoDefaultLib`, a host could deny `HTMLImageElement` and not
|
|
119
|
+
* `XRWebGLLayer`, which is an accident of which file TypeScript happens to ship
|
|
120
|
+
* rather than a distinction about authority. It cost the three.js app 81 unmet
|
|
121
|
+
* obligations for `XRWebGLLayer@1`/`XRWebGLBinding@1` -- names three.js itself
|
|
122
|
+
* guards with `typeof XRWebGLBinding !== 'undefined'`.
|
|
123
|
+
*
|
|
124
|
+
* What the original narrowness protected is still protected: a PROGRAM's own
|
|
125
|
+
* `declare var VideoFrame` is an assertion about its own environment, and
|
|
126
|
+
* denying that would be a larger claim than a host may make. That is why the
|
|
127
|
+
* widening is `isDeclarationFile` AND `isSourceFileFromExternalLibrary` -- the
|
|
128
|
+
* program's own sources, including its own `.d.ts` files, are untouched, and
|
|
129
|
+
* `isSourceFileFromExternalLibrary` is the program's own answer rather than a
|
|
130
|
+
* path guess.
|
|
131
|
+
*/
|
|
132
|
+
export declare const platformDeclarationTest: (program: ts.Program) => PlatformTest;
|
|
133
|
+
/**
|
|
134
|
+
* The census for one program.
|
|
135
|
+
*
|
|
136
|
+
* Resolve the name's symbol before applying a host fact. A program's own
|
|
137
|
+
* `const ImageData = ...`, or an import bound to that name, stays untouched.
|
|
138
|
+
* Platform declarations and references with no declaration can both receive
|
|
139
|
+
* the host's explicit absence fact. Missing declarations alone never establish
|
|
140
|
+
* absence: the installed host must have listed the name independently.
|
|
141
|
+
*/
|
|
142
|
+
export declare const censusAbsentGlobals: (checker: ts.TypeChecker, files: readonly ts.SourceFile[], absent: ReadonlySet<string>, platform: PlatformTest, namespacePaths: NamespacePathCensus) => AbsentGlobalCensus;
|
|
143
|
+
export {};
|