@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
package/dist/cli-emit.js
ADDED
|
@@ -0,0 +1,398 @@
|
|
|
1
|
+
import { existsSync, mkdirSync, readFileSync, rmSync, writeFileSync } from 'node:fs';
|
|
2
|
+
import { basename, dirname, join, resolve } from 'node:path';
|
|
3
|
+
import { fileURLToPath } from 'node:url';
|
|
4
|
+
import { compile } from './compiler.js';
|
|
5
|
+
import { loadCliPlugins } from './plugins/load.js';
|
|
6
|
+
import { readModuleGraph } from './cli-module-graph.js';
|
|
7
|
+
import { findProjectFile } from './semantics/program.js';
|
|
8
|
+
/**
|
|
9
|
+
* Options that carry a value this compiler does not model, and options that
|
|
10
|
+
* are v1 build plumbing with no meaning here.
|
|
11
|
+
*
|
|
12
|
+
* `unmodeled` options change the program and must be reported. Explicit
|
|
13
|
+
* plugins are loaded separately; their options belong to the plugin API.
|
|
14
|
+
*/
|
|
15
|
+
const plumbingWithValue = new Set(['--apple-platform']);
|
|
16
|
+
const unmodeledWithValue = new Set(['--cpp-board', '--cxx-standard']);
|
|
17
|
+
const unmodeledFlags = new Set(['--allow-any']);
|
|
18
|
+
const parseEmitArguments = (argv) => {
|
|
19
|
+
const positional = [];
|
|
20
|
+
const unhonored = [];
|
|
21
|
+
let outDir = null;
|
|
22
|
+
let entrySymbol = null;
|
|
23
|
+
let target = 'cpp';
|
|
24
|
+
let entry = null;
|
|
25
|
+
let stage = 'hybrid';
|
|
26
|
+
let projectFileName = null;
|
|
27
|
+
let dynamicFallback = false;
|
|
28
|
+
let closedScriptScope = false;
|
|
29
|
+
let isolateSymbols = false;
|
|
30
|
+
let translationUnits = 'single';
|
|
31
|
+
// Carried, never interpreted: an option here belongs to whichever library
|
|
32
|
+
// its prefix names, and this command's job is to deliver it rather than to
|
|
33
|
+
// have an opinion about it. `--plugin-option` used to be classified as build
|
|
34
|
+
// plumbing and dropped, which silently discarded `gea.cpp-prelude` -- the
|
|
35
|
+
// compiled stylesheet -- from every app this pipeline built.
|
|
36
|
+
const plugins = [];
|
|
37
|
+
const pluginOptions = new Map();
|
|
38
|
+
for (let index = 0; index < argv.length; index += 1) {
|
|
39
|
+
const argument = argv[index];
|
|
40
|
+
if (argument === undefined)
|
|
41
|
+
continue;
|
|
42
|
+
if (argument === '--out-dir') {
|
|
43
|
+
outDir = argv[index + 1] ?? null;
|
|
44
|
+
index += 1;
|
|
45
|
+
}
|
|
46
|
+
else if (argument === '--entry-symbol') {
|
|
47
|
+
entrySymbol = argv[index + 1] ?? null;
|
|
48
|
+
index += 1;
|
|
49
|
+
}
|
|
50
|
+
else if (argument === '--target') {
|
|
51
|
+
target = argv[index + 1] ?? target;
|
|
52
|
+
index += 1;
|
|
53
|
+
}
|
|
54
|
+
else if (argument === '--entry') {
|
|
55
|
+
entry = argv[index + 1] ?? null;
|
|
56
|
+
index += 1;
|
|
57
|
+
}
|
|
58
|
+
else if (argument === '--module-graph-stage') {
|
|
59
|
+
stage = argv[index + 1] ?? stage;
|
|
60
|
+
index += 1;
|
|
61
|
+
}
|
|
62
|
+
else if (argument === '--dynamic-fallback') {
|
|
63
|
+
dynamicFallback = true;
|
|
64
|
+
}
|
|
65
|
+
else if (argument === '--closed-script-scope') {
|
|
66
|
+
closedScriptScope = true;
|
|
67
|
+
}
|
|
68
|
+
else if (argument === '--isolate-symbols') {
|
|
69
|
+
isolateSymbols = true;
|
|
70
|
+
}
|
|
71
|
+
else if (argument === '--translation-units') {
|
|
72
|
+
const value = argv[index + 1] ?? '';
|
|
73
|
+
if (value !== 'single' && value !== 'per-file' && value !== 'balanced')
|
|
74
|
+
return `compile: --translation-units takes "single", "per-file", or "balanced", not "${value}"`;
|
|
75
|
+
translationUnits = value;
|
|
76
|
+
index += 1;
|
|
77
|
+
}
|
|
78
|
+
else if (argument === '--project') {
|
|
79
|
+
projectFileName = argv[index + 1] ?? null;
|
|
80
|
+
index += 1;
|
|
81
|
+
}
|
|
82
|
+
else if (argument === '--plugin') {
|
|
83
|
+
const specifier = argv[index + 1];
|
|
84
|
+
if (!specifier || specifier.startsWith('--'))
|
|
85
|
+
return 'compile: --plugin requires a module path or specifier';
|
|
86
|
+
plugins.push(specifier);
|
|
87
|
+
index += 1;
|
|
88
|
+
}
|
|
89
|
+
else if (argument === '--plugin-option') {
|
|
90
|
+
const pair = argv[index + 1] ?? '';
|
|
91
|
+
const split = pair.indexOf('=');
|
|
92
|
+
if (split <= 0 || pair.startsWith('--'))
|
|
93
|
+
return 'compile: --plugin-option requires key=value';
|
|
94
|
+
pluginOptions.set(pair.slice(0, split), pair.slice(split + 1));
|
|
95
|
+
index += 1;
|
|
96
|
+
}
|
|
97
|
+
else if (plumbingWithValue.has(argument)) {
|
|
98
|
+
index += 1;
|
|
99
|
+
}
|
|
100
|
+
else if (unmodeledWithValue.has(argument)) {
|
|
101
|
+
unhonored.push(`${argument} ${argv[index + 1] ?? ''}`.trim());
|
|
102
|
+
index += 1;
|
|
103
|
+
}
|
|
104
|
+
else if (unmodeledFlags.has(argument)) {
|
|
105
|
+
unhonored.push(argument);
|
|
106
|
+
}
|
|
107
|
+
else if (!argument.startsWith('--')) {
|
|
108
|
+
positional.push(argument);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
const input = positional[0];
|
|
112
|
+
if (input === undefined)
|
|
113
|
+
return 'compile: no input file';
|
|
114
|
+
if (outDir === null)
|
|
115
|
+
return 'compile: --out-dir is required';
|
|
116
|
+
return {
|
|
117
|
+
dynamicFallback,
|
|
118
|
+
closedScriptScope,
|
|
119
|
+
input,
|
|
120
|
+
outDir,
|
|
121
|
+
entrySymbol,
|
|
122
|
+
target,
|
|
123
|
+
entry,
|
|
124
|
+
stage,
|
|
125
|
+
plugins,
|
|
126
|
+
pluginOptions,
|
|
127
|
+
projectFileName,
|
|
128
|
+
isolateSymbols,
|
|
129
|
+
translationUnits,
|
|
130
|
+
unhonored
|
|
131
|
+
};
|
|
132
|
+
};
|
|
133
|
+
/**
|
|
134
|
+
* The stem the emitted files are named from.
|
|
135
|
+
*
|
|
136
|
+
* Named after the input rather than after the entry symbol: the caller already
|
|
137
|
+
* knows the bundle it handed over, and a build that produced `gea-app.cpp` for
|
|
138
|
+
* every app would collide the moment two of them share an `--out-dir`, which
|
|
139
|
+
* is exactly what a resident multi-app build does. Under `single` the one unit
|
|
140
|
+
* is `<stem>.cpp`; under `per-file` the same stem prefixes the header, the
|
|
141
|
+
* program unit and every module unit, so one app's files sort together.
|
|
142
|
+
*/
|
|
143
|
+
const unitStemOf = (input) => {
|
|
144
|
+
const stem = basename(input).replace(/\.[cm]?[jt]sx?$/, '');
|
|
145
|
+
return stem.length > 0 ? stem : 'unit';
|
|
146
|
+
};
|
|
147
|
+
/**
|
|
148
|
+
* Runs the pipeline and writes what it produced.
|
|
149
|
+
*
|
|
150
|
+
* The certificate gate is not re-litigated here: `compile` refuses to lower
|
|
151
|
+
* anything without one, so `source === null` is already the complete answer
|
|
152
|
+
* that this program is not yet compilable, and this command's job is to report
|
|
153
|
+
* that with the same detail the diagnostic CLI would rather than to write a
|
|
154
|
+
* partial unit the caller would try to build.
|
|
155
|
+
*/
|
|
156
|
+
export const runEmit = async (argv, moduleGraph = false) => {
|
|
157
|
+
const parsed = parseEmitArguments(argv);
|
|
158
|
+
if (typeof parsed === 'string') {
|
|
159
|
+
process.stderr.write(`${parsed}\n`);
|
|
160
|
+
return 1;
|
|
161
|
+
}
|
|
162
|
+
if (parsed.target !== 'cpp') {
|
|
163
|
+
process.stderr.write(`compile: --target ${parsed.target} is not a target this compiler emits; only "cpp" is built\n`);
|
|
164
|
+
return 1;
|
|
165
|
+
}
|
|
166
|
+
for (const option of parsed.unhonored) {
|
|
167
|
+
process.stderr.write(`compile: option not honored by this compiler: ${option}\n`);
|
|
168
|
+
}
|
|
169
|
+
const plugins = await loadCliPlugins(parsed.plugins);
|
|
170
|
+
if (moduleGraph)
|
|
171
|
+
return runModuleGraph(parsed, plugins);
|
|
172
|
+
const input = resolve(parsed.input);
|
|
173
|
+
// A generated bundle is not a member of any project.
|
|
174
|
+
//
|
|
175
|
+
// It is written INTO a build directory that usually sits inside one, so
|
|
176
|
+
// walking up for a `tsconfig.json` finds the app's -- and then applies that
|
|
177
|
+
// project's `include`, `paths` and `lib` to a file the app never declared,
|
|
178
|
+
// which is a different program than the one the caller asked to compile. A
|
|
179
|
+
// bundle carries everything it needs (its own `/// <reference>` to the
|
|
180
|
+
// generated type hints), so the honest reading is that it has no project,
|
|
181
|
+
// and its types come from JSDoc.
|
|
182
|
+
const bundled = /\.[cm]?js$/.test(input);
|
|
183
|
+
// A named project wins over discovery, and over the bundle rule above: a
|
|
184
|
+
// caller that states which project an input belongs to has answered the
|
|
185
|
+
// question this command would otherwise guess at.
|
|
186
|
+
const projectFileName = parsed.projectFileName ?? (bundled ? null : findProjectFile(input.slice(0, Math.max(0, input.lastIndexOf('/'))) || '.'));
|
|
187
|
+
const result = compile({
|
|
188
|
+
rootFileNames: [input],
|
|
189
|
+
projectFileName,
|
|
190
|
+
javaScriptSources: bundled,
|
|
191
|
+
dynamicFallback: parsed.dynamicFallback,
|
|
192
|
+
...(parsed.closedScriptScope ? { closedScriptScope: true } : {}),
|
|
193
|
+
plugins,
|
|
194
|
+
pluginOptions: parsed.pluginOptions,
|
|
195
|
+
isolateSymbols: parsed.isolateSymbols,
|
|
196
|
+
translationUnits: parsed.translationUnits,
|
|
197
|
+
unitBaseName: unitStemOf(parsed.input),
|
|
198
|
+
...(parsed.entrySymbol === null ? {} : { entrySymbol: parsed.entrySymbol })
|
|
199
|
+
});
|
|
200
|
+
return report(result, parsed.outDir);
|
|
201
|
+
};
|
|
202
|
+
/**
|
|
203
|
+
* `compile-module-graph`: the path every real application build takes.
|
|
204
|
+
*
|
|
205
|
+
* The manifest names the modules and carries their text; the entry the pipeline
|
|
206
|
+
* states is the root. The project is the one nearest that entry -- the staged
|
|
207
|
+
* `tsconfig.json` the pipeline writes beside it, which is what gives the
|
|
208
|
+
* program its `jsx` setting and its lib. JSDoc typing is forced on for the same
|
|
209
|
+
* reason v1 forces it here and states in capitals: this path has no
|
|
210
|
+
* tsc-baseline to match, and a module whose types live in JSDoc silently
|
|
211
|
+
* becomes an untyped, boxed one if `checkJs` is off.
|
|
212
|
+
*/
|
|
213
|
+
const runModuleGraph = (parsed, plugins) => {
|
|
214
|
+
const graph = readModuleGraph(parsed.input, parsed.stage, parsed.entry);
|
|
215
|
+
const result = compile({
|
|
216
|
+
rootFileNames: [graph.entry],
|
|
217
|
+
projectFileName: parsed.projectFileName ?? findProjectFile(dirname(graph.entry)),
|
|
218
|
+
javaScriptSources: true,
|
|
219
|
+
dynamicFallback: parsed.dynamicFallback,
|
|
220
|
+
plugins,
|
|
221
|
+
pluginOptions: parsed.pluginOptions,
|
|
222
|
+
sourceOverlay: graph.overlay,
|
|
223
|
+
moduleResolution: graph.imports,
|
|
224
|
+
// The graph is the module set; the staged project beside the entry is not.
|
|
225
|
+
statedModuleSet: true,
|
|
226
|
+
...(parsed.closedScriptScope ? { closedScriptScope: true } : {}),
|
|
227
|
+
isolateSymbols: parsed.isolateSymbols,
|
|
228
|
+
translationUnits: parsed.translationUnits,
|
|
229
|
+
unitBaseName: unitStemOf(graph.entry),
|
|
230
|
+
...(parsed.entrySymbol === null ? {} : { entrySymbol: parsed.entrySymbol })
|
|
231
|
+
});
|
|
232
|
+
return report(result, parsed.outDir);
|
|
233
|
+
};
|
|
234
|
+
/** This compiler's own installation, from the module doing the asking rather than the caller's cwd. */
|
|
235
|
+
const compilerRoot = dirname(dirname(fileURLToPath(import.meta.url)));
|
|
236
|
+
/**
|
|
237
|
+
* Write a file only when its content changes.
|
|
238
|
+
*
|
|
239
|
+
* The C++ build decides what to recompile by mtime -- its own objects against
|
|
240
|
+
* the units, and through depfiles against every header a unit includes. An
|
|
241
|
+
* emit that rewrote every file made every generation a full rebuild: 20
|
|
242
|
+
* unchanged units and both precompiled headers were rebuilt after one source
|
|
243
|
+
* was touched, because the header and `gea_runtime.h` were newer than every
|
|
244
|
+
* object. The emitted text is deterministic, so identical content is the same
|
|
245
|
+
* fact and leaves the file, and its mtime, alone.
|
|
246
|
+
*/
|
|
247
|
+
const writeIfChanged = (path, content) => {
|
|
248
|
+
if (existsSync(path) && readFileSync(path, 'utf8') === content)
|
|
249
|
+
return;
|
|
250
|
+
writeFileSync(path, content);
|
|
251
|
+
};
|
|
252
|
+
/**
|
|
253
|
+
* `generated_support.hpp` — the second artifact the calling pipeline reads back.
|
|
254
|
+
*
|
|
255
|
+
* The contract is not only `geatsc-sources.txt`. A target derives an app's
|
|
256
|
+
* Apple-native ownership from the *transformed compiler output* rather than
|
|
257
|
+
* from the metadata it fed in, and the file it reads to do that is this one:
|
|
258
|
+
* `finalize-apple-native-output.mjs` fails closed when it is missing or empty,
|
|
259
|
+
* so a build driving this compiler stopped at "generation did not produce a
|
|
260
|
+
* non-empty generated_support.hpp" no matter how good the emitted unit was.
|
|
261
|
+
*
|
|
262
|
+
* v1 writes a header full of shared declarations because it splits a program
|
|
263
|
+
* across many translation units that each need the others' signatures. This
|
|
264
|
+
* compiler's `single` layout emits ONE unit, so there is nothing for a second
|
|
265
|
+
* unit to share, and its `per-file` layout writes the declarations its units
|
|
266
|
+
* share into ITS OWN header (`<stem>.hpp`, `translation-unit.ts`) that every
|
|
267
|
+
* unit includes by name. Either way the honest content here is the same
|
|
268
|
+
* statement of what a generated unit is compiled against that the unit itself
|
|
269
|
+
* makes, and nothing more. It is a declaration of ownership, not a substitute
|
|
270
|
+
* for the unit's own preamble.
|
|
271
|
+
*
|
|
272
|
+
* Which host headers belong in it is not this file's question and it no longer
|
|
273
|
+
* answers it. `gea_runtime.h` is stated unconditionally because every emitted
|
|
274
|
+
* unit is compiled against it; everything else comes from
|
|
275
|
+
* `result.generatedSupportIncludes`, which each plugin states for its own host
|
|
276
|
+
* on its own activation condition. This function used to hold one host's
|
|
277
|
+
* include spelling and decide the question by substring-searching the rendered
|
|
278
|
+
* C++ for it -- a source-shaped authority over generated text, and a host name
|
|
279
|
+
* in a core code path.
|
|
280
|
+
*/
|
|
281
|
+
const writeGeneratedSupport = (outDir, hostHeaders) => {
|
|
282
|
+
const lines = [
|
|
283
|
+
'// @geastack/compiler: what a generated translation unit is compiled against.',
|
|
284
|
+
'// This states ownership, not declarations shared between units: a per-file',
|
|
285
|
+
'// layout carries those in its own <stem>.hpp, which each unit includes.',
|
|
286
|
+
'#pragma once',
|
|
287
|
+
'#include "gea_runtime.h"',
|
|
288
|
+
...hostHeaders.map((header) => `#include "${header}"`)
|
|
289
|
+
];
|
|
290
|
+
writeIfChanged(join(outDir, 'generated_support.hpp'), `${lines.join('\n')}\n`);
|
|
291
|
+
};
|
|
292
|
+
const report = (result, outDirName) => {
|
|
293
|
+
// Which file each `fN` identity segment names. A refusal cites raw ids
|
|
294
|
+
// (`decl|f9|179`), and on the module-graph path -- the one every real
|
|
295
|
+
// application build takes -- there is no other way to read one back to a
|
|
296
|
+
// source file, so tracking a refusal down means guessing at an alphabetical
|
|
297
|
+
// sort of the whole program including its lib files. An instrument like
|
|
298
|
+
// `GEA_STAGE_TIMING` and `GEA_DUMP_STRUCTURAL_TYPES`, not a flag.
|
|
299
|
+
if (process.env['GEA_DUMP_FILE_IDS']) {
|
|
300
|
+
for (const [identity, fileName] of result.sourceFileNames)
|
|
301
|
+
process.stderr.write(`[FILE] ${identity}\t${fileName}\n`);
|
|
302
|
+
}
|
|
303
|
+
if (result.units.length === 0) {
|
|
304
|
+
const certifyRefusals = result.refusals.filter((refusal) => refusal.stage === 'certify');
|
|
305
|
+
process.stderr.write(result.certificate === null
|
|
306
|
+
? `compile: no certificate; ${certifyRefusals.length} capability refusal(s), ${result.diagnostics.diagnostics.length} diagnostic(s)\n`
|
|
307
|
+
: `compile: certified but nothing emitted; ${result.loweringBlockers.length} lowering blocker(s), ` +
|
|
308
|
+
`${result.emissionRefusals.length} emission refusal(s)\n`);
|
|
309
|
+
for (const blocker of result.loweringBlockers)
|
|
310
|
+
process.stderr.write(` lowering ${blocker.owner}: ${blocker.reason}\n`);
|
|
311
|
+
for (const refusal of certifyRefusals.slice(0, 40))
|
|
312
|
+
process.stderr.write(` certify ${refusal.owner}: ${refusal.key}: ${refusal.reason}\n`);
|
|
313
|
+
if (certifyRefusals.length > 40)
|
|
314
|
+
process.stderr.write(` ... and ${certifyRefusals.length - 40} more capability refusal(s)\n`);
|
|
315
|
+
for (const refusal of result.emissionRefusals)
|
|
316
|
+
process.stderr.write(` emission ${refusal.owner}: ${refusal.reason}\n`);
|
|
317
|
+
// The location, when there is one. A build's log is where someone finds
|
|
318
|
+
// out WHICH file did not compile, and a component id alone cannot answer
|
|
319
|
+
// that -- it names a component of the graph, not a place in the program.
|
|
320
|
+
const where = (diagnostic) => diagnostic.location ? `${diagnostic.location.file}:${diagnostic.location.line}:${diagnostic.location.column}` : diagnostic.component;
|
|
321
|
+
const roots = result.diagnostics.diagnostics.filter((diagnostic) => diagnostic.severity === 'root');
|
|
322
|
+
for (const diagnostic of roots)
|
|
323
|
+
process.stderr.write(` ${where(diagnostic)}: ${diagnostic.message}\n`);
|
|
324
|
+
// A root diagnostic is the one worth reading, so it is the only one printed
|
|
325
|
+
// WHEN THERE IS ONE. When there is not, printing nothing reported nothing:
|
|
326
|
+
// `certificate` is withheld whenever `diagnostics` is non-empty at all, so
|
|
327
|
+
// a program blocked solely by derived or unsupported diagnostics failed
|
|
328
|
+
// with an empty log, and "no certificate; 0 capability refusal(s)" was the
|
|
329
|
+
// whole message -- which names neither a cause nor a file. Four apps sat
|
|
330
|
+
// behind that message with nothing to act on.
|
|
331
|
+
if (roots.length === 0) {
|
|
332
|
+
const rest = result.diagnostics.diagnostics;
|
|
333
|
+
for (const diagnostic of rest.slice(0, 20)) {
|
|
334
|
+
process.stderr.write(` ${diagnostic.severity} ${where(diagnostic)}: ${diagnostic.message}\n`);
|
|
335
|
+
}
|
|
336
|
+
if (rest.length > 20)
|
|
337
|
+
process.stderr.write(` ... and ${rest.length - 20} more diagnostic(s)\n`);
|
|
338
|
+
if (rest.length === 0 && certifyRefusals.length === 0) {
|
|
339
|
+
process.stderr.write(' (no diagnostics recorded -- the certificate was withheld for another reason)\n');
|
|
340
|
+
}
|
|
341
|
+
}
|
|
342
|
+
return 1;
|
|
343
|
+
}
|
|
344
|
+
if (result.dynamicFallback.enabled) {
|
|
345
|
+
process.stderr.write(`geatsc: C++ dynamic fallback selected for ${result.dynamicFallback.valueCount} value positions\n`);
|
|
346
|
+
}
|
|
347
|
+
const outDir = resolve(outDirName);
|
|
348
|
+
mkdirSync(outDir, { recursive: true });
|
|
349
|
+
// The emitted unit `#include`s this compiler's own runtime, so the runtime
|
|
350
|
+
// has to arrive with it. The caller compiles what is in `--out-dir` and knows
|
|
351
|
+
// nothing about where this compiler keeps its header -- and should not: which
|
|
352
|
+
// runtime a unit needs is the compiler's fact, stated by putting it there.
|
|
353
|
+
// Same placement `scripts/corpus.mjs` already uses to compile emitted units.
|
|
354
|
+
writeIfChanged(join(outDir, 'gea_runtime.h'), readFileSync(join(compilerRoot, 'src/targets/cpp/runtime/gea_runtime.h'), 'utf8'));
|
|
355
|
+
writeIfChanged(join(outDir, 'gea_dynamic_proxy.h'), readFileSync(join(compilerRoot, 'src/targets/cpp/runtime/gea_dynamic_proxy.h'), 'utf8'));
|
|
356
|
+
writeIfChanged(join(outDir, 'gea_eval.h'), readFileSync(join(compilerRoot, 'src/targets/cpp/runtime/gea_eval.h'), 'utf8'));
|
|
357
|
+
writeIfChanged(join(outDir, 'gea_native_class_prototype.h'), readFileSync(join(compilerRoot, 'src/targets/cpp/runtime/gea_native_class_prototype.h'), 'utf8'));
|
|
358
|
+
writeIfChanged(join(outDir, 'gea_runtime_builtins.cpp'), readFileSync(join(compilerRoot, 'src/targets/cpp/runtime/gea_runtime_builtins.cpp'), 'utf8'));
|
|
359
|
+
const written = result.units.map((unit) => ({ unit, path: join(outDir, unit.fileName) }));
|
|
360
|
+
for (const { unit, path } of written)
|
|
361
|
+
writeIfChanged(path, `${unit.source}\n`);
|
|
362
|
+
writeGeneratedSupport(outDir, result.generatedSupportIncludes);
|
|
363
|
+
// Whatever the installed hosts require beside the unit -- Apple's
|
|
364
|
+
// `gea/apple/native_bridge.{h,mm}` is the case. After the units, and only on
|
|
365
|
+
// the path that wrote them: an artifact sitting next to a build that emitted
|
|
366
|
+
// nothing is a stale file the next build reads as fresh, which is precisely
|
|
367
|
+
// the failure this hook was added to end.
|
|
368
|
+
for (const writeArtifacts of result.artifacts)
|
|
369
|
+
writeArtifacts(outDir);
|
|
370
|
+
// The list the calling script reads back: every unit to COMPILE, so the
|
|
371
|
+
// per-file layout's header is not on it -- a header is included, not built,
|
|
372
|
+
// and a build handed one as a source would compile it as a unit of its own.
|
|
373
|
+
// The `single` layout lists its one unit; the contract has always been a
|
|
374
|
+
// LIST for exactly this reason, so every caller that reads it keeps working
|
|
375
|
+
// when the layout changes.
|
|
376
|
+
const compiled = written.filter(({ unit }) => unit.role !== 'header' && unit.role !== 'runtime-header');
|
|
377
|
+
writeIfChanged(join(outDir, 'geatsc-sources.txt'), `${compiled.map(({ path }) => path).join('\n')}\n`);
|
|
378
|
+
// The headers every listed unit includes, when the layout has them, so a
|
|
379
|
+
// build can precompile each once -- the runtime layer first, the program's
|
|
380
|
+
// header chained on it -- and hand `-include-pch` to every unit instead of
|
|
381
|
+
// letting each re-parse both. Stated as a file of its own rather than
|
|
382
|
+
// inferred from the sources list, and removed when the layout has no header,
|
|
383
|
+
// because a stale one from an earlier per-file build would name headers the
|
|
384
|
+
// single unit never includes.
|
|
385
|
+
const header = written.find(({ unit }) => unit.role === 'header');
|
|
386
|
+
const runtimeHeader = written.find(({ unit }) => unit.role === 'runtime-header');
|
|
387
|
+
if (header && runtimeHeader)
|
|
388
|
+
writeIfChanged(join(outDir, 'geatsc-header.txt'), `program=${header.path}\nruntime=${runtimeHeader.path}\n`);
|
|
389
|
+
else
|
|
390
|
+
rmSync(join(outDir, 'geatsc-header.txt'), { force: true });
|
|
391
|
+
const lines = (text) => text.split('\n').length;
|
|
392
|
+
const total = written.reduce((sum, { unit }) => sum + lines(unit.source), 0);
|
|
393
|
+
const single = written.length === 1 ? written[0] : undefined;
|
|
394
|
+
process.stdout.write(single
|
|
395
|
+
? `compile: ${single.path} (${lines(single.unit.source)} lines)\n`
|
|
396
|
+
: `compile: ${compiled.length} unit(s) and two shared headers in ${outDir} (${total} lines)\n`);
|
|
397
|
+
return 0;
|
|
398
|
+
};
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export interface ModuleGraphOverlay {
|
|
2
|
+
/** Every module's text, by absolute path -- including modules with no file on disk. */
|
|
3
|
+
readonly overlay: ReadonlyMap<string, string>;
|
|
4
|
+
/**
|
|
5
|
+
* How each module's own import specifiers resolved, by importing file.
|
|
6
|
+
*
|
|
7
|
+
* Vite already resolved every specifier when it built this graph -- that is
|
|
8
|
+
* what a bundler does -- and the answers are recorded per import
|
|
9
|
+
* (`resolvedId`). A bare `"gea-embedded"` or a `virtual:` specifier has no
|
|
10
|
+
* meaning to ordinary node resolution, so re-deriving it here would be a
|
|
11
|
+
* second authority guessing at what the build already decided. This carries
|
|
12
|
+
* the build's own answer instead.
|
|
13
|
+
*/
|
|
14
|
+
readonly imports: ReadonlyMap<string, ReadonlyMap<string, string>>;
|
|
15
|
+
/** The entry the pipeline named, or the graph's own. */
|
|
16
|
+
readonly entry: string;
|
|
17
|
+
}
|
|
18
|
+
export declare const readModuleGraph: (manifestPath: string, stage: string, statedEntry: string | null) => ModuleGraphOverlay;
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
import { existsSync, readFileSync } from 'node:fs';
|
|
2
|
+
import { dirname, isAbsolute, resolve } from 'node:path';
|
|
3
|
+
import { packageSourceFor } from './cli-package-source.js';
|
|
4
|
+
/**
|
|
5
|
+
* Whether a module is one this compiler can read as a program at all.
|
|
6
|
+
*
|
|
7
|
+
* A vite graph contains every module the bundler linked, and a bundler links
|
|
8
|
+
* more than code: `import './styles.css'` is a real edge in it. That import is
|
|
9
|
+
* a SIDE EFFECT -- it binds no names -- and the styles it names are already
|
|
10
|
+
* compiled by the pipeline into the prelude fragment this build passes as
|
|
11
|
+
* `gea.cpp-prelude`. Reading the file as source instead is not a near miss but
|
|
12
|
+
* a category error: measured, one `styles.css` produced 100 checker errors
|
|
13
|
+
* ("';' expected", "Octal literals are not allowed" -- a hex colour), because
|
|
14
|
+
* CSS parsed as TypeScript is not TypeScript.
|
|
15
|
+
*/
|
|
16
|
+
const isScriptModule = (file) => /\.[cm]?[jt]sx?$/i.test(file);
|
|
17
|
+
/** Whether a snapshot still carries raw JSX, which only vite's own transform lowers. */
|
|
18
|
+
const holdsRawJsx = (file, text) => {
|
|
19
|
+
if (!/\.[jt]sx$/i.test(file))
|
|
20
|
+
return false;
|
|
21
|
+
// A JSX element opens with `<` followed by a tag name or a fragment, in a
|
|
22
|
+
// position an operator cannot occupy. Looked for the same way v1 looks for
|
|
23
|
+
// it: this decides which of two already-written snapshots to read, never what
|
|
24
|
+
// a construct means.
|
|
25
|
+
return /<\s*[A-Za-z_$>]/.test(text);
|
|
26
|
+
};
|
|
27
|
+
const snapshotFor = (module, stage, manifestDir) => {
|
|
28
|
+
const read = (relative) => relative ? readFileSync(isAbsolute(relative) ? relative : resolve(manifestDir, relative), 'utf8') : null;
|
|
29
|
+
if (stage === 'original')
|
|
30
|
+
return read(module.originalSource);
|
|
31
|
+
if (stage === 'transformed')
|
|
32
|
+
return read(module.transformedSource);
|
|
33
|
+
const original = read(module.originalSource);
|
|
34
|
+
if (original !== null && module.file && module.transformedSource && holdsRawJsx(module.file, original)) {
|
|
35
|
+
return read(module.transformedSource);
|
|
36
|
+
}
|
|
37
|
+
return original ?? read(module.transformedSource);
|
|
38
|
+
};
|
|
39
|
+
export const readModuleGraph = (manifestPath, stage, statedEntry) => {
|
|
40
|
+
const path = resolve(manifestPath);
|
|
41
|
+
const manifestDir = dirname(path);
|
|
42
|
+
const manifest = JSON.parse(readFileSync(path, 'utf8'));
|
|
43
|
+
const overlay = new Map();
|
|
44
|
+
let graphEntry = null;
|
|
45
|
+
for (const module of manifest.modules) {
|
|
46
|
+
if (!module.file)
|
|
47
|
+
continue;
|
|
48
|
+
const file = resolve(module.file);
|
|
49
|
+
if (module.isEntry)
|
|
50
|
+
graphEntry = file;
|
|
51
|
+
// A module that exists on disk is compiled FROM disk, and the snapshot is
|
|
52
|
+
// used only for one that does not (`virtual:gea-compiler-runtime`, which
|
|
53
|
+
// vite synthesizes and no file backs).
|
|
54
|
+
//
|
|
55
|
+
// This is where this compiler and v1 legitimately want different text for
|
|
56
|
+
// the same module, and it is not a disagreement about the program. The
|
|
57
|
+
// `original` snapshot is captured after the gea vite plugin has already
|
|
58
|
+
// COMPILED the JSX away: `<div class="app"><FpsBadge/></div>` arrives here
|
|
59
|
+
// as `document.createElement("template")`, `t.innerHTML = ...`,
|
|
60
|
+
// `cloneNode(true)`, `root.childNodes[1]`, `[GEA_STATIC_TEMPLATE](d)`. v1
|
|
61
|
+
// needs that, because its own path to a UI tree is that DOM-imperative
|
|
62
|
+
// form. This compiler has a native JSX producer (`producers/jsx.ts`, and
|
|
63
|
+
// the source pre-pass that types the elements), and handing it the lowered
|
|
64
|
+
// form both bypasses that producer and asks it to compile the most dynamic
|
|
65
|
+
// possible shape -- measured: 114 `property-access:dynamic` obligations,
|
|
66
|
+
// every one of them a `childNodes[i]`/`innerHTML` step that the JSX it was
|
|
67
|
+
// compiled from never contained.
|
|
68
|
+
//
|
|
69
|
+
// So the disk file is not a different program: it is the SAME module,
|
|
70
|
+
// before a lowering this compiler performs itself.
|
|
71
|
+
// A non-script module still has to RESOLVE -- the import is in the source
|
|
72
|
+
// and an unresolved specifier is a hole in the program -- so it is given an
|
|
73
|
+
// empty module rather than skipped. That is what it contributes: nothing.
|
|
74
|
+
if (!isScriptModule(file)) {
|
|
75
|
+
overlay.set(file, 'export {}\n');
|
|
76
|
+
continue;
|
|
77
|
+
}
|
|
78
|
+
if (existsSync(file))
|
|
79
|
+
continue;
|
|
80
|
+
const text = snapshotFor(module, stage, manifestDir);
|
|
81
|
+
if (text !== null)
|
|
82
|
+
overlay.set(file, text);
|
|
83
|
+
}
|
|
84
|
+
const byId = new Map();
|
|
85
|
+
for (const module of manifest.modules)
|
|
86
|
+
if (module.file)
|
|
87
|
+
byId.set(module.id ?? module.file, resolve(module.file));
|
|
88
|
+
const imports = new Map();
|
|
89
|
+
for (const module of manifest.modules) {
|
|
90
|
+
if (!module.file)
|
|
91
|
+
continue;
|
|
92
|
+
const resolved = new Map();
|
|
93
|
+
for (const one of module.imports ?? []) {
|
|
94
|
+
if (!one.resolvedId)
|
|
95
|
+
continue;
|
|
96
|
+
const linked = byId.get(one.resolvedId) ?? (one.resolvedId.startsWith('/') ? resolve(one.resolvedId) : null);
|
|
97
|
+
if (!linked)
|
|
98
|
+
continue;
|
|
99
|
+
// A dependency the bundler resolved to its BUILD, redirected to the
|
|
100
|
+
// source the package publishes for it -- see `packageSourceFor`. Only
|
|
101
|
+
// when the graph carries no text of its own for that module: a module the
|
|
102
|
+
// build snapshotted is one the build transformed, and replacing it would
|
|
103
|
+
// discard that transform.
|
|
104
|
+
const source = overlay.has(linked) ? null : packageSourceFor(linked);
|
|
105
|
+
const target = source ?? linked;
|
|
106
|
+
// An import TARGET can be a non-script too, and it does not have to be a
|
|
107
|
+
// module of the graph to be one: vite compiles CSS on its own side, so
|
|
108
|
+
// `import './styles.css'` is recorded as a resolved edge from a module
|
|
109
|
+
// while the stylesheet itself never appears in `modules`. Giving the
|
|
110
|
+
// target an empty module here is what keeps this resolution -- which is
|
|
111
|
+
// otherwise the build's own correct answer -- from handing the checker a
|
|
112
|
+
// stylesheet to parse as TypeScript.
|
|
113
|
+
if (!isScriptModule(target))
|
|
114
|
+
overlay.set(target, 'export {}\n');
|
|
115
|
+
resolved.set(one.specifier, target);
|
|
116
|
+
}
|
|
117
|
+
imports.set(resolve(module.file), resolved);
|
|
118
|
+
}
|
|
119
|
+
const entry = statedEntry ? resolve(statedEntry) : graphEntry;
|
|
120
|
+
if (!entry)
|
|
121
|
+
throw new Error(`module graph ${path} names no entry and none was given with --entry`);
|
|
122
|
+
return { overlay, imports, entry };
|
|
123
|
+
};
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
import { existsSync, readFileSync } from 'node:fs';
|
|
2
|
+
import { dirname, isAbsolute, join, resolve } from 'node:path';
|
|
3
|
+
/**
|
|
4
|
+
* A package's own TypeScript, where the build resolved to its bundle.
|
|
5
|
+
*
|
|
6
|
+
* A bundler resolves a dependency to what it can execute: `@geajs/core` becomes
|
|
7
|
+
* `dist/compiler-runtime.mjs`, which is MINIFIED -- one-letter identifiers, no
|
|
8
|
+
* annotations, no JSDoc. Compiling that is not a slightly worse input, it is a
|
|
9
|
+
* categorically different program: a value whose type nothing states is a value
|
|
10
|
+
* this compiler must carry dynamically, so an entire typed reactive runtime
|
|
11
|
+
* arrives as `gea::Value` and the No Boxing rule is lost before a single
|
|
12
|
+
* defect has been fixed.
|
|
13
|
+
*
|
|
14
|
+
* The package already says where its real source is. Node's own conditional
|
|
15
|
+
* exports carry a `source` condition for exactly this -- a consumer that
|
|
16
|
+
* compiles rather than executes -- and `@geajs/core` publishes one for every
|
|
17
|
+
* entry it ships (`"./compiler-runtime": { "source": "./src/compiler-runtime.ts",
|
|
18
|
+
* ... }`). So this is not an override of the build's answer and not a guess: it
|
|
19
|
+
* asks the same package the build asked, for the entry the build already chose,
|
|
20
|
+
* and takes the answer the package gives for this use.
|
|
21
|
+
*
|
|
22
|
+
* Nothing is hardcoded about which package this is. A dependency that publishes
|
|
23
|
+
* no `source` is left exactly where the build put it.
|
|
24
|
+
*/
|
|
25
|
+
/** The `package.json` governing this file, or `null` at the filesystem root. */
|
|
26
|
+
const packageOf = (file) => {
|
|
27
|
+
let dir = dirname(resolve(file));
|
|
28
|
+
for (;;) {
|
|
29
|
+
const candidate = join(dir, 'package.json');
|
|
30
|
+
if (existsSync(candidate)) {
|
|
31
|
+
try {
|
|
32
|
+
return { dir, manifest: JSON.parse(readFileSync(candidate, 'utf8')) };
|
|
33
|
+
}
|
|
34
|
+
catch {
|
|
35
|
+
return null;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
const parent = dirname(dir);
|
|
39
|
+
if (parent === dir)
|
|
40
|
+
return null;
|
|
41
|
+
dir = parent;
|
|
42
|
+
}
|
|
43
|
+
};
|
|
44
|
+
/** Whether this exports entry is a condition object rather than a bare target string. */
|
|
45
|
+
const isConditions = (value) => typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
46
|
+
/**
|
|
47
|
+
* The `source` beside whichever condition the build followed to `target`.
|
|
48
|
+
*
|
|
49
|
+
* An exports entry is a set of conditions over ONE subpath, so the entry that
|
|
50
|
+
* names `target` under any of its conditions is the entry that also names the
|
|
51
|
+
* source for it. Matching by resolved path rather than by condition name is
|
|
52
|
+
* what makes this agnostic to which condition the bundler actually used --
|
|
53
|
+
* `import`, `require`, `browser` and `default` all lead to the same entry.
|
|
54
|
+
*/
|
|
55
|
+
const sourceBesideTarget = (packageDir, entry, target) => {
|
|
56
|
+
if (!isConditions(entry))
|
|
57
|
+
return null;
|
|
58
|
+
const source = entry['source'];
|
|
59
|
+
let names = false;
|
|
60
|
+
for (const [condition, value] of Object.entries(entry)) {
|
|
61
|
+
if (condition === 'source' || condition === 'types')
|
|
62
|
+
continue;
|
|
63
|
+
if (typeof value === 'string' && resolve(packageDir, value) === target)
|
|
64
|
+
names = true;
|
|
65
|
+
else if (isConditions(value) && sourceBesideTarget(packageDir, value, target) !== null)
|
|
66
|
+
names = true;
|
|
67
|
+
else if (isConditions(value)) {
|
|
68
|
+
for (const nested of Object.values(value)) {
|
|
69
|
+
if (typeof nested === 'string' && resolve(packageDir, nested) === target)
|
|
70
|
+
names = true;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
if (!names)
|
|
75
|
+
return null;
|
|
76
|
+
if (typeof source !== 'string')
|
|
77
|
+
return null;
|
|
78
|
+
const file = resolve(packageDir, source);
|
|
79
|
+
return existsSync(file) ? file : null;
|
|
80
|
+
};
|
|
81
|
+
/**
|
|
82
|
+
* The source file a package publishes for the built file the build resolved to,
|
|
83
|
+
* or `null` when it publishes none.
|
|
84
|
+
*/
|
|
85
|
+
export const packageSourceFor = (target) => {
|
|
86
|
+
if (!isAbsolute(target))
|
|
87
|
+
return null;
|
|
88
|
+
const owner = packageOf(target);
|
|
89
|
+
if (!owner)
|
|
90
|
+
return null;
|
|
91
|
+
const { dir, manifest } = owner;
|
|
92
|
+
const exports = manifest.exports;
|
|
93
|
+
if (isConditions(exports)) {
|
|
94
|
+
// A subpath map (`{"./x": {...}}`) and a bare condition set (`{"import": ...}`)
|
|
95
|
+
// are both objects; trying each entry as a condition set covers the first,
|
|
96
|
+
// and the whole object as one covers the second.
|
|
97
|
+
for (const entry of Object.values(exports)) {
|
|
98
|
+
const found = sourceBesideTarget(dir, entry, target);
|
|
99
|
+
if (found !== null)
|
|
100
|
+
return found;
|
|
101
|
+
}
|
|
102
|
+
const direct = sourceBesideTarget(dir, exports, target);
|
|
103
|
+
if (direct !== null)
|
|
104
|
+
return direct;
|
|
105
|
+
}
|
|
106
|
+
// The older convention, still what several bundlers read: one top-level
|
|
107
|
+
// `source` beside `main`/`module`.
|
|
108
|
+
const source = manifest.source;
|
|
109
|
+
if (typeof source !== 'string')
|
|
110
|
+
return null;
|
|
111
|
+
const built = [manifest.main, manifest.module].filter((value) => typeof value === 'string');
|
|
112
|
+
if (!built.some((value) => resolve(dir, value) === target))
|
|
113
|
+
return null;
|
|
114
|
+
const file = resolve(dir, source);
|
|
115
|
+
return existsSync(file) ? file : null;
|
|
116
|
+
};
|