@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,293 @@
|
|
|
1
|
+
import ts from 'typescript';
|
|
2
|
+
import { appleNativeTypes } from './host.js';
|
|
3
|
+
import { appleHostMembers, appleMethodParameters } from './members.js';
|
|
4
|
+
/**
|
|
5
|
+
* Apple's JSX, rewritten into the construction it always meant.
|
|
6
|
+
*
|
|
7
|
+
* ## Why this cannot be a producer
|
|
8
|
+
*
|
|
9
|
+
* Everything else this plugin does reads the checker's answer. This cannot,
|
|
10
|
+
* because for JSX over AppKit the checker has no answer to give:
|
|
11
|
+
*
|
|
12
|
+
* - Every JSX element is typed `JSX.Element`, never the tag's own class. That
|
|
13
|
+
* is the language's rule, not a configuration: the element type comes from
|
|
14
|
+
* the JSX namespace in scope. Measured against `jsx: "react-jsx"` with a
|
|
15
|
+
* factory declared `<T extends new () => NSView>(type: T, props:
|
|
16
|
+
* Partial<InstanceType<T>>): InstanceType<T>` -- the namespace's `Element`
|
|
17
|
+
* still wins, so `<NSStackView/>` is not an `NSStackView` to anything
|
|
18
|
+
* downstream.
|
|
19
|
+
* - JSX attribute checking requires the component to have a PROPS PARAMETER.
|
|
20
|
+
* An AppKit class does not have one, so `spacing="not-a-number"` produces no
|
|
21
|
+
* diagnostic whatsoever -- an entire class of author error passes silently.
|
|
22
|
+
*
|
|
23
|
+
* So a producer running after the checker would be handed `JSX.Element` and a
|
|
24
|
+
* bag of unchecked attributes, and would have to re-derive from syntax what the
|
|
25
|
+
* type system was supposed to establish. The element has to become ordinary
|
|
26
|
+
* TypeScript BEFORE the checker runs, which is what v1 does -- a Babel
|
|
27
|
+
* transform in `vite-plugin-apple-native`, whose output shape this reproduces
|
|
28
|
+
* exactly. After the rewrite the checker types `new NSStackView()` as an
|
|
29
|
+
* `NSStackView` and checks `stack.spacing = 8` against the real declared
|
|
30
|
+
* property, which is the entire point.
|
|
31
|
+
*
|
|
32
|
+
* ## What decides which tags are claimed
|
|
33
|
+
*
|
|
34
|
+
* `appleNativeTypes()`, and nothing else. v1's transform carries a hardcoded
|
|
35
|
+
* list of twenty-two tag names, which is a second copy of a fact the SDK
|
|
36
|
+
* package already states and which goes stale the first time the SDK grows a
|
|
37
|
+
* class. A tag this host does not own is left untouched, so a file mixing
|
|
38
|
+
* AppKit elements with another library's is rewritten only where it should be.
|
|
39
|
+
*
|
|
40
|
+
* Whether a child is added with `addArrangedSubview` or `addSubview` is decided
|
|
41
|
+
* the same way -- by asking whether the parent's carrier has an
|
|
42
|
+
* `addArrangedSubview` member -- rather than by a second hardcoded list of the
|
|
43
|
+
* three stack-shaped classes.
|
|
44
|
+
*
|
|
45
|
+
* ## Why text, and why splicing
|
|
46
|
+
*
|
|
47
|
+
* Text in, text out: what the checker parses is a program a person could have
|
|
48
|
+
* written, and every stage after it behaves as though the author wrote that.
|
|
49
|
+
* The rewrite splices only the ranges the elements occupy, innermost text taken
|
|
50
|
+
* from the original source, so every other byte of the file -- comments,
|
|
51
|
+
* formatting, the code around the element -- survives exactly. Reprinting the
|
|
52
|
+
* file through TypeScript's printer would have been less code and would have
|
|
53
|
+
* rewritten lines nothing asked to change.
|
|
54
|
+
*/
|
|
55
|
+
/** The name a JSX tag spells, when it is a plain identifier; `null` for a qualified or namespaced tag. */
|
|
56
|
+
const tagNameOf = (element) => ts.isIdentifier(element.tagName) ? element.tagName.text : null;
|
|
57
|
+
const claimedElement = (node, carriers) => {
|
|
58
|
+
if (ts.isJsxSelfClosingElement(node)) {
|
|
59
|
+
const tag = tagNameOf(node);
|
|
60
|
+
return tag !== null && carriers.has(tag) ? { node, opening: node, tag, children: [] } : null;
|
|
61
|
+
}
|
|
62
|
+
if (!ts.isJsxElement(node))
|
|
63
|
+
return null;
|
|
64
|
+
const tag = tagNameOf(node.openingElement);
|
|
65
|
+
return tag !== null && carriers.has(tag) ? { node, opening: node.openingElement, tag, children: node.children } : null;
|
|
66
|
+
};
|
|
67
|
+
/**
|
|
68
|
+
* The call that adds a child to this parent, as the parent's own type decides.
|
|
69
|
+
*
|
|
70
|
+
* A stack view arranges its children with Auto Layout and takes them through
|
|
71
|
+
* `addArrangedSubview`; every other view takes them through `addSubview`, and
|
|
72
|
+
* handing a stack view the second silently produces a view with an unarranged,
|
|
73
|
+
* unpositioned child. The member table is what knows which is which, so the
|
|
74
|
+
* question is asked of it rather than of a list of class names kept here.
|
|
75
|
+
*/
|
|
76
|
+
const childAdderOf = (carrier, members) => members.has(`${carrier}.addArrangedSubview`) ? 'addArrangedSubview' : 'addSubview';
|
|
77
|
+
/** The source text of a node, exactly as the author wrote it. */
|
|
78
|
+
const sourceTextOf = (node, file) => node.getText(file);
|
|
79
|
+
/**
|
|
80
|
+
* One attribute's value as an expression.
|
|
81
|
+
*
|
|
82
|
+
* A valueless attribute is `true`, which is JSX's own rule for one. A string
|
|
83
|
+
* literal and an expression container are both taken verbatim -- the author's
|
|
84
|
+
* text is the value, and re-rendering it would be this file deciding how their
|
|
85
|
+
* expression should look.
|
|
86
|
+
*/
|
|
87
|
+
const attributeValueText = (attribute, file, tag) => {
|
|
88
|
+
const initializer = attribute.initializer;
|
|
89
|
+
if (initializer === undefined)
|
|
90
|
+
return 'true';
|
|
91
|
+
if (ts.isStringLiteral(initializer))
|
|
92
|
+
return sourceTextOf(initializer, file);
|
|
93
|
+
if (ts.isJsxExpression(initializer) && initializer.expression)
|
|
94
|
+
return sourceTextOf(initializer.expression, file);
|
|
95
|
+
throw new Error(`<${tag}> has an attribute with no value expression; an Apple native element sets properties, and a property needs a value`);
|
|
96
|
+
};
|
|
97
|
+
/** The object literal an attribute's value is, or `null` when it is any other expression. */
|
|
98
|
+
const objectLiteralOf = (attribute) => {
|
|
99
|
+
const initializer = attribute.initializer;
|
|
100
|
+
if (initializer === undefined || !ts.isJsxExpression(initializer) || !initializer.expression)
|
|
101
|
+
return null;
|
|
102
|
+
return ts.isObjectLiteralExpression(initializer.expression) ? initializer.expression : null;
|
|
103
|
+
};
|
|
104
|
+
/**
|
|
105
|
+
* An object-literal attribute CONFIGURES the member it names; it does not
|
|
106
|
+
* replace it.
|
|
107
|
+
*
|
|
108
|
+
* `layer={{ cornerRadius: 6 }}` is the case that proves the rule, and the
|
|
109
|
+
* checker is what proves it: `layer` is declared read-only -- a view owns its
|
|
110
|
+
* layer and a program cannot hand it a different one -- so rewriting the
|
|
111
|
+
* attribute as `view.layer = { … }` produces "Cannot assign to 'layer' because
|
|
112
|
+
* it is a read-only property", correctly. What the author means is the six
|
|
113
|
+
* words the object spells out: set these properties on the layer this view
|
|
114
|
+
* already has. So each property becomes its own assignment through the member.
|
|
115
|
+
*
|
|
116
|
+
* Stated generally rather than for `layer` alone (v1 names that one property):
|
|
117
|
+
* nothing about the rule is specific to layers, and a list of member names kept
|
|
118
|
+
* here would be one more copy of the host's own model.
|
|
119
|
+
*/
|
|
120
|
+
const objectAttributeStatements = (view, member, literal, file, tag) => literal.properties.map((property) => {
|
|
121
|
+
if (!ts.isPropertyAssignment(property)) {
|
|
122
|
+
throw new Error(`<${tag}> configures "${member}" with an entry that is not a plain \`name: value\`; each one becomes an assignment, and only a named property has a name to assign through`);
|
|
123
|
+
}
|
|
124
|
+
if (!ts.isIdentifier(property.name) && !ts.isStringLiteral(property.name)) {
|
|
125
|
+
throw new Error(`<${tag}> configures "${member}" through a computed property name; the property a value lands on has to be known here, before the checker types it`);
|
|
126
|
+
}
|
|
127
|
+
return `${view}.${member}.${property.name.text} = ${sourceTextOf(property.initializer, file)};`;
|
|
128
|
+
});
|
|
129
|
+
/** The setter spelling of an attribute name: `title` becomes `setTitle`. */
|
|
130
|
+
const setterNameOf = (attribute) => `set${attribute.slice(0, 1).toUpperCase()}${attribute.slice(1)}`;
|
|
131
|
+
/**
|
|
132
|
+
* The value a parameter the attribute form cannot spell takes.
|
|
133
|
+
*
|
|
134
|
+
* `setTitle:forState:` has a control state and `setOn:animated:` has an
|
|
135
|
+
* animation flag; an attribute states one value and says nothing about either.
|
|
136
|
+
* What it means by saying nothing is the plain case -- the title in the normal
|
|
137
|
+
* state, set without animation -- and on this platform the plain case is the
|
|
138
|
+
* zero of the parameter's own declared type: control state `0` is `.normal`,
|
|
139
|
+
* `animated: false` is no animation.
|
|
140
|
+
*
|
|
141
|
+
* A parameter of any other kind has no such value. An object cannot be
|
|
142
|
+
* defaulted -- there is no empty `UIColor` that means "unspecified" -- and a
|
|
143
|
+
* primitive the SDK names something other than `number` or `boolean` is an
|
|
144
|
+
* enumeration whose zero this file has no standing to pick. Both are refused
|
|
145
|
+
* rather than guessed.
|
|
146
|
+
*/
|
|
147
|
+
const parameterZeroOf = (type) => {
|
|
148
|
+
if (type?.kind !== 'primitive')
|
|
149
|
+
return null;
|
|
150
|
+
if (type.name === 'number')
|
|
151
|
+
return '0';
|
|
152
|
+
return type.name === 'boolean' ? 'false' : null;
|
|
153
|
+
};
|
|
154
|
+
/**
|
|
155
|
+
* An attribute the class states only as a setter.
|
|
156
|
+
*
|
|
157
|
+
* `<UIButton title="Go"/>`: a button has no `title` property, because a
|
|
158
|
+
* button's title is per control state, so UIKit spells it
|
|
159
|
+
* `setTitle:forState:`. Assigning the attribute as a property would emit
|
|
160
|
+
* `button.title = "Go"`, which the checker rejects outright -- and did, on five
|
|
161
|
+
* iOS programs, the moment this transform started producing code the checker
|
|
162
|
+
* actually types.
|
|
163
|
+
*
|
|
164
|
+
* Which attributes these are is not a list kept here. v1's transform names
|
|
165
|
+
* three of them; this asks the host's own tables the question those three are
|
|
166
|
+
* the answer to -- the carrier states no member `title`, and does state a
|
|
167
|
+
* method `setTitle` -- so a class that grows a fourth is carried without an
|
|
168
|
+
* edit here, and one that turns a setter into a property stops being routed
|
|
169
|
+
* without one either.
|
|
170
|
+
*
|
|
171
|
+
* `null` when the attribute is an ordinary property, which is nearly all of
|
|
172
|
+
* them: the caller then assigns it as written.
|
|
173
|
+
*/
|
|
174
|
+
const setterStatement = (view, carrier, attribute, valueText, members, tag) => {
|
|
175
|
+
if (members.has(`${carrier}.${attribute}`))
|
|
176
|
+
return null;
|
|
177
|
+
const setter = setterNameOf(attribute);
|
|
178
|
+
if (!members.has(`${carrier}.${setter}`))
|
|
179
|
+
return null;
|
|
180
|
+
const parameters = appleMethodParameters(carrier, setter);
|
|
181
|
+
if (parameters === null)
|
|
182
|
+
return null;
|
|
183
|
+
const rest = parameters.slice(1).map((parameter) => {
|
|
184
|
+
const zero = parameterZeroOf(parameter.type);
|
|
185
|
+
if (zero === null) {
|
|
186
|
+
throw new Error(`<${tag}> sets "${attribute}" through ${setter}, which takes a further argument of a kind an attribute cannot leave unstated; ` +
|
|
187
|
+
`call ${setter} directly with every argument it needs`);
|
|
188
|
+
}
|
|
189
|
+
return zero;
|
|
190
|
+
});
|
|
191
|
+
return `${view}.${setter}(${[valueText, ...rest].join(', ')});`;
|
|
192
|
+
};
|
|
193
|
+
/**
|
|
194
|
+
* The whole element as one expression: build it, configure it, hand it back.
|
|
195
|
+
*
|
|
196
|
+
* An immediately-invoked arrow, because a JSX element is an EXPRESSION and the
|
|
197
|
+
* work it stands for is a sequence of statements. That is v1's shape too, and
|
|
198
|
+
* it is what lets an element appear wherever the author put one -- an
|
|
199
|
+
* initializer, an argument, a child of another element -- without this
|
|
200
|
+
* transform having to know where it landed.
|
|
201
|
+
*/
|
|
202
|
+
const elementExpressionText = (claimed, file, carriers, members, nextName) => {
|
|
203
|
+
const view = nextName();
|
|
204
|
+
const carrier = carriers.get(claimed.tag) ?? '';
|
|
205
|
+
const statements = [`const ${view} = new ${claimed.tag}();`];
|
|
206
|
+
for (const attribute of claimed.opening.attributes.properties) {
|
|
207
|
+
if (!ts.isJsxAttribute(attribute) || !ts.isIdentifier(attribute.name)) {
|
|
208
|
+
// A spread carries names known only at run time, and a property assigned
|
|
209
|
+
// by a name nothing states is exactly the unchecked write this transform
|
|
210
|
+
// exists to eliminate.
|
|
211
|
+
throw new Error(`<${claimed.tag}> spreads its attributes; an Apple native element states each property it sets, by name`);
|
|
212
|
+
}
|
|
213
|
+
const literal = objectLiteralOf(attribute);
|
|
214
|
+
if (literal) {
|
|
215
|
+
statements.push(...objectAttributeStatements(view, attribute.name.text, literal, file, claimed.tag));
|
|
216
|
+
continue;
|
|
217
|
+
}
|
|
218
|
+
const value = attributeValueText(attribute, file, claimed.tag);
|
|
219
|
+
const setter = setterStatement(view, carrier, attribute.name.text, value, members, claimed.tag);
|
|
220
|
+
statements.push(setter ?? `${view}.${attribute.name.text} = ${value};`);
|
|
221
|
+
}
|
|
222
|
+
const adder = childAdderOf(carrier, members);
|
|
223
|
+
for (const child of claimed.children) {
|
|
224
|
+
const nested = claimedElement(child, carriers);
|
|
225
|
+
if (nested) {
|
|
226
|
+
statements.push(`${view}.${adder}(${elementExpressionText(nested, file, carriers, members, nextName)});`);
|
|
227
|
+
continue;
|
|
228
|
+
}
|
|
229
|
+
if (ts.isJsxExpression(child)) {
|
|
230
|
+
if (child.expression)
|
|
231
|
+
statements.push(`${view}.${adder}(${sourceTextOf(child.expression, file)});`);
|
|
232
|
+
continue;
|
|
233
|
+
}
|
|
234
|
+
if (ts.isJsxText(child)) {
|
|
235
|
+
if (child.text.trim().length > 0) {
|
|
236
|
+
throw new Error(`<${claimed.tag}> has text between its tags; an AppKit view holds subviews, and text belongs to a field's own string property`);
|
|
237
|
+
}
|
|
238
|
+
continue;
|
|
239
|
+
}
|
|
240
|
+
throw new Error(`<${claimed.tag}> has a child this transform does not read; an Apple native element's children are elements or expressions`);
|
|
241
|
+
}
|
|
242
|
+
statements.push(`return ${view};`);
|
|
243
|
+
return `(() => { ${statements.join(' ')} })()`;
|
|
244
|
+
};
|
|
245
|
+
/**
|
|
246
|
+
* The outermost claimed elements in a file, in source order.
|
|
247
|
+
*
|
|
248
|
+
* Outermost only: a claimed element renders its own children itself, from the
|
|
249
|
+
* original AST, so descending into one would rewrite the same text twice.
|
|
250
|
+
*/
|
|
251
|
+
const claimedRootsOf = (file, carriers) => {
|
|
252
|
+
const roots = [];
|
|
253
|
+
const visit = (node) => {
|
|
254
|
+
const claimed = claimedElement(node, carriers);
|
|
255
|
+
if (claimed) {
|
|
256
|
+
roots.push(claimed);
|
|
257
|
+
return;
|
|
258
|
+
}
|
|
259
|
+
ts.forEachChild(node, visit);
|
|
260
|
+
};
|
|
261
|
+
ts.forEachChild(file, visit);
|
|
262
|
+
return roots;
|
|
263
|
+
};
|
|
264
|
+
export const appleJsxTransform = ({ fileName, text }) => {
|
|
265
|
+
// JSX is only JSX in a file whose extension says the parser should read it as
|
|
266
|
+
// such, and a file with no `<` cannot contain an element -- one substring test
|
|
267
|
+
// is what a file this plugin has nothing to do with costs.
|
|
268
|
+
if (!fileName.endsWith('.tsx') && !fileName.endsWith('.jsx'))
|
|
269
|
+
return null;
|
|
270
|
+
if (!text.includes('<'))
|
|
271
|
+
return null;
|
|
272
|
+
const carriers = appleNativeTypes();
|
|
273
|
+
if (carriers.size === 0)
|
|
274
|
+
return null;
|
|
275
|
+
const file = ts.createSourceFile(fileName, text, ts.ScriptTarget.Latest, true, ts.ScriptKind.TSX);
|
|
276
|
+
const roots = claimedRootsOf(file, carriers);
|
|
277
|
+
if (roots.length === 0)
|
|
278
|
+
return null;
|
|
279
|
+
const members = appleHostMembers();
|
|
280
|
+
let counter = 0;
|
|
281
|
+
const nextName = () => `__geaAppleView${counter++}`;
|
|
282
|
+
// Spliced from the end so every earlier element's range is still the range it
|
|
283
|
+
// was measured at. Rewriting forwards would need every later position
|
|
284
|
+
// adjusted by the length each replacement changed, which is the same answer
|
|
285
|
+
// with an off-by-one to find.
|
|
286
|
+
let rewritten = text;
|
|
287
|
+
for (const claimed of [...roots].reverse()) {
|
|
288
|
+
const start = claimed.node.getStart(file);
|
|
289
|
+
rewritten =
|
|
290
|
+
rewritten.slice(0, start) + elementExpressionText(claimed, file, carriers, members, nextName) + rewritten.slice(claimed.node.end);
|
|
291
|
+
}
|
|
292
|
+
return rewritten;
|
|
293
|
+
};
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { HostMemberTable } from '../../targets/cpp/host/host-members.js';
|
|
2
|
+
import { type AppleMethodParameter } from './host.js';
|
|
3
|
+
export declare const appleHostMembers: () => HostMemberTable;
|
|
4
|
+
/**
|
|
5
|
+
* The parameters a class declares for one of its methods.
|
|
6
|
+
*
|
|
7
|
+
* Walked up the chain the class extends, because a method is declared once, on
|
|
8
|
+
* the class that introduces it, while the member tables list every receiver
|
|
9
|
+
* that inherits it -- so "this carrier accepts `setTitle`" and "this class
|
|
10
|
+
* declares `setTitle`" are answered by two different rows, and only the second
|
|
11
|
+
* one carries the parameter list.
|
|
12
|
+
*
|
|
13
|
+
* `null` when nothing in the chain declares the method, which is a real answer
|
|
14
|
+
* and not an empty parameter list: a method with no parameters states `[]`.
|
|
15
|
+
*/
|
|
16
|
+
export declare const appleMethodParameters: (carrier: string, method: string) => readonly AppleMethodParameter[] | null;
|
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
import { templateArity } from '../../targets/cpp/host/host-members.js';
|
|
2
|
+
import { appleBridgeMetadata, appleMemberTables, appleNativeTypes } from './host.js';
|
|
3
|
+
/**
|
|
4
|
+
* The carriers a binding applies to.
|
|
5
|
+
*
|
|
6
|
+
* A binding lists every spelling of every receiver it accepts -- the bare
|
|
7
|
+
* ObjC name (`NSView`), the pointer form (`NSView *`), the C++ wrapper
|
|
8
|
+
* (`gea::apple::AppKit::NSView`), and `gea_cpp_value`. Only the wrapper form is
|
|
9
|
+
* kept, because that is the carrier this compiler keys a host member by, and
|
|
10
|
+
* the bare and pointer forms are the same type under two other names.
|
|
11
|
+
*
|
|
12
|
+
* `gea_cpp_value` is dropped deliberately and permanently. It is v1's boxed
|
|
13
|
+
* receiver -- the dynamic fallback that lets a member resolve off a value whose
|
|
14
|
+
* type was erased -- and admitting it here would make every AppKit member
|
|
15
|
+
* reachable through the box this compiler exists not to produce.
|
|
16
|
+
*/
|
|
17
|
+
const carriersOf = (binding) => (binding.receiverTypes ?? []).filter((name) => name.startsWith('gea::apple::'));
|
|
18
|
+
/**
|
|
19
|
+
* The other spelling convention this host states: a thunk, not a message send.
|
|
20
|
+
*
|
|
21
|
+
* Fifty of the Apple member rows carry `extern` instead of `emit` -- a C++ free
|
|
22
|
+
* function the generated bridge declares and defines, rather than an inline
|
|
23
|
+
* ObjC template. The calling convention is the package's own, stated in v1's
|
|
24
|
+
* `native-global-function-bindings.ts` where these tables are declared: "Reads
|
|
25
|
+
* and writes lower to configured extern names with the receiver as the first
|
|
26
|
+
* argument." The generated header says the same thing in C++ --
|
|
27
|
+
* `MTKView_get_currentRenderPassDescriptor(MTKView self)`,
|
|
28
|
+
* `MTKView_set_device(MTKView self, MTLDevice value)`.
|
|
29
|
+
*
|
|
30
|
+
* So the template is that call, and the only thing it needs beyond the row is
|
|
31
|
+
* how many arguments to pass. A getter takes none and a setter takes the value;
|
|
32
|
+
* a method takes what the class DECLARES, which the metadata one step upstream
|
|
33
|
+
* still knows (`appleMethodParameters`) and these tables no longer do. A method
|
|
34
|
+
* whose declaration cannot be found renders nothing rather than a call with a
|
|
35
|
+
* guessed arity: that would be a link error naming a symbol the program never
|
|
36
|
+
* wrote, in place of a refusal naming the member it could not spell.
|
|
37
|
+
*/
|
|
38
|
+
const externTemplate = (name, binding, carrier, slots) => {
|
|
39
|
+
const symbol = binding.extern;
|
|
40
|
+
if (symbol === undefined || symbol.length === 0)
|
|
41
|
+
return null;
|
|
42
|
+
if (slots === 'none')
|
|
43
|
+
return `${symbol}({receiver})`;
|
|
44
|
+
if (slots === 'value')
|
|
45
|
+
return `${symbol}({receiver}, {value})`;
|
|
46
|
+
const parameters = appleMethodParameters(carrier, name);
|
|
47
|
+
if (parameters === null)
|
|
48
|
+
return null;
|
|
49
|
+
const args = parameters.map((_, position) => `, {arg${position}}`).join('');
|
|
50
|
+
return `${symbol}({receiver}${args})`;
|
|
51
|
+
};
|
|
52
|
+
const addRows = (rows, table, slots, member) => {
|
|
53
|
+
for (const [name, bindings] of Object.entries(table ?? {})) {
|
|
54
|
+
for (const binding of bindings) {
|
|
55
|
+
for (const carrier of carriersOf(binding)) {
|
|
56
|
+
const emit = binding.emit !== undefined && binding.emit.length > 0 ? binding.emit : externTemplate(name, binding, carrier, slots);
|
|
57
|
+
if (emit === null || emit === undefined || emit.length === 0)
|
|
58
|
+
continue;
|
|
59
|
+
const key = `${carrier}.${name}`;
|
|
60
|
+
const row = member(emit, rows.get(key));
|
|
61
|
+
if (row)
|
|
62
|
+
rows.set(key, row);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
};
|
|
67
|
+
/**
|
|
68
|
+
* Apple's host members, keyed the way this backend keys every host member:
|
|
69
|
+
* `<carrier>.<member>`.
|
|
70
|
+
*
|
|
71
|
+
* The package states them the other way round -- keyed by member name, each
|
|
72
|
+
* binding listing the receiver types it accepts -- because that is the shape
|
|
73
|
+
* its own emitter looks members up in. Transposing here is not restating the
|
|
74
|
+
* data: every template, every receiver list and every cast stays in the package
|
|
75
|
+
* that generates it, and this is the one place that says which of the two
|
|
76
|
+
* indexes this compiler reads.
|
|
77
|
+
*
|
|
78
|
+
* A getter and a setter for one member are two rows in the package and one row
|
|
79
|
+
* here, merged by key, because a read and a write of `view.frame` are two
|
|
80
|
+
* directions of a single property and `HostMember` states them as such. The
|
|
81
|
+
* first binding to claim a key wins; a later one with different text for the
|
|
82
|
+
* same carrier and member would be the package disagreeing with itself, and
|
|
83
|
+
* silently overwriting would hide that.
|
|
84
|
+
*/
|
|
85
|
+
/**
|
|
86
|
+
* A class object's own members, added under the carrier its instances use.
|
|
87
|
+
*
|
|
88
|
+
* `NSColor.clearColor` is a message to the class and `color.blendedColorWith`
|
|
89
|
+
* is a message to an object, but the declaration file names the class and the
|
|
90
|
+
* instance type with one identifier, so `nativeTypes` maps that one name to one
|
|
91
|
+
* C++ wrapper and both member sets are reached under one key.
|
|
92
|
+
*
|
|
93
|
+
* That is safe only while no class states a static and an instance member of
|
|
94
|
+
* the same name -- measured: zero collisions across all 58 Apple statics. It is
|
|
95
|
+
* not safe by construction, and the failure would be silent: the wrong template
|
|
96
|
+
* renders and clang accepts it, because both spell a valid message send. So the
|
|
97
|
+
* invariant is enforced rather than assumed. A collision means the packages now
|
|
98
|
+
* state something this key space cannot hold, and the fix is upstream of here.
|
|
99
|
+
*/
|
|
100
|
+
const addNamespaceRows = (rows, shims) => {
|
|
101
|
+
const carriers = appleNativeTypes();
|
|
102
|
+
for (const [className, members] of Object.entries(shims.nativeNamespaceMethods ?? {})) {
|
|
103
|
+
const carrier = carriers.get(className);
|
|
104
|
+
// A class the type table does not carry has no key to file its statics
|
|
105
|
+
// under, and inventing one would claim a member of a protocol nothing
|
|
106
|
+
// binds. Skipping is the honest answer: no claim, so no drift.
|
|
107
|
+
if (carrier === undefined)
|
|
108
|
+
continue;
|
|
109
|
+
for (const [name, member] of Object.entries(members)) {
|
|
110
|
+
const emit = member.emit;
|
|
111
|
+
if (emit === undefined || emit.length === 0)
|
|
112
|
+
continue;
|
|
113
|
+
const key = `${carrier}.${name}`;
|
|
114
|
+
if (rows.has(key)) {
|
|
115
|
+
throw new Error(`apple host members: "${key}" is stated both as a member of ${className} instances and as a member of the ` +
|
|
116
|
+
`${className} class object; one key cannot render both, and choosing either silently renders the wrong message send`);
|
|
117
|
+
}
|
|
118
|
+
rows.set(key, { kind: 'method', emit, arity: templateArity(emit) });
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
};
|
|
122
|
+
export const appleHostMembers = () => {
|
|
123
|
+
const shims = appleMemberTables();
|
|
124
|
+
if (!shims)
|
|
125
|
+
return new Map();
|
|
126
|
+
const rows = new Map();
|
|
127
|
+
addRows(rows, shims.nativeMemberMethods, 'declared', (emit, existing) => existing ? null : { kind: 'method', emit, arity: templateArity(emit) });
|
|
128
|
+
addRows(rows, shims.nativeMemberPropertyGetters, 'none', (emit, existing) => existing?.kind === 'property' ? (existing.emit === null ? { ...existing, emit } : null) : { kind: 'property', emit, store: null });
|
|
129
|
+
addRows(rows, shims.nativeMemberPropertySetters, 'value', (emit, existing) => existing?.kind === 'property'
|
|
130
|
+
? existing.store === null
|
|
131
|
+
? { ...existing, store: emit }
|
|
132
|
+
: null
|
|
133
|
+
: existing
|
|
134
|
+
? null
|
|
135
|
+
: { kind: 'property', emit: null, store: emit });
|
|
136
|
+
// Last, so the collision guard above sees every instance member already
|
|
137
|
+
// filed: a static added first would be the thing an instance member
|
|
138
|
+
// overwrote, and the overwrite is exactly what must not happen quietly.
|
|
139
|
+
addNamespaceRows(rows, shims);
|
|
140
|
+
return rows;
|
|
141
|
+
};
|
|
142
|
+
/**
|
|
143
|
+
* The metadata classes, indexed by the C++ wrapper each one's values carry.
|
|
144
|
+
*
|
|
145
|
+
* The metadata keys a class by `Framework.Class`, which is the spelling
|
|
146
|
+
* `extends` uses and so the one the chain walk below follows; the carrier is
|
|
147
|
+
* what every other table here is keyed by. Both indexes come from the same
|
|
148
|
+
* rows, so this is the metadata's own `wrapper` field read backwards rather
|
|
149
|
+
* than a second naming rule that could disagree with it.
|
|
150
|
+
*/
|
|
151
|
+
let byCarrier = null;
|
|
152
|
+
const carrierIndex = () => {
|
|
153
|
+
if (byCarrier)
|
|
154
|
+
return byCarrier;
|
|
155
|
+
const index = new Map();
|
|
156
|
+
for (const [key, entry] of Object.entries(appleBridgeMetadata().classes ?? {})) {
|
|
157
|
+
if (typeof entry.wrapper === 'string' && entry.wrapper.length > 0)
|
|
158
|
+
index.set(entry.wrapper, key);
|
|
159
|
+
}
|
|
160
|
+
byCarrier = index;
|
|
161
|
+
return index;
|
|
162
|
+
};
|
|
163
|
+
/**
|
|
164
|
+
* The parameters a class declares for one of its methods.
|
|
165
|
+
*
|
|
166
|
+
* Walked up the chain the class extends, because a method is declared once, on
|
|
167
|
+
* the class that introduces it, while the member tables list every receiver
|
|
168
|
+
* that inherits it -- so "this carrier accepts `setTitle`" and "this class
|
|
169
|
+
* declares `setTitle`" are answered by two different rows, and only the second
|
|
170
|
+
* one carries the parameter list.
|
|
171
|
+
*
|
|
172
|
+
* `null` when nothing in the chain declares the method, which is a real answer
|
|
173
|
+
* and not an empty parameter list: a method with no parameters states `[]`.
|
|
174
|
+
*/
|
|
175
|
+
export const appleMethodParameters = (carrier, method) => {
|
|
176
|
+
const classes = appleBridgeMetadata().classes ?? {};
|
|
177
|
+
let key = carrierIndex().get(carrier);
|
|
178
|
+
const seen = new Set();
|
|
179
|
+
while (key !== undefined && !seen.has(key)) {
|
|
180
|
+
seen.add(key);
|
|
181
|
+
const entry = classes[key];
|
|
182
|
+
if (entry === undefined)
|
|
183
|
+
return null;
|
|
184
|
+
const declared = entry.methods?.[method];
|
|
185
|
+
if (declared !== undefined)
|
|
186
|
+
return declared.parameters ?? [];
|
|
187
|
+
key = entry.extends;
|
|
188
|
+
}
|
|
189
|
+
return null;
|
|
190
|
+
};
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
import { noHostNamespaces } from '../../targets/cpp/host/host-members.js';
|
|
2
|
+
import { appleNativeTypes, writeAppleBridgeArtifacts } from './host.js';
|
|
3
|
+
import { appleHostConstructors, appleHostFunctions, appleHostFunctionsByDeclaration, appleNativeBases, appleNativeBridgeHeader, appleNativeConstants, appleNativeIncludes } from './constructors.js';
|
|
4
|
+
import { appleHostMembers } from './members.js';
|
|
5
|
+
import { appleJsxTransform } from './jsx.js';
|
|
6
|
+
/**
|
|
7
|
+
* Apple's native frameworks, as a plugin.
|
|
8
|
+
*
|
|
9
|
+
* Data only, for now, and deliberately so. `AppKit`, `Foundation` and their
|
|
10
|
+
* siblings are a *host's* description of itself: nothing about `NSView` or
|
|
11
|
+
* `NSTextField` is TypeScript, so a generic TypeScript-to-C++ compiler that
|
|
12
|
+
* knew how to render one would be asserting something about the program's
|
|
13
|
+
* environment that nothing in the program says. What it needs to be told is
|
|
14
|
+
* which declared type names that host owns and what its runtime carries their
|
|
15
|
+
* values in -- and that is exactly `nativeTypes`, which the Apple packages
|
|
16
|
+
* already generate for v1's build.
|
|
17
|
+
*
|
|
18
|
+
* No producer and no lowering: unlike gea, this host adds no meaning to a
|
|
19
|
+
* language form. An AppKit program is ordinary TypeScript calling methods on
|
|
20
|
+
* host objects, and the core compiles it as such the moment it knows those
|
|
21
|
+
* objects are host objects.
|
|
22
|
+
*
|
|
23
|
+
* The claim and the spelling travel together, as they must: `nativeTypes` is
|
|
24
|
+
* what makes a protocol claimable and `hostMembers` is what renders a member of
|
|
25
|
+
* it, and a plugin that stated one without the other would certify a program at
|
|
26
|
+
* preflight that emission then refuses by name.
|
|
27
|
+
*/
|
|
28
|
+
/**
|
|
29
|
+
* The `writeArtifacts` half of this plugin, present only when the build stated
|
|
30
|
+
* where its Apple metadata is.
|
|
31
|
+
*
|
|
32
|
+
* Spread into the instance rather than defined on it so a non-Apple build has
|
|
33
|
+
* no such property at all, which is the same thing `PluginInstance` says an
|
|
34
|
+
* absent hook means -- rather than a function that is installed and then
|
|
35
|
+
* decides at write time to do nothing, which is a second place for the
|
|
36
|
+
* condition to be stated and to drift from the first.
|
|
37
|
+
*/
|
|
38
|
+
const appleMetadataPath = (options) => {
|
|
39
|
+
const path = options.get('apple.metadata');
|
|
40
|
+
return path === undefined || path.length === 0 ? null : path;
|
|
41
|
+
};
|
|
42
|
+
const appleBridgeArtifacts = (options) => {
|
|
43
|
+
const metadataPath = appleMetadataPath(options);
|
|
44
|
+
if (metadataPath === null)
|
|
45
|
+
return {};
|
|
46
|
+
return { writeArtifacts: (outDir) => writeAppleBridgeArtifacts(metadataPath, outDir) };
|
|
47
|
+
};
|
|
48
|
+
export const applePlugin = {
|
|
49
|
+
name: 'apple-native',
|
|
50
|
+
instantiate: (options) => ({
|
|
51
|
+
producers: () => [],
|
|
52
|
+
lower: () => false,
|
|
53
|
+
// The bridge the emitted unit includes and the target links -- see
|
|
54
|
+
// `writeAppleBridgeArtifacts`. Installed only for a build that stated
|
|
55
|
+
// `apple.metadata`, which is exactly the build whose unit includes it:
|
|
56
|
+
// this plugin is installed unconditionally (its tables are data, and a
|
|
57
|
+
// program that names no Apple type reads none of them), so writing a
|
|
58
|
+
// bridge on the strength of installation alone would drop an AppKit header
|
|
59
|
+
// into every web and embedded app's output directory.
|
|
60
|
+
...appleBridgeArtifacts(options),
|
|
61
|
+
// The one thing this host cannot state as data: JSX over its classes has to
|
|
62
|
+
// become construction before the checker runs, because the checker cannot
|
|
63
|
+
// type an element as its tag. See `jsx.ts` for what was measured.
|
|
64
|
+
transformSource: appleJsxTransform,
|
|
65
|
+
capabilities: {
|
|
66
|
+
runtimeHelpers: new Set(),
|
|
67
|
+
propertyRecipes: new Set(),
|
|
68
|
+
// Every protocol this plugin claims is derived from the carriers in
|
|
69
|
+
// `nativeTypes` (`compiler.ts` unions `${carrier}@1` in), so there is
|
|
70
|
+
// nothing to state twice here. A name absent from that table is not
|
|
71
|
+
// host-owned, and no protocol is claimed for it.
|
|
72
|
+
nativeProtocols: new Set(),
|
|
73
|
+
nativeTypes: appleNativeTypes(),
|
|
74
|
+
declarationModules: new Set([
|
|
75
|
+
process.env.GEATSC2_APPLE_SDK ?? '@geastack/apple',
|
|
76
|
+
`${process.env.GEATSC2_APPLE_SDK ?? '@geastack/apple'}/*`
|
|
77
|
+
]),
|
|
78
|
+
// Apple's classes are ambient host declarations to begin with -- there
|
|
79
|
+
// is no OTHER, wrongly-stated ambient name for one of them to replace,
|
|
80
|
+
// which is the gap `ambientTypeRealizations` closes. See its own
|
|
81
|
+
// doc comment (`plugins/model.ts`) and `webgl/plugin.ts` for the host
|
|
82
|
+
// that actually needs one.
|
|
83
|
+
ambientTypeRealizations: new Map(),
|
|
84
|
+
hostMembers: appleHostMembers(),
|
|
85
|
+
// `AppleMemberBinding` (host.ts) states no `returnType` at all -- unlike
|
|
86
|
+
// gea's `GeaMemberBinding`, this plugin's member-method table carries no
|
|
87
|
+
// note of a real C++ return diverging from the checker's declared one --
|
|
88
|
+
// so there is nothing here for `emitCall` to force void from.
|
|
89
|
+
hostMemberVoidResults: new Set(),
|
|
90
|
+
hostConstructors: appleHostConstructors(),
|
|
91
|
+
hostFunctions: appleHostFunctions(),
|
|
92
|
+
// UIKit and AppKit each declare an `installRootView`, and the flat table
|
|
93
|
+
// above can hold only one. See `appleHostFunctionsByDeclaration`.
|
|
94
|
+
hostFunctionsByDeclaration: appleHostFunctionsByDeclaration(),
|
|
95
|
+
// The Apple packages state no namespace globals: every AppKit entry
|
|
96
|
+
// point this compiler reaches is a member of a class or a free function,
|
|
97
|
+
// and a class object is already carried by `nativeTypes`.
|
|
98
|
+
hostNamespaces: noHostNamespaces,
|
|
99
|
+
// No namespace roots claimed at all, so no per-file collision to state either.
|
|
100
|
+
hostNamespaceRootsByDeclaration: new Map(),
|
|
101
|
+
// No namespace roots, so nothing to state a type for either.
|
|
102
|
+
hostNamespaceRootTypes: new Map(),
|
|
103
|
+
// Every AppKit singleton this compiler reaches (`NSApplication.shared`)
|
|
104
|
+
// is a static member of a class object, which `host-class` already
|
|
105
|
+
// renders; no global name on this host is one.
|
|
106
|
+
hostSingletons: new Set(),
|
|
107
|
+
// No singletons claimed, so no per-file collision to state either.
|
|
108
|
+
hostSingletonsByDeclaration: new Map(),
|
|
109
|
+
// AppKit describes its own classes and says nothing about the web
|
|
110
|
+
// platform's globals; a program that also names one is describing a
|
|
111
|
+
// second host, and that host is the one that should answer for it.
|
|
112
|
+
absentGlobals: new Set(),
|
|
113
|
+
// Apple's declarations arrive through `nativeIncludes` -- one header per
|
|
114
|
+
// carrier -- rather than per spelling.
|
|
115
|
+
hostPreambles: new Map(),
|
|
116
|
+
nativeBases: appleNativeBases(),
|
|
117
|
+
nativeIncludes: appleNativeIncludes(),
|
|
118
|
+
nativeConstants: appleNativeConstants(),
|
|
119
|
+
// `embeddedHostConstants` (host.ts) carries no per-declaration-file
|
|
120
|
+
// variant the way `embeddedHostFunctionFrameworkVariants` does for
|
|
121
|
+
// functions -- the package states one ambient value per constant name,
|
|
122
|
+
// not one per framework -- so there is no collision to state here.
|
|
123
|
+
hostConstantsByDeclaration: new Map(),
|
|
124
|
+
// AppKit asks nothing of a generated unit: the target's own `macos_main.mm`
|
|
125
|
+
// defines every host function this plugin names, and the bridge is written
|
|
126
|
+
// by the plugin package next to the unit rather than into it.
|
|
127
|
+
// The unit is compiled against the bridge exactly when the bridge is
|
|
128
|
+
// written beside it, so this reads the same option `appleBridgeArtifacts`
|
|
129
|
+
// does, through the same helper: the two are one condition and a build
|
|
130
|
+
// that got one without the other would either include a header nothing
|
|
131
|
+
// wrote or write one nothing includes. Not derived from which carriers
|
|
132
|
+
// the plan selected -- an apple-native app whose program happens to name
|
|
133
|
+
// no Apple type is still an apple-native app, and the target decides that
|
|
134
|
+
// by reading this line out of `generated_support.hpp`.
|
|
135
|
+
generatedSupportIncludes: appleMetadataPath(options) === null ? [] : [appleNativeBridgeHeader],
|
|
136
|
+
runtimeDefinitions: [],
|
|
137
|
+
// AppKit/UIKit have no fragment node: a view is added to a superview, and
|
|
138
|
+
// there is nothing that splices its own children into whatever it is
|
|
139
|
+
// added to. So this host states none, and `<>...</>` is refused by name
|
|
140
|
+
// rather than rendered as some other container that would change the
|
|
141
|
+
// view hierarchy the program asked for.
|
|
142
|
+
elementFragment: null,
|
|
143
|
+
elementTextTags: [],
|
|
144
|
+
// Nothing this host lowers calls a class member the program does not name.
|
|
145
|
+
reachedMemberKeys: new Set(),
|
|
146
|
+
// AppKit's own state is not reactive in this sense: a control is read and
|
|
147
|
+
// written through the host, and nothing in the apple package declares a
|
|
148
|
+
// base whose fields re-render anything. Stating no fields is the truthful
|
|
149
|
+
// answer, not a gap -- an empty table is what makes a class here keep
|
|
150
|
+
// plain members.
|
|
151
|
+
reactiveClassFields: new Map(),
|
|
152
|
+
nativeReactiveCell: null,
|
|
153
|
+
nativeReactiveCellPreamble: []
|
|
154
|
+
}
|
|
155
|
+
})
|
|
156
|
+
};
|