@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,667 @@
|
|
|
1
|
+
import ts from 'typescript';
|
|
2
|
+
import { withStableTypeQueries } from './stable-checker.js';
|
|
3
|
+
import { dirname, resolve } from 'node:path';
|
|
4
|
+
import { createModuleResolver, isDeclarationPath, mappedTypeScriptSource, moduleExtension, typeOnlyModuleUse } from './module-resolution.js';
|
|
5
|
+
import { createCommonJsRequireCensus } from './normalize/commonjs-require.js';
|
|
6
|
+
import { withoutBareWrapperRedeclarations } from './commonjs-wrapper.js';
|
|
7
|
+
import { resolveHostMethod } from './host-methods.js';
|
|
8
|
+
import { diagnosticSourcePreparation } from './diagnostic-source-preparation.js';
|
|
9
|
+
import { createFrontendTiming } from './frontend-timing.js';
|
|
10
|
+
export const defaultCompilerOptions = Object.freeze({
|
|
11
|
+
target: ts.ScriptTarget.ES2022,
|
|
12
|
+
module: ts.ModuleKind.ESNext,
|
|
13
|
+
moduleResolution: ts.ModuleResolutionKind.Bundler,
|
|
14
|
+
strict: true,
|
|
15
|
+
allowJs: true,
|
|
16
|
+
checkJs: true,
|
|
17
|
+
maxNodeModuleJsDepth: 100,
|
|
18
|
+
noEmit: true,
|
|
19
|
+
skipLibCheck: true,
|
|
20
|
+
// A default for a program compiled without a project file, and nothing more.
|
|
21
|
+
// Leaving the option unset is the one answer that is always wrong: every JSX
|
|
22
|
+
// expression then becomes a checker error typed `any`, which is how a whole
|
|
23
|
+
// application silently turns into a boxed program. `preserve` is the choice
|
|
24
|
+
// that assumes least -- it keeps what the author wrote -- but a project that
|
|
25
|
+
// states its own setting overrides this, and must: whether `<C/>` reaches
|
|
26
|
+
// this compiler as an element or as a `jsx(type, props)` call is the
|
|
27
|
+
// library's decision, expressed where every other TypeScript tool reads it.
|
|
28
|
+
jsx: ts.JsxEmit.Preserve
|
|
29
|
+
});
|
|
30
|
+
/**
|
|
31
|
+
* The nearest project file at or above a directory, or `null`.
|
|
32
|
+
*
|
|
33
|
+
* This walks the filesystem, which looks like the source-shaped authority the
|
|
34
|
+
* architecture forbids -- it is not. The forbidden thing is deciding a value's
|
|
35
|
+
* *semantics* from a path. Finding the project that declares a program is how
|
|
36
|
+
* every TypeScript toolchain establishes what the program even is, and the
|
|
37
|
+
* answer feeds `ts.parseJsonConfigFileContent`, never a semantic decision.
|
|
38
|
+
*/
|
|
39
|
+
export const findProjectFile = (fromDirectory) => ts.findConfigFile(fromDirectory, ts.sys.fileExists, 'tsconfig.json') ?? null;
|
|
40
|
+
/**
|
|
41
|
+
* Options this compiler fixes regardless of what a project asks for.
|
|
42
|
+
*
|
|
43
|
+
* Each one changes what the *checker* reports rather than what the program
|
|
44
|
+
* means: emit settings are irrelevant to a compiler that emits C++.
|
|
45
|
+
*
|
|
46
|
+
* `jsx` is the one that deserves suspicion, because overriding a project here
|
|
47
|
+
* silently discards what it asked for -- a project setting `react-jsx` is
|
|
48
|
+
* compiled as `preserve` with nothing said. It is pinned because the element
|
|
49
|
+
* tree is the input a template-compiling plugin reads (see
|
|
50
|
+
* `defaultCompilerOptions`), and it should stop being pinned as soon as a
|
|
51
|
+
* plugin exists that wants the factory form instead.
|
|
52
|
+
*/
|
|
53
|
+
/**
|
|
54
|
+
* The one option a project may not decide, because it is not about the program.
|
|
55
|
+
*
|
|
56
|
+
* `noEmit` says this compiler is not asking TypeScript to write JavaScript --
|
|
57
|
+
* it reads the checker and emits C++ itself. Everything else, `jsx` included,
|
|
58
|
+
* comes from the project: overriding a project's JSX setting would mean this
|
|
59
|
+
* compiler deciding on the author's behalf whether their elements survive as
|
|
60
|
+
* elements or arrive already rewritten into factory calls, which is exactly the
|
|
61
|
+
* choice a library makes and states in its own tsconfig.
|
|
62
|
+
*/
|
|
63
|
+
const fixedOptions = { noEmit: true };
|
|
64
|
+
/**
|
|
65
|
+
* The options that say "JavaScript is part of this program", carried onto a
|
|
66
|
+
* project's own settings rather than replaced by them.
|
|
67
|
+
*
|
|
68
|
+
* A caller that hands in JavaScript sources is stating a fact about the
|
|
69
|
+
* program, not expressing a preference a project may overrule: with `allowJs`
|
|
70
|
+
* off, every resolved `.js` module is reported as "could not find a declaration
|
|
71
|
+
* file ... implicitly has an `any` type" and the module is not compiled at all.
|
|
72
|
+
* That is how a staged project -- which no author wrote, and which therefore
|
|
73
|
+
* says nothing about vendor JavaScript -- silently removed `three`'s 388 real
|
|
74
|
+
* source modules from every application that imports them.
|
|
75
|
+
*
|
|
76
|
+
* Carried, never invented: the values are the caller's own
|
|
77
|
+
* (`frontend.ts` sets them from `javaScriptSources`), so a compilation that
|
|
78
|
+
* states no JavaScript adds nothing here and a project's settings pass through
|
|
79
|
+
* untouched.
|
|
80
|
+
*/
|
|
81
|
+
const javaScriptAdmission = (options) => ({
|
|
82
|
+
...(options.allowJs === undefined ? {} : { allowJs: options.allowJs }),
|
|
83
|
+
...(options.checkJs === undefined ? {} : { checkJs: options.checkJs }),
|
|
84
|
+
...(options.maxNodeModuleJsDepth === undefined ? {} : { maxNodeModuleJsDepth: options.maxNodeModuleJsDepth })
|
|
85
|
+
});
|
|
86
|
+
/**
|
|
87
|
+
* The script kind a file's extension declares.
|
|
88
|
+
*
|
|
89
|
+
* Asked only when a transform has already changed a file's text and the source
|
|
90
|
+
* file has to be re-created from it. This is not a source-shaped semantic
|
|
91
|
+
* decision -- it is the same extension-to-syntax mapping TypeScript itself
|
|
92
|
+
* performs to decide whether `<` opens a JSX element or a type argument list,
|
|
93
|
+
* and getting it wrong would reparse a rewritten `.tsx` as `.ts`.
|
|
94
|
+
*/
|
|
95
|
+
const scriptKindOf = (fileName) => {
|
|
96
|
+
if (fileName.endsWith('.tsx'))
|
|
97
|
+
return ts.ScriptKind.TSX;
|
|
98
|
+
if (fileName.endsWith('.jsx'))
|
|
99
|
+
return ts.ScriptKind.JSX;
|
|
100
|
+
if (fileName.endsWith('.js') || fileName.endsWith('.mjs') || fileName.endsWith('.cjs'))
|
|
101
|
+
return ts.ScriptKind.JS;
|
|
102
|
+
// `.json` falls through to here too, and that is deliberate -- see
|
|
103
|
+
// `jsonModuleAsTypeScript`'s own comment for why a `.json` file's rewritten
|
|
104
|
+
// text needs exactly this script kind and not `ts.ScriptKind.JSON`.
|
|
105
|
+
return ts.ScriptKind.TS;
|
|
106
|
+
};
|
|
107
|
+
/**
|
|
108
|
+
* A `.json` module, rewritten as the ordinary TypeScript module
|
|
109
|
+
* `resolveJsonModule` behaves as if it always were.
|
|
110
|
+
*
|
|
111
|
+
* This is a language feature (`tsconfig`'s `resolveJsonModule`, the same one
|
|
112
|
+
* Node's own module loader implements), not a gea idiom, so it lives here
|
|
113
|
+
* rather than behind a plugin's `transformSource` -- every program that turns
|
|
114
|
+
* this option on gets it, with no plugin installed. A JSON document's grammar
|
|
115
|
+
* is already a strict subset of a TypeScript object/array/string/number/
|
|
116
|
+
* boolean/null literal, so wrapping the file's own text in `export default
|
|
117
|
+
* ...;` is the WHOLE of what is needed: every later stage -- census,
|
|
118
|
+
* `derive.ts`'s structural typing, emission's record/array-literal rendering
|
|
119
|
+
* -- already knows how to carry a literal value, because that is exactly what
|
|
120
|
+
* an ordinary `const x = {...}` already asks of them.
|
|
121
|
+
*
|
|
122
|
+
* Without this, the declaration a program's binding resolves to for
|
|
123
|
+
* `import data from './x.json'` is the JSON `SourceFile` itself -- TypeScript's
|
|
124
|
+
* own synthetic shape for a JSON module, with no expression a normal walk
|
|
125
|
+
* recognizes. `isAmbientSymbol` correctly says it is not ambient (it is not a
|
|
126
|
+
* `.d.ts` and carries no `declare`), so it is never treated as a host import
|
|
127
|
+
* either -- it is simply never censused at all: no placement, local or
|
|
128
|
+
* external, and a program that reads it hits `bindingReference`'s "this
|
|
129
|
+
* program never introduces" refusal at every use.
|
|
130
|
+
*/
|
|
131
|
+
const jsonModuleAsTypeScript = (fileName, text) => fileName.endsWith('.json') ? `export default ${text};` : null;
|
|
132
|
+
/** A function-like node's own body, or `undefined` for one that declares none (a signature in a type, an overload). */
|
|
133
|
+
const functionBodyOf = (node) => {
|
|
134
|
+
if (ts.isArrowFunction(node))
|
|
135
|
+
return node.body;
|
|
136
|
+
if (ts.isFunctionDeclaration(node) ||
|
|
137
|
+
ts.isFunctionExpression(node) ||
|
|
138
|
+
ts.isMethodDeclaration(node) ||
|
|
139
|
+
ts.isConstructorDeclaration(node) ||
|
|
140
|
+
ts.isGetAccessorDeclaration(node) ||
|
|
141
|
+
ts.isSetAccessorDeclaration(node)) {
|
|
142
|
+
return node.body;
|
|
143
|
+
}
|
|
144
|
+
return undefined;
|
|
145
|
+
};
|
|
146
|
+
/**
|
|
147
|
+
* Whether a file's TOP LEVEL awaits -- outside every function, method,
|
|
148
|
+
* accessor, constructor, static block and namespace body, which are the
|
|
149
|
+
* scopes an `await` inside them belongs to instead.
|
|
150
|
+
*
|
|
151
|
+
* `await using` counts for the same reason `for await` does: both are the
|
|
152
|
+
* `await` token in a position only a module body may hold. Checked through
|
|
153
|
+
* the flag rather than the keyword because a declaration list carries it as
|
|
154
|
+
* `NodeFlags.AwaitUsing`, with no `AwaitExpression` node anywhere.
|
|
155
|
+
*
|
|
156
|
+
* That flag is a COMPOSITE -- `AwaitUsing` is `Const | Using`, the value 6 --
|
|
157
|
+
* so it has to be tested for every bit, not for any. Tested with `!== 0` it
|
|
158
|
+
* matched every plain `const`, whose own flag is the `Const` bit inside it,
|
|
159
|
+
* and so declared a top-level await in essentially every script file: it
|
|
160
|
+
* appended `export {}` to node-compat's `runtime/node/globals.ts`, turning a
|
|
161
|
+
* deliberate SCRIPT into a module and deleting `Headers`/`Request`/`Response`
|
|
162
|
+
* from the global scope every library file resolves them through. `tsc` on
|
|
163
|
+
* the same project reported nothing, because the project is fine; only this
|
|
164
|
+
* host's transformed copy was broken.
|
|
165
|
+
*/
|
|
166
|
+
const awaitsAtTopLevel = (file) => {
|
|
167
|
+
const awaits = (node) => {
|
|
168
|
+
if (ts.isAwaitExpression(node))
|
|
169
|
+
return true;
|
|
170
|
+
if (ts.isForOfStatement(node) && node.awaitModifier !== undefined)
|
|
171
|
+
return true;
|
|
172
|
+
if (ts.isVariableStatement(node) && (node.declarationList.flags & ts.NodeFlags.AwaitUsing) === ts.NodeFlags.AwaitUsing)
|
|
173
|
+
return true;
|
|
174
|
+
// A static block and a namespace body are scopes of their own with no
|
|
175
|
+
// outer part to look at.
|
|
176
|
+
if (ts.isClassStaticBlockDeclaration(node) || ts.isModuleDeclaration(node))
|
|
177
|
+
return false;
|
|
178
|
+
// A function's BODY is its own scope; everything else about it -- a
|
|
179
|
+
// computed method name, a decorator, a parameter default, a type -- is
|
|
180
|
+
// evaluated where the function is DECLARED, so those stay in this walk.
|
|
181
|
+
// Skipping the whole node instead missed `class C { [await key()]() {} }`,
|
|
182
|
+
// whose await really is at the module's top level.
|
|
183
|
+
if (ts.isFunctionLike(node)) {
|
|
184
|
+
const body = functionBodyOf(node);
|
|
185
|
+
return ts.forEachChild(node, (child) => (child === body ? false : awaits(child))) ?? false;
|
|
186
|
+
}
|
|
187
|
+
return ts.forEachChild(node, awaits) ?? false;
|
|
188
|
+
};
|
|
189
|
+
return ts.forEachChild(file, awaits) ?? false;
|
|
190
|
+
};
|
|
191
|
+
/**
|
|
192
|
+
* A FILE THAT AWAITS AT ITS TOP LEVEL IS A MODULE. THAT IS THE GRAMMAR, NOT A
|
|
193
|
+
* PREFERENCE.
|
|
194
|
+
*
|
|
195
|
+
* ECMA-262 parses a source text under one of two goal symbols, and `await` in
|
|
196
|
+
* an outermost statement is grammatical under exactly one of them: `Module`
|
|
197
|
+
* (16.2.1.6.1 makes such a module `[[HasTLA]]`, and 27.7.5.3's `Await` is
|
|
198
|
+
* defined for its body). A `Script` cannot hold one at all. So a file whose
|
|
199
|
+
* top level awaits has already told the host which goal symbol it wants.
|
|
200
|
+
*
|
|
201
|
+
* TypeScript decides module-ness a different way -- by looking for an import
|
|
202
|
+
* or an export -- and then reports the file's own `await` as an error whose
|
|
203
|
+
* remedy it spells out: "Consider adding an empty 'export {}' to make this
|
|
204
|
+
* file a module." That is TypeScript answering a POSITIONAL question the
|
|
205
|
+
* language answers syntactically, the same shape of mismatch
|
|
206
|
+
* `structural-layout-type.ts`'s `literalTokenType` records for a literal
|
|
207
|
+
* token's type. This compiler is the host; deciding the goal symbol from the
|
|
208
|
+
* grammar is its job, and the remedy the diagnostic names is a one-line
|
|
209
|
+
* appendix to the text.
|
|
210
|
+
*
|
|
211
|
+
* Which is exactly what this returns -- `export {}`, appended, so every later
|
|
212
|
+
* stage sees an ordinary external module and nothing downstream needs to know
|
|
213
|
+
* this happened. `moduleEvaluationOrder` (`frontend.ts`) already orders module
|
|
214
|
+
* bodies and the entry already calls them in that order
|
|
215
|
+
* (`targets/cpp/translation-unit.ts`'s `entryDefinitionOf`), so an importer
|
|
216
|
+
* observes the awaited exports and never a half-evaluated module -- 16.2.1.5.3
|
|
217
|
+
* satisfied by construction rather than by a scheduler this runtime does not
|
|
218
|
+
* have.
|
|
219
|
+
*
|
|
220
|
+
* It cannot change the meaning of a program that already compiled. Appending
|
|
221
|
+
* an export turns script scope into module scope, which really does move
|
|
222
|
+
* top-level names out of the global namespace -- but the only files this fires
|
|
223
|
+
* on are files TypeScript refused outright, so there is no working program
|
|
224
|
+
* whose scoping this can move. A file that is already an external module is
|
|
225
|
+
* left exactly as it is.
|
|
226
|
+
*
|
|
227
|
+
* Not behind a plugin's `transformSource`, for `jsonModuleAsTypeScript`'s own
|
|
228
|
+
* reason one function above: this is the language, so every program gets it
|
|
229
|
+
* with no plugin installed. And not a text transform either -- "does this file
|
|
230
|
+
* await at its top level" is a question about the parse tree, and answering it
|
|
231
|
+
* off the characters is how a comment or a string containing the word would
|
|
232
|
+
* decide it.
|
|
233
|
+
*/
|
|
234
|
+
const moduleMarkerForTopLevelAwait = (file) => !file.isDeclarationFile && !ts.isExternalModule(file) && awaitsAtTopLevel(file) ? `${file.text}\nexport {}\n` : null;
|
|
235
|
+
/**
|
|
236
|
+
* The compiler host, with the installed plugins' source transforms -- and the
|
|
237
|
+
* `.json`-module rewrite above, which every compilation gets regardless of
|
|
238
|
+
* which plugins are installed -- in front of every file it opens.
|
|
239
|
+
*
|
|
240
|
+
* Wrapping `getSourceFile` rather than `readFile` because the default host does
|
|
241
|
+
* not route one through the other: it closes over its own reader, so a
|
|
242
|
+
* `readFile` override is simply never consulted for a program's own sources.
|
|
243
|
+
*
|
|
244
|
+
* A declaration file is offered to nothing. `.d.ts` declares and evaluates
|
|
245
|
+
* nothing, so there is no expression in one for a transform to rewrite, and
|
|
246
|
+
* handing the standard library to a plugin would be inviting exactly the kind
|
|
247
|
+
* of reach a plugin should not have.
|
|
248
|
+
*
|
|
249
|
+
* A program with no plugins and no `.json` module parses every file exactly as
|
|
250
|
+
* it always did: `jsonModuleAsTypeScript` answers `null` for anything that is
|
|
251
|
+
* not `.json`, the plugin loop is empty, `text` never changes, and the early
|
|
252
|
+
* `text === file.text` return hands back the original file object untouched.
|
|
253
|
+
*/
|
|
254
|
+
/**
|
|
255
|
+
* The specifiers a caller states resolve to a real SOURCE module of this program.
|
|
256
|
+
*
|
|
257
|
+
* `.d.ts` targets are excluded: a stated declaration target is a declaration
|
|
258
|
+
* target, and nothing about it is shadowed by another one.
|
|
259
|
+
*/
|
|
260
|
+
const statedSourceSpecifiers = (stated) => {
|
|
261
|
+
const specifiers = new Set();
|
|
262
|
+
for (const answers of stated.values()) {
|
|
263
|
+
for (const [specifier, target] of answers)
|
|
264
|
+
if (!isDeclarationPath(target))
|
|
265
|
+
specifiers.add(specifier);
|
|
266
|
+
}
|
|
267
|
+
return specifiers;
|
|
268
|
+
};
|
|
269
|
+
/**
|
|
270
|
+
* Exact `paths` entries that resolve to program source rather than a
|
|
271
|
+
* declaration file.
|
|
272
|
+
*
|
|
273
|
+
* `tsconfig`'s `paths` is just as explicit an authority over a specifier as
|
|
274
|
+
* the caller's `moduleResolution` table. TypeScript nevertheless loads an
|
|
275
|
+
* ambient `declare module "node:events"` before the source module a project
|
|
276
|
+
* maps that spelling to, unless the declaration block is removed below. That
|
|
277
|
+
* splits the program in two: emission evaluates node-compat's `events.ts`,
|
|
278
|
+
* while the checker gives values the unrelated `@types/node` EventEmitter.
|
|
279
|
+
*
|
|
280
|
+
* Only non-pattern keys participate. A `*` key describes an open family and
|
|
281
|
+
* cannot prove one particular ambient module is shadowed; an exact key has a
|
|
282
|
+
* resolved source target the project itself selected. The resolver remains
|
|
283
|
+
* TypeScript's -- this function merely records that already-resolved fact for
|
|
284
|
+
* the declaration-file transform.
|
|
285
|
+
*/
|
|
286
|
+
const pathMappedSourceSpecifiers = (options, host) => {
|
|
287
|
+
const paths = options.paths;
|
|
288
|
+
if (!paths)
|
|
289
|
+
return new Set();
|
|
290
|
+
// `pathsBasePath` is preserved by TypeScript's config parser but omitted
|
|
291
|
+
// from its public CompilerOptions declaration. It is still the authority
|
|
292
|
+
// for relative `paths` targets when present.
|
|
293
|
+
const pathsBasePath = options.pathsBasePath;
|
|
294
|
+
const base = pathsBasePath ?? options.baseUrl ?? host.getCurrentDirectory?.() ?? ts.sys.getCurrentDirectory();
|
|
295
|
+
const containingFile = resolve(base, '__gea_explicit_paths__.ts');
|
|
296
|
+
const result = new Set();
|
|
297
|
+
for (const specifier of Object.keys(paths)) {
|
|
298
|
+
if (specifier.includes('*'))
|
|
299
|
+
continue;
|
|
300
|
+
const resolved = ts.resolveModuleName(specifier, containingFile, options, host).resolvedModule;
|
|
301
|
+
if (resolved && !isDeclarationPath(resolved.resolvedFileName))
|
|
302
|
+
result.add(specifier);
|
|
303
|
+
}
|
|
304
|
+
return result;
|
|
305
|
+
};
|
|
306
|
+
/**
|
|
307
|
+
* A declaration file with its ambient `declare module '<spec>'` blocks removed,
|
|
308
|
+
* for every `<spec>` the CALLER states resolves to a real source module.
|
|
309
|
+
*
|
|
310
|
+
* TypeScript resolves a non-relative specifier against ambient module
|
|
311
|
+
* declarations BEFORE it resolves files, so a single
|
|
312
|
+
* `declare module 'troika-three-text' { ... }` anywhere in the program decides
|
|
313
|
+
* what the CHECKER thinks that import is -- while the emitter compiles the
|
|
314
|
+
* module the caller's own resolution named. Two authorities for one specifier,
|
|
315
|
+
* and the checker's loses every fact the real module states.
|
|
316
|
+
*
|
|
317
|
+
* Measured on the three.js app: its `src/troika-shims.d.ts` declares
|
|
318
|
+
* `export class Text extends Object3D` for the web build (where the npm package
|
|
319
|
+
* ships no types), while the native module graph resolves the same specifier to
|
|
320
|
+
* `native-webgl-angle/src/troika-three-text.ts` -- a real class the program
|
|
321
|
+
* compiles. Two things went wrong at once, both invisible: the ambient `Text`
|
|
322
|
+
* re-introduced the very name the real shim renames itself to avoid (gea maps
|
|
323
|
+
* the DOM `Text` onto `NodeHandle`, so the HUD's text objects were carried as
|
|
324
|
+
* DOM nodes), and the ambient class's `extends Object3D` resolved -- from a
|
|
325
|
+
* `.d.ts`, whose own imports the caller states nothing about -- to
|
|
326
|
+
* `@types/three`, binding `Vector3`/`Euler`/`Quaternion` as carrier-less host
|
|
327
|
+
* protocols. `native-boundary:Vector3@1`, 26 rows, all of them
|
|
328
|
+
* `<text>.position.set(...)`.
|
|
329
|
+
*
|
|
330
|
+
* The caller's stated resolution wins, because it is the module the program
|
|
331
|
+
* actually compiles and emits. The block is blanked rather than cut so every
|
|
332
|
+
* other position in the file is unchanged: a declaration file holds unrelated
|
|
333
|
+
* declarations (`declare module '*.woff'`), and shifting them would move
|
|
334
|
+
* diagnostics and identities that have nothing to do with this.
|
|
335
|
+
*
|
|
336
|
+
* AMBIENT, never an AUGMENTATION. The hazard above is one a `declare module`
|
|
337
|
+
* block can only pose from a GLOBAL declaration file: only there does the
|
|
338
|
+
* block introduce a module identity of its own, ahead of file resolution, for
|
|
339
|
+
* the checker to prefer. The same syntax inside a file that is itself a module
|
|
340
|
+
* is an augmentation -- TypeScript requires the specifier to resolve to an
|
|
341
|
+
* existing module and MERGES the block into it (it reports "Invalid module
|
|
342
|
+
* name in augmentation" when it does not), so it cannot shadow anything and
|
|
343
|
+
* there is nothing here to protect the program from. Blanking one deletes a
|
|
344
|
+
* declaration the application made about the very module this compilation
|
|
345
|
+
* resolved, and a path-mapped framework is exactly where an app states one:
|
|
346
|
+
* `notes-jsx`'s `env.d.ts` augments `@geastack/core` with the macOS shell's
|
|
347
|
+
* own JSX tags, and with the block blanked every `<glass-pane>` in the app was
|
|
348
|
+
* reported as not existing on `JSX.IntrinsicElements` -- an error about a
|
|
349
|
+
* declaration this function had removed.
|
|
350
|
+
*/
|
|
351
|
+
const withoutShadowedAmbientModules = (file, shadowed, version) => {
|
|
352
|
+
if (shadowed.size === 0 || file.hasNoDefaultLib || ts.isExternalModule(file))
|
|
353
|
+
return file;
|
|
354
|
+
const spans = [];
|
|
355
|
+
for (const statement of file.statements) {
|
|
356
|
+
if (!ts.isModuleDeclaration(statement) || !ts.isStringLiteral(statement.name))
|
|
357
|
+
continue;
|
|
358
|
+
if (!shadowed.has(statement.name.text))
|
|
359
|
+
continue;
|
|
360
|
+
spans.push({ at: statement.getStart(file), end: statement.getEnd() });
|
|
361
|
+
}
|
|
362
|
+
if (spans.length === 0)
|
|
363
|
+
return file;
|
|
364
|
+
let text = file.text;
|
|
365
|
+
for (const span of [...spans].sort((a, b) => b.at - a.at)) {
|
|
366
|
+
const blanked = text.slice(span.at, span.end).replace(/[^\n]/g, ' ');
|
|
367
|
+
text = text.slice(0, span.at) + blanked + text.slice(span.end);
|
|
368
|
+
}
|
|
369
|
+
return ts.createSourceFile(file.fileName, text, version, true, scriptKindOf(file.fileName));
|
|
370
|
+
};
|
|
371
|
+
const transformingHost = (input, options, resolutionDiagnostics, preparedSourceText, timing) => {
|
|
372
|
+
const transforms = input.sourceTransforms ?? [];
|
|
373
|
+
const overlay = input.sourceOverlay;
|
|
374
|
+
const host = ts.createCompilerHost(options, true);
|
|
375
|
+
const read = host.getSourceFile.bind(host);
|
|
376
|
+
// An overlaid path must answer every question the filesystem would, not just
|
|
377
|
+
// the one that reads it: module resolution asks `fileExists` first and never
|
|
378
|
+
// reaches `getSourceFile` for a path it believes is absent, which is exactly
|
|
379
|
+
// how a virtual module disappears from a program that imports it.
|
|
380
|
+
if (overlay) {
|
|
381
|
+
const exists = host.fileExists.bind(host);
|
|
382
|
+
const readFile = host.readFile.bind(host);
|
|
383
|
+
const directoryExists = host.directoryExists?.bind(host);
|
|
384
|
+
const overlayDirectories = new Set();
|
|
385
|
+
for (const file of overlay.keys()) {
|
|
386
|
+
for (let directory = dirname(file); !overlayDirectories.has(directory); directory = dirname(directory)) {
|
|
387
|
+
overlayDirectories.add(directory);
|
|
388
|
+
if (dirname(directory) === directory)
|
|
389
|
+
break;
|
|
390
|
+
}
|
|
391
|
+
}
|
|
392
|
+
host.directoryExists = (directory) => overlayDirectories.has(resolve(directory)) || (directoryExists?.(directory) ?? false);
|
|
393
|
+
host.fileExists = (fileName) => overlay.has(resolve(fileName)) || exists(fileName);
|
|
394
|
+
host.readFile = (fileName) => overlay.get(resolve(fileName)) ?? readFile(fileName);
|
|
395
|
+
}
|
|
396
|
+
const stated = input.moduleResolution;
|
|
397
|
+
const shadowedSpecifiers = new Set([...(stated ? statedSourceSpecifiers(stated) : []), ...pathMappedSourceSpecifiers(options, host)]);
|
|
398
|
+
const resolver = createModuleResolver(host, options, input.declarationModules, input.packageSources);
|
|
399
|
+
const declarations = new Map();
|
|
400
|
+
host.resolveModuleNameLiterals = (literals, containingFile, _redirected, compilerOptions, containingSource) => {
|
|
401
|
+
const answers = stated?.get(resolve(containingFile));
|
|
402
|
+
return literals.map((literal) => {
|
|
403
|
+
const mode = ts.getModeForUsageLocation(containingSource, literal, compilerOptions);
|
|
404
|
+
const result = resolver.resolve(literal.text, containingFile, mode, answers?.get(literal.text));
|
|
405
|
+
if (typeOnlyModuleUse(literal) && result.declaration && !answers?.has(literal.text))
|
|
406
|
+
return { resolvedModule: result.declaration };
|
|
407
|
+
let implementation = result.implementation;
|
|
408
|
+
if (implementation && !answers?.has(literal.text)) {
|
|
409
|
+
const source = mappedTypeScriptSource(implementation.resolvedFileName, host);
|
|
410
|
+
if (source)
|
|
411
|
+
implementation = { ...implementation, resolvedFileName: source, extension: moduleExtension(source) };
|
|
412
|
+
}
|
|
413
|
+
if (implementation && result.declaration && !isDeclarationPath(implementation.resolvedFileName)) {
|
|
414
|
+
declarations.set(resolve(implementation.resolvedFileName), result.declaration.resolvedFileName);
|
|
415
|
+
}
|
|
416
|
+
if (!implementation && result.declaration && !result.native && !isDeclarationPath(containingFile) && !typeOnlyModuleUse(literal)) {
|
|
417
|
+
resolutionDiagnostics.push({
|
|
418
|
+
literal,
|
|
419
|
+
diagnostic: {
|
|
420
|
+
category: ts.DiagnosticCategory.Error,
|
|
421
|
+
code: 95001,
|
|
422
|
+
file: containingSource,
|
|
423
|
+
start: literal.getStart(containingSource),
|
|
424
|
+
length: literal.getWidth(containingSource),
|
|
425
|
+
messageText: `Module '${literal.text}' has declarations but no resolvable implementation or registered native binding.`
|
|
426
|
+
}
|
|
427
|
+
});
|
|
428
|
+
}
|
|
429
|
+
return { resolvedModule: implementation ?? result.declaration };
|
|
430
|
+
});
|
|
431
|
+
};
|
|
432
|
+
host.getSourceFile = (fileName, languageVersionOrOptions, onError, shouldCreateNewSourceFile) => {
|
|
433
|
+
const prepared = preparedSourceText.get(resolve(fileName));
|
|
434
|
+
if (prepared !== undefined)
|
|
435
|
+
return ts.createSourceFile(fileName, prepared, languageVersionOrOptions, true, scriptKindOf(fileName));
|
|
436
|
+
const overlaid = overlay?.get(resolve(fileName));
|
|
437
|
+
const file = overlaid === undefined
|
|
438
|
+
? read(fileName, languageVersionOrOptions, onError, shouldCreateNewSourceFile)
|
|
439
|
+
: ts.createSourceFile(fileName, overlaid, languageVersionOrOptions, true, scriptKindOf(fileName));
|
|
440
|
+
if (!file)
|
|
441
|
+
return file;
|
|
442
|
+
if (file.isDeclarationFile)
|
|
443
|
+
return withoutShadowedAmbientModules(file, shadowedSpecifiers, languageVersionOrOptions);
|
|
444
|
+
let text = jsonModuleAsTypeScript(fileName, file.text) ?? file.text;
|
|
445
|
+
const declarationFileName = declarations.get(resolve(fileName));
|
|
446
|
+
for (const [index, transform] of transforms.entries()) {
|
|
447
|
+
text = timing.measure(`transform:${index}:${transform.name}`, () => transform({ fileName, text, ...(declarationFileName ? { declarationFileName } : {}) }) ?? text);
|
|
448
|
+
}
|
|
449
|
+
const transformed = text === file.text ? file : ts.createSourceFile(fileName, text, languageVersionOrOptions, true, scriptKindOf(fileName));
|
|
450
|
+
// Asked of the TRANSFORMED file, not the one on disk: a plugin (or the
|
|
451
|
+
// `.json` rewrite above) can add the import or export that already makes
|
|
452
|
+
// the file a module, and can equally introduce the top-level `await` that
|
|
453
|
+
// asks for one. Either way the question is about the text this program
|
|
454
|
+
// actually compiles.
|
|
455
|
+
const marked = moduleMarkerForTopLevelAwait(transformed);
|
|
456
|
+
if (marked === null)
|
|
457
|
+
return transformed;
|
|
458
|
+
return ts.createSourceFile(fileName, marked, languageVersionOrOptions, true, scriptKindOf(fileName));
|
|
459
|
+
};
|
|
460
|
+
return host;
|
|
461
|
+
};
|
|
462
|
+
/**
|
|
463
|
+
* A literal CommonJS require is a runtime module edge even though TypeScript
|
|
464
|
+
* does not treat its string argument as a module-specifier node. Admit only
|
|
465
|
+
* calls whose resolved callee is an EXACT declaration the installed host owns;
|
|
466
|
+
* a local function, caller ambient, or a merged declaration coincidentally
|
|
467
|
+
* called `require` remains ordinary source and cannot pull a second module
|
|
468
|
+
* graph into this program.
|
|
469
|
+
*/
|
|
470
|
+
const staticCommonJsTargetsOf = (program, globals, targetOf) => {
|
|
471
|
+
if (globals.size === 0)
|
|
472
|
+
return [];
|
|
473
|
+
const checker = program.getTypeChecker();
|
|
474
|
+
const requireCensus = createCommonJsRequireCensus(checker, program.getSourceFiles(), globals);
|
|
475
|
+
const targets = new Set();
|
|
476
|
+
const visit = (node, sourceFile) => {
|
|
477
|
+
const argument = ts.isCallExpression(node) && node.arguments.length === 1 ? node.arguments[0] : undefined;
|
|
478
|
+
if (ts.isCallExpression(node) && argument && ts.isStringLiteralLike(argument) && requireCensus.statusOf(node.expression) === 'static') {
|
|
479
|
+
const target = targetOf(argument.text, sourceFile.fileName, 'require');
|
|
480
|
+
if (target !== null)
|
|
481
|
+
targets.add(target);
|
|
482
|
+
}
|
|
483
|
+
ts.forEachChild(node, (child) => visit(child, sourceFile));
|
|
484
|
+
};
|
|
485
|
+
for (const sourceFile of program.getSourceFiles())
|
|
486
|
+
if (!sourceFile.isDeclarationFile)
|
|
487
|
+
visit(sourceFile, sourceFile);
|
|
488
|
+
return [...targets];
|
|
489
|
+
};
|
|
490
|
+
/**
|
|
491
|
+
* `getBuiltinModule` is a native, dynamic lookup, not a source import. A
|
|
492
|
+
* literal call is nevertheless enough evidence to retain the host's stated
|
|
493
|
+
* implementation source and register its ModuleRecord before the call runs.
|
|
494
|
+
* The method binding, loader spelling map, and source map are all host data;
|
|
495
|
+
* this program layer does not recognize a Process spelling on its own.
|
|
496
|
+
*/
|
|
497
|
+
const staticBuiltinModuleTargetsOf = (program, bindings, names, sources) => {
|
|
498
|
+
if (bindings.size === 0 || names.size === 0 || sources.size === 0)
|
|
499
|
+
return [];
|
|
500
|
+
const checker = program.getTypeChecker();
|
|
501
|
+
const targets = new Set();
|
|
502
|
+
const visit = (node) => {
|
|
503
|
+
const argument = ts.isCallExpression(node) && node.arguments.length === 1 ? node.arguments[0] : undefined;
|
|
504
|
+
if (ts.isCallExpression(node) &&
|
|
505
|
+
argument &&
|
|
506
|
+
ts.isStringLiteralLike(argument) &&
|
|
507
|
+
(ts.isPropertyAccessExpression(node.expression) || ts.isElementAccessExpression(node.expression))) {
|
|
508
|
+
const method = resolveHostMethod(checker, bindings, node.expression);
|
|
509
|
+
const name = method?.builtinModuleLookup ? names.get(argument.text) : undefined;
|
|
510
|
+
const source = name === undefined ? undefined : sources.get(name);
|
|
511
|
+
if (source !== undefined)
|
|
512
|
+
targets.add(resolve(source));
|
|
513
|
+
}
|
|
514
|
+
ts.forEachChild(node, visit);
|
|
515
|
+
};
|
|
516
|
+
for (const sourceFile of program.getSourceFiles())
|
|
517
|
+
if (!sourceFile.isDeclarationFile)
|
|
518
|
+
visit(sourceFile);
|
|
519
|
+
return [...targets];
|
|
520
|
+
};
|
|
521
|
+
const configuredProgram = (input, resolutionDiagnostics, preparedSourceText, timing) => {
|
|
522
|
+
const runtimeModuleTargetOf = (host, options) => {
|
|
523
|
+
const resolver = createModuleResolver(host, options, input.declarationModules, input.packageSources);
|
|
524
|
+
return (specifier, containingFile, mode) => {
|
|
525
|
+
const statedTarget = input.moduleResolution?.get(resolve(containingFile))?.get(specifier);
|
|
526
|
+
const result = resolver.resolve(specifier, containingFile, mode === 'require' ? ts.ModuleKind.CommonJS : undefined, statedTarget);
|
|
527
|
+
let implementation = result.implementation;
|
|
528
|
+
if (implementation && !statedTarget) {
|
|
529
|
+
const source = mappedTypeScriptSource(implementation.resolvedFileName, host);
|
|
530
|
+
if (source)
|
|
531
|
+
implementation = { ...implementation, resolvedFileName: source, extension: moduleExtension(source) };
|
|
532
|
+
}
|
|
533
|
+
return implementation ? resolve(implementation.resolvedFileName) : null;
|
|
534
|
+
};
|
|
535
|
+
};
|
|
536
|
+
const projectFileName = input.projectFileName;
|
|
537
|
+
const buildProgram = (rootNames, options, host) => {
|
|
538
|
+
const targetOf = runtimeModuleTargetOf(host, options);
|
|
539
|
+
const roots = new Set(rootNames);
|
|
540
|
+
const commonJsTargetPaths = new Set();
|
|
541
|
+
let program = timing.measure('create-program', () => ts.createProgram({ rootNames: [...roots], options, host }));
|
|
542
|
+
for (;;) {
|
|
543
|
+
const targets = [
|
|
544
|
+
...staticCommonJsTargetsOf(program, input.commonJsGlobals ?? new Map(), targetOf),
|
|
545
|
+
...staticBuiltinModuleTargetsOf(program, input.hostMethodBindings ?? new Map(), input.commonJsBuiltinModules ?? new Map(), input.commonJsBuiltinModuleSources ?? new Map())
|
|
546
|
+
];
|
|
547
|
+
for (const target of targets)
|
|
548
|
+
commonJsTargetPaths.add(target);
|
|
549
|
+
const added = targets.filter((target) => !roots.has(target) && program.getSourceFile(target) === undefined);
|
|
550
|
+
if (added.length === 0)
|
|
551
|
+
break;
|
|
552
|
+
for (const target of added) {
|
|
553
|
+
roots.add(target);
|
|
554
|
+
}
|
|
555
|
+
program = timing.measure('rebuild-program', () => ts.createProgram({ rootNames: [...roots], options, host }));
|
|
556
|
+
}
|
|
557
|
+
return { program, runtimeModuleTargetOf: targetOf, commonJsTargetPaths: [...commonJsTargetPaths] };
|
|
558
|
+
};
|
|
559
|
+
if (!projectFileName) {
|
|
560
|
+
const options = { ...input.options, ...(input.dynamicFallback ? { noImplicitAny: false, checkJs: false } : {}) };
|
|
561
|
+
const host = transformingHost(input, options, resolutionDiagnostics, preparedSourceText, timing);
|
|
562
|
+
const rootNames = [
|
|
563
|
+
...new Set([
|
|
564
|
+
...input.rootFileNames,
|
|
565
|
+
...(input.commonJsGlobals ? [...input.commonJsGlobals.values()].map((entry) => entry.declarationFileName) : [])
|
|
566
|
+
])
|
|
567
|
+
];
|
|
568
|
+
// `host` is omitted rather than passed as `undefined`: under
|
|
569
|
+
// `exactOptionalPropertyTypes` the two are different, and the option is
|
|
570
|
+
// "the caller supplies a host" -- not "the caller supplies no host".
|
|
571
|
+
return buildProgram(rootNames, options, host ?? ts.createCompilerHost(options, true));
|
|
572
|
+
}
|
|
573
|
+
const read = ts.readConfigFile(projectFileName, ts.sys.readFile);
|
|
574
|
+
if (read.error) {
|
|
575
|
+
throw new Error(`project file ${projectFileName} could not be read: ${ts.flattenDiagnosticMessageText(read.error.messageText, ' ')}`);
|
|
576
|
+
}
|
|
577
|
+
// The base directory must be absolute. `parseJsonConfigFileContent` resolves
|
|
578
|
+
// `include` globs against it by asking the filesystem, and a relative base
|
|
579
|
+
// silently matches nothing -- which reads as a project that declares no files
|
|
580
|
+
// rather than as an error, so every ambient declaration disappears and every
|
|
581
|
+
// wildcard import in the program becomes an unresolved specifier.
|
|
582
|
+
const parsed = ts.parseJsonConfigFileContent(read.config, ts.sys, resolve(dirname(projectFileName)));
|
|
583
|
+
// The roots the caller named are added to the project's own file set rather
|
|
584
|
+
// than replacing it: a caller compiling one file of a project still needs the
|
|
585
|
+
// project's ambient declarations, and the project still needs to be told which
|
|
586
|
+
// file the caller cares about in case `include` does not cover it.
|
|
587
|
+
// Declarations only when the caller stated the module set: see
|
|
588
|
+
// `ProgramInput.statedModuleSet` for why a staged project's wildcard
|
|
589
|
+
// `include` is not this application's module list.
|
|
590
|
+
const projectFiles = input.statedModuleSet ? parsed.fileNames.filter(isDeclarationPath) : parsed.fileNames;
|
|
591
|
+
const rootNames = [
|
|
592
|
+
...new Set([
|
|
593
|
+
...projectFiles,
|
|
594
|
+
...input.rootFileNames,
|
|
595
|
+
...(input.commonJsGlobals ? [...input.commonJsGlobals.values()].map((entry) => entry.declarationFileName) : [])
|
|
596
|
+
])
|
|
597
|
+
];
|
|
598
|
+
const options = {
|
|
599
|
+
...parsed.options,
|
|
600
|
+
...javaScriptAdmission(input.options),
|
|
601
|
+
...fixedOptions,
|
|
602
|
+
...(input.dynamicFallback ? { noImplicitAny: false, checkJs: false } : {})
|
|
603
|
+
};
|
|
604
|
+
const host = transformingHost(input, options, resolutionDiagnostics, preparedSourceText, timing);
|
|
605
|
+
return buildProgram(rootNames, options, host ?? ts.createCompilerHost(options, true));
|
|
606
|
+
};
|
|
607
|
+
/**
|
|
608
|
+
* The caller's root file names, resolved to this program's own source files.
|
|
609
|
+
*
|
|
610
|
+
* `getSourceFile` is asked before `resolve` so a caller that already handed in
|
|
611
|
+
* an absolute path is answered without touching the filesystem; the second
|
|
612
|
+
* attempt is what makes a relative root work. A name that resolves to nothing
|
|
613
|
+
* contributes nothing rather than throwing -- the program still contains every
|
|
614
|
+
* file the project declared, and the honest consequence of an unresolvable
|
|
615
|
+
* root is that this compilation has no entry point to prune from.
|
|
616
|
+
*/
|
|
617
|
+
const entryFilesOf = (program, rootFileNames) => {
|
|
618
|
+
const found = [];
|
|
619
|
+
for (const name of rootFileNames) {
|
|
620
|
+
const file = program.getSourceFile(name) ?? program.getSourceFile(resolve(name));
|
|
621
|
+
if (file && !file.isDeclarationFile)
|
|
622
|
+
found.push(file);
|
|
623
|
+
}
|
|
624
|
+
return found;
|
|
625
|
+
};
|
|
626
|
+
export const createProgram = (input) => {
|
|
627
|
+
const timing = createFrontendTiming('program');
|
|
628
|
+
const resolutionDiagnostics = [];
|
|
629
|
+
let configured = configuredProgram(input, resolutionDiagnostics, new Map(), timing);
|
|
630
|
+
const preparation = timing.measure('diagnostic-source-preparation', () => diagnosticSourcePreparation(ts, configured.program, input.packageSources ?? []));
|
|
631
|
+
// A bare `var require` in a CommonJS module redeclares the wrapper's own
|
|
632
|
+
// parameter; blanked here so the checker types the name from the host's
|
|
633
|
+
// declaration instead of from an uninitialized local (`commonjs-wrapper.ts`).
|
|
634
|
+
const redeclarations = withoutBareWrapperRedeclarations(configured.program, new Set(input.commonJsGlobals?.keys() ?? []), preparation.sourceText);
|
|
635
|
+
if (preparation.audit.length > 0 || redeclarations.size > 0) {
|
|
636
|
+
resolutionDiagnostics.length = 0;
|
|
637
|
+
configured = configuredProgram(input, resolutionDiagnostics, new Map([...preparation.sourceText, ...redeclarations]), timing);
|
|
638
|
+
}
|
|
639
|
+
const program = configured.program;
|
|
640
|
+
const checker = withStableTypeQueries(program.getTypeChecker());
|
|
641
|
+
const sourceFiles = program.getSourceFiles().filter((file) => !file.isDeclarationFile);
|
|
642
|
+
const diagnostics = [
|
|
643
|
+
...timing.measure('syntactic-diagnostics', () => program.getSyntacticDiagnostics()),
|
|
644
|
+
...timing.measure('semantic-diagnostics', () => program.getSemanticDiagnostics()),
|
|
645
|
+
...resolutionDiagnostics
|
|
646
|
+
.filter(({ literal }) => !typeOnlyModuleUse(literal, checker, program.getCompilerOptions().verbatimModuleSyntax))
|
|
647
|
+
.map(({ diagnostic }) => diagnostic)
|
|
648
|
+
];
|
|
649
|
+
timing.report();
|
|
650
|
+
return {
|
|
651
|
+
program,
|
|
652
|
+
checker,
|
|
653
|
+
runtimeModuleTargetOf: configured.runtimeModuleTargetOf,
|
|
654
|
+
sourceFileOf: (fileName) => program.getSourceFile(fileName) ?? null,
|
|
655
|
+
commonJsSourceFiles: configured.commonJsTargetPaths.flatMap((fileName) => {
|
|
656
|
+
const sourceFile = program.getSourceFile(fileName);
|
|
657
|
+
return sourceFile ? [sourceFile] : [];
|
|
658
|
+
}),
|
|
659
|
+
sourceFiles,
|
|
660
|
+
entryFiles: entryFilesOf(program, input.rootFileNames),
|
|
661
|
+
sourcePreparations: preparation.audit,
|
|
662
|
+
// A program that does not typecheck has no well-defined semantics to port.
|
|
663
|
+
// Collecting these here means the compiler can refuse before normalizing,
|
|
664
|
+
// rather than normalizing a program the checker never validated.
|
|
665
|
+
diagnostics
|
|
666
|
+
};
|
|
667
|
+
};
|