@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,307 @@
|
|
|
1
|
+
import { geaAfterRenderMemberName, geaRenderBridgeMemberName, geaRenderMemberName } from './contract.js';
|
|
2
|
+
import { createGeaComponentClassProducer } from './component-classes.js';
|
|
3
|
+
import { geaHostConstructors } from './constructors.js';
|
|
4
|
+
import { geaElementFragment, geaElementTextLeafTags, geaHostConstants, geaHostFunctions, geaHostNamespaceMethods, geaHostNamespaceProperties, geaHostNamespacePropertySetters, geaHostNamespaceRoots, geaHostNamespaceRootTypes, geaHostPreambles, geaNativeProtocols, geaHostSingletons, geaEmbeddedIncludeGuard, geaProtocolCarriers } from './host.js';
|
|
5
|
+
import { geaHostMemberVoidResults, geaHostMembers } from './members.js';
|
|
6
|
+
import { lowerGeaElement } from './lower.js';
|
|
7
|
+
import { createGeaSlotHook } from './slots.js';
|
|
8
|
+
import { lowerGeaElementRef } from './element-ref.js';
|
|
9
|
+
import { createGeaElementProducer } from './producer.js';
|
|
10
|
+
import { geaCppPrelude, microtasksNamespace } from './prelude.js';
|
|
11
|
+
import { lowerGeaRenderBridge } from './render-bridge.js';
|
|
12
|
+
import { geaComponentInlineTransform } from './component-inline.js';
|
|
13
|
+
import { geaReactiveSlotTransform } from './reactive-slots.js';
|
|
14
|
+
/**
|
|
15
|
+
* gea, as a plugin.
|
|
16
|
+
*
|
|
17
|
+
* Everything this library adds to TypeScript lives behind this one object: what
|
|
18
|
+
* an element whose tag names a value means, which member of a constructed
|
|
19
|
+
* component produces its tree, and the runtime rows that make those claims
|
|
20
|
+
* checkable. Nothing in `src/` outside this directory knows any of it.
|
|
21
|
+
*
|
|
22
|
+
* The facts map is the whole of the state, and it is per-compilation by
|
|
23
|
+
* construction: `instantiate` creates it, the producer fills it while
|
|
24
|
+
* normalizing one program, and the lowering reads it while lowering that same
|
|
25
|
+
* program. A registry of long-lived instances would let a fact derived from one
|
|
26
|
+
* program be read back while compiling another -- a defect that reproduces only
|
|
27
|
+
* in whatever order the programs happened to be compiled in.
|
|
28
|
+
*
|
|
29
|
+
* `componentClasses` is the same shape of state for a different question:
|
|
30
|
+
* which class *declarations*, not which JSX elements, are gea's own. Both are
|
|
31
|
+
* filled while normalizing and read only while lowering, for the identical
|
|
32
|
+
* reason -- see `component-classes.ts` and `render-bridge.ts`.
|
|
33
|
+
*/
|
|
34
|
+
export const geaPlugin = {
|
|
35
|
+
name: 'gea',
|
|
36
|
+
instantiate: (options) => {
|
|
37
|
+
const facts = new Map();
|
|
38
|
+
const componentClasses = new Set();
|
|
39
|
+
const reactiveFields = new Map();
|
|
40
|
+
return {
|
|
41
|
+
producers: (context) => [
|
|
42
|
+
createGeaElementProducer(context, facts),
|
|
43
|
+
createGeaComponentClassProducer(context, componentClasses, reactiveFields)
|
|
44
|
+
],
|
|
45
|
+
// Two rewrites, in this order, and the order is the point.
|
|
46
|
+
//
|
|
47
|
+
// A component invocation whose props only ever write PROPERTIES becomes
|
|
48
|
+
// the element it builds (`component-inline.ts`), so what follows sees an
|
|
49
|
+
// intrinsic element and binds each attribute at its own granularity
|
|
50
|
+
// rather than making the whole subtree re-runnable. An invocation it
|
|
51
|
+
// cannot prove that of is left exactly as written, and the second rewrite
|
|
52
|
+
// claims it whole as before.
|
|
53
|
+
//
|
|
54
|
+
// Then a JSX slot whose value is COMPUTED gets an immediately-invoked
|
|
55
|
+
// arrow around it, before the checker, so the expression exists as a
|
|
56
|
+
// thunk this compiler can re-run. See `reactive-slots.ts`.
|
|
57
|
+
transformSource: (input) => {
|
|
58
|
+
const inlined = geaComponentInlineTransform(input);
|
|
59
|
+
const source = inlined === null ? input : { fileName: input.fileName, text: inlined };
|
|
60
|
+
return geaReactiveSlotTransform(source) ?? inlined;
|
|
61
|
+
},
|
|
62
|
+
lower: (ctx, block, operation) => lowerGeaElement(ctx, block, operation, facts) || lowerGeaRenderBridge(ctx, block, operation, componentClasses),
|
|
63
|
+
// `ref` is the one attribute of an intrinsic element whose meaning runs
|
|
64
|
+
// the other way -- it names where the node goes. See `element-ref.ts`.
|
|
65
|
+
lowerElementProp: lowerGeaElementRef,
|
|
66
|
+
slotOf: createGeaSlotHook(facts),
|
|
67
|
+
capabilities: {
|
|
68
|
+
// `element:value` is this plugin's recipe, and it is claimed here
|
|
69
|
+
// because this plugin is what implements it: the lowering above turns
|
|
70
|
+
// such an element into a record allocation plus a call, or into a
|
|
71
|
+
// construction plus a call of the render member. Both are built from
|
|
72
|
+
// primitives the backend already claims -- nothing new is emitted, so
|
|
73
|
+
// nothing new is asserted about the backend.
|
|
74
|
+
// `element:fragment` joins it whenever the package still ships the
|
|
75
|
+
// document's own fragment row -- see `geaElementFragment`. Claimed
|
|
76
|
+
// from the same statement that renders it, so a package that drops
|
|
77
|
+
// the row drops the claim in the same step.
|
|
78
|
+
runtimeHelpers: new Set(geaElementFragment() === null ? ['element:value'] : ['element:value', 'element:fragment']),
|
|
79
|
+
propertyRecipes: new Set(),
|
|
80
|
+
// The host object model gea installs -- the document, the element tree,
|
|
81
|
+
// JSX. None of it is TypeScript, so none of it is the backend's to
|
|
82
|
+
// know; `host.ts` states each protocol together with the spelling that
|
|
83
|
+
// renders it.
|
|
84
|
+
nativeProtocols: geaNativeProtocols,
|
|
85
|
+
// The host types themselves, from the package that implements them,
|
|
86
|
+
// plus the one carrier that is derived rather than stated:
|
|
87
|
+
// `jsx-element@1` has no TypeScript declaration behind it (JSX is a
|
|
88
|
+
// language form whose meaning the host decides, not a type a host
|
|
89
|
+
// declares), so its row is read off the package's own `Element`
|
|
90
|
+
// spelling -- see `geaProtocolCarriers`.
|
|
91
|
+
nativeTypes: geaProtocolCarriers(),
|
|
92
|
+
// gea's own host types are, like Apple's, ambient declarations with
|
|
93
|
+
// no OTHER, structurally-unrelated ambient name standing in for them
|
|
94
|
+
// -- see `plugins/model.ts`'s `ambientTypeRealizations` and
|
|
95
|
+
// `webgl/plugin.ts` for the host this closes a gap for.
|
|
96
|
+
ambientTypeRealizations: new Map(),
|
|
97
|
+
hostMembers: geaHostMembers(),
|
|
98
|
+
hostMemberVoidResults: geaHostMemberVoidResults(),
|
|
99
|
+
// gea's document/element tree is reached, never constructed -- a
|
|
100
|
+
// program gets its nodes from the runtime rather than by `new`-ing one.
|
|
101
|
+
// But a handful of gea's OTHER host classes really are built with
|
|
102
|
+
// `new` (`WebSocket`, `RTCPeerConnection`, `MediaStream`,
|
|
103
|
+
// `MediaRecorder`, `AudioContext`, `Audio`), each backed by a real
|
|
104
|
+
// `gea::host` C++ class -- see `geaHostConstructors` (constructors.ts)
|
|
105
|
+
// for the package data this reads and why the tree/class split is not
|
|
106
|
+
// a contradiction.
|
|
107
|
+
hostConstructors: geaHostConstructors(),
|
|
108
|
+
// The host's free functions and the globals that are paths rather than
|
|
109
|
+
// values, from the same package statement as the types above.
|
|
110
|
+
// `requestAnimationFrame` is a function the engine exports;
|
|
111
|
+
// `deviceInfo`, `Display` and `navigator` are namespaces. Neither is
|
|
112
|
+
// an object, and reading either as one is what produced eight
|
|
113
|
+
// `extern` declarations nothing in the engine defines.
|
|
114
|
+
hostFunctions: geaHostFunctions(),
|
|
115
|
+
// This host declares each of its free functions once, so there is no
|
|
116
|
+
// name two of its declarations disagree about and nothing to key by
|
|
117
|
+
// file -- see `PluginCapabilities.hostFunctionsByDeclaration`.
|
|
118
|
+
hostFunctionsByDeclaration: new Map(),
|
|
119
|
+
// The one global this host holds an instance of and reaches by name;
|
|
120
|
+
// derived from the package's own receiverless document table.
|
|
121
|
+
hostSingletons: geaHostSingletons(),
|
|
122
|
+
// Same one-declaration-file reasoning as `hostFunctionsByDeclaration`
|
|
123
|
+
// above: this host's ambient globals are declared once, in one place,
|
|
124
|
+
// so there is no second file for a singleton name to disagree with.
|
|
125
|
+
hostSingletonsByDeclaration: new Map(),
|
|
126
|
+
// gea's engine is the browser's stand-in, not a subset of it: the names
|
|
127
|
+
// it does not implement are simply not declared for a gea program, so
|
|
128
|
+
// there is no ambient contract here to contradict.
|
|
129
|
+
absentGlobals: new Set(),
|
|
130
|
+
hostNamespaces: {
|
|
131
|
+
roots: geaHostNamespaceRoots(),
|
|
132
|
+
typeofs: new Map(),
|
|
133
|
+
methods: geaHostNamespaceMethods(),
|
|
134
|
+
properties: geaHostNamespaceProperties(),
|
|
135
|
+
propertySetters: geaHostNamespacePropertySetters()
|
|
136
|
+
},
|
|
137
|
+
// Same reasoning again: one declaration file, so no namespace root
|
|
138
|
+
// name this host claims can disagree with itself.
|
|
139
|
+
hostNamespaceRootsByDeclaration: new Map(),
|
|
140
|
+
// The type behind each of those roots, from the package's own
|
|
141
|
+
// `hostGlobalObjectTypes` table -- see
|
|
142
|
+
// `PluginCapabilities.hostNamespaceRootTypes`.
|
|
143
|
+
hostNamespaceRootTypes: geaHostNamespaceRootTypes(),
|
|
144
|
+
// What a unit must declare before it may name one of those spellings.
|
|
145
|
+
hostPreambles: geaHostPreambles(),
|
|
146
|
+
// gea's host types are one runtime type wearing thirteen declared
|
|
147
|
+
// names (`NodeHandle`), not a hierarchy, so there is no derivation to
|
|
148
|
+
// state and every handle is exactly as related to every other as the
|
|
149
|
+
// shared carrier already makes it.
|
|
150
|
+
nativeBases: new Map(),
|
|
151
|
+
// gea's carriers are declared by `gea_runtime.h`, which every emitted
|
|
152
|
+
// unit already includes, so this library adds no header of its own.
|
|
153
|
+
nativeIncludes: new Map(),
|
|
154
|
+
// The host's own constants: `audioContext` is a global the engine
|
|
155
|
+
// defines and the program only ever reads.
|
|
156
|
+
nativeConstants: geaHostConstants(),
|
|
157
|
+
// Same one-declaration-file reasoning as `hostFunctionsByDeclaration`:
|
|
158
|
+
// nothing here for a second file to disagree with.
|
|
159
|
+
hostConstantsByDeclaration: new Map(),
|
|
160
|
+
// What the gea engine requires back from a compiled program.
|
|
161
|
+
//
|
|
162
|
+
// `core/packages/core/gea_app_entry.cpp` declares both and defines
|
|
163
|
+
// neither: `Application::frame` calls `generated::drainMicrotasks()`
|
|
164
|
+
// once per frame and `Application::init` calls
|
|
165
|
+
// `gea_cpp_clear_microtasks()` when an app starts. The queue they act
|
|
166
|
+
// on belongs to the program, not the engine, which is why the engine
|
|
167
|
+
// asks rather than implements -- and why a unit that omits them
|
|
168
|
+
// compiles cleanly and then fails at `ld`.
|
|
169
|
+
//
|
|
170
|
+
// The queue is the REACTIVE one. Promises settle synchronously here
|
|
171
|
+
// (`gea::Promise` defers nothing), but the coalescing applies do defer:
|
|
172
|
+
// a list or component rebuild is scheduled once per turn and has to
|
|
173
|
+
// land after the callback that wrote and before layout reads the tree.
|
|
174
|
+
// `Application::frame` calls `drainMicrotasks()` at exactly that point,
|
|
175
|
+
// so that is where the queue drains -- see `detail::microtaskQueue` in
|
|
176
|
+
// `gea_runtime.h`, and the frame-late rows an earlier zero-delay timer
|
|
177
|
+
// produced. `gea_cpp_clear_microtasks()` drops the same queue when an
|
|
178
|
+
// app starts, so a resident switch cannot rebuild the outgoing app's
|
|
179
|
+
// list against the incoming app's tree.
|
|
180
|
+
// What `<>...</>` is on this host, from the package's own document
|
|
181
|
+
// table -- see `PluginCapabilities.elementFragment`.
|
|
182
|
+
elementFragment: geaElementFragment(),
|
|
183
|
+
// The tag list is the package's (`isTextNodeTag`); whether an element's
|
|
184
|
+
// contents are one text run is the compiler's -- see `elementTextTags`.
|
|
185
|
+
elementTextTags: geaElementTextLeafTags(),
|
|
186
|
+
// The members this host's own lowering calls without the program
|
|
187
|
+
// naming them, so `reachability.ts` never drops one: the render bridge
|
|
188
|
+
// rebuilds `instance.render(root, depth)` as a call to the class's own
|
|
189
|
+
// `template` (`render-bridge.ts`), and attaches the mounted tree by
|
|
190
|
+
// calling `onAfterRender` when the class declares it. `render` itself
|
|
191
|
+
// is spelled by every app that mounts a component, but a component
|
|
192
|
+
// whose `render` is reached only through the framework's own mount
|
|
193
|
+
// path is not, so it is stated rather than assumed.
|
|
194
|
+
reachedMemberKeys: new Set([geaRenderMemberName, geaRenderBridgeMemberName, geaAfterRenderMemberName]),
|
|
195
|
+
// Filled by the producer above while this program is normalized, and
|
|
196
|
+
// read by the target after it -- the same shared-by-reference state as
|
|
197
|
+
// `facts` and `componentClasses`, and per-compilation for the same
|
|
198
|
+
// reason. See `PluginCapabilities.reactiveClassFields`.
|
|
199
|
+
reactiveClassFields: reactiveFields,
|
|
200
|
+
// The engine's own reactive cell, named here rather than derived: it
|
|
201
|
+
// is gea's runtime type, so this package is the only thing that knows
|
|
202
|
+
// its name.
|
|
203
|
+
nativeReactiveCell: 'gea::embedded::ui::Signal',
|
|
204
|
+
// ...and the only thing that knows where it is DECLARED. This used to
|
|
205
|
+
// be empty, on the claim that `gea_runtime.h` already carries the cell.
|
|
206
|
+
// It does not: that header forward-declares `gea::embedded::ui::Signal`
|
|
207
|
+
// and says so at the declaration, because `ui/signal.h` is on the
|
|
208
|
+
// include path for an engine build only. A JSX program includes the
|
|
209
|
+
// engine for its own reasons and so never noticed; an ordinary program
|
|
210
|
+
// with a reactive field failed at the field declaration with "implicit
|
|
211
|
+
// instantiation of undefined template", which then cascaded into every
|
|
212
|
+
// conversion touching the class and read as an unrelated inheritance
|
|
213
|
+
// defect.
|
|
214
|
+
//
|
|
215
|
+
// The same guarded block the package states ahead of each of its 331
|
|
216
|
+
// host spellings, taken from `geaHostPreambles` rather than restated,
|
|
217
|
+
// so this compilation has one spelling of the engine include and a unit
|
|
218
|
+
// that carries both gets it once.
|
|
219
|
+
nativeReactiveCellPreamble: geaEmbeddedIncludeGuard(),
|
|
220
|
+
// gea's runtime reaches a unit as `gea_runtime.h`, which the support
|
|
221
|
+
// header states unconditionally for every build because every emitted
|
|
222
|
+
// unit is compiled against it -- it is the CLI's own line, not this
|
|
223
|
+
// plugin's contribution, so there is nothing to add here.
|
|
224
|
+
generatedSupportIncludes: [],
|
|
225
|
+
runtimeDefinitions: [
|
|
226
|
+
// The namespace is the BUILD's to state, not this file's. A resident
|
|
227
|
+
// build links several apps into one binary and gives each its own
|
|
228
|
+
// `gea::framework::app::generated::gea_resident_<id>`, which the
|
|
229
|
+
// generated entry shim forward-declares by exactly that name
|
|
230
|
+
// (`targets/web/generate-resident-entry.mjs`); the pipeline passes it
|
|
231
|
+
// as `gea.microtasks-namespace`, derived from the entry symbol.
|
|
232
|
+
// Hardcoding the unsuffixed namespace defined a symbol no shim ever
|
|
233
|
+
// declares AND defined it four times over -- one undefined reference
|
|
234
|
+
// and one duplicate-symbol error from the same line.
|
|
235
|
+
// Guarded on the same condition that decides whether the queue
|
|
236
|
+
// EXISTS. `gea::jsx::detail`'s coalescing half lives inside
|
|
237
|
+
// `#ifdef GEA_HOST_DECLARED` in `gea_runtime.h` -- it is reached only
|
|
238
|
+
// through `reactiveListApply`/`reactiveNodeApply`, which name the
|
|
239
|
+
// engine's `Signal` in their own signatures and so cannot be declared
|
|
240
|
+
// in a unit that links no engine. A program that names no host
|
|
241
|
+
// spelling emits no host preamble, hence no guard, hence no queue;
|
|
242
|
+
// its body stays empty, which is also the right answer, since a unit
|
|
243
|
+
// with no engine has no list to rebuild.
|
|
244
|
+
{
|
|
245
|
+
text: `namespace ${microtasksNamespace(options)} {\nvoid drainMicrotasks() {\n#ifdef GEA_HOST_DECLARED\n ::gea::jsx::detail::drainMicrotasks();\n#endif\n}\n}`,
|
|
246
|
+
requires: null
|
|
247
|
+
},
|
|
248
|
+
// Weak, and at global scope, for the reason
|
|
249
|
+
// `core/packages/core/test/test_gea_resident_app_switch_main.cpp`
|
|
250
|
+
// states beside its own declaration: every resident's unit defines
|
|
251
|
+
// this, the engine calls it by the unsuffixed name, and the linker
|
|
252
|
+
// has to collapse the definitions rather than reject them. v1 emits
|
|
253
|
+
// it with the same attribute.
|
|
254
|
+
{
|
|
255
|
+
text: 'void __attribute__((weak)) gea_cpp_clear_microtasks() {\n#ifdef GEA_HOST_DECLARED\n ::gea::jsx::detail::clearMicrotasks();\n#endif\n}',
|
|
256
|
+
requires: null
|
|
257
|
+
},
|
|
258
|
+
// The engine's other pair of program-side entry points, declared the
|
|
259
|
+
// same way and for the same reason: `core/packages/core/gea_app_entry.cpp`
|
|
260
|
+
// wraps `Application::init` and `Application::frame` in a
|
|
261
|
+
// `FrameCycleCollectionDeferral`, whose whole job is to keep the
|
|
262
|
+
// collector off the stack while a host callback still owns transient
|
|
263
|
+
// references. The queue is the PROGRAM's, so the engine asks and the
|
|
264
|
+
// generated unit answers.
|
|
265
|
+
//
|
|
266
|
+
// `_end` collects rather than only decrementing: the deferral exists
|
|
267
|
+
// to move the safepoint to where the host stack has unwound, and a
|
|
268
|
+
// decrement alone leaves the drained candidates until the next
|
|
269
|
+
// allocation happens to cross the threshold -- one frame of garbage
|
|
270
|
+
// retained per frame. `bad_alloc` is swallowed because the collector
|
|
271
|
+
// runs at scope exit of a host callback that has already returned;
|
|
272
|
+
// propagating there unwinds through the engine's own frame, and the
|
|
273
|
+
// candidates it could not trace are still queued for the next
|
|
274
|
+
// safepoint.
|
|
275
|
+
//
|
|
276
|
+
// Weak, at global scope, exactly as `gea_cpp_clear_microtasks` above:
|
|
277
|
+
// a resident build links several apps into one binary and the linker
|
|
278
|
+
// has to collapse the definitions rather than reject them.
|
|
279
|
+
{
|
|
280
|
+
text: 'extern "C" void __attribute__((weak)) gea_cycle_collection_defer_begin() {\n ++gea::detail::cycleState().deferDepth;\n}',
|
|
281
|
+
requires: 'cycle-collectable-program'
|
|
282
|
+
},
|
|
283
|
+
{
|
|
284
|
+
text: 'extern "C" void __attribute__((weak)) gea_cycle_collection_defer_end() {\n' +
|
|
285
|
+
' auto& gea_state = gea::detail::cycleState();\n' +
|
|
286
|
+
' if (gea_state.deferDepth == 0) {\n' +
|
|
287
|
+
' std::fprintf(stderr, "gea: cycle collection deferral underflow\\n");\n' +
|
|
288
|
+
' std::abort();\n' +
|
|
289
|
+
' }\n' +
|
|
290
|
+
' --gea_state.deferDepth;\n' +
|
|
291
|
+
' try {\n' +
|
|
292
|
+
' gea::collectCyclesIfNeeded();\n' +
|
|
293
|
+
' } catch (const std::bad_alloc&) {\n' +
|
|
294
|
+
' std::fprintf(stderr, "gea: cycle collection deferred after allocation failure\\n");\n' +
|
|
295
|
+
' }\n' +
|
|
296
|
+
'}',
|
|
297
|
+
requires: 'cycle-collectable-program'
|
|
298
|
+
},
|
|
299
|
+
// The stylesheet the build compiled for this program -- see
|
|
300
|
+
// `prelude.ts`. Empty for a program the build passed no prelude for,
|
|
301
|
+
// which is every program outside the gea pipeline.
|
|
302
|
+
...geaCppPrelude(options).map((text) => ({ text, requires: null }))
|
|
303
|
+
]
|
|
304
|
+
}
|
|
305
|
+
};
|
|
306
|
+
}
|
|
307
|
+
};
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import type { PluginOptions } from '../model.js';
|
|
2
|
+
/**
|
|
3
|
+
* The C++ the gea build generated for this program, carried into the unit.
|
|
4
|
+
*
|
|
5
|
+
* A gea app's stylesheet is not data the compiler reads. The shipping pipeline
|
|
6
|
+
* (`build-gea-vite-geatsc.mjs`) compiles every `.css` the program imports into
|
|
7
|
+
* a static tape of engine calls and hands the compiler the path to it, because
|
|
8
|
+
* the engine's `StyleSheet` is the only thing that can interpret it. A unit
|
|
9
|
+
* that omits it links and runs and draws every element at its default size --
|
|
10
|
+
* which for gea's `<div class="ball"/>` is nothing at all. There is no
|
|
11
|
+
* diagnostic for that anywhere: the program is correct, the styles simply were
|
|
12
|
+
* never registered.
|
|
13
|
+
*
|
|
14
|
+
* Two forms, both the gea plugin's own and both matching what v1's
|
|
15
|
+
* `geatsc-plugin-gea` emits for the same options, because the same engine has
|
|
16
|
+
* to link against the result. The object form registers on static
|
|
17
|
+
* initialization and is what a single-app firmware or a wasm module uses; the
|
|
18
|
+
* named-function form exists for resident builds, where several apps share one
|
|
19
|
+
* binary and each must register its own styles when it starts rather than all
|
|
20
|
+
* of them at load. `gea.cpp-prelude-symbol` is what asks for the second.
|
|
21
|
+
*
|
|
22
|
+
* `inline` on the registration object is load-bearing and is v1's own comment:
|
|
23
|
+
* an anonymous-namespace object gets one copy per translation unit, so a
|
|
24
|
+
* split-TU build re-registers the whole tape once per module.
|
|
25
|
+
*
|
|
26
|
+
* The app's tape is not the whole sheet. gea's engine ships no user-agent
|
|
27
|
+
* defaults at all, so the tag-driven styles a browser would apply are the
|
|
28
|
+
* compiler's to state -- see `user-agent-styles.ts` for what they are and for
|
|
29
|
+
* the inline-layout defect their absence produced. They go in ahead of the
|
|
30
|
+
* app's own rules, in the same body, because both prelude forms have exactly
|
|
31
|
+
* one place a resident build will call, and they are emitted for every app the
|
|
32
|
+
* pipeline builds rather than only for the ones that imported a `.css`: nine
|
|
33
|
+
* of the shipped examples have inline tags and no stylesheet at all, and under
|
|
34
|
+
* the narrower gate every one of them lost its heading sizes.
|
|
35
|
+
*/
|
|
36
|
+
export declare const geaCppPrelude: (options: PluginOptions) => readonly string[];
|
|
37
|
+
/**
|
|
38
|
+
* Whether the unit this compilation emits talks to AppKit rather than to gea's
|
|
39
|
+
* own element tree.
|
|
40
|
+
*
|
|
41
|
+
* `gea.ir` says "the gea pipeline asked for this build"; it does not say the
|
|
42
|
+
* result links gea's UI engine, and for one target it does not. An
|
|
43
|
+
* apple-native app's emitted unit includes `gea/apple/native_bridge.h` and
|
|
44
|
+
* nothing else -- `gea/embedded.h` and `ui/internal.h` are absent, because the
|
|
45
|
+
* views really are `NSView`s -- so C++ naming `gea::embedded::ui::StyleSheet`
|
|
46
|
+
* does not compile there ("no member named 'StyleSheet' in namespace
|
|
47
|
+
* 'gea::embedded::ui'", six times, on `notes-native`). There are also no `<p>`
|
|
48
|
+
* or `<h1>` nodes in such a program for a user-agent rule to match, so the
|
|
49
|
+
* sheet has nothing to say about it either way.
|
|
50
|
+
*
|
|
51
|
+
* Read off `apple.metadata`, which the apple target's pipeline passes for
|
|
52
|
+
* exactly the builds that load the apple-native plugin -- the same kind of
|
|
53
|
+
* fact, from the same pipeline, as `gea.ir` above.
|
|
54
|
+
*
|
|
55
|
+
* Exported so `cli-emit.ts` can thread this same pipeline fact into
|
|
56
|
+
* `generated_support.hpp`'s Apple-ownership line, rather than re-deriving it
|
|
57
|
+
* by searching the rendered C++ for the include text this fact already
|
|
58
|
+
* decided to write.
|
|
59
|
+
*/
|
|
60
|
+
export declare const isAppleNativeBuild: (options: PluginOptions) => boolean;
|
|
61
|
+
/** Whether this is a bare C++ identifier, so a name the build passed can be emitted as one. */
|
|
62
|
+
/**
|
|
63
|
+
* The namespace this program's `drainMicrotasks()` is defined in.
|
|
64
|
+
*
|
|
65
|
+
* `core/packages/core/gea_app_entry.cpp` calls `generated::drainMicrotasks()`,
|
|
66
|
+
* and a resident build gives each app its own nested namespace so four units
|
|
67
|
+
* can each define one -- `gea::framework::app::generated::gea_resident_<id>`,
|
|
68
|
+
* which `targets/web/generate-resident-entry.mjs` forward-declares by name.
|
|
69
|
+
* The pipeline derives it from the entry symbol and states it here
|
|
70
|
+
* (`build-gea-vite-geatsc.mjs`, `microtasksNamespaceForEntry`), so this reads
|
|
71
|
+
* it rather than restating it: the package that owns the contract is the
|
|
72
|
+
* authority, and a namespace invented on this side is a symbol nothing
|
|
73
|
+
* declares.
|
|
74
|
+
*
|
|
75
|
+
* The fallback is the plain namespace a single-app build uses, which is what
|
|
76
|
+
* the pipeline itself passes when the entry symbol is not a resident's.
|
|
77
|
+
*/
|
|
78
|
+
export declare const microtasksNamespace: (options: PluginOptions) => string;
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
import { existsSync, readFileSync } from 'node:fs';
|
|
2
|
+
import { resolve } from 'node:path';
|
|
3
|
+
import { geaUserAgentStyleSheet } from './user-agent-styles.js';
|
|
4
|
+
/**
|
|
5
|
+
* The C++ the gea build generated for this program, carried into the unit.
|
|
6
|
+
*
|
|
7
|
+
* A gea app's stylesheet is not data the compiler reads. The shipping pipeline
|
|
8
|
+
* (`build-gea-vite-geatsc.mjs`) compiles every `.css` the program imports into
|
|
9
|
+
* a static tape of engine calls and hands the compiler the path to it, because
|
|
10
|
+
* the engine's `StyleSheet` is the only thing that can interpret it. A unit
|
|
11
|
+
* that omits it links and runs and draws every element at its default size --
|
|
12
|
+
* which for gea's `<div class="ball"/>` is nothing at all. There is no
|
|
13
|
+
* diagnostic for that anywhere: the program is correct, the styles simply were
|
|
14
|
+
* never registered.
|
|
15
|
+
*
|
|
16
|
+
* Two forms, both the gea plugin's own and both matching what v1's
|
|
17
|
+
* `geatsc-plugin-gea` emits for the same options, because the same engine has
|
|
18
|
+
* to link against the result. The object form registers on static
|
|
19
|
+
* initialization and is what a single-app firmware or a wasm module uses; the
|
|
20
|
+
* named-function form exists for resident builds, where several apps share one
|
|
21
|
+
* binary and each must register its own styles when it starts rather than all
|
|
22
|
+
* of them at load. `gea.cpp-prelude-symbol` is what asks for the second.
|
|
23
|
+
*
|
|
24
|
+
* `inline` on the registration object is load-bearing and is v1's own comment:
|
|
25
|
+
* an anonymous-namespace object gets one copy per translation unit, so a
|
|
26
|
+
* split-TU build re-registers the whole tape once per module.
|
|
27
|
+
*
|
|
28
|
+
* The app's tape is not the whole sheet. gea's engine ships no user-agent
|
|
29
|
+
* defaults at all, so the tag-driven styles a browser would apply are the
|
|
30
|
+
* compiler's to state -- see `user-agent-styles.ts` for what they are and for
|
|
31
|
+
* the inline-layout defect their absence produced. They go in ahead of the
|
|
32
|
+
* app's own rules, in the same body, because both prelude forms have exactly
|
|
33
|
+
* one place a resident build will call, and they are emitted for every app the
|
|
34
|
+
* pipeline builds rather than only for the ones that imported a `.css`: nine
|
|
35
|
+
* of the shipped examples have inline tags and no stylesheet at all, and under
|
|
36
|
+
* the narrower gate every one of them lost its heading sizes.
|
|
37
|
+
*/
|
|
38
|
+
export const geaCppPrelude = (options) => {
|
|
39
|
+
const file = options.get('gea.cpp-prelude');
|
|
40
|
+
const tapePath = file === undefined || file.length === 0 ? null : resolve(file);
|
|
41
|
+
// Two separate questions, and they were one gate until an app with no
|
|
42
|
+
// stylesheet turned up rendering its headings at body size. The tape is this
|
|
43
|
+
// program's own CSS, and only a program that imported some has one. The
|
|
44
|
+
// user-agent sheet belongs to every program the gea build compiles -- a
|
|
45
|
+
// `<h1>` is still a heading in an app that ships no `.css` -- so it is gated
|
|
46
|
+
// on `gea.ir`, which the pipeline passes for every app it builds and which
|
|
47
|
+
// nothing outside the pipeline passes. That second gate is load-bearing: a
|
|
48
|
+
// program compiled outside it (the corpus harness calls `compile()` with no
|
|
49
|
+
// plugin options at all) would otherwise be handed C++ naming
|
|
50
|
+
// `gea::embedded::ui::StyleSheet` in a unit that never declared it.
|
|
51
|
+
if (tapePath === null && !isPipelineBuild(options))
|
|
52
|
+
return [];
|
|
53
|
+
const symbol = options.get('gea.cpp-prelude-symbol');
|
|
54
|
+
const named = symbol !== undefined && isPlainIdentifier(symbol);
|
|
55
|
+
// A path the build named but never wrote is not an error here: the pipeline
|
|
56
|
+
// passes this option whenever the app COULD have styles, and an app with
|
|
57
|
+
// none leaves the file absent. What it must not do is fail closed on a
|
|
58
|
+
// program that simply has no CSS.
|
|
59
|
+
const tape = tapePath !== null && existsSync(tapePath) ? readFileSync(tapePath, 'utf8').trim() : '';
|
|
60
|
+
// The user-agent sheet goes FIRST: a program with no CSS of its own still
|
|
61
|
+
// has `<p>`s and `<h1>`s, and the cascade breaks equal-specificity ties by
|
|
62
|
+
// source order, so anything the app states about the same tag has to be
|
|
63
|
+
// registered after this to win.
|
|
64
|
+
const body = tape.length === 0 ? geaUserAgentStyleSheet : `${geaUserAgentStyleSheet}\n${tape}`;
|
|
65
|
+
const provenance = `// @geastack/compiler gea C++ prelude\n// prelude=${tapePath ?? '<none: user-agent defaults only>'}`;
|
|
66
|
+
if (named)
|
|
67
|
+
return [`${provenance}\nvoid ${symbol}() {\n${indent(body, ' ')}\n}`];
|
|
68
|
+
return [
|
|
69
|
+
`${provenance}\nstruct GeaPluginCppPreludeRegistration {\n GeaPluginCppPreludeRegistration() {\n${indent(body, ' ')}\n }\n};\ninline GeaPluginCppPreludeRegistration gea_plugin_cpp_prelude_registration;`
|
|
70
|
+
];
|
|
71
|
+
};
|
|
72
|
+
/**
|
|
73
|
+
* Whether the gea build pipeline is what asked for this compilation.
|
|
74
|
+
*
|
|
75
|
+
* `build-gea-vite-geatsc.mjs` passes `gea.ir` for every app it compiles, ahead
|
|
76
|
+
* of knowing whether that app has any CSS, and it is the one option that says
|
|
77
|
+
* "this unit is a gea app and links the engine". The user-agent sheet needs
|
|
78
|
+
* that to be true before it may name `gea::embedded::ui`, and a program
|
|
79
|
+
* compiled through the plain API states nothing of the kind.
|
|
80
|
+
*/
|
|
81
|
+
const isPipelineBuild = (options) => {
|
|
82
|
+
const ir = options.get('gea.ir');
|
|
83
|
+
return ir !== undefined && ir.length > 0 && !isAppleNativeBuild(options);
|
|
84
|
+
};
|
|
85
|
+
/**
|
|
86
|
+
* Whether the unit this compilation emits talks to AppKit rather than to gea's
|
|
87
|
+
* own element tree.
|
|
88
|
+
*
|
|
89
|
+
* `gea.ir` says "the gea pipeline asked for this build"; it does not say the
|
|
90
|
+
* result links gea's UI engine, and for one target it does not. An
|
|
91
|
+
* apple-native app's emitted unit includes `gea/apple/native_bridge.h` and
|
|
92
|
+
* nothing else -- `gea/embedded.h` and `ui/internal.h` are absent, because the
|
|
93
|
+
* views really are `NSView`s -- so C++ naming `gea::embedded::ui::StyleSheet`
|
|
94
|
+
* does not compile there ("no member named 'StyleSheet' in namespace
|
|
95
|
+
* 'gea::embedded::ui'", six times, on `notes-native`). There are also no `<p>`
|
|
96
|
+
* or `<h1>` nodes in such a program for a user-agent rule to match, so the
|
|
97
|
+
* sheet has nothing to say about it either way.
|
|
98
|
+
*
|
|
99
|
+
* Read off `apple.metadata`, which the apple target's pipeline passes for
|
|
100
|
+
* exactly the builds that load the apple-native plugin -- the same kind of
|
|
101
|
+
* fact, from the same pipeline, as `gea.ir` above.
|
|
102
|
+
*
|
|
103
|
+
* Exported so `cli-emit.ts` can thread this same pipeline fact into
|
|
104
|
+
* `generated_support.hpp`'s Apple-ownership line, rather than re-deriving it
|
|
105
|
+
* by searching the rendered C++ for the include text this fact already
|
|
106
|
+
* decided to write.
|
|
107
|
+
*/
|
|
108
|
+
export const isAppleNativeBuild = (options) => {
|
|
109
|
+
const metadata = options.get('apple.metadata');
|
|
110
|
+
return metadata !== undefined && metadata.length > 0;
|
|
111
|
+
};
|
|
112
|
+
/** Whether this is a bare C++ identifier, so a name the build passed can be emitted as one. */
|
|
113
|
+
/**
|
|
114
|
+
* The namespace this program's `drainMicrotasks()` is defined in.
|
|
115
|
+
*
|
|
116
|
+
* `core/packages/core/gea_app_entry.cpp` calls `generated::drainMicrotasks()`,
|
|
117
|
+
* and a resident build gives each app its own nested namespace so four units
|
|
118
|
+
* can each define one -- `gea::framework::app::generated::gea_resident_<id>`,
|
|
119
|
+
* which `targets/web/generate-resident-entry.mjs` forward-declares by name.
|
|
120
|
+
* The pipeline derives it from the entry symbol and states it here
|
|
121
|
+
* (`build-gea-vite-geatsc.mjs`, `microtasksNamespaceForEntry`), so this reads
|
|
122
|
+
* it rather than restating it: the package that owns the contract is the
|
|
123
|
+
* authority, and a namespace invented on this side is a symbol nothing
|
|
124
|
+
* declares.
|
|
125
|
+
*
|
|
126
|
+
* The fallback is the plain namespace a single-app build uses, which is what
|
|
127
|
+
* the pipeline itself passes when the entry symbol is not a resident's.
|
|
128
|
+
*/
|
|
129
|
+
export const microtasksNamespace = (options) => {
|
|
130
|
+
const stated = options.get('gea.microtasks-namespace');
|
|
131
|
+
return stated !== undefined && isNamespacePath(stated) ? stated : 'gea::framework::app::generated';
|
|
132
|
+
};
|
|
133
|
+
/** A `::`-separated path of plain identifiers, and nothing else -- this text is spliced into C++. */
|
|
134
|
+
const isNamespacePath = (value) => {
|
|
135
|
+
const parts = value.split('::');
|
|
136
|
+
return parts.length > 0 && parts.every((part) => isPlainIdentifier(part));
|
|
137
|
+
};
|
|
138
|
+
const isPlainIdentifier = (value) => {
|
|
139
|
+
if (value.length === 0)
|
|
140
|
+
return false;
|
|
141
|
+
for (let index = 0; index < value.length; index += 1) {
|
|
142
|
+
const code = value.charCodeAt(index);
|
|
143
|
+
const letter = (code >= 65 && code <= 90) || (code >= 97 && code <= 122) || code === 95;
|
|
144
|
+
const digit = code >= 48 && code <= 57;
|
|
145
|
+
if (!letter && !(digit && index > 0))
|
|
146
|
+
return false;
|
|
147
|
+
}
|
|
148
|
+
return true;
|
|
149
|
+
};
|
|
150
|
+
const indent = (source, prefix) => source
|
|
151
|
+
.split('\n')
|
|
152
|
+
.map((line) => (line.length === 0 ? line : `${prefix}${line}`))
|
|
153
|
+
.join('\n');
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { OperationId } from '../../identity/ids.js';
|
|
2
|
+
import type { FamilyProducer } from '../../semantics/normalize/contribution.js';
|
|
3
|
+
import type { ProducerContext } from '../../semantics/normalize/producer-context.js';
|
|
4
|
+
import { type GeaElementFacts } from './contract.js';
|
|
5
|
+
export declare const createGeaElementProducer: (context: ProducerContext, facts: Map<OperationId, GeaElementFacts>) => FamilyProducer;
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import ts from 'typescript';
|
|
2
|
+
import { createElementProducer } from '../../semantics/normalize/producers/jsx.js';
|
|
3
|
+
import { elementFactsOf } from './contract.js';
|
|
4
|
+
/**
|
|
5
|
+
* gea's element producer.
|
|
6
|
+
*
|
|
7
|
+
* It publishes exactly what the core's does -- the same operations, the same
|
|
8
|
+
* identities, the same operand pairing -- and additionally records, for every
|
|
9
|
+
* element whose tag names a value, what gea says that element means. The two
|
|
10
|
+
* halves are deliberately not merged: the operations belong to the graph, which
|
|
11
|
+
* every stage reads, while the meaning belongs to gea and is read only by gea's
|
|
12
|
+
* own lowering. Putting the second on the operation would put a library's
|
|
13
|
+
* vocabulary into a model that other libraries also publish into.
|
|
14
|
+
*
|
|
15
|
+
* Delegating rather than reimplementing is a choice about drift, not effort.
|
|
16
|
+
* An element's identity is minted from its node and its family, and a second
|
|
17
|
+
* producer that minted its own would have to stay in agreement with the first
|
|
18
|
+
* forever; there is nothing about the *language* half of an element that gea
|
|
19
|
+
* disagrees with, so it does not restate it.
|
|
20
|
+
*/
|
|
21
|
+
/** The tag of an element node, or `null` for a fragment, which names none. */
|
|
22
|
+
const tagNameOf = (node) => {
|
|
23
|
+
if (ts.isJsxSelfClosingElement(node))
|
|
24
|
+
return node.tagName;
|
|
25
|
+
if (ts.isJsxElement(node))
|
|
26
|
+
return node.openingElement.tagName;
|
|
27
|
+
if (ts.isJsxOpeningElement(node))
|
|
28
|
+
return node.tagName;
|
|
29
|
+
return null;
|
|
30
|
+
};
|
|
31
|
+
export const createGeaElementProducer = (context, facts) => {
|
|
32
|
+
const core = createElementProducer(context);
|
|
33
|
+
return {
|
|
34
|
+
family: core.family,
|
|
35
|
+
contribute: (candidate) => {
|
|
36
|
+
const contribution = core.contribute(candidate);
|
|
37
|
+
if (contribution.kind !== 'operations')
|
|
38
|
+
return contribution;
|
|
39
|
+
const tagName = tagNameOf(candidate.node);
|
|
40
|
+
if (!tagName)
|
|
41
|
+
return contribution;
|
|
42
|
+
for (const operation of contribution.operations) {
|
|
43
|
+
if (operation.family !== 'element' || operation.form !== 'value')
|
|
44
|
+
continue;
|
|
45
|
+
const resolved = elementFactsOf(context.checker, tagName);
|
|
46
|
+
if (resolved)
|
|
47
|
+
facts.set(operation.id, resolved);
|
|
48
|
+
}
|
|
49
|
+
return contribution;
|
|
50
|
+
}
|
|
51
|
+
};
|
|
52
|
+
};
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import ts from 'typescript';
|
|
2
|
+
import type { PluginSourceFile } from '../model.js';
|
|
3
|
+
/**
|
|
4
|
+
* Whether this tag names a VALUE rather than an intrinsic name.
|
|
5
|
+
*
|
|
6
|
+
* JSX's own rule, and the same one `producers/jsx.ts`'s `intrinsicTagOf` reads:
|
|
7
|
+
* a lowercase-initial plain identifier is an intrinsic name, anything else --
|
|
8
|
+
* `ClockHand`, `ui.Row` -- resolves as a value. A namespaced name is never a
|
|
9
|
+
* component.
|
|
10
|
+
*/
|
|
11
|
+
export declare const namesAComponent: (tag: ts.JsxTagNameExpression) => boolean;
|
|
12
|
+
export declare const openingOf: (element: ts.JsxElement | ts.JsxSelfClosingElement) => ts.JsxOpeningLikeElement;
|
|
13
|
+
/**
|
|
14
|
+
* A COMPONENT element in a child position, whose props are computed from
|
|
15
|
+
* something read out of an object.
|
|
16
|
+
*
|
|
17
|
+
* This is the one JSX position whose reactivity nothing else can reach.
|
|
18
|
+
* `plugins/gea/lower.ts` lowers `<ClockHand angle={clock.second}/>` to what the
|
|
19
|
+
* checker checked -- a props record built from the attributes, and a call --
|
|
20
|
+
* so the reactive field is read ONCE, into a plain field of that record, and
|
|
21
|
+
* the callee's body then sees an ordinary parameter. Every reactive binding
|
|
22
|
+
* this backend has is attached at an INTRINSIC element's own prop or child
|
|
23
|
+
* (`targets/cpp/emit-jsx.ts`), and there is no intrinsic element here: the
|
|
24
|
+
* emitter cannot bind a member pointer through a call it cannot see inside.
|
|
25
|
+
*
|
|
26
|
+
* So the re-runnable unit is the whole invocation -- props record and call
|
|
27
|
+
* together -- which is exactly what wrapping the element in an IIFE makes it.
|
|
28
|
+
* Re-running the call alone would not do: it would hand the callee the SAME
|
|
29
|
+
* record, still holding the value the first render read.
|
|
30
|
+
*
|
|
31
|
+
* Claimed only in a child position. A component element that is a function's
|
|
32
|
+
* return value (`return <AnalogClockView/>`) is not a slot of anything -- there
|
|
33
|
+
* is no parent node to re-attach a rebuilt subtree to -- and the rewrite would
|
|
34
|
+
* only add a call.
|
|
35
|
+
*
|
|
36
|
+
* And only under an INTRINSIC parent. The re-attach point this rewrite is for
|
|
37
|
+
* is an `element-child` operation on a real host node -- the only place
|
|
38
|
+
* `targets/cpp/emit-jsx.ts` can write `reactiveNodeApply` -- and only an
|
|
39
|
+
* intrinsic element lowers to one. A component nested directly inside another
|
|
40
|
+
* COMPONENT element (`<UILabel/>` under `<UIView>`, as every apple-native app
|
|
41
|
+
* writes its tree) is not a child slot of a node at all: it is an attribute of
|
|
42
|
+
* the props record the outer component's own invocation builds, attached by
|
|
43
|
+
* that call rather than by this compiler. Wrapping it offers a re-run nothing
|
|
44
|
+
* can attach -- and measurably costs: it moves the element out of the position
|
|
45
|
+
* whose type the checker had, so `producers/jsx.ts` sees `any` and blocks the
|
|
46
|
+
* census (four `ios-*` apps lost their certificate on exactly this).
|
|
47
|
+
*/
|
|
48
|
+
export declare const isReactiveComponentChild: (node: ts.Node) => node is ts.JsxElement | ts.JsxSelfClosingElement;
|
|
49
|
+
export declare const geaReactiveSlotTransform: ({ fileName, text }: PluginSourceFile) => string | null;
|