@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.
Files changed (966) hide show
  1. package/LICENSE +202 -0
  2. package/README.md +149 -0
  3. package/dist/cli-analyze.d.ts +1 -0
  4. package/dist/cli-analyze.js +61 -0
  5. package/dist/cli-coverage.d.ts +1 -0
  6. package/dist/cli-coverage.js +329 -0
  7. package/dist/cli-emit.d.ts +10 -0
  8. package/dist/cli-emit.js +398 -0
  9. package/dist/cli-module-graph.d.ts +18 -0
  10. package/dist/cli-module-graph.js +123 -0
  11. package/dist/cli-package-source.d.ts +5 -0
  12. package/dist/cli-package-source.js +116 -0
  13. package/dist/cli-project.d.ts +2 -0
  14. package/dist/cli-project.js +60 -0
  15. package/dist/cli.d.ts +2 -0
  16. package/dist/cli.js +199 -0
  17. package/dist/compiler.d.ts +228 -0
  18. package/dist/compiler.js +1029 -0
  19. package/dist/conversion/algebra.d.ts +218 -0
  20. package/dist/conversion/algebra.js +155 -0
  21. package/dist/conversion/build.d.ts +67 -0
  22. package/dist/conversion/build.js +1378 -0
  23. package/dist/conversion/derive.d.ts +37 -0
  24. package/dist/conversion/derive.js +260 -0
  25. package/dist/conversion/graph-validation.d.ts +8 -0
  26. package/dist/conversion/graph-validation.js +97 -0
  27. package/dist/conversion/native-callable-adapter.d.ts +13 -0
  28. package/dist/conversion/native-callable-adapter.js +53 -0
  29. package/dist/conversion/native-class-reference.d.ts +12 -0
  30. package/dist/conversion/native-class-reference.js +39 -0
  31. package/dist/conversion/native-payload-transport.d.ts +25 -0
  32. package/dist/conversion/native-payload-transport.js +33 -0
  33. package/dist/conversion/native-selection.d.ts +49 -0
  34. package/dist/conversion/native-selection.js +135 -0
  35. package/dist/conversion/native-sum.d.ts +42 -0
  36. package/dist/conversion/native-sum.js +115 -0
  37. package/dist/conversion/nodes.d.ts +55 -0
  38. package/dist/conversion/nodes.js +91 -0
  39. package/dist/conversion/operand-view.d.ts +14 -0
  40. package/dist/conversion/operand-view.js +20 -0
  41. package/dist/conversion/record-view.d.ts +157 -0
  42. package/dist/conversion/record-view.js +273 -0
  43. package/dist/conversion/registry.d.ts +217 -0
  44. package/dist/conversion/registry.js +1 -0
  45. package/dist/diagnostics/model.d.ts +76 -0
  46. package/dist/diagnostics/model.js +60 -0
  47. package/dist/diagnostics/sweep.d.ts +31 -0
  48. package/dist/diagnostics/sweep.js +112 -0
  49. package/dist/identity/ids.d.ts +179 -0
  50. package/dist/identity/ids.js +212 -0
  51. package/dist/ir/absent-class-arm.d.ts +48 -0
  52. package/dist/ir/absent-class-arm.js +157 -0
  53. package/dist/ir/borrow-effects.d.ts +23 -0
  54. package/dist/ir/borrow-effects.js +151 -0
  55. package/dist/ir/borrowed-call-arguments.d.ts +40 -0
  56. package/dist/ir/borrowed-call-arguments.js +117 -0
  57. package/dist/ir/build.d.ts +168 -0
  58. package/dist/ir/build.js +459 -0
  59. package/dist/ir/call-dispatch.d.ts +38 -0
  60. package/dist/ir/call-dispatch.js +502 -0
  61. package/dist/ir/call-entry.d.ts +142 -0
  62. package/dist/ir/call-entry.js +386 -0
  63. package/dist/ir/callable-class-flow.d.ts +27 -0
  64. package/dist/ir/callable-class-flow.js +1386 -0
  65. package/dist/ir/callable-field-slots.d.ts +22 -0
  66. package/dist/ir/callable-field-slots.js +166 -0
  67. package/dist/ir/callable-identity-demand.d.ts +52 -0
  68. package/dist/ir/callable-identity-demand.js +460 -0
  69. package/dist/ir/callable-member-candidates.d.ts +9 -0
  70. package/dist/ir/callable-member-candidates.js +39 -0
  71. package/dist/ir/callable-records.d.ts +21 -0
  72. package/dist/ir/callable-records.js +411 -0
  73. package/dist/ir/captures.d.ts +26 -0
  74. package/dist/ir/captures.js +335 -0
  75. package/dist/ir/certificate.d.ts +45 -0
  76. package/dist/ir/certificate.js +47 -0
  77. package/dist/ir/certify/carrier-keys.d.ts +73 -0
  78. package/dist/ir/certify/carrier-keys.js +221 -0
  79. package/dist/ir/certify/function-source.d.ts +4 -0
  80. package/dist/ir/certify/function-source.js +28 -0
  81. package/dist/ir/certify/has-property-key.d.ts +88 -0
  82. package/dist/ir/certify/has-property-key.js +116 -0
  83. package/dist/ir/certify/instanceof-key.d.ts +24 -0
  84. package/dist/ir/certify/instanceof-key.js +35 -0
  85. package/dist/ir/certify/property-access-keys.d.ts +172 -0
  86. package/dist/ir/certify/property-access-keys.js +291 -0
  87. package/dist/ir/certify/property-access.d.ts +3 -0
  88. package/dist/ir/certify/property-access.js +597 -0
  89. package/dist/ir/certify/runtime-helper.d.ts +3 -0
  90. package/dist/ir/certify/runtime-helper.js +326 -0
  91. package/dist/ir/certify/typeof-operand.d.ts +14 -0
  92. package/dist/ir/certify/typeof-operand.js +16 -0
  93. package/dist/ir/certify.d.ts +123 -0
  94. package/dist/ir/certify.js +481 -0
  95. package/dist/ir/class-evaluation.d.ts +26 -0
  96. package/dist/ir/class-evaluation.js +50 -0
  97. package/dist/ir/class-static-fields.d.ts +60 -0
  98. package/dist/ir/class-static-fields.js +108 -0
  99. package/dist/ir/construct-entry.d.ts +26 -0
  100. package/dist/ir/construct-entry.js +117 -0
  101. package/dist/ir/dead-values.d.ts +90 -0
  102. package/dist/ir/dead-values.js +184 -0
  103. package/dist/ir/deferral.d.ts +99 -0
  104. package/dist/ir/deferral.js +409 -0
  105. package/dist/ir/dense-loops.d.ts +230 -0
  106. package/dist/ir/dense-loops.js +697 -0
  107. package/dist/ir/dominance.d.ts +82 -0
  108. package/dist/ir/dominance.js +268 -0
  109. package/dist/ir/emission-representations.d.ts +71 -0
  110. package/dist/ir/emission-representations.js +350 -0
  111. package/dist/ir/facts.d.ts +218 -0
  112. package/dist/ir/facts.js +181 -0
  113. package/dist/ir/fixed-data-definition.d.ts +19 -0
  114. package/dist/ir/fixed-data-definition.js +49 -0
  115. package/dist/ir/generator-split.d.ts +38 -0
  116. package/dist/ir/generator-split.js +329 -0
  117. package/dist/ir/hoist.d.ts +55 -0
  118. package/dist/ir/hoist.js +375 -0
  119. package/dist/ir/instantiation.d.ts +61 -0
  120. package/dist/ir/instantiation.js +137 -0
  121. package/dist/ir/integer-storage.d.ts +170 -0
  122. package/dist/ir/integer-storage.js +822 -0
  123. package/dist/ir/integers.d.ts +161 -0
  124. package/dist/ir/integers.js +539 -0
  125. package/dist/ir/integrity-restrictions.d.ts +50 -0
  126. package/dist/ir/integrity-restrictions.js +118 -0
  127. package/dist/ir/local-iterators.d.ts +4 -0
  128. package/dist/ir/local-iterators.js +27 -0
  129. package/dist/ir/lower-allocation.d.ts +4 -0
  130. package/dist/ir/lower-allocation.js +325 -0
  131. package/dist/ir/lower-completion.d.ts +15 -0
  132. package/dist/ir/lower-completion.js +25 -0
  133. package/dist/ir/lower-destructuring.d.ts +5 -0
  134. package/dist/ir/lower-destructuring.js +693 -0
  135. package/dist/ir/lower-element.d.ts +29 -0
  136. package/dist/ir/lower-element.js +111 -0
  137. package/dist/ir/lower-exceptions.d.ts +47 -0
  138. package/dist/ir/lower-exceptions.js +92 -0
  139. package/dist/ir/lower-flow.d.ts +137 -0
  140. package/dist/ir/lower-flow.js +600 -0
  141. package/dist/ir/lower-graph.d.ts +218 -0
  142. package/dist/ir/lower-graph.js +687 -0
  143. package/dist/ir/lower-invocation.d.ts +4 -0
  144. package/dist/ir/lower-invocation.js +514 -0
  145. package/dist/ir/lower-narrow.d.ts +53 -0
  146. package/dist/ir/lower-narrow.js +320 -0
  147. package/dist/ir/lower-operands.d.ts +272 -0
  148. package/dist/ir/lower-operands.js +461 -0
  149. package/dist/ir/lower-property.d.ts +21 -0
  150. package/dist/ir/lower-property.js +132 -0
  151. package/dist/ir/lower-protocol.d.ts +11 -0
  152. package/dist/ir/lower-protocol.js +118 -0
  153. package/dist/ir/lower-short-circuit.d.ts +41 -0
  154. package/dist/ir/lower-short-circuit.js +63 -0
  155. package/dist/ir/lower.d.ts +82 -0
  156. package/dist/ir/lower.js +1346 -0
  157. package/dist/ir/model.d.ts +1474 -0
  158. package/dist/ir/model.js +6 -0
  159. package/dist/ir/native-absent-property.d.ts +3 -0
  160. package/dist/ir/native-absent-property.js +13 -0
  161. package/dist/ir/native-array-transport.d.ts +7 -0
  162. package/dist/ir/native-array-transport.js +46 -0
  163. package/dist/ir/native-callable-bind.d.ts +9 -0
  164. package/dist/ir/native-callable-bind.js +30 -0
  165. package/dist/ir/native-carrier-predicate.d.ts +34 -0
  166. package/dist/ir/native-carrier-predicate.js +49 -0
  167. package/dist/ir/native-class-accessor.d.ts +18 -0
  168. package/dist/ir/native-class-accessor.js +52 -0
  169. package/dist/ir/native-class-construction.d.ts +16 -0
  170. package/dist/ir/native-class-construction.js +71 -0
  171. package/dist/ir/native-class-initialization.d.ts +15 -0
  172. package/dist/ir/native-class-initialization.js +56 -0
  173. package/dist/ir/native-class-origins.d.ts +13 -0
  174. package/dist/ir/native-class-origins.js +237 -0
  175. package/dist/ir/native-dictionary-transport.d.ts +6 -0
  176. package/dist/ir/native-dictionary-transport.js +37 -0
  177. package/dist/ir/native-enumeration.d.ts +14 -0
  178. package/dist/ir/native-enumeration.js +26 -0
  179. package/dist/ir/native-equality.d.ts +10 -0
  180. package/dist/ir/native-equality.js +18 -0
  181. package/dist/ir/native-field-owner.d.ts +37 -0
  182. package/dist/ir/native-field-owner.js +183 -0
  183. package/dist/ir/native-fixed-layout.d.ts +41 -0
  184. package/dist/ir/native-fixed-layout.js +232 -0
  185. package/dist/ir/native-host-construction.d.ts +53 -0
  186. package/dist/ir/native-host-construction.js +62 -0
  187. package/dist/ir/native-key-query.d.ts +4 -0
  188. package/dist/ir/native-key-query.js +38 -0
  189. package/dist/ir/native-merge-transport.d.ts +25 -0
  190. package/dist/ir/native-merge-transport.js +71 -0
  191. package/dist/ir/native-record-index-transport.d.ts +11 -0
  192. package/dist/ir/native-record-index-transport.js +34 -0
  193. package/dist/ir/native-record-index.d.ts +12 -0
  194. package/dist/ir/native-record-index.js +27 -0
  195. package/dist/ir/native-reflect-field.d.ts +5 -0
  196. package/dist/ir/native-reflect-field.js +33 -0
  197. package/dist/ir/native-sequence-transport.d.ts +7 -0
  198. package/dist/ir/native-sequence-transport.js +53 -0
  199. package/dist/ir/numeric-intrinsics.d.ts +13 -0
  200. package/dist/ir/numeric-intrinsics.js +57 -0
  201. package/dist/ir/object-value-conversions.d.ts +20 -0
  202. package/dist/ir/object-value-conversions.js +50 -0
  203. package/dist/ir/physical-class-reflection.d.ts +9 -0
  204. package/dist/ir/physical-class-reflection.js +57 -0
  205. package/dist/ir/presence-proof.d.ts +42 -0
  206. package/dist/ir/presence-proof.js +490 -0
  207. package/dist/ir/program-facts.d.ts +106 -0
  208. package/dist/ir/program-facts.js +319 -0
  209. package/dist/ir/proven-branches.d.ts +16 -0
  210. package/dist/ir/proven-branches.js +219 -0
  211. package/dist/ir/queries.d.ts +41 -0
  212. package/dist/ir/queries.js +213 -0
  213. package/dist/ir/reflection-demand.d.ts +64 -0
  214. package/dist/ir/reflection-demand.js +1394 -0
  215. package/dist/ir/refusal.d.ts +43 -0
  216. package/dist/ir/refusal.js +28 -0
  217. package/dist/ir/shake.d.ts +37 -0
  218. package/dist/ir/shake.js +1078 -0
  219. package/dist/ir/static-callables.d.ts +11 -0
  220. package/dist/ir/static-callables.js +163 -0
  221. package/dist/ir/string-layout-reuse.d.ts +13 -0
  222. package/dist/ir/string-layout-reuse.js +39 -0
  223. package/dist/ir/string-length-reuse.d.ts +8 -0
  224. package/dist/ir/string-length-reuse.js +47 -0
  225. package/dist/ir/transfer.d.ts +78 -0
  226. package/dist/ir/transfer.js +270 -0
  227. package/dist/ir/type-query-results.d.ts +25 -0
  228. package/dist/ir/type-query-results.js +96 -0
  229. package/dist/ir/typed-property-access.d.ts +100 -0
  230. package/dist/ir/typed-property-access.js +161 -0
  231. package/dist/ir/verify.d.ts +19 -0
  232. package/dist/ir/verify.js +355 -0
  233. package/dist/plugins/apple/constructors.d.ts +112 -0
  234. package/dist/plugins/apple/constructors.js +217 -0
  235. package/dist/plugins/apple/host.d.ts +181 -0
  236. package/dist/plugins/apple/host.js +262 -0
  237. package/dist/plugins/apple/jsx.d.ts +2 -0
  238. package/dist/plugins/apple/jsx.js +293 -0
  239. package/dist/plugins/apple/members.d.ts +16 -0
  240. package/dist/plugins/apple/members.js +190 -0
  241. package/dist/plugins/apple/plugin.d.ts +2 -0
  242. package/dist/plugins/apple/plugin.js +156 -0
  243. package/dist/plugins/gea/component-classes.d.ts +25 -0
  244. package/dist/plugins/gea/component-classes.js +162 -0
  245. package/dist/plugins/gea/component-inline.d.ts +13 -0
  246. package/dist/plugins/gea/component-inline.js +532 -0
  247. package/dist/plugins/gea/constructors.d.ts +23 -0
  248. package/dist/plugins/gea/constructors.js +100 -0
  249. package/dist/plugins/gea/contract.d.ts +150 -0
  250. package/dist/plugins/gea/contract.js +195 -0
  251. package/dist/plugins/gea/element-ref.d.ts +31 -0
  252. package/dist/plugins/gea/element-ref.js +45 -0
  253. package/dist/plugins/gea/host.d.ts +520 -0
  254. package/dist/plugins/gea/host.js +762 -0
  255. package/dist/plugins/gea/lower.d.ts +6 -0
  256. package/dist/plugins/gea/lower.js +195 -0
  257. package/dist/plugins/gea/members.d.ts +22 -0
  258. package/dist/plugins/gea/members.js +221 -0
  259. package/dist/plugins/gea/plugin.d.ts +22 -0
  260. package/dist/plugins/gea/plugin.js +307 -0
  261. package/dist/plugins/gea/prelude.d.ts +78 -0
  262. package/dist/plugins/gea/prelude.js +153 -0
  263. package/dist/plugins/gea/producer.d.ts +5 -0
  264. package/dist/plugins/gea/producer.js +52 -0
  265. package/dist/plugins/gea/reactive-slots.d.ts +49 -0
  266. package/dist/plugins/gea/reactive-slots.js +578 -0
  267. package/dist/plugins/gea/render-bridge.d.ts +6 -0
  268. package/dist/plugins/gea/render-bridge.js +281 -0
  269. package/dist/plugins/gea/slots.d.ts +15 -0
  270. package/dist/plugins/gea/slots.js +36 -0
  271. package/dist/plugins/gea/template-analysis.d.ts +151 -0
  272. package/dist/plugins/gea/template-analysis.js +346 -0
  273. package/dist/plugins/gea/user-agent-styles.d.ts +9 -0
  274. package/dist/plugins/gea/user-agent-styles.js +94 -0
  275. package/dist/plugins/installed.d.ts +19 -0
  276. package/dist/plugins/installed.js +21 -0
  277. package/dist/plugins/load.d.ts +7 -0
  278. package/dist/plugins/load.js +207 -0
  279. package/dist/plugins/model.d.ts +735 -0
  280. package/dist/plugins/model.js +47 -0
  281. package/dist/plugins/webgl/host.d.ts +77 -0
  282. package/dist/plugins/webgl/host.js +162 -0
  283. package/dist/plugins/webgl/plugin.d.ts +40 -0
  284. package/dist/plugins/webgl/plugin.js +99 -0
  285. package/dist/preflight/obligations.d.ts +206 -0
  286. package/dist/preflight/obligations.js +36 -0
  287. package/dist/preflight/report.d.ts +20 -0
  288. package/dist/preflight/report.js +61 -0
  289. package/dist/preflight/run.d.ts +39 -0
  290. package/dist/preflight/run.js +403 -0
  291. package/dist/project-preparation.d.ts +33 -0
  292. package/dist/project-preparation.js +314 -0
  293. package/dist/projection/abi.d.ts +82 -0
  294. package/dist/projection/abi.js +349 -0
  295. package/dist/projection/apply-arguments.d.ts +12 -0
  296. package/dist/projection/apply-arguments.js +20 -0
  297. package/dist/projection/bindings.d.ts +250 -0
  298. package/dist/projection/bindings.js +340 -0
  299. package/dist/projection/callee.d.ts +196 -0
  300. package/dist/projection/callee.js +444 -0
  301. package/dist/projection/class-property-presence.d.ts +28 -0
  302. package/dist/projection/class-property-presence.js +58 -0
  303. package/dist/projection/class-prototype.d.ts +5 -0
  304. package/dist/projection/class-prototype.js +23 -0
  305. package/dist/projection/class-storage.d.ts +26 -0
  306. package/dist/projection/class-storage.js +236 -0
  307. package/dist/projection/classes.d.ts +283 -0
  308. package/dist/projection/classes.js +944 -0
  309. package/dist/projection/coercions.d.ts +20 -0
  310. package/dist/projection/coercions.js +33 -0
  311. package/dist/projection/dispatch.d.ts +167 -0
  312. package/dist/projection/dispatch.js +379 -0
  313. package/dist/projection/fields.d.ts +123 -0
  314. package/dist/projection/fields.js +383 -0
  315. package/dist/projection/instance-test.d.ts +78 -0
  316. package/dist/projection/instance-test.js +156 -0
  317. package/dist/projection/slots.d.ts +146 -0
  318. package/dist/projection/slots.js +663 -0
  319. package/dist/projection/synthesized-abi.d.ts +61 -0
  320. package/dist/projection/synthesized-abi.js +94 -0
  321. package/dist/representation/array-index.d.ts +14 -0
  322. package/dist/representation/array-index.js +17 -0
  323. package/dist/representation/callable-object.d.ts +3 -0
  324. package/dist/representation/callable-object.js +6 -0
  325. package/dist/representation/collections.d.ts +84 -0
  326. package/dist/representation/collections.js +139 -0
  327. package/dist/representation/derive.d.ts +159 -0
  328. package/dist/representation/derive.js +2546 -0
  329. package/dist/representation/difference.d.ts +30 -0
  330. package/dist/representation/difference.js +240 -0
  331. package/dist/representation/field-descriptor-policy.d.ts +19 -0
  332. package/dist/representation/field-descriptor-policy.js +39 -0
  333. package/dist/representation/function-constructor.d.ts +13 -0
  334. package/dist/representation/function-constructor.js +9 -0
  335. package/dist/representation/host-abi.d.ts +32 -0
  336. package/dist/representation/host-abi.js +97 -0
  337. package/dist/representation/host-templates.d.ts +67 -0
  338. package/dist/representation/host-templates.js +94 -0
  339. package/dist/representation/intersection.d.ts +84 -0
  340. package/dist/representation/intersection.js +149 -0
  341. package/dist/representation/literal-destination.d.ts +43 -0
  342. package/dist/representation/literal-destination.js +133 -0
  343. package/dist/representation/merge.d.ts +18 -0
  344. package/dist/representation/merge.js +83 -0
  345. package/dist/representation/model.d.ts +1160 -0
  346. package/dist/representation/model.js +1019 -0
  347. package/dist/representation/numeric-index.d.ts +13 -0
  348. package/dist/representation/numeric-index.js +29 -0
  349. package/dist/representation/object-shape.d.ts +109 -0
  350. package/dist/representation/object-shape.js +123 -0
  351. package/dist/representation/optional.d.ts +12 -0
  352. package/dist/representation/optional.js +87 -0
  353. package/dist/representation/plan.d.ts +60 -0
  354. package/dist/representation/plan.js +78 -0
  355. package/dist/representation/policies.d.ts +589 -0
  356. package/dist/representation/policies.js +107 -0
  357. package/dist/representation/primitive-domain.d.ts +1 -0
  358. package/dist/representation/primitive-domain.js +1 -0
  359. package/dist/representation/primitives.d.ts +44 -0
  360. package/dist/representation/primitives.js +78 -0
  361. package/dist/representation/publish.d.ts +49 -0
  362. package/dist/representation/publish.js +648 -0
  363. package/dist/representation/record-fields.d.ts +96 -0
  364. package/dist/representation/record-fields.js +116 -0
  365. package/dist/representation/template-object.d.ts +11 -0
  366. package/dist/representation/template-object.js +26 -0
  367. package/dist/representation/union.d.ts +30 -0
  368. package/dist/representation/union.js +324 -0
  369. package/dist/representation/value-records.d.ts +3 -0
  370. package/dist/representation/value-records.js +307 -0
  371. package/dist/representation/verify.d.ts +17 -0
  372. package/dist/representation/verify.js +221 -0
  373. package/dist/semantics/alias-this-field-declaration-transform.d.ts +4 -0
  374. package/dist/semantics/alias-this-field-declaration-transform.js +207 -0
  375. package/dist/semantics/ambient-type-realization-transform.d.ts +62 -0
  376. package/dist/semantics/ambient-type-realization-transform.js +168 -0
  377. package/dist/semantics/ambient.d.ts +24 -0
  378. package/dist/semantics/ambient.js +119 -0
  379. package/dist/semantics/borrowed-builtin-call-bind-source-transform.d.ts +4 -0
  380. package/dist/semantics/borrowed-builtin-call-bind-source-transform.js +341 -0
  381. package/dist/semantics/callable-origins.d.ts +46 -0
  382. package/dist/semantics/callable-origins.js +354 -0
  383. package/dist/semantics/class-alias.d.ts +7 -0
  384. package/dist/semantics/class-alias.js +37 -0
  385. package/dist/semantics/class-heritage.d.ts +34 -0
  386. package/dist/semantics/class-heritage.js +104 -0
  387. package/dist/semantics/commonjs-wrapper.d.ts +69 -0
  388. package/dist/semantics/commonjs-wrapper.js +231 -0
  389. package/dist/semantics/constructor-slot-subclasses.d.ts +28 -0
  390. package/dist/semantics/constructor-slot-subclasses.js +112 -0
  391. package/dist/semantics/declaration-overlay-transform.d.ts +35 -0
  392. package/dist/semantics/declaration-overlay-transform.js +2157 -0
  393. package/dist/semantics/define-property-source-transform.d.ts +4 -0
  394. package/dist/semantics/define-property-source-transform.js +437 -0
  395. package/dist/semantics/diagnostic-source-preparation.d.ts +24 -0
  396. package/dist/semantics/diagnostic-source-preparation.js +82 -0
  397. package/dist/semantics/documentation-ranges.d.ts +22 -0
  398. package/dist/semantics/documentation-ranges.js +36 -0
  399. package/dist/semantics/dynamic-fallback.d.ts +86 -0
  400. package/dist/semantics/dynamic-fallback.js +249 -0
  401. package/dist/semantics/frontend-timing.d.ts +6 -0
  402. package/dist/semantics/frontend-timing.js +35 -0
  403. package/dist/semantics/frontend.d.ts +504 -0
  404. package/dist/semantics/frontend.js +1157 -0
  405. package/dist/semantics/host-declaration-provenance.d.ts +11 -0
  406. package/dist/semantics/host-declaration-provenance.js +18 -0
  407. package/dist/semantics/host-methods.d.ts +24 -0
  408. package/dist/semantics/host-methods.js +74 -0
  409. package/dist/semantics/host-protocols.d.ts +429 -0
  410. package/dist/semantics/host-protocols.js +1501 -0
  411. package/dist/semantics/inherited-accessor.d.ts +7 -0
  412. package/dist/semantics/inherited-accessor.js +48 -0
  413. package/dist/semantics/interface-families.d.ts +70 -0
  414. package/dist/semantics/interface-families.js +180 -0
  415. package/dist/semantics/interface-implementors.d.ts +53 -0
  416. package/dist/semantics/interface-implementors.js +87 -0
  417. package/dist/semantics/jsdoc-namepath-transform.d.ts +4 -0
  418. package/dist/semantics/jsdoc-namepath-transform.js +85 -0
  419. package/dist/semantics/model/coverage.d.ts +68 -0
  420. package/dist/semantics/model/coverage.js +73 -0
  421. package/dist/semantics/model/edges.d.ts +103 -0
  422. package/dist/semantics/model/edges.js +20 -0
  423. package/dist/semantics/model/graph.d.ts +55 -0
  424. package/dist/semantics/model/graph.js +129 -0
  425. package/dist/semantics/model/operands.d.ts +159 -0
  426. package/dist/semantics/model/operands.js +26 -0
  427. package/dist/semantics/model/operations.d.ts +496 -0
  428. package/dist/semantics/model/operations.js +2 -0
  429. package/dist/semantics/model/primitive-domain.d.ts +26 -0
  430. package/dist/semantics/model/primitive-domain.js +38 -0
  431. package/dist/semantics/model/selected-signature.d.ts +261 -0
  432. package/dist/semantics/model/selected-signature.js +55 -0
  433. package/dist/semantics/model/structural-type-table.d.ts +93 -0
  434. package/dist/semantics/model/structural-type-table.js +237 -0
  435. package/dist/semantics/model/structural-types.d.ts +367 -0
  436. package/dist/semantics/model/structural-types.js +200 -0
  437. package/dist/semantics/module-resolution.d.ts +23 -0
  438. package/dist/semantics/module-resolution.js +227 -0
  439. package/dist/semantics/new-callee-class-tag-source-transform.d.ts +4 -0
  440. package/dist/semantics/new-callee-class-tag-source-transform.js +64 -0
  441. package/dist/semantics/node-project.d.ts +13 -0
  442. package/dist/semantics/node-project.js +107 -0
  443. package/dist/semantics/node-source-hooks.d.ts +1 -0
  444. package/dist/semantics/node-source-hooks.js +63 -0
  445. package/dist/semantics/normalize/absent-globals.d.ts +143 -0
  446. package/dist/semantics/normalize/absent-globals.js +191 -0
  447. package/dist/semantics/normalize/arguments-objects.d.ts +43 -0
  448. package/dist/semantics/normalize/arguments-objects.js +60 -0
  449. package/dist/semantics/normalize/asserted-arm-absence.d.ts +28 -0
  450. package/dist/semantics/normalize/asserted-arm-absence.js +61 -0
  451. package/dist/semantics/normalize/assignment-patterns.d.ts +70 -0
  452. package/dist/semantics/normalize/assignment-patterns.js +147 -0
  453. package/dist/semantics/normalize/bag-absence.d.ts +8 -0
  454. package/dist/semantics/normalize/bag-absence.js +42 -0
  455. package/dist/semantics/normalize/binding-fixpoint.d.ts +36 -0
  456. package/dist/semantics/normalize/binding-fixpoint.js +140 -0
  457. package/dist/semantics/normalize/callback-parameter-contracts.d.ts +16 -0
  458. package/dist/semantics/normalize/callback-parameter-contracts.js +91 -0
  459. package/dist/semantics/normalize/cells/agreement.d.ts +46 -0
  460. package/dist/semantics/normalize/cells/agreement.js +34 -0
  461. package/dist/semantics/normalize/cells/candidates.d.ts +17 -0
  462. package/dist/semantics/normalize/cells/candidates.js +35 -0
  463. package/dist/semantics/normalize/cells/facts.d.ts +19 -0
  464. package/dist/semantics/normalize/cells/facts.js +90 -0
  465. package/dist/semantics/normalize/cells/index.d.ts +10 -0
  466. package/dist/semantics/normalize/cells/index.js +6 -0
  467. package/dist/semantics/normalize/cells/model.d.ts +98 -0
  468. package/dist/semantics/normalize/cells/model.js +2 -0
  469. package/dist/semantics/normalize/cells/policies/bag.d.ts +44 -0
  470. package/dist/semantics/normalize/cells/policies/bag.js +114 -0
  471. package/dist/semantics/normalize/cells/policies/collection.d.ts +42 -0
  472. package/dist/semantics/normalize/cells/policies/collection.js +218 -0
  473. package/dist/semantics/normalize/cells/policies/field.d.ts +28 -0
  474. package/dist/semantics/normalize/cells/policies/field.js +40 -0
  475. package/dist/semantics/normalize/cells/policies/index.d.ts +49 -0
  476. package/dist/semantics/normalize/cells/policies/index.js +58 -0
  477. package/dist/semantics/normalize/cells/policies/local.d.ts +18 -0
  478. package/dist/semantics/normalize/cells/policies/local.js +37 -0
  479. package/dist/semantics/normalize/cells/policies/parameter.d.ts +28 -0
  480. package/dist/semantics/normalize/cells/policies/parameter.js +39 -0
  481. package/dist/semantics/normalize/cells/policies/return.d.ts +26 -0
  482. package/dist/semantics/normalize/cells/policies/return.js +45 -0
  483. package/dist/semantics/normalize/cells/policies/shared.d.ts +33 -0
  484. package/dist/semantics/normalize/cells/policies/shared.js +45 -0
  485. package/dist/semantics/normalize/cells/policy.d.ts +72 -0
  486. package/dist/semantics/normalize/cells/policy.js +18 -0
  487. package/dist/semantics/normalize/cells/registry.d.ts +14 -0
  488. package/dist/semantics/normalize/cells/registry.js +17 -0
  489. package/dist/semantics/normalize/census-refusal.d.ts +62 -0
  490. package/dist/semantics/normalize/census-refusal.js +27 -0
  491. package/dist/semantics/normalize/census.d.ts +109 -0
  492. package/dist/semantics/normalize/census.js +667 -0
  493. package/dist/semantics/normalize/collection-bindings.d.ts +278 -0
  494. package/dist/semantics/normalize/collection-bindings.js +677 -0
  495. package/dist/semantics/normalize/commonjs-module-record.d.ts +21 -0
  496. package/dist/semantics/normalize/commonjs-module-record.js +289 -0
  497. package/dist/semantics/normalize/commonjs-require.d.ts +13 -0
  498. package/dist/semantics/normalize/commonjs-require.js +1527 -0
  499. package/dist/semantics/normalize/contribution.d.ts +63 -0
  500. package/dist/semantics/normalize/contribution.js +172 -0
  501. package/dist/semantics/normalize/dead-typeof-guards.d.ts +64 -0
  502. package/dist/semantics/normalize/dead-typeof-guards.js +152 -0
  503. package/dist/semantics/normalize/deferred-intrinsic-protocols.d.ts +57 -0
  504. package/dist/semantics/normalize/deferred-intrinsic-protocols.js +109 -0
  505. package/dist/semantics/normalize/derived-expression-type.d.ts +1070 -0
  506. package/dist/semantics/normalize/derived-expression-type.js +3463 -0
  507. package/dist/semantics/normalize/evaluation-order.d.ts +16 -0
  508. package/dist/semantics/normalize/evaluation-order.js +37 -0
  509. package/dist/semantics/normalize/field-bindings.d.ts +167 -0
  510. package/dist/semantics/normalize/field-bindings.js +1125 -0
  511. package/dist/semantics/normalize/flow/array-element-continuation.d.ts +27 -0
  512. package/dist/semantics/normalize/flow/array-element-continuation.js +1452 -0
  513. package/dist/semantics/normalize/flow/callable-array-origins.d.ts +42 -0
  514. package/dist/semantics/normalize/flow/callable-array-origins.js +318 -0
  515. package/dist/semantics/normalize/flow/callable-completions.d.ts +45 -0
  516. package/dist/semantics/normalize/flow/callable-completions.js +82 -0
  517. package/dist/semantics/normalize/flow/callable-reach.d.ts +237 -0
  518. package/dist/semantics/normalize/flow/callable-reach.js +7174 -0
  519. package/dist/semantics/normalize/flow/class-family-member-read.d.ts +16 -0
  520. package/dist/semantics/normalize/flow/class-family-member-read.js +992 -0
  521. package/dist/semantics/normalize/flow/collection-value-continuation.d.ts +21 -0
  522. package/dist/semantics/normalize/flow/collection-value-continuation.js +192 -0
  523. package/dist/semantics/normalize/flow/component-solver.d.ts +199 -0
  524. package/dist/semantics/normalize/flow/component-solver.js +587 -0
  525. package/dist/semantics/normalize/flow/computed-key-set.d.ts +84 -0
  526. package/dist/semantics/normalize/flow/computed-key-set.js +660 -0
  527. package/dist/semantics/normalize/flow/export-importers.d.ts +24 -0
  528. package/dist/semantics/normalize/flow/export-importers.js +269 -0
  529. package/dist/semantics/normalize/flow/host-text-sink.d.ts +25 -0
  530. package/dist/semantics/normalize/flow/host-text-sink.js +87 -0
  531. package/dist/semantics/normalize/flow/intrinsic-array-callback-frames.d.ts +84 -0
  532. package/dist/semantics/normalize/flow/intrinsic-array-callback-frames.js +180 -0
  533. package/dist/semantics/normalize/flow/intrinsic-data-definition.d.ts +35 -0
  534. package/dist/semantics/normalize/flow/intrinsic-data-definition.js +140 -0
  535. package/dist/semantics/normalize/flow/invocation-facts.d.ts +98 -0
  536. package/dist/semantics/normalize/flow/invocation-facts.js +257 -0
  537. package/dist/semantics/normalize/flow/member-call-forwarding.d.ts +122 -0
  538. package/dist/semantics/normalize/flow/member-call-forwarding.js +835 -0
  539. package/dist/semantics/normalize/flow/model.d.ts +357 -0
  540. package/dist/semantics/normalize/flow/model.js +177 -0
  541. package/dist/semantics/normalize/flow/native-collection-protocol.d.ts +24 -0
  542. package/dist/semantics/normalize/flow/native-collection-protocol.js +252 -0
  543. package/dist/semantics/normalize/flow/node-path-token.d.ts +3 -0
  544. package/dist/semantics/normalize/flow/node-path-token.js +53 -0
  545. package/dist/semantics/normalize/flow/object-binding-continuation.d.ts +11 -0
  546. package/dist/semantics/normalize/flow/object-binding-continuation.js +42 -0
  547. package/dist/semantics/normalize/flow/origin-authority.d.ts +56 -0
  548. package/dist/semantics/normalize/flow/origin-authority.js +2 -0
  549. package/dist/semantics/normalize/flow/owned-class-receivers.d.ts +35 -0
  550. package/dist/semantics/normalize/flow/owned-class-receivers.js +191 -0
  551. package/dist/semantics/normalize/flow/parameter-values.d.ts +27 -0
  552. package/dist/semantics/normalize/flow/parameter-values.js +251 -0
  553. package/dist/semantics/normalize/flow/proof-hypotheses.d.ts +66 -0
  554. package/dist/semantics/normalize/flow/proof-hypotheses.js +162 -0
  555. package/dist/semantics/normalize/flow/record-alias-closure.d.ts +27 -0
  556. package/dist/semantics/normalize/flow/record-alias-closure.js +298 -0
  557. package/dist/semantics/normalize/flow/seeded-origins.d.ts +43 -0
  558. package/dist/semantics/normalize/flow/seeded-origins.js +54 -0
  559. package/dist/semantics/normalize/flow/source-class-data.d.ts +132 -0
  560. package/dist/semantics/normalize/flow/source-class-data.js +838 -0
  561. package/dist/semantics/normalize/flow/source-class-instanceof.d.ts +13 -0
  562. package/dist/semantics/normalize/flow/source-class-instanceof.js +37 -0
  563. package/dist/semantics/normalize/flow/source-class-static-data.d.ts +16 -0
  564. package/dist/semantics/normalize/flow/source-class-static-data.js +47 -0
  565. package/dist/semantics/normalize/flow/source-construction-frames.d.ts +12 -0
  566. package/dist/semantics/normalize/flow/source-construction-frames.js +118 -0
  567. package/dist/semantics/normalize/flow/source-invocation-frame-layout.d.ts +34 -0
  568. package/dist/semantics/normalize/flow/source-invocation-frame-layout.js +78 -0
  569. package/dist/semantics/normalize/flow/source-invocation-receiver.d.ts +37 -0
  570. package/dist/semantics/normalize/flow/source-invocation-receiver.js +95 -0
  571. package/dist/semantics/normalize/flow/source-prototype-method-identity.d.ts +23 -0
  572. package/dist/semantics/normalize/flow/source-prototype-method-identity.js +81 -0
  573. package/dist/semantics/normalize/flow/source-record-data.d.ts +29 -0
  574. package/dist/semantics/normalize/flow/source-record-data.js +626 -0
  575. package/dist/semantics/normalize/flow/source-value-session.d.ts +77 -0
  576. package/dist/semantics/normalize/flow/source-value-session.js +3089 -0
  577. package/dist/semantics/normalize/flow/targets.d.ts +118 -0
  578. package/dist/semantics/normalize/flow/targets.js +405 -0
  579. package/dist/semantics/normalize/flow/value-flow.d.ts +36 -0
  580. package/dist/semantics/normalize/flow/value-flow.js +823 -0
  581. package/dist/semantics/normalize/flow/value-provenance.d.ts +31 -0
  582. package/dist/semantics/normalize/flow/value-provenance.js +112 -0
  583. package/dist/semantics/normalize/gating.d.ts +51 -0
  584. package/dist/semantics/normalize/gating.js +560 -0
  585. package/dist/semantics/normalize/generic-function-choice.d.ts +31 -0
  586. package/dist/semantics/normalize/generic-function-choice.js +115 -0
  587. package/dist/semantics/normalize/global-host-mutations.d.ts +51 -0
  588. package/dist/semantics/normalize/global-host-mutations.js +5989 -0
  589. package/dist/semantics/normalize/host-effect-contracts.d.ts +77 -0
  590. package/dist/semantics/normalize/host-effect-contracts.js +143 -0
  591. package/dist/semantics/normalize/host-mutation-computed-keys.d.ts +38 -0
  592. package/dist/semantics/normalize/host-mutation-computed-keys.js +26 -0
  593. package/dist/semantics/normalize/host-mutation-key-reader.d.ts +66 -0
  594. package/dist/semantics/normalize/host-mutation-key-reader.js +192 -0
  595. package/dist/semantics/normalize/host-mutation-keys.d.ts +114 -0
  596. package/dist/semantics/normalize/host-mutation-keys.js +183 -0
  597. package/dist/semantics/normalize/identities.d.ts +172 -0
  598. package/dist/semantics/normalize/identities.js +426 -0
  599. package/dist/semantics/normalize/implicit-arguments-tuple.d.ts +97 -0
  600. package/dist/semantics/normalize/implicit-arguments-tuple.js +197 -0
  601. package/dist/semantics/normalize/implicit-arguments.d.ts +11 -0
  602. package/dist/semantics/normalize/implicit-arguments.js +39 -0
  603. package/dist/semantics/normalize/instantiation.d.ts +73 -0
  604. package/dist/semantics/normalize/instantiation.js +399 -0
  605. package/dist/semantics/normalize/intrinsic-property-call.d.ts +18 -0
  606. package/dist/semantics/normalize/intrinsic-property-call.js +69 -0
  607. package/dist/semantics/normalize/intrinsic-prototype.d.ts +41 -0
  608. package/dist/semantics/normalize/intrinsic-prototype.js +87 -0
  609. package/dist/semantics/normalize/intrinsic-static-member.d.ts +14 -0
  610. package/dist/semantics/normalize/intrinsic-static-member.js +23 -0
  611. package/dist/semantics/normalize/jsdoc-type-names.d.ts +32 -0
  612. package/dist/semantics/normalize/jsdoc-type-names.js +512 -0
  613. package/dist/semantics/normalize/keyof.d.ts +32 -0
  614. package/dist/semantics/normalize/keyof.js +110 -0
  615. package/dist/semantics/normalize/local-bindings.d.ts +176 -0
  616. package/dist/semantics/normalize/local-bindings.js +1826 -0
  617. package/dist/semantics/normalize/logical-result-type.d.ts +16 -0
  618. package/dist/semantics/normalize/logical-result-type.js +102 -0
  619. package/dist/semantics/normalize/namespace-paths.d.ts +57 -0
  620. package/dist/semantics/normalize/namespace-paths.js +108 -0
  621. package/dist/semantics/normalize/normalize.d.ts +57 -0
  622. package/dist/semantics/normalize/normalize.js +68 -0
  623. package/dist/semantics/normalize/object-bag-bindings.d.ts +305 -0
  624. package/dist/semantics/normalize/object-bag-bindings.js +1290 -0
  625. package/dist/semantics/normalize/omitted-stated-parameter.d.ts +53 -0
  626. package/dist/semantics/normalize/omitted-stated-parameter.js +59 -0
  627. package/dist/semantics/normalize/open-type-form.d.ts +10 -0
  628. package/dist/semantics/normalize/open-type-form.js +32 -0
  629. package/dist/semantics/normalize/parameter-bindings.d.ts +361 -0
  630. package/dist/semantics/normalize/parameter-bindings.js +3339 -0
  631. package/dist/semantics/normalize/parameter-slot.d.ts +264 -0
  632. package/dist/semantics/normalize/parameter-slot.js +491 -0
  633. package/dist/semantics/normalize/physical-overload-result.d.ts +77 -0
  634. package/dist/semantics/normalize/physical-overload-result.js +99 -0
  635. package/dist/semantics/normalize/primitive-property-absence.d.ts +12 -0
  636. package/dist/semantics/normalize/primitive-property-absence.js +60 -0
  637. package/dist/semantics/normalize/producer-context.d.ts +376 -0
  638. package/dist/semantics/normalize/producer-context.js +1 -0
  639. package/dist/semantics/normalize/producers/allocations.d.ts +3 -0
  640. package/dist/semantics/normalize/producers/allocations.js +863 -0
  641. package/dist/semantics/normalize/producers/binding-kind.d.ts +37 -0
  642. package/dist/semantics/normalize/producers/binding-kind.js +36 -0
  643. package/dist/semantics/normalize/producers/bindings.d.ts +85 -0
  644. package/dist/semantics/normalize/producers/bindings.js +710 -0
  645. package/dist/semantics/normalize/producers/boundary.d.ts +34 -0
  646. package/dist/semantics/normalize/producers/boundary.js +123 -0
  647. package/dist/semantics/normalize/producers/class-lifecycle.d.ts +3 -0
  648. package/dist/semantics/normalize/producers/class-lifecycle.js +902 -0
  649. package/dist/semantics/normalize/producers/computations.d.ts +3 -0
  650. package/dist/semantics/normalize/producers/computations.js +613 -0
  651. package/dist/semantics/normalize/producers/control-loops.d.ts +30 -0
  652. package/dist/semantics/normalize/producers/control-loops.js +91 -0
  653. package/dist/semantics/normalize/producers/control.d.ts +30 -0
  654. package/dist/semantics/normalize/producers/control.js +923 -0
  655. package/dist/semantics/normalize/producers/declaration-lifecycle.d.ts +3 -0
  656. package/dist/semantics/normalize/producers/declaration-lifecycle.js +390 -0
  657. package/dist/semantics/normalize/producers/destructuring.d.ts +45 -0
  658. package/dist/semantics/normalize/producers/destructuring.js +1180 -0
  659. package/dist/semantics/normalize/producers/dynamic-language.d.ts +3 -0
  660. package/dist/semantics/normalize/producers/dynamic-language.js +70 -0
  661. package/dist/semantics/normalize/producers/erasure.d.ts +51 -0
  662. package/dist/semantics/normalize/producers/erasure.js +90 -0
  663. package/dist/semantics/normalize/producers/installed.d.ts +3 -0
  664. package/dist/semantics/normalize/producers/installed.js +55 -0
  665. package/dist/semantics/normalize/producers/invocations.d.ts +35 -0
  666. package/dist/semantics/normalize/producers/invocations.js +1796 -0
  667. package/dist/semantics/normalize/producers/iteration-yield.d.ts +59 -0
  668. package/dist/semantics/normalize/producers/iteration-yield.js +235 -0
  669. package/dist/semantics/normalize/producers/jsx.d.ts +3 -0
  670. package/dist/semantics/normalize/producers/jsx.js +360 -0
  671. package/dist/semantics/normalize/producers/mint.d.ts +39 -0
  672. package/dist/semantics/normalize/producers/mint.js +44 -0
  673. package/dist/semantics/normalize/producers/nullish.d.ts +16 -0
  674. package/dist/semantics/normalize/producers/nullish.js +27 -0
  675. package/dist/semantics/normalize/producers/object-assignment.d.ts +8 -0
  676. package/dist/semantics/normalize/producers/object-assignment.js +204 -0
  677. package/dist/semantics/normalize/producers/object-tag.d.ts +9 -0
  678. package/dist/semantics/normalize/producers/object-tag.js +119 -0
  679. package/dist/semantics/normalize/producers/optional-chain.d.ts +44 -0
  680. package/dist/semantics/normalize/producers/optional-chain.js +75 -0
  681. package/dist/semantics/normalize/producers/properties.d.ts +21 -0
  682. package/dist/semantics/normalize/producers/properties.js +1053 -0
  683. package/dist/semantics/normalize/producers/protocol.d.ts +67 -0
  684. package/dist/semantics/normalize/producers/protocol.js +695 -0
  685. package/dist/semantics/normalize/producers/references.d.ts +53 -0
  686. package/dist/semantics/normalize/producers/references.js +1027 -0
  687. package/dist/semantics/normalize/producers/shared.d.ts +561 -0
  688. package/dist/semantics/normalize/producers/shared.js +1683 -0
  689. package/dist/semantics/normalize/producers/spread-arguments.d.ts +72 -0
  690. package/dist/semantics/normalize/producers/spread-arguments.js +375 -0
  691. package/dist/semantics/normalize/producers/tagged-template.d.ts +5 -0
  692. package/dist/semantics/normalize/producers/tagged-template.js +307 -0
  693. package/dist/semantics/normalize/producers/tuple-spread.d.ts +189 -0
  694. package/dist/semantics/normalize/producers/tuple-spread.js +279 -0
  695. package/dist/semantics/normalize/property-key-domain.d.ts +36 -0
  696. package/dist/semantics/normalize/property-key-domain.js +150 -0
  697. package/dist/semantics/normalize/reachability.d.ts +189 -0
  698. package/dist/semantics/normalize/reachability.js +1057 -0
  699. package/dist/semantics/normalize/reassigned-bindings.d.ts +13 -0
  700. package/dist/semantics/normalize/reassigned-bindings.js +41 -0
  701. package/dist/semantics/normalize/record-storage-families.d.ts +11 -0
  702. package/dist/semantics/normalize/record-storage-families.js +109 -0
  703. package/dist/semantics/normalize/return-bindings.d.ts +260 -0
  704. package/dist/semantics/normalize/return-bindings.js +1311 -0
  705. package/dist/semantics/normalize/return-paths.d.ts +2 -0
  706. package/dist/semantics/normalize/return-paths.js +28 -0
  707. package/dist/semantics/normalize/script-global-redefinition.d.ts +44 -0
  708. package/dist/semantics/normalize/script-global-redefinition.js +75 -0
  709. package/dist/semantics/normalize/specialization.d.ts +201 -0
  710. package/dist/semantics/normalize/specialization.js +1824 -0
  711. package/dist/semantics/normalize/structural-array-element.d.ts +176 -0
  712. package/dist/semantics/normalize/structural-array-element.js +700 -0
  713. package/dist/semantics/normalize/structural-array-read.d.ts +13 -0
  714. package/dist/semantics/normalize/structural-array-read.js +124 -0
  715. package/dist/semantics/normalize/structural-callable.d.ts +12 -0
  716. package/dist/semantics/normalize/structural-callable.js +82 -0
  717. package/dist/semantics/normalize/structural-creation-order.d.ts +32 -0
  718. package/dist/semantics/normalize/structural-creation-order.js +111 -0
  719. package/dist/semantics/normalize/structural-declarations.d.ts +395 -0
  720. package/dist/semantics/normalize/structural-declarations.js +968 -0
  721. package/dist/semantics/normalize/structural-declared-body.d.ts +25 -0
  722. package/dist/semantics/normalize/structural-declared-body.js +147 -0
  723. package/dist/semantics/normalize/structural-generics.d.ts +56 -0
  724. package/dist/semantics/normalize/structural-generics.js +120 -0
  725. package/dist/semantics/normalize/structural-indexed-access.d.ts +11 -0
  726. package/dist/semantics/normalize/structural-indexed-access.js +126 -0
  727. package/dist/semantics/normalize/structural-instantiated-member.d.ts +64 -0
  728. package/dist/semantics/normalize/structural-instantiated-member.js +407 -0
  729. package/dist/semantics/normalize/structural-joins.d.ts +44 -0
  730. package/dist/semantics/normalize/structural-joins.js +143 -0
  731. package/dist/semantics/normalize/structural-layout-relevance.d.ts +29 -0
  732. package/dist/semantics/normalize/structural-layout-relevance.js +391 -0
  733. package/dist/semantics/normalize/structural-layout-type.d.ts +11 -0
  734. package/dist/semantics/normalize/structural-layout-type.js +1468 -0
  735. package/dist/semantics/normalize/structural-leaves.d.ts +49 -0
  736. package/dist/semantics/normalize/structural-leaves.js +125 -0
  737. package/dist/semantics/normalize/structural-local-union.d.ts +13 -0
  738. package/dist/semantics/normalize/structural-local-union.js +133 -0
  739. package/dist/semantics/normalize/structural-members.d.ts +26 -0
  740. package/dist/semantics/normalize/structural-members.js +84 -0
  741. package/dist/semantics/normalize/structural-mutable-method.d.ts +15 -0
  742. package/dist/semantics/normalize/structural-mutable-method.js +109 -0
  743. package/dist/semantics/normalize/structural-parts.d.ts +131 -0
  744. package/dist/semantics/normalize/structural-parts.js +737 -0
  745. package/dist/semantics/normalize/structural-receiver.d.ts +66 -0
  746. package/dist/semantics/normalize/structural-receiver.js +551 -0
  747. package/dist/semantics/normalize/structural-rules.d.ts +112 -0
  748. package/dist/semantics/normalize/structural-rules.js +93 -0
  749. package/dist/semantics/normalize/structural-self-reference.d.ts +150 -0
  750. package/dist/semantics/normalize/structural-self-reference.js +494 -0
  751. package/dist/semantics/normalize/structural.d.ts +202 -0
  752. package/dist/semantics/normalize/structural.js +4218 -0
  753. package/dist/semantics/normalize/unreduced-type-form.d.ts +41 -0
  754. package/dist/semantics/normalize/unreduced-type-form.js +53 -0
  755. package/dist/semantics/normalize/unresolvable-names.d.ts +56 -0
  756. package/dist/semantics/normalize/unresolvable-names.js +140 -0
  757. package/dist/semantics/package-sources.d.ts +16 -0
  758. package/dist/semantics/package-sources.js +365 -0
  759. package/dist/semantics/program.d.ts +151 -0
  760. package/dist/semantics/program.js +667 -0
  761. package/dist/semantics/prototype-install-source-transform.d.ts +4 -0
  762. package/dist/semantics/prototype-install-source-transform.js +341 -0
  763. package/dist/semantics/prototype-object-class-source-transform.d.ts +4 -0
  764. package/dist/semantics/prototype-object-class-source-transform.js +525 -0
  765. package/dist/semantics/prototype-reparenting.d.ts +50 -0
  766. package/dist/semantics/prototype-reparenting.js +317 -0
  767. package/dist/semantics/stable-checker.d.ts +10 -0
  768. package/dist/semantics/stable-checker.js +148 -0
  769. package/dist/semantics/subclass-member-overlay-transform.d.ts +35 -0
  770. package/dist/semantics/subclass-member-overlay-transform.js +1418 -0
  771. package/dist/semantics/symbol-keyed-expando-source-transform.d.ts +4 -0
  772. package/dist/semantics/symbol-keyed-expando-source-transform.js +66 -0
  773. package/dist/semantics/this-constructor-source-transform.d.ts +4 -0
  774. package/dist/semantics/this-constructor-source-transform.js +122 -0
  775. package/dist/semantics/uninstantiable-classes.d.ts +22 -0
  776. package/dist/semantics/uninstantiable-classes.js +75 -0
  777. package/dist/targets/cpp/balanced-units.d.ts +3 -0
  778. package/dist/targets/cpp/balanced-units.js +58 -0
  779. package/dist/targets/cpp/borrowed-call-entry.d.ts +30 -0
  780. package/dist/targets/cpp/borrowed-call-entry.js +68 -0
  781. package/dist/targets/cpp/captures.d.ts +68 -0
  782. package/dist/targets/cpp/captures.js +269 -0
  783. package/dist/targets/cpp/class-layout.d.ts +313 -0
  784. package/dist/targets/cpp/class-layout.js +483 -0
  785. package/dist/targets/cpp/class-properties/computed-method-value.d.ts +25 -0
  786. package/dist/targets/cpp/class-properties/computed-method-value.js +22 -0
  787. package/dist/targets/cpp/class-properties/emit-class-properties.d.ts +216 -0
  788. package/dist/targets/cpp/class-properties/emit-class-properties.js +917 -0
  789. package/dist/targets/cpp/class-properties/native-prototype.d.ts +11 -0
  790. package/dist/targets/cpp/class-properties/native-prototype.js +101 -0
  791. package/dist/targets/cpp/class-ref-transport.d.ts +12 -0
  792. package/dist/targets/cpp/class-ref-transport.js +32 -0
  793. package/dist/targets/cpp/conversions.d.ts +3 -0
  794. package/dist/targets/cpp/conversions.js +2027 -0
  795. package/dist/targets/cpp/deferral-safety.d.ts +82 -0
  796. package/dist/targets/cpp/deferral-safety.js +86 -0
  797. package/dist/targets/cpp/direct-call-receivers.d.ts +37 -0
  798. package/dist/targets/cpp/direct-call-receivers.js +79 -0
  799. package/dist/targets/cpp/document.d.ts +74 -0
  800. package/dist/targets/cpp/document.js +106 -0
  801. package/dist/targets/cpp/emit-allocation.d.ts +60 -0
  802. package/dist/targets/cpp/emit-allocation.js +573 -0
  803. package/dist/targets/cpp/emit-arrays.d.ts +119 -0
  804. package/dist/targets/cpp/emit-arrays.js +1047 -0
  805. package/dist/targets/cpp/emit-binding-reference.d.ts +17 -0
  806. package/dist/targets/cpp/emit-binding-reference.js +120 -0
  807. package/dist/targets/cpp/emit-bindings.d.ts +158 -0
  808. package/dist/targets/cpp/emit-bindings.js +769 -0
  809. package/dist/targets/cpp/emit-buffers.d.ts +156 -0
  810. package/dist/targets/cpp/emit-buffers.js +573 -0
  811. package/dist/targets/cpp/emit-callable.d.ts +230 -0
  812. package/dist/targets/cpp/emit-callable.js +2154 -0
  813. package/dist/targets/cpp/emit-carrier-members.d.ts +406 -0
  814. package/dist/targets/cpp/emit-carrier-members.js +1224 -0
  815. package/dist/targets/cpp/emit-coercion.d.ts +26 -0
  816. package/dist/targets/cpp/emit-coercion.js +39 -0
  817. package/dist/targets/cpp/emit-context.d.ts +1882 -0
  818. package/dist/targets/cpp/emit-context.js +904 -0
  819. package/dist/targets/cpp/emit-dynamic-properties.d.ts +174 -0
  820. package/dist/targets/cpp/emit-dynamic-properties.js +1249 -0
  821. package/dist/targets/cpp/emit-equality.d.ts +39 -0
  822. package/dist/targets/cpp/emit-equality.js +472 -0
  823. package/dist/targets/cpp/emit-exceptions.d.ts +104 -0
  824. package/dist/targets/cpp/emit-exceptions.js +513 -0
  825. package/dist/targets/cpp/emit-field-owner.d.ts +4 -0
  826. package/dist/targets/cpp/emit-field-owner.js +27 -0
  827. package/dist/targets/cpp/emit-in.d.ts +31 -0
  828. package/dist/targets/cpp/emit-in.js +426 -0
  829. package/dist/targets/cpp/emit-instanceof.d.ts +19 -0
  830. package/dist/targets/cpp/emit-instanceof.js +601 -0
  831. package/dist/targets/cpp/emit-integers.d.ts +68 -0
  832. package/dist/targets/cpp/emit-integers.js +184 -0
  833. package/dist/targets/cpp/emit-iterator.d.ts +100 -0
  834. package/dist/targets/cpp/emit-iterator.js +1137 -0
  835. package/dist/targets/cpp/emit-json.d.ts +73 -0
  836. package/dist/targets/cpp/emit-json.js +823 -0
  837. package/dist/targets/cpp/emit-jsx.d.ts +74 -0
  838. package/dist/targets/cpp/emit-jsx.js +806 -0
  839. package/dist/targets/cpp/emit-mixed-binary.d.ts +51 -0
  840. package/dist/targets/cpp/emit-mixed-binary.js +60 -0
  841. package/dist/targets/cpp/emit-namespaces.d.ts +101 -0
  842. package/dist/targets/cpp/emit-namespaces.js +133 -0
  843. package/dist/targets/cpp/emit-narrowing.d.ts +738 -0
  844. package/dist/targets/cpp/emit-narrowing.js +3967 -0
  845. package/dist/targets/cpp/emit-native-equality.d.ts +3 -0
  846. package/dist/targets/cpp/emit-native-equality.js +14 -0
  847. package/dist/targets/cpp/emit-native-selection.d.ts +5 -0
  848. package/dist/targets/cpp/emit-native-selection.js +37 -0
  849. package/dist/targets/cpp/emit-object-tag.d.ts +4 -0
  850. package/dist/targets/cpp/emit-object-tag.js +108 -0
  851. package/dist/targets/cpp/emit-owned-record.d.ts +2 -0
  852. package/dist/targets/cpp/emit-owned-record.js +15 -0
  853. package/dist/targets/cpp/emit-presence.d.ts +78 -0
  854. package/dist/targets/cpp/emit-presence.js +376 -0
  855. package/dist/targets/cpp/emit-properties.d.ts +105 -0
  856. package/dist/targets/cpp/emit-properties.js +1640 -0
  857. package/dist/targets/cpp/emit-record-view.d.ts +20 -0
  858. package/dist/targets/cpp/emit-record-view.js +354 -0
  859. package/dist/targets/cpp/emit-return.d.ts +5 -0
  860. package/dist/targets/cpp/emit-return.js +237 -0
  861. package/dist/targets/cpp/emit-sum-widening.d.ts +10 -0
  862. package/dist/targets/cpp/emit-sum-widening.js +69 -0
  863. package/dist/targets/cpp/emit-tonumber.d.ts +38 -0
  864. package/dist/targets/cpp/emit-tonumber.js +177 -0
  865. package/dist/targets/cpp/emit-tostring.d.ts +92 -0
  866. package/dist/targets/cpp/emit-tostring.js +556 -0
  867. package/dist/targets/cpp/emit-typeof.d.ts +49 -0
  868. package/dist/targets/cpp/emit-typeof.js +317 -0
  869. package/dist/targets/cpp/emit-union-properties.d.ts +181 -0
  870. package/dist/targets/cpp/emit-union-properties.js +1281 -0
  871. package/dist/targets/cpp/emit.d.ts +45 -0
  872. package/dist/targets/cpp/emit.js +2225 -0
  873. package/dist/targets/cpp/error-types.d.ts +4 -0
  874. package/dist/targets/cpp/error-types.js +11 -0
  875. package/dist/targets/cpp/function-source-reads.d.ts +72 -0
  876. package/dist/targets/cpp/function-source-reads.js +148 -0
  877. package/dist/targets/cpp/host/atomics.d.ts +25 -0
  878. package/dist/targets/cpp/host/atomics.js +63 -0
  879. package/dist/targets/cpp/host/core-globals.d.ts +108 -0
  880. package/dist/targets/cpp/host/core-globals.js +158 -0
  881. package/dist/targets/cpp/host/dynamic-argument-members.d.ts +42 -0
  882. package/dist/targets/cpp/host/dynamic-argument-members.js +61 -0
  883. package/dist/targets/cpp/host/emit-host-arity.d.ts +139 -0
  884. package/dist/targets/cpp/host/emit-host-arity.js +232 -0
  885. package/dist/targets/cpp/host/emit-host-invoke.d.ts +91 -0
  886. package/dist/targets/cpp/host/emit-host-invoke.js +1105 -0
  887. package/dist/targets/cpp/host/emit-host-object.d.ts +55 -0
  888. package/dist/targets/cpp/host/emit-host-object.js +2206 -0
  889. package/dist/targets/cpp/host/emit-host-properties.d.ts +69 -0
  890. package/dist/targets/cpp/host/emit-host-properties.js +533 -0
  891. package/dist/targets/cpp/host/emit-host-reflect.d.ts +4 -0
  892. package/dist/targets/cpp/host/emit-host-reflect.js +180 -0
  893. package/dist/targets/cpp/host/emit-host-value.d.ts +120 -0
  894. package/dist/targets/cpp/host/emit-host-value.js +392 -0
  895. package/dist/targets/cpp/host/host-members.d.ts +505 -0
  896. package/dist/targets/cpp/host/host-members.js +819 -0
  897. package/dist/targets/cpp/host/host-method-aliases.d.ts +30 -0
  898. package/dist/targets/cpp/host/host-method-aliases.js +76 -0
  899. package/dist/targets/cpp/host/native-protocols.d.ts +47 -0
  900. package/dist/targets/cpp/host/native-protocols.js +183 -0
  901. package/dist/targets/cpp/host/object-protocol.d.ts +351 -0
  902. package/dist/targets/cpp/host/object-protocol.js +671 -0
  903. package/dist/targets/cpp/host-namespace-reads.d.ts +83 -0
  904. package/dist/targets/cpp/host-namespace-reads.js +113 -0
  905. package/dist/targets/cpp/manifest/capabilities.d.ts +39 -0
  906. package/dist/targets/cpp/manifest/capabilities.js +1484 -0
  907. package/dist/targets/cpp/manifest.d.ts +23 -0
  908. package/dist/targets/cpp/manifest.js +113 -0
  909. package/dist/targets/cpp/native-error-base.d.ts +38 -0
  910. package/dist/targets/cpp/native-error-base.js +74 -0
  911. package/dist/targets/cpp/native-narrowing-transport.d.ts +12 -0
  912. package/dist/targets/cpp/native-narrowing-transport.js +151 -0
  913. package/dist/targets/cpp/native-selection-helpers.d.ts +11 -0
  914. package/dist/targets/cpp/native-selection-helpers.js +46 -0
  915. package/dist/targets/cpp/native-symbol-keys.d.ts +8 -0
  916. package/dist/targets/cpp/native-symbol-keys.js +34 -0
  917. package/dist/targets/cpp/ownership.d.ts +43 -0
  918. package/dist/targets/cpp/ownership.js +38 -0
  919. package/dist/targets/cpp/owning-conversion-input.d.ts +14 -0
  920. package/dist/targets/cpp/owning-conversion-input.js +12 -0
  921. package/dist/targets/cpp/property-read-claims.d.ts +62 -0
  922. package/dist/targets/cpp/property-read-claims.js +23 -0
  923. package/dist/targets/cpp/property-store-claims.d.ts +62 -0
  924. package/dist/targets/cpp/property-store-claims.js +26 -0
  925. package/dist/targets/cpp/prototype/emit-prototype-array.d.ts +111 -0
  926. package/dist/targets/cpp/prototype/emit-prototype-array.js +602 -0
  927. package/dist/targets/cpp/prototype/emit-prototype-date.d.ts +133 -0
  928. package/dist/targets/cpp/prototype/emit-prototype-date.js +515 -0
  929. package/dist/targets/cpp/prototype/emit-prototype-error.d.ts +13 -0
  930. package/dist/targets/cpp/prototype/emit-prototype-error.js +54 -0
  931. package/dist/targets/cpp/prototype/emit-prototype-invoke.d.ts +34 -0
  932. package/dist/targets/cpp/prototype/emit-prototype-invoke.js +1003 -0
  933. package/dist/targets/cpp/prototype/emit-prototype-iterator.d.ts +47 -0
  934. package/dist/targets/cpp/prototype/emit-prototype-iterator.js +250 -0
  935. package/dist/targets/cpp/prototype/emit-prototype-promise.d.ts +46 -0
  936. package/dist/targets/cpp/prototype/emit-prototype-promise.js +143 -0
  937. package/dist/targets/cpp/prototype/emit-prototype-regexp.d.ts +335 -0
  938. package/dist/targets/cpp/prototype/emit-prototype-regexp.js +853 -0
  939. package/dist/targets/cpp/prototype/emit-prototype-string.d.ts +42 -0
  940. package/dist/targets/cpp/prototype/emit-prototype-string.js +252 -0
  941. package/dist/targets/cpp/prototype/prototype-method-reads.d.ts +25 -0
  942. package/dist/targets/cpp/prototype/prototype-method-reads.js +182 -0
  943. package/dist/targets/cpp/reactive-dependencies.d.ts +140 -0
  944. package/dist/targets/cpp/reactive-dependencies.js +432 -0
  945. package/dist/targets/cpp/reactive-origins.d.ts +44 -0
  946. package/dist/targets/cpp/reactive-origins.js +82 -0
  947. package/dist/targets/cpp/records.d.ts +277 -0
  948. package/dist/targets/cpp/records.js +2427 -0
  949. package/dist/targets/cpp/recursive-containers.d.ts +43 -0
  950. package/dist/targets/cpp/recursive-containers.js +144 -0
  951. package/dist/targets/cpp/regexp-types.d.ts +56 -0
  952. package/dist/targets/cpp/regexp-types.js +59 -0
  953. package/dist/targets/cpp/substrate.d.ts +125 -0
  954. package/dist/targets/cpp/substrate.js +12 -0
  955. package/dist/targets/cpp/translation-unit.d.ts +219 -0
  956. package/dist/targets/cpp/translation-unit.js +2063 -0
  957. package/dist/targets/cpp/types.d.ts +280 -0
  958. package/dist/targets/cpp/types.js +1135 -0
  959. package/dist/targets/cpp/virtual-methods.d.ts +95 -0
  960. package/dist/targets/cpp/virtual-methods.js +264 -0
  961. package/package.json +95 -0
  962. package/src/targets/cpp/runtime/gea_dynamic_proxy.h +824 -0
  963. package/src/targets/cpp/runtime/gea_eval.h +1376 -0
  964. package/src/targets/cpp/runtime/gea_native_class_prototype.h +44 -0
  965. package/src/targets/cpp/runtime/gea_runtime.h +29222 -0
  966. package/src/targets/cpp/runtime/gea_runtime_builtins.cpp +55 -0
