@geastack/compiler 1.0.15
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +202 -0
- package/README.md +149 -0
- package/dist/cli-analyze.d.ts +1 -0
- package/dist/cli-analyze.js +61 -0
- package/dist/cli-coverage.d.ts +1 -0
- package/dist/cli-coverage.js +329 -0
- package/dist/cli-emit.d.ts +10 -0
- package/dist/cli-emit.js +398 -0
- package/dist/cli-module-graph.d.ts +18 -0
- package/dist/cli-module-graph.js +123 -0
- package/dist/cli-package-source.d.ts +5 -0
- package/dist/cli-package-source.js +116 -0
- package/dist/cli-project.d.ts +2 -0
- package/dist/cli-project.js +60 -0
- package/dist/cli.d.ts +2 -0
- package/dist/cli.js +199 -0
- package/dist/compiler.d.ts +228 -0
- package/dist/compiler.js +1029 -0
- package/dist/conversion/algebra.d.ts +218 -0
- package/dist/conversion/algebra.js +155 -0
- package/dist/conversion/build.d.ts +67 -0
- package/dist/conversion/build.js +1378 -0
- package/dist/conversion/derive.d.ts +37 -0
- package/dist/conversion/derive.js +260 -0
- package/dist/conversion/graph-validation.d.ts +8 -0
- package/dist/conversion/graph-validation.js +97 -0
- package/dist/conversion/native-callable-adapter.d.ts +13 -0
- package/dist/conversion/native-callable-adapter.js +53 -0
- package/dist/conversion/native-class-reference.d.ts +12 -0
- package/dist/conversion/native-class-reference.js +39 -0
- package/dist/conversion/native-payload-transport.d.ts +25 -0
- package/dist/conversion/native-payload-transport.js +33 -0
- package/dist/conversion/native-selection.d.ts +49 -0
- package/dist/conversion/native-selection.js +135 -0
- package/dist/conversion/native-sum.d.ts +42 -0
- package/dist/conversion/native-sum.js +115 -0
- package/dist/conversion/nodes.d.ts +55 -0
- package/dist/conversion/nodes.js +91 -0
- package/dist/conversion/operand-view.d.ts +14 -0
- package/dist/conversion/operand-view.js +20 -0
- package/dist/conversion/record-view.d.ts +157 -0
- package/dist/conversion/record-view.js +273 -0
- package/dist/conversion/registry.d.ts +217 -0
- package/dist/conversion/registry.js +1 -0
- package/dist/diagnostics/model.d.ts +76 -0
- package/dist/diagnostics/model.js +60 -0
- package/dist/diagnostics/sweep.d.ts +31 -0
- package/dist/diagnostics/sweep.js +112 -0
- package/dist/identity/ids.d.ts +179 -0
- package/dist/identity/ids.js +212 -0
- package/dist/ir/absent-class-arm.d.ts +48 -0
- package/dist/ir/absent-class-arm.js +157 -0
- package/dist/ir/borrow-effects.d.ts +23 -0
- package/dist/ir/borrow-effects.js +151 -0
- package/dist/ir/borrowed-call-arguments.d.ts +40 -0
- package/dist/ir/borrowed-call-arguments.js +117 -0
- package/dist/ir/build.d.ts +168 -0
- package/dist/ir/build.js +459 -0
- package/dist/ir/call-dispatch.d.ts +38 -0
- package/dist/ir/call-dispatch.js +502 -0
- package/dist/ir/call-entry.d.ts +142 -0
- package/dist/ir/call-entry.js +386 -0
- package/dist/ir/callable-class-flow.d.ts +27 -0
- package/dist/ir/callable-class-flow.js +1386 -0
- package/dist/ir/callable-field-slots.d.ts +22 -0
- package/dist/ir/callable-field-slots.js +166 -0
- package/dist/ir/callable-identity-demand.d.ts +52 -0
- package/dist/ir/callable-identity-demand.js +460 -0
- package/dist/ir/callable-member-candidates.d.ts +9 -0
- package/dist/ir/callable-member-candidates.js +39 -0
- package/dist/ir/callable-records.d.ts +21 -0
- package/dist/ir/callable-records.js +411 -0
- package/dist/ir/captures.d.ts +26 -0
- package/dist/ir/captures.js +335 -0
- package/dist/ir/certificate.d.ts +45 -0
- package/dist/ir/certificate.js +47 -0
- package/dist/ir/certify/carrier-keys.d.ts +73 -0
- package/dist/ir/certify/carrier-keys.js +221 -0
- package/dist/ir/certify/function-source.d.ts +4 -0
- package/dist/ir/certify/function-source.js +28 -0
- package/dist/ir/certify/has-property-key.d.ts +88 -0
- package/dist/ir/certify/has-property-key.js +116 -0
- package/dist/ir/certify/instanceof-key.d.ts +24 -0
- package/dist/ir/certify/instanceof-key.js +35 -0
- package/dist/ir/certify/property-access-keys.d.ts +172 -0
- package/dist/ir/certify/property-access-keys.js +291 -0
- package/dist/ir/certify/property-access.d.ts +3 -0
- package/dist/ir/certify/property-access.js +597 -0
- package/dist/ir/certify/runtime-helper.d.ts +3 -0
- package/dist/ir/certify/runtime-helper.js +326 -0
- package/dist/ir/certify/typeof-operand.d.ts +14 -0
- package/dist/ir/certify/typeof-operand.js +16 -0
- package/dist/ir/certify.d.ts +123 -0
- package/dist/ir/certify.js +481 -0
- package/dist/ir/class-evaluation.d.ts +26 -0
- package/dist/ir/class-evaluation.js +50 -0
- package/dist/ir/class-static-fields.d.ts +60 -0
- package/dist/ir/class-static-fields.js +108 -0
- package/dist/ir/construct-entry.d.ts +26 -0
- package/dist/ir/construct-entry.js +117 -0
- package/dist/ir/dead-values.d.ts +90 -0
- package/dist/ir/dead-values.js +184 -0
- package/dist/ir/deferral.d.ts +99 -0
- package/dist/ir/deferral.js +409 -0
- package/dist/ir/dense-loops.d.ts +230 -0
- package/dist/ir/dense-loops.js +697 -0
- package/dist/ir/dominance.d.ts +82 -0
- package/dist/ir/dominance.js +268 -0
- package/dist/ir/emission-representations.d.ts +71 -0
- package/dist/ir/emission-representations.js +350 -0
- package/dist/ir/facts.d.ts +218 -0
- package/dist/ir/facts.js +181 -0
- package/dist/ir/fixed-data-definition.d.ts +19 -0
- package/dist/ir/fixed-data-definition.js +49 -0
- package/dist/ir/generator-split.d.ts +38 -0
- package/dist/ir/generator-split.js +329 -0
- package/dist/ir/hoist.d.ts +55 -0
- package/dist/ir/hoist.js +375 -0
- package/dist/ir/instantiation.d.ts +61 -0
- package/dist/ir/instantiation.js +137 -0
- package/dist/ir/integer-storage.d.ts +170 -0
- package/dist/ir/integer-storage.js +822 -0
- package/dist/ir/integers.d.ts +161 -0
- package/dist/ir/integers.js +539 -0
- package/dist/ir/integrity-restrictions.d.ts +50 -0
- package/dist/ir/integrity-restrictions.js +118 -0
- package/dist/ir/local-iterators.d.ts +4 -0
- package/dist/ir/local-iterators.js +27 -0
- package/dist/ir/lower-allocation.d.ts +4 -0
- package/dist/ir/lower-allocation.js +325 -0
- package/dist/ir/lower-completion.d.ts +15 -0
- package/dist/ir/lower-completion.js +25 -0
- package/dist/ir/lower-destructuring.d.ts +5 -0
- package/dist/ir/lower-destructuring.js +693 -0
- package/dist/ir/lower-element.d.ts +29 -0
- package/dist/ir/lower-element.js +111 -0
- package/dist/ir/lower-exceptions.d.ts +47 -0
- package/dist/ir/lower-exceptions.js +92 -0
- package/dist/ir/lower-flow.d.ts +137 -0
- package/dist/ir/lower-flow.js +600 -0
- package/dist/ir/lower-graph.d.ts +218 -0
- package/dist/ir/lower-graph.js +687 -0
- package/dist/ir/lower-invocation.d.ts +4 -0
- package/dist/ir/lower-invocation.js +514 -0
- package/dist/ir/lower-narrow.d.ts +53 -0
- package/dist/ir/lower-narrow.js +320 -0
- package/dist/ir/lower-operands.d.ts +272 -0
- package/dist/ir/lower-operands.js +461 -0
- package/dist/ir/lower-property.d.ts +21 -0
- package/dist/ir/lower-property.js +132 -0
- package/dist/ir/lower-protocol.d.ts +11 -0
- package/dist/ir/lower-protocol.js +118 -0
- package/dist/ir/lower-short-circuit.d.ts +41 -0
- package/dist/ir/lower-short-circuit.js +63 -0
- package/dist/ir/lower.d.ts +82 -0
- package/dist/ir/lower.js +1346 -0
- package/dist/ir/model.d.ts +1474 -0
- package/dist/ir/model.js +6 -0
- package/dist/ir/native-absent-property.d.ts +3 -0
- package/dist/ir/native-absent-property.js +13 -0
- package/dist/ir/native-array-transport.d.ts +7 -0
- package/dist/ir/native-array-transport.js +46 -0
- package/dist/ir/native-callable-bind.d.ts +9 -0
- package/dist/ir/native-callable-bind.js +30 -0
- package/dist/ir/native-carrier-predicate.d.ts +34 -0
- package/dist/ir/native-carrier-predicate.js +49 -0
- package/dist/ir/native-class-accessor.d.ts +18 -0
- package/dist/ir/native-class-accessor.js +52 -0
- package/dist/ir/native-class-construction.d.ts +16 -0
- package/dist/ir/native-class-construction.js +71 -0
- package/dist/ir/native-class-initialization.d.ts +15 -0
- package/dist/ir/native-class-initialization.js +56 -0
- package/dist/ir/native-class-origins.d.ts +13 -0
- package/dist/ir/native-class-origins.js +237 -0
- package/dist/ir/native-dictionary-transport.d.ts +6 -0
- package/dist/ir/native-dictionary-transport.js +37 -0
- package/dist/ir/native-enumeration.d.ts +14 -0
- package/dist/ir/native-enumeration.js +26 -0
- package/dist/ir/native-equality.d.ts +10 -0
- package/dist/ir/native-equality.js +18 -0
- package/dist/ir/native-field-owner.d.ts +37 -0
- package/dist/ir/native-field-owner.js +183 -0
- package/dist/ir/native-fixed-layout.d.ts +41 -0
- package/dist/ir/native-fixed-layout.js +232 -0
- package/dist/ir/native-host-construction.d.ts +53 -0
- package/dist/ir/native-host-construction.js +62 -0
- package/dist/ir/native-key-query.d.ts +4 -0
- package/dist/ir/native-key-query.js +38 -0
- package/dist/ir/native-merge-transport.d.ts +25 -0
- package/dist/ir/native-merge-transport.js +71 -0
- package/dist/ir/native-record-index-transport.d.ts +11 -0
- package/dist/ir/native-record-index-transport.js +34 -0
- package/dist/ir/native-record-index.d.ts +12 -0
- package/dist/ir/native-record-index.js +27 -0
- package/dist/ir/native-reflect-field.d.ts +5 -0
- package/dist/ir/native-reflect-field.js +33 -0
- package/dist/ir/native-sequence-transport.d.ts +7 -0
- package/dist/ir/native-sequence-transport.js +53 -0
- package/dist/ir/numeric-intrinsics.d.ts +13 -0
- package/dist/ir/numeric-intrinsics.js +57 -0
- package/dist/ir/object-value-conversions.d.ts +20 -0
- package/dist/ir/object-value-conversions.js +50 -0
- package/dist/ir/physical-class-reflection.d.ts +9 -0
- package/dist/ir/physical-class-reflection.js +57 -0
- package/dist/ir/presence-proof.d.ts +42 -0
- package/dist/ir/presence-proof.js +490 -0
- package/dist/ir/program-facts.d.ts +106 -0
- package/dist/ir/program-facts.js +319 -0
- package/dist/ir/proven-branches.d.ts +16 -0
- package/dist/ir/proven-branches.js +219 -0
- package/dist/ir/queries.d.ts +41 -0
- package/dist/ir/queries.js +213 -0
- package/dist/ir/reflection-demand.d.ts +64 -0
- package/dist/ir/reflection-demand.js +1394 -0
- package/dist/ir/refusal.d.ts +43 -0
- package/dist/ir/refusal.js +28 -0
- package/dist/ir/shake.d.ts +37 -0
- package/dist/ir/shake.js +1078 -0
- package/dist/ir/static-callables.d.ts +11 -0
- package/dist/ir/static-callables.js +163 -0
- package/dist/ir/string-layout-reuse.d.ts +13 -0
- package/dist/ir/string-layout-reuse.js +39 -0
- package/dist/ir/string-length-reuse.d.ts +8 -0
- package/dist/ir/string-length-reuse.js +47 -0
- package/dist/ir/transfer.d.ts +78 -0
- package/dist/ir/transfer.js +270 -0
- package/dist/ir/type-query-results.d.ts +25 -0
- package/dist/ir/type-query-results.js +96 -0
- package/dist/ir/typed-property-access.d.ts +100 -0
- package/dist/ir/typed-property-access.js +161 -0
- package/dist/ir/verify.d.ts +19 -0
- package/dist/ir/verify.js +355 -0
- package/dist/plugins/apple/constructors.d.ts +112 -0
- package/dist/plugins/apple/constructors.js +217 -0
- package/dist/plugins/apple/host.d.ts +181 -0
- package/dist/plugins/apple/host.js +262 -0
- package/dist/plugins/apple/jsx.d.ts +2 -0
- package/dist/plugins/apple/jsx.js +293 -0
- package/dist/plugins/apple/members.d.ts +16 -0
- package/dist/plugins/apple/members.js +190 -0
- package/dist/plugins/apple/plugin.d.ts +2 -0
- package/dist/plugins/apple/plugin.js +156 -0
- package/dist/plugins/gea/component-classes.d.ts +25 -0
- package/dist/plugins/gea/component-classes.js +162 -0
- package/dist/plugins/gea/component-inline.d.ts +13 -0
- package/dist/plugins/gea/component-inline.js +532 -0
- package/dist/plugins/gea/constructors.d.ts +23 -0
- package/dist/plugins/gea/constructors.js +100 -0
- package/dist/plugins/gea/contract.d.ts +150 -0
- package/dist/plugins/gea/contract.js +195 -0
- package/dist/plugins/gea/element-ref.d.ts +31 -0
- package/dist/plugins/gea/element-ref.js +45 -0
- package/dist/plugins/gea/host.d.ts +520 -0
- package/dist/plugins/gea/host.js +762 -0
- package/dist/plugins/gea/lower.d.ts +6 -0
- package/dist/plugins/gea/lower.js +195 -0
- package/dist/plugins/gea/members.d.ts +22 -0
- package/dist/plugins/gea/members.js +221 -0
- package/dist/plugins/gea/plugin.d.ts +22 -0
- package/dist/plugins/gea/plugin.js +307 -0
- package/dist/plugins/gea/prelude.d.ts +78 -0
- package/dist/plugins/gea/prelude.js +153 -0
- package/dist/plugins/gea/producer.d.ts +5 -0
- package/dist/plugins/gea/producer.js +52 -0
- package/dist/plugins/gea/reactive-slots.d.ts +49 -0
- package/dist/plugins/gea/reactive-slots.js +578 -0
- package/dist/plugins/gea/render-bridge.d.ts +6 -0
- package/dist/plugins/gea/render-bridge.js +281 -0
- package/dist/plugins/gea/slots.d.ts +15 -0
- package/dist/plugins/gea/slots.js +36 -0
- package/dist/plugins/gea/template-analysis.d.ts +151 -0
- package/dist/plugins/gea/template-analysis.js +346 -0
- package/dist/plugins/gea/user-agent-styles.d.ts +9 -0
- package/dist/plugins/gea/user-agent-styles.js +94 -0
- package/dist/plugins/installed.d.ts +19 -0
- package/dist/plugins/installed.js +21 -0
- package/dist/plugins/load.d.ts +7 -0
- package/dist/plugins/load.js +207 -0
- package/dist/plugins/model.d.ts +735 -0
- package/dist/plugins/model.js +47 -0
- package/dist/plugins/webgl/host.d.ts +77 -0
- package/dist/plugins/webgl/host.js +162 -0
- package/dist/plugins/webgl/plugin.d.ts +40 -0
- package/dist/plugins/webgl/plugin.js +99 -0
- package/dist/preflight/obligations.d.ts +206 -0
- package/dist/preflight/obligations.js +36 -0
- package/dist/preflight/report.d.ts +20 -0
- package/dist/preflight/report.js +61 -0
- package/dist/preflight/run.d.ts +39 -0
- package/dist/preflight/run.js +403 -0
- package/dist/project-preparation.d.ts +33 -0
- package/dist/project-preparation.js +314 -0
- package/dist/projection/abi.d.ts +82 -0
- package/dist/projection/abi.js +349 -0
- package/dist/projection/apply-arguments.d.ts +12 -0
- package/dist/projection/apply-arguments.js +20 -0
- package/dist/projection/bindings.d.ts +250 -0
- package/dist/projection/bindings.js +340 -0
- package/dist/projection/callee.d.ts +196 -0
- package/dist/projection/callee.js +444 -0
- package/dist/projection/class-property-presence.d.ts +28 -0
- package/dist/projection/class-property-presence.js +58 -0
- package/dist/projection/class-prototype.d.ts +5 -0
- package/dist/projection/class-prototype.js +23 -0
- package/dist/projection/class-storage.d.ts +26 -0
- package/dist/projection/class-storage.js +236 -0
- package/dist/projection/classes.d.ts +283 -0
- package/dist/projection/classes.js +944 -0
- package/dist/projection/coercions.d.ts +20 -0
- package/dist/projection/coercions.js +33 -0
- package/dist/projection/dispatch.d.ts +167 -0
- package/dist/projection/dispatch.js +379 -0
- package/dist/projection/fields.d.ts +123 -0
- package/dist/projection/fields.js +383 -0
- package/dist/projection/instance-test.d.ts +78 -0
- package/dist/projection/instance-test.js +156 -0
- package/dist/projection/slots.d.ts +146 -0
- package/dist/projection/slots.js +663 -0
- package/dist/projection/synthesized-abi.d.ts +61 -0
- package/dist/projection/synthesized-abi.js +94 -0
- package/dist/representation/array-index.d.ts +14 -0
- package/dist/representation/array-index.js +17 -0
- package/dist/representation/callable-object.d.ts +3 -0
- package/dist/representation/callable-object.js +6 -0
- package/dist/representation/collections.d.ts +84 -0
- package/dist/representation/collections.js +139 -0
- package/dist/representation/derive.d.ts +159 -0
- package/dist/representation/derive.js +2546 -0
- package/dist/representation/difference.d.ts +30 -0
- package/dist/representation/difference.js +240 -0
- package/dist/representation/field-descriptor-policy.d.ts +19 -0
- package/dist/representation/field-descriptor-policy.js +39 -0
- package/dist/representation/function-constructor.d.ts +13 -0
- package/dist/representation/function-constructor.js +9 -0
- package/dist/representation/host-abi.d.ts +32 -0
- package/dist/representation/host-abi.js +97 -0
- package/dist/representation/host-templates.d.ts +67 -0
- package/dist/representation/host-templates.js +94 -0
- package/dist/representation/intersection.d.ts +84 -0
- package/dist/representation/intersection.js +149 -0
- package/dist/representation/literal-destination.d.ts +43 -0
- package/dist/representation/literal-destination.js +133 -0
- package/dist/representation/merge.d.ts +18 -0
- package/dist/representation/merge.js +83 -0
- package/dist/representation/model.d.ts +1160 -0
- package/dist/representation/model.js +1019 -0
- package/dist/representation/numeric-index.d.ts +13 -0
- package/dist/representation/numeric-index.js +29 -0
- package/dist/representation/object-shape.d.ts +109 -0
- package/dist/representation/object-shape.js +123 -0
- package/dist/representation/optional.d.ts +12 -0
- package/dist/representation/optional.js +87 -0
- package/dist/representation/plan.d.ts +60 -0
- package/dist/representation/plan.js +78 -0
- package/dist/representation/policies.d.ts +589 -0
- package/dist/representation/policies.js +107 -0
- package/dist/representation/primitive-domain.d.ts +1 -0
- package/dist/representation/primitive-domain.js +1 -0
- package/dist/representation/primitives.d.ts +44 -0
- package/dist/representation/primitives.js +78 -0
- package/dist/representation/publish.d.ts +49 -0
- package/dist/representation/publish.js +648 -0
- package/dist/representation/record-fields.d.ts +96 -0
- package/dist/representation/record-fields.js +116 -0
- package/dist/representation/template-object.d.ts +11 -0
- package/dist/representation/template-object.js +26 -0
- package/dist/representation/union.d.ts +30 -0
- package/dist/representation/union.js +324 -0
- package/dist/representation/value-records.d.ts +3 -0
- package/dist/representation/value-records.js +307 -0
- package/dist/representation/verify.d.ts +17 -0
- package/dist/representation/verify.js +221 -0
- package/dist/semantics/alias-this-field-declaration-transform.d.ts +4 -0
- package/dist/semantics/alias-this-field-declaration-transform.js +207 -0
- package/dist/semantics/ambient-type-realization-transform.d.ts +62 -0
- package/dist/semantics/ambient-type-realization-transform.js +168 -0
- package/dist/semantics/ambient.d.ts +24 -0
- package/dist/semantics/ambient.js +119 -0
- package/dist/semantics/borrowed-builtin-call-bind-source-transform.d.ts +4 -0
- package/dist/semantics/borrowed-builtin-call-bind-source-transform.js +341 -0
- package/dist/semantics/callable-origins.d.ts +46 -0
- package/dist/semantics/callable-origins.js +354 -0
- package/dist/semantics/class-alias.d.ts +7 -0
- package/dist/semantics/class-alias.js +37 -0
- package/dist/semantics/class-heritage.d.ts +34 -0
- package/dist/semantics/class-heritage.js +104 -0
- package/dist/semantics/commonjs-wrapper.d.ts +69 -0
- package/dist/semantics/commonjs-wrapper.js +231 -0
- package/dist/semantics/constructor-slot-subclasses.d.ts +28 -0
- package/dist/semantics/constructor-slot-subclasses.js +112 -0
- package/dist/semantics/declaration-overlay-transform.d.ts +35 -0
- package/dist/semantics/declaration-overlay-transform.js +2157 -0
- package/dist/semantics/define-property-source-transform.d.ts +4 -0
- package/dist/semantics/define-property-source-transform.js +437 -0
- package/dist/semantics/diagnostic-source-preparation.d.ts +24 -0
- package/dist/semantics/diagnostic-source-preparation.js +82 -0
- package/dist/semantics/documentation-ranges.d.ts +22 -0
- package/dist/semantics/documentation-ranges.js +36 -0
- package/dist/semantics/dynamic-fallback.d.ts +86 -0
- package/dist/semantics/dynamic-fallback.js +249 -0
- package/dist/semantics/frontend-timing.d.ts +6 -0
- package/dist/semantics/frontend-timing.js +35 -0
- package/dist/semantics/frontend.d.ts +504 -0
- package/dist/semantics/frontend.js +1157 -0
- package/dist/semantics/host-declaration-provenance.d.ts +11 -0
- package/dist/semantics/host-declaration-provenance.js +18 -0
- package/dist/semantics/host-methods.d.ts +24 -0
- package/dist/semantics/host-methods.js +74 -0
- package/dist/semantics/host-protocols.d.ts +429 -0
- package/dist/semantics/host-protocols.js +1501 -0
- package/dist/semantics/inherited-accessor.d.ts +7 -0
- package/dist/semantics/inherited-accessor.js +48 -0
- package/dist/semantics/interface-families.d.ts +70 -0
- package/dist/semantics/interface-families.js +180 -0
- package/dist/semantics/interface-implementors.d.ts +53 -0
- package/dist/semantics/interface-implementors.js +87 -0
- package/dist/semantics/jsdoc-namepath-transform.d.ts +4 -0
- package/dist/semantics/jsdoc-namepath-transform.js +85 -0
- package/dist/semantics/model/coverage.d.ts +68 -0
- package/dist/semantics/model/coverage.js +73 -0
- package/dist/semantics/model/edges.d.ts +103 -0
- package/dist/semantics/model/edges.js +20 -0
- package/dist/semantics/model/graph.d.ts +55 -0
- package/dist/semantics/model/graph.js +129 -0
- package/dist/semantics/model/operands.d.ts +159 -0
- package/dist/semantics/model/operands.js +26 -0
- package/dist/semantics/model/operations.d.ts +496 -0
- package/dist/semantics/model/operations.js +2 -0
- package/dist/semantics/model/primitive-domain.d.ts +26 -0
- package/dist/semantics/model/primitive-domain.js +38 -0
- package/dist/semantics/model/selected-signature.d.ts +261 -0
- package/dist/semantics/model/selected-signature.js +55 -0
- package/dist/semantics/model/structural-type-table.d.ts +93 -0
- package/dist/semantics/model/structural-type-table.js +237 -0
- package/dist/semantics/model/structural-types.d.ts +367 -0
- package/dist/semantics/model/structural-types.js +200 -0
- package/dist/semantics/module-resolution.d.ts +23 -0
- package/dist/semantics/module-resolution.js +227 -0
- package/dist/semantics/new-callee-class-tag-source-transform.d.ts +4 -0
- package/dist/semantics/new-callee-class-tag-source-transform.js +64 -0
- package/dist/semantics/node-project.d.ts +13 -0
- package/dist/semantics/node-project.js +107 -0
- package/dist/semantics/node-source-hooks.d.ts +1 -0
- package/dist/semantics/node-source-hooks.js +63 -0
- package/dist/semantics/normalize/absent-globals.d.ts +143 -0
- package/dist/semantics/normalize/absent-globals.js +191 -0
- package/dist/semantics/normalize/arguments-objects.d.ts +43 -0
- package/dist/semantics/normalize/arguments-objects.js +60 -0
- package/dist/semantics/normalize/asserted-arm-absence.d.ts +28 -0
- package/dist/semantics/normalize/asserted-arm-absence.js +61 -0
- package/dist/semantics/normalize/assignment-patterns.d.ts +70 -0
- package/dist/semantics/normalize/assignment-patterns.js +147 -0
- package/dist/semantics/normalize/bag-absence.d.ts +8 -0
- package/dist/semantics/normalize/bag-absence.js +42 -0
- package/dist/semantics/normalize/binding-fixpoint.d.ts +36 -0
- package/dist/semantics/normalize/binding-fixpoint.js +140 -0
- package/dist/semantics/normalize/callback-parameter-contracts.d.ts +16 -0
- package/dist/semantics/normalize/callback-parameter-contracts.js +91 -0
- package/dist/semantics/normalize/cells/agreement.d.ts +46 -0
- package/dist/semantics/normalize/cells/agreement.js +34 -0
- package/dist/semantics/normalize/cells/candidates.d.ts +17 -0
- package/dist/semantics/normalize/cells/candidates.js +35 -0
- package/dist/semantics/normalize/cells/facts.d.ts +19 -0
- package/dist/semantics/normalize/cells/facts.js +90 -0
- package/dist/semantics/normalize/cells/index.d.ts +10 -0
- package/dist/semantics/normalize/cells/index.js +6 -0
- package/dist/semantics/normalize/cells/model.d.ts +98 -0
- package/dist/semantics/normalize/cells/model.js +2 -0
- package/dist/semantics/normalize/cells/policies/bag.d.ts +44 -0
- package/dist/semantics/normalize/cells/policies/bag.js +114 -0
- package/dist/semantics/normalize/cells/policies/collection.d.ts +42 -0
- package/dist/semantics/normalize/cells/policies/collection.js +218 -0
- package/dist/semantics/normalize/cells/policies/field.d.ts +28 -0
- package/dist/semantics/normalize/cells/policies/field.js +40 -0
- package/dist/semantics/normalize/cells/policies/index.d.ts +49 -0
- package/dist/semantics/normalize/cells/policies/index.js +58 -0
- package/dist/semantics/normalize/cells/policies/local.d.ts +18 -0
- package/dist/semantics/normalize/cells/policies/local.js +37 -0
- package/dist/semantics/normalize/cells/policies/parameter.d.ts +28 -0
- package/dist/semantics/normalize/cells/policies/parameter.js +39 -0
- package/dist/semantics/normalize/cells/policies/return.d.ts +26 -0
- package/dist/semantics/normalize/cells/policies/return.js +45 -0
- package/dist/semantics/normalize/cells/policies/shared.d.ts +33 -0
- package/dist/semantics/normalize/cells/policies/shared.js +45 -0
- package/dist/semantics/normalize/cells/policy.d.ts +72 -0
- package/dist/semantics/normalize/cells/policy.js +18 -0
- package/dist/semantics/normalize/cells/registry.d.ts +14 -0
- package/dist/semantics/normalize/cells/registry.js +17 -0
- package/dist/semantics/normalize/census-refusal.d.ts +62 -0
- package/dist/semantics/normalize/census-refusal.js +27 -0
- package/dist/semantics/normalize/census.d.ts +109 -0
- package/dist/semantics/normalize/census.js +667 -0
- package/dist/semantics/normalize/collection-bindings.d.ts +278 -0
- package/dist/semantics/normalize/collection-bindings.js +677 -0
- package/dist/semantics/normalize/commonjs-module-record.d.ts +21 -0
- package/dist/semantics/normalize/commonjs-module-record.js +289 -0
- package/dist/semantics/normalize/commonjs-require.d.ts +13 -0
- package/dist/semantics/normalize/commonjs-require.js +1527 -0
- package/dist/semantics/normalize/contribution.d.ts +63 -0
- package/dist/semantics/normalize/contribution.js +172 -0
- package/dist/semantics/normalize/dead-typeof-guards.d.ts +64 -0
- package/dist/semantics/normalize/dead-typeof-guards.js +152 -0
- package/dist/semantics/normalize/deferred-intrinsic-protocols.d.ts +57 -0
- package/dist/semantics/normalize/deferred-intrinsic-protocols.js +109 -0
- package/dist/semantics/normalize/derived-expression-type.d.ts +1070 -0
- package/dist/semantics/normalize/derived-expression-type.js +3463 -0
- package/dist/semantics/normalize/evaluation-order.d.ts +16 -0
- package/dist/semantics/normalize/evaluation-order.js +37 -0
- package/dist/semantics/normalize/field-bindings.d.ts +167 -0
- package/dist/semantics/normalize/field-bindings.js +1125 -0
- package/dist/semantics/normalize/flow/array-element-continuation.d.ts +27 -0
- package/dist/semantics/normalize/flow/array-element-continuation.js +1452 -0
- package/dist/semantics/normalize/flow/callable-array-origins.d.ts +42 -0
- package/dist/semantics/normalize/flow/callable-array-origins.js +318 -0
- package/dist/semantics/normalize/flow/callable-completions.d.ts +45 -0
- package/dist/semantics/normalize/flow/callable-completions.js +82 -0
- package/dist/semantics/normalize/flow/callable-reach.d.ts +237 -0
- package/dist/semantics/normalize/flow/callable-reach.js +7174 -0
- package/dist/semantics/normalize/flow/class-family-member-read.d.ts +16 -0
- package/dist/semantics/normalize/flow/class-family-member-read.js +992 -0
- package/dist/semantics/normalize/flow/collection-value-continuation.d.ts +21 -0
- package/dist/semantics/normalize/flow/collection-value-continuation.js +192 -0
- package/dist/semantics/normalize/flow/component-solver.d.ts +199 -0
- package/dist/semantics/normalize/flow/component-solver.js +587 -0
- package/dist/semantics/normalize/flow/computed-key-set.d.ts +84 -0
- package/dist/semantics/normalize/flow/computed-key-set.js +660 -0
- package/dist/semantics/normalize/flow/export-importers.d.ts +24 -0
- package/dist/semantics/normalize/flow/export-importers.js +269 -0
- package/dist/semantics/normalize/flow/host-text-sink.d.ts +25 -0
- package/dist/semantics/normalize/flow/host-text-sink.js +87 -0
- package/dist/semantics/normalize/flow/intrinsic-array-callback-frames.d.ts +84 -0
- package/dist/semantics/normalize/flow/intrinsic-array-callback-frames.js +180 -0
- package/dist/semantics/normalize/flow/intrinsic-data-definition.d.ts +35 -0
- package/dist/semantics/normalize/flow/intrinsic-data-definition.js +140 -0
- package/dist/semantics/normalize/flow/invocation-facts.d.ts +98 -0
- package/dist/semantics/normalize/flow/invocation-facts.js +257 -0
- package/dist/semantics/normalize/flow/member-call-forwarding.d.ts +122 -0
- package/dist/semantics/normalize/flow/member-call-forwarding.js +835 -0
- package/dist/semantics/normalize/flow/model.d.ts +357 -0
- package/dist/semantics/normalize/flow/model.js +177 -0
- package/dist/semantics/normalize/flow/native-collection-protocol.d.ts +24 -0
- package/dist/semantics/normalize/flow/native-collection-protocol.js +252 -0
- package/dist/semantics/normalize/flow/node-path-token.d.ts +3 -0
- package/dist/semantics/normalize/flow/node-path-token.js +53 -0
- package/dist/semantics/normalize/flow/object-binding-continuation.d.ts +11 -0
- package/dist/semantics/normalize/flow/object-binding-continuation.js +42 -0
- package/dist/semantics/normalize/flow/origin-authority.d.ts +56 -0
- package/dist/semantics/normalize/flow/origin-authority.js +2 -0
- package/dist/semantics/normalize/flow/owned-class-receivers.d.ts +35 -0
- package/dist/semantics/normalize/flow/owned-class-receivers.js +191 -0
- package/dist/semantics/normalize/flow/parameter-values.d.ts +27 -0
- package/dist/semantics/normalize/flow/parameter-values.js +251 -0
- package/dist/semantics/normalize/flow/proof-hypotheses.d.ts +66 -0
- package/dist/semantics/normalize/flow/proof-hypotheses.js +162 -0
- package/dist/semantics/normalize/flow/record-alias-closure.d.ts +27 -0
- package/dist/semantics/normalize/flow/record-alias-closure.js +298 -0
- package/dist/semantics/normalize/flow/seeded-origins.d.ts +43 -0
- package/dist/semantics/normalize/flow/seeded-origins.js +54 -0
- package/dist/semantics/normalize/flow/source-class-data.d.ts +132 -0
- package/dist/semantics/normalize/flow/source-class-data.js +838 -0
- package/dist/semantics/normalize/flow/source-class-instanceof.d.ts +13 -0
- package/dist/semantics/normalize/flow/source-class-instanceof.js +37 -0
- package/dist/semantics/normalize/flow/source-class-static-data.d.ts +16 -0
- package/dist/semantics/normalize/flow/source-class-static-data.js +47 -0
- package/dist/semantics/normalize/flow/source-construction-frames.d.ts +12 -0
- package/dist/semantics/normalize/flow/source-construction-frames.js +118 -0
- package/dist/semantics/normalize/flow/source-invocation-frame-layout.d.ts +34 -0
- package/dist/semantics/normalize/flow/source-invocation-frame-layout.js +78 -0
- package/dist/semantics/normalize/flow/source-invocation-receiver.d.ts +37 -0
- package/dist/semantics/normalize/flow/source-invocation-receiver.js +95 -0
- package/dist/semantics/normalize/flow/source-prototype-method-identity.d.ts +23 -0
- package/dist/semantics/normalize/flow/source-prototype-method-identity.js +81 -0
- package/dist/semantics/normalize/flow/source-record-data.d.ts +29 -0
- package/dist/semantics/normalize/flow/source-record-data.js +626 -0
- package/dist/semantics/normalize/flow/source-value-session.d.ts +77 -0
- package/dist/semantics/normalize/flow/source-value-session.js +3089 -0
- package/dist/semantics/normalize/flow/targets.d.ts +118 -0
- package/dist/semantics/normalize/flow/targets.js +405 -0
- package/dist/semantics/normalize/flow/value-flow.d.ts +36 -0
- package/dist/semantics/normalize/flow/value-flow.js +823 -0
- package/dist/semantics/normalize/flow/value-provenance.d.ts +31 -0
- package/dist/semantics/normalize/flow/value-provenance.js +112 -0
- package/dist/semantics/normalize/gating.d.ts +51 -0
- package/dist/semantics/normalize/gating.js +560 -0
- package/dist/semantics/normalize/generic-function-choice.d.ts +31 -0
- package/dist/semantics/normalize/generic-function-choice.js +115 -0
- package/dist/semantics/normalize/global-host-mutations.d.ts +51 -0
- package/dist/semantics/normalize/global-host-mutations.js +5989 -0
- package/dist/semantics/normalize/host-effect-contracts.d.ts +77 -0
- package/dist/semantics/normalize/host-effect-contracts.js +143 -0
- package/dist/semantics/normalize/host-mutation-computed-keys.d.ts +38 -0
- package/dist/semantics/normalize/host-mutation-computed-keys.js +26 -0
- package/dist/semantics/normalize/host-mutation-key-reader.d.ts +66 -0
- package/dist/semantics/normalize/host-mutation-key-reader.js +192 -0
- package/dist/semantics/normalize/host-mutation-keys.d.ts +114 -0
- package/dist/semantics/normalize/host-mutation-keys.js +183 -0
- package/dist/semantics/normalize/identities.d.ts +172 -0
- package/dist/semantics/normalize/identities.js +426 -0
- package/dist/semantics/normalize/implicit-arguments-tuple.d.ts +97 -0
- package/dist/semantics/normalize/implicit-arguments-tuple.js +197 -0
- package/dist/semantics/normalize/implicit-arguments.d.ts +11 -0
- package/dist/semantics/normalize/implicit-arguments.js +39 -0
- package/dist/semantics/normalize/instantiation.d.ts +73 -0
- package/dist/semantics/normalize/instantiation.js +399 -0
- package/dist/semantics/normalize/intrinsic-property-call.d.ts +18 -0
- package/dist/semantics/normalize/intrinsic-property-call.js +69 -0
- package/dist/semantics/normalize/intrinsic-prototype.d.ts +41 -0
- package/dist/semantics/normalize/intrinsic-prototype.js +87 -0
- package/dist/semantics/normalize/intrinsic-static-member.d.ts +14 -0
- package/dist/semantics/normalize/intrinsic-static-member.js +23 -0
- package/dist/semantics/normalize/jsdoc-type-names.d.ts +32 -0
- package/dist/semantics/normalize/jsdoc-type-names.js +512 -0
- package/dist/semantics/normalize/keyof.d.ts +32 -0
- package/dist/semantics/normalize/keyof.js +110 -0
- package/dist/semantics/normalize/local-bindings.d.ts +176 -0
- package/dist/semantics/normalize/local-bindings.js +1826 -0
- package/dist/semantics/normalize/logical-result-type.d.ts +16 -0
- package/dist/semantics/normalize/logical-result-type.js +102 -0
- package/dist/semantics/normalize/namespace-paths.d.ts +57 -0
- package/dist/semantics/normalize/namespace-paths.js +108 -0
- package/dist/semantics/normalize/normalize.d.ts +57 -0
- package/dist/semantics/normalize/normalize.js +68 -0
- package/dist/semantics/normalize/object-bag-bindings.d.ts +305 -0
- package/dist/semantics/normalize/object-bag-bindings.js +1290 -0
- package/dist/semantics/normalize/omitted-stated-parameter.d.ts +53 -0
- package/dist/semantics/normalize/omitted-stated-parameter.js +59 -0
- package/dist/semantics/normalize/open-type-form.d.ts +10 -0
- package/dist/semantics/normalize/open-type-form.js +32 -0
- package/dist/semantics/normalize/parameter-bindings.d.ts +361 -0
- package/dist/semantics/normalize/parameter-bindings.js +3339 -0
- package/dist/semantics/normalize/parameter-slot.d.ts +264 -0
- package/dist/semantics/normalize/parameter-slot.js +491 -0
- package/dist/semantics/normalize/physical-overload-result.d.ts +77 -0
- package/dist/semantics/normalize/physical-overload-result.js +99 -0
- package/dist/semantics/normalize/primitive-property-absence.d.ts +12 -0
- package/dist/semantics/normalize/primitive-property-absence.js +60 -0
- package/dist/semantics/normalize/producer-context.d.ts +376 -0
- package/dist/semantics/normalize/producer-context.js +1 -0
- package/dist/semantics/normalize/producers/allocations.d.ts +3 -0
- package/dist/semantics/normalize/producers/allocations.js +863 -0
- package/dist/semantics/normalize/producers/binding-kind.d.ts +37 -0
- package/dist/semantics/normalize/producers/binding-kind.js +36 -0
- package/dist/semantics/normalize/producers/bindings.d.ts +85 -0
- package/dist/semantics/normalize/producers/bindings.js +710 -0
- package/dist/semantics/normalize/producers/boundary.d.ts +34 -0
- package/dist/semantics/normalize/producers/boundary.js +123 -0
- package/dist/semantics/normalize/producers/class-lifecycle.d.ts +3 -0
- package/dist/semantics/normalize/producers/class-lifecycle.js +902 -0
- package/dist/semantics/normalize/producers/computations.d.ts +3 -0
- package/dist/semantics/normalize/producers/computations.js +613 -0
- package/dist/semantics/normalize/producers/control-loops.d.ts +30 -0
- package/dist/semantics/normalize/producers/control-loops.js +91 -0
- package/dist/semantics/normalize/producers/control.d.ts +30 -0
- package/dist/semantics/normalize/producers/control.js +923 -0
- package/dist/semantics/normalize/producers/declaration-lifecycle.d.ts +3 -0
- package/dist/semantics/normalize/producers/declaration-lifecycle.js +390 -0
- package/dist/semantics/normalize/producers/destructuring.d.ts +45 -0
- package/dist/semantics/normalize/producers/destructuring.js +1180 -0
- package/dist/semantics/normalize/producers/dynamic-language.d.ts +3 -0
- package/dist/semantics/normalize/producers/dynamic-language.js +70 -0
- package/dist/semantics/normalize/producers/erasure.d.ts +51 -0
- package/dist/semantics/normalize/producers/erasure.js +90 -0
- package/dist/semantics/normalize/producers/installed.d.ts +3 -0
- package/dist/semantics/normalize/producers/installed.js +55 -0
- package/dist/semantics/normalize/producers/invocations.d.ts +35 -0
- package/dist/semantics/normalize/producers/invocations.js +1796 -0
- package/dist/semantics/normalize/producers/iteration-yield.d.ts +59 -0
- package/dist/semantics/normalize/producers/iteration-yield.js +235 -0
- package/dist/semantics/normalize/producers/jsx.d.ts +3 -0
- package/dist/semantics/normalize/producers/jsx.js +360 -0
- package/dist/semantics/normalize/producers/mint.d.ts +39 -0
- package/dist/semantics/normalize/producers/mint.js +44 -0
- package/dist/semantics/normalize/producers/nullish.d.ts +16 -0
- package/dist/semantics/normalize/producers/nullish.js +27 -0
- package/dist/semantics/normalize/producers/object-assignment.d.ts +8 -0
- package/dist/semantics/normalize/producers/object-assignment.js +204 -0
- package/dist/semantics/normalize/producers/object-tag.d.ts +9 -0
- package/dist/semantics/normalize/producers/object-tag.js +119 -0
- package/dist/semantics/normalize/producers/optional-chain.d.ts +44 -0
- package/dist/semantics/normalize/producers/optional-chain.js +75 -0
- package/dist/semantics/normalize/producers/properties.d.ts +21 -0
- package/dist/semantics/normalize/producers/properties.js +1053 -0
- package/dist/semantics/normalize/producers/protocol.d.ts +67 -0
- package/dist/semantics/normalize/producers/protocol.js +695 -0
- package/dist/semantics/normalize/producers/references.d.ts +53 -0
- package/dist/semantics/normalize/producers/references.js +1027 -0
- package/dist/semantics/normalize/producers/shared.d.ts +561 -0
- package/dist/semantics/normalize/producers/shared.js +1683 -0
- package/dist/semantics/normalize/producers/spread-arguments.d.ts +72 -0
- package/dist/semantics/normalize/producers/spread-arguments.js +375 -0
- package/dist/semantics/normalize/producers/tagged-template.d.ts +5 -0
- package/dist/semantics/normalize/producers/tagged-template.js +307 -0
- package/dist/semantics/normalize/producers/tuple-spread.d.ts +189 -0
- package/dist/semantics/normalize/producers/tuple-spread.js +279 -0
- package/dist/semantics/normalize/property-key-domain.d.ts +36 -0
- package/dist/semantics/normalize/property-key-domain.js +150 -0
- package/dist/semantics/normalize/reachability.d.ts +189 -0
- package/dist/semantics/normalize/reachability.js +1057 -0
- package/dist/semantics/normalize/reassigned-bindings.d.ts +13 -0
- package/dist/semantics/normalize/reassigned-bindings.js +41 -0
- package/dist/semantics/normalize/record-storage-families.d.ts +11 -0
- package/dist/semantics/normalize/record-storage-families.js +109 -0
- package/dist/semantics/normalize/return-bindings.d.ts +260 -0
- package/dist/semantics/normalize/return-bindings.js +1311 -0
- package/dist/semantics/normalize/return-paths.d.ts +2 -0
- package/dist/semantics/normalize/return-paths.js +28 -0
- package/dist/semantics/normalize/script-global-redefinition.d.ts +44 -0
- package/dist/semantics/normalize/script-global-redefinition.js +75 -0
- package/dist/semantics/normalize/specialization.d.ts +201 -0
- package/dist/semantics/normalize/specialization.js +1824 -0
- package/dist/semantics/normalize/structural-array-element.d.ts +176 -0
- package/dist/semantics/normalize/structural-array-element.js +700 -0
- package/dist/semantics/normalize/structural-array-read.d.ts +13 -0
- package/dist/semantics/normalize/structural-array-read.js +124 -0
- package/dist/semantics/normalize/structural-callable.d.ts +12 -0
- package/dist/semantics/normalize/structural-callable.js +82 -0
- package/dist/semantics/normalize/structural-creation-order.d.ts +32 -0
- package/dist/semantics/normalize/structural-creation-order.js +111 -0
- package/dist/semantics/normalize/structural-declarations.d.ts +395 -0
- package/dist/semantics/normalize/structural-declarations.js +968 -0
- package/dist/semantics/normalize/structural-declared-body.d.ts +25 -0
- package/dist/semantics/normalize/structural-declared-body.js +147 -0
- package/dist/semantics/normalize/structural-generics.d.ts +56 -0
- package/dist/semantics/normalize/structural-generics.js +120 -0
- package/dist/semantics/normalize/structural-indexed-access.d.ts +11 -0
- package/dist/semantics/normalize/structural-indexed-access.js +126 -0
- package/dist/semantics/normalize/structural-instantiated-member.d.ts +64 -0
- package/dist/semantics/normalize/structural-instantiated-member.js +407 -0
- package/dist/semantics/normalize/structural-joins.d.ts +44 -0
- package/dist/semantics/normalize/structural-joins.js +143 -0
- package/dist/semantics/normalize/structural-layout-relevance.d.ts +29 -0
- package/dist/semantics/normalize/structural-layout-relevance.js +391 -0
- package/dist/semantics/normalize/structural-layout-type.d.ts +11 -0
- package/dist/semantics/normalize/structural-layout-type.js +1468 -0
- package/dist/semantics/normalize/structural-leaves.d.ts +49 -0
- package/dist/semantics/normalize/structural-leaves.js +125 -0
- package/dist/semantics/normalize/structural-local-union.d.ts +13 -0
- package/dist/semantics/normalize/structural-local-union.js +133 -0
- package/dist/semantics/normalize/structural-members.d.ts +26 -0
- package/dist/semantics/normalize/structural-members.js +84 -0
- package/dist/semantics/normalize/structural-mutable-method.d.ts +15 -0
- package/dist/semantics/normalize/structural-mutable-method.js +109 -0
- package/dist/semantics/normalize/structural-parts.d.ts +131 -0
- package/dist/semantics/normalize/structural-parts.js +737 -0
- package/dist/semantics/normalize/structural-receiver.d.ts +66 -0
- package/dist/semantics/normalize/structural-receiver.js +551 -0
- package/dist/semantics/normalize/structural-rules.d.ts +112 -0
- package/dist/semantics/normalize/structural-rules.js +93 -0
- package/dist/semantics/normalize/structural-self-reference.d.ts +150 -0
- package/dist/semantics/normalize/structural-self-reference.js +494 -0
- package/dist/semantics/normalize/structural.d.ts +202 -0
- package/dist/semantics/normalize/structural.js +4218 -0
- package/dist/semantics/normalize/unreduced-type-form.d.ts +41 -0
- package/dist/semantics/normalize/unreduced-type-form.js +53 -0
- package/dist/semantics/normalize/unresolvable-names.d.ts +56 -0
- package/dist/semantics/normalize/unresolvable-names.js +140 -0
- package/dist/semantics/package-sources.d.ts +16 -0
- package/dist/semantics/package-sources.js +365 -0
- package/dist/semantics/program.d.ts +151 -0
- package/dist/semantics/program.js +667 -0
- package/dist/semantics/prototype-install-source-transform.d.ts +4 -0
- package/dist/semantics/prototype-install-source-transform.js +341 -0
- package/dist/semantics/prototype-object-class-source-transform.d.ts +4 -0
- package/dist/semantics/prototype-object-class-source-transform.js +525 -0
- package/dist/semantics/prototype-reparenting.d.ts +50 -0
- package/dist/semantics/prototype-reparenting.js +317 -0
- package/dist/semantics/stable-checker.d.ts +10 -0
- package/dist/semantics/stable-checker.js +148 -0
- package/dist/semantics/subclass-member-overlay-transform.d.ts +35 -0
- package/dist/semantics/subclass-member-overlay-transform.js +1418 -0
- package/dist/semantics/symbol-keyed-expando-source-transform.d.ts +4 -0
- package/dist/semantics/symbol-keyed-expando-source-transform.js +66 -0
- package/dist/semantics/this-constructor-source-transform.d.ts +4 -0
- package/dist/semantics/this-constructor-source-transform.js +122 -0
- package/dist/semantics/uninstantiable-classes.d.ts +22 -0
- package/dist/semantics/uninstantiable-classes.js +75 -0
- package/dist/targets/cpp/balanced-units.d.ts +3 -0
- package/dist/targets/cpp/balanced-units.js +58 -0
- package/dist/targets/cpp/borrowed-call-entry.d.ts +30 -0
- package/dist/targets/cpp/borrowed-call-entry.js +68 -0
- package/dist/targets/cpp/captures.d.ts +68 -0
- package/dist/targets/cpp/captures.js +269 -0
- package/dist/targets/cpp/class-layout.d.ts +313 -0
- package/dist/targets/cpp/class-layout.js +483 -0
- package/dist/targets/cpp/class-properties/computed-method-value.d.ts +25 -0
- package/dist/targets/cpp/class-properties/computed-method-value.js +22 -0
- package/dist/targets/cpp/class-properties/emit-class-properties.d.ts +216 -0
- package/dist/targets/cpp/class-properties/emit-class-properties.js +917 -0
- package/dist/targets/cpp/class-properties/native-prototype.d.ts +11 -0
- package/dist/targets/cpp/class-properties/native-prototype.js +101 -0
- package/dist/targets/cpp/class-ref-transport.d.ts +12 -0
- package/dist/targets/cpp/class-ref-transport.js +32 -0
- package/dist/targets/cpp/conversions.d.ts +3 -0
- package/dist/targets/cpp/conversions.js +2027 -0
- package/dist/targets/cpp/deferral-safety.d.ts +82 -0
- package/dist/targets/cpp/deferral-safety.js +86 -0
- package/dist/targets/cpp/direct-call-receivers.d.ts +37 -0
- package/dist/targets/cpp/direct-call-receivers.js +79 -0
- package/dist/targets/cpp/document.d.ts +74 -0
- package/dist/targets/cpp/document.js +106 -0
- package/dist/targets/cpp/emit-allocation.d.ts +60 -0
- package/dist/targets/cpp/emit-allocation.js +573 -0
- package/dist/targets/cpp/emit-arrays.d.ts +119 -0
- package/dist/targets/cpp/emit-arrays.js +1047 -0
- package/dist/targets/cpp/emit-binding-reference.d.ts +17 -0
- package/dist/targets/cpp/emit-binding-reference.js +120 -0
- package/dist/targets/cpp/emit-bindings.d.ts +158 -0
- package/dist/targets/cpp/emit-bindings.js +769 -0
- package/dist/targets/cpp/emit-buffers.d.ts +156 -0
- package/dist/targets/cpp/emit-buffers.js +573 -0
- package/dist/targets/cpp/emit-callable.d.ts +230 -0
- package/dist/targets/cpp/emit-callable.js +2154 -0
- package/dist/targets/cpp/emit-carrier-members.d.ts +406 -0
- package/dist/targets/cpp/emit-carrier-members.js +1224 -0
- package/dist/targets/cpp/emit-coercion.d.ts +26 -0
- package/dist/targets/cpp/emit-coercion.js +39 -0
- package/dist/targets/cpp/emit-context.d.ts +1882 -0
- package/dist/targets/cpp/emit-context.js +904 -0
- package/dist/targets/cpp/emit-dynamic-properties.d.ts +174 -0
- package/dist/targets/cpp/emit-dynamic-properties.js +1249 -0
- package/dist/targets/cpp/emit-equality.d.ts +39 -0
- package/dist/targets/cpp/emit-equality.js +472 -0
- package/dist/targets/cpp/emit-exceptions.d.ts +104 -0
- package/dist/targets/cpp/emit-exceptions.js +513 -0
- package/dist/targets/cpp/emit-field-owner.d.ts +4 -0
- package/dist/targets/cpp/emit-field-owner.js +27 -0
- package/dist/targets/cpp/emit-in.d.ts +31 -0
- package/dist/targets/cpp/emit-in.js +426 -0
- package/dist/targets/cpp/emit-instanceof.d.ts +19 -0
- package/dist/targets/cpp/emit-instanceof.js +601 -0
- package/dist/targets/cpp/emit-integers.d.ts +68 -0
- package/dist/targets/cpp/emit-integers.js +184 -0
- package/dist/targets/cpp/emit-iterator.d.ts +100 -0
- package/dist/targets/cpp/emit-iterator.js +1137 -0
- package/dist/targets/cpp/emit-json.d.ts +73 -0
- package/dist/targets/cpp/emit-json.js +823 -0
- package/dist/targets/cpp/emit-jsx.d.ts +74 -0
- package/dist/targets/cpp/emit-jsx.js +806 -0
- package/dist/targets/cpp/emit-mixed-binary.d.ts +51 -0
- package/dist/targets/cpp/emit-mixed-binary.js +60 -0
- package/dist/targets/cpp/emit-namespaces.d.ts +101 -0
- package/dist/targets/cpp/emit-namespaces.js +133 -0
- package/dist/targets/cpp/emit-narrowing.d.ts +738 -0
- package/dist/targets/cpp/emit-narrowing.js +3967 -0
- package/dist/targets/cpp/emit-native-equality.d.ts +3 -0
- package/dist/targets/cpp/emit-native-equality.js +14 -0
- package/dist/targets/cpp/emit-native-selection.d.ts +5 -0
- package/dist/targets/cpp/emit-native-selection.js +37 -0
- package/dist/targets/cpp/emit-object-tag.d.ts +4 -0
- package/dist/targets/cpp/emit-object-tag.js +108 -0
- package/dist/targets/cpp/emit-owned-record.d.ts +2 -0
- package/dist/targets/cpp/emit-owned-record.js +15 -0
- package/dist/targets/cpp/emit-presence.d.ts +78 -0
- package/dist/targets/cpp/emit-presence.js +376 -0
- package/dist/targets/cpp/emit-properties.d.ts +105 -0
- package/dist/targets/cpp/emit-properties.js +1640 -0
- package/dist/targets/cpp/emit-record-view.d.ts +20 -0
- package/dist/targets/cpp/emit-record-view.js +354 -0
- package/dist/targets/cpp/emit-return.d.ts +5 -0
- package/dist/targets/cpp/emit-return.js +237 -0
- package/dist/targets/cpp/emit-sum-widening.d.ts +10 -0
- package/dist/targets/cpp/emit-sum-widening.js +69 -0
- package/dist/targets/cpp/emit-tonumber.d.ts +38 -0
- package/dist/targets/cpp/emit-tonumber.js +177 -0
- package/dist/targets/cpp/emit-tostring.d.ts +92 -0
- package/dist/targets/cpp/emit-tostring.js +556 -0
- package/dist/targets/cpp/emit-typeof.d.ts +49 -0
- package/dist/targets/cpp/emit-typeof.js +317 -0
- package/dist/targets/cpp/emit-union-properties.d.ts +181 -0
- package/dist/targets/cpp/emit-union-properties.js +1281 -0
- package/dist/targets/cpp/emit.d.ts +45 -0
- package/dist/targets/cpp/emit.js +2225 -0
- package/dist/targets/cpp/error-types.d.ts +4 -0
- package/dist/targets/cpp/error-types.js +11 -0
- package/dist/targets/cpp/function-source-reads.d.ts +72 -0
- package/dist/targets/cpp/function-source-reads.js +148 -0
- package/dist/targets/cpp/host/atomics.d.ts +25 -0
- package/dist/targets/cpp/host/atomics.js +63 -0
- package/dist/targets/cpp/host/core-globals.d.ts +108 -0
- package/dist/targets/cpp/host/core-globals.js +158 -0
- package/dist/targets/cpp/host/dynamic-argument-members.d.ts +42 -0
- package/dist/targets/cpp/host/dynamic-argument-members.js +61 -0
- package/dist/targets/cpp/host/emit-host-arity.d.ts +139 -0
- package/dist/targets/cpp/host/emit-host-arity.js +232 -0
- package/dist/targets/cpp/host/emit-host-invoke.d.ts +91 -0
- package/dist/targets/cpp/host/emit-host-invoke.js +1105 -0
- package/dist/targets/cpp/host/emit-host-object.d.ts +55 -0
- package/dist/targets/cpp/host/emit-host-object.js +2206 -0
- package/dist/targets/cpp/host/emit-host-properties.d.ts +69 -0
- package/dist/targets/cpp/host/emit-host-properties.js +533 -0
- package/dist/targets/cpp/host/emit-host-reflect.d.ts +4 -0
- package/dist/targets/cpp/host/emit-host-reflect.js +180 -0
- package/dist/targets/cpp/host/emit-host-value.d.ts +120 -0
- package/dist/targets/cpp/host/emit-host-value.js +392 -0
- package/dist/targets/cpp/host/host-members.d.ts +505 -0
- package/dist/targets/cpp/host/host-members.js +819 -0
- package/dist/targets/cpp/host/host-method-aliases.d.ts +30 -0
- package/dist/targets/cpp/host/host-method-aliases.js +76 -0
- package/dist/targets/cpp/host/native-protocols.d.ts +47 -0
- package/dist/targets/cpp/host/native-protocols.js +183 -0
- package/dist/targets/cpp/host/object-protocol.d.ts +351 -0
- package/dist/targets/cpp/host/object-protocol.js +671 -0
- package/dist/targets/cpp/host-namespace-reads.d.ts +83 -0
- package/dist/targets/cpp/host-namespace-reads.js +113 -0
- package/dist/targets/cpp/manifest/capabilities.d.ts +39 -0
- package/dist/targets/cpp/manifest/capabilities.js +1484 -0
- package/dist/targets/cpp/manifest.d.ts +23 -0
- package/dist/targets/cpp/manifest.js +113 -0
- package/dist/targets/cpp/native-error-base.d.ts +38 -0
- package/dist/targets/cpp/native-error-base.js +74 -0
- package/dist/targets/cpp/native-narrowing-transport.d.ts +12 -0
- package/dist/targets/cpp/native-narrowing-transport.js +151 -0
- package/dist/targets/cpp/native-selection-helpers.d.ts +11 -0
- package/dist/targets/cpp/native-selection-helpers.js +46 -0
- package/dist/targets/cpp/native-symbol-keys.d.ts +8 -0
- package/dist/targets/cpp/native-symbol-keys.js +34 -0
- package/dist/targets/cpp/ownership.d.ts +43 -0
- package/dist/targets/cpp/ownership.js +38 -0
- package/dist/targets/cpp/owning-conversion-input.d.ts +14 -0
- package/dist/targets/cpp/owning-conversion-input.js +12 -0
- package/dist/targets/cpp/property-read-claims.d.ts +62 -0
- package/dist/targets/cpp/property-read-claims.js +23 -0
- package/dist/targets/cpp/property-store-claims.d.ts +62 -0
- package/dist/targets/cpp/property-store-claims.js +26 -0
- package/dist/targets/cpp/prototype/emit-prototype-array.d.ts +111 -0
- package/dist/targets/cpp/prototype/emit-prototype-array.js +602 -0
- package/dist/targets/cpp/prototype/emit-prototype-date.d.ts +133 -0
- package/dist/targets/cpp/prototype/emit-prototype-date.js +515 -0
- package/dist/targets/cpp/prototype/emit-prototype-error.d.ts +13 -0
- package/dist/targets/cpp/prototype/emit-prototype-error.js +54 -0
- package/dist/targets/cpp/prototype/emit-prototype-invoke.d.ts +34 -0
- package/dist/targets/cpp/prototype/emit-prototype-invoke.js +1003 -0
- package/dist/targets/cpp/prototype/emit-prototype-iterator.d.ts +47 -0
- package/dist/targets/cpp/prototype/emit-prototype-iterator.js +250 -0
- package/dist/targets/cpp/prototype/emit-prototype-promise.d.ts +46 -0
- package/dist/targets/cpp/prototype/emit-prototype-promise.js +143 -0
- package/dist/targets/cpp/prototype/emit-prototype-regexp.d.ts +335 -0
- package/dist/targets/cpp/prototype/emit-prototype-regexp.js +853 -0
- package/dist/targets/cpp/prototype/emit-prototype-string.d.ts +42 -0
- package/dist/targets/cpp/prototype/emit-prototype-string.js +252 -0
- package/dist/targets/cpp/prototype/prototype-method-reads.d.ts +25 -0
- package/dist/targets/cpp/prototype/prototype-method-reads.js +182 -0
- package/dist/targets/cpp/reactive-dependencies.d.ts +140 -0
- package/dist/targets/cpp/reactive-dependencies.js +432 -0
- package/dist/targets/cpp/reactive-origins.d.ts +44 -0
- package/dist/targets/cpp/reactive-origins.js +82 -0
- package/dist/targets/cpp/records.d.ts +277 -0
- package/dist/targets/cpp/records.js +2427 -0
- package/dist/targets/cpp/recursive-containers.d.ts +43 -0
- package/dist/targets/cpp/recursive-containers.js +144 -0
- package/dist/targets/cpp/regexp-types.d.ts +56 -0
- package/dist/targets/cpp/regexp-types.js +59 -0
- package/dist/targets/cpp/substrate.d.ts +125 -0
- package/dist/targets/cpp/substrate.js +12 -0
- package/dist/targets/cpp/translation-unit.d.ts +219 -0
- package/dist/targets/cpp/translation-unit.js +2063 -0
- package/dist/targets/cpp/types.d.ts +280 -0
- package/dist/targets/cpp/types.js +1135 -0
- package/dist/targets/cpp/virtual-methods.d.ts +95 -0
- package/dist/targets/cpp/virtual-methods.js +264 -0
- package/package.json +95 -0
- package/src/targets/cpp/runtime/gea_dynamic_proxy.h +824 -0
- package/src/targets/cpp/runtime/gea_eval.h +1376 -0
- package/src/targets/cpp/runtime/gea_native_class_prototype.h +44 -0
- package/src/targets/cpp/runtime/gea_runtime.h +29222 -0
- package/src/targets/cpp/runtime/gea_runtime_builtins.cpp +55 -0
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import ts from 'typescript';
|
|
2
|
+
/**
|
|
3
|
+
* The host effect contract: what a BODILESS host declaration states about the
|
|
4
|
+
* native implementation behind it.
|
|
5
|
+
*
|
|
6
|
+
* A `declare function` has no body for the host-mutation census to read, so
|
|
7
|
+
* a call to one was an unknown callee, and handing it any value the census
|
|
8
|
+
* could not prove non-global wildcarded every host binding and every
|
|
9
|
+
* intrinsic prototype. The native WebGL upload functions only read the bytes
|
|
10
|
+
* of the typed array they are given; nothing in the program could say so.
|
|
11
|
+
*
|
|
12
|
+
* `@gea-host-inert` on the declaration says so. It states, for the native
|
|
13
|
+
* implementation, all of:
|
|
14
|
+
*
|
|
15
|
+
* - it does not retain any argument, or anything reachable from one, past
|
|
16
|
+
* the call;
|
|
17
|
+
* - it does not write, define, delete or re-prototype a property of any
|
|
18
|
+
* JavaScript object -- the global object, an intrinsic, or an argument;
|
|
19
|
+
* - it does not invoke program code (no callbacks, no accessors).
|
|
20
|
+
*
|
|
21
|
+
* Only the declaration can carry it, and only a declaration with no body:
|
|
22
|
+
* a body is censused like any other code, and a contract beside one would be
|
|
23
|
+
* a second, unverifiable authority. It is trusted the way every native
|
|
24
|
+
* declaration's signature is trusted -- which is exactly why it is narrow,
|
|
25
|
+
* explicit per declaration, and never inferred.
|
|
26
|
+
*/
|
|
27
|
+
export declare const hostInertTagName = "gea-host-inert";
|
|
28
|
+
/** This one declaration states the inert host contract. */
|
|
29
|
+
export declare const declarationStatesHostInert: (declaration: ts.Declaration) => boolean;
|
|
30
|
+
/**
|
|
31
|
+
* Every declaration of the symbol states the contract. An overload or merged
|
|
32
|
+
* declaration without it is a callee the contract does not cover, and a
|
|
33
|
+
* single uncovered declaration refuses the whole symbol.
|
|
34
|
+
*/
|
|
35
|
+
export declare const symbolStatesHostInert: (symbol: ts.Symbol | undefined) => boolean;
|
|
36
|
+
/**
|
|
37
|
+
* The SECOND, narrower host effect contract: `@gea-host-no-property-writes`.
|
|
38
|
+
*
|
|
39
|
+
* `@gea-host-inert` states three things at once, and a native that breaks any
|
|
40
|
+
* one of them can carry none of it. Measured on `hono-hello`: of the natives
|
|
41
|
+
* whose calls hold the global host-mutation census open, every single one
|
|
42
|
+
* breaks a clause the census was not asking about --
|
|
43
|
+
* `__gea_node_timer_start_timeout` and `__gea_http_serve` retain a callback
|
|
44
|
+
* and later run it, `__gea_node_net_read` returns a fresh Buffer -- while none
|
|
45
|
+
* of them writes a property on anything.
|
|
46
|
+
*
|
|
47
|
+
* So this states ONLY the middle clause: the native does not write, define,
|
|
48
|
+
* delete or re-prototype a property of any JavaScript object -- the global
|
|
49
|
+
* object, an intrinsic, an argument, or anything reachable from one. It says
|
|
50
|
+
* nothing about retention, and nothing about invoking program code: a native
|
|
51
|
+
* MAY store an argument and MAY call back into the program, because the
|
|
52
|
+
* writes that callback performs are censused where that callback is WRITTEN,
|
|
53
|
+
* which is the whole argument the argument stamp rests on.
|
|
54
|
+
*
|
|
55
|
+
* Building and returning a NEW object is not a write under this contract: the
|
|
56
|
+
* object did not exist for the program to observe, and installing its own
|
|
57
|
+
* initial keys changes nothing the program already held. `__gea_node_net_read`
|
|
58
|
+
* returning a Buffer and `__gea_node_process_env` returning a fresh record
|
|
59
|
+
* both qualify.
|
|
60
|
+
*
|
|
61
|
+
* Consumed at exactly one place -- the census's unknown-callee ARGUMENT stamp,
|
|
62
|
+
* whose only question is which keys a callee can put on the intrinsics its
|
|
63
|
+
* arguments reach. Every other consumer of a host contract keeps asking for
|
|
64
|
+
* the full `@gea-host-inert`, because retention and re-entry matter to them.
|
|
65
|
+
*/
|
|
66
|
+
export declare const hostNoPropertyWritesTagName = "gea-host-no-property-writes";
|
|
67
|
+
/** This one declaration states the no-property-writes contract. */
|
|
68
|
+
export declare const declarationStatesNoPropertyWrites: (declaration: ts.Declaration) => boolean;
|
|
69
|
+
/**
|
|
70
|
+
* Every declaration states one of the two contracts. `@gea-host-inert` is
|
|
71
|
+
* strictly stronger, so a symbol whose declarations mix the two still writes
|
|
72
|
+
* no property; one declaration carrying neither refuses the whole symbol, for
|
|
73
|
+
* the same reason it does above.
|
|
74
|
+
*/
|
|
75
|
+
export declare const symbolWritesNoHostProperty: (symbol: ts.Symbol | undefined) => boolean;
|
|
76
|
+
/** Does this symbol name one of those? Asked of every declaration: one match is enough. */
|
|
77
|
+
export declare const symbolIsStandardLibraryMutator: (symbol: ts.Symbol | undefined) => boolean;
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
import ts from 'typescript';
|
|
2
|
+
import { isAmbientDeclaration } from '../ambient.js';
|
|
3
|
+
/**
|
|
4
|
+
* The host effect contract: what a BODILESS host declaration states about the
|
|
5
|
+
* native implementation behind it.
|
|
6
|
+
*
|
|
7
|
+
* A `declare function` has no body for the host-mutation census to read, so
|
|
8
|
+
* a call to one was an unknown callee, and handing it any value the census
|
|
9
|
+
* could not prove non-global wildcarded every host binding and every
|
|
10
|
+
* intrinsic prototype. The native WebGL upload functions only read the bytes
|
|
11
|
+
* of the typed array they are given; nothing in the program could say so.
|
|
12
|
+
*
|
|
13
|
+
* `@gea-host-inert` on the declaration says so. It states, for the native
|
|
14
|
+
* implementation, all of:
|
|
15
|
+
*
|
|
16
|
+
* - it does not retain any argument, or anything reachable from one, past
|
|
17
|
+
* the call;
|
|
18
|
+
* - it does not write, define, delete or re-prototype a property of any
|
|
19
|
+
* JavaScript object -- the global object, an intrinsic, or an argument;
|
|
20
|
+
* - it does not invoke program code (no callbacks, no accessors).
|
|
21
|
+
*
|
|
22
|
+
* Only the declaration can carry it, and only a declaration with no body:
|
|
23
|
+
* a body is censused like any other code, and a contract beside one would be
|
|
24
|
+
* a second, unverifiable authority. It is trusted the way every native
|
|
25
|
+
* declaration's signature is trusted -- which is exactly why it is narrow,
|
|
26
|
+
* explicit per declaration, and never inferred.
|
|
27
|
+
*/
|
|
28
|
+
export const hostInertTagName = 'gea-host-inert';
|
|
29
|
+
const isBodilessCallableDeclaration = (declaration) => ((ts.isFunctionDeclaration(declaration) || ts.isMethodDeclaration(declaration)) && declaration.body === undefined) ||
|
|
30
|
+
ts.isMethodSignature(declaration) ||
|
|
31
|
+
(ts.isSetAccessorDeclaration(declaration) && declaration.body === undefined);
|
|
32
|
+
/** This one declaration states the inert host contract. */
|
|
33
|
+
export const declarationStatesHostInert = (declaration) => isBodilessCallableDeclaration(declaration) &&
|
|
34
|
+
isAmbientDeclaration(declaration) &&
|
|
35
|
+
ts.getJSDocTags(declaration).some((tag) => tag.tagName.text === hostInertTagName);
|
|
36
|
+
/**
|
|
37
|
+
* Every declaration of the symbol states the contract. An overload or merged
|
|
38
|
+
* declaration without it is a callee the contract does not cover, and a
|
|
39
|
+
* single uncovered declaration refuses the whole symbol.
|
|
40
|
+
*/
|
|
41
|
+
export const symbolStatesHostInert = (symbol) => {
|
|
42
|
+
const declarations = symbol?.declarations ?? [];
|
|
43
|
+
return declarations.length > 0 && declarations.every(declarationStatesHostInert);
|
|
44
|
+
};
|
|
45
|
+
/**
|
|
46
|
+
* The SECOND, narrower host effect contract: `@gea-host-no-property-writes`.
|
|
47
|
+
*
|
|
48
|
+
* `@gea-host-inert` states three things at once, and a native that breaks any
|
|
49
|
+
* one of them can carry none of it. Measured on `hono-hello`: of the natives
|
|
50
|
+
* whose calls hold the global host-mutation census open, every single one
|
|
51
|
+
* breaks a clause the census was not asking about --
|
|
52
|
+
* `__gea_node_timer_start_timeout` and `__gea_http_serve` retain a callback
|
|
53
|
+
* and later run it, `__gea_node_net_read` returns a fresh Buffer -- while none
|
|
54
|
+
* of them writes a property on anything.
|
|
55
|
+
*
|
|
56
|
+
* So this states ONLY the middle clause: the native does not write, define,
|
|
57
|
+
* delete or re-prototype a property of any JavaScript object -- the global
|
|
58
|
+
* object, an intrinsic, an argument, or anything reachable from one. It says
|
|
59
|
+
* nothing about retention, and nothing about invoking program code: a native
|
|
60
|
+
* MAY store an argument and MAY call back into the program, because the
|
|
61
|
+
* writes that callback performs are censused where that callback is WRITTEN,
|
|
62
|
+
* which is the whole argument the argument stamp rests on.
|
|
63
|
+
*
|
|
64
|
+
* Building and returning a NEW object is not a write under this contract: the
|
|
65
|
+
* object did not exist for the program to observe, and installing its own
|
|
66
|
+
* initial keys changes nothing the program already held. `__gea_node_net_read`
|
|
67
|
+
* returning a Buffer and `__gea_node_process_env` returning a fresh record
|
|
68
|
+
* both qualify.
|
|
69
|
+
*
|
|
70
|
+
* Consumed at exactly one place -- the census's unknown-callee ARGUMENT stamp,
|
|
71
|
+
* whose only question is which keys a callee can put on the intrinsics its
|
|
72
|
+
* arguments reach. Every other consumer of a host contract keeps asking for
|
|
73
|
+
* the full `@gea-host-inert`, because retention and re-entry matter to them.
|
|
74
|
+
*/
|
|
75
|
+
export const hostNoPropertyWritesTagName = 'gea-host-no-property-writes';
|
|
76
|
+
/** This one declaration states the no-property-writes contract. */
|
|
77
|
+
export const declarationStatesNoPropertyWrites = (declaration) => isBodilessCallableDeclaration(declaration) &&
|
|
78
|
+
isAmbientDeclaration(declaration) &&
|
|
79
|
+
ts.getJSDocTags(declaration).some((tag) => tag.tagName.text === hostNoPropertyWritesTagName);
|
|
80
|
+
/**
|
|
81
|
+
* Every declaration states one of the two contracts. `@gea-host-inert` is
|
|
82
|
+
* strictly stronger, so a symbol whose declarations mix the two still writes
|
|
83
|
+
* no property; one declaration carrying neither refuses the whole symbol, for
|
|
84
|
+
* the same reason it does above.
|
|
85
|
+
*/
|
|
86
|
+
export const symbolWritesNoHostProperty = (symbol) => {
|
|
87
|
+
const declarations = symbol?.declarations ?? [];
|
|
88
|
+
return (declarations.length > 0 &&
|
|
89
|
+
declarations.every((declaration) => declarationStatesHostInert(declaration) || declarationStatesNoPropertyWrites(declaration)));
|
|
90
|
+
};
|
|
91
|
+
/**
|
|
92
|
+
* The standard-library callables ECMA-262 specifies to create, delete or
|
|
93
|
+
* redefine a property on an object reachable from their arguments or `this`.
|
|
94
|
+
*
|
|
95
|
+
* A library callable that escapes as a VALUE -- `.filter( Boolean )`,
|
|
96
|
+
* `const decoder = decodeURIComponent`, `emitter.on( 'x', console.error )` --
|
|
97
|
+
* is not a reason to distrust an intrinsic. These are spec-defined functions
|
|
98
|
+
* whose behaviour this compiler already relies on everywhere it says
|
|
99
|
+
* "intrinsic", and outside this list none of them writes a program-visible
|
|
100
|
+
* key: the most any of them does is RUN program code (a callback, an
|
|
101
|
+
* accessor, a `toJSON`), which is censused where that code is written. Only
|
|
102
|
+
* the ones below can install a key themselves, and the census's own
|
|
103
|
+
* reflection-mutator list is this table's seed.
|
|
104
|
+
*
|
|
105
|
+
* Keyed by DECLARING INTERFACE and member so that `Console.error` can never
|
|
106
|
+
* be confused with a mutator of the same spelling, with `''` for the global
|
|
107
|
+
* function declarations that have no interface. This is a statement about the
|
|
108
|
+
* standard library, which is one fixed, versioned text; it is NOT the host
|
|
109
|
+
* contract. `@gea-host-inert` stays per declaration and never inferred,
|
|
110
|
+
* because a host native's behaviour is stated by whoever wrote the native.
|
|
111
|
+
*/
|
|
112
|
+
const LIBRARY_MUTATOR_MEMBERS = new Map([
|
|
113
|
+
['ObjectConstructor', new Set(['assign', 'defineProperty', 'defineProperties', 'setPrototypeOf', 'freeze', 'seal', 'preventExtensions'])],
|
|
114
|
+
['Reflect', new Set(['set', 'defineProperty', 'deleteProperty', 'setPrototypeOf', 'preventExtensions', 'apply', 'construct'])],
|
|
115
|
+
['Array', new Set(['push', 'pop', 'shift', 'unshift', 'splice', 'sort', 'reverse', 'fill', 'copyWithin'])],
|
|
116
|
+
['Function', new Set(['call', 'apply', 'bind'])],
|
|
117
|
+
['CallableFunction', new Set(['call', 'apply', 'bind'])],
|
|
118
|
+
['NewableFunction', new Set(['call', 'apply', 'bind'])],
|
|
119
|
+
['', new Set(['eval', 'Function'])]
|
|
120
|
+
]);
|
|
121
|
+
const TYPED_ARRAY_MUTATORS = new Set(['set', 'sort', 'reverse', 'fill', 'copyWithin']);
|
|
122
|
+
const TYPED_ARRAY_INTERFACE = /^(Int8|Uint8|Uint8Clamped|Int16|Uint16|Int32|Uint32|Float16|Float32|Float64|BigInt64|BigUint64)Array$/;
|
|
123
|
+
const declaringInterfaceName = (declaration) => {
|
|
124
|
+
const owner = declaration.parent;
|
|
125
|
+
if (owner && (ts.isInterfaceDeclaration(owner) || ts.isClassDeclaration(owner)))
|
|
126
|
+
return owner.name?.text ?? '';
|
|
127
|
+
if (owner && ts.isModuleBlock(owner) && ts.isModuleDeclaration(owner.parent))
|
|
128
|
+
return owner.parent.name.getText();
|
|
129
|
+
if (owner && ts.isModuleDeclaration(owner))
|
|
130
|
+
return owner.name.getText();
|
|
131
|
+
return '';
|
|
132
|
+
};
|
|
133
|
+
/** Does this symbol name one of those? Asked of every declaration: one match is enough. */
|
|
134
|
+
export const symbolIsStandardLibraryMutator = (symbol) => (symbol?.declarations ?? []).some((declaration) => {
|
|
135
|
+
const member = declaration.name;
|
|
136
|
+
const name = member && (ts.isIdentifier(member) || ts.isStringLiteralLike(member)) ? member.text : symbol?.getName();
|
|
137
|
+
if (name === undefined)
|
|
138
|
+
return false;
|
|
139
|
+
const owner = declaringInterfaceName(declaration);
|
|
140
|
+
if (TYPED_ARRAY_INTERFACE.test(owner))
|
|
141
|
+
return TYPED_ARRAY_MUTATORS.has(name);
|
|
142
|
+
return LIBRARY_MUTATOR_MEMBERS.get(owner)?.has(name) === true;
|
|
143
|
+
});
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import type ts from 'typescript';
|
|
2
|
+
import type { ValueFlowIndex } from './flow/model.js';
|
|
3
|
+
import { type ComputedKeySetAuthority } from './flow/computed-key-set.js';
|
|
4
|
+
import { type IntrinsicProtocolRequirement } from './deferred-intrinsic-protocols.js';
|
|
5
|
+
/**
|
|
6
|
+
* A computed write key the host-mutation census may narrow from `every` to a
|
|
7
|
+
* finite set -- three's `this[ key ] = newValue` under `for ( const key in
|
|
8
|
+
* values )` in `Material.setValues` and `Texture.setValues`.
|
|
9
|
+
*
|
|
10
|
+
* `computedKeySetOf` proves the set under intrinsic assumptions. The census
|
|
11
|
+
* cannot publish those as ledger obligations (a failed one would be a
|
|
12
|
+
* certification diagnostic, where a refused key set only costs precision),
|
|
13
|
+
* so it takes them as data and checks them against its own final result:
|
|
14
|
+
*
|
|
15
|
+
* - "Object.prototype has no enumerable key" (the `for-in` arm) is an
|
|
16
|
+
* INDUCTIVE invariant the census proves itself. The only enumerable keys
|
|
17
|
+
* Object.prototype can have are keys this program wrote on it -- through a
|
|
18
|
+
* receiver that may be any intrinsic, or on Object.prototype itself -- so
|
|
19
|
+
* the census adds every such key to the set, re-running until that set of
|
|
20
|
+
* keys stops growing. Nothing here assumes the receiver of the write is
|
|
21
|
+
* anything in particular: the census proves that side independently.
|
|
22
|
+
* - `Object.keys` and the Array iteration protocol are per-key requirements
|
|
23
|
+
* the census discharges against its own taint; a failed one re-runs the
|
|
24
|
+
* census with every computed key unknown.
|
|
25
|
+
* - Anything the key-set proof registers on the flow's ledger by itself is
|
|
26
|
+
* captured here, never published, and checked the same way.
|
|
27
|
+
* @semanticCategory generic-primitive
|
|
28
|
+
*/
|
|
29
|
+
export interface CensusComputedKeys {
|
|
30
|
+
/** Every key the expression can evaluate to, apart from Object.prototype's inherited enumerable keys. */
|
|
31
|
+
readonly keys: ReadonlySet<string>;
|
|
32
|
+
/** The set also holds every enumerable key Object.prototype may carry (a `for-in` binding). */
|
|
33
|
+
readonly inheritsObjectPrototypeKeys: boolean;
|
|
34
|
+
/** Intrinsic obligations the proof assumed; the census checks them against its own result. */
|
|
35
|
+
readonly requirements: readonly IntrinsicProtocolRequirement[];
|
|
36
|
+
}
|
|
37
|
+
export type CensusComputedKeysOf = (key: ts.Expression) => CensusComputedKeys | null;
|
|
38
|
+
export declare const createCensusComputedKeysOf: (checker: ts.TypeChecker, flow: ValueFlowIndex, authority: Omit<ComputedKeySetAuthority, "intrinsicIntact">) => CensusComputedKeysOf;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { arrayIterationKeys, computedKeySetOf } from './flow/computed-key-set.js';
|
|
2
|
+
import { deferredIntrinsicProtocolLedgerOf } from './deferred-intrinsic-protocols.js';
|
|
3
|
+
export const createCensusComputedKeysOf = (checker, flow, authority) => {
|
|
4
|
+
const ledger = deferredIntrinsicProtocolLedgerOf(flow);
|
|
5
|
+
return (key) => {
|
|
6
|
+
let inherits = false;
|
|
7
|
+
const assumed = [];
|
|
8
|
+
const work = () => computedKeySetOf(checker, flow, key, {
|
|
9
|
+
...authority,
|
|
10
|
+
checker,
|
|
11
|
+
intrinsicIntact: (intrinsic, member, location) => {
|
|
12
|
+
if (intrinsic === 'Object' && member === undefined)
|
|
13
|
+
inherits = true;
|
|
14
|
+
else if (intrinsic === 'Object')
|
|
15
|
+
assumed.push({ intrinsic, member: member, location });
|
|
16
|
+
else
|
|
17
|
+
assumed.push({ intrinsic, prototypeKeys: arrayIterationKeys, location });
|
|
18
|
+
return true;
|
|
19
|
+
}
|
|
20
|
+
});
|
|
21
|
+
const run = ledger ? ledger.capture(work) : { value: work(), requirements: [] };
|
|
22
|
+
if (run.value === null)
|
|
23
|
+
return null;
|
|
24
|
+
return { keys: run.value, inheritsObjectPrototypeKeys: inherits, requirements: [...assumed, ...run.requirements] };
|
|
25
|
+
};
|
|
26
|
+
};
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import ts from 'typescript';
|
|
2
|
+
import { type MutationKey } from './host-mutation-keys.js';
|
|
3
|
+
/** `__proto__` is never an ordinary key: a [[Set]] of it runs the accessor that replaces a prototype. */
|
|
4
|
+
export declare const keyOfName: (name: string) => MutationKey;
|
|
5
|
+
/**
|
|
6
|
+
* Whether a key expression is a PROGRAM-DECLARED unique symbol -- one this
|
|
7
|
+
* program made with `Symbol()`, not one the standard library declares on
|
|
8
|
+
* `SymbolConstructor`.
|
|
9
|
+
*
|
|
10
|
+
* Such a key names NOTHING this census models. A symbol is not a string and
|
|
11
|
+
* never converts to one implicitly, so it can touch no string-named
|
|
12
|
+
* obligation; and symbol-keyed obligations are spelled `@@iterator` after the
|
|
13
|
+
* WELL-KNOWN symbols, which a program-declared one can never be. So the write
|
|
14
|
+
* is invisible to every question the census asks -- which is why
|
|
15
|
+
* `keysOfKeyExpression` answers it with no keys at all rather than `every`.
|
|
16
|
+
*
|
|
17
|
+
* ⛔ Standard-library-declared is the whole guard, in both directions.
|
|
18
|
+
* `X.prototype[Symbol.iterator] = f` genuinely redefines intrinsic behavior
|
|
19
|
+
* under a non-string key, so it must stay `every`. A bare `symbol`-typed key
|
|
20
|
+
* (not `unique`) names an unknown symbol and fails closed the same way.
|
|
21
|
+
*
|
|
22
|
+
* The unique-symbol TYPE is sound to trust here in a way a string-literal type
|
|
23
|
+
* is not (see `createMutationKeyReader`'s own note): a `unique symbol` type is
|
|
24
|
+
* inhabited by exactly one value by construction, and there is no widening
|
|
25
|
+
* conversion into it the way an `any` widens into a `'a' | 'b'` slot.
|
|
26
|
+
*/
|
|
27
|
+
export declare const isProgramDeclaredSymbolKey: (type: ts.Type) => boolean;
|
|
28
|
+
/**
|
|
29
|
+
* Which keys a write names, for the host-mutation census.
|
|
30
|
+
*
|
|
31
|
+
* Every answer here is a SUPERSET of the keys the write can reach at run
|
|
32
|
+
* time; `every` is the answer whenever this reader cannot prove less. Three
|
|
33
|
+
* sources are trusted and nothing else:
|
|
34
|
+
*
|
|
35
|
+
* - the syntax: a property name, a string literal, a numeric literal (whose
|
|
36
|
+
* key is its canonical `ToString`, so `o[1.50]` is "1.5");
|
|
37
|
+
* - the number representation: an expression the checker types as `number`
|
|
38
|
+
* (or a number literal type, or a numeric enum) is carried as a native
|
|
39
|
+
* double, so its key is some `ToString(Number)` -- the NUMERIC domain, not
|
|
40
|
+
* an array index, since `-1`, `1.5` and `NaN` are numbers too.
|
|
41
|
+
* - the boolean representation: an expression the checker types as `boolean`
|
|
42
|
+
* is carried as a native two-state scalar, so its key is exactly "true" or
|
|
43
|
+
* "false" (`ToPropertyKey` of a boolean is `ToString(Boolean)`).
|
|
44
|
+
*
|
|
45
|
+
* A string-literal TYPE is deliberately not trusted: nothing in the compiled
|
|
46
|
+
* representation stops an `any` from carrying "zzz" into a cell typed `'a'`.
|
|
47
|
+
* A caller-supplied `computedKeysOf` authority may prove a finite key set;
|
|
48
|
+
* that is its claim to justify, and `null` from it keeps the key unknown.
|
|
49
|
+
* (The census's own authority is `host-mutation-computed-keys.ts`.)
|
|
50
|
+
*/
|
|
51
|
+
export declare const createMutationKeyReader: (checker: ts.TypeChecker, computedKeysOf: (key: ts.Expression) => readonly MutationKey[] | null, publishedTypeAt?: (key: ts.Expression) => ts.Type) => {
|
|
52
|
+
readonly keysOfKeyExpression: (expression: ts.Expression | undefined) => readonly MutationKey[];
|
|
53
|
+
readonly keysOfAccess: (access: ts.PropertyAccessExpression | ts.ElementAccessExpression) => readonly MutationKey[];
|
|
54
|
+
readonly keysOfPropertyName: (name: ts.PropertyName) => readonly MutationKey[];
|
|
55
|
+
};
|
|
56
|
+
/**
|
|
57
|
+
* Keys a host or library ACCESSOR owns. A write of such a key through an
|
|
58
|
+
* unknown receiver may run that accessor, whose effect no body states, so
|
|
59
|
+
* the census treats the key as unknown. `__proto__` is always one: it is
|
|
60
|
+
* `Object.prototype`'s accessor, which the standard library does not
|
|
61
|
+
* declare, and running it replaces a prototype.
|
|
62
|
+
*
|
|
63
|
+
* A setter covered by `@gea-host-inert` states its effect and is not listed;
|
|
64
|
+
* a key is listed when ANY declaration of a setter by that name is uncovered.
|
|
65
|
+
*/
|
|
66
|
+
export declare const hostAccessorNamesOf: (declarationFiles: readonly ts.SourceFile[], files: readonly ts.SourceFile[]) => ReadonlySet<string>;
|
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
import ts from 'typescript';
|
|
2
|
+
import { isAmbientDeclaration } from '../ambient.js';
|
|
3
|
+
import { unwrapErasedExpression } from './producers/erasure.js';
|
|
4
|
+
import { declarationStatesHostInert } from './host-effect-contracts.js';
|
|
5
|
+
import { everyKey, namedKey, numericKeys, numericLiteralKey } from './host-mutation-keys.js';
|
|
6
|
+
/** `__proto__` is never an ordinary key: a [[Set]] of it runs the accessor that replaces a prototype. */
|
|
7
|
+
export const keyOfName = (name) => (name === '__proto__' ? everyKey : namedKey(name));
|
|
8
|
+
/**
|
|
9
|
+
* Whether a key expression is a PROGRAM-DECLARED unique symbol -- one this
|
|
10
|
+
* program made with `Symbol()`, not one the standard library declares on
|
|
11
|
+
* `SymbolConstructor`.
|
|
12
|
+
*
|
|
13
|
+
* Such a key names NOTHING this census models. A symbol is not a string and
|
|
14
|
+
* never converts to one implicitly, so it can touch no string-named
|
|
15
|
+
* obligation; and symbol-keyed obligations are spelled `@@iterator` after the
|
|
16
|
+
* WELL-KNOWN symbols, which a program-declared one can never be. So the write
|
|
17
|
+
* is invisible to every question the census asks -- which is why
|
|
18
|
+
* `keysOfKeyExpression` answers it with no keys at all rather than `every`.
|
|
19
|
+
*
|
|
20
|
+
* ⛔ Standard-library-declared is the whole guard, in both directions.
|
|
21
|
+
* `X.prototype[Symbol.iterator] = f` genuinely redefines intrinsic behavior
|
|
22
|
+
* under a non-string key, so it must stay `every`. A bare `symbol`-typed key
|
|
23
|
+
* (not `unique`) names an unknown symbol and fails closed the same way.
|
|
24
|
+
*
|
|
25
|
+
* The unique-symbol TYPE is sound to trust here in a way a string-literal type
|
|
26
|
+
* is not (see `createMutationKeyReader`'s own note): a `unique symbol` type is
|
|
27
|
+
* inhabited by exactly one value by construction, and there is no widening
|
|
28
|
+
* conversion into it the way an `any` widens into a `'a' | 'b'` slot.
|
|
29
|
+
*/
|
|
30
|
+
export const isProgramDeclaredSymbolKey = (type) => {
|
|
31
|
+
const members = type.isUnion() ? type.types : [type];
|
|
32
|
+
return (members.length > 0 &&
|
|
33
|
+
members.every((member) => (member.flags & ts.TypeFlags.UniqueESSymbol) !== 0 &&
|
|
34
|
+
(member.symbol.declarations ?? []).length > 0 &&
|
|
35
|
+
!(member.symbol.declarations ?? []).some((declaration) => declaration.getSourceFile().hasNoDefaultLib)));
|
|
36
|
+
};
|
|
37
|
+
/**
|
|
38
|
+
* Which keys a write names, for the host-mutation census.
|
|
39
|
+
*
|
|
40
|
+
* Every answer here is a SUPERSET of the keys the write can reach at run
|
|
41
|
+
* time; `every` is the answer whenever this reader cannot prove less. Three
|
|
42
|
+
* sources are trusted and nothing else:
|
|
43
|
+
*
|
|
44
|
+
* - the syntax: a property name, a string literal, a numeric literal (whose
|
|
45
|
+
* key is its canonical `ToString`, so `o[1.50]` is "1.5");
|
|
46
|
+
* - the number representation: an expression the checker types as `number`
|
|
47
|
+
* (or a number literal type, or a numeric enum) is carried as a native
|
|
48
|
+
* double, so its key is some `ToString(Number)` -- the NUMERIC domain, not
|
|
49
|
+
* an array index, since `-1`, `1.5` and `NaN` are numbers too.
|
|
50
|
+
* - the boolean representation: an expression the checker types as `boolean`
|
|
51
|
+
* is carried as a native two-state scalar, so its key is exactly "true" or
|
|
52
|
+
* "false" (`ToPropertyKey` of a boolean is `ToString(Boolean)`).
|
|
53
|
+
*
|
|
54
|
+
* A string-literal TYPE is deliberately not trusted: nothing in the compiled
|
|
55
|
+
* representation stops an `any` from carrying "zzz" into a cell typed `'a'`.
|
|
56
|
+
* A caller-supplied `computedKeysOf` authority may prove a finite key set;
|
|
57
|
+
* that is its claim to justify, and `null` from it keeps the key unknown.
|
|
58
|
+
* (The census's own authority is `host-mutation-computed-keys.ts`.)
|
|
59
|
+
*/
|
|
60
|
+
export const createMutationKeyReader = (checker, computedKeysOf, publishedTypeAt = (key) => checker.getTypeAtLocation(key)) => {
|
|
61
|
+
const numericType = (type) => type.isUnion()
|
|
62
|
+
? type.types.every(numericType)
|
|
63
|
+
: (type.flags & ts.TypeFlags.NumberLike) !== 0 && (type.flags & ~ts.TypeFlags.NumberLike) === 0;
|
|
64
|
+
/**
|
|
65
|
+
* Named keys for a checker type this reader trusts completely: the
|
|
66
|
+
* boolean domain, and nothing wider. `ToPropertyKey` of `true`/`false` is
|
|
67
|
+
* exactly the string "true"/"false" (ECMA-262 7.1.14 via
|
|
68
|
+
* ToString(Boolean)), so a `boolean`-typed key names exactly those two
|
|
69
|
+
* strings -- not an approximation, the complete set. This is trustworthy
|
|
70
|
+
* for the same reason the numeric domain above is: `primitiveCarrier`
|
|
71
|
+
* (`src/representation/primitives.ts`) gives `boolean` its own native
|
|
72
|
+
* scalar domain, so the COMPILED storage for a boolean-typed cell can only
|
|
73
|
+
* ever hold one of two bit patterns, independent of whatever TypeScript's
|
|
74
|
+
* structural assignability allowed elsewhere.
|
|
75
|
+
*
|
|
76
|
+
* A string-literal TYPE is deliberately NOT extended the same trust, even
|
|
77
|
+
* though it looks like the same shape of fact. `primitiveCarrier` gives
|
|
78
|
+
* `string` -- literal or not -- the one generic `{ kind: 'string' }`
|
|
79
|
+
* carrier with no narrower storage, and TypeScript lets an `any` flow into
|
|
80
|
+
* a `'a' | 'b'`-typed slot (a parameter, a field) with zero diagnostic.
|
|
81
|
+
* Trusting the checker's literal-union TYPE there would let a value the
|
|
82
|
+
* compiled representation cannot distinguish from "any string" certify as
|
|
83
|
+
* bounded to `{'a','b'}` -- the exact hole the class doc above already
|
|
84
|
+
* calls out ("nothing in the compiled representation stops an `any` from
|
|
85
|
+
* carrying 'zzz' into a cell typed `'a'`"). A `const` bound once to a
|
|
86
|
+
* literal initializer is a DIFFERENT, sound fact (no other write exists to
|
|
87
|
+
* contaminate), and it is already covered -- by construction, not by
|
|
88
|
+
* naming it here -- through the `computedKeysOf` value-flow authority.
|
|
89
|
+
*/
|
|
90
|
+
const namedKeysOfLiteralType = (type) => {
|
|
91
|
+
if (type.isUnion()) {
|
|
92
|
+
const keys = [];
|
|
93
|
+
for (const member of type.types) {
|
|
94
|
+
const memberKeys = namedKeysOfLiteralType(member);
|
|
95
|
+
if (memberKeys === null)
|
|
96
|
+
return null;
|
|
97
|
+
keys.push(...memberKeys);
|
|
98
|
+
}
|
|
99
|
+
return keys.some((key) => key.kind === 'every') ? null : keys;
|
|
100
|
+
}
|
|
101
|
+
if (type.flags & ts.TypeFlags.BooleanLiteral)
|
|
102
|
+
return [namedKey(checker.typeToString(type) === 'true' ? 'true' : 'false')];
|
|
103
|
+
if (type.flags & ts.TypeFlags.Boolean)
|
|
104
|
+
return [namedKey('true'), namedKey('false')];
|
|
105
|
+
return null;
|
|
106
|
+
};
|
|
107
|
+
const keysOfKeyExpression = (expression) => {
|
|
108
|
+
if (!expression)
|
|
109
|
+
return [everyKey];
|
|
110
|
+
const current = unwrapErasedExpression(expression);
|
|
111
|
+
if (ts.isStringLiteralLike(current))
|
|
112
|
+
return [keyOfName(current.text)];
|
|
113
|
+
if (ts.isNumericLiteral(current)) {
|
|
114
|
+
const key = numericLiteralKey(current.text);
|
|
115
|
+
return [key === null ? numericKeys : namedKey(key)];
|
|
116
|
+
}
|
|
117
|
+
if (ts.isPrefixUnaryExpression(current) &&
|
|
118
|
+
current.operator === ts.SyntaxKind.MinusToken &&
|
|
119
|
+
ts.isNumericLiteral(unwrapErasedExpression(current.operand))) {
|
|
120
|
+
const key = numericLiteralKey(`-${unwrapErasedExpression(current.operand).text}`);
|
|
121
|
+
return [key === null ? numericKeys : namedKey(key)];
|
|
122
|
+
}
|
|
123
|
+
if (ts.isConditionalExpression(current)) {
|
|
124
|
+
const keys = [...keysOfKeyExpression(current.whenTrue), ...keysOfKeyExpression(current.whenFalse)];
|
|
125
|
+
return keys.some((key) => key.kind === 'every') ? [everyKey] : keys;
|
|
126
|
+
}
|
|
127
|
+
const type = publishedTypeAt(current);
|
|
128
|
+
if (numericType(type))
|
|
129
|
+
return [numericKeys];
|
|
130
|
+
// NO KEYS, not `every`. A program-declared symbol key names nothing this
|
|
131
|
+
// census models, so the honest answer is the empty set -- see
|
|
132
|
+
// `isProgramDeclaredSymbolKey` for why that is sound rather than merely
|
|
133
|
+
// convenient. `[]` reaches every consumer as "taint nothing", which is the
|
|
134
|
+
// behaviour: `taintSurfaceKey` is never called, so no wildcard is stamped.
|
|
135
|
+
//
|
|
136
|
+
// Measured on hono. `@hono/node-server`'s `request.ts` attaches its private
|
|
137
|
+
// state with module-level `Symbol()` keys through a `Record<string |
|
|
138
|
+
// symbol, any>` parameter (`request[bodyConsumedDirectlyKey] = true`), and
|
|
139
|
+
// hono's routers do the same ~36 times. Each one stamped `*` on the whole
|
|
140
|
+
// host surface, which poisoned every read of every authenticated host
|
|
141
|
+
// global -- including all 39 `Buffer.*` reads in node-compat's own
|
|
142
|
+
// `globals.ts`, whose `Buffer.from(...)` calls then cited results no
|
|
143
|
+
// producer published. None of that has anything to do with `request.ts`.
|
|
144
|
+
if (isProgramDeclaredSymbolKey(type))
|
|
145
|
+
return [];
|
|
146
|
+
const literalKeys = namedKeysOfLiteralType(type);
|
|
147
|
+
if (literalKeys)
|
|
148
|
+
return literalKeys;
|
|
149
|
+
const computed = computedKeysOf(current);
|
|
150
|
+
return !computed || computed.some((key) => key.kind === 'every') ? [everyKey] : computed;
|
|
151
|
+
};
|
|
152
|
+
const keysOfAccess = (access) => ts.isPropertyAccessExpression(access) ? [keyOfName(access.name.text)] : keysOfKeyExpression(access.argumentExpression);
|
|
153
|
+
const keysOfPropertyName = (name) => {
|
|
154
|
+
if (ts.isIdentifier(name) || ts.isStringLiteralLike(name) || ts.isPrivateIdentifier(name))
|
|
155
|
+
return [keyOfName(name.text)];
|
|
156
|
+
if (ts.isNumericLiteral(name)) {
|
|
157
|
+
const key = numericLiteralKey(name.text);
|
|
158
|
+
return [key === null ? numericKeys : namedKey(key)];
|
|
159
|
+
}
|
|
160
|
+
if (ts.isComputedPropertyName(name))
|
|
161
|
+
return keysOfKeyExpression(name.expression);
|
|
162
|
+
return [everyKey];
|
|
163
|
+
};
|
|
164
|
+
return { keysOfKeyExpression, keysOfAccess, keysOfPropertyName };
|
|
165
|
+
};
|
|
166
|
+
/**
|
|
167
|
+
* Keys a host or library ACCESSOR owns. A write of such a key through an
|
|
168
|
+
* unknown receiver may run that accessor, whose effect no body states, so
|
|
169
|
+
* the census treats the key as unknown. `__proto__` is always one: it is
|
|
170
|
+
* `Object.prototype`'s accessor, which the standard library does not
|
|
171
|
+
* declare, and running it replaces a prototype.
|
|
172
|
+
*
|
|
173
|
+
* A setter covered by `@gea-host-inert` states its effect and is not listed;
|
|
174
|
+
* a key is listed when ANY declaration of a setter by that name is uncovered.
|
|
175
|
+
*/
|
|
176
|
+
export const hostAccessorNamesOf = (declarationFiles, files) => {
|
|
177
|
+
const names = new Set(['__proto__']);
|
|
178
|
+
const visit = (node, ambientOnly) => {
|
|
179
|
+
if (ts.isSetAccessorDeclaration(node) && (!ambientOnly || isAmbientDeclaration(node)) && !declarationStatesHostInert(node)) {
|
|
180
|
+
const name = node.name;
|
|
181
|
+
if (ts.isIdentifier(name) || ts.isStringLiteralLike(name) || ts.isNumericLiteral(name))
|
|
182
|
+
names.add(name.text);
|
|
183
|
+
}
|
|
184
|
+
ts.forEachChild(node, (child) => visit(child, ambientOnly));
|
|
185
|
+
};
|
|
186
|
+
for (const file of declarationFiles)
|
|
187
|
+
visit(file, false);
|
|
188
|
+
for (const file of files)
|
|
189
|
+
if (!file.isDeclarationFile)
|
|
190
|
+
visit(file, true);
|
|
191
|
+
return names;
|
|
192
|
+
};
|