@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,7 @@
|
|
|
1
|
+
import ts from 'typescript';
|
|
2
|
+
/**
|
|
3
|
+
* JS assignment inference can publish a subclass Property symbol even when
|
|
4
|
+
* `this.x = value` invokes an inherited accessor. That symbol describes a
|
|
5
|
+
* write, not a new own field. Explicit class fields still define own storage.
|
|
6
|
+
*/
|
|
7
|
+
export declare const inheritedAccessorOfAssignment: (checker: ts.TypeChecker, symbol: ts.Symbol) => ts.Symbol | null;
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import ts from 'typescript';
|
|
2
|
+
import { heritageClassOrInterfaceOf } from './normalize/flow/model.js';
|
|
3
|
+
/**
|
|
4
|
+
* JS assignment inference can publish a subclass Property symbol even when
|
|
5
|
+
* `this.x = value` invokes an inherited accessor. That symbol describes a
|
|
6
|
+
* write, not a new own field. Explicit class fields still define own storage.
|
|
7
|
+
*/
|
|
8
|
+
export const inheritedAccessorOfAssignment = (checker, symbol) => {
|
|
9
|
+
const declarations = symbol.declarations;
|
|
10
|
+
if (!declarations?.length ||
|
|
11
|
+
!declarations.every((node) => ts.isBinaryExpression(node) && node.operatorToken.kind === ts.SyntaxKind.EqualsToken))
|
|
12
|
+
return null;
|
|
13
|
+
let owner = declarations[0]?.parent;
|
|
14
|
+
while (owner && !ts.isClassLike(owner))
|
|
15
|
+
owner = owner.parent;
|
|
16
|
+
if (!owner || !ts.isClassLike(owner))
|
|
17
|
+
return null;
|
|
18
|
+
const type = checker.getTypeAtLocation(owner);
|
|
19
|
+
if (!type.isClassOrInterface())
|
|
20
|
+
return null;
|
|
21
|
+
const seen = new Set();
|
|
22
|
+
const find = (base) => {
|
|
23
|
+
if (seen.has(base))
|
|
24
|
+
return null;
|
|
25
|
+
seen.add(base);
|
|
26
|
+
const property = checker.getPropertyOfType(base, symbol.name);
|
|
27
|
+
if (property) {
|
|
28
|
+
if ((property.flags & ts.SymbolFlags.Accessor) !== 0)
|
|
29
|
+
return property;
|
|
30
|
+
// An actual intervening data declaration shadows the older accessor.
|
|
31
|
+
if (!property.declarations?.every((node) => ts.isBinaryExpression(node)))
|
|
32
|
+
return null;
|
|
33
|
+
}
|
|
34
|
+
const declared = heritageClassOrInterfaceOf(base);
|
|
35
|
+
for (const ancestor of declared === null ? [] : checker.getBaseTypes(declared)) {
|
|
36
|
+
const found = find(ancestor);
|
|
37
|
+
if (found)
|
|
38
|
+
return found;
|
|
39
|
+
}
|
|
40
|
+
return null;
|
|
41
|
+
};
|
|
42
|
+
for (const base of checker.getBaseTypes(type)) {
|
|
43
|
+
const found = find(base);
|
|
44
|
+
if (found)
|
|
45
|
+
return found;
|
|
46
|
+
}
|
|
47
|
+
return null;
|
|
48
|
+
};
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import ts from 'typescript';
|
|
2
|
+
import type { DeclarationId } from '../identity/ids.js';
|
|
3
|
+
import type { IdentityTable } from './normalize/identities.js';
|
|
4
|
+
/**
|
|
5
|
+
* One interface family: the source interfaces an `extends` graph connects.
|
|
6
|
+
*
|
|
7
|
+
* `members` is in source order, so the layout `structural.ts` builds from it
|
|
8
|
+
* lists fields the way the program's own text first declares them; `key` is
|
|
9
|
+
* the family's stable identity, the id of its first member.
|
|
10
|
+
*/
|
|
11
|
+
export interface InterfaceFamily {
|
|
12
|
+
readonly key: DeclarationId;
|
|
13
|
+
readonly members: readonly ts.InterfaceDeclaration[];
|
|
14
|
+
}
|
|
15
|
+
export interface InterfaceFamilyCensus {
|
|
16
|
+
/** The family an interface declaration (by its canonical declaration id) belongs to, or `null` for a lone one. */
|
|
17
|
+
readonly familyOf: (declaration: DeclarationId) => InterfaceFamily | null;
|
|
18
|
+
readonly families: readonly InterfaceFamily[];
|
|
19
|
+
}
|
|
20
|
+
export declare const emptyInterfaceFamilyCensus: InterfaceFamilyCensus;
|
|
21
|
+
/**
|
|
22
|
+
* The interfaces this program's `extends` edges connect, so that every view
|
|
23
|
+
* of one object is ONE layout.
|
|
24
|
+
*
|
|
25
|
+
* JavaScript has no interfaces, and a program full of them still allocates
|
|
26
|
+
* one kind of thing: tsc's `Node` is 300 interfaces -- `Statement`,
|
|
27
|
+
* `Expression`, `Identifier`, `SourceFile`, ... -- every one of them a VIEW
|
|
28
|
+
* of the same object `function Node(kind, pos, end)` allocated, written
|
|
29
|
+
* through `as Mutable<Identifier>` casts and read back through `Statement`
|
|
30
|
+
* parameters. Laying each interface out as its own struct gives one object
|
|
31
|
+
* 300 incompatible C++ types, and the program's every `Identifier -> Node`
|
|
32
|
+
* assignment becomes a conversion nothing can install: a copy would break
|
|
33
|
+
* identity (`a === b`, a later write through the other view) and a
|
|
34
|
+
* reinterpretation is not a conversion at all. On the tsc self-compile that
|
|
35
|
+
* was the single largest family in the census after monomorphization landed:
|
|
36
|
+
* 1,757 `native-record-ref -> native-record-ref` binding reads plus their
|
|
37
|
+
* return, optional and union forms.
|
|
38
|
+
*
|
|
39
|
+
* So the layout follows the OBJECT, not the view: every interface a family
|
|
40
|
+
* connects derives to one struct holding the union of the family's fields,
|
|
41
|
+
* with a field required only where every member declares it required and
|
|
42
|
+
* carried behind a presence bit otherwise -- exactly what an object of that
|
|
43
|
+
* family may or may not own at runtime. The layout itself is built by
|
|
44
|
+
* `structural.ts` (`familyBodyOf`), where the member types can be interned;
|
|
45
|
+
* this census only answers WHICH declarations are one family.
|
|
46
|
+
*
|
|
47
|
+
* What is NOT a member, and why each exclusion is the rule rather than a
|
|
48
|
+
* gap:
|
|
49
|
+
*
|
|
50
|
+
* - An interface in a declaration file. Its layout is a host protocol's, and
|
|
51
|
+
* the host owns it.
|
|
52
|
+
* - An interface extending anything that is not itself a member candidate --
|
|
53
|
+
* `Array<T>` (`arrayHeritageShapeOf` lays that out as an array), a class,
|
|
54
|
+
* a type alias, an ambient interface. Its layout includes the base's
|
|
55
|
+
* members, which the family cannot own, and so do its descendants': the
|
|
56
|
+
* taint follows `extends` downward.
|
|
57
|
+
* - An interface with a call or construct signature (a callable, laid out as
|
|
58
|
+
* one), an index signature (a dictionary) or an accessor member (a body,
|
|
59
|
+
* not storage).
|
|
60
|
+
* - A generic interface whose type parameter has no constraint that names a
|
|
61
|
+
* type: the family's field for `value: T` would have to be `unknown`, and
|
|
62
|
+
* a boxed slot in every object of the family is the defect this compiler
|
|
63
|
+
* exists to avoid. A constrained one (`Token<TKind extends SyntaxKind>`)
|
|
64
|
+
* is fine: its field is the constraint, which is what the union over every
|
|
65
|
+
* instantiation is anyway (`structural.ts`'s type-parameter fallback).
|
|
66
|
+
*
|
|
67
|
+
* A family of ONE is no family: its single member keeps the body its own
|
|
68
|
+
* declaration states, exactly as before this census existed.
|
|
69
|
+
*/
|
|
70
|
+
export declare const interfaceFamiliesOf: (checker: ts.TypeChecker, identities: IdentityTable, files: readonly ts.SourceFile[]) => InterfaceFamilyCensus;
|
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
import ts from 'typescript';
|
|
2
|
+
export const emptyInterfaceFamilyCensus = { familyOf: () => null, families: [] };
|
|
3
|
+
/**
|
|
4
|
+
* The interfaces this program's `extends` edges connect, so that every view
|
|
5
|
+
* of one object is ONE layout.
|
|
6
|
+
*
|
|
7
|
+
* JavaScript has no interfaces, and a program full of them still allocates
|
|
8
|
+
* one kind of thing: tsc's `Node` is 300 interfaces -- `Statement`,
|
|
9
|
+
* `Expression`, `Identifier`, `SourceFile`, ... -- every one of them a VIEW
|
|
10
|
+
* of the same object `function Node(kind, pos, end)` allocated, written
|
|
11
|
+
* through `as Mutable<Identifier>` casts and read back through `Statement`
|
|
12
|
+
* parameters. Laying each interface out as its own struct gives one object
|
|
13
|
+
* 300 incompatible C++ types, and the program's every `Identifier -> Node`
|
|
14
|
+
* assignment becomes a conversion nothing can install: a copy would break
|
|
15
|
+
* identity (`a === b`, a later write through the other view) and a
|
|
16
|
+
* reinterpretation is not a conversion at all. On the tsc self-compile that
|
|
17
|
+
* was the single largest family in the census after monomorphization landed:
|
|
18
|
+
* 1,757 `native-record-ref -> native-record-ref` binding reads plus their
|
|
19
|
+
* return, optional and union forms.
|
|
20
|
+
*
|
|
21
|
+
* So the layout follows the OBJECT, not the view: every interface a family
|
|
22
|
+
* connects derives to one struct holding the union of the family's fields,
|
|
23
|
+
* with a field required only where every member declares it required and
|
|
24
|
+
* carried behind a presence bit otherwise -- exactly what an object of that
|
|
25
|
+
* family may or may not own at runtime. The layout itself is built by
|
|
26
|
+
* `structural.ts` (`familyBodyOf`), where the member types can be interned;
|
|
27
|
+
* this census only answers WHICH declarations are one family.
|
|
28
|
+
*
|
|
29
|
+
* What is NOT a member, and why each exclusion is the rule rather than a
|
|
30
|
+
* gap:
|
|
31
|
+
*
|
|
32
|
+
* - An interface in a declaration file. Its layout is a host protocol's, and
|
|
33
|
+
* the host owns it.
|
|
34
|
+
* - An interface extending anything that is not itself a member candidate --
|
|
35
|
+
* `Array<T>` (`arrayHeritageShapeOf` lays that out as an array), a class,
|
|
36
|
+
* a type alias, an ambient interface. Its layout includes the base's
|
|
37
|
+
* members, which the family cannot own, and so do its descendants': the
|
|
38
|
+
* taint follows `extends` downward.
|
|
39
|
+
* - An interface with a call or construct signature (a callable, laid out as
|
|
40
|
+
* one), an index signature (a dictionary) or an accessor member (a body,
|
|
41
|
+
* not storage).
|
|
42
|
+
* - A generic interface whose type parameter has no constraint that names a
|
|
43
|
+
* type: the family's field for `value: T` would have to be `unknown`, and
|
|
44
|
+
* a boxed slot in every object of the family is the defect this compiler
|
|
45
|
+
* exists to avoid. A constrained one (`Token<TKind extends SyntaxKind>`)
|
|
46
|
+
* is fine: its field is the constraint, which is what the union over every
|
|
47
|
+
* instantiation is anyway (`structural.ts`'s type-parameter fallback).
|
|
48
|
+
*
|
|
49
|
+
* A family of ONE is no family: its single member keeps the body its own
|
|
50
|
+
* declaration states, exactly as before this census existed.
|
|
51
|
+
*/
|
|
52
|
+
export const interfaceFamiliesOf = (checker, identities, files) => {
|
|
53
|
+
const candidates = new Map();
|
|
54
|
+
/** The canonical declaration an interface symbol is known by -- merged declarations share it. */
|
|
55
|
+
const canonicalOf = (symbol) => {
|
|
56
|
+
const target = (symbol.flags & ts.SymbolFlags.Alias) !== 0 ? checker.getAliasedSymbol(symbol) : symbol;
|
|
57
|
+
const declaration = identities.declarationOfSymbol(target);
|
|
58
|
+
if (!declaration || !ts.isInterfaceDeclaration(declaration))
|
|
59
|
+
return null;
|
|
60
|
+
// A source interface merged with an ambient one (`interface Node` beside
|
|
61
|
+
// lib.dom's) is the ambient one's: the host owns that layout.
|
|
62
|
+
if ((target.declarations ?? []).some((one) => one.getSourceFile().isDeclarationFile))
|
|
63
|
+
return null;
|
|
64
|
+
return { id: identities.declarationIdOf(declaration), declaration };
|
|
65
|
+
};
|
|
66
|
+
const unconstrainedParameter = (declaration) => (declaration.typeParameters ?? []).some((parameter) => {
|
|
67
|
+
const symbol = checker.getSymbolAtLocation(parameter.name);
|
|
68
|
+
const type = symbol ? checker.getDeclaredTypeOfSymbol(symbol) : null;
|
|
69
|
+
const constraint = type ? checker.getBaseConstraintOfType(type) : undefined;
|
|
70
|
+
return constraint === undefined || (constraint.flags & (ts.TypeFlags.Unknown | ts.TypeFlags.Any)) !== 0;
|
|
71
|
+
});
|
|
72
|
+
const declaresAnAccessor = (symbol) => (symbol.declarations ?? []).some((declaration) => ts.isInterfaceDeclaration(declaration) &&
|
|
73
|
+
declaration.members.some((member) => ts.isGetAccessorDeclaration(member) || ts.isSetAccessorDeclaration(member)));
|
|
74
|
+
for (const file of files) {
|
|
75
|
+
if (file.isDeclarationFile)
|
|
76
|
+
continue;
|
|
77
|
+
const visit = (node) => {
|
|
78
|
+
if (ts.isInterfaceDeclaration(node)) {
|
|
79
|
+
const symbol = checker.getSymbolAtLocation(node.name);
|
|
80
|
+
const canonical = symbol ? canonicalOf(symbol) : null;
|
|
81
|
+
if (symbol && canonical && !candidates.has(canonical.id)) {
|
|
82
|
+
const type = checker.getDeclaredTypeOfSymbol(symbol);
|
|
83
|
+
const plain = type.getCallSignatures().length === 0 &&
|
|
84
|
+
type.getConstructSignatures().length === 0 &&
|
|
85
|
+
checker.getIndexInfosOfType(type).length === 0 &&
|
|
86
|
+
!declaresAnAccessor(symbol) &&
|
|
87
|
+
!unconstrainedParameter(canonical.declaration);
|
|
88
|
+
if (plain)
|
|
89
|
+
candidates.set(canonical.id, { id: canonical.id, declaration: canonical.declaration, type });
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
ts.forEachChild(node, visit);
|
|
93
|
+
};
|
|
94
|
+
visit(file);
|
|
95
|
+
}
|
|
96
|
+
// The `extends` edges, as the checker resolves them: `getBaseTypes` covers
|
|
97
|
+
// every merged declaration and every instantiated base
|
|
98
|
+
// (`EndOfFileToken extends Token<SyntaxKind.EndOfFileToken>` reaches
|
|
99
|
+
// `Token`), and a base that is not a candidate taints the whole subtree.
|
|
100
|
+
const bases = new Map();
|
|
101
|
+
const tainted = new Set();
|
|
102
|
+
for (const candidate of candidates.values()) {
|
|
103
|
+
const resolved = [];
|
|
104
|
+
for (const base of candidate.type.isClassOrInterface() ? checker.getBaseTypes(candidate.type) : []) {
|
|
105
|
+
const symbol = base.getSymbol();
|
|
106
|
+
const canonical = symbol ? canonicalOf(symbol) : null;
|
|
107
|
+
if (canonical && candidates.has(canonical.id))
|
|
108
|
+
resolved.push(canonical.id);
|
|
109
|
+
else
|
|
110
|
+
tainted.add(candidate.id);
|
|
111
|
+
}
|
|
112
|
+
bases.set(candidate.id, resolved);
|
|
113
|
+
}
|
|
114
|
+
let grew = true;
|
|
115
|
+
while (grew) {
|
|
116
|
+
grew = false;
|
|
117
|
+
for (const [id, own] of bases) {
|
|
118
|
+
if (tainted.has(id) || !own.some((base) => tainted.has(base)))
|
|
119
|
+
continue;
|
|
120
|
+
tainted.add(id);
|
|
121
|
+
grew = true;
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
// Union-find over the untainted edges.
|
|
125
|
+
const parent = new Map();
|
|
126
|
+
const find = (id) => {
|
|
127
|
+
const up = parent.get(id) ?? id;
|
|
128
|
+
if (up === id)
|
|
129
|
+
return id;
|
|
130
|
+
const root = find(up);
|
|
131
|
+
parent.set(id, root);
|
|
132
|
+
return root;
|
|
133
|
+
};
|
|
134
|
+
const unite = (left, right) => {
|
|
135
|
+
const a = find(left);
|
|
136
|
+
const b = find(right);
|
|
137
|
+
if (a !== b)
|
|
138
|
+
parent.set(a, b);
|
|
139
|
+
};
|
|
140
|
+
for (const [id, own] of bases) {
|
|
141
|
+
if (tainted.has(id))
|
|
142
|
+
continue;
|
|
143
|
+
for (const base of own)
|
|
144
|
+
unite(id, base);
|
|
145
|
+
}
|
|
146
|
+
const groups = new Map();
|
|
147
|
+
for (const candidate of candidates.values()) {
|
|
148
|
+
if (tainted.has(candidate.id))
|
|
149
|
+
continue;
|
|
150
|
+
const root = find(candidate.id);
|
|
151
|
+
const group = groups.get(root);
|
|
152
|
+
if (group)
|
|
153
|
+
group.push(candidate.declaration);
|
|
154
|
+
else
|
|
155
|
+
groups.set(root, [candidate.declaration]);
|
|
156
|
+
}
|
|
157
|
+
const byPosition = (left, right) => {
|
|
158
|
+
const leftFile = left.getSourceFile().fileName;
|
|
159
|
+
const rightFile = right.getSourceFile().fileName;
|
|
160
|
+
if (leftFile !== rightFile)
|
|
161
|
+
return leftFile < rightFile ? -1 : 1;
|
|
162
|
+
return left.pos - right.pos;
|
|
163
|
+
};
|
|
164
|
+
const families = [];
|
|
165
|
+
const familyOfDeclaration = new Map();
|
|
166
|
+
for (const group of groups.values()) {
|
|
167
|
+
if (group.length < 2)
|
|
168
|
+
continue;
|
|
169
|
+
const members = [...group].sort(byPosition);
|
|
170
|
+
const first = members[0];
|
|
171
|
+
if (!first)
|
|
172
|
+
continue;
|
|
173
|
+
const family = { key: identities.declarationIdOf(first), members };
|
|
174
|
+
families.push(family);
|
|
175
|
+
for (const member of members)
|
|
176
|
+
familyOfDeclaration.set(identities.declarationIdOf(member), family);
|
|
177
|
+
}
|
|
178
|
+
families.sort((left, right) => (left.key < right.key ? -1 : left.key > right.key ? 1 : 0));
|
|
179
|
+
return { familyOf: (declaration) => familyOfDeclaration.get(declaration) ?? null, families };
|
|
180
|
+
};
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import ts from 'typescript';
|
|
2
|
+
import type { DeclarationId } from '../identity/ids.js';
|
|
3
|
+
import type { IdentityTable } from './normalize/identities.js';
|
|
4
|
+
/**
|
|
5
|
+
* Every class that `implements` an interface, for an interface at least one
|
|
6
|
+
* class in the program implements.
|
|
7
|
+
*
|
|
8
|
+
* JavaScript has no interfaces. An `interface` states what may be READ out of
|
|
9
|
+
* a slot; nothing ever constructs one, so nothing is ever *of* that type -- a
|
|
10
|
+
* slot typed by an interface holds whatever object the program put there. When
|
|
11
|
+
* the program declares which classes are that interface's implementations,
|
|
12
|
+
* those classes are the only objects any such slot can hold, and the slot's
|
|
13
|
+
* storage is therefore ONE of them: the class itself when there is one, the
|
|
14
|
+
* tagged sum of them when there are several.
|
|
15
|
+
*
|
|
16
|
+
* Carrying the interface instead is not merely wide, it is WRONG in a way no
|
|
17
|
+
* amount of boxing fixes: a class's methods are free functions taking the
|
|
18
|
+
* instance, not storage, while an interface's method members are storage. So
|
|
19
|
+
* the interface's struct has `gea::CallableObject` members nothing can fill,
|
|
20
|
+
* the class instance does not assign into it, and -- worst -- a call written
|
|
21
|
+
* `slot.method(...)` never reaches the class's method at all, so the census
|
|
22
|
+
* never walks it and NO BODY IS EMITTED. hono is the measured case:
|
|
23
|
+
* `HonoBase.router` is a `Router<[H, RouterRoute]>` and `PatternRouter` is the
|
|
24
|
+
* only implementation `hono/tiny` contains; carried as the interface, the
|
|
25
|
+
* emitted program had no `add` and no `match` anywhere in it. The full `hono`
|
|
26
|
+
* entry holds a `SmartRouter` over a `RegExpRouter` and a `TrieRouter` -- three
|
|
27
|
+
* implementations of the one interface -- and the same slot is then a real
|
|
28
|
+
* sum with real dispatch. A union of class carriers already dispatches a
|
|
29
|
+
* member call per arm (`test/runtime/class-union-slot-method-dispatch.ts`),
|
|
30
|
+
* so the sum is the honest carrier rather than a refusal.
|
|
31
|
+
*
|
|
32
|
+
* ## What it refuses, and why each refusal is the whole point
|
|
33
|
+
*
|
|
34
|
+
* - An interface implemented by no class. There is nothing to answer with.
|
|
35
|
+
* - An interface with no METHOD member. A pure data interface is a shape an
|
|
36
|
+
* object literal satisfies as readily as a class does, and this rule's
|
|
37
|
+
* premise -- that only the classes can inhabit it -- does not hold there.
|
|
38
|
+
* `Router` declares `add` and `match`, which is what makes it a behaviour
|
|
39
|
+
* rather than a record.
|
|
40
|
+
* - A class whose `implements` clause this cannot resolve to exactly one
|
|
41
|
+
* interface declaration.
|
|
42
|
+
*
|
|
43
|
+
* The `implements` clause is read SYNTACTICALLY, unlike `classHeritageOf`'s
|
|
44
|
+
* checker-answered `extends` walk, and deliberately: this states what the
|
|
45
|
+
* AUTHOR declared to be the implementations of a named contract. Structural
|
|
46
|
+
* satisfaction is a different question with a different answer (every object
|
|
47
|
+
* literal of the right shape satisfies `Router`), and answering it here would
|
|
48
|
+
* make the rule fire on data interfaces it must not touch.
|
|
49
|
+
*
|
|
50
|
+
* Classes are listed in source order, first file first, so the sum's arm
|
|
51
|
+
* order -- and with it the emitted output -- is a function of the program.
|
|
52
|
+
*/
|
|
53
|
+
export declare const interfaceImplementorsOf: (checker: ts.TypeChecker, identities: IdentityTable, files: readonly ts.SourceFile[]) => ReadonlyMap<DeclarationId, readonly DeclarationId[]>;
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import ts from 'typescript';
|
|
2
|
+
/**
|
|
3
|
+
* Every class that `implements` an interface, for an interface at least one
|
|
4
|
+
* class in the program implements.
|
|
5
|
+
*
|
|
6
|
+
* JavaScript has no interfaces. An `interface` states what may be READ out of
|
|
7
|
+
* a slot; nothing ever constructs one, so nothing is ever *of* that type -- a
|
|
8
|
+
* slot typed by an interface holds whatever object the program put there. When
|
|
9
|
+
* the program declares which classes are that interface's implementations,
|
|
10
|
+
* those classes are the only objects any such slot can hold, and the slot's
|
|
11
|
+
* storage is therefore ONE of them: the class itself when there is one, the
|
|
12
|
+
* tagged sum of them when there are several.
|
|
13
|
+
*
|
|
14
|
+
* Carrying the interface instead is not merely wide, it is WRONG in a way no
|
|
15
|
+
* amount of boxing fixes: a class's methods are free functions taking the
|
|
16
|
+
* instance, not storage, while an interface's method members are storage. So
|
|
17
|
+
* the interface's struct has `gea::CallableObject` members nothing can fill,
|
|
18
|
+
* the class instance does not assign into it, and -- worst -- a call written
|
|
19
|
+
* `slot.method(...)` never reaches the class's method at all, so the census
|
|
20
|
+
* never walks it and NO BODY IS EMITTED. hono is the measured case:
|
|
21
|
+
* `HonoBase.router` is a `Router<[H, RouterRoute]>` and `PatternRouter` is the
|
|
22
|
+
* only implementation `hono/tiny` contains; carried as the interface, the
|
|
23
|
+
* emitted program had no `add` and no `match` anywhere in it. The full `hono`
|
|
24
|
+
* entry holds a `SmartRouter` over a `RegExpRouter` and a `TrieRouter` -- three
|
|
25
|
+
* implementations of the one interface -- and the same slot is then a real
|
|
26
|
+
* sum with real dispatch. A union of class carriers already dispatches a
|
|
27
|
+
* member call per arm (`test/runtime/class-union-slot-method-dispatch.ts`),
|
|
28
|
+
* so the sum is the honest carrier rather than a refusal.
|
|
29
|
+
*
|
|
30
|
+
* ## What it refuses, and why each refusal is the whole point
|
|
31
|
+
*
|
|
32
|
+
* - An interface implemented by no class. There is nothing to answer with.
|
|
33
|
+
* - An interface with no METHOD member. A pure data interface is a shape an
|
|
34
|
+
* object literal satisfies as readily as a class does, and this rule's
|
|
35
|
+
* premise -- that only the classes can inhabit it -- does not hold there.
|
|
36
|
+
* `Router` declares `add` and `match`, which is what makes it a behaviour
|
|
37
|
+
* rather than a record.
|
|
38
|
+
* - A class whose `implements` clause this cannot resolve to exactly one
|
|
39
|
+
* interface declaration.
|
|
40
|
+
*
|
|
41
|
+
* The `implements` clause is read SYNTACTICALLY, unlike `classHeritageOf`'s
|
|
42
|
+
* checker-answered `extends` walk, and deliberately: this states what the
|
|
43
|
+
* AUTHOR declared to be the implementations of a named contract. Structural
|
|
44
|
+
* satisfaction is a different question with a different answer (every object
|
|
45
|
+
* literal of the right shape satisfies `Router`), and answering it here would
|
|
46
|
+
* make the rule fire on data interfaces it must not touch.
|
|
47
|
+
*
|
|
48
|
+
* Classes are listed in source order, first file first, so the sum's arm
|
|
49
|
+
* order -- and with it the emitted output -- is a function of the program.
|
|
50
|
+
*/
|
|
51
|
+
export const interfaceImplementorsOf = (checker, identities, files) => {
|
|
52
|
+
const claims = new Map();
|
|
53
|
+
const interfaceOf = (node) => {
|
|
54
|
+
const symbol = checker.getSymbolAtLocation(ts.isIdentifier(node.expression) ? node.expression : node);
|
|
55
|
+
const target = symbol !== undefined && (symbol.flags & ts.SymbolFlags.Alias) !== 0 ? checker.getAliasedSymbol(symbol) : symbol;
|
|
56
|
+
const declarations = target?.declarations;
|
|
57
|
+
const sole = declarations && declarations.length === 1 ? declarations[0] : undefined;
|
|
58
|
+
if (!sole || !ts.isInterfaceDeclaration(sole))
|
|
59
|
+
return null;
|
|
60
|
+
return { id: identities.declarationIdOf(sole), declaration: sole };
|
|
61
|
+
};
|
|
62
|
+
const declaresAMethod = (declaration) => declaration.members.some((member) => ts.isMethodSignature(member));
|
|
63
|
+
for (const file of files) {
|
|
64
|
+
const visit = (node) => {
|
|
65
|
+
if (ts.isClassLike(node)) {
|
|
66
|
+
for (const clause of node.heritageClauses ?? []) {
|
|
67
|
+
if (clause.token !== ts.SyntaxKind.ImplementsKeyword)
|
|
68
|
+
continue;
|
|
69
|
+
for (const typeNode of clause.types) {
|
|
70
|
+
const resolved = interfaceOf(typeNode);
|
|
71
|
+
if (!resolved || !declaresAMethod(resolved.declaration))
|
|
72
|
+
continue;
|
|
73
|
+
const claimed = identities.declarationIdOf(node);
|
|
74
|
+
const existing = claims.get(resolved.id);
|
|
75
|
+
if (existing === undefined)
|
|
76
|
+
claims.set(resolved.id, [claimed]);
|
|
77
|
+
else if (!existing.includes(claimed))
|
|
78
|
+
existing.push(claimed);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
ts.forEachChild(node, visit);
|
|
83
|
+
};
|
|
84
|
+
visit(file);
|
|
85
|
+
}
|
|
86
|
+
return claims;
|
|
87
|
+
};
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import ts from 'typescript';
|
|
2
|
+
import { documentationRangesIn } from './documentation-ranges.js';
|
|
3
|
+
/**
|
|
4
|
+
* JSDoc namepaths (`WebGLRenderer~Options`), respelled as legal identifiers.
|
|
5
|
+
*
|
|
6
|
+
* JSDoc's own grammar scopes a name to its owner with `~` for an inner
|
|
7
|
+
* declaration, `#` for an instance member and `.` for a static one. three
|
|
8
|
+
* writes its configuration objects that way:
|
|
9
|
+
*
|
|
10
|
+
* ```js
|
|
11
|
+
* /** @typedef {Object} WebGLRenderer~Options
|
|
12
|
+
* * @property {DOMElement} [canvas]
|
|
13
|
+
* * @property {boolean} [antialias] ... *\/
|
|
14
|
+
*
|
|
15
|
+
* /** @param {WebGLRenderer~Options} [parameters] *\/
|
|
16
|
+
* constructor( parameters = {} ) { ... }
|
|
17
|
+
* ```
|
|
18
|
+
*
|
|
19
|
+
* TypeScript has no `~` in a type name. It reads the `@typedef` name as far as
|
|
20
|
+
* `WebGLRenderer` and stops, and the `@param` reference resolves to nothing --
|
|
21
|
+
* which is `any`. So a type the library *did* state is lost twice over, and
|
|
22
|
+
* `WebGLRenderer`'s entire configuration -- `canvas`, `context`, and every
|
|
23
|
+
* flag -- arrives untyped.
|
|
24
|
+
*
|
|
25
|
+
* `~` is not meaning, it is punctuation: the namepath denotes exactly one
|
|
26
|
+
* declaration and nothing about the program depends on how it is spelled.
|
|
27
|
+
* Rewriting it to `_` before the checker parses the file gives that
|
|
28
|
+
* declaration a name TypeScript can bind, and the existing `@typedef`/`@param`
|
|
29
|
+
* machinery does the rest unmodified. This is the same shape of fix as
|
|
30
|
+
* `definePropertySourceTransform`: state, in a spelling the checker already
|
|
31
|
+
* understands, a fact the source had stated in one it does not.
|
|
32
|
+
*
|
|
33
|
+
* ## Why the rewrite is confined to JSDoc comments
|
|
34
|
+
*
|
|
35
|
+
* `~` is bitwise NOT. `a~b` is not valid expression syntax, but `x = ~y` is
|
|
36
|
+
* everywhere, and a rewrite that ran over source text would corrupt it. Only
|
|
37
|
+
* ranges the parser itself reports as `/**` comments are touched, so code --
|
|
38
|
+
* and ordinary `//` and `/* *\/` comments -- are left exactly as written.
|
|
39
|
+
*
|
|
40
|
+
* ## What is deliberately left alone
|
|
41
|
+
*
|
|
42
|
+
* Only `~` is respelled. JSDoc's `#` and `.` separators are not: `.` is
|
|
43
|
+
* already legal in a TypeScript qualified name and means something there, and
|
|
44
|
+
* a `#` name would collide with private-field syntax. Neither appears in a
|
|
45
|
+
* namepath this compiler has needed, and respelling a separator that already
|
|
46
|
+
* has a meaning would be a change of meaning rather than of spelling.
|
|
47
|
+
*
|
|
48
|
+
* A collision is possible in principle -- a file could declare both
|
|
49
|
+
* `A~B` and `A_B` -- and is not guarded, because the respelled name would then
|
|
50
|
+
* be a duplicate declaration the checker reports, not a silently wrong answer.
|
|
51
|
+
*/
|
|
52
|
+
const NAMEPATH = /\b([A-Za-z_$][A-Za-z0-9_$]*)~([A-Za-z_$][A-Za-z0-9_$]*)\b/g;
|
|
53
|
+
const scriptKindOf = (fileName) => fileName.endsWith('.tsx')
|
|
54
|
+
? ts.ScriptKind.TSX
|
|
55
|
+
: fileName.endsWith('.jsx')
|
|
56
|
+
? ts.ScriptKind.JSX
|
|
57
|
+
: fileName.endsWith('.js') || fileName.endsWith('.mjs') || fileName.endsWith('.cjs')
|
|
58
|
+
? ts.ScriptKind.JS
|
|
59
|
+
: ts.ScriptKind.TS;
|
|
60
|
+
export const jsdocNamepathTransform = (input) => {
|
|
61
|
+
// A declaration file states its types directly; there is no namepath to
|
|
62
|
+
// rescue, and rewriting one would change a name the program may refer to.
|
|
63
|
+
if (input.fileName.endsWith('.d.ts'))
|
|
64
|
+
return null;
|
|
65
|
+
// One character test is what a file with no namepath in it costs.
|
|
66
|
+
if (!input.text.includes('~'))
|
|
67
|
+
return null;
|
|
68
|
+
const file = ts.createSourceFile(input.fileName, input.text, ts.ScriptTarget.Latest, true, scriptKindOf(input.fileName));
|
|
69
|
+
const ranges = documentationRangesIn(file, input.text);
|
|
70
|
+
if (ranges.length === 0)
|
|
71
|
+
return null;
|
|
72
|
+
let rewritten = input.text;
|
|
73
|
+
let changed = false;
|
|
74
|
+
// Spliced from the end so every earlier range is still the range it was
|
|
75
|
+
// measured at, exactly as `definePropertySourceTransform` does.
|
|
76
|
+
for (const range of [...ranges].reverse()) {
|
|
77
|
+
const comment = input.text.slice(range.pos, range.end);
|
|
78
|
+
const respelled = comment.replace(NAMEPATH, '$1_$2');
|
|
79
|
+
if (respelled === comment)
|
|
80
|
+
continue;
|
|
81
|
+
changed = true;
|
|
82
|
+
rewritten = rewritten.slice(0, range.pos) + respelled + rewritten.slice(range.end);
|
|
83
|
+
}
|
|
84
|
+
return changed ? rewritten : null;
|
|
85
|
+
};
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import type { NodeId, OperationFamily, OperationId } from '../../identity/ids.js';
|
|
2
|
+
/**
|
|
3
|
+
* Per-family coverage.
|
|
4
|
+
*
|
|
5
|
+
* An empty complete family and a family that was never installed are different
|
|
6
|
+
* states, and conflating them is how a missing producer reads as "nothing to
|
|
7
|
+
* do". A consumer may read a family only when its coverage is `complete`; a
|
|
8
|
+
* `partial` family has published authoritative components but has not finished
|
|
9
|
+
* its census, and `not-installed` has published nothing at all.
|
|
10
|
+
*/
|
|
11
|
+
export type FamilyCoverage = 'complete' | 'partial' | 'not-installed';
|
|
12
|
+
/**
|
|
13
|
+
* A censused candidate that did not become a graph operation.
|
|
14
|
+
*
|
|
15
|
+
* The census is what makes "not installed" measurable. Every source site that
|
|
16
|
+
* belongs to a family is either an operation or a blocker with a stated reason;
|
|
17
|
+
* a site that is neither has been silently dropped.
|
|
18
|
+
*/
|
|
19
|
+
export interface CensusBlocker {
|
|
20
|
+
readonly source: NodeId;
|
|
21
|
+
readonly family: OperationFamily;
|
|
22
|
+
/** Why this candidate could not be normalized. Stated as a missing capability. */
|
|
23
|
+
readonly reason: string;
|
|
24
|
+
/** The primitive family whose absence blocks it, when one is identified. */
|
|
25
|
+
readonly missingPrimitive: PrimitiveFamily | null;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* The reusable primitive families. Every supported behavior reduces to one of
|
|
29
|
+
* these; a proposed behavior that fits none of them is not yet designed.
|
|
30
|
+
*/
|
|
31
|
+
export declare const primitiveFamilies: readonly ["P0", "P1", "P2", "P3", "P4", "P5", "P6", "H0"];
|
|
32
|
+
export type PrimitiveFamily = (typeof primitiveFamilies)[number];
|
|
33
|
+
/**
|
|
34
|
+
* The dependency order between primitive families.
|
|
35
|
+
*
|
|
36
|
+
* A family may only be built on families it depends on. P6 does not depend on
|
|
37
|
+
* P5: ordinary construction must work before Proxy reuses it, and inverting
|
|
38
|
+
* that is how proxies end up with a private construction path.
|
|
39
|
+
*/
|
|
40
|
+
export declare const primitiveDependencies: Readonly<Record<PrimitiveFamily, readonly PrimitiveFamily[]>>;
|
|
41
|
+
/** What one family published, and what it could not. */
|
|
42
|
+
export interface FamilyReport {
|
|
43
|
+
readonly family: OperationFamily;
|
|
44
|
+
readonly coverage: FamilyCoverage;
|
|
45
|
+
readonly operations: readonly OperationId[];
|
|
46
|
+
readonly blockers: readonly CensusBlocker[];
|
|
47
|
+
/** Candidates that contributed at least one operation. */
|
|
48
|
+
readonly publishedCandidates: number;
|
|
49
|
+
/** Every candidate the census found, whether or not it became an operation. */
|
|
50
|
+
readonly censusedCandidates: number;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Fail closed when a consumer reads a family that has not finished.
|
|
54
|
+
*
|
|
55
|
+
* The throw is the point: a consumer that treats `partial` as `complete` will
|
|
56
|
+
* quietly compile a program whose missing operations were never lowered.
|
|
57
|
+
*/
|
|
58
|
+
export declare const requireCompleteFamily: (report: FamilyReport, consumer: string) => void;
|
|
59
|
+
/**
|
|
60
|
+
* A family is internally consistent when every candidate it censused either
|
|
61
|
+
* published or is a stated blocker.
|
|
62
|
+
*
|
|
63
|
+
* The count is of CANDIDATES, not operations. One candidate can mint several
|
|
64
|
+
* operations -- a compound assignment is a get, a computation and a set -- so
|
|
65
|
+
* balancing operations against candidates would be a check that passes by
|
|
66
|
+
* construction and proves nothing.
|
|
67
|
+
*/
|
|
68
|
+
export declare const validateFamilyReport: (report: FamilyReport) => void;
|