@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,354 @@
|
|
|
1
|
+
import { operandOf, resultOf } from './model/operands.js';
|
|
2
|
+
/**
|
|
3
|
+
* Exact source-Function provenance carried by semantic results.
|
|
4
|
+
*
|
|
5
|
+
* Structural callable types are deliberately absent: two unrelated functions
|
|
6
|
+
* may have the same signature and therefore the same StructuralTypeId. An
|
|
7
|
+
* allocation is the only provenance root, because normalization puts its
|
|
8
|
+
* checker-authenticated FunctionId on the operation. A binding preserves that
|
|
9
|
+
* identity only when every write to the cell is itself already proven to be
|
|
10
|
+
* the same function; aliases therefore compose, while reassignment, unions and
|
|
11
|
+
* unknown writes fail closed.
|
|
12
|
+
*/
|
|
13
|
+
const callableOriginsByGraph = new WeakMap();
|
|
14
|
+
export const callableOriginsOf = (graph) => {
|
|
15
|
+
const known = callableOriginsByGraph.get(graph);
|
|
16
|
+
if (known)
|
|
17
|
+
return known;
|
|
18
|
+
const origins = new Map();
|
|
19
|
+
const writes = new Map();
|
|
20
|
+
for (const operation of graph.operations.values()) {
|
|
21
|
+
if (operation.family === 'allocation' && operation.allocated === 'function-object' && operation.callable !== null) {
|
|
22
|
+
const value = resultOf(operation, 'value');
|
|
23
|
+
if (value)
|
|
24
|
+
origins.set(value.id, operation.callable);
|
|
25
|
+
continue;
|
|
26
|
+
}
|
|
27
|
+
if (operation.family !== 'binding' || (operation.action !== 'initialize' && operation.action !== 'write'))
|
|
28
|
+
continue;
|
|
29
|
+
const bucket = writes.get(operation.declaration);
|
|
30
|
+
if (bucket)
|
|
31
|
+
bucket.push(operation);
|
|
32
|
+
else
|
|
33
|
+
writes.set(operation.declaration, [operation]);
|
|
34
|
+
}
|
|
35
|
+
const cells = new Map();
|
|
36
|
+
let changed = true;
|
|
37
|
+
while (changed) {
|
|
38
|
+
changed = false;
|
|
39
|
+
for (const [declaration, operations] of writes) {
|
|
40
|
+
if (cells.has(declaration))
|
|
41
|
+
continue;
|
|
42
|
+
let candidate = null;
|
|
43
|
+
let complete = true;
|
|
44
|
+
for (const operation of operations) {
|
|
45
|
+
const source = operation.operands.find((operand) => operand.evaluation.kind !== 'provenance')?.source;
|
|
46
|
+
const origin = source?.kind === 'result' ? origins.get(source.result) : undefined;
|
|
47
|
+
if (origin === undefined || (candidate !== null && candidate !== origin)) {
|
|
48
|
+
complete = false;
|
|
49
|
+
break;
|
|
50
|
+
}
|
|
51
|
+
candidate = origin;
|
|
52
|
+
}
|
|
53
|
+
if (!complete || candidate === null)
|
|
54
|
+
continue;
|
|
55
|
+
cells.set(declaration, candidate);
|
|
56
|
+
changed = true;
|
|
57
|
+
}
|
|
58
|
+
for (const operation of graph.operations.values()) {
|
|
59
|
+
// A `[[Set]]` publishes the RECEIVER it wrote into, not the stored value
|
|
60
|
+
// (`producers/properties.ts` says so where it mints the result), so the
|
|
61
|
+
// Function object the store threads onward is the one it was handed.
|
|
62
|
+
// Writing an expando onto a callable was the second view of a boxed
|
|
63
|
+
// callable that kept a native carrier while the object it restates was
|
|
64
|
+
// `dynamic`.
|
|
65
|
+
if (operation.family === 'property' && operation.internalMethod === 'set') {
|
|
66
|
+
const receiver = operandOf(operation, 'receiver');
|
|
67
|
+
const stored = receiver?.source.kind === 'result' ? origins.get(receiver.source.result) : undefined;
|
|
68
|
+
const value = resultOf(operation, 'value');
|
|
69
|
+
if (stored !== undefined && value && !origins.has(value.id)) {
|
|
70
|
+
origins.set(value.id, stored);
|
|
71
|
+
changed = true;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
if (operation.family !== 'binding')
|
|
75
|
+
continue;
|
|
76
|
+
const origin = cells.get(operation.declaration);
|
|
77
|
+
if (origin === undefined)
|
|
78
|
+
continue;
|
|
79
|
+
const value = resultOf(operation, 'value');
|
|
80
|
+
if (value && !origins.has(value.id)) {
|
|
81
|
+
origins.set(value.id, origin);
|
|
82
|
+
changed = true;
|
|
83
|
+
}
|
|
84
|
+
// The REFERENCE this read takes `GetValue` of denotes the same Function
|
|
85
|
+
// object the read produces -- ECMA-262 6.2.5.5 is one step over one cell,
|
|
86
|
+
// and nothing between them can be a different function. Left unstamped,
|
|
87
|
+
// a reference result was the one view of a boxed callable that kept a
|
|
88
|
+
// native carrier while its own cell was `dynamic`, so `--dynamic-fallback`
|
|
89
|
+
// emitted `CallableConstructorObject v = <gea::Value cell>` and the C++
|
|
90
|
+
// did not compile (`dynamic-callable-abi-recovery.runtime.js`).
|
|
91
|
+
for (const operand of operation.operands) {
|
|
92
|
+
if (operand.source.kind !== 'result')
|
|
93
|
+
continue;
|
|
94
|
+
const cited = graph.operations.get(graph.results.get(operand.source.result) ?? '');
|
|
95
|
+
if (cited?.family !== 'reference' || cited.form !== 'identifier')
|
|
96
|
+
continue;
|
|
97
|
+
if (origins.has(operand.source.result))
|
|
98
|
+
continue;
|
|
99
|
+
origins.set(operand.source.result, origin);
|
|
100
|
+
changed = true;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
callableOriginsByGraph.set(graph, origins);
|
|
105
|
+
return origins;
|
|
106
|
+
};
|
|
107
|
+
/**
|
|
108
|
+
* Which source functions own a `prototype` object, keyed by the same
|
|
109
|
+
* checker-authenticated `FunctionId` `callableOriginsOf` resolves a value to.
|
|
110
|
+
*
|
|
111
|
+
* The fact itself is the declaration's (`producers/shared.ts`'s
|
|
112
|
+
* `ownPrototypePropertyOf`); this only indexes it by function, and only from
|
|
113
|
+
* the allocation that states it -- a function whose allocation states nothing
|
|
114
|
+
* is absent here, and absence is the third answer, never `false`.
|
|
115
|
+
*/
|
|
116
|
+
const ownPrototypeFactsByGraph = new WeakMap();
|
|
117
|
+
const ownPrototypeFactsOf = (graph) => {
|
|
118
|
+
const known = ownPrototypeFactsByGraph.get(graph);
|
|
119
|
+
if (known)
|
|
120
|
+
return known;
|
|
121
|
+
const facts = new Map();
|
|
122
|
+
for (const operation of graph.operations.values()) {
|
|
123
|
+
if (operation.family !== 'allocation' || operation.callable === null)
|
|
124
|
+
continue;
|
|
125
|
+
if (operation.ownPrototypeProperty === undefined)
|
|
126
|
+
continue;
|
|
127
|
+
facts.set(operation.callable, operation.ownPrototypeProperty);
|
|
128
|
+
}
|
|
129
|
+
ownPrototypeFactsByGraph.set(graph, facts);
|
|
130
|
+
return facts;
|
|
131
|
+
};
|
|
132
|
+
/**
|
|
133
|
+
* Whether the callable this operation reads through owns a `prototype`
|
|
134
|
+
* object -- `null` where the graph cannot prove either answer.
|
|
135
|
+
*
|
|
136
|
+
* The one authority for the question `function-and-constructor` used to answer
|
|
137
|
+
* by accident. That carrier owns a `prototype` because the checker gave the
|
|
138
|
+
* value a construct signature, and `function-value-dispatch` was read as
|
|
139
|
+
* owning none for the mirror-image reason -- which made "how is this value
|
|
140
|
+
* invoked" and "does the declaration behind it have a `prototype`" one answer.
|
|
141
|
+
* They are the same answer for every function until one is written as an
|
|
142
|
+
* ordinary `function` and used only as a call, which is exactly where a
|
|
143
|
+
* `Factory.prototype` read landed on a carrier that denied having one.
|
|
144
|
+
*
|
|
145
|
+
* `null` is returned for a value with no proven origin (a parameter, a union
|
|
146
|
+
* of two functions, a reassigned cell) and for a generator, whose allocation
|
|
147
|
+
* deliberately states nothing. Both keep the read refused rather than
|
|
148
|
+
* answering `undefined` for a property that exists.
|
|
149
|
+
*/
|
|
150
|
+
export const callableOwnPrototypeAt = (graph, operation) => {
|
|
151
|
+
const receiver = operandOf(operation, 'receiver');
|
|
152
|
+
if (receiver?.source.kind !== 'result')
|
|
153
|
+
return null;
|
|
154
|
+
const origin = callableOriginsOf(graph).get(receiver.source.result);
|
|
155
|
+
if (origin === undefined)
|
|
156
|
+
return null;
|
|
157
|
+
return ownPrototypeFactsOf(graph).get(origin) ?? null;
|
|
158
|
+
};
|
|
159
|
+
/** A computed key can overwrite either explicit-this builtin. */
|
|
160
|
+
export const unknownCallableOwnProperty = '*';
|
|
161
|
+
const propertyNameOf = (operation, role, ordinal = 0) => {
|
|
162
|
+
const key = operandOf(operation, role, ordinal);
|
|
163
|
+
return key?.source.kind === 'constant' && key.source.literal === 'string' ? key.source.text : unknownCallableOwnProperty;
|
|
164
|
+
};
|
|
165
|
+
/** Semantic results proven to carry the one global Function.prototype object. */
|
|
166
|
+
const functionPrototypeOriginsByGraph = new WeakMap();
|
|
167
|
+
const functionPrototypeOriginsOf = (graph) => {
|
|
168
|
+
const known = functionPrototypeOriginsByGraph.get(graph);
|
|
169
|
+
if (known)
|
|
170
|
+
return known;
|
|
171
|
+
const origins = new Set();
|
|
172
|
+
const writes = new Map();
|
|
173
|
+
for (const operation of graph.operations.values()) {
|
|
174
|
+
if (operation.family === 'property' && operation.internalMethod === 'get' && operation.intrinsicValue === 'function-prototype') {
|
|
175
|
+
const value = resultOf(operation, 'value');
|
|
176
|
+
if (value)
|
|
177
|
+
origins.add(value.id);
|
|
178
|
+
}
|
|
179
|
+
if (operation.family !== 'binding' || (operation.action !== 'initialize' && operation.action !== 'write'))
|
|
180
|
+
continue;
|
|
181
|
+
const bucket = writes.get(operation.declaration);
|
|
182
|
+
if (bucket)
|
|
183
|
+
bucket.push(operation);
|
|
184
|
+
else
|
|
185
|
+
writes.set(operation.declaration, [operation]);
|
|
186
|
+
}
|
|
187
|
+
const cells = new Set();
|
|
188
|
+
let changed = true;
|
|
189
|
+
while (changed) {
|
|
190
|
+
changed = false;
|
|
191
|
+
for (const [declaration, operations] of writes) {
|
|
192
|
+
if (cells.has(declaration))
|
|
193
|
+
continue;
|
|
194
|
+
const complete = operations.length > 0 &&
|
|
195
|
+
operations.every((operation) => {
|
|
196
|
+
const source = operation.operands.find((operand) => operand.evaluation.kind !== 'provenance')?.source;
|
|
197
|
+
return source?.kind === 'result' && origins.has(source.result);
|
|
198
|
+
});
|
|
199
|
+
if (!complete)
|
|
200
|
+
continue;
|
|
201
|
+
cells.add(declaration);
|
|
202
|
+
changed = true;
|
|
203
|
+
}
|
|
204
|
+
for (const operation of graph.operations.values()) {
|
|
205
|
+
if (operation.family === 'binding' && cells.has(operation.declaration)) {
|
|
206
|
+
const value = resultOf(operation, 'value');
|
|
207
|
+
if (value && !origins.has(value.id)) {
|
|
208
|
+
origins.add(value.id);
|
|
209
|
+
changed = true;
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
if (operation.family === 'invocation' && operation.intrinsicMutation !== undefined && operation.intrinsicMutation !== 'reflect-set') {
|
|
213
|
+
const target = operandOf(operation, 'argument', 0);
|
|
214
|
+
const value = resultOf(operation, 'value');
|
|
215
|
+
if (target?.source.kind === 'result' && origins.has(target.source.result) && value && !origins.has(value.id)) {
|
|
216
|
+
origins.add(value.id);
|
|
217
|
+
changed = true;
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
functionPrototypeOriginsByGraph.set(graph, origins);
|
|
223
|
+
return origins;
|
|
224
|
+
};
|
|
225
|
+
const callableWriteTargetsByGraph = new WeakMap();
|
|
226
|
+
const callableWriteTargetsOf = (graph) => {
|
|
227
|
+
const known = callableWriteTargetsByGraph.get(graph);
|
|
228
|
+
if (known)
|
|
229
|
+
return known;
|
|
230
|
+
const targets = [];
|
|
231
|
+
for (const operation of graph.operations.values()) {
|
|
232
|
+
if (operation.family === 'property') {
|
|
233
|
+
if (operation.internalMethod !== 'set' && operation.internalMethod !== 'delete' && operation.internalMethod !== 'define-own-property')
|
|
234
|
+
continue;
|
|
235
|
+
const receiver = operandOf(operation, 'receiver');
|
|
236
|
+
if (receiver?.source.kind !== 'result')
|
|
237
|
+
continue;
|
|
238
|
+
targets.push({ result: receiver.source.result, name: propertyNameOf(operation, 'key') });
|
|
239
|
+
continue;
|
|
240
|
+
}
|
|
241
|
+
if (operation.family !== 'invocation' || operation.intrinsicMutation === undefined)
|
|
242
|
+
continue;
|
|
243
|
+
const target = operandOf(operation, 'argument', 0);
|
|
244
|
+
if (target?.source.kind !== 'result')
|
|
245
|
+
continue;
|
|
246
|
+
const name = operation.intrinsicMutation === 'object-assign' || operation.intrinsicMutation === 'object-define-properties'
|
|
247
|
+
? unknownCallableOwnProperty
|
|
248
|
+
: propertyNameOf(operation, 'argument', 1);
|
|
249
|
+
targets.push({ result: target.source.result, name });
|
|
250
|
+
}
|
|
251
|
+
callableWriteTargetsByGraph.set(graph, targets);
|
|
252
|
+
return targets;
|
|
253
|
+
};
|
|
254
|
+
/**
|
|
255
|
+
* Own-property writes grouped by the exact Function object they PROVABLY
|
|
256
|
+
* target -- the half of `callableMutationFactsOf` that needs no plan.
|
|
257
|
+
*
|
|
258
|
+
* Published separately because `representation/publish.ts` has to ask it: a
|
|
259
|
+
* read of `call`/`apply`/`bind` off a Function the program overwrote yields
|
|
260
|
+
* that object's own dynamic property table, not the `Function.prototype`
|
|
261
|
+
* method `lib.es5.d.ts` types the read as, and the carrier has to say so
|
|
262
|
+
* before any plan exists. A write whose target object is unknown is absent
|
|
263
|
+
* here and present in `anonymousProperties` below; that asymmetry is the
|
|
264
|
+
* whole reason the two views are separate, and it is why this one is a
|
|
265
|
+
* SUBSET -- never a superset -- of what the certify stage refuses on.
|
|
266
|
+
*/
|
|
267
|
+
const callableOwnWritesByGraph = new WeakMap();
|
|
268
|
+
export const callableOwnPropertyWritesOf = (graph, origins = callableOriginsOf(graph)) => {
|
|
269
|
+
const known = callableOwnWritesByGraph.get(graph);
|
|
270
|
+
if (known)
|
|
271
|
+
return known;
|
|
272
|
+
const writes = new Map();
|
|
273
|
+
const prototypeOrigins = functionPrototypeOriginsOf(graph);
|
|
274
|
+
for (const target of callableWriteTargetsOf(graph)) {
|
|
275
|
+
if (prototypeOrigins.has(target.result))
|
|
276
|
+
continue;
|
|
277
|
+
const origin = origins.get(target.result);
|
|
278
|
+
if (origin === undefined)
|
|
279
|
+
continue;
|
|
280
|
+
const bucket = writes.get(origin);
|
|
281
|
+
if (bucket)
|
|
282
|
+
bucket.add(target.name);
|
|
283
|
+
else
|
|
284
|
+
writes.set(origin, new Set([target.name]));
|
|
285
|
+
}
|
|
286
|
+
callableOwnWritesByGraph.set(graph, writes);
|
|
287
|
+
return writes;
|
|
288
|
+
};
|
|
289
|
+
const callableMutationFactsByPlan = new WeakMap();
|
|
290
|
+
const canCarryCallableObject = (plan, result) => {
|
|
291
|
+
const representation = plan.selected.get(result);
|
|
292
|
+
if (representation === undefined)
|
|
293
|
+
return false;
|
|
294
|
+
switch (representation.kind) {
|
|
295
|
+
case 'function':
|
|
296
|
+
case 'function-family':
|
|
297
|
+
case 'function-value-family':
|
|
298
|
+
case 'function-value-dispatch':
|
|
299
|
+
case 'function-and-constructor':
|
|
300
|
+
case 'generic-function-set':
|
|
301
|
+
case 'dynamic':
|
|
302
|
+
return true;
|
|
303
|
+
default:
|
|
304
|
+
return false;
|
|
305
|
+
}
|
|
306
|
+
};
|
|
307
|
+
/**
|
|
308
|
+
* Own-property mutations grouped by the exact Function object they target.
|
|
309
|
+
*
|
|
310
|
+
* This deliberately records more than writes that dominate a particular
|
|
311
|
+
* read: absence from the whole-program set is the proof a static
|
|
312
|
+
* `Function.prototype.call`/`apply` rewrite needs. A write in an exclusive or
|
|
313
|
+
* later branch may conservatively keep the ordinary property call, but can
|
|
314
|
+
* never be skipped as if it did not exist.
|
|
315
|
+
*/
|
|
316
|
+
export const callableMutationFactsOf = (graph, plan, origins = callableOriginsOf(graph)) => {
|
|
317
|
+
const known = callableMutationFactsByPlan.get(plan);
|
|
318
|
+
if (known)
|
|
319
|
+
return known;
|
|
320
|
+
const anonymousWrites = new Set();
|
|
321
|
+
const prototypeWrites = new Set();
|
|
322
|
+
const prototypeOrigins = functionPrototypeOriginsOf(graph);
|
|
323
|
+
for (const target of callableWriteTargetsOf(graph)) {
|
|
324
|
+
if (prototypeOrigins.has(target.result)) {
|
|
325
|
+
prototypeWrites.add(target.name);
|
|
326
|
+
continue;
|
|
327
|
+
}
|
|
328
|
+
if (origins.get(target.result) !== undefined)
|
|
329
|
+
continue;
|
|
330
|
+
if (canCarryCallableObject(plan, target.result))
|
|
331
|
+
anonymousWrites.add(target.name);
|
|
332
|
+
}
|
|
333
|
+
const facts = {
|
|
334
|
+
ownProperties: callableOwnPropertyWritesOf(graph, origins),
|
|
335
|
+
anonymousProperties: anonymousWrites,
|
|
336
|
+
functionPrototypeProperties: prototypeWrites
|
|
337
|
+
};
|
|
338
|
+
callableMutationFactsByPlan.set(plan, facts);
|
|
339
|
+
return facts;
|
|
340
|
+
};
|
|
341
|
+
/** One shared proof used by preflight and IR lowering before skipping [[Get]]. */
|
|
342
|
+
export const callableBuiltinResolution = (facts, functionId, member) => {
|
|
343
|
+
const prototype = facts.functionPrototypeProperties;
|
|
344
|
+
if (prototype.has(member) || prototype.has(unknownCallableOwnProperty))
|
|
345
|
+
return 'prototype-mutated';
|
|
346
|
+
const unknown = facts.anonymousProperties;
|
|
347
|
+
if (unknown.has(member) || unknown.has(unknownCallableOwnProperty))
|
|
348
|
+
return 'ordinary-property';
|
|
349
|
+
const own = functionId === null ? undefined : facts.ownProperties.get(functionId);
|
|
350
|
+
if (own?.has(member) || own?.has(unknownCallableOwnProperty))
|
|
351
|
+
return 'ordinary-property';
|
|
352
|
+
return 'builtin';
|
|
353
|
+
};
|
|
354
|
+
export const callableBuiltinIsUnshadowed = (facts, functionId, member) => callableBuiltinResolution(facts, functionId, member) === 'builtin';
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import ts from 'typescript';
|
|
2
|
+
/**
|
|
3
|
+
* A const whose initializer is a class value hidden only by type assertions.
|
|
4
|
+
* The assertions allocate nothing and the const cannot change, so reading the
|
|
5
|
+
* inner class preserves the runtime identity used by heritage and `super()`.
|
|
6
|
+
*/
|
|
7
|
+
export declare const transparentConstClassAliasTarget: (checker: ts.TypeChecker, node: ts.Expression) => ts.Identifier | null;
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import ts from 'typescript';
|
|
2
|
+
const transparentExpression = (node) => {
|
|
3
|
+
let current = node;
|
|
4
|
+
while (ts.isParenthesizedExpression(current) ||
|
|
5
|
+
ts.isAsExpression(current) ||
|
|
6
|
+
ts.isTypeAssertionExpression(current) ||
|
|
7
|
+
ts.isSatisfiesExpression(current) ||
|
|
8
|
+
ts.isNonNullExpression(current)) {
|
|
9
|
+
current = current.expression;
|
|
10
|
+
}
|
|
11
|
+
return current;
|
|
12
|
+
};
|
|
13
|
+
const classDeclarationOf = (checker, symbol) => {
|
|
14
|
+
const resolved = (symbol.flags & ts.SymbolFlags.Alias) !== 0 ? checker.getAliasedSymbol(symbol) : symbol;
|
|
15
|
+
const declaration = resolved.valueDeclaration ?? resolved.declarations?.find((candidate) => ts.isClassLike(candidate));
|
|
16
|
+
return declaration && ts.isClassLike(declaration) ? declaration : null;
|
|
17
|
+
};
|
|
18
|
+
/**
|
|
19
|
+
* A const whose initializer is a class value hidden only by type assertions.
|
|
20
|
+
* The assertions allocate nothing and the const cannot change, so reading the
|
|
21
|
+
* inner class preserves the runtime identity used by heritage and `super()`.
|
|
22
|
+
*/
|
|
23
|
+
export const transparentConstClassAliasTarget = (checker, node) => {
|
|
24
|
+
if (!ts.isIdentifier(node))
|
|
25
|
+
return null;
|
|
26
|
+
const symbol = checker.getSymbolAtLocation(node);
|
|
27
|
+
const declaration = symbol?.valueDeclaration;
|
|
28
|
+
if (!declaration || !ts.isVariableDeclaration(declaration) || !declaration.initializer)
|
|
29
|
+
return null;
|
|
30
|
+
if (!ts.isVariableDeclarationList(declaration.parent) || (declaration.parent.flags & ts.NodeFlags.Const) === 0)
|
|
31
|
+
return null;
|
|
32
|
+
const target = transparentExpression(declaration.initializer);
|
|
33
|
+
if (!ts.isIdentifier(target))
|
|
34
|
+
return null;
|
|
35
|
+
const targetSymbol = checker.getSymbolAtLocation(target);
|
|
36
|
+
return targetSymbol && classDeclarationOf(checker, targetSymbol) ? target : null;
|
|
37
|
+
};
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import ts from 'typescript';
|
|
2
|
+
import type { DeclarationId } from '../identity/ids.js';
|
|
3
|
+
import type { IdentityTable } from './normalize/identities.js';
|
|
4
|
+
/**
|
|
5
|
+
* Which classes each class INHERITS FROM, transitively -- the one fact two
|
|
6
|
+
* separate carrier questions both need and neither can answer on its own.
|
|
7
|
+
*
|
|
8
|
+
* `representation/derive.ts` reduces `T & AggregateOperation` -- what
|
|
9
|
+
* `operation instanceof AggregateOperation` narrows a `T extends
|
|
10
|
+
* AbstractOperation` parameter to -- and a reduction is only sound when one
|
|
11
|
+
* member is provably the other's ancestor, in which case the intersection IS
|
|
12
|
+
* the more-derived class. `conversion/build.ts` enumerates the widening from
|
|
13
|
+
* `class-ref(MongoRuntimeError)` to `class-ref(MongoError)` that `previous ??
|
|
14
|
+
* new MongoRuntimeError(...)` needs, and a widening is only sound in the
|
|
15
|
+
* ancestor direction. Both live below the semantic layer and neither may
|
|
16
|
+
* import `typescript`, so the answer is resolved once here and installed as a
|
|
17
|
+
* policy, the same way `KeyedCollectionPolicy` and `DateDeclarationPolicy`
|
|
18
|
+
* are.
|
|
19
|
+
*
|
|
20
|
+
* The CHECKER answers it, not the heritage syntax: `class D extends mixin(B)`
|
|
21
|
+
* states no name to read, and `getBaseTypes` follows the same chain
|
|
22
|
+
* assignability does. That also makes this agree with
|
|
23
|
+
* `projection/classes.ts`'s own `base` link by construction -- that one is
|
|
24
|
+
* read off the evaluated heritage value's carrier for the same reason, so the
|
|
25
|
+
* two never disagree about what a class extends, they only differ in how far
|
|
26
|
+
* they follow it (one link versus the whole chain).
|
|
27
|
+
*
|
|
28
|
+
* Interfaces a class `implements` are deliberately absent. This states class
|
|
29
|
+
* INHERITANCE -- shared storage and a shared struct base -- and an
|
|
30
|
+
* implemented interface shares neither; `records.ts` emits `struct D : B` for
|
|
31
|
+
* the base only. Claiming an interface here would license an upcast to a
|
|
32
|
+
* carrier no C++ base subobject backs.
|
|
33
|
+
*/
|
|
34
|
+
export declare const classHeritageOf: (checker: ts.TypeChecker, identities: IdentityTable, files: readonly ts.SourceFile[], reparentedBaseOf?: (node: ts.ClassLikeDeclaration) => ts.ClassLikeDeclaration | null) => ReadonlyMap<DeclarationId, readonly DeclarationId[]>;
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import ts from 'typescript';
|
|
2
|
+
import { transparentConstClassAliasTarget } from './class-alias.js';
|
|
3
|
+
/**
|
|
4
|
+
* Which classes each class INHERITS FROM, transitively -- the one fact two
|
|
5
|
+
* separate carrier questions both need and neither can answer on its own.
|
|
6
|
+
*
|
|
7
|
+
* `representation/derive.ts` reduces `T & AggregateOperation` -- what
|
|
8
|
+
* `operation instanceof AggregateOperation` narrows a `T extends
|
|
9
|
+
* AbstractOperation` parameter to -- and a reduction is only sound when one
|
|
10
|
+
* member is provably the other's ancestor, in which case the intersection IS
|
|
11
|
+
* the more-derived class. `conversion/build.ts` enumerates the widening from
|
|
12
|
+
* `class-ref(MongoRuntimeError)` to `class-ref(MongoError)` that `previous ??
|
|
13
|
+
* new MongoRuntimeError(...)` needs, and a widening is only sound in the
|
|
14
|
+
* ancestor direction. Both live below the semantic layer and neither may
|
|
15
|
+
* import `typescript`, so the answer is resolved once here and installed as a
|
|
16
|
+
* policy, the same way `KeyedCollectionPolicy` and `DateDeclarationPolicy`
|
|
17
|
+
* are.
|
|
18
|
+
*
|
|
19
|
+
* The CHECKER answers it, not the heritage syntax: `class D extends mixin(B)`
|
|
20
|
+
* states no name to read, and `getBaseTypes` follows the same chain
|
|
21
|
+
* assignability does. That also makes this agree with
|
|
22
|
+
* `projection/classes.ts`'s own `base` link by construction -- that one is
|
|
23
|
+
* read off the evaluated heritage value's carrier for the same reason, so the
|
|
24
|
+
* two never disagree about what a class extends, they only differ in how far
|
|
25
|
+
* they follow it (one link versus the whole chain).
|
|
26
|
+
*
|
|
27
|
+
* Interfaces a class `implements` are deliberately absent. This states class
|
|
28
|
+
* INHERITANCE -- shared storage and a shared struct base -- and an
|
|
29
|
+
* implemented interface shares neither; `records.ts` emits `struct D : B` for
|
|
30
|
+
* the base only. Claiming an interface here would license an upcast to a
|
|
31
|
+
* carrier no C++ base subobject backs.
|
|
32
|
+
*/
|
|
33
|
+
export const classHeritageOf = (checker, identities, files,
|
|
34
|
+
// `Object.setPrototypeOf(C.prototype, B.prototype)` makes `B` the class `C`
|
|
35
|
+
// inherits from exactly as `extends B` would for member lookup and
|
|
36
|
+
// `instanceof`; see `prototype-reparenting.ts` for when that is modelled.
|
|
37
|
+
reparentedBaseOf = () => null) => {
|
|
38
|
+
const declarationOf = (type) => {
|
|
39
|
+
const symbol = type.getSymbol();
|
|
40
|
+
const node = symbol?.declarations?.find((candidate) => ts.isClassLike(candidate));
|
|
41
|
+
if (!node || !ts.isClassLike(node))
|
|
42
|
+
return null;
|
|
43
|
+
return { node, id: identities.declarationIdOf(node) };
|
|
44
|
+
};
|
|
45
|
+
const heritage = new Map();
|
|
46
|
+
const active = new Set();
|
|
47
|
+
const ancestorsOf = (node, id) => {
|
|
48
|
+
const known = heritage.get(id);
|
|
49
|
+
if (known)
|
|
50
|
+
return known;
|
|
51
|
+
// A cycle is not expressible in TypeScript, but a malformed or partially
|
|
52
|
+
// resolved program can still present one, and answering the empty chain
|
|
53
|
+
// for the node already being walked keeps this total rather than
|
|
54
|
+
// recursing until the stack runs out.
|
|
55
|
+
if (active.has(id))
|
|
56
|
+
return [];
|
|
57
|
+
active.add(id);
|
|
58
|
+
const symbol = checker.getSymbolAtLocation(node.name ?? node);
|
|
59
|
+
const declared = symbol ? checker.getDeclaredTypeOfSymbol(symbol) : null;
|
|
60
|
+
const chain = [];
|
|
61
|
+
const syntacticBase = node.heritageClauses?.find((clause) => clause.token === ts.SyntaxKind.ExtendsKeyword)?.types[0]?.expression;
|
|
62
|
+
const aliasedBase = syntacticBase ? transparentConstClassAliasTarget(checker, syntacticBase) : null;
|
|
63
|
+
const aliasedSymbol = aliasedBase ? checker.getSymbolAtLocation(aliasedBase) : undefined;
|
|
64
|
+
const aliasedDeclaration = aliasedSymbol ? identities.declarationOfSymbol(aliasedSymbol) : null;
|
|
65
|
+
if (aliasedDeclaration && ts.isClassLike(aliasedDeclaration)) {
|
|
66
|
+
const baseId = identities.declarationIdOf(aliasedDeclaration);
|
|
67
|
+
chain.push(baseId);
|
|
68
|
+
for (const further of ancestorsOf(aliasedDeclaration, baseId))
|
|
69
|
+
if (!chain.includes(further))
|
|
70
|
+
chain.push(further);
|
|
71
|
+
}
|
|
72
|
+
const reparented = reparentedBaseOf(node);
|
|
73
|
+
if (reparented) {
|
|
74
|
+
const baseId = identities.declarationIdOf(reparented);
|
|
75
|
+
chain.push(baseId);
|
|
76
|
+
for (const further of ancestorsOf(reparented, baseId))
|
|
77
|
+
if (!chain.includes(further))
|
|
78
|
+
chain.push(further);
|
|
79
|
+
}
|
|
80
|
+
for (const base of declared?.isClassOrInterface() ? checker.getBaseTypes(declared) : []) {
|
|
81
|
+
const resolved = declarationOf(base);
|
|
82
|
+
if (!resolved)
|
|
83
|
+
continue;
|
|
84
|
+
if (!chain.includes(resolved.id))
|
|
85
|
+
chain.push(resolved.id);
|
|
86
|
+
for (const further of ancestorsOf(resolved.node, resolved.id)) {
|
|
87
|
+
if (!chain.includes(further))
|
|
88
|
+
chain.push(further);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
active.delete(id);
|
|
92
|
+
heritage.set(id, chain);
|
|
93
|
+
return chain;
|
|
94
|
+
};
|
|
95
|
+
for (const file of files) {
|
|
96
|
+
const visit = (node) => {
|
|
97
|
+
if (ts.isClassLike(node))
|
|
98
|
+
ancestorsOf(node, identities.declarationIdOf(node));
|
|
99
|
+
ts.forEachChild(node, visit);
|
|
100
|
+
};
|
|
101
|
+
visit(file);
|
|
102
|
+
}
|
|
103
|
+
return heritage;
|
|
104
|
+
};
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import ts from 'typescript';
|
|
2
|
+
import type { CommonJsWrapperDeclaration } from '../plugins/model.js';
|
|
3
|
+
export type CommonJsGlobal = 'require' | 'exports' | 'module';
|
|
4
|
+
export type CommonJsIdentifierIdentity = {
|
|
5
|
+
readonly kind: 'wrapper';
|
|
6
|
+
readonly global: CommonJsGlobal;
|
|
7
|
+
} | {
|
|
8
|
+
readonly kind: 'provenance-failure';
|
|
9
|
+
} | {
|
|
10
|
+
readonly kind: 'ordinary';
|
|
11
|
+
};
|
|
12
|
+
export declare const commonJsWrapperVariableOf: (node: ts.Node) => ts.VariableDeclaration | null;
|
|
13
|
+
/** Whether a `var` declaration shares the outer CommonJS wrapper's VariableEnvironment. */
|
|
14
|
+
export declare const isCommonJsWrapperVarDeclaration: (node: ts.VariableDeclaration) => boolean;
|
|
15
|
+
export declare const commonJsBindingIdentifiers: (name: ts.BindingName) => readonly ts.Identifier[];
|
|
16
|
+
/**
|
|
17
|
+
* A lexical `var` only aliases Node's wrapper parameter when the compiler has
|
|
18
|
+
* already classified this source as CommonJS. Syntax is deliberately not
|
|
19
|
+
* enough: the same declaration in an `.mjs` file or a `type: module` package
|
|
20
|
+
* owns a distinct local binding.
|
|
21
|
+
*
|
|
22
|
+
* The checker fills `impliedNodeFormat` only under Node16/NodeNext module
|
|
23
|
+
* resolution; this compiler resolves as a bundler (`program.ts`), so the
|
|
24
|
+
* field was never set and every source read as "format unknown", which the
|
|
25
|
+
* rule below answers as "not a wrapper" -- no `var require` in a `type:
|
|
26
|
+
* commonjs` package ever authenticated. The fact itself does not depend on
|
|
27
|
+
* the resolution mode: it is the nearest package.json's `type`, or the
|
|
28
|
+
* `.cjs`/`.mjs` extension, decided exactly as Node's loader decides it. So
|
|
29
|
+
* the same walk is asked of TypeScript directly, under the one mode that
|
|
30
|
+
* makes it answer. A file the walk cannot place still answers nothing, and
|
|
31
|
+
* nothing is never CommonJS.
|
|
32
|
+
*/
|
|
33
|
+
export declare const isCommonJsSourceFile: (file: ts.SourceFile, formats: Map<ts.SourceFile, ts.ResolutionMode>) => boolean;
|
|
34
|
+
/**
|
|
35
|
+
* The program's source text with every bare top-level `var` redeclaration of
|
|
36
|
+
* a wrapper name blanked, keyed by resolved file name, for the CommonJS files
|
|
37
|
+
* that carry one.
|
|
38
|
+
*
|
|
39
|
+
* `var require` at the top of a CommonJS module is what Node's own wrapper
|
|
40
|
+
* makes of it: a function-scoped redeclaration of the wrapper's parameter,
|
|
41
|
+
* which changes nothing at run time -- the name still holds the loader's
|
|
42
|
+
* `require`. TypeScript reads the same statement as a module-local `var` with
|
|
43
|
+
* no initializer and, under `strict`, gives it the evolving type every read
|
|
44
|
+
* sees as `undefined`: `const load = require; load('./x')` is then TS18048
|
|
45
|
+
* and TS2722, and `load`'s carrier is typed from nothing. The checker cannot
|
|
46
|
+
* be told that a local redeclares an outer parameter, so the statement is
|
|
47
|
+
* blanked before the final program is built: the identifier then resolves to
|
|
48
|
+
* the host's authenticated global declaration, which is what it names.
|
|
49
|
+
*
|
|
50
|
+
* Blanked rather than cut so every other position in the file is unchanged
|
|
51
|
+
* (`diagnostic-source-preparation.ts` makes the same choice). Only the bare
|
|
52
|
+
* form qualifies: an initializer is a real write the wrapper identity must
|
|
53
|
+
* see and refuse, a type annotation is the author's own statement about the
|
|
54
|
+
* name, an exported declaration is a module's surface, and a `var` inside a
|
|
55
|
+
* function is a different binding altogether. An ESM file is left alone --
|
|
56
|
+
* there the `var` is a genuine local the identity layer must NOT authenticate.
|
|
57
|
+
*/
|
|
58
|
+
export declare const withoutBareWrapperRedeclarations: (program: ts.Program, globals: ReadonlySet<string>, prepared: ReadonlyMap<string, string>) => Map<string, string>;
|
|
59
|
+
/**
|
|
60
|
+
* One authentication result shared by host binding and static-require analysis.
|
|
61
|
+
* The configured path and declaration spelling establish the host identity;
|
|
62
|
+
* module-scope `var` declarations may join it only because Node's wrapper has
|
|
63
|
+
* already introduced that exact parameter cell. No block binding, nested var,
|
|
64
|
+
* local function, import, or caller-owned ambient declaration is admitted.
|
|
65
|
+
*/
|
|
66
|
+
export declare const createCommonJsWrapperIdentity: (checker: ts.TypeChecker, files: readonly ts.SourceFile[], globals: ReadonlyMap<string, CommonJsWrapperDeclaration>) => {
|
|
67
|
+
readonly classify: (identifier: ts.Identifier) => CommonJsIdentifierIdentity;
|
|
68
|
+
readonly globalOfDeclaration: (declaration: ts.Declaration) => CommonJsGlobal | null;
|
|
69
|
+
};
|