@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,32 @@
|
|
|
1
|
+
import ts from 'typescript';
|
|
2
|
+
import { type CensusRefusal } from './census-refusal.js';
|
|
3
|
+
import { type ParameterBindingCensus } from './parameter-bindings.js';
|
|
4
|
+
import { type ProgramReachability } from './reachability.js';
|
|
5
|
+
export interface JsDocTypeNameCensus {
|
|
6
|
+
/** The type this node's own JSDoc tag names, once resolved program-wide, or `null`. */
|
|
7
|
+
readonly typeAt: (node: ts.Node) => ts.Type | null;
|
|
8
|
+
/** How many declarations this census typed, for measurement. */
|
|
9
|
+
readonly boundCount: number;
|
|
10
|
+
/**
|
|
11
|
+
* Why each unreadable tag could not be resolved, one entry per refused
|
|
12
|
+
* declaration, carrying that declaration as `owner`.
|
|
13
|
+
*
|
|
14
|
+
* Used to be a `ReadonlyMap<string, number>`, a count per hand-written
|
|
15
|
+
* prose reason with no owner: a count says a tag went unresolved but not
|
|
16
|
+
* WHICH tag, so nothing downstream could act on one. `censusRefusalCounts`
|
|
17
|
+
* derives the old shape for a caller that only ever wanted the tally.
|
|
18
|
+
*/
|
|
19
|
+
readonly refusals: readonly CensusRefusal[];
|
|
20
|
+
}
|
|
21
|
+
export declare const emptyJsDocTypeNameCensus: JsDocTypeNameCensus;
|
|
22
|
+
/**
|
|
23
|
+
* Whole-program census of every JSDoc tag whose name the checker could not
|
|
24
|
+
* bind, resolved against the program's own exported types.
|
|
25
|
+
*/
|
|
26
|
+
export declare const censusJsDocTypeNames: (checker: ts.TypeChecker, files: readonly ts.SourceFile[], reachable: ProgramReachability) => JsDocTypeNameCensus;
|
|
27
|
+
/**
|
|
28
|
+
* A `ParameterBindingCensus`-shaped view answering from the JSDoc names FIRST
|
|
29
|
+
* and `upstream` otherwise -- the seam for `frontend.ts`, composed OUTERMOST
|
|
30
|
+
* so a type the program stated outranks one inferred from call sites.
|
|
31
|
+
*/
|
|
32
|
+
export declare const withJsDocTypeNames: (checker: ts.TypeChecker, files: readonly ts.SourceFile[], reachable: ProgramReachability, upstream?: ParameterBindingCensus) => ParameterBindingCensus;
|
|
@@ -0,0 +1,512 @@
|
|
|
1
|
+
import ts from 'typescript';
|
|
2
|
+
import { censusRefusal } from './census-refusal.js';
|
|
3
|
+
import { emptyParameterBindingCensus } from './parameter-bindings.js';
|
|
4
|
+
import { forEachReachableStatement } from './reachability.js';
|
|
5
|
+
/**
|
|
6
|
+
* The type a JSDoc tag NAMES, when the file it is written in cannot bind that
|
|
7
|
+
* name but the program declares exactly one type by it.
|
|
8
|
+
*
|
|
9
|
+
* three.js documents its renderer comprehensively --
|
|
10
|
+
* `WebGLRenderer.js`'s `this.render = function ( scene, camera )` carries
|
|
11
|
+
* `@param {Object3D} scene` and `@param {Camera} camera` directly above it --
|
|
12
|
+
* and TypeScript honours a JSDoc `@param` in a JavaScript file exactly as it
|
|
13
|
+
* honours a TS annotation. It does so only when the NAME resolves, and in
|
|
14
|
+
* three's sources it usually does not: `WebGLRenderer.js` imports neither
|
|
15
|
+
* `Object3D` nor `Camera`, because JSDoc is prose to the module system.
|
|
16
|
+
* `getTypeFromTypeNode` then degrades the tag to `any`, and 4687 unannotated
|
|
17
|
+
* parameters inherit that `any` through the renderer's entire call graph.
|
|
18
|
+
*
|
|
19
|
+
* This asks the same question one scope wider. It is emphatically not this
|
|
20
|
+
* compiler inventing a type: the type is one the PROGRAM declares and the tag
|
|
21
|
+
* is the PROGRAM stating which. Restoring the answer restores exactly the
|
|
22
|
+
* behaviour TypeScript would already have had if the file had written an
|
|
23
|
+
* `import` it had no reason to write.
|
|
24
|
+
*
|
|
25
|
+
* ## What it refuses
|
|
26
|
+
*
|
|
27
|
+
* - A tag the checker CAN read. That is TypeScript's own answer, arrived at
|
|
28
|
+
* with the file's real scope, and nothing here improves on it. The whole
|
|
29
|
+
* module only ever speaks where `getTypeFromTypeNode` produced `any` or
|
|
30
|
+
* `unknown`.
|
|
31
|
+
* - A name the program declares more than once. Measured on the three.js app: 253 of
|
|
32
|
+
* the 329 unreadable tags name a type that is unique program-wide and 4 are
|
|
33
|
+
* genuinely ambiguous. Those 4 stay `any`, because "one of these two" is not
|
|
34
|
+
* an answer and picking either is a guess.
|
|
35
|
+
* - A name that is not an exported TYPE anywhere (72 on the three.js app, mostly
|
|
36
|
+
* callback aliases three declares only in its own documentation).
|
|
37
|
+
* - Anything but a bare type REFERENCE. `{Object3D}` and `{Object3D|null}`
|
|
38
|
+
* are names this can resolve; a generic instantiation, a function type, or
|
|
39
|
+
* an object literal type written inside a tag is a shape whose PARTS would
|
|
40
|
+
* each need the same treatment, and resolving only the head would answer
|
|
41
|
+
* with a type the tag does not spell.
|
|
42
|
+
*
|
|
43
|
+
* ## MEASURED AND REVERTED: `@returns` and `@type`
|
|
44
|
+
*
|
|
45
|
+
* Only `@param` is read, and that is a measurement, not an oversight. The three.js app
|
|
46
|
+
* carries 93 unreadable `@returns` tags (67 uniquely resolvable) and 611
|
|
47
|
+
* unreadable `@type` tags (368 uniquely resolvable), so both looked like larger
|
|
48
|
+
* seams than the parameters. Both were built, wired and measured: `boundCount`
|
|
49
|
+
* went 215 -> 260 and the boxed carrier count moved by EXACTLY ZERO on both
|
|
50
|
+
* the three.js apps in the examples gallery.
|
|
51
|
+
*
|
|
52
|
+
* The reason is in the refusals. Of 176 `@type`-tagged `this.x = y` assignments
|
|
53
|
+
* in three's sources, nearly all spell something this cannot resolve --
|
|
54
|
+
* `{TypedArray}` (a typedef three declares only in its own documentation),
|
|
55
|
+
* `{Array<number>}`, `{Vector3[]}` -- so `tag-is-not-a-bare-reference` went
|
|
56
|
+
* 69 -> 235 while the tags that DID resolve landed on fields
|
|
57
|
+
* `field-bindings.ts` already answered. Extending `referencedNameOf` to arrays
|
|
58
|
+
* and generic instantiations would need a `T[]` `ts.Type` built from parts, and
|
|
59
|
+
* `checker.createArrayType` is checker-internal.
|
|
60
|
+
*
|
|
61
|
+
* Do not rebuild either one on the strength of the tag COUNTS. They are real
|
|
62
|
+
* and they are not where the boxing is.
|
|
63
|
+
*
|
|
64
|
+
* ## Why a tag beats the call-site census when both answer
|
|
65
|
+
*
|
|
66
|
+
* `parameter-bindings.ts` infers a parameter's type from what its callers
|
|
67
|
+
* pass. That is inference over an observed sample; this is the program's own
|
|
68
|
+
* statement. A stated type wins, exactly as a TS annotation stops the call-site
|
|
69
|
+
* census outright -- so this census is composed OUTERMOST and answers first.
|
|
70
|
+
*/
|
|
71
|
+
/**
|
|
72
|
+
* How many leading path segments two files share.
|
|
73
|
+
*
|
|
74
|
+
* A homonym across packages is the ordinary case in this corpus, not a
|
|
75
|
+
* pathology: three's own `Vector3`, the app's `threeGeometryRuntime.ts`
|
|
76
|
+
* `Vector3` and its `threeNativeShim.ts` `Vector3` are three unrelated classes
|
|
77
|
+
* with one name, and a program-wide index by name alone can only call that
|
|
78
|
+
* ambiguous. A reader does not: a tag written inside `three/src/math/
|
|
79
|
+
* Vector3.js` is talking about three's types, because that is the code it was
|
|
80
|
+
* written next to.
|
|
81
|
+
*
|
|
82
|
+
* Directory distance is the closest thing to that reading which needs no
|
|
83
|
+
* module graph: the candidate sharing the longest path prefix with the tag's
|
|
84
|
+
* own file is the one in its own package, then its own subtree. It is a
|
|
85
|
+
* TIE-BREAK only -- a name with one candidate never reaches it, and a tie
|
|
86
|
+
* still refuses -- so it can promote a refusal to an answer and never change
|
|
87
|
+
* an answer this census already had.
|
|
88
|
+
*/
|
|
89
|
+
const sharedPathDepth = (left, right) => {
|
|
90
|
+
const from = left.split('/');
|
|
91
|
+
const to = right.split('/');
|
|
92
|
+
let depth = 0;
|
|
93
|
+
while (depth < from.length && depth < to.length && from[depth] === to[depth])
|
|
94
|
+
depth += 1;
|
|
95
|
+
return depth;
|
|
96
|
+
};
|
|
97
|
+
/**
|
|
98
|
+
* The one candidate nearest the tag, or `null` when two are equally near.
|
|
99
|
+
*/
|
|
100
|
+
const nearestCandidate = (candidates, home) => {
|
|
101
|
+
let nearest = null;
|
|
102
|
+
let bestDepth = -1;
|
|
103
|
+
let tied = false;
|
|
104
|
+
for (const candidate of candidates) {
|
|
105
|
+
let depth = -1;
|
|
106
|
+
for (const declaration of candidate.declarations ?? []) {
|
|
107
|
+
depth = Math.max(depth, sharedPathDepth(home, declaration.getSourceFile().fileName));
|
|
108
|
+
}
|
|
109
|
+
if (depth > bestDepth) {
|
|
110
|
+
bestDepth = depth;
|
|
111
|
+
nearest = candidate;
|
|
112
|
+
tied = false;
|
|
113
|
+
}
|
|
114
|
+
else if (depth === bestDepth)
|
|
115
|
+
tied = true;
|
|
116
|
+
}
|
|
117
|
+
return tied ? null : nearest;
|
|
118
|
+
};
|
|
119
|
+
export const emptyJsDocTypeNameCensus = {
|
|
120
|
+
typeAt: () => null,
|
|
121
|
+
boundCount: 0,
|
|
122
|
+
refusals: []
|
|
123
|
+
};
|
|
124
|
+
const isUninformative = (type) => (type.flags & (ts.TypeFlags.Any | ts.TypeFlags.Unknown)) !== 0;
|
|
125
|
+
/** Whether a union member is `null`, `undefined`, or the literal-type spelling of either. */
|
|
126
|
+
const absenceKeywordOf = (member) => {
|
|
127
|
+
if (member.kind === ts.SyntaxKind.NullKeyword)
|
|
128
|
+
return 'null';
|
|
129
|
+
if (member.kind === ts.SyntaxKind.UndefinedKeyword)
|
|
130
|
+
return 'undefined';
|
|
131
|
+
if (!ts.isLiteralTypeNode(member))
|
|
132
|
+
return null;
|
|
133
|
+
if (member.literal.kind === ts.SyntaxKind.NullKeyword)
|
|
134
|
+
return 'null';
|
|
135
|
+
return null;
|
|
136
|
+
};
|
|
137
|
+
/**
|
|
138
|
+
* The single type-reference name a tag spells, plus the absences it spells
|
|
139
|
+
* beside it -- or `null` when the tag is not that shape.
|
|
140
|
+
*
|
|
141
|
+
* A union is read through only when exactly one arm is a reference and every
|
|
142
|
+
* other arm is `null`/`undefined`: `{Object3D|null}` is `Object3D` plus an
|
|
143
|
+
* absence this compiler already models, and the reference is the only part
|
|
144
|
+
* whose name needs resolving. Any other union is refused -- see the header.
|
|
145
|
+
*
|
|
146
|
+
* The absences are CARRIED OUT rather than dropped. Returning the bare name
|
|
147
|
+
* and resolving it left `{Object3D|null}` bound to `Object3D`, a type
|
|
148
|
+
* NARROWER than the one the program stated -- the one direction a census may
|
|
149
|
+
* never move, and the direction that puts a `null` into a cell whose carrier
|
|
150
|
+
* cannot hold one. `tagIsOptional`'s own comment already states the rule this
|
|
151
|
+
* was breaking.
|
|
152
|
+
*
|
|
153
|
+
* A non-null LITERAL arm is not an absence and never was. Admitting every
|
|
154
|
+
* `ts.isLiteralTypeNode` member silently dropped the string arm of a
|
|
155
|
+
* `{Vector3|'auto'}`; only the literal spelling of `null` is one.
|
|
156
|
+
*
|
|
157
|
+
* `?T` is JSDoc's own nullable spelling and means exactly `T | null`, so it
|
|
158
|
+
* reads as the reference plus that absence. A parenthesized type is the same
|
|
159
|
+
* type with parentheses around it -- three writes `{(NodeFrame|NodeBuilder)}`
|
|
160
|
+
* and `{(number)}` freely -- so it is unwrapped rather than refused; the
|
|
161
|
+
* parentheses are how the source was written, not a different shape.
|
|
162
|
+
*/
|
|
163
|
+
const referencedNameOf = (node) => {
|
|
164
|
+
if (ts.isParenthesizedTypeNode(node))
|
|
165
|
+
return referencedNameOf(node.type);
|
|
166
|
+
if (ts.isJSDocNullableType(node)) {
|
|
167
|
+
const inner = referencedNameOf(node.type);
|
|
168
|
+
return inner ? { names: inner.names, absences: [...new Set([...inner.absences, 'null'])] } : null;
|
|
169
|
+
}
|
|
170
|
+
if (ts.isUnionTypeNode(node)) {
|
|
171
|
+
const references = node.types.filter(ts.isTypeReferenceNode);
|
|
172
|
+
const absences = node.types.flatMap((member) => {
|
|
173
|
+
const absence = absenceKeywordOf(member);
|
|
174
|
+
return absence ? [absence] : [];
|
|
175
|
+
});
|
|
176
|
+
// Every member must be a name or an absence keyword; a shape written
|
|
177
|
+
// inside the union is still the refusal this census's header describes.
|
|
178
|
+
// Two or more NAMES are carried through rather than refused here, because
|
|
179
|
+
// whether a name means anything is a question about the PROGRAM, not about
|
|
180
|
+
// the tag, and only `consider` holds the index that answers it.
|
|
181
|
+
if (references.length === 0 || references.length + absences.length !== node.types.length)
|
|
182
|
+
return null;
|
|
183
|
+
const inner = references.flatMap((reference) => {
|
|
184
|
+
const resolved = referencedNameOf(reference);
|
|
185
|
+
return resolved ? [resolved] : [];
|
|
186
|
+
});
|
|
187
|
+
if (inner.length !== references.length)
|
|
188
|
+
return null;
|
|
189
|
+
return {
|
|
190
|
+
names: inner.flatMap((entry) => entry.names),
|
|
191
|
+
absences: [...new Set([...inner.flatMap((entry) => entry.absences), ...absences])]
|
|
192
|
+
};
|
|
193
|
+
}
|
|
194
|
+
if (!ts.isTypeReferenceNode(node))
|
|
195
|
+
return null;
|
|
196
|
+
if (node.typeArguments && node.typeArguments.length > 0)
|
|
197
|
+
return null;
|
|
198
|
+
return ts.isIdentifier(node.typeName) ? { names: [node.typeName.text], absences: [] } : null;
|
|
199
|
+
};
|
|
200
|
+
/** The JSDoc type node attached to a parameter or variable declaration, or `null`. */
|
|
201
|
+
const jsDocTypeNodeOf = (declaration) => {
|
|
202
|
+
if (ts.isParameter(declaration)) {
|
|
203
|
+
return ts.getJSDocType(declaration) ?? ts.getJSDocParameterTags(declaration)[0]?.typeExpression?.type ?? null;
|
|
204
|
+
}
|
|
205
|
+
return ts.getJSDocType(declaration) ?? null;
|
|
206
|
+
};
|
|
207
|
+
/**
|
|
208
|
+
* Whether a JSDoc `@param` tag was written `[name]` -- the JSDoc spelling of
|
|
209
|
+
* an optional parameter.
|
|
210
|
+
*
|
|
211
|
+
* `droppedTagTypeOf` refuses these. TypeScript states an optional parameter's
|
|
212
|
+
* type as `T | undefined`, and the tag's own type node spells only the `T`:
|
|
213
|
+
* publishing it where the checker had lost the whole answer would state a
|
|
214
|
+
* type NARROWER than the declaration, which is the one direction a census may
|
|
215
|
+
* never move.
|
|
216
|
+
*/
|
|
217
|
+
const tagIsOptional = (declaration) => ts.getJSDocParameterTags(declaration).some((tag) => tag.isBracketed === true);
|
|
218
|
+
/**
|
|
219
|
+
* The type a parameter's own JSDoc tag resolves to WHEN THE CHECKER LOST IT --
|
|
220
|
+
* the tag reads perfectly at its own position, and the parameter is `any`
|
|
221
|
+
* anyway.
|
|
222
|
+
*
|
|
223
|
+
* This is the mirror of the census above, and it is the worse half of the
|
|
224
|
+
* same failure. Above, a tag names something the file cannot bind, so
|
|
225
|
+
* `getTypeFromTypeNode` degrades it to `any` and the fix is to resolve the
|
|
226
|
+
* NAME one scope wider. Here nothing needs resolving: ask the checker for the
|
|
227
|
+
* tag's type, at the tag's own node, and it answers with a real type -- and
|
|
228
|
+
* asking the checker for the PARAMETER's type answers `any`. One authority,
|
|
229
|
+
* two answers, and the boxed one wins.
|
|
230
|
+
*
|
|
231
|
+
* ## The trigger, isolated
|
|
232
|
+
*
|
|
233
|
+
* A `typeof`-union tag whose parameter the body then compares, with `===` or
|
|
234
|
+
* `!==`, against one of the very values the tag names. Reduced to two files
|
|
235
|
+
* and eight functions (`.scratch/fleet/f7/repro`), against the checker with
|
|
236
|
+
* no compiler in the picture:
|
|
237
|
+
*
|
|
238
|
+
* export const A = 0, B = 1, C = 2; // k.js
|
|
239
|
+
* /** @param {(typeof A | typeof B)} p *\/
|
|
240
|
+
* function f( p ) { if ( p !== A ) {} } // p: any
|
|
241
|
+
* function g( p ) { if ( p !== C ) {} } // p: 0 | 1
|
|
242
|
+
* function h( p ) { if ( p !== 0 ) {} } // p: 0 | 1
|
|
243
|
+
* function i( p ) { switch ( p ) { case A: break; } } // p: 0 | 1
|
|
244
|
+
*
|
|
245
|
+
* Typing the parameter needs `typeof A`; narrowing `p === A` needs the
|
|
246
|
+
* parameter; the checker breaks the cycle by answering `any` and caching it.
|
|
247
|
+
* A comparison against a value the tag does NOT name, a literal, or a
|
|
248
|
+
* `switch` all resolve fine -- so this is a genuine circularity, not the
|
|
249
|
+
* spelling and not the arm count. `getTypeFromTypeNode` asked afterwards is
|
|
250
|
+
* outside the cycle and answers correctly, which is the whole seam.
|
|
251
|
+
*
|
|
252
|
+
* ## Why publishing it is safe
|
|
253
|
+
*
|
|
254
|
+
* Nothing is invented and nothing is widened. The type published is the
|
|
255
|
+
* checker's own answer for a type node the PROGRAM wrote, read at that node's
|
|
256
|
+
* own position -- the identical call TypeScript would have made itself had
|
|
257
|
+
* the cycle not intervened. It is offered only where the checker has no
|
|
258
|
+
* answer at all (`any`/`unknown` at the declaration), so a parameter the
|
|
259
|
+
* checker did type keeps its type, and a parameter the program genuinely
|
|
260
|
+
* declared `{*}`/`{any}` stays dynamic because its tag resolves to `any` too
|
|
261
|
+
* and this refuses it.
|
|
262
|
+
*
|
|
263
|
+
* ## What it refuses
|
|
264
|
+
*
|
|
265
|
+
* - a parameter carrying a TS annotation, or no tag at all -- neither is this
|
|
266
|
+
* question;
|
|
267
|
+
* - a tag that resolves to `any`/`unknown`: that is the census above's
|
|
268
|
+
* subject, not this one;
|
|
269
|
+
* - a parameter the checker DID type: the checker's answer stands, exactly as
|
|
270
|
+
* `typeAt` defers to a narrowed read below;
|
|
271
|
+
* - an optional (`[name]`) tag -- see `tagIsOptional`.
|
|
272
|
+
*
|
|
273
|
+
* Measured on the three.js app: 2 parameters program-wide (`WebGLState.setBlending`'s
|
|
274
|
+
* `blending`, `setCullFace`'s `cullFace`), 2902 tagged parameters agreeing
|
|
275
|
+
* with their tag, and no third case anywhere in 307 files. Small, and a
|
|
276
|
+
* silent miscompile of a fully stated type: the constants those two switch on
|
|
277
|
+
* are `number`, and boxing them made every `currentBlending = blending` in
|
|
278
|
+
* the renderer's state machine a dynamic store.
|
|
279
|
+
*/
|
|
280
|
+
const droppedTagTypeOf = (checker, declaration) => {
|
|
281
|
+
if (declaration.type)
|
|
282
|
+
return null;
|
|
283
|
+
if (tagIsOptional(declaration))
|
|
284
|
+
return null;
|
|
285
|
+
const typeNode = jsDocTypeNodeOf(declaration);
|
|
286
|
+
if (!typeNode)
|
|
287
|
+
return null;
|
|
288
|
+
const stated = checker.getTypeFromTypeNode(typeNode);
|
|
289
|
+
if (isUninformative(stated))
|
|
290
|
+
return null;
|
|
291
|
+
return isUninformative(checker.getTypeAtLocation(declaration)) ? stated : null;
|
|
292
|
+
};
|
|
293
|
+
/**
|
|
294
|
+
* Whole-program census of every JSDoc tag whose name the checker could not
|
|
295
|
+
* bind, resolved against the program's own exported types.
|
|
296
|
+
*/
|
|
297
|
+
export const censusJsDocTypeNames = (checker, files, reachable) => {
|
|
298
|
+
// The index is built from EXPORTS rather than from every declaration in the
|
|
299
|
+
// program: a name a module keeps to itself is not one another module's prose
|
|
300
|
+
// could be referring to, and including it would manufacture ambiguity between
|
|
301
|
+
// a public type and somebody's private helper of the same name.
|
|
302
|
+
const byName = new Map();
|
|
303
|
+
for (const file of files) {
|
|
304
|
+
const moduleSymbol = checker.getSymbolAtLocation(file);
|
|
305
|
+
if (!moduleSymbol)
|
|
306
|
+
continue;
|
|
307
|
+
for (const exported of checker.getExportsOfModule(moduleSymbol)) {
|
|
308
|
+
// A re-export is the SAME declaration reached by a second path --
|
|
309
|
+
// `three/src/Three.js` re-exports nearly everything, so counting export
|
|
310
|
+
// symbols rather than the declarations behind them reports almost every
|
|
311
|
+
// name as ambiguous. Measured: 232 names looked ambiguous before this
|
|
312
|
+
// alias hop and 4 actually are.
|
|
313
|
+
const target = (exported.flags & ts.SymbolFlags.Alias) !== 0 ? checker.getAliasedSymbol(exported) : exported;
|
|
314
|
+
const declared = checker.getDeclaredTypeOfSymbol(target);
|
|
315
|
+
if (!declared || isUninformative(declared))
|
|
316
|
+
continue;
|
|
317
|
+
const existing = byName.get(exported.name);
|
|
318
|
+
if (existing)
|
|
319
|
+
existing.add(target);
|
|
320
|
+
else
|
|
321
|
+
byName.set(exported.name, new Set([target]));
|
|
322
|
+
}
|
|
323
|
+
}
|
|
324
|
+
// A JSDoc `@typedef` is NOT subject to the exports rule above, and treating
|
|
325
|
+
// it as one is what made that rule wrong here. JavaScript has no syntax to
|
|
326
|
+
// export a typedef, so the convention every JSDoc corpus relies on is that a
|
|
327
|
+
// named typedef is referable program-wide from the prose of any file:
|
|
328
|
+
// `@param {RenderTarget~Options} [options]` is written in five of three's
|
|
329
|
+
// render-target subclasses, none of which import anything from
|
|
330
|
+
// `RenderTarget.js` to make the name visible, because there is nothing to
|
|
331
|
+
// import. `getExportsOfModule` cannot see such a declaration at all, so every
|
|
332
|
+
// one of those references refused `name-is-not-an-exported-type` -- not
|
|
333
|
+
// because the name is private, but because the language offers no way to
|
|
334
|
+
// make it public.
|
|
335
|
+
//
|
|
336
|
+
// The exports rule's own reasoning -- "a name a module keeps to itself is not
|
|
337
|
+
// one another module's prose could be referring to" -- is about declarations
|
|
338
|
+
// that HAD the option of being exported and declined it. A typedef never had
|
|
339
|
+
// the option, so declining is not a choice it can express.
|
|
340
|
+
//
|
|
341
|
+
// Ambiguity handling is deliberately shared rather than relaxed: these go
|
|
342
|
+
// into the SAME `byName` index, so two typedefs of one name still collide and
|
|
343
|
+
// are still refused rather than guessed between.
|
|
344
|
+
const localsOf = (file) => file.locals;
|
|
345
|
+
for (const file of files) {
|
|
346
|
+
localsOf(file)?.forEach((symbol) => {
|
|
347
|
+
if (!symbol.declarations?.some((node) => ts.isJSDocTypedefTag(node) || ts.isJSDocCallbackTag(node)))
|
|
348
|
+
return;
|
|
349
|
+
const declared = checker.getDeclaredTypeOfSymbol(symbol);
|
|
350
|
+
if (!declared || isUninformative(declared))
|
|
351
|
+
return;
|
|
352
|
+
const existing = byName.get(symbol.name);
|
|
353
|
+
if (existing)
|
|
354
|
+
existing.add(symbol);
|
|
355
|
+
else
|
|
356
|
+
byName.set(symbol.name, new Set([symbol]));
|
|
357
|
+
});
|
|
358
|
+
}
|
|
359
|
+
const bound = new Map();
|
|
360
|
+
const refusals = [];
|
|
361
|
+
/** A refusal's `owner`: the declaration's own name and where the program wrote it. */
|
|
362
|
+
const ownerOfDeclaration = (declaration) => {
|
|
363
|
+
const file = declaration.getSourceFile();
|
|
364
|
+
const line = file.getLineAndCharacterOfPosition(declaration.getStart()).line + 1;
|
|
365
|
+
return `${declaration.name.getText()} (${file.fileName}:${line})`;
|
|
366
|
+
};
|
|
367
|
+
const consider = (declaration) => {
|
|
368
|
+
// `root` is the same stable, hand-written reason this census always keyed
|
|
369
|
+
// its old count map by -- never node text or a type spelling -- so it is
|
|
370
|
+
// already the ROOT `census-refusal.ts` asks for. `reason` used to just
|
|
371
|
+
// restate `root` for every one of these: correct for the two refusals that
|
|
372
|
+
// carry no per-instance fact beyond `owner` (ambiguity, an unreadable
|
|
373
|
+
// resolved type), but for `tag-is-not-a-bare-reference` and
|
|
374
|
+
// `name-is-not-an-exported-type` the missing fact IS the point -- a reader
|
|
375
|
+
// hitting either one had to go grep three's own source to learn what name
|
|
376
|
+
// the tag spelled and why it did not resolve. `detail`, when given, is
|
|
377
|
+
// exactly that: the tag's own text for the shape refusal, the looked-up
|
|
378
|
+
// name(s) for the exported-type refusal. Nothing here changes `root` (the
|
|
379
|
+
// grouping key) or what `typeAt` returns -- this is strictly the prose.
|
|
380
|
+
const refuse = (root, detail) => {
|
|
381
|
+
refusals.push(censusRefusal('jsdoc-type-name', root, detail ? `${root}: ${detail}` : root, ownerOfDeclaration(declaration)));
|
|
382
|
+
};
|
|
383
|
+
if (declaration.type)
|
|
384
|
+
return;
|
|
385
|
+
if (!ts.isIdentifier(declaration.name))
|
|
386
|
+
return;
|
|
387
|
+
const typeNode = jsDocTypeNodeOf(declaration);
|
|
388
|
+
if (!typeNode)
|
|
389
|
+
return;
|
|
390
|
+
if (!isUninformative(checker.getTypeFromTypeNode(typeNode))) {
|
|
391
|
+
// The tag reads. Either the checker applied it -- nothing to do -- or it
|
|
392
|
+
// lost it to the circularity `droppedTagTypeOf` documents, and the tag's
|
|
393
|
+
// own answer is restored. Asked here rather than in a second walk so one
|
|
394
|
+
// pass over the program settles both halves of "what does this tag say".
|
|
395
|
+
if (!ts.isParameter(declaration))
|
|
396
|
+
return;
|
|
397
|
+
const dropped = droppedTagTypeOf(checker, declaration);
|
|
398
|
+
// No refusal is counted for the ordinary case. A tag the checker read is
|
|
399
|
+
// not a tag this module failed on -- it is a tag with no question in it,
|
|
400
|
+
// and filing 2902 of those beside the 495 real refusals would bury them.
|
|
401
|
+
if (dropped)
|
|
402
|
+
bound.set(declaration, dropped);
|
|
403
|
+
return;
|
|
404
|
+
}
|
|
405
|
+
const reference = referencedNameOf(typeNode);
|
|
406
|
+
// `typeNode.getText()` is the tag's OWN spelling -- `Window.AudioContext`
|
|
407
|
+
// (a qualified name; the head `AudioContext` would resolve to THIS FILE's
|
|
408
|
+
// own class, which is exactly the wrong answer the qualifier exists to
|
|
409
|
+
// avoid), `Curve<TVector>` (a generic instantiation the declaration
|
|
410
|
+
// overlay carried over from `@types/three`; see the header's "Anything
|
|
411
|
+
// but a bare type REFERENCE"). Printing it is strictly prose: it does not
|
|
412
|
+
// change which shapes refuse, only whether a reader can tell which one
|
|
413
|
+
// fired without re-deriving it from the source.
|
|
414
|
+
if (reference === null)
|
|
415
|
+
return refuse('tag-is-not-a-bare-reference', typeNode.getText());
|
|
416
|
+
// A union arm naming a type this program declares NOWHERE is uninhabited:
|
|
417
|
+
// no value of it can reach this parameter, so the tag means the arms that
|
|
418
|
+
// remain. three's `CubeCamera.update( renderer, scene )` is tagged
|
|
419
|
+
// `{(Renderer|WebGLRenderer)}`, and `Renderer` is exported only from the
|
|
420
|
+
// WebGPU entry point that this program never imports -- so the checker
|
|
421
|
+
// resolves that arm to `any`, `any | WebGLRenderer` absorbs to `any`, and
|
|
422
|
+
// the renderer every caller really passes crosses into a dynamic carrier.
|
|
423
|
+
// Dropping the empty arm states what the reachable program already proves.
|
|
424
|
+
// Two arms that BOTH name real types are a genuine union and still refuse:
|
|
425
|
+
// this census binds one declared type, and picking either would be a guess.
|
|
426
|
+
const named = reference.names.filter((name) => byName.has(name));
|
|
427
|
+
// `reference.names` is what the tag itself named (`TypedArray`,
|
|
428
|
+
// `NodeBuilder`, ...) -- not declared, by any file this program compiles,
|
|
429
|
+
// under any of those exact spellings. Naming them is the fix
|
|
430
|
+
// `docs/SEMANTIC-AUTHORITY.md`'s correctness bar asks for when the answer
|
|
431
|
+
// is "keep refusing": three's own documentation convention, not a fact
|
|
432
|
+
// this compiler could derive, so print what was looked up rather than
|
|
433
|
+
// making the next reader grep three's source to find out.
|
|
434
|
+
if (named.length === 0)
|
|
435
|
+
return refuse('name-is-not-an-exported-type', reference.names.join(' | '));
|
|
436
|
+
if (named.length > 1)
|
|
437
|
+
return refuse('union-names-more-than-one-program-type');
|
|
438
|
+
const candidates = byName.get(named[0]);
|
|
439
|
+
if (!candidates)
|
|
440
|
+
return refuse('name-is-not-an-exported-type', named[0]);
|
|
441
|
+
const [only] = candidates;
|
|
442
|
+
const symbol = candidates.size === 1 ? only : nearestCandidate(candidates, declaration.getSourceFile().fileName);
|
|
443
|
+
if (!symbol)
|
|
444
|
+
return refuse('name-is-ambiguous-program-wide');
|
|
445
|
+
const resolved = checker.getDeclaredTypeOfSymbol(symbol);
|
|
446
|
+
if (!resolved || isUninformative(resolved))
|
|
447
|
+
return refuse('resolved-type-is-unreadable');
|
|
448
|
+
const absent = (reference.absences.includes('null') ? ts.TypeFlags.Null : 0) |
|
|
449
|
+
(reference.absences.includes('undefined') ? ts.TypeFlags.Undefined : 0);
|
|
450
|
+
bound.set(declaration, absent === 0 ? resolved : checker.getNullableType(resolved, absent));
|
|
451
|
+
};
|
|
452
|
+
const visit = (node) => {
|
|
453
|
+
if (ts.isParameter(node) || ts.isVariableDeclaration(node))
|
|
454
|
+
consider(node);
|
|
455
|
+
ts.forEachChild(node, visit);
|
|
456
|
+
};
|
|
457
|
+
for (const file of files) {
|
|
458
|
+
forEachReachableStatement(reachable, file, visit);
|
|
459
|
+
}
|
|
460
|
+
const declarationOf = (node) => {
|
|
461
|
+
const declarations = checker.getSymbolAtLocation(node)?.declarations;
|
|
462
|
+
return declarations && declarations.length === 1 ? (declarations[0] ?? null) : null;
|
|
463
|
+
};
|
|
464
|
+
return {
|
|
465
|
+
typeAt: (node) => {
|
|
466
|
+
if (ts.isParameter(node) || ts.isVariableDeclaration(node))
|
|
467
|
+
return bound.get(node) ?? null;
|
|
468
|
+
// A reference is a read of the storage the declaration named, so it
|
|
469
|
+
// carries the declaration's type -- with one exception this must not
|
|
470
|
+
// trample: where the checker NARROWED the read, the checker is right and
|
|
471
|
+
// this defers. `parameter-bindings.ts`'s `known` draws the same line for
|
|
472
|
+
// the same reason, and a census that always won would discard every
|
|
473
|
+
// narrowing in the program.
|
|
474
|
+
if (!ts.isIdentifier(node))
|
|
475
|
+
return null;
|
|
476
|
+
const declaration = declarationOf(node);
|
|
477
|
+
if (!declaration)
|
|
478
|
+
return null;
|
|
479
|
+
const stated = bound.get(declaration);
|
|
480
|
+
if (!stated)
|
|
481
|
+
return null;
|
|
482
|
+
return isUninformative(checker.getTypeAtLocation(node)) ? stated : null;
|
|
483
|
+
},
|
|
484
|
+
boundCount: bound.size,
|
|
485
|
+
refusals
|
|
486
|
+
};
|
|
487
|
+
};
|
|
488
|
+
/**
|
|
489
|
+
* A `ParameterBindingCensus`-shaped view answering from the JSDoc names FIRST
|
|
490
|
+
* and `upstream` otherwise -- the seam for `frontend.ts`, composed OUTERMOST
|
|
491
|
+
* so a type the program stated outranks one inferred from call sites.
|
|
492
|
+
*/
|
|
493
|
+
export const withJsDocTypeNames = (checker, files, reachable, upstream = emptyParameterBindingCensus) => {
|
|
494
|
+
const names = censusJsDocTypeNames(checker, files, reachable);
|
|
495
|
+
// This is the OUTERMOST wrapper in the frontend's composition chain
|
|
496
|
+
// (`frontend.ts`'s `withJsDocTypeNames(...)` call has no further wrapper
|
|
497
|
+
// around it), so whatever this does with `upstream.refusals` is what the
|
|
498
|
+
// frontend sees. Concatenating rather than picking one side carries the
|
|
499
|
+
// whole chain: `names`'s own refusals already key themselves under the
|
|
500
|
+
// `jsdoc-type-name` domain (`censusRefusal`'s `census:${domain}:${root}`),
|
|
501
|
+
// so no re-prefixing is needed the way the old `jsdoc:${reason}` count-map
|
|
502
|
+
// key invented one -- the CensusRefusal itself is already namespaced.
|
|
503
|
+
const refusals = [...upstream.refusals, ...names.refusals];
|
|
504
|
+
return {
|
|
505
|
+
// A wrapper owns only the answers it refines. Preserve the full snapshot:
|
|
506
|
+
// enumerating forwarding methods here previously dropped call attribution.
|
|
507
|
+
...upstream,
|
|
508
|
+
typeAt: (node) => names.typeAt(node) ?? upstream.typeAt(node),
|
|
509
|
+
boundCount: upstream.boundCount + names.boundCount,
|
|
510
|
+
refusals
|
|
511
|
+
};
|
|
512
|
+
};
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import type { StructuralTypeId } from '../../identity/ids.js';
|
|
2
|
+
import type { StructuralTypeTable } from '../model/structural-type-table.js';
|
|
3
|
+
/**
|
|
4
|
+
* `keyof T`, answered from the sealed structural table.
|
|
5
|
+
*
|
|
6
|
+
* Its own module because it needs exactly one thing -- the table -- out of the
|
|
7
|
+
* large closure the rest of normalization shares. A resolver that reads back
|
|
8
|
+
* what is already interned is a different job from the walk that interns it,
|
|
9
|
+
* and keeping them apart is what stops the second one growing a shortcut into
|
|
10
|
+
* the first.
|
|
11
|
+
*/
|
|
12
|
+
/**
|
|
13
|
+
* A resolved key type, or the reason no key set could be named.
|
|
14
|
+
*
|
|
15
|
+
* Explicitly tagged, and that is the whole point of this type existing. The
|
|
16
|
+
* previous answer was `StructuralTypeId | string`, discriminated at the one
|
|
17
|
+
* call site by `typeof outcome === 'string'` -- and `StructuralTypeId` IS a
|
|
18
|
+
* string (`identity/ids.ts` brands it at the type level only, which erases at
|
|
19
|
+
* runtime). So that test was true for BOTH arms: every `keyof` this resolver
|
|
20
|
+
* answered exactly was then wrapped as `unresolved(<the id>)` by its own
|
|
21
|
+
* caller, and the reason string a reader saw was the id of the correct answer.
|
|
22
|
+
* A union whose arms a runtime test cannot tell apart is not a union; the tag
|
|
23
|
+
* is what makes the two answers distinguishable at all.
|
|
24
|
+
*/
|
|
25
|
+
export type KeyofOutcome = {
|
|
26
|
+
readonly kind: 'resolved';
|
|
27
|
+
readonly id: StructuralTypeId;
|
|
28
|
+
} | {
|
|
29
|
+
readonly kind: 'unmodelled';
|
|
30
|
+
readonly reason: string;
|
|
31
|
+
};
|
|
32
|
+
export declare const createKeyofResolver: (table: StructuralTypeTable) => ((id: StructuralTypeId) => KeyofOutcome);
|