@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,494 @@
|
|
|
1
|
+
import ts from 'typescript';
|
|
2
|
+
/**
|
|
3
|
+
* Self-reference without a declared name.
|
|
4
|
+
*
|
|
5
|
+
* `structural.ts`'s anchor rule assumes every cycle in the type graph passes
|
|
6
|
+
* through a declaration -- true for an interface or a class, and false for a
|
|
7
|
+
* recursive *type alias*: `type IDBValidKey = number | string | Date |
|
|
8
|
+
* BufferSource | IDBValidKey[]` (lib.dom.d.ts) is a union one of whose arms
|
|
9
|
+
* mentions it, and a union interns by shape rather than anchoring, so the walk
|
|
10
|
+
* re-enters it forever. The failure is a stack overflow, which says nothing
|
|
11
|
+
* about the program and takes every other answer down with it.
|
|
12
|
+
*
|
|
13
|
+
* Self-reference is *detected*, not assumed: the first walk raises the signal
|
|
14
|
+
* below when it re-enters a type it is already inside, and the retry anchors
|
|
15
|
+
* first, exactly as a declared name does. So only a type proven self-referential
|
|
16
|
+
* pays for an anchor, and every ordinary union keeps interning by shape --
|
|
17
|
+
* which is what keeps two structurally identical unions one id.
|
|
18
|
+
*
|
|
19
|
+
* That covers a cycle the walk can SEE, because the same `ts.Type` object comes
|
|
20
|
+
* back. `AliasRecurrence`, at the bottom of this file, covers the cycle it
|
|
21
|
+
* cannot: a generic alias that re-instantiates to a fresh type at every level,
|
|
22
|
+
* where re-entry is a fact about layout rather than about object identity. Both
|
|
23
|
+
* end in the same place -- an anchor reserved for the outer occurrence, which
|
|
24
|
+
* the inner one resolves to -- and only the test for "have I been here before"
|
|
25
|
+
* differs.
|
|
26
|
+
*/
|
|
27
|
+
/** Raised when a walk re-enters the type it is already inside. Carries the type so the frame that owns it can tell its own re-entry from an inner one. */
|
|
28
|
+
export const selfReferentialSignal = (type) => ({ selfReferentialType: type });
|
|
29
|
+
export const isSelfReferentialSignal = (error) => typeof error === 'object' && error !== null && 'selfReferentialType' in error;
|
|
30
|
+
/**
|
|
31
|
+
* The identity a self-referential type anchors under.
|
|
32
|
+
*
|
|
33
|
+
* Minted per checker type object -- the same identity the walk's `inProgress`
|
|
34
|
+
* and `completed` maps are already keyed on -- rather than derived from the
|
|
35
|
+
* alias's declaration: an alias with type arguments would need its arguments'
|
|
36
|
+
* structural ids in its key, and computing those means walking back into the
|
|
37
|
+
* very type the key exists to anchor. The cost is that two checker objects for
|
|
38
|
+
* one alias would anchor twice; the checker hands back one object per alias
|
|
39
|
+
* instantiation, so in practice they do not.
|
|
40
|
+
*/
|
|
41
|
+
export const selfReferentialKeyOf = (keys, type) => {
|
|
42
|
+
const existing = keys.get(type);
|
|
43
|
+
if (existing !== undefined)
|
|
44
|
+
return existing;
|
|
45
|
+
const key = `self-referential:${keys.size}`;
|
|
46
|
+
keys.set(type, key);
|
|
47
|
+
return key;
|
|
48
|
+
};
|
|
49
|
+
/**
|
|
50
|
+
* The shape of a self-referential type, built once its anchor exists so the
|
|
51
|
+
* mention of itself resolves to that anchor instead of recursing.
|
|
52
|
+
*
|
|
53
|
+
* The structural kinds that can close a cycle without a declared name: a
|
|
54
|
+
* union, an intersection, a tuple, an array, a callable, and a bare
|
|
55
|
+
* index-signature object. A declared name has its own anchor path and never
|
|
56
|
+
* reaches here.
|
|
57
|
+
*/
|
|
58
|
+
export const selfReferentialShapeOf = (checker, type, typeOf, tupleElementsOf, indexesOf, callableShapeOf) => {
|
|
59
|
+
if (type.isUnion())
|
|
60
|
+
return { kind: 'union', members: type.types.map(typeOf) };
|
|
61
|
+
// `declaration: null` on purpose. This builder answers the self-reference
|
|
62
|
+
// walk, which asks only how a shape is composed; the branded-alias name is a
|
|
63
|
+
// fact `structural.ts`'s own interning path carries, and inventing one here
|
|
64
|
+
// would give the same type two identities depending on which walk reached it.
|
|
65
|
+
// `resolved: null` -- this is the SELF-REFERENTIAL retry, which has no table
|
|
66
|
+
// to intern a second shape into and is reached precisely because the walk is
|
|
67
|
+
// already inside this type. `derive.ts` falls back to the member merge for a
|
|
68
|
+
// shape interned without a reconciliation.
|
|
69
|
+
if (type.isIntersection())
|
|
70
|
+
return { kind: 'intersection', members: type.types.map(typeOf), declaration: null, resolved: null };
|
|
71
|
+
if (checker.isTupleType(type)) {
|
|
72
|
+
const reference = type;
|
|
73
|
+
return { kind: 'tuple', elements: tupleElementsOf(reference), readonly: reference.target.readonly };
|
|
74
|
+
}
|
|
75
|
+
if (checker.isArrayType(type)) {
|
|
76
|
+
const element = checker.getTypeArguments(type)[0];
|
|
77
|
+
// `readonly` is the array-*like*-but-not-array case, which this branch has
|
|
78
|
+
// already excluded, so it is settled false rather than re-tested.
|
|
79
|
+
return element ? { kind: 'array', element: typeOf(element), readonly: false, extension: [] } : null;
|
|
80
|
+
}
|
|
81
|
+
// A callable (a method's own function type) can end up the *outer* frame of
|
|
82
|
+
// a walking collision purely by processing order -- the census does not
|
|
83
|
+
// promise a method's own allocation runs after its enclosing object
|
|
84
|
+
// literal's -- even though the object is what genuinely carries the cycle.
|
|
85
|
+
// `callableShapeOf` gives it the same plain `signature` shape it would have
|
|
86
|
+
// gotten via the ordinary call-signature branch; the object it references
|
|
87
|
+
// as `this` is anchored separately, by `declaredAnchorOf`'s alias fallback
|
|
88
|
+
// or the object-literal anchor in `structural.ts`.
|
|
89
|
+
const callable = callableShapeOf ? callableShapeOf(type) : null;
|
|
90
|
+
if (callable)
|
|
91
|
+
return callable;
|
|
92
|
+
// A DICTIONARY closes a cycle without a declared name too: hono's router is
|
|
93
|
+
// `class Node { #children: Record<string, Node> }`, and `Record<string, V>`
|
|
94
|
+
// is a homomorphic mapped-type instantiation whose own symbol answers the
|
|
95
|
+
// anonymous `__type` of the `MappedTypeNode` rather than the
|
|
96
|
+
// `TypeAliasDeclaration` -- so `declaredAnchorOf` returns null for it and
|
|
97
|
+
// the retry lands here with no name to anchor under. It has an index and
|
|
98
|
+
// that index's value is this very type.
|
|
99
|
+
//
|
|
100
|
+
// `members: []` is a FACT here, not a projection: this branch is taken only
|
|
101
|
+
// when the type has no properties at all, which a homomorphic `Record<K,V>`
|
|
102
|
+
// never does. An object that carries both named members and an index needs
|
|
103
|
+
// `objectShapeOf`'s location-aware member walk, which this retry has no
|
|
104
|
+
// access to -- so it keeps the refusal rather than interning a shape with
|
|
105
|
+
// its members silently dropped.
|
|
106
|
+
if (checker.getPropertiesOfType(type).length === 0) {
|
|
107
|
+
const index = indexesOf(type);
|
|
108
|
+
if (index.length > 0)
|
|
109
|
+
return { kind: 'object', members: [], index, membersDropped: false };
|
|
110
|
+
}
|
|
111
|
+
return null;
|
|
112
|
+
};
|
|
113
|
+
/**
|
|
114
|
+
* Whether two instantiations of one alias stand for the same layout.
|
|
115
|
+
*
|
|
116
|
+
* Mutual assignability is TypeScript's own structural relation, and it is
|
|
117
|
+
* already coinductive over recursive types -- which is exactly the decision
|
|
118
|
+
* procedure needed here, computed by the one component that has the whole type
|
|
119
|
+
* graph. Measured on mongodb: `Filter<WithId<Doc>>` against
|
|
120
|
+
* `Filter<WithId<WithId<Doc>>>` answers `true` both ways in 32 ms cold and
|
|
121
|
+
* ~0 ms after, because the checker memoizes its relation.
|
|
122
|
+
*
|
|
123
|
+
* ⛔ The `any`/`unknown` exclusions are not defensive noise. A top type is
|
|
124
|
+
* mutually assignable to EVERYTHING, so `Box<any>` and `Box<string>` would
|
|
125
|
+
* compare equal and folding them would merge a dynamic carrier into a string
|
|
126
|
+
* one -- a silently wrong layout, which is worse than the refusal this replaces.
|
|
127
|
+
* An argument that is a top type is therefore never foldable, and the backstop
|
|
128
|
+
* catches the alias instead.
|
|
129
|
+
*/
|
|
130
|
+
const createEquivalence = (checker) => {
|
|
131
|
+
const answers = new Map();
|
|
132
|
+
const isTopType = (type) => (type.flags & (ts.TypeFlags.Any | ts.TypeFlags.Unknown)) !== 0;
|
|
133
|
+
return (left, right) => {
|
|
134
|
+
// JSDoc typedef members can point back to the exact checker type object
|
|
135
|
+
// whose declared anchor is being built. That is the strongest possible
|
|
136
|
+
// equivalence: refusing it makes `Node[]` publish an unresolved element
|
|
137
|
+
// beside the otherwise valid `Node` anchor. Fresh alias instantiations
|
|
138
|
+
// still take the assignability path below.
|
|
139
|
+
if (left === right)
|
|
140
|
+
return true;
|
|
141
|
+
if (isTopType(left) || isTopType(right))
|
|
142
|
+
return false;
|
|
143
|
+
const leftArguments = left.aliasTypeArguments ?? [];
|
|
144
|
+
const rightArguments = right.aliasTypeArguments ?? [];
|
|
145
|
+
if (leftArguments.length !== rightArguments.length)
|
|
146
|
+
return false;
|
|
147
|
+
if (leftArguments.some(isTopType) || rightArguments.some(isTopType))
|
|
148
|
+
return false;
|
|
149
|
+
const key = `${typeIdOf(left)}|${typeIdOf(right)}`;
|
|
150
|
+
const remembered = answers.get(key);
|
|
151
|
+
if (remembered !== undefined)
|
|
152
|
+
return remembered;
|
|
153
|
+
// Optimistic while it is being decided: the relation is coinductive, and a
|
|
154
|
+
// re-entrant question about the same pair is the hypothesis, not a cycle to
|
|
155
|
+
// break. The checker answers its own recursive comparisons the same way.
|
|
156
|
+
answers.set(key, true);
|
|
157
|
+
const decided = leftArguments.every((argument, position) => {
|
|
158
|
+
const other = rightArguments[position];
|
|
159
|
+
return other !== undefined && checker.isTypeAssignableTo(argument, other) && checker.isTypeAssignableTo(other, argument);
|
|
160
|
+
}) &&
|
|
161
|
+
checker.isTypeAssignableTo(left, right) &&
|
|
162
|
+
checker.isTypeAssignableTo(right, left);
|
|
163
|
+
answers.set(key, decided);
|
|
164
|
+
return decided;
|
|
165
|
+
};
|
|
166
|
+
};
|
|
167
|
+
/** A type's checker-assigned id, which is stable within one program and is not on the public type. */
|
|
168
|
+
const typeIdOf = (type) => type.id ?? -1;
|
|
169
|
+
// A backstop, not the primary mechanism -- `guards` (shrink/grow via sub-term
|
|
170
|
+
// reachability) settles every case it has evidence for, at whatever depth.
|
|
171
|
+
// This only fires when NEITHER direction produced evidence, which every real
|
|
172
|
+
// finite chain measured against this file never does past a handful of
|
|
173
|
+
// levels (see the comment at its call site).
|
|
174
|
+
const aliasStackDepthLimit = 48;
|
|
175
|
+
export const createAliasRecurrence = (checker) => {
|
|
176
|
+
const equivalent = createEquivalence(checker);
|
|
177
|
+
// ⛔ The stack MUST be shared across specialization views. `buildMapper`
|
|
178
|
+
// builds one view per specialization path with its own guard state, and this
|
|
179
|
+
// unfolding crosses views: a per-view stack sees depth 0 every lap and never
|
|
180
|
+
// folds. That was measured on the counter this replaces -- a per-view version
|
|
181
|
+
// of exactly that code left all 334 hono laps in place.
|
|
182
|
+
//
|
|
183
|
+
// Shared, but not view-blind. An OPEN instantiation -- one whose alias
|
|
184
|
+
// arguments still mention a type parameter -- is the same checker object in
|
|
185
|
+
// every view that walks it, laid out differently under each view's
|
|
186
|
+
// bindings (`guards` below says why that is a schema, not a stage). Folding
|
|
187
|
+
// it to another view's occurrence would hand a copy the open view's layout,
|
|
188
|
+
// so for an open type only its own view's entries are consulted: the other
|
|
189
|
+
// views' walks of that schema neither fold it nor guard it. A CLOSED
|
|
190
|
+
// instantiation mentions no binding, lays out the same everywhere, and folds
|
|
191
|
+
// to the nearest equivalent ancestor whichever view pushed it -- through
|
|
192
|
+
// that entry's own resolver.
|
|
193
|
+
const unfolding = new Map();
|
|
194
|
+
return {
|
|
195
|
+
within: (type, walk, fold, refuse) => {
|
|
196
|
+
const alias = type.aliasSymbol;
|
|
197
|
+
if (alias === undefined)
|
|
198
|
+
return walk();
|
|
199
|
+
const ancestors = unfolding.get(alias) ?? [];
|
|
200
|
+
const open = mentionsTypeParameter(type);
|
|
201
|
+
const visible = open ? ancestors.filter((entry) => entry.fold === fold) : ancestors;
|
|
202
|
+
// Innermost first: the nearest equivalent ancestor is the tightest knot,
|
|
203
|
+
// and folding to it keeps the cycle as small as the type really is.
|
|
204
|
+
for (let position = visible.length - 1; position >= 0; position -= 1) {
|
|
205
|
+
const ancestor = visible[position];
|
|
206
|
+
if (ancestor !== undefined && equivalent(ancestor.type, type))
|
|
207
|
+
return ancestor.fold(ancestor.type);
|
|
208
|
+
}
|
|
209
|
+
if (visible.some((ancestor) => guards(ancestor.type, type)))
|
|
210
|
+
return refuse(`type alias ${alias.name} re-entered with no equivalent active instantiation: ` +
|
|
211
|
+
'the recursive equation has no stable declaration/type identity for a finite native carrier');
|
|
212
|
+
// ⛔ `guards` needs POSITIVE evidence of growth to refuse (`grewFrom`), so a
|
|
213
|
+
// pair that grows through a mechanism the sub-term walk cannot see at all --
|
|
214
|
+
// measured on `type Inc<N extends number> = ...` arithmetic, where each
|
|
215
|
+
// step's literal-number argument carries no `aliasTypeArguments`/
|
|
216
|
+
// `typeArguments` connecting it to the last -- answers `false` in both
|
|
217
|
+
// directions and `guards` never fires. Confirmed empirically: a hand-built
|
|
218
|
+
// `Count<N> = { next: Count<Inc<N>> }` walked 200+ levels with this file's
|
|
219
|
+
// sub-term measure and never refused, where the pre-`grewFrom` formula
|
|
220
|
+
// refused at the first re-entry. Every REAL finite chain in this file's own
|
|
221
|
+
// regression history closes far shallower than this -- mongodb's `Filter`
|
|
222
|
+
// folds by level 2, hono's `Record` siblings never exceed depth 2 -- so a
|
|
223
|
+
// stack this deep for one alias symbol is never a legitimate finite program;
|
|
224
|
+
// it is exactly the growth `guards` was supposed to catch and could not see.
|
|
225
|
+
// Refusing here trades a rare, generous-margin false refusal for turning an
|
|
226
|
+
// unbounded walk back into the diagnostic this file exists to produce.
|
|
227
|
+
if (ancestors.length >= aliasStackDepthLimit)
|
|
228
|
+
return refuse(`type alias ${alias.name} re-entered ${ancestors.length} levels deep with no growth the sub-term measure could ` +
|
|
229
|
+
'see in either direction: the recursive equation has no stable declaration/type identity for a finite native carrier');
|
|
230
|
+
ancestors.push({ type, fold });
|
|
231
|
+
unfolding.set(alias, ancestors);
|
|
232
|
+
try {
|
|
233
|
+
return walk();
|
|
234
|
+
}
|
|
235
|
+
finally {
|
|
236
|
+
ancestors.pop();
|
|
237
|
+
if (ancestors.length === 0)
|
|
238
|
+
unfolding.delete(alias);
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
};
|
|
242
|
+
};
|
|
243
|
+
/**
|
|
244
|
+
* Whether `ancestor` is a back edge for `type`, or merely the same declaration
|
|
245
|
+
* seen through a different specialization view.
|
|
246
|
+
*
|
|
247
|
+
* ⛔ A walk in progress over an OPEN instantiation -- one whose alias arguments
|
|
248
|
+
* still mention a type parameter -- is a schema, not a stage of an unfolding.
|
|
249
|
+
* Monomorphization forks the walk per copy while the open walk is still on the
|
|
250
|
+
* stack, so a copy that substitutes `T := number` reaches `Same<number>` under
|
|
251
|
+
* an active `Same<T>`. That is one substitution, not recursion, and refusing it
|
|
252
|
+
* left tsc's `contains`/`binarySearch` family (and every `EqualityComparer`,
|
|
253
|
+
* `Comparer` and `Transformer` parameter behind it) with an unresolved carrier.
|
|
254
|
+
*
|
|
255
|
+
* Termination still holds: the admitted closed instantiation is pushed, and a
|
|
256
|
+
* closed ancestor guards everything under it -- so `R<T>` may admit `R<number>`
|
|
257
|
+
* once, and `R<number[]>` beneath that is refused as before.
|
|
258
|
+
*
|
|
259
|
+
* ⛔ The second admission is a DESCENT: an instantiation whose every alias
|
|
260
|
+
* argument is a proper sub-term of the ancestor's. `Record<string,
|
|
261
|
+
* Record<string, H[]>>` re-enters `Record` at `Record<string, H[]>`, and both
|
|
262
|
+
* are open, so the rule above alone refuses it -- yet the type is plainly
|
|
263
|
+
* finite, and nothing about it is recursion. That single refusal was 255 of
|
|
264
|
+
* hono-hello's 487 roots: every one of `RegExpRouter`'s
|
|
265
|
+
* `Record<string, Record<string, HandlerWithMetadata<T>[]>>` fields, and every
|
|
266
|
+
* obligation minted off the `dictionary(string, unresolved, shared-refcount)`
|
|
267
|
+
* they produced.
|
|
268
|
+
*
|
|
269
|
+
* Descent is what bounds it, and it bounds it for the same reason a structural
|
|
270
|
+
* recursion does: the argument tuple strictly shrinks along the chain, and a
|
|
271
|
+
* type's sub-term graph is finite, so no infinite descending chain exists. An
|
|
272
|
+
* alias that GROWS its argument -- `type R<T> = { next: R<T[]> }` -- is
|
|
273
|
+
* untouched: `T[]` is not a sub-term of `T`, so it is refused exactly as
|
|
274
|
+
* before.
|
|
275
|
+
*
|
|
276
|
+
* ⛔ A re-entry at an UNRELATED argument -- neither a sub-term of the
|
|
277
|
+
* ancestor's nor a super-term of it -- is not a back edge of this alias's own
|
|
278
|
+
* unfolding at all, and refusing it was hono's `Node<T>`: walking
|
|
279
|
+
* `#children: Record<string, Node<T>>` unfolds the value `Node<T>`, which is
|
|
280
|
+
* a DECLARED class reached through its own anchor, and that class's member
|
|
281
|
+
* census incidentally revisits `#methods: Record<string, HandlerSet<T>>[]`
|
|
282
|
+
* -- a second, sibling `Record` instantiation nested on the stack purely
|
|
283
|
+
* because the class's own census happened to run underneath, not because
|
|
284
|
+
* `Record`'s definition refers to itself again. `Node<T>` and `HandlerSet<T>`
|
|
285
|
+
* share no sub-term relationship in either direction: the pair is not
|
|
286
|
+
* growing (measured on mongodb's `Filter`, `descends(type, ancestor)` is
|
|
287
|
+
* true there -- `WithId<T>` unfolds *from* `T`) and not shrinking (`descends`
|
|
288
|
+
* above is false). It is two unconnected instantiations that merely share a
|
|
289
|
+
* call stack, and `HandlerSet<T>` does not itself recur into `Record` or
|
|
290
|
+
* `Node`, so admitting it is finite by construction: this was 22 of
|
|
291
|
+
* hono-hello's roots at lines 35/39/76/94/95 of `node.ts`.
|
|
292
|
+
*
|
|
293
|
+
* Requiring GROWTH -- `descends(type, ancestor)`, the same sub-term measure
|
|
294
|
+
* with the pair reversed -- keeps refusing every case the file's own
|
|
295
|
+
* regression history cares about (mongodb's `Filter<T>` -> `Filter<WithId<T>>`
|
|
296
|
+
* still growing, still refused until the fold catches an equivalent ancestor)
|
|
297
|
+
* while admitting a re-entry that is simply unrelated to the ancestor it
|
|
298
|
+
* happened to be nested under.
|
|
299
|
+
*/
|
|
300
|
+
const guards = (ancestor, type) => !(mentionsTypeParameter(ancestor) && !mentionsTypeParameter(type)) && !descends(ancestor, type) && grewFrom(ancestor, type);
|
|
301
|
+
/**
|
|
302
|
+
* Whether every alias argument of `type` is a PROPER sub-term of `ancestor`'s
|
|
303
|
+
* alias arguments -- the measure that makes an open re-entry finite.
|
|
304
|
+
*
|
|
305
|
+
* Proper: the walk seeds from the ancestor's arguments' own children, never the
|
|
306
|
+
* arguments themselves, so `R<A, B>` under `R<A, B>` does not read as a descent
|
|
307
|
+
* (that pair is equivalent, and the fold above has already claimed it).
|
|
308
|
+
*
|
|
309
|
+
* Identity, not assignability. Two spellings of one argument are the same
|
|
310
|
+
* checker type object when they are the same type, and a structural comparison
|
|
311
|
+
* here would be both slower and looser than the measure needs: a sub-term
|
|
312
|
+
* relation that admitted an equal-but-not-identical argument would admit a
|
|
313
|
+
* chain that does not shrink.
|
|
314
|
+
*/
|
|
315
|
+
const subtermReach = (ancestor, type) => {
|
|
316
|
+
const descendants = type.aliasTypeArguments ?? [];
|
|
317
|
+
const ancestors = ancestor.aliasTypeArguments ?? [];
|
|
318
|
+
// Nothing to compare is not the same answer as "compared, and it does not
|
|
319
|
+
// descend": `guards` reads the two differently, so say which one this is.
|
|
320
|
+
if (descendants.length === 0 || ancestors.length === 0)
|
|
321
|
+
return 'unseen';
|
|
322
|
+
// The same bounds `mentionsTypeParameter` uses, and for the same reason: a
|
|
323
|
+
// type argument graph can be cyclic. Past the bound the walk has stopped
|
|
324
|
+
// seeing, and a truncated `reachable` can miss a sub-term that is really
|
|
325
|
+
// there -- so saturation is reported as `unseen`, never as `no`.
|
|
326
|
+
const budget = 4000;
|
|
327
|
+
let truncated = false;
|
|
328
|
+
const reachable = new Set();
|
|
329
|
+
const collect = (argument, depth) => {
|
|
330
|
+
if (reachable.has(argument))
|
|
331
|
+
return;
|
|
332
|
+
if (depth > 6 || reachable.size >= budget) {
|
|
333
|
+
truncated = true;
|
|
334
|
+
return;
|
|
335
|
+
}
|
|
336
|
+
reachable.add(argument);
|
|
337
|
+
if (argument.isUnionOrIntersection())
|
|
338
|
+
for (const member of argument.types)
|
|
339
|
+
collect(member, depth + 1);
|
|
340
|
+
const reference = argument;
|
|
341
|
+
for (const nested of reference.aliasTypeArguments ?? reference.typeArguments ?? [])
|
|
342
|
+
collect(nested, depth + 1);
|
|
343
|
+
};
|
|
344
|
+
for (const argument of ancestors) {
|
|
345
|
+
if (argument.isUnionOrIntersection())
|
|
346
|
+
for (const member of argument.types)
|
|
347
|
+
collect(member, 1);
|
|
348
|
+
const reference = argument;
|
|
349
|
+
for (const nested of reference.aliasTypeArguments ?? reference.typeArguments ?? [])
|
|
350
|
+
collect(nested, 1);
|
|
351
|
+
}
|
|
352
|
+
if (descendants.every((argument) => reachable.has(argument)))
|
|
353
|
+
return 'descends';
|
|
354
|
+
return truncated ? 'unseen' : 'no';
|
|
355
|
+
};
|
|
356
|
+
const descends = (ancestor, type) => subtermReach(ancestor, type) === 'descends';
|
|
357
|
+
/**
|
|
358
|
+
* Whether `type` re-enters the alias having GROWN out of `ancestor` -- the
|
|
359
|
+
* ancestor's own arguments reappearing as sub-terms of the new ones, which is
|
|
360
|
+
* the shape that unfolds without bound (`Filter<T>` -> `Filter<WithId<T>>`).
|
|
361
|
+
*
|
|
362
|
+
* Fail-closed, and that is the whole reason this is not just
|
|
363
|
+
* `descends(type, ancestor)`. The measure has two blind spots -- an alias with
|
|
364
|
+
* no arguments to compare, and a sub-term walk that hit its bound -- and in
|
|
365
|
+
* both the honest answer is "cannot see". While growth was not part of the
|
|
366
|
+
* question those answered `false` and the refusal stood anyway; as a
|
|
367
|
+
* REQUIREMENT for refusing, a `false` there would clear it instead, turning a
|
|
368
|
+
* diagnostic into an unbounded walk. So both answer true here.
|
|
369
|
+
*/
|
|
370
|
+
const grewFrom = (ancestor, type) => subtermReach(type, ancestor) !== 'no';
|
|
371
|
+
/**
|
|
372
|
+
* Conservative: an argument this cannot see through (a bare object literal type
|
|
373
|
+
* mentioning `T`) reads as closed, which keeps the pre-existing refusal rather
|
|
374
|
+
* than admitting a re-entry whose finiteness was never established.
|
|
375
|
+
*/
|
|
376
|
+
const mentionsTypeParameter = (type) => {
|
|
377
|
+
const mentions = (argument, depth) => {
|
|
378
|
+
if ((argument.flags & ts.TypeFlags.Instantiable) !== 0)
|
|
379
|
+
return true;
|
|
380
|
+
// A type argument graph can be cyclic; the answer past a few levels is
|
|
381
|
+
// "cannot see", which reads as closed and keeps the existing refusal.
|
|
382
|
+
if (depth > 6)
|
|
383
|
+
return false;
|
|
384
|
+
if (argument.isUnionOrIntersection())
|
|
385
|
+
return argument.types.some((member) => mentions(member, depth + 1));
|
|
386
|
+
const reference = argument;
|
|
387
|
+
return (reference.aliasTypeArguments ?? reference.typeArguments ?? []).some((nested) => mentions(nested, depth + 1));
|
|
388
|
+
};
|
|
389
|
+
return (type.aliasTypeArguments ?? []).some((argument) => mentions(argument, 0));
|
|
390
|
+
};
|
|
391
|
+
/**
|
|
392
|
+
* The anchor key of a self-referential type whose shape cannot depend on
|
|
393
|
+
* the view it is walked in -- it mentions no type parameter a function or
|
|
394
|
+
* class declaration binds -- so every specialization view closes the cycle
|
|
395
|
+
* at ONE anchor. `null` for a type a view could shape differently, which
|
|
396
|
+
* keeps its per-view key. One instance serves every view of a mapper: the
|
|
397
|
+
* ordinal names the checker's type object compilation-wide, where the
|
|
398
|
+
* per-view `selfReferentialKeyOf` ordinal would collide across views.
|
|
399
|
+
*
|
|
400
|
+
* Why it exists: `type State = <S, R>(m: Machine<S, R>, stack: State[], ...)
|
|
401
|
+
* => number` entered from `stateStack: State[]` in three generic functions
|
|
402
|
+
* minted one `State[]` per copy -- five ids for one array -- and a callable
|
|
403
|
+
* read out of one copy's cell could not enter another's slot.
|
|
404
|
+
*/
|
|
405
|
+
export const createViewIndependentRecurrence = (checker) => {
|
|
406
|
+
const keys = new Map();
|
|
407
|
+
// A signature written as a TYPE (`(x: T) => T` in an alias, an interface
|
|
408
|
+
// method) binds its own parameters; only a declaration with a body, or a
|
|
409
|
+
// class, is a specialization the view can copy.
|
|
410
|
+
const viewBinds = (owner) => ts.isClassLike(owner) ||
|
|
411
|
+
(ts.isFunctionLike(owner) &&
|
|
412
|
+
!ts.isFunctionTypeNode(owner) &&
|
|
413
|
+
!ts.isConstructorTypeNode(owner) &&
|
|
414
|
+
!ts.isMethodSignature(owner) &&
|
|
415
|
+
!ts.isCallSignatureDeclaration(owner) &&
|
|
416
|
+
!ts.isConstructSignatureDeclaration(owner) &&
|
|
417
|
+
!ts.isIndexSignatureDeclaration(owner));
|
|
418
|
+
// A bound on the walk: past it the answer is the conservative one (keep the
|
|
419
|
+
// per-view key), so a lib.dom-sized type costs nothing more than before.
|
|
420
|
+
const budget = 4000;
|
|
421
|
+
const viewDependent = (type, seen) => {
|
|
422
|
+
if (seen.has(type))
|
|
423
|
+
return false;
|
|
424
|
+
if (seen.size >= budget)
|
|
425
|
+
return true;
|
|
426
|
+
seen.add(type);
|
|
427
|
+
if ((type.flags & ts.TypeFlags.TypeParameter) !== 0) {
|
|
428
|
+
const owner = type.getSymbol()?.declarations?.[0]?.parent;
|
|
429
|
+
return owner !== undefined && viewBinds(owner);
|
|
430
|
+
}
|
|
431
|
+
// The other instantiable forms, each through the types it is built from.
|
|
432
|
+
if ((type.flags & ts.TypeFlags.Conditional) !== 0) {
|
|
433
|
+
const conditional = type;
|
|
434
|
+
if (viewDependent(conditional.checkType, seen) || viewDependent(conditional.extendsType, seen))
|
|
435
|
+
return true;
|
|
436
|
+
return (type.aliasTypeArguments ?? []).some((argument) => viewDependent(argument, seen));
|
|
437
|
+
}
|
|
438
|
+
if ((type.flags & ts.TypeFlags.IndexedAccess) !== 0) {
|
|
439
|
+
const access = type;
|
|
440
|
+
return viewDependent(access.objectType, seen) || viewDependent(access.indexType, seen);
|
|
441
|
+
}
|
|
442
|
+
if ((type.flags & ts.TypeFlags.Index) !== 0)
|
|
443
|
+
return viewDependent(type.type, seen);
|
|
444
|
+
if ((type.flags & ts.TypeFlags.Substitution) !== 0)
|
|
445
|
+
return viewDependent(type.baseType, seen);
|
|
446
|
+
if ((type.flags & ts.TypeFlags.TemplateLiteral) !== 0) {
|
|
447
|
+
return type.types.some((member) => viewDependent(member, seen));
|
|
448
|
+
}
|
|
449
|
+
if ((type.flags & ts.TypeFlags.StringMapping) !== 0)
|
|
450
|
+
return viewDependent(type.type, seen);
|
|
451
|
+
if ((type.flags & ts.TypeFlags.UnionOrIntersection) !== 0) {
|
|
452
|
+
return type.types.some((member) => viewDependent(member, seen));
|
|
453
|
+
}
|
|
454
|
+
if ((type.flags & ts.TypeFlags.Object) === 0)
|
|
455
|
+
return false;
|
|
456
|
+
if ((type.aliasTypeArguments ?? []).some((argument) => viewDependent(argument, seen)))
|
|
457
|
+
return true;
|
|
458
|
+
const object = type;
|
|
459
|
+
if ((object.objectFlags & ts.ObjectFlags.Reference) !== 0) {
|
|
460
|
+
// An instantiation of a declared generic: everything a view could
|
|
461
|
+
// change is in the arguments, and the members are the declaration's
|
|
462
|
+
// own. Following them instead never terminates -- `Array<T>.concat`
|
|
463
|
+
// takes `ConcatArray<T>[]`, whose `concat` takes
|
|
464
|
+
// `ConcatArray<ConcatArray<T>>[]`, a fresh instantiation every step.
|
|
465
|
+
return checker.getTypeArguments(object).some((argument) => viewDependent(argument, seen));
|
|
466
|
+
}
|
|
467
|
+
if ((object.objectFlags & ts.ObjectFlags.Mapped) !== 0) {
|
|
468
|
+
const mapped = type;
|
|
469
|
+
return [mapped.constraintType, mapped.templateType, mapped.modifiersType].some((part) => part !== undefined && viewDependent(part, seen));
|
|
470
|
+
}
|
|
471
|
+
// A class or interface declaration reached as itself binds its own
|
|
472
|
+
// parameters; only an anonymous literal (a function type, an object
|
|
473
|
+
// type) carries members written in terms of an enclosing declaration's.
|
|
474
|
+
if ((object.objectFlags & ts.ObjectFlags.Anonymous) === 0)
|
|
475
|
+
return false;
|
|
476
|
+
for (const signature of [...type.getCallSignatures(), ...type.getConstructSignatures()]) {
|
|
477
|
+
if (signature.parameters.some((parameter) => viewDependent(checker.getTypeOfSymbol(parameter), seen)))
|
|
478
|
+
return true;
|
|
479
|
+
if (viewDependent(signature.getReturnType(), seen))
|
|
480
|
+
return true;
|
|
481
|
+
}
|
|
482
|
+
if (checker.getIndexInfosOfType(type).some((index) => viewDependent(index.type, seen)))
|
|
483
|
+
return true;
|
|
484
|
+
return checker.getPropertiesOfType(type).some((property) => viewDependent(checker.getTypeOfSymbol(property), seen));
|
|
485
|
+
};
|
|
486
|
+
return (type) => {
|
|
487
|
+
const known = keys.get(type);
|
|
488
|
+
if (known !== undefined)
|
|
489
|
+
return known;
|
|
490
|
+
const key = viewDependent(type, new Set()) ? null : `view-independent:${keys.size}`;
|
|
491
|
+
keys.set(type, key);
|
|
492
|
+
return key;
|
|
493
|
+
};
|
|
494
|
+
};
|