@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,437 @@
|
|
|
1
|
+
import ts from 'typescript';
|
|
2
|
+
/** The plain identifier text of a property name, or `null` for anything computed. */
|
|
3
|
+
const literalPropertyNameOf = (name) => {
|
|
4
|
+
if (ts.isIdentifier(name) || ts.isStringLiteral(name) || ts.isNumericLiteral(name))
|
|
5
|
+
return name.text;
|
|
6
|
+
return null;
|
|
7
|
+
};
|
|
8
|
+
/**
|
|
9
|
+
* The `value` expression's own source text, when a descriptor object literal
|
|
10
|
+
* names `value` plus all three explicit default data attributes -- `null` for
|
|
11
|
+
* a `get`/`set` accessor descriptor, a computed key, a shorthand/spread
|
|
12
|
+
* member this rewrite cannot resolve to a single expression, or any omitted,
|
|
13
|
+
* non-default, or runtime attribute.
|
|
14
|
+
*
|
|
15
|
+
* "Meaningful" is load-bearing: `writable`/`enumerable`/`configurable` are
|
|
16
|
+
* silently SKIPPED by an earlier version of this loop whenever they were
|
|
17
|
+
* present, which is wrong whenever any of them is anything but `true`.
|
|
18
|
+
* `Object.defineProperty(o, 'k', { value: v })` -- with no attribute keys at
|
|
19
|
+
* all -- installs a NON-writable, NON-enumerable, NON-configurable property
|
|
20
|
+
* (6.2.5.6 CompletePropertyDescriptor defaults every unstated attribute to
|
|
21
|
+
* `false`, and `gea_runtime.h`'s own `DynamicObject::defineOwnProperty` mints
|
|
22
|
+
* exactly that for a new property), while the assignment this rewrite
|
|
23
|
+
* substitutes creates a writable/enumerable/configurable data property --
|
|
24
|
+
* three attributes an ordinary store cannot help but grant. So a descriptor
|
|
25
|
+
* whose attributes are ABSENT must remain a real call. What must never happen
|
|
26
|
+
* is discarding an EXPLICIT `false` -- or any non-`true` expression, which
|
|
27
|
+
* cannot be proven default-safe here -- the same defect
|
|
28
|
+
* `emit-host-object.ts`'s `definePropertyText` refuses by name for a static
|
|
29
|
+
* receiver rather than silently granting three attributes the call withheld.
|
|
30
|
+
* `test/runtime/static-property-descriptors.runtime.js` is the measured case:
|
|
31
|
+
* `{ value: 2, writable: false, enumerable: false, configurable: false }` was
|
|
32
|
+
* being flattened to `o.b = 2`, which erases every attribute the program was
|
|
33
|
+
* testing before the checker, let alone this compiler's emitter, ever saw it.
|
|
34
|
+
*/
|
|
35
|
+
/**
|
|
36
|
+
* A descriptor object literal's own property as a uniform (key, value
|
|
37
|
+
* expression) pair. `{ value: v }` and its shorthand `{ value }` are the SAME
|
|
38
|
+
* descriptor to every consumer below; treating only the spelled-out form as
|
|
39
|
+
* recognized left `{ value }` -- the natural way to write this when the
|
|
40
|
+
* constructor parameter is already named `value`, exactly what a `{ value }`
|
|
41
|
+
* descriptor built from a same-named parameter looks like -- as an
|
|
42
|
+
* unrecognized shape, refusing the whole call and leaving the checker with
|
|
43
|
+
* no member at all instead of taking either supported path below.
|
|
44
|
+
*/
|
|
45
|
+
const descriptorEntryOf = (property) => {
|
|
46
|
+
if (ts.isPropertyAssignment(property)) {
|
|
47
|
+
const key = literalPropertyNameOf(property.name);
|
|
48
|
+
return key === null ? null : { key, value: property.initializer };
|
|
49
|
+
}
|
|
50
|
+
if (ts.isShorthandPropertyAssignment(property))
|
|
51
|
+
return { key: property.name.text, value: property.name };
|
|
52
|
+
return null;
|
|
53
|
+
};
|
|
54
|
+
const valueExpressionTextOf = (descriptor, file) => {
|
|
55
|
+
let valueText = null;
|
|
56
|
+
const defaultAttributes = new Set(['writable', 'enumerable', 'configurable']);
|
|
57
|
+
const seenAttributes = new Set();
|
|
58
|
+
for (const property of descriptor.properties) {
|
|
59
|
+
const entry = descriptorEntryOf(property);
|
|
60
|
+
if (entry === null)
|
|
61
|
+
return null;
|
|
62
|
+
if (entry.key === 'get' || entry.key === 'set')
|
|
63
|
+
return null;
|
|
64
|
+
if (entry.key === 'value') {
|
|
65
|
+
if (valueText !== null)
|
|
66
|
+
return null;
|
|
67
|
+
valueText = entry.value.getText(file);
|
|
68
|
+
continue;
|
|
69
|
+
}
|
|
70
|
+
if (entry.key === 'writable' || entry.key === 'enumerable' || entry.key === 'configurable') {
|
|
71
|
+
if (entry.value.kind !== ts.SyntaxKind.TrueKeyword)
|
|
72
|
+
return null;
|
|
73
|
+
seenAttributes.add(entry.key);
|
|
74
|
+
continue;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
// Omitting an attribute is *not* the same as assignment: a new ordinary
|
|
78
|
+
// data descriptor defaults every omitted bit to false. Only the fully
|
|
79
|
+
// explicit all-true descriptor is observationally identical to `o.k = v`.
|
|
80
|
+
if (seenAttributes.size !== defaultAttributes.size)
|
|
81
|
+
return null;
|
|
82
|
+
return valueText;
|
|
83
|
+
};
|
|
84
|
+
/**
|
|
85
|
+
* Whether a descriptor is a closed data-descriptor literal. Unlike
|
|
86
|
+
* `valueExpressionTextOf`, this does not require assignment-equivalent
|
|
87
|
+
* attributes: the intrinsic fallback below keeps the descriptor intact and
|
|
88
|
+
* lets `Object.defineProperty` apply omitted attributes as `false`.
|
|
89
|
+
*/
|
|
90
|
+
const isClosedDataDescriptor = (descriptor) => {
|
|
91
|
+
const allowed = new Set(['value', 'writable', 'enumerable', 'configurable']);
|
|
92
|
+
const seen = new Set();
|
|
93
|
+
for (const property of descriptor.properties) {
|
|
94
|
+
const entry = descriptorEntryOf(property);
|
|
95
|
+
if (entry === null || !allowed.has(entry.key) || seen.has(entry.key))
|
|
96
|
+
return false;
|
|
97
|
+
seen.add(entry.key);
|
|
98
|
+
}
|
|
99
|
+
return seen.has('value');
|
|
100
|
+
};
|
|
101
|
+
/** A generated binding absent from the whole input, so it cannot shadow an initializer's free name. */
|
|
102
|
+
const freshIdentifier = (stem, file) => {
|
|
103
|
+
let candidate = stem;
|
|
104
|
+
while (new RegExp(`\\b${candidate}\\b`).test(file.text))
|
|
105
|
+
candidate += '_';
|
|
106
|
+
return candidate;
|
|
107
|
+
};
|
|
108
|
+
/**
|
|
109
|
+
* A descriptor entry's own `@type` text. The annotation describes the
|
|
110
|
+
* property installed by that descriptor, so it must travel with the direct
|
|
111
|
+
* assignment this transform substitutes for it. Besides preserving the
|
|
112
|
+
* checker's answer, this lets later source transforms inspect the rewritten
|
|
113
|
+
* assignment without having to rediscover the descriptor it replaced.
|
|
114
|
+
*/
|
|
115
|
+
const jsDocTypeTextOn = (node, file) => {
|
|
116
|
+
const type = ts.getJSDocTypeTag(node)?.typeExpression?.type;
|
|
117
|
+
if (!type)
|
|
118
|
+
return null;
|
|
119
|
+
const text = type.getText(file).replace(/\s+/g, ' ').trim();
|
|
120
|
+
return text.length === 0 || text.includes('*/') ? null : text;
|
|
121
|
+
};
|
|
122
|
+
/**
|
|
123
|
+
* The descriptor literal's own `value` entry written as a full
|
|
124
|
+
* `value: expr` property assignment -- `null` for the shorthand `{ value }`
|
|
125
|
+
* spelling too, since the splice `typedDescriptorText` performs needs a
|
|
126
|
+
* separate initializer range shorthand has none of.
|
|
127
|
+
*/
|
|
128
|
+
const valuePropertyOf = (descriptor) => descriptor.properties.find((property) => ts.isPropertyAssignment(property) && literalPropertyNameOf(property.name) === 'value') ?? null;
|
|
129
|
+
/**
|
|
130
|
+
* The descriptor literal's own text, with the entry's JSDoc `@type` moved onto
|
|
131
|
+
* its `value` initializer.
|
|
132
|
+
*
|
|
133
|
+
* In a `defineProperties` map the comment sits on the map ENTRY -- three's
|
|
134
|
+
* `LOD` writes `/** @type {Array<{object:Object3D,...}>} *\/ levels: { enumerable:
|
|
135
|
+
* true, value: [] }` -- and names the type of the property being defined,
|
|
136
|
+
* which is the type of `value`. Hoisting the descriptor into its own binding
|
|
137
|
+
* leaves that comment behind on nothing, so the checker typed `value: []` as an
|
|
138
|
+
* element-less array and the class field it defines could only ever be
|
|
139
|
+
* `array-object(undefined)`, refusing every later push of a level. Casting the
|
|
140
|
+
* initializer keeps the fact exactly where the checker reads it.
|
|
141
|
+
*/
|
|
142
|
+
const typedDescriptorText = (entry, descriptor, file) => {
|
|
143
|
+
const type = jsDocTypeTextOn(entry, file);
|
|
144
|
+
if (type === null)
|
|
145
|
+
return descriptor.getText(file);
|
|
146
|
+
const value = valuePropertyOf(descriptor);
|
|
147
|
+
if (!value)
|
|
148
|
+
return descriptor.getText(file);
|
|
149
|
+
const start = descriptor.getStart(file);
|
|
150
|
+
const text = descriptor.getText(file);
|
|
151
|
+
const from = value.initializer.getStart(file) - start;
|
|
152
|
+
const to = value.initializer.end - start;
|
|
153
|
+
return `${text.slice(0, from)}/** @type {${type}} */ (${text.slice(from, to)})${text.slice(to)}`;
|
|
154
|
+
};
|
|
155
|
+
const assignmentText = (receiver, key, value, annotation, file) => {
|
|
156
|
+
const type = jsDocTypeTextOn(annotation, file);
|
|
157
|
+
return `${type === null ? '' : `/** @type {${type}} */\n`}${receiver}.${key} = ${value};`;
|
|
158
|
+
};
|
|
159
|
+
/** `Object.defineProperty`/`Object.defineProperties`, or `null` for any other call. */
|
|
160
|
+
const definePropertyKindOf = (call) => {
|
|
161
|
+
if (!ts.isPropertyAccessExpression(call.expression))
|
|
162
|
+
return null;
|
|
163
|
+
if (!ts.isIdentifier(call.expression.expression) || call.expression.expression.text !== 'Object')
|
|
164
|
+
return null;
|
|
165
|
+
if (call.expression.name.text === 'defineProperty')
|
|
166
|
+
return 'single';
|
|
167
|
+
if (call.expression.name.text === 'defineProperties')
|
|
168
|
+
return 'plural';
|
|
169
|
+
return null;
|
|
170
|
+
};
|
|
171
|
+
/**
|
|
172
|
+
* A `receiver.name = value;` statement replacing a whole single
|
|
173
|
+
* `Object.defineProperty` call, when its attributes are assignment-equivalent
|
|
174
|
+
* -- or, for a closed data descriptor whose attributes are not, a
|
|
175
|
+
* checker-visible `this.name;` declaration prepended AHEAD of the call,
|
|
176
|
+
* which is otherwise returned exactly as the source wrote it. See
|
|
177
|
+
* the note on the retained-call path below for why nothing is synthesized
|
|
178
|
+
* ahead of a fixed descriptor.
|
|
179
|
+
* stays safe to prepend.
|
|
180
|
+
*/
|
|
181
|
+
const singleReplacement = (call, file) => {
|
|
182
|
+
if (call.arguments.length !== 3)
|
|
183
|
+
return null;
|
|
184
|
+
const receiver = call.arguments[0];
|
|
185
|
+
const keyArgument = call.arguments[1];
|
|
186
|
+
const descriptorArgument = call.arguments[2];
|
|
187
|
+
if (receiver === undefined || keyArgument === undefined || descriptorArgument === undefined)
|
|
188
|
+
return null;
|
|
189
|
+
if (!ts.isStringLiteralLike(keyArgument))
|
|
190
|
+
return null;
|
|
191
|
+
if (!ts.isObjectLiteralExpression(descriptorArgument))
|
|
192
|
+
return null;
|
|
193
|
+
const valueText = valueExpressionTextOf(descriptorArgument, file);
|
|
194
|
+
if (valueText !== null)
|
|
195
|
+
return assignmentText(receiver.getText(file), keyArgument.text, valueText, call.parent, file);
|
|
196
|
+
if (!isClosedDataDescriptor(descriptorArgument))
|
|
197
|
+
return null;
|
|
198
|
+
// A non-assignment-equivalent descriptor is left exactly as written.
|
|
199
|
+
//
|
|
200
|
+
// Synthesizing a checker-visible `/** @type {T} */ this.key;` ahead of the
|
|
201
|
+
// retained call was tried and REVERTED: it teaches the checker the field's
|
|
202
|
+
// type, which resolved one refusal, but the class-field machinery then reads
|
|
203
|
+
// the declaration as an ordinary field and gives it the ordinary field's
|
|
204
|
+
// ENUMERABLE default. `Object.defineProperty(this, 'id', { value })` omits
|
|
205
|
+
// `enumerable`, so the property must be non-enumerable, and
|
|
206
|
+
// `fixed-field-define-property.runtime.js` began reporting `id,marker` from
|
|
207
|
+
// `Object.keys` where node reports `marker`. Turning a correct program into
|
|
208
|
+
// a quietly wrong one is a worse trade than leaving the sibling fixture's
|
|
209
|
+
// refusal in place; the real fix is for the field census to publish a
|
|
210
|
+
// 'define-field' event for a declared-but-uninitialized field carrying the
|
|
211
|
+
// descriptor's own attribute bits, which is producers/class-lifecycle.ts's
|
|
212
|
+
// to make.
|
|
213
|
+
return null;
|
|
214
|
+
};
|
|
215
|
+
/** A key that can be written after a dot, so a declaration statement can name it. */
|
|
216
|
+
const isIdentifierName = (key) => /^[A-Za-z_$][A-Za-z0-9_$]*$/.test(key);
|
|
217
|
+
/**
|
|
218
|
+
* The class whose instance a `this`-receiver definition inside `node` defines a
|
|
219
|
+
* member of -- a constructor or a method body, the two places TypeScript's own
|
|
220
|
+
* JS class inference reads a `this.key` declaration from. An arrow function is
|
|
221
|
+
* transparent (its `this` IS the enclosing member's); any other function
|
|
222
|
+
* rebinds `this` and answers nothing.
|
|
223
|
+
*/
|
|
224
|
+
const declaringClassOf = (node) => {
|
|
225
|
+
for (let current = node.parent; current; current = current.parent) {
|
|
226
|
+
if (ts.isArrowFunction(current))
|
|
227
|
+
continue;
|
|
228
|
+
if (ts.isConstructorDeclaration(current) || ts.isMethodDeclaration(current))
|
|
229
|
+
return ts.isClassLike(current.parent) ? current.parent : null;
|
|
230
|
+
if (ts.isFunctionLike(current))
|
|
231
|
+
return null;
|
|
232
|
+
}
|
|
233
|
+
return null;
|
|
234
|
+
};
|
|
235
|
+
/**
|
|
236
|
+
* Every member name the class already declares some other way: an element of
|
|
237
|
+
* its own body, or a `this.name = value` assignment TypeScript's own inference
|
|
238
|
+
* reads as a declaration.
|
|
239
|
+
*
|
|
240
|
+
* A name with an answer is left alone. Two declaration SHAPES on one symbol is
|
|
241
|
+
* what `field-bindings.ts`'s candidate test refuses -- the same hazard
|
|
242
|
+
* `alias-this-field-declaration-transform.ts` documents for the same reason --
|
|
243
|
+
* and refusing to act on a name is always safe, while guessing which of two
|
|
244
|
+
* declarations is the real one is not.
|
|
245
|
+
*/
|
|
246
|
+
const alreadyDeclaredMembersOf = (classNode) => {
|
|
247
|
+
const declared = new Set();
|
|
248
|
+
for (const member of classNode.members) {
|
|
249
|
+
const name = member.name === undefined ? null : literalPropertyNameOf(member.name);
|
|
250
|
+
if (name !== null)
|
|
251
|
+
declared.add(name);
|
|
252
|
+
}
|
|
253
|
+
const visit = (node) => {
|
|
254
|
+
if (ts.isBinaryExpression(node) &&
|
|
255
|
+
node.operatorToken.kind === ts.SyntaxKind.EqualsToken &&
|
|
256
|
+
ts.isPropertyAccessExpression(node.left) &&
|
|
257
|
+
node.left.expression.kind === ts.SyntaxKind.ThisKeyword)
|
|
258
|
+
declared.add(node.left.name.text);
|
|
259
|
+
ts.forEachChild(node, visit);
|
|
260
|
+
};
|
|
261
|
+
visit(classNode);
|
|
262
|
+
return declared;
|
|
263
|
+
};
|
|
264
|
+
/**
|
|
265
|
+
* `/** @type {(typeof descriptor)["value"]} *\/ this.key;` per entry -- the
|
|
266
|
+
* DECLARATION a descriptor makes, written in the one spelling TypeScript's own
|
|
267
|
+
* JS class inference reads without also installing a property.
|
|
268
|
+
*
|
|
269
|
+
* `Object.defineProperties(this, { key: { value } })` declares an instance
|
|
270
|
+
* member exactly as `this.key = value` does, but the checker never looks inside
|
|
271
|
+
* a descriptor map, so every later read is "Property 'key' does not exist" and
|
|
272
|
+
* the whole program is withheld. Synthesizing the ASSIGNMENT instead is wrong
|
|
273
|
+
* twice over: it runs a store the program does not write, and it grants the
|
|
274
|
+
* three attributes an omitted-attribute descriptor deliberately withholds. A
|
|
275
|
+
* bare typed access executes nothing -- it is a read -- so the property still
|
|
276
|
+
* comes into existence at the definition below, with the definition's own
|
|
277
|
+
* attributes.
|
|
278
|
+
*
|
|
279
|
+
* That distinction is also what an earlier, REVERTED attempt got wrong, and why
|
|
280
|
+
* this now works: a declaration the class layout has no `define-field` event
|
|
281
|
+
* for leaves the definition unable to tell whether it is CREATING the property
|
|
282
|
+
* or redefining one that already exists, so it took the redefine arm and every
|
|
283
|
+
* omitted attribute stayed at the field's default `true`. `class-lifecycle.ts`
|
|
284
|
+
* now publishes the same initializer-less `define-field` for this spelling that
|
|
285
|
+
* it already published for `this.key = value`, which is what makes the
|
|
286
|
+
* definition the property's creation -- and an omitted `enumerable` `false`.
|
|
287
|
+
*
|
|
288
|
+
* The type is read off the descriptor binding rather than restated, so nothing
|
|
289
|
+
* here becomes a second authority on what a descriptor's value type is:
|
|
290
|
+
* `typeof` names the very binding the definition below consumes.
|
|
291
|
+
*/
|
|
292
|
+
const thisFieldDeclarations = (call, receiver, entries) => {
|
|
293
|
+
if (receiver.kind !== ts.SyntaxKind.ThisKeyword)
|
|
294
|
+
return [];
|
|
295
|
+
const classNode = declaringClassOf(call);
|
|
296
|
+
if (classNode === null)
|
|
297
|
+
return [];
|
|
298
|
+
const declared = alreadyDeclaredMembersOf(classNode);
|
|
299
|
+
return entries
|
|
300
|
+
.filter(({ entry }) => isIdentifierName(entry.key) && !declared.has(entry.key))
|
|
301
|
+
.map(({ entry, binding }) => `/** @type {(typeof ${binding})["value"]} */\nthis.${entry.key};`);
|
|
302
|
+
};
|
|
303
|
+
/**
|
|
304
|
+
* One `receiver.name = value;` statement per entry, replacing a whole
|
|
305
|
+
* `Object.defineProperties` call -- only when every entry in its map
|
|
306
|
+
* qualifies (see the module comment for why a partial rewrite is refused).
|
|
307
|
+
* When it does not, the call is kept real (see below), exactly as written.
|
|
308
|
+
*/
|
|
309
|
+
const pluralReplacement = (call, file) => {
|
|
310
|
+
if (call.arguments.length !== 2)
|
|
311
|
+
return null;
|
|
312
|
+
const receiver = call.arguments[0];
|
|
313
|
+
const mapArgument = call.arguments[1];
|
|
314
|
+
if (receiver === undefined || mapArgument === undefined)
|
|
315
|
+
return null;
|
|
316
|
+
if (!ts.isObjectLiteralExpression(mapArgument))
|
|
317
|
+
return null;
|
|
318
|
+
const receiverText = receiver.getText(file);
|
|
319
|
+
const assignments = [];
|
|
320
|
+
const entries = [];
|
|
321
|
+
const seenKeys = new Set();
|
|
322
|
+
for (const property of mapArgument.properties) {
|
|
323
|
+
if (!ts.isPropertyAssignment(property))
|
|
324
|
+
return null;
|
|
325
|
+
const key = literalPropertyNameOf(property.name);
|
|
326
|
+
if (key === null)
|
|
327
|
+
return null;
|
|
328
|
+
if (!ts.isObjectLiteralExpression(property.initializer))
|
|
329
|
+
return null;
|
|
330
|
+
if (!isClosedDataDescriptor(property.initializer))
|
|
331
|
+
return null;
|
|
332
|
+
if (seenKeys.has(key))
|
|
333
|
+
return null;
|
|
334
|
+
seenKeys.add(key);
|
|
335
|
+
entries.push({
|
|
336
|
+
key,
|
|
337
|
+
descriptor: property.initializer,
|
|
338
|
+
descriptorText: typedDescriptorText(property, property.initializer, file)
|
|
339
|
+
});
|
|
340
|
+
const valueText = valueExpressionTextOf(property.initializer, file);
|
|
341
|
+
if (valueText !== null)
|
|
342
|
+
assignments.push(assignmentText(receiverText, key, valueText, property, file));
|
|
343
|
+
}
|
|
344
|
+
// The all-default case remains a direct assignment so the checker learns
|
|
345
|
+
// the field from ordinary JS constructor inference. Any descriptor with
|
|
346
|
+
// omitted/false/runtime attributes must remain a real definition. Split
|
|
347
|
+
// the plural intrinsic into its already-supported singular primitive while
|
|
348
|
+
// retaining the complete descriptor object and its exact defaults.
|
|
349
|
+
if (assignments.length === entries.length && assignments.length > 0)
|
|
350
|
+
return assignments.join('\n');
|
|
351
|
+
const receiverName = freshIdentifier(`__gea_define_properties_receiver_${call.getStart(file)}`, file);
|
|
352
|
+
// OrdinaryOwnPropertyKeys visits array-index strings numerically before
|
|
353
|
+
// other strings, regardless of their source order. No symbol key can reach
|
|
354
|
+
// this closed-literal arm because every computed key is refused above.
|
|
355
|
+
const arrayIndex = (key) => {
|
|
356
|
+
const numeric = Number(key);
|
|
357
|
+
return Number.isInteger(numeric) && numeric >= 0 && numeric < 4_294_967_295 && String(numeric) === key ? numeric : null;
|
|
358
|
+
};
|
|
359
|
+
const evaluatedEntries = entries.map((entry, ordinal) => ({
|
|
360
|
+
entry,
|
|
361
|
+
ordinal,
|
|
362
|
+
binding: freshIdentifier(`__gea_define_properties_descriptor_${call.getStart(file)}_${ordinal}`, file)
|
|
363
|
+
}));
|
|
364
|
+
const orderedEntries = evaluatedEntries
|
|
365
|
+
.map(({ entry, ordinal, binding }) => ({ entry, ordinal, binding, index: arrayIndex(entry.key) }))
|
|
366
|
+
.sort((left, right) => {
|
|
367
|
+
if (left.index !== null && right.index !== null)
|
|
368
|
+
return left.index - right.index;
|
|
369
|
+
if (left.index !== null)
|
|
370
|
+
return -1;
|
|
371
|
+
if (right.index !== null)
|
|
372
|
+
return 1;
|
|
373
|
+
return left.ordinal - right.ordinal;
|
|
374
|
+
})
|
|
375
|
+
.map(({ entry, binding }) => ({ entry, binding }));
|
|
376
|
+
const definitions = orderedEntries.map(({ entry, binding }) => `Object.defineProperty(${receiverName}, ${JSON.stringify(entry.key)}, ${binding});`);
|
|
377
|
+
// Both arguments are evaluated exactly once, receiver first. Materializing
|
|
378
|
+
// every descriptor before the first definition also preserves
|
|
379
|
+
// defineProperties' two phases: every descriptor value/attribute expression
|
|
380
|
+
// runs before any target property is installed, even when own-key order is
|
|
381
|
+
// different from literal evaluation order.
|
|
382
|
+
// The declarations come LAST so the read each one performs sees the value the
|
|
383
|
+
// definition above it installed, rather than the field's own pre-definition
|
|
384
|
+
// default. Where the checker reads a declaration from is a binding question,
|
|
385
|
+
// not an ordering one, so nothing is lost by putting them here.
|
|
386
|
+
return [
|
|
387
|
+
'{',
|
|
388
|
+
`const ${receiverName} = ${receiverText};`,
|
|
389
|
+
...evaluatedEntries.map(({ entry, binding }) => `const ${binding} = ${entry.descriptorText};`),
|
|
390
|
+
...definitions,
|
|
391
|
+
...thisFieldDeclarations(call, receiver, evaluatedEntries),
|
|
392
|
+
'}'
|
|
393
|
+
].join('\n');
|
|
394
|
+
};
|
|
395
|
+
const candidatesIn = (file) => {
|
|
396
|
+
const found = [];
|
|
397
|
+
const visit = (node) => {
|
|
398
|
+
if (ts.isExpressionStatement(node) && ts.isCallExpression(node.expression)) {
|
|
399
|
+
const kind = definePropertyKindOf(node.expression);
|
|
400
|
+
const replacement = kind === 'single' ? singleReplacement(node.expression, file) : kind === 'plural' ? pluralReplacement(node.expression, file) : null;
|
|
401
|
+
if (replacement !== null) {
|
|
402
|
+
found.push({ statement: node, replacement });
|
|
403
|
+
return;
|
|
404
|
+
}
|
|
405
|
+
}
|
|
406
|
+
ts.forEachChild(node, visit);
|
|
407
|
+
};
|
|
408
|
+
ts.forEachChild(file, visit);
|
|
409
|
+
return found;
|
|
410
|
+
};
|
|
411
|
+
const scriptKindOf = (fileName) => {
|
|
412
|
+
if (fileName.endsWith('.tsx'))
|
|
413
|
+
return ts.ScriptKind.TSX;
|
|
414
|
+
if (fileName.endsWith('.jsx'))
|
|
415
|
+
return ts.ScriptKind.JSX;
|
|
416
|
+
if (fileName.endsWith('.js') || fileName.endsWith('.mjs') || fileName.endsWith('.cjs'))
|
|
417
|
+
return ts.ScriptKind.JS;
|
|
418
|
+
return ts.ScriptKind.TS;
|
|
419
|
+
};
|
|
420
|
+
export const definePropertySourceTransform = (input) => {
|
|
421
|
+
// A file with neither spelling cannot contain a call this transform acts
|
|
422
|
+
// on -- one substring test (the prefix the two calls share) is what a file
|
|
423
|
+
// this transform has nothing to do with costs.
|
|
424
|
+
if (!input.text.includes('definePropert'))
|
|
425
|
+
return null;
|
|
426
|
+
const file = ts.createSourceFile(input.fileName, input.text, ts.ScriptTarget.Latest, true, scriptKindOf(input.fileName));
|
|
427
|
+
const candidates = candidatesIn(file);
|
|
428
|
+
if (candidates.length === 0)
|
|
429
|
+
return null;
|
|
430
|
+
let rewritten = input.text;
|
|
431
|
+
// Spliced from the end so every earlier candidate's range is still the range
|
|
432
|
+
// it was measured at -- see the module comment.
|
|
433
|
+
for (const candidate of [...candidates].reverse()) {
|
|
434
|
+
rewritten = rewritten.slice(0, candidate.statement.getStart(file)) + candidate.replacement + rewritten.slice(candidate.statement.end);
|
|
435
|
+
}
|
|
436
|
+
return rewritten;
|
|
437
|
+
};
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type ts from 'typescript';
|
|
2
|
+
import type { PackageSource } from './package-sources.js';
|
|
3
|
+
export interface DiagnosticSourcePreparationAudit {
|
|
4
|
+
readonly fileName: string;
|
|
5
|
+
readonly start: number;
|
|
6
|
+
readonly end: number;
|
|
7
|
+
readonly sourceHash: string;
|
|
8
|
+
readonly typescriptVersion: string;
|
|
9
|
+
readonly diagnosticCode: 2578;
|
|
10
|
+
}
|
|
11
|
+
export interface DiagnosticSourcePreparation {
|
|
12
|
+
readonly sourceText: ReadonlyMap<string, string>;
|
|
13
|
+
readonly audit: readonly DiagnosticSourcePreparationAudit[];
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Prepare only directives TypeScript has proved stale in package source.
|
|
17
|
+
*
|
|
18
|
+
* TS2578 is emitted at the comment's own lexical range only when the following
|
|
19
|
+
* line produced no error. A still-needed directive therefore never enters this
|
|
20
|
+
* pass. The second program receives the first program's already-transformed
|
|
21
|
+
* source text, with only those exact comment bytes blanked, so offsets and node
|
|
22
|
+
* identities remain stable and unrelated diagnostics remain ordinary errors.
|
|
23
|
+
*/
|
|
24
|
+
export declare const diagnosticSourcePreparation: (typescript: typeof ts, program: ts.Program, packages: readonly PackageSource[]) => DiagnosticSourcePreparation;
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import { createHash } from 'node:crypto';
|
|
2
|
+
import { isAbsolute, relative, resolve, sep } from 'node:path';
|
|
3
|
+
const belongsToPackageSource = (fileName, packages) => {
|
|
4
|
+
const file = resolve(fileName);
|
|
5
|
+
return packages.some(({ root }) => {
|
|
6
|
+
const path = relative(resolve(root), file);
|
|
7
|
+
return path !== '' && path !== '..' && !path.startsWith(`..${sep}`) && !isAbsolute(path);
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
const commentRangeAt = (typescript, file, start, end) => {
|
|
11
|
+
const scanner = typescript.createScanner(file.languageVersion, false, file.languageVariant, file.text);
|
|
12
|
+
for (let token = scanner.scan(); token !== typescript.SyntaxKind.EndOfFileToken; token = scanner.scan()) {
|
|
13
|
+
if (token !== typescript.SyntaxKind.SingleLineCommentTrivia && token !== typescript.SyntaxKind.MultiLineCommentTrivia)
|
|
14
|
+
continue;
|
|
15
|
+
const commentStart = scanner.getTokenPos();
|
|
16
|
+
const commentEnd = scanner.getTextPos();
|
|
17
|
+
if (commentStart !== start || commentEnd !== end)
|
|
18
|
+
continue;
|
|
19
|
+
if (!file.text.slice(commentStart, commentEnd).includes('@ts-expect-error'))
|
|
20
|
+
return null;
|
|
21
|
+
return { start: commentStart, end: commentEnd };
|
|
22
|
+
}
|
|
23
|
+
return null;
|
|
24
|
+
};
|
|
25
|
+
const blankRange = (text, start, end) => {
|
|
26
|
+
const range = text.slice(start, end);
|
|
27
|
+
let blanked = '';
|
|
28
|
+
for (let index = 0; index < range.length; index += 1) {
|
|
29
|
+
const character = range[index];
|
|
30
|
+
blanked += character === '\n' || character === '\r' ? character : ' ';
|
|
31
|
+
}
|
|
32
|
+
return `${text.slice(0, start)}${blanked}${text.slice(end)}`;
|
|
33
|
+
};
|
|
34
|
+
/**
|
|
35
|
+
* Prepare only directives TypeScript has proved stale in package source.
|
|
36
|
+
*
|
|
37
|
+
* TS2578 is emitted at the comment's own lexical range only when the following
|
|
38
|
+
* line produced no error. A still-needed directive therefore never enters this
|
|
39
|
+
* pass. The second program receives the first program's already-transformed
|
|
40
|
+
* source text, with only those exact comment bytes blanked, so offsets and node
|
|
41
|
+
* identities remain stable and unrelated diagnostics remain ordinary errors.
|
|
42
|
+
*/
|
|
43
|
+
export const diagnosticSourcePreparation = (typescript, program, packages) => {
|
|
44
|
+
if (packages.length === 0)
|
|
45
|
+
return { sourceText: new Map(), audit: [] };
|
|
46
|
+
const byFile = new Map();
|
|
47
|
+
for (const diagnostic of program.getSemanticDiagnostics()) {
|
|
48
|
+
if (diagnostic.code !== 2578 || !diagnostic.file || diagnostic.start === undefined || diagnostic.length === undefined)
|
|
49
|
+
continue;
|
|
50
|
+
if (diagnostic.file.isDeclarationFile || !belongsToPackageSource(diagnostic.file.fileName, packages))
|
|
51
|
+
continue;
|
|
52
|
+
const range = commentRangeAt(typescript, diagnostic.file, diagnostic.start, diagnostic.start + diagnostic.length);
|
|
53
|
+
if (!range)
|
|
54
|
+
continue;
|
|
55
|
+
const fileName = resolve(diagnostic.file.fileName);
|
|
56
|
+
const current = byFile.get(fileName);
|
|
57
|
+
if (current)
|
|
58
|
+
current.ranges.push(range);
|
|
59
|
+
else
|
|
60
|
+
byFile.set(fileName, { source: diagnostic.file, ranges: [range] });
|
|
61
|
+
}
|
|
62
|
+
const sourceText = new Map();
|
|
63
|
+
const audit = [];
|
|
64
|
+
for (const [fileName, { source, ranges }] of [...byFile].sort(([left], [right]) => left.localeCompare(right))) {
|
|
65
|
+
const sourceHash = createHash('sha256').update(source.text).digest('hex');
|
|
66
|
+
let prepared = source.text;
|
|
67
|
+
for (const range of ranges.sort((left, right) => right.start - left.start))
|
|
68
|
+
prepared = blankRange(prepared, range.start, range.end);
|
|
69
|
+
sourceText.set(fileName, prepared);
|
|
70
|
+
for (const range of ranges.sort((left, right) => left.start - right.start)) {
|
|
71
|
+
audit.push({
|
|
72
|
+
fileName,
|
|
73
|
+
start: range.start,
|
|
74
|
+
end: range.end,
|
|
75
|
+
sourceHash,
|
|
76
|
+
typescriptVersion: typescript.version,
|
|
77
|
+
diagnosticCode: 2578
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
return { sourceText, audit };
|
|
82
|
+
};
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import ts from 'typescript';
|
|
2
|
+
/**
|
|
3
|
+
* Every `/** ... *\/` range in a file, in source order and without repeats.
|
|
4
|
+
*
|
|
5
|
+
* Two source transforms respell type names inside documentation --
|
|
6
|
+
* `jsdocNamepathTransform` and the ambient type realization transform -- and
|
|
7
|
+
* both must rewrite ONLY real JSDoc ranges: never ordinary code, never a `//`
|
|
8
|
+
* or plain `/* *\/` comment. A namepath's `~` is bitwise NOT in expression
|
|
9
|
+
* position and a type's name is an ordinary identifier, so a transform that
|
|
10
|
+
* rewrote raw text would silently corrupt the program.
|
|
11
|
+
*
|
|
12
|
+
* The walk lives here, once, because it had been copied byte-for-byte into
|
|
13
|
+
* both transforms. Two copies of one rule is the defect class this codebase
|
|
14
|
+
* names most often: they do not stay identical, and the day they diverge one
|
|
15
|
+
* transform rewrites a range the other refuses, with nothing reporting it.
|
|
16
|
+
*
|
|
17
|
+
* `getLeadingCommentRanges` is asked per node and answers the same range for
|
|
18
|
+
* every node that shares it, so results are keyed by position to collapse the
|
|
19
|
+
* repeats, then sorted -- callers splice from the END of this list so that
|
|
20
|
+
* earlier ranges' positions stay valid as they go.
|
|
21
|
+
*/
|
|
22
|
+
export declare const documentationRangesIn: (file: ts.SourceFile, text: string) => readonly ts.CommentRange[];
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import ts from 'typescript';
|
|
2
|
+
/**
|
|
3
|
+
* Every `/** ... *\/` range in a file, in source order and without repeats.
|
|
4
|
+
*
|
|
5
|
+
* Two source transforms respell type names inside documentation --
|
|
6
|
+
* `jsdocNamepathTransform` and the ambient type realization transform -- and
|
|
7
|
+
* both must rewrite ONLY real JSDoc ranges: never ordinary code, never a `//`
|
|
8
|
+
* or plain `/* *\/` comment. A namepath's `~` is bitwise NOT in expression
|
|
9
|
+
* position and a type's name is an ordinary identifier, so a transform that
|
|
10
|
+
* rewrote raw text would silently corrupt the program.
|
|
11
|
+
*
|
|
12
|
+
* The walk lives here, once, because it had been copied byte-for-byte into
|
|
13
|
+
* both transforms. Two copies of one rule is the defect class this codebase
|
|
14
|
+
* names most often: they do not stay identical, and the day they diverge one
|
|
15
|
+
* transform rewrites a range the other refuses, with nothing reporting it.
|
|
16
|
+
*
|
|
17
|
+
* `getLeadingCommentRanges` is asked per node and answers the same range for
|
|
18
|
+
* every node that shares it, so results are keyed by position to collapse the
|
|
19
|
+
* repeats, then sorted -- callers splice from the END of this list so that
|
|
20
|
+
* earlier ranges' positions stay valid as they go.
|
|
21
|
+
*/
|
|
22
|
+
export const documentationRangesIn = (file, text) => {
|
|
23
|
+
const found = new Map();
|
|
24
|
+
const visit = (node) => {
|
|
25
|
+
for (const range of ts.getLeadingCommentRanges(text, node.getFullStart()) ?? []) {
|
|
26
|
+
if (range.kind !== ts.SyntaxKind.MultiLineCommentTrivia)
|
|
27
|
+
continue;
|
|
28
|
+
if (!text.startsWith('/**', range.pos))
|
|
29
|
+
continue;
|
|
30
|
+
found.set(range.pos, range);
|
|
31
|
+
}
|
|
32
|
+
ts.forEachChild(node, visit);
|
|
33
|
+
};
|
|
34
|
+
visit(file);
|
|
35
|
+
return [...found.values()].sort((left, right) => left.pos - right.pos);
|
|
36
|
+
};
|