@@ -0,0 +1,968 @@
1
+ import ts from 'typescript';
2
+ import { censusedTypeAt, isStandardInterfaceType } from './derived-expression-type.js';
3
+ import { emptyParameterBindingCensus } from './parameter-bindings.js';
4
+ import { forEachReachableStatement } from './reachability.js';
5
+ /**
6
+ * The type of the value a declaration binds, asked of the declaration's own
7
+ * name rather than of the declaration node.
8
+ *
9
+ * The two differ, and the difference is the point: a node's type at its own
10
+ * position can be the *declared* type of the thing being defined, while the
11
+ * symbol its name introduces carries what a reader of that name receives. For
12
+ * a method those coincide; for anything whose name is introduced by a
13
+ * declaration the checker treats specially they do not, and the name is the
14
+ * authority on what the binding holds. A class is the motivating case: the
15
+ * checker's own type AT a class declaration node is its *instance* type, and
16
+ * only asking after the class's own name symbol recovers the constructor.
17
+ *
18
+ * A function expression or arrow function is excluded from that: for both,
19
+ * `ts.getNameOfDeclaration` never reads the node's own name (a *named*
20
+ * function expression's name included) and instead always defers to
21
+ * `getAssignedName`, which walks up to whatever the value is being stored
22
+ * into -- a variable declarator, a property assignment, a binding element --
23
+ * and answers with THAT construct's own declared type. For
24
+ * `activeRecorder.ondataavailable = (event) => {}` this resolves to the
25
+ * property's declared `Handler | null`, not the arrow's own
26
+ * `(event: Event) => void`. Handing that union back as a *callable
27
+ * allocation's* own shape is the same defect `accessorSignatureOf`'s doc
28
+ * comment already names for accessors ("reading the property's type there
29
+ * hands the callable carrier a scalar"): one call to
30
+ * `OrdinaryFunctionCreate`/`InstantiateArrowFunctionExpression` allocates a
31
+ * plain callable independent of wherever it is later stored, and an optional
32
+ * or nullable wrapper is a fact about that later BINDING, never about this
33
+ * value -- so it must not reach `allocations.ts`'s `shape` field for the
34
+ * allocation itself. A method or a plain function declaration never takes
35
+ * this path: `getNameOfDeclaration` reads their OWN name directly, so no
36
+ * assignment target's type can substitute for theirs.
37
+ *
38
+ * `null` when the declaration introduces no name the checker resolves to a
39
+ * symbol, which is the caller's cue to fall back to the node's own type --
40
+ * exactly what a function expression or arrow function now always does.
41
+ */
42
+ export const declaredValueTypeOf = (checker, node) => {
43
+ if (ts.isFunctionExpression(node) || ts.isArrowFunction(node))
44
+ return null;
45
+ const name = ts.getNameOfDeclaration(node);
46
+ const symbol = name ? checker.getSymbolAtLocation(name) : undefined;
47
+ // STATED, not held: this function's whole job (see the header comment) is
48
+ // reading what the BINDING's own name was ANNOTATED/declared as, precisely
49
+ // so callers can compare it against what the initializer physically is
50
+ // (`physicalInitializerTypeOf`, below). A census answers "what does this
51
+ // node hold"; asking it here would substitute the held value for the
52
+ // declared one this function exists to name, collapsing the very
53
+ // distinction its callers depend on.
54
+ return symbol ? checker.getTypeOfSymbolAtLocation(symbol, node) : null;
55
+ };
56
+ /**
57
+ * The type of the FUNCTION LITERAL a declaration is initialized with, when the
58
+ * declaration's own annotation is an overload set and the literal is not.
59
+ *
60
+ * `class Context { json: JSONRespond = (object, arg?, headers?) => {...} }`
61
+ * (hono's `context.ts`) is the shape. `JSONRespond` declares two call
62
+ * signatures differing at a shared parameter -- `status?: U` in one,
63
+ * `init?: ResponseOrInit<U>` in the other -- so `sharedAbiOf` (derive.ts)
64
+ * rightly finds no single convention and `widestSubsumingAbi` (host-abi.ts)
65
+ * rightly declines to widen, since that only forgives a TRAILING-optional
66
+ * difference and not a differing type at a shared position. The member then
67
+ * carries `unresolved(no primitive joining 2 overload signatures into one
68
+ * calling convention)`.
69
+ *
70
+ * But nothing with two conventions is ever allocated here. A function or arrow
71
+ * LITERAL cannot itself be overloaded -- only a `function` declaration merges
72
+ * that way -- so the checker types this initializer as exactly one signature,
73
+ * whose second parameter is the union `U | ResponseOrInit<U>` the body already
74
+ * discriminates on at runtime (`typeof arg === 'number' ? ...`). One physical
75
+ * convention, which this backend does model.
76
+ *
77
+ * This is `declaredValueTypeOf`'s own rule one level out. That function already
78
+ * refuses to let a storage slot's declared type reach a callable ALLOCATION's
79
+ * shape, for the reason its comment gives: the allocation is independent of
80
+ * wherever the value is later stored. The same is true of a member whose
81
+ * initializer is that allocation -- so the member's physical type is the
82
+ * literal's, not the annotation's.
83
+ *
84
+ * Sound because the checker has already proved the literal assignable to every
85
+ * declared overload; that is what let the program typecheck at all. This reads
86
+ * back the concrete answer the checker computed for the literal rather than
87
+ * inventing one. `null` whenever either half of the premise fails -- no
88
+ * function-literal initializer, or a declared type that was never an overload
89
+ * set -- so nothing that already resolves is re-derived.
90
+ */
91
+ /**
92
+ * The single physical type of a node that DECLARES a binding annotated with an
93
+ * overloaded type, or `null` when the node is not one.
94
+ *
95
+ * `physicalInitializerTypeOf` asks this of a declaration whose type is already
96
+ * in hand; this is the same question asked of a bare node, which is what
97
+ * `structural.ts`'s `typeAt` has -- the BINDING's own type, as opposed to the
98
+ * ALLOCATION's, which `valueTypeAt` answers from the initializer directly. Both
99
+ * have to agree: hono's `export const parseBody: ParseBody = async (...)`
100
+ * allocated one async arrow and bound it under `ParseBody`'s two overloads, so
101
+ * the value had one convention and the name it is read through had none.
102
+ */
103
+ export const physicalOverloadTypeAt = (checker, node, parameters = emptyParameterBindingCensus) => {
104
+ const declaration = node;
105
+ const declares = ts.isVariableDeclaration(declaration) ||
106
+ ts.isPropertyDeclaration(declaration) ||
107
+ ts.isPropertyAssignment(declaration) ||
108
+ ts.isImportSpecifier(declaration) ||
109
+ ts.isExportSpecifier(declaration) ||
110
+ ts.isImportClause(declaration) ||
111
+ // The NAME, not the specifier: `declaration-lifecycle.ts` asks about the
112
+ // identifier an import binds, and an ordinary reference to the same value
113
+ // asks about an identifier too. Both must get the one convention the
114
+ // value physically has, or a program that imports an overloaded-annotated
115
+ // binding disagrees with the module that defines it.
116
+ ts.isIdentifier(declaration);
117
+ if (!declares)
118
+ return null;
119
+ // STATED, not held: `declared` here plays the identical role
120
+ // `declaredValueTypeOf` names -- the ANNOTATED type this overload check
121
+ // exists to compare the physical initializer against (see the header
122
+ // comment above and `physicalInitializerTypeOf`'s `declared` parameter).
123
+ // The census answers "what is held", which is precisely the OTHER half of
124
+ // that comparison; asking it here would make both sides of the check the
125
+ // same question.
126
+ const declared = checker.getTypeAtLocation(declaration);
127
+ return physicalInitializerTypeOf(checker, declaration, declared, parameters);
128
+ };
129
+ /**
130
+ * The declaration an alias resolves to, or `null` for a node that names none.
131
+ *
132
+ * Both spellings reach here: the import SPECIFIER itself, and the identifier a
133
+ * producer asks about (`declaration-lifecycle.ts` asks `typeAt` about the
134
+ * name, not about the specifier node), so the answer cannot depend on which
135
+ * of the two a caller happens to hold.
136
+ */
137
+ const aliasTargetDeclaration = (checker, node) => {
138
+ const named = ts.isImportSpecifier(node) || ts.isExportSpecifier(node) || ts.isImportClause(node);
139
+ const at = ts.isIdentifier(node) ? node : named ? ts.getNameOfDeclaration(node) : undefined;
140
+ const symbol = at ? checker.getSymbolAtLocation(at) : undefined;
141
+ if (!symbol || (symbol.flags & ts.SymbolFlags.Alias) === 0)
142
+ return null;
143
+ const target = checker.getAliasedSymbol(symbol);
144
+ if (target === symbol)
145
+ return null;
146
+ const targetDeclaration = target.valueDeclaration ?? target.declarations?.[0];
147
+ return targetDeclaration && targetDeclaration !== node ? targetDeclaration : null;
148
+ };
149
+ /**
150
+ * Whether a physical initializer's trailing REST parameter is a sound stand-in
151
+ * for a declared single signature's trailing parameters -- the other shape a
152
+ * member's literal and its annotation can disagree about arity, one level
153
+ * over the overload case this function already handles.
154
+ *
155
+ * hono's own `Hono.fetch`: `fetch: (request, Env?, executionCtx?) => ... =
156
+ * (request, ...rest) => { return this.#dispatch(request, rest[1], rest[0],
157
+ * request.method) }`. `declared` has ONE signature (never overloaded -- the
158
+ * overload branch below does not apply), so the existing gate
159
+ * (`getCallSignatures().length < 2`) correctly stayed out of this case, and
160
+ * the member's published type kept the declared 3-named-parameter signature
161
+ * while the value's OWN parameter slot -- once `parameter-slot.ts`'s
162
+ * `restParameterArrayTypeOf` stopped it publishing a closed record for `rest`
163
+ * -- correctly types it as an array. That left the member and its own
164
+ * allocation naming two different conventions for the identical value: the
165
+ * shape target 3 fixed for the parameter, still open for the member.
166
+ *
167
+ * Publishing the physical (rest-taking) signature here is sound for exactly
168
+ * the same reason `ECMA-262`'s own calling convention makes it sound at
169
+ * every ordinary call site: a rest parameter absorbs whatever a caller
170
+ * actually passed into a real array or tuple, REGARDLESS of whether the
171
+ * positions it absorbs are declared optional or required -- binding is a
172
+ * fact about the call, not about the annotation. A value assignable to the
173
+ * declared type remains callable exactly as before once the member's own
174
+ * type is the rest-taking one, because TypeScript already proved the
175
+ * initializer assignable to `declared` (what let the program compile at
176
+ * all); this does not re-derive that, only decides which signature the
177
+ * member's own type publishes.
178
+ *
179
+ * This used to require the declared tail to be entirely OPTIONAL, which is
180
+ * what told `fetch` (`Env?`, `executionCtx?`) apart from hono's own
181
+ * `render: Renderer = (...args) => {...}` (`Renderer` resolves to
182
+ * `DefaultRenderer`'s ONE REQUIRED parameter). That distinction never traced
183
+ * to a soundness difference -- both shapes have the physical rest parameter
184
+ * absorbing exactly the positions the declared signature's tail names, and
185
+ * `render`'s own inner `this.#renderer(...args)` already resolves through
186
+ * `tuple-spread.ts`'s `tupleSpreadReads` (the CLOSED, all-required tuple
187
+ * path, not the optional-tailed `maxArityTupleSpreadReads` one) -- so a
188
+ * required tail is not a harder case, only a different one. Requiring
189
+ * optionality bought nothing here and left `render` publishing two
190
+ * disagreeing conventions for the same value, the identical shape target 3
191
+ * fixed for `fetch`. Gated narrowly still, to the shape the proof covers:
192
+ * - `declared` must be a SINGLE signature (the overload branch below owns
193
+ * two-or-more);
194
+ * - the physical initializer's LAST parameter must be a rest parameter that
195
+ * `declared`'s signature does not have at all;
196
+ * - `declared` must have at least one parameter beyond the physical
197
+ * signature's fixed prefix, so there is a real tail for the rest to
198
+ * absorb rather than an equal-arity coincidence.
199
+ */
200
+ const restAbsorbsDeclaredOptionalTail = (declaredSignature, physicalParameters) => {
201
+ const lastPhysical = physicalParameters[physicalParameters.length - 1];
202
+ if (!lastPhysical || lastPhysical.dotDotDotToken === undefined)
203
+ return false;
204
+ const declaredDeclaration = declaredSignature.declaration;
205
+ if (!declaredDeclaration)
206
+ return false;
207
+ // `declaredDeclaration.parameters` widens to include `JSDocParameterTag`
208
+ // for a JSDoc-derived signature, which carries none of the syntax fields
209
+ // below -- fail closed (not a parameter this proof can read) rather than
210
+ // guess at one it cannot.
211
+ if (!declaredDeclaration.parameters.every(ts.isParameter))
212
+ return false;
213
+ const declaredParameters = declaredDeclaration.parameters;
214
+ const lastDeclared = declaredParameters[declaredParameters.length - 1];
215
+ if (lastDeclared && lastDeclared.dotDotDotToken !== undefined)
216
+ return false;
217
+ const physicalFixedCount = physicalParameters.length - 1;
218
+ if (physicalFixedCount >= declaredParameters.length)
219
+ return false;
220
+ const declaredTail = declaredParameters.slice(physicalFixedCount);
221
+ return declaredTail.length > 0;
222
+ };
223
+ /** An expression with its parentheses removed -- the layer that changes how a write READS without changing what it stores. */
224
+ const withoutParens = (node) => (ts.isParenthesizedExpression(node) ? withoutParens(node.expression) : node);
225
+ /**
226
+ * Whether an assignment target can name `member`: `yes` when it provably
227
+ * does, `no` when it provably does not, `open` when nothing here can tell.
228
+ *
229
+ * A COMPUTED target is decided by the checker's own type for the key. hono
230
+ * writes its seven route registrars as `allMethods.forEach((method) => {
231
+ * this[method] = (args1, ...args) => {...} })` (`hono-base.ts`), and
232
+ * `method` is typed by the `as const` array it iterates -- a union of string
233
+ * literals. That union is a guarantee of the same kind every other decision
234
+ * in this compiler rests on: the value at run time IS one of those names.
235
+ * A key typed any wider (`string`, a `for-in` binding, `any`) states nothing
236
+ * about which member it lands on, so it is `open` and the caller refuses.
237
+ */
238
+ const assignmentNamesMember = (checker, target, member) => {
239
+ if (ts.isPropertyAccessExpression(target)) {
240
+ if (target.name.text !== member)
241
+ return 'no';
242
+ return target.expression.kind === ts.SyntaxKind.ThisKeyword ? 'yes' : 'open';
243
+ }
244
+ if (!ts.isElementAccessExpression(target))
245
+ return 'no';
246
+ const key = checker.getTypeAtLocation(target.argumentExpression);
247
+ const arms = key.isUnion() ? key.types : [key];
248
+ if (!arms.every((arm) => arm.isStringLiteral()))
249
+ return 'open';
250
+ const names = arms.map((arm) => arm.value);
251
+ if (!names.includes(member))
252
+ return 'no';
253
+ return target.expression.kind === ts.SyntaxKind.ThisKeyword ? 'yes' : 'open';
254
+ };
255
+ /**
256
+ * The ONE function literal a class writes into a member it declares with an
257
+ * overload set and no initializer -- `physicalInitializerTypeOf`'s premise
258
+ * for the other spelling of the same allocation.
259
+ *
260
+ * hono's `HonoBase` is the shape: `get!: HandlerInterface<E, 'get', ...>`
261
+ * declares roughly a dozen overloads that join into no single convention, and
262
+ * the cell is filled by the constructor's `allMethods.forEach((method) => {
263
+ * this[method] = (args1: string | H, ...args: H[]) => {...} })`. One arrow is
264
+ * allocated; every route registrar holds it. Read off the annotation instead,
265
+ * the member carried `callable-identity` -- a function the plan knows only by
266
+ * identity -- so `app.get('/', handler)`, the first statement of every hono
267
+ * program, had no invoke path at all
268
+ * (`call-abi:no-invoke-path:callable-identity`).
269
+ *
270
+ * The premise is `physicalInitializerTypeOf`'s verbatim: a function or arrow
271
+ * LITERAL cannot be overloaded, TypeScript already proved this one assignable
272
+ * to every declared overload (which is what let the program typecheck), and
273
+ * whichever overload a CALL matched is a type-level fiction over the single
274
+ * function that exists. Only the spelling differs -- `= <literal>` at the
275
+ * declaration versus `this[k] = <literal>` in the constructor -- and the
276
+ * value allocated is the same either way.
277
+ *
278
+ * Refuses on anything it cannot see to the end of: a second distinct literal
279
+ * (two conventions, and nothing here picks), a non-literal right-hand side (a
280
+ * value whose own convention is a further question), or a target whose key
281
+ * cannot be resolved to names. Scoped to the declaring class's own body, the
282
+ * same scope the initializer arm has -- a write from outside is bound by the
283
+ * declared type exactly as a later write over an initialized member is, and
284
+ * fails closed at that write's own conversion rather than silently here.
285
+ *
286
+ * Gated to a declared OVERLOAD SET, so nothing that already resolves to one
287
+ * convention is re-derived: a member with a single declared signature keeps
288
+ * the checker's answer, and the class layout keeps agreeing with it.
289
+ */
290
+ const writtenFunctionLiteralOf = (checker, declaration, declared) => {
291
+ if (!ts.isPropertyDeclaration(declaration) || declaration.initializer !== undefined)
292
+ return null;
293
+ if (declared.getCallSignatures().length < 2)
294
+ return null;
295
+ const owner = declaration.parent;
296
+ if (!ts.isClassLike(owner))
297
+ return null;
298
+ const name = declaration.name;
299
+ if (!ts.isIdentifier(name) && !ts.isStringLiteralLike(name))
300
+ return null;
301
+ const member = name.text;
302
+ let found = null;
303
+ let open = false;
304
+ const visit = (node) => {
305
+ if (open)
306
+ return;
307
+ if (ts.isBinaryExpression(node) && node.operatorToken.kind === ts.SyntaxKind.EqualsToken) {
308
+ const names = assignmentNamesMember(checker, withoutParens(node.left), member);
309
+ if (names === 'open')
310
+ open = true;
311
+ else if (names === 'yes') {
312
+ const value = withoutParens(node.right);
313
+ if (!ts.isArrowFunction(value) && !ts.isFunctionExpression(value))
314
+ open = true;
315
+ else if (found !== null && found !== value)
316
+ open = true;
317
+ else
318
+ found = value;
319
+ }
320
+ }
321
+ ts.forEachChild(node, visit);
322
+ };
323
+ for (const each of owner.members)
324
+ visit(each);
325
+ return open ? null : found;
326
+ };
327
+ export const physicalInitializerTypeOf = (checker, declaration, declared, parameters = emptyParameterBindingCensus) => {
328
+ // An IMPORT of such a binding asks the same question one module over. The
329
+ // specifier is an alias, so the symbol at the import site is the alias's --
330
+ // and its type is the exported name's DECLARED type, every overload of it,
331
+ // never the one function the exporting module actually allocated. hono's
332
+ // `export const parseBody: ParseBody = async (...)` is the case:
333
+ // `utils/body.ts` resolves to the single async arrow (below), and
334
+ // `request.ts`'s `import { parseBody }` resolved to `ParseBody`'s two
335
+ // overloads, so one value had two conventions depending on which module
336
+ // asked -- the two-authorities shape, with the import site refusing.
337
+ const alias = aliasTargetDeclaration(checker, declaration);
338
+ if (alias)
339
+ return physicalInitializerTypeOf(checker, alias, declared, parameters);
340
+ if (!ts.isPropertyDeclaration(declaration) && !ts.isVariableDeclaration(declaration) && !ts.isPropertyAssignment(declaration)) {
341
+ return null;
342
+ }
343
+ const initializer = declaration.initializer ?? writtenFunctionLiteralOf(checker, declaration, declared);
344
+ if (!initializer || (!ts.isArrowFunction(initializer) && !ts.isFunctionExpression(initializer)))
345
+ return null;
346
+ const declaredSignatures = declared.getCallSignatures();
347
+ // HOLDS: what the initializer LITERAL physically is, as opposed to
348
+ // `declared`'s stated/annotated type -- the whole distinction this
349
+ // function exists to draw (see the header comment). Asked through the
350
+ // shared authority; a function/arrow literal is rarely `any`-degraded, so
351
+ // this mostly falls straight through to the checker exactly as before,
352
+ // but stays uniform with every other "what does this hold" question.
353
+ const physical = censusedTypeAt(checker, parameters, initializer);
354
+ if (physical.getCallSignatures().length !== 1)
355
+ return null;
356
+ if (declaredSignatures.length >= 2)
357
+ return physical;
358
+ const soleDeclared = declaredSignatures[0];
359
+ if (declaredSignatures.length === 1 && soleDeclared && restAbsorbsDeclaredOptionalTail(soleDeclared, initializer.parameters))
360
+ return physical;
361
+ return null;
362
+ };
363
+ /**
364
+ * Whether `type` IS the standard library's `String` wrapper-object interface
365
+ * -- resolved by declaration identity (`isStandardInterfaceType`), which is
366
+ * what this function's own doc comment already claimed of it before this fix:
367
+ * `stringObjectDeclarationOf` (host-protocols.ts) resolves `String` through
368
+ * `checker.resolveName` and compares declaration identity; this used to
369
+ * compare the symbol's own NAME plus "some declaration sits in a `.d.ts`
370
+ * file" instead, which is not the same check -- a program declaring its own
371
+ * ambient `interface String { ... }` (or merely a same-named local one bundled
372
+ * from a `.d.ts`) would satisfy the old test without being the standard
373
+ * wrapper at all. Routed through the shared resolver so the two are one
374
+ * authority rather than a real one and a look-alike.
375
+ */
376
+ const isAmbientStringObjectType = (checker, anchor, type) => isStandardInterfaceType(checker, anchor, 'String', type);
377
+ /** The `new` expression an initializer physically is, unwrapped through `as`/type-assertion/parens/non-null -- the layers that change the STATIC view without changing what is allocated. */
378
+ const unwrappedAllocation = (node) => {
379
+ if (ts.isNewExpression(node))
380
+ return node;
381
+ if (ts.isAsExpression(node) || ts.isTypeAssertionExpression(node) || ts.isParenthesizedExpression(node) || ts.isNonNullExpression(node)) {
382
+ return unwrappedAllocation(node.expression);
383
+ }
384
+ return null;
385
+ };
386
+ /** Whether `declaration` is a `const` variable declaration -- a `let`/`var` can be reassigned to something that is not a String object, and nothing here re-proves that for every later assignment. */
387
+ const isConstVariableDeclaration = (declaration) => {
388
+ const list = declaration.parent;
389
+ return ts.isVariableDeclarationList(list) && (list.flags & ts.NodeFlags.Const) !== 0;
390
+ };
391
+ const physicalStringObjectTypeOfDeclaringNode = (checker, declaration, parameters = emptyParameterBindingCensus) => {
392
+ if (!ts.isVariableDeclaration(declaration) && !ts.isPropertyDeclaration(declaration) && !ts.isPropertyAssignment(declaration))
393
+ return null;
394
+ const allocation = declaration.initializer ? unwrappedAllocation(declaration.initializer) : null;
395
+ if (!allocation)
396
+ return null;
397
+ // HOLDS: what the `new String(...)` expression physically allocates, the
398
+ // same "physical, not declared/stated" question `physicalInitializerTypeOf`
399
+ // asks of a function literal, one type-object over (see the header
400
+ // comment). A `new` expression's own type is essentially never `any`, so
401
+ // this almost always falls straight through to the checker unchanged --
402
+ // asked through the shared authority anyway, for the same uniformity
403
+ // reason, not because a change here was measured to move anything.
404
+ const physical = censusedTypeAt(checker, parameters, allocation);
405
+ return isAmbientStringObjectType(checker, allocation, physical) ? physical : null;
406
+ };
407
+ /**
408
+ * The type a `new String(x)` allocation actually has, when a declaration or a
409
+ * same-module reference to it is annotated with something else.
410
+ *
411
+ * hono's `utils/html.ts`: `const escapedString = new String(value) as
412
+ * HtmlEscapedString`. The declared/annotated type is `HtmlEscapedString =
413
+ * string & HtmlEscaped`, which `deriveIntersection` (representation/derive.ts)
414
+ * deliberately collapses to plain `string` -- correct for the alias in
415
+ * general, and wrong for the one value this expression actually allocates: a
416
+ * String WRAPPER OBJECT with identity, not a primitive. `as` changes only the
417
+ * STATIC view a reader gets; it does not change what `new String(...)`
418
+ * constructs at runtime.
419
+ *
420
+ * `physicalInitializerTypeOf`'s exact shape one level over: that function
421
+ * recovers the one convention a function LITERAL actually has past an
422
+ * overloaded annotation; this recovers the one OBJECT a `new String(...)`
423
+ * expression actually allocates past a widened/cast annotation. Both exist
424
+ * because the checker's type at the BINDING can legitimately differ from the
425
+ * type of the value physically stored there, and both must be asked
426
+ * uniformly at every site that reads the binding back, not only at its
427
+ * declaration -- `structural.ts`'s `typeAt` is exactly that uniform point,
428
+ * for the same reason it already calls `physicalOverloadTypeAt` there. A
429
+ * held cell and every read of it must agree, or a store/read pair would
430
+ * disagree about the binding's own carrier for no reason the program stated.
431
+ *
432
+ * Deliberately narrow, for the identical blast-radius reason
433
+ * `physicalInitializerTypeOf`'s own comment gives for its narrower cases: this
434
+ * does not see through an arbitrary `as`-cast pattern. It fires only when the
435
+ * unwrapped initializer is itself a `new` expression whose resolved type's
436
+ * symbol is literally named `String`, declared ambiently. `Number`/`Boolean`/
437
+ * every other constructor is untouched.
438
+ *
439
+ * A same-module IDENTIFIER reference reaches the same answer by walking to
440
+ * its declaring `VariableDeclaration`, gated to `const` only.
441
+ */
442
+ export const physicalStringObjectTypeAt = (checker, node, parameters = emptyParameterBindingCensus) => {
443
+ const direct = physicalStringObjectTypeOfDeclaringNode(checker, node, parameters);
444
+ if (direct)
445
+ return direct;
446
+ if (!ts.isIdentifier(node))
447
+ return null;
448
+ const symbol = checker.getSymbolAtLocation(node);
449
+ const declaration = symbol?.valueDeclaration;
450
+ if (!declaration || !ts.isVariableDeclaration(declaration) || !isConstVariableDeclaration(declaration))
451
+ return null;
452
+ return physicalStringObjectTypeOfDeclaringNode(checker, declaration, parameters);
453
+ };
454
+ /**
455
+ * The signature a get/set accessor declaration implements, or `null` for a node
456
+ * that is not one.
457
+ *
458
+ * An accessor's name symbol is the *property* it implements, so its type is
459
+ * that property's -- `number` for `get value(): number`. What is allocated at
460
+ * an accessor declaration is the accessor function, whose type is its own
461
+ * signature. Reading the property's type there hands the callable carrier a
462
+ * scalar, and a call through it then has no convention to select at all.
463
+ */
464
+ export const accessorSignatureOf = (checker, node) => {
465
+ if (!ts.isGetAccessorDeclaration(node) && !ts.isSetAccessorDeclaration(node))
466
+ return null;
467
+ return checker.getSignatureFromDeclaration(node) ?? null;
468
+ };
469
+ /**
470
+ * The single property/element access a passthrough accessor half reads or
471
+ * writes -- `R.k` / `R['k']` for a receiver `R` that is either a bare `this`
472
+ * or `this.<field>` -- or `null` for anything else. Shared by both halves of
473
+ * `accessorPassthroughAliasOf` so a getter and setter are compared on the
474
+ * identical representation of "the same access".
475
+ */
476
+ const passthroughAccessOf = (node) => {
477
+ if (!ts.isPropertyAccessExpression(node) && !ts.isElementAccessExpression(node))
478
+ return null;
479
+ const receiver = node.expression;
480
+ const receiverField = receiver.kind === ts.SyntaxKind.ThisKeyword
481
+ ? null
482
+ : ts.isPropertyAccessExpression(receiver) && receiver.expression.kind === ts.SyntaxKind.ThisKeyword
483
+ ? receiver.name.text
484
+ : undefined;
485
+ if (receiverField === undefined)
486
+ return null;
487
+ const key = ts.isPropertyAccessExpression(node)
488
+ ? node.name.text
489
+ : ts.isStringLiteralLike(node.argumentExpression)
490
+ ? node.argumentExpression.text
491
+ : null;
492
+ if (key === null)
493
+ return null;
494
+ return { receiverField, key };
495
+ };
496
+ /**
497
+ * The field a get/set accessor PAIR does nothing but forward to, when both
498
+ * halves are exactly one statement long and agree on the identical access --
499
+ * `get image() { return this.source.data }` / `set image(value) {
500
+ * this.source.data = value }` (three's `Texture`) is the motivating shape.
501
+ * `null` for anything that is not provably this exact shape.
502
+ *
503
+ * This states only the SYNTACTIC fact: which access both bodies name, and
504
+ * that the setter's whole right-hand side is its own parameter untouched --
505
+ * nothing here asks whether the target the access names is itself a plain
506
+ * field, whether it even exists, or whether some sibling class overrides
507
+ * either half differently. Those are per-owner, per-family questions that
508
+ * need the checker and the class family's own closure, and belong beside the
509
+ * caller that already asks them one owner at a time --
510
+ * `accessorPassthroughDataMemberOf` (`flow/source-class-data.ts`), next to
511
+ * `isSourceDataDeclaration`, which this function's result is deliberately
512
+ * NOT allowed to bypass: a target that is itself an accessor still refuses.
513
+ *
514
+ * Deliberately narrow, for the same reason `physicalStringObjectTypeAt` above
515
+ * gives: guessing at a looser shape (a body with an early return, a
516
+ * multi-statement setter, a right-hand side that merely INCLUDES the
517
+ * parameter) risks calling something a passthrough that quietly does more,
518
+ * which would make a read of the alias silently skip real behavior.
519
+ */
520
+ export const accessorPassthroughAliasOf = (getter, setter) => {
521
+ const getterStatements = getter.body?.statements;
522
+ if (!getterStatements || getterStatements.length !== 1)
523
+ return null;
524
+ const onlyReturn = getterStatements[0];
525
+ if (!ts.isReturnStatement(onlyReturn) || !onlyReturn.expression)
526
+ return null;
527
+ const read = passthroughAccessOf(onlyReturn.expression);
528
+ if (!read)
529
+ return null;
530
+ const setterStatements = setter.body?.statements;
531
+ if (!setterStatements || setterStatements.length !== 1)
532
+ return null;
533
+ const onlyAssignment = setterStatements[0];
534
+ if (!ts.isExpressionStatement(onlyAssignment))
535
+ return null;
536
+ const assignment = onlyAssignment.expression;
537
+ if (!ts.isBinaryExpression(assignment) || assignment.operatorToken.kind !== ts.SyntaxKind.EqualsToken)
538
+ return null;
539
+ const write = passthroughAccessOf(assignment.left);
540
+ if (!write || write.receiverField !== read.receiverField || write.key !== read.key)
541
+ return null;
542
+ // The whole RHS must be exactly the setter's own sole parameter, so nothing
543
+ // but the value the caller wrote ever reaches the receiver's real storage.
544
+ const parameter = setter.parameters[0];
545
+ if (!parameter || setter.parameters.length !== 1 || !ts.isIdentifier(parameter.name))
546
+ return null;
547
+ if (!ts.isIdentifier(assignment.right) || assignment.right.text !== parameter.name.text)
548
+ return null;
549
+ return read;
550
+ };
551
+ /**
552
+ * The MEMBER a passthrough accessor pair forwards to -- the storage half of
553
+ * the syntactic fact `accessorPassthroughAliasOf` states.
554
+ *
555
+ * three's `Texture` writes `get image() { return this.source.data }` and the
556
+ * matching setter, and annotates the GETTER `@type {?Object}`. That annotation
557
+ * is an upper bound on what may be read back, never a statement about what the
558
+ * slot holds -- the slot IS `Source.data`, and nothing else can be. But
559
+ * `Object | null` is not `any`/`void`/`never`, so every authority gated on
560
+ * `isUnusableEvidence` treats it as a final answer and never asks the census
561
+ * that knows better. `Texture.image` is read dozens of times across
562
+ * `WebGLTextures.js` alone, and each read boxed.
563
+ *
564
+ * The receiver type is taken from the getter's OWN access node rather than
565
+ * rebuilt from the owning class's symbol: the node is what the program
566
+ * actually wrote, the checker already types it in its real lexical position,
567
+ * and reconstructing an instance type from a class declaration would answer a
568
+ * different question for a constructor function or a class expression.
569
+ *
570
+ * Fails closed on a target that is itself an accessor. Forwarding to a second
571
+ * accessor is not storage -- it is another body that may do anything -- and
572
+ * admitting it is how a passthrough proof turns into a chain of guesses.
573
+ */
574
+ export const accessorPassthroughMemberTargetOf = (checker, symbol) => {
575
+ const declarations = symbol.declarations ?? [];
576
+ const getter = declarations.find(ts.isGetAccessorDeclaration);
577
+ const setter = declarations.find(ts.isSetAccessorDeclaration);
578
+ if (!getter || !setter || !accessorPassthroughAliasOf(getter, setter))
579
+ return null;
580
+ const onlyReturn = getter.body?.statements[0];
581
+ if (!onlyReturn || !ts.isReturnStatement(onlyReturn) || !onlyReturn.expression)
582
+ return null;
583
+ const access = onlyReturn.expression;
584
+ if (!ts.isPropertyAccessExpression(access) && !ts.isElementAccessExpression(access))
585
+ return null;
586
+ const key = ts.isPropertyAccessExpression(access)
587
+ ? access.name.text
588
+ : ts.isStringLiteralLike(access.argumentExpression)
589
+ ? access.argumentExpression.text
590
+ : null;
591
+ if (key === null)
592
+ return null;
593
+ const receiver = checker.getApparentType(checker.getTypeAtLocation(access.expression));
594
+ if (isUninformativeReceiver(receiver))
595
+ return null;
596
+ const target = checker.getPropertyOfType(receiver, key);
597
+ const declaration = target?.declarations?.[0];
598
+ if (!target || !declaration)
599
+ return null;
600
+ if (ts.isGetAccessorDeclaration(declaration) || ts.isSetAccessorDeclaration(declaration))
601
+ return null;
602
+ return { symbol: target, declaration };
603
+ };
604
+ /** A receiver the checker could not type states nothing about what its members hold. */
605
+ const isUninformativeReceiver = (type) => (type.flags & (ts.TypeFlags.Any | ts.TypeFlags.Unknown | ts.TypeFlags.Void | ts.TypeFlags.Never)) !== 0;
606
+ /**
607
+ * The one signature an OVERLOADED function or method's implementation
608
+ * declares, or `null` when the node is not an overload set's implementation.
609
+ *
610
+ * `class HonoRequest { param(key: string): string; param(): Record<...>;
611
+ * param(key?: string): unknown { ... } }` (hono's `request.ts`) is the shape,
612
+ * and it is `physicalInitializerTypeOf`'s twin at TypeScript's other spelling
613
+ * of the same thing. Asked through the symbol, the type is every OVERLOAD
614
+ * signature and never the implementation's -- that is the checker's rule, and
615
+ * it is right for call resolution -- so `sharedAbiOf` (derive.ts) sees N
616
+ * conventions and refuses. But the implementation is the only body that ever
617
+ * runs, and it declares exactly one; N is a fact about how the method may be
618
+ * CALLED, never about the single function that exists.
619
+ *
620
+ * `accessorSignatureOf` above already reaches past the symbol for the same
621
+ * class of reason (an accessor's name symbol is the property, not the
622
+ * function), and this asks the checker the identical way -- from the
623
+ * declaration node rather than the symbol.
624
+ *
625
+ * Resolve the body's declaration from the symbol: a call-site value declaration
626
+ * can be the first overload, which has no body of its own. The same function
627
+ * object still implements the symbol's one body.
628
+ *
629
+ * ⚠ A second DECLARATION is not a second overload. TypeScript's JS expando
630
+ * inference makes `SourceNode.fromStringWithSourceMap = function ...` a
631
+ * declaration of the `SourceNode` SYMBOL, so a pre-class constructor function
632
+ * with any static on it has two declarations and no overloads at all. Reading
633
+ * the signature off its body then returns the CALL signature alone and throws
634
+ * away the construct signature TS's JS inference attached to the symbol -- the
635
+ * declaration's cell became `function-value-dispatch` while every reference
636
+ * stayed `function-and-constructor`, which is 96 rows of tsc's self-compile
637
+ * concentrated in the `source-map` packages, and a two-authorities defect of
638
+ * exactly the kind this compiler exists to avoid. So the set is recognized by
639
+ * an actual overload being present: a method/function declaration with NO
640
+ * body, which is the only thing an overload signature can be.
641
+ */
642
+ export const implementationSignatureOf = (checker, node) => {
643
+ if (!ts.isMethodDeclaration(node) && !ts.isFunctionDeclaration(node))
644
+ return null;
645
+ const name = ts.getNameOfDeclaration(node);
646
+ const symbol = name ? checker.getSymbolAtLocation(name) : undefined;
647
+ const declarations = symbol?.getDeclarations() ?? [];
648
+ const overloaded = declarations.some((declaration) => (ts.isMethodDeclaration(declaration) || ts.isFunctionDeclaration(declaration)) && declaration.body === undefined);
649
+ if (!overloaded)
650
+ return null;
651
+ const implementation = declarations.find((declaration) => (ts.isMethodDeclaration(declaration) || ts.isFunctionDeclaration(declaration)) && declaration.body !== undefined);
652
+ return implementation ? (checker.getSignatureFromDeclaration(implementation) ?? null) : null;
653
+ };
654
+ /**
655
+ * The signature a `?`-marked class METHOD implements, when it has a real
656
+ * body -- or `null` when the node is not one.
657
+ *
658
+ * `bar?(): string { ... }` inside a class is not a member that may or may
659
+ * not be defined: `DefineMethod` runs unconditionally during
660
+ * `ClassDefinitionEvaluation`, so the method exists on every instance the
661
+ * moment the class is instantiated. The `?` states a fact about READING
662
+ * `bar` through a structural interface that does not require it -- a
663
+ * caller who only knows the interface may see `undefined` -- never a fact
664
+ * about whether THIS declaration's own function object gets created.
665
+ *
666
+ * `declaredValueTypeOf` (above) asks the checker for the member SYMBOL's
667
+ * type, and for an optional member the checker answers `T | undefined`
668
+ * whether the query is symbol- or node-based -- `getTypeOfSymbolAtLocation`
669
+ * and `getTypeAtLocation` on the declaration itself agree, verified
670
+ * directly against the checker rather than assumed. That answer is
671
+ * CORRECT for "what does reading this member give you" and simply the
672
+ * wrong question for an ALLOCATION's own shape: `class-lifecycle.ts`'s
673
+ * `allocateFunctionObject` asks `valueTypeAt` for what `DefineMethod`
674
+ * creates, not for what a later read of the member sees.
675
+ *
676
+ * `accessorSignatureOf` and `implementationSignatureOf` above already
677
+ * reach past the symbol for the identical reason (an accessor's/overload
678
+ * set's symbol answers a different question than the one physical function
679
+ * being allocated); this is the same move for the third case `questionToken`
680
+ * introduces. Gated on there being a body, so an interface or `.d.ts`
681
+ * member SIGNATURE (`ts.isMethodSignature`) is untouched: that node
682
+ * allocates nothing at all, and `?` there states exactly what it says --
683
+ * an implementer MAY omit the member.
684
+ */
685
+ export const optionalMethodSignatureOf = (checker, node) => {
686
+ if (!ts.isMethodDeclaration(node))
687
+ return null;
688
+ if (node.questionToken === undefined)
689
+ return null;
690
+ if (node.body === undefined)
691
+ return null;
692
+ return checker.getSignatureFromDeclaration(node) ?? null;
693
+ };
694
+ /**
695
+ * The accessor pair behind an *object literal's* member, or `null`.
696
+ *
697
+ * Restricted to object literals on purpose. A class accessor is installed by a
698
+ * class-evaluation event and read back from the class layout
699
+ * (`projection/classes.ts`), so naming it here as well would be a second
700
+ * authority over one member. An accessor declared in an interface or a `.d.ts`
701
+ * has no body at all, so there is nothing for a reader to call and it stays an
702
+ * ordinary member of a shape the host implements.
703
+ */
704
+ export const literalAccessorOf = (symbol, identities) => {
705
+ const declarations = symbol.declarations ?? [];
706
+ const getter = declarations.find((node) => ts.isGetAccessorDeclaration(node) && ts.isObjectLiteralExpression(node.parent));
707
+ const setter = declarations.find((node) => ts.isSetAccessorDeclaration(node) && ts.isObjectLiteralExpression(node.parent));
708
+ if (!getter && !setter)
709
+ return null;
710
+ return {
711
+ getter: getter ? identities.declarationIdOf(getter) : null,
712
+ setter: setter ? identities.declarationIdOf(setter) : null
713
+ };
714
+ };
715
+ /**
716
+ * The one signature an OVERLOADED CONSTRUCTOR's implementation declares, or
717
+ * `null` when the class does not overload its constructor.
718
+ *
719
+ * `implementationSignatureOf` above states the rule; this is the same fact at
720
+ * TypeScript's other spelling of it. `class Long { constructor(low: number,
721
+ * high?: number, unsigned?: boolean); constructor(value: bigint, unsigned?:
722
+ * boolean); constructor(value: string, unsigned?: boolean); constructor(
723
+ * lowOrValue: number | bigint | string = 0, highOrUnsigned?: number | boolean,
724
+ * unsigned?: boolean) { ... } }` (bson's `long.ts`) declares three ways to
725
+ * CALL `new Long`, and exactly one frame the body runs with. `sharedAbiOf`
726
+ * (derive.ts), asked for a convention the three share, correctly finds none
727
+ * and refuses -- and refusing is wrong here for the same reason it was wrong
728
+ * for a method: the three are views of one physical constructor, and the
729
+ * implementation is the one that states its frame.
730
+ *
731
+ * A constructor has no name, so the symbol test `implementationSignatureOf`
732
+ * uses cannot be spelled here. The class's own member list is the same
733
+ * question asked where it can be answered: an overload set is precisely a
734
+ * class carrying more than one `ConstructorDeclaration`, of which at most one
735
+ * has a body.
736
+ *
737
+ * Gated on the class declaring no type parameters. `getSignatureFromDeclaration`
738
+ * answers from the declaration, so its signature is the UNINSTANTIATED one;
739
+ * for a generic class that would silently drop the instantiation the
740
+ * constructor type was reached through. Such a class keeps refusing exactly as
741
+ * it does today rather than being answered with the wrong frame.
742
+ */
743
+ export const constructorImplementationSignatureOf = (checker, declaration) => {
744
+ if (!ts.isClassLike(declaration))
745
+ return null;
746
+ if ((declaration.typeParameters ?? []).length > 0)
747
+ return null;
748
+ const constructors = declaration.members.filter(ts.isConstructorDeclaration);
749
+ if (constructors.length < 2)
750
+ return null;
751
+ const implementation = constructors.find((one) => one.body !== undefined);
752
+ return implementation ? (checker.getSignatureFromDeclaration(implementation) ?? null) : null;
753
+ };
754
+ /**
755
+ * The source of a mapped type that changes only MODIFIERS -- `Mutable<T>`,
756
+ * `Readonly<T>` -- or `null` for every mapped type that changes what the
757
+ * object holds.
758
+ *
759
+ * `type Mutable<T extends object> = { -readonly [K in keyof T]: T[K] }`
760
+ * (tsc's `utilities.ts`) states the same storage as `T`: `readonly` is a
761
+ * checker-side permission, not a physical fact, and every field keeps its own
762
+ * key and its own type. So `Mutable<Node>` IS `Node`, and walking it as a
763
+ * fresh anonymous object was not merely wasteful -- it re-entered the alias
764
+ * once per nested instantiation and refused with "type alias Mutable
765
+ * re-entered with no equivalent active instantiation", 4,503 unmet
766
+ * obligations on the tsc self-compile, all of them behind
767
+ * `nodeFactory.ts`'s `update<T extends Node>(updated: Mutable<T>, original:
768
+ * T)`.
769
+ *
770
+ * Every other mapped type is refused here, by construction rather than by a
771
+ * name list:
772
+ *
773
+ * - `Partial<T>`/`Required<T>` carry a `?` modifier, which IS physical (a
774
+ * presence bit), so a question token of either sign disqualifies.
775
+ * - `Pick<T, K>`/`Record<K, V>` constrain the key variable to something other
776
+ * than `keyof <source>`, so they change the key set.
777
+ * - A remapped key (`as`) changes the names, and a body that is anything but
778
+ * the identity `T[K]` changes the values.
779
+ *
780
+ * Answered through the ALIAS's own type arguments: an instantiation's type
781
+ * arguments are where the source actually is (the mapped type's own instance
782
+ * carries the substitution internally, and the checker does not publish it).
783
+ * A mapped type reached without an alias keeps the general path.
784
+ */
785
+ export const modifierOnlyMappedSourceOf = (type) => {
786
+ const alias = type.aliasSymbol;
787
+ const suppliedArguments = type.aliasTypeArguments ?? [];
788
+ if (!alias || suppliedArguments.length === 0)
789
+ return null;
790
+ if ((type.flags & ts.TypeFlags.Object) === 0 || (type.objectFlags & ts.ObjectFlags.Mapped) === 0)
791
+ return null;
792
+ const declaration = (alias.declarations ?? []).find(ts.isTypeAliasDeclaration);
793
+ if (!declaration || !ts.isMappedTypeNode(declaration.type))
794
+ return null;
795
+ const mapped = declaration.type;
796
+ if (mapped.nameType !== undefined || mapped.questionToken !== undefined || mapped.type === undefined)
797
+ return null;
798
+ if (!ts.isIndexedAccessTypeNode(mapped.type))
799
+ return null;
800
+ const constraint = mapped.typeParameter.constraint;
801
+ if (!constraint || !ts.isTypeOperatorNode(constraint) || constraint.operator !== ts.SyntaxKind.KeyOfKeyword)
802
+ return null;
803
+ const sourceName = typeReferenceName(constraint.type);
804
+ if (sourceName === null || sourceName !== typeReferenceName(mapped.type.objectType))
805
+ return null;
806
+ if (typeReferenceName(mapped.type.indexType) !== mapped.typeParameter.name.text)
807
+ return null;
808
+ const position = (declaration.typeParameters ?? []).findIndex((parameter) => parameter.name.text === sourceName);
809
+ const source = position < 0 ? undefined : suppliedArguments[position];
810
+ // A source the caller left to the parameter's own default is not in the
811
+ // argument list; the general path answers it.
812
+ return source ?? null;
813
+ };
814
+ /** The single identifier a type reference names, or `null` for every compound type node. */
815
+ const typeReferenceName = (node) => ts.isTypeReferenceNode(node) && ts.isIdentifier(node.typeName) && node.typeArguments === undefined ? node.typeName.text : null;
816
+ const declaredMemberKeyOf = (symbol) => symbol.declarations?.[0] ?? symbol;
817
+ export const emptyDeclaredMemberCensus = {
818
+ accessorBodiesOf: () => null,
819
+ implementationReadsReceiver: () => false,
820
+ declaredMemberImplementedBy: () => null
821
+ };
822
+ export const censusDeclaredMembers = (checker, sourceFiles, identities, readsReceiver, reachable) => {
823
+ const accessors = new Map();
824
+ const conflicted = new Set();
825
+ const receivers = new Set();
826
+ const implemented = new Map();
827
+ const recordAccessor = (declared, getter, setter) => {
828
+ const key = declaredMemberKeyOf(declared);
829
+ const existing = accessors.get(key);
830
+ if (existing === undefined) {
831
+ accessors.set(key, { getter, setter });
832
+ return;
833
+ }
834
+ // A second implementer of one declared member. Identical bodies are the
835
+ // same literal reached twice; different ones are two objects that cannot
836
+ // share one interned shape, and neither may be preferred over the other.
837
+ if (existing.getter !== getter || existing.setter !== setter)
838
+ conflicted.add(key);
839
+ };
840
+ /** The declared member this literal member implements, or `null`. */
841
+ const declaredMemberOf = (literal, name) => {
842
+ const own = checker.getSymbolAtLocation(name);
843
+ if (!own)
844
+ return null;
845
+ const contextual = checker.getContextualType(literal);
846
+ if (!contextual)
847
+ return null;
848
+ const declared = contextual.getProperties().find((candidate) => candidate.escapedName === own.escapedName);
849
+ // No declared member, or the contextual type IS this literal's own shape --
850
+ // `literalAccessorOf` already answers that one, and restating it here would
851
+ // be the second authority this census exists to avoid. Compared through the
852
+ // same key the census is built on, for the reason `declaredMemberKeyOf`
853
+ // gives: "the literal's own member" is a fact about the DECLARATION, and a
854
+ // contextual type that is this literal's own shape, instantiated, would
855
+ // otherwise slip past an identity test on the symbol object.
856
+ if (!declared || declaredMemberKeyOf(declared) === declaredMemberKeyOf(own))
857
+ return null;
858
+ implemented.set(name, declared);
859
+ return declared;
860
+ };
861
+ /** Whether a function-like value declares its own `this` parameter. */
862
+ const declaresReceiver = (expression) => ts.isFunctionExpression(expression) &&
863
+ expression.parameters.some((parameter) => ts.isIdentifier(parameter.name) && parameter.name.escapedText === 'this');
864
+ /**
865
+ * Whether the value a getter hands back carries a receiver.
866
+ *
867
+ * `get next(): () => Step { return function (this: GetterCursor) { ... } }`
868
+ * stores a receiver-carrying callable into a member the program spelled
869
+ * `readonly next: () => Step`. The declaration says nothing about the frame;
870
+ * the value stored into it does, exactly as a method body does for a
871
+ * `MethodSignature`. Only the getter's OWN returns count -- a `return` inside
872
+ * a nested ordinary function belongs to that function, not to this one -- so
873
+ * the walk stops at every construct that introduces its own frame, which is
874
+ * the same boundary `bodyReadsThis` draws.
875
+ */
876
+ const returnsReceiverCarrier = (body) => {
877
+ let found = false;
878
+ const visit = (node) => {
879
+ if (found)
880
+ return;
881
+ if (ts.isReturnStatement(node)) {
882
+ if (node.expression && declaresReceiver(node.expression))
883
+ found = true;
884
+ return;
885
+ }
886
+ if (ts.isFunctionDeclaration(node) ||
887
+ ts.isFunctionExpression(node) ||
888
+ ts.isArrowFunction(node) ||
889
+ ts.isMethodDeclaration(node) ||
890
+ ts.isGetAccessorDeclaration(node) ||
891
+ ts.isSetAccessorDeclaration(node) ||
892
+ ts.isClassLike(node)) {
893
+ return;
894
+ }
895
+ ts.forEachChild(node, visit);
896
+ };
897
+ ts.forEachChild(body, visit);
898
+ return found;
899
+ };
900
+ const visitLiteral = (literal) => {
901
+ for (const property of literal.properties) {
902
+ if (ts.isMethodDeclaration(property)) {
903
+ if (!property.body || !readsReceiver(property.body))
904
+ continue;
905
+ const declared = declaredMemberOf(literal, property.name);
906
+ if (declared)
907
+ receivers.add(declaredMemberKeyOf(declared));
908
+ continue;
909
+ }
910
+ if (ts.isPropertyAssignment(property)) {
911
+ // The ES5 spelling of the same store: a function VALUE placed in a
912
+ // member the declaration spells receiver-free.
913
+ if (!declaresReceiver(property.initializer))
914
+ continue;
915
+ const held = declaredMemberOf(literal, property.name);
916
+ if (held)
917
+ receivers.add(declaredMemberKeyOf(held));
918
+ continue;
919
+ }
920
+ if (!ts.isGetAccessorDeclaration(property) && !ts.isSetAccessorDeclaration(property))
921
+ continue;
922
+ const declared = declaredMemberOf(literal, property.name);
923
+ if (!declared)
924
+ continue;
925
+ if (ts.isGetAccessorDeclaration(property) && property.body && returnsReceiverCarrier(property.body))
926
+ receivers.add(declaredMemberKeyOf(declared));
927
+ const own = checker.getSymbolAtLocation(property.name);
928
+ // The pair is found by SYMBOL too: a computed `[Symbol.iterator]` getter
929
+ // and setter share one symbol and would compare equal by text only by
930
+ // accident.
931
+ const pairs = literal.properties.filter((node) => (ts.isGetAccessorDeclaration(node) || ts.isSetAccessorDeclaration(node)) && checker.getSymbolAtLocation(node.name) === own);
932
+ const getter = pairs.find(ts.isGetAccessorDeclaration);
933
+ const setter = pairs.find(ts.isSetAccessorDeclaration);
934
+ recordAccessor(declared, getter ? identities.declarationIdOf(getter) : null, setter ? identities.declarationIdOf(setter) : null);
935
+ }
936
+ };
937
+ // `recordAccessor` fails closed the moment two DIFFERENT declaration ids
938
+ // implement the same declared member (`existing.getter !== getter`), even
939
+ // when both bodies are textually identical -- two AST nodes are never one
940
+ // id. An unreached platform adapter counts as a second implementer just as
941
+ // readily as a reached one: hono's `WSContext.readyState` getter is
942
+ // implemented by the Node adapter's `websocket.ts` AND, unreached in a
943
+ // Node program, by `adapter/deno/websocket.ts` and
944
+ // `adapter/cloudflare-workers/websocket.ts` -- three distinct getter
945
+ // declarations for one declared member, which conflicts the symbol and
946
+ // sends every implementer's `accessorBodiesOf` to `null`, even the one
947
+ // program that actually runs. Restricting the walk to what `reachable`
948
+ // keeps is the same fix `parameter-bindings.ts`'s census family already
949
+ // took for the identical shape of bug.
950
+ const walk = (node) => {
951
+ if (ts.isObjectLiteralExpression(node))
952
+ visitLiteral(node);
953
+ ts.forEachChild(node, walk);
954
+ };
955
+ for (const file of sourceFiles)
956
+ forEachReachableStatement(reachable, file, walk);
957
+ return {
958
+ accessorBodiesOf: (symbol) => {
959
+ const key = declaredMemberKeyOf(symbol);
960
+ if (conflicted.has(key))
961
+ return null;
962
+ const bodies = accessors.get(key);
963
+ return bodies === undefined ? null : { getter: bodies.getter, setter: bodies.setter };
964
+ },
965
+ implementationReadsReceiver: (symbol) => receivers.has(declaredMemberKeyOf(symbol)),
966
+ declaredMemberImplementedBy: (name) => implemented.get(name) ?? null
967
+ };
968
+ };