@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,191 @@
1
+ import ts from 'typescript';
2
+ import { isValueReference } from './census.js';
3
+ import { valueSymbolAt } from './unresolvable-names.js';
4
+ /** A census that answers for nothing, for a compilation whose hosts state no absent name. */
5
+ export const emptyAbsentGlobalCensus = {
6
+ typeAt: () => null,
7
+ substituteAbsentType: (type) => type,
8
+ absentCount: 0,
9
+ declarations: new Set()
10
+ };
11
+ /**
12
+ * Whether a declaration is ambient -- the same test `producers/bindings.ts`
13
+ * uses to decide a binding is external, and deliberately the same one: this
14
+ * census exists to contradict exactly the declarations that test admits, so
15
+ * asking a different question would leave a gap between what is believed and
16
+ * what can be denied.
17
+ */
18
+ const isAmbient = (node) => {
19
+ if ((ts.getCombinedModifierFlags(node) & ts.ModifierFlags.Ambient) !== 0)
20
+ return true;
21
+ for (let current = node.parent; current; current = current.parent) {
22
+ if (ts.isModuleDeclaration(current) && (ts.getCombinedModifierFlags(current) & ts.ModifierFlags.Ambient) !== 0)
23
+ return true;
24
+ }
25
+ return false;
26
+ };
27
+ /**
28
+ * The ambient VALUE declaration a name introduces, or `null`.
29
+ *
30
+ * A value, not a type: `interface ImageData` and `declare var ImageData` are two
31
+ * declarations of one name, and only the second one is a thing the program can
32
+ * hold. Answering `undefined` for the interface would say the TYPE does not
33
+ * exist, which is a different and false claim -- a program may still receive an
34
+ * `ImageData` from somewhere and only be unable to name the constructor.
35
+ */
36
+ const ambientValueDeclarationOf = (symbol, platform) => {
37
+ for (const declaration of symbol.declarations ?? []) {
38
+ if (isValueDeclaration(declaration)) {
39
+ if (isAmbient(declaration) && platform(declaration))
40
+ return declaration;
41
+ }
42
+ }
43
+ return null;
44
+ };
45
+ /**
46
+ * Whether a declaration introduces a VALUE a program could hold.
47
+ *
48
+ * `declare class XRWebGLBinding { ... }` is one declaration that is BOTH the
49
+ * type and the constructor value, so it belongs here as much as `declare var`
50
+ * does -- `@types/webxr` declares its whole surface that way, and leaving
51
+ * classes out meant a host could not deny a single WebXR name. `interface`
52
+ * alone still does not qualify, for the reason above: an interface names no
53
+ * value.
54
+ */
55
+ const isValueDeclaration = (node) => ts.isVariableDeclaration(node) || ts.isFunctionDeclaration(node) || ts.isClassDeclaration(node);
56
+ /**
57
+ * Whether a declaration is the STANDARD LIBRARY's own.
58
+ *
59
+ * `SourceFile.hasNoDefaultLib` is the checker's own fact rather than a path
60
+ * guess: every `lib.*.d.ts` TypeScript ships opens with
61
+ * `/// <reference no-default-lib="true"/>`, and nothing else sets it. The same
62
+ * test `host-protocols.ts` computes `standardLibrary` from, for the same
63
+ * reason it exists there -- a host's table is keyed by NAME, and a name match
64
+ * alone would let one host's claim silently override a PROGRAM's own
65
+ * `declare var VideoFrame`. A program that declares the name itself is
66
+ * asserting something about its own environment, and denying that is a larger
67
+ * claim than "the platform's standard library declares this and I do not
68
+ * implement it".
69
+ */
70
+ const isStandardLibrary = (node) => node.getSourceFile().hasNoDefaultLib;
71
+ /**
72
+ * The test for "this declaration is the platform's, not the program's".
73
+ *
74
+ * `hasNoDefaultLib` alone is too narrow. `@types/webxr` is a DefinitelyTyped
75
+ * package describing a browser API; it stands in exactly the relation to the
76
+ * program that `lib.dom.d.ts` does -- the program installed it, did not write
77
+ * it, and holds no opinion about whether the platform implements it. Restricted
78
+ * to `hasNoDefaultLib`, a host could deny `HTMLImageElement` and not
79
+ * `XRWebGLLayer`, which is an accident of which file TypeScript happens to ship
80
+ * rather than a distinction about authority. It cost the three.js app 81 unmet
81
+ * obligations for `XRWebGLLayer@1`/`XRWebGLBinding@1` -- names three.js itself
82
+ * guards with `typeof XRWebGLBinding !== 'undefined'`.
83
+ *
84
+ * What the original narrowness protected is still protected: a PROGRAM's own
85
+ * `declare var VideoFrame` is an assertion about its own environment, and
86
+ * denying that would be a larger claim than a host may make. That is why the
87
+ * widening is `isDeclarationFile` AND `isSourceFileFromExternalLibrary` -- the
88
+ * program's own sources, including its own `.d.ts` files, are untouched, and
89
+ * `isSourceFileFromExternalLibrary` is the program's own answer rather than a
90
+ * path guess.
91
+ */
92
+ export const platformDeclarationTest = (program) => (node) => {
93
+ const file = node.getSourceFile();
94
+ return isStandardLibrary(node) || (file.isDeclarationFile && program.isSourceFileFromExternalLibrary(file));
95
+ };
96
+ /**
97
+ * Whether a type's own declaring symbol names an ambient TYPE this census
98
+ * denies.
99
+ *
100
+ * The same two tests `isAmbient`/`isStandardLibrary` already apply to a VALUE
101
+ * declaration, applied here to whichever declaration kind actually introduces
102
+ * a TYPE -- an `interface`, a `class`, or a `type` alias -- because none of
103
+ * those match `ambientValueDeclarationOf`'s `VariableDeclaration`/
104
+ * `FunctionDeclaration` filter, and a TYPE has no single declaration to begin
105
+ * with: `interface HTMLImageElement extends HTMLElement` merges across
106
+ * several files in `lib.dom.d.ts`, so every declaration the symbol carries is
107
+ * checked rather than just the first. Both `type.getSymbol()` (an interface or
108
+ * class reference) and `type.aliasSymbol` (a `type X = ...` reference kept
109
+ * its alias identity) are consulted, because either can be the name a host
110
+ * lists.
111
+ */
112
+ const isAbsentAmbientType = (symbol, absent, platform) => {
113
+ if (!symbol || !absent.has(symbol.getName()))
114
+ return false;
115
+ return (symbol.declarations ?? []).some((declaration) => isAmbient(declaration) && platform(declaration));
116
+ };
117
+ /**
118
+ * The census for one program.
119
+ *
120
+ * Resolve the name's symbol before applying a host fact. A program's own
121
+ * `const ImageData = ...`, or an import bound to that name, stays untouched.
122
+ * Platform declarations and references with no declaration can both receive
123
+ * the host's explicit absence fact. Missing declarations alone never establish
124
+ * absence: the installed host must have listed the name independently.
125
+ */
126
+ export const censusAbsentGlobals = (checker, files, absent, platform, namespacePaths) => {
127
+ if (absent.size === 0)
128
+ return emptyAbsentGlobalCensus;
129
+ const undefinedType = checker.getUndefinedType();
130
+ const answered = new Set();
131
+ const declarations = new Set();
132
+ const undeclaredAbsentNames = new Set();
133
+ const admit = (name, node) => {
134
+ if (!absent.has(name.text))
135
+ return;
136
+ if (!isValueReference(name, namespacePaths))
137
+ return;
138
+ const symbol = valueSymbolAt(checker, name);
139
+ if (!symbol) {
140
+ // This is still the host's explicit absence statement, not a deduction
141
+ // from a missing declaration. Older standard libraries may not declare
142
+ // a newer API at all. A local binding would have a symbol and follows
143
+ // the existing platform-declaration check below.
144
+ answered.add(node);
145
+ undeclaredAbsentNames.add(name.text);
146
+ return;
147
+ }
148
+ const declaration = ambientValueDeclarationOf(symbol, platform);
149
+ if (!declaration)
150
+ return;
151
+ declarations.add(declaration);
152
+ answered.add(node);
153
+ // The DECLARATION too, reached through the reference. The standard
154
+ // library's own files are not among the files walked below, so a lib.dom
155
+ // `declare var VideoFrame` is only ever seen from a program that mentions
156
+ // it -- and a cell whose declaration kept the constructor carrier while
157
+ // every reference answered `undefined` would be two carriers for one cell.
158
+ answered.add(declaration);
159
+ if ((ts.isVariableDeclaration(declaration) || ts.isFunctionDeclaration(declaration)) && declaration.name) {
160
+ answered.add(declaration.name);
161
+ }
162
+ };
163
+ for (const file of files) {
164
+ const visit = (node) => {
165
+ // The declaration itself, so the cell and its readers agree.
166
+ if (isValueDeclaration(node) && node.name && ts.isIdentifier(node.name)) {
167
+ if (isAmbient(node) && platform(node) && absent.has(node.name.text)) {
168
+ declarations.add(node);
169
+ answered.add(node);
170
+ answered.add(node.name);
171
+ }
172
+ }
173
+ else if (ts.isIdentifier(node)) {
174
+ admit(node, node);
175
+ }
176
+ ts.forEachChild(node, visit);
177
+ };
178
+ visit(file);
179
+ }
180
+ // Built once, not per call: `getNeverType()` is the same object every time,
181
+ // and every `substituteAbsentType` call would otherwise ask the checker for
182
+ // it again.
183
+ const neverType = checker.getNeverType();
184
+ const substituteAbsentType = (type) => isAbsentAmbientType(type.getSymbol() ?? type.aliasSymbol, absent, platform) ? neverType : type;
185
+ return {
186
+ typeAt: (node) => (answered.has(node) ? undefinedType : null),
187
+ substituteAbsentType,
188
+ absentCount: declarations.size + undeclaredAbsentNames.size,
189
+ declarations
190
+ };
191
+ };
@@ -0,0 +1,43 @@
1
+ import ts from 'typescript';
2
+ /**
3
+ * Which identifiers in this program are the magic `arguments` binding, and
4
+ * what shape each one's value takes.
5
+ *
6
+ * The question is semantic -- it needs a `ts.TypeChecker`, because the only
7
+ * thing that distinguishes the magic binding from an ordinary variable
8
+ * someone named `arguments` is that its symbol declares nothing anywhere
9
+ * (`isArgumentsObjectIdentifier`, `producers/bindings.ts`). The layer that
10
+ * has to ask it is not: `references.ts`'s `citeExpressionResult` is a pure
11
+ * predictor over syntax and identities, and threading a checker into it would
12
+ * put one somewhere the architecture gate would rather it were not.
13
+ *
14
+ * So the checker answers once, here, and hands the citer a lookup -- exactly
15
+ * the shape `absent-globals.ts` already uses for its own
16
+ * checker-needs-to-answer-a-syntactic-layer question, and built beside it in
17
+ * `frontend.ts` for the same reason.
18
+ */
19
+ export interface ArgumentsObjectCensus {
20
+ /** All references to each lexical arguments frame, including unsupported frames. */
21
+ readonly usesByOwner: ReadonlyMap<ts.SignatureDeclaration, readonly ts.Identifier[]>;
22
+ /**
23
+ * The phantom rest parameter's ordinal for an `arguments` identifier whose
24
+ * value this compiler can build, and `null` for every other node --
25
+ * including an `arguments` inside a function the checker published no
26
+ * phantom for, which is a shape nothing here has confirmed the meaning of
27
+ * and must keep failing closed rather than be guessed at.
28
+ */
29
+ readonly phantomOrdinalOf: (node: ts.Node) => number | null;
30
+ /** How many reference sites this census recognized, for measurement. */
31
+ readonly count: number;
32
+ }
33
+ export declare const emptyArgumentsObjectCensus: ArgumentsObjectCensus;
34
+ /**
35
+ * One walk, one checker question per candidate identifier.
36
+ *
37
+ * Only identifiers spelled `arguments` are asked about at all: the predicate's
38
+ * own first test is that spelling, so every other node would cost a symbol
39
+ * resolution to answer `null`, and this walk runs over every source file of a
40
+ * program the size of three.js.
41
+ */
42
+ export declare const censusArgumentsObjects: (checker: ts.TypeChecker, files: readonly ts.SourceFile[]) => ArgumentsObjectCensus;
43
+ export declare const argumentsObjectUsesAt: (checker: ts.TypeChecker, body: ts.SignatureDeclaration) => readonly ts.Identifier[] | undefined;
@@ -0,0 +1,60 @@
1
+ import ts from 'typescript';
2
+ import { enclosingArgumentsFunction, implicitArgumentsSlotOf, isArgumentsObjectIdentifier } from './implicit-arguments.js';
3
+ export const emptyArgumentsObjectCensus = { phantomOrdinalOf: () => null, usesByOwner: new Map(), count: 0 };
4
+ /**
5
+ * One walk, one checker question per candidate identifier.
6
+ *
7
+ * Only identifiers spelled `arguments` are asked about at all: the predicate's
8
+ * own first test is that spelling, so every other node would cost a symbol
9
+ * resolution to answer `null`, and this walk runs over every source file of a
10
+ * program the size of three.js.
11
+ */
12
+ export const censusArgumentsObjects = (checker, files) => {
13
+ const ordinals = new Map();
14
+ const usesByOwner = new Map();
15
+ const ownerOrdinals = new Map();
16
+ const visit = (node) => {
17
+ if (isArgumentsObjectIdentifier(node, checker)) {
18
+ const owner = enclosingArgumentsFunction(node);
19
+ if (owner) {
20
+ let ordinal = ownerOrdinals.get(owner);
21
+ if (ordinal === undefined) {
22
+ const signature = checker.getSignatureFromDeclaration(owner);
23
+ ordinal = signature ? (implicitArgumentsSlotOf(signature)?.ordinal ?? null) : null;
24
+ ownerOrdinals.set(owner, ordinal);
25
+ }
26
+ const uses = usesByOwner.get(owner) ?? [];
27
+ uses.push(node);
28
+ usesByOwner.set(owner, uses);
29
+ if (ordinal !== null)
30
+ ordinals.set(node, ordinal);
31
+ }
32
+ }
33
+ ts.forEachChild(node, visit);
34
+ };
35
+ for (const file of files)
36
+ visit(file);
37
+ return { phantomOrdinalOf: (node) => ordinals.get(node) ?? null, usesByOwner, count: ordinals.size };
38
+ };
39
+ /**
40
+ * Whether a callable body reads its own `arguments` object, memoized per file
41
+ * for the life of the checker.
42
+ *
43
+ * `sourceInvocationFrame` cannot publish a complete frame without this fact --
44
+ * a body that reads `arguments[0]` reaches an actual argument through a cell no
45
+ * parameter names -- and it takes the lookup as a parameter because
46
+ * `callable-reach.ts` keys a memo on the function's identity. The census
47
+ * itself depends on nothing but the file, so a consumer that has no such memo
48
+ * should not have to build a fourth private cache to ask; it asks here.
49
+ */
50
+ const censusesByChecker = new WeakMap();
51
+ export const argumentsObjectUsesAt = (checker, body) => {
52
+ let byFile = censusesByChecker.get(checker);
53
+ if (!byFile)
54
+ censusesByChecker.set(checker, (byFile = new Map()));
55
+ const file = body.getSourceFile();
56
+ let census = byFile.get(file);
57
+ if (!census)
58
+ byFile.set(file, (census = censusArgumentsObjects(checker, [file])));
59
+ return census.usesByOwner.get(body);
60
+ };
@@ -0,0 +1,28 @@
1
+ import ts from 'typescript';
2
+ /**
3
+ * Whether a named read through a type assertion may land on a union arm that
4
+ * has no such member at all.
5
+ *
6
+ * `typeof (options?.body as ReadableStream)?.getReader` in `@hono/node-server`
7
+ * reads off a `string | Buffer | ReadableStream | ...` value. The assertion
8
+ * changes the checker's type and never the value, and the property producer
9
+ * already dispatches the read on the value's real arms; on the string arm
10
+ * 6.2.5.5 GetV answers `undefined`. The checker's type for the read is the
11
+ * asserted arm's bare method, which cannot hold that `undefined`, so the arm
12
+ * had nowhere to put it and rendered a TypeError -- for a program that only
13
+ * asked whether the member was there.
14
+ *
15
+ * One predicate for the two places that publish the read's type: the property
16
+ * producer (the `[[Get]]` itself) and the local-binding census (a `const`
17
+ * initialized by the read, whose checker type is the same bare method).
18
+ *
19
+ * A callee is excluded: calling the `undefined` does throw, and the callee's
20
+ * type is the resolved signature. So are an assertion to `any`/`unknown`, a
21
+ * receiver that is not a union (a genuinely unknown value keeps the
22
+ * assertion's checked unbox), and an arm with a string index signature, which
23
+ * answers its element type.
24
+ *
25
+ * `receiverTypeOf` is the caller's own reading of the asserted operand, so
26
+ * each caller keeps the receiver authority it already uses.
27
+ */
28
+ export declare const assertedReceiverArmMayLackMember: (checker: ts.TypeChecker, node: ts.Expression, receiverTypeOf: (receiver: ts.Expression) => ts.Type) => boolean;
@@ -0,0 +1,61 @@
1
+ import ts from 'typescript';
2
+ import { enclosingCallIfCallee } from './producers/erasure.js';
3
+ /**
4
+ * Whether a named read through a type assertion may land on a union arm that
5
+ * has no such member at all.
6
+ *
7
+ * `typeof (options?.body as ReadableStream)?.getReader` in `@hono/node-server`
8
+ * reads off a `string | Buffer | ReadableStream | ...` value. The assertion
9
+ * changes the checker's type and never the value, and the property producer
10
+ * already dispatches the read on the value's real arms; on the string arm
11
+ * 6.2.5.5 GetV answers `undefined`. The checker's type for the read is the
12
+ * asserted arm's bare method, which cannot hold that `undefined`, so the arm
13
+ * had nowhere to put it and rendered a TypeError -- for a program that only
14
+ * asked whether the member was there.
15
+ *
16
+ * One predicate for the two places that publish the read's type: the property
17
+ * producer (the `[[Get]]` itself) and the local-binding census (a `const`
18
+ * initialized by the read, whose checker type is the same bare method).
19
+ *
20
+ * A callee is excluded: calling the `undefined` does throw, and the callee's
21
+ * type is the resolved signature. So are an assertion to `any`/`unknown`, a
22
+ * receiver that is not a union (a genuinely unknown value keeps the
23
+ * assertion's checked unbox), and an arm with a string index signature, which
24
+ * answers its element type.
25
+ *
26
+ * `receiverTypeOf` is the caller's own reading of the asserted operand, so
27
+ * each caller keeps the receiver authority it already uses.
28
+ */
29
+ export const assertedReceiverArmMayLackMember = (checker, node, receiverTypeOf) => {
30
+ if (!ts.isPropertyAccessExpression(node) || enclosingCallIfCallee(node) !== null)
31
+ return false;
32
+ let receiver = node.expression;
33
+ let asserted = false;
34
+ while (ts.isNonNullExpression(receiver) ||
35
+ ts.isParenthesizedExpression(receiver) ||
36
+ ts.isAsExpression(receiver) ||
37
+ ts.isTypeAssertionExpression(receiver)) {
38
+ asserted ||= ts.isAsExpression(receiver) || ts.isTypeAssertionExpression(receiver);
39
+ receiver = receiver.expression;
40
+ }
41
+ if (!asserted)
42
+ return false;
43
+ // An `as any` claims no member, so it has no asserted arm to be wrong about.
44
+ if ((checker.getTypeAtLocation(node.expression).flags & (ts.TypeFlags.Any | ts.TypeFlags.Unknown)) !== 0)
45
+ return false;
46
+ const physical = receiverTypeOf(receiver);
47
+ if (!physical.isUnion())
48
+ return false;
49
+ const name = node.name.text;
50
+ const absentFlags = ts.TypeFlags.Undefined | ts.TypeFlags.Null | ts.TypeFlags.Void | ts.TypeFlags.Never;
51
+ return physical.types.some((arm) => {
52
+ if ((arm.flags & absentFlags) !== 0)
53
+ return false;
54
+ const apparent = checker.getApparentType(arm);
55
+ // Only a STRING index signature answers a dotted name: `String`'s own
56
+ // numeric one never matches an identifier.
57
+ if (checker.getIndexInfoOfType(apparent, ts.IndexKind.String) !== undefined)
58
+ return false;
59
+ return checker.getPropertyOfType(apparent, name) === undefined;
60
+ });
61
+ };
@@ -0,0 +1,70 @@
1
+ import ts from 'typescript';
2
+ /** Only the colon form with a noncomputed __proto__ key sets an object's prototype. */
3
+ export declare const isObjectLiteralPrototypeSetter: (node: ts.Node) => boolean;
4
+ /** Literal syntax denotes a pattern only in an assignment target position. */
5
+ export declare const isAssignmentPattern: (node: ts.Node) => boolean;
6
+ export type ObjectAssignmentElement = ts.PropertyAssignment | ts.ShorthandPropertyAssignment;
7
+ export declare const isObjectAssignmentElement: (node: ts.Node) => node is ObjectAssignmentElement;
8
+ /** A target reference is evaluated, but its old value is never read. */
9
+ export declare const objectAssignmentElementOfTarget: (node: ts.Node) => ObjectAssignmentElement | null;
10
+ /** Nested patterns and loop-head patterns have separate source protocols. */
11
+ export declare const objectAssignmentSource: (pattern: ts.ObjectLiteralExpression) => ts.Expression | null;
12
+ /** The array pattern's own top-level source -- the array-literal twin of `objectAssignmentSource`. */
13
+ export declare const arrayAssignmentSource: (pattern: ts.ArrayLiteralExpression) => ts.Expression | null;
14
+ /**
15
+ * Whether `node` is a direct element of an array-literal assignment pattern:
16
+ * a bare target, a defaulted target's whole `=` expression, a rest target's
17
+ * whole `...` spread, an elision, or a nested pattern. Used to keep these
18
+ * wrapper shapes out of their ordinary census families (`=` is otherwise
19
+ * `computation`, `...` is otherwise `protocol`) -- the pattern's own
20
+ * candidate is the sole producer of whatever operations they key.
21
+ */
22
+ export declare const isArrayAssignmentPatternElement: (node: ts.Node) => boolean;
23
+ export interface ArrayAssignmentTarget {
24
+ readonly pattern: ts.ArrayLiteralExpression;
25
+ readonly position: number;
26
+ /**
27
+ * Whichever node the array pattern's own contribution keys its
28
+ * extraction/default operations on: the target itself for a bare element,
29
+ * the enclosing `=`/`...` node otherwise.
30
+ */
31
+ readonly keyNode: ts.Expression;
32
+ readonly defaulted: boolean;
33
+ }
34
+ /**
35
+ * The array-pattern position a write target belongs to, whether written bare
36
+ * (`[a] = x`), defaulted (`[a = 1] = x`) or as the rest target (`[...a] = x`).
37
+ *
38
+ * A write candidate recomputes `keyNode` and `defaulted` rather than looking
39
+ * them up, the same predictive-citation discipline `citeBoundElementValue`
40
+ * uses for a binding pattern's element: the pattern's own contribution mints
41
+ * its extraction/default operations from exactly these two facts, so a
42
+ * second, independent computation of them here is sound only because both
43
+ * sides derive them from the same syntax rather than one publishing and the
44
+ * other guessing.
45
+ */
46
+ export declare const arrayAssignmentTargetOf: (node: ts.Node) => ArrayAssignmentTarget | null;
47
+ /**
48
+ * A "simple" array assignment write target -- a name or a property reference,
49
+ * never a nested pattern (which gets its own recursive `destructuring`
50
+ * candidate the same way a nested binding pattern does).
51
+ */
52
+ export declare const arrayAssignmentWriteTargetOf: (node: ts.Node) => ArrayAssignmentTarget | null;
53
+ /**
54
+ * The literal a nested array-pattern's OWN elements are drawn from -- either
55
+ * the top-level source (`arrayAssignmentSource`), or, when `pattern` is
56
+ * itself one element of an ENCLOSING pattern (`[a, [b]] = [1, [2]]`), that
57
+ * enclosing pattern's own literal element at the same position, recursively.
58
+ * Stops the moment either the outer source or the recovered element is not
59
+ * itself a literal -- there is no sound way to index INTO an arbitrary
60
+ * expression's type without `checker.createArrayType`, which is
61
+ * checker-internal (`structural-array-element.ts`'s header documents the
62
+ * identical wall for `never[]`).
63
+ *
64
+ * Shared between `local-bindings.ts` (recovering a bare element's evidence
65
+ * expression) and `structural-array-element.ts` (recovering a REST target's
66
+ * source, which needs the pattern's source as a whole rather than one
67
+ * position of it) -- both ask the same "what literal is this pattern reading
68
+ * from" question and must never derive two different answers for it.
69
+ */
70
+ export declare const arrayAssignmentPatternSourceExpression: (pattern: ts.ArrayLiteralExpression) => ts.Expression | null;
@@ -0,0 +1,147 @@
1
+ import ts from 'typescript';
2
+ /** Only the colon form with a noncomputed __proto__ key sets an object's prototype. */
3
+ export const isObjectLiteralPrototypeSetter = (node) => ts.isPropertyAssignment(node) && (ts.isIdentifier(node.name) || ts.isStringLiteralLike(node.name)) && node.name.text === '__proto__';
4
+ /** Literal syntax denotes a pattern only in an assignment target position. */
5
+ export const isAssignmentPattern = (node) => {
6
+ let current = node;
7
+ let parent = node.parent;
8
+ while (parent) {
9
+ if (ts.isBinaryExpression(parent) && parent.operatorToken.kind === ts.SyntaxKind.EqualsToken && parent.left === current)
10
+ return true;
11
+ if (ts.isForOfStatement(parent) && parent.initializer === current)
12
+ return true;
13
+ if (ts.isPropertyAssignment(parent) ||
14
+ ts.isShorthandPropertyAssignment(parent) ||
15
+ ts.isObjectLiteralExpression(parent) ||
16
+ ts.isArrayLiteralExpression(parent) ||
17
+ ts.isSpreadAssignment(parent) ||
18
+ ts.isSpreadElement(parent)) {
19
+ current = parent;
20
+ parent = parent.parent;
21
+ continue;
22
+ }
23
+ return false;
24
+ }
25
+ return false;
26
+ };
27
+ export const isObjectAssignmentElement = (node) => (ts.isPropertyAssignment(node) || ts.isShorthandPropertyAssignment(node)) &&
28
+ node.parent !== undefined &&
29
+ ts.isObjectLiteralExpression(node.parent) &&
30
+ isAssignmentPattern(node.parent);
31
+ /** A target reference is evaluated, but its old value is never read. */
32
+ export const objectAssignmentElementOfTarget = (node) => {
33
+ let current = node;
34
+ while (current.parent && ts.isParenthesizedExpression(current.parent))
35
+ current = current.parent;
36
+ const parent = current.parent;
37
+ if (!parent || !isObjectAssignmentElement(parent))
38
+ return null;
39
+ return (ts.isPropertyAssignment(parent) ? parent.initializer : parent.name) === current ? parent : null;
40
+ };
41
+ /** Nested patterns and loop-head patterns have separate source protocols. */
42
+ export const objectAssignmentSource = (pattern) => {
43
+ const parent = pattern.parent;
44
+ return ts.isBinaryExpression(parent) && parent.operatorToken.kind === ts.SyntaxKind.EqualsToken && parent.left === pattern
45
+ ? parent.right
46
+ : null;
47
+ };
48
+ /** The array pattern's own top-level source -- the array-literal twin of `objectAssignmentSource`. */
49
+ export const arrayAssignmentSource = (pattern) => {
50
+ const parent = pattern.parent;
51
+ return ts.isBinaryExpression(parent) && parent.operatorToken.kind === ts.SyntaxKind.EqualsToken && parent.left === pattern
52
+ ? parent.right
53
+ : null;
54
+ };
55
+ /**
56
+ * Whether `node` is a direct element of an array-literal assignment pattern:
57
+ * a bare target, a defaulted target's whole `=` expression, a rest target's
58
+ * whole `...` spread, an elision, or a nested pattern. Used to keep these
59
+ * wrapper shapes out of their ordinary census families (`=` is otherwise
60
+ * `computation`, `...` is otherwise `protocol`) -- the pattern's own
61
+ * candidate is the sole producer of whatever operations they key.
62
+ */
63
+ export const isArrayAssignmentPatternElement = (node) => {
64
+ const parent = node.parent;
65
+ return (parent !== undefined &&
66
+ ts.isArrayLiteralExpression(parent) &&
67
+ isAssignmentPattern(parent) &&
68
+ parent.elements.includes(node));
69
+ };
70
+ /**
71
+ * The array-pattern position a write target belongs to, whether written bare
72
+ * (`[a] = x`), defaulted (`[a = 1] = x`) or as the rest target (`[...a] = x`).
73
+ *
74
+ * A write candidate recomputes `keyNode` and `defaulted` rather than looking
75
+ * them up, the same predictive-citation discipline `citeBoundElementValue`
76
+ * uses for a binding pattern's element: the pattern's own contribution mints
77
+ * its extraction/default operations from exactly these two facts, so a
78
+ * second, independent computation of them here is sound only because both
79
+ * sides derive them from the same syntax rather than one publishing and the
80
+ * other guessing.
81
+ */
82
+ export const arrayAssignmentTargetOf = (node) => {
83
+ const asElement = (candidate) => {
84
+ const parent = candidate.parent;
85
+ if (!parent || !ts.isArrayLiteralExpression(parent) || !isAssignmentPattern(parent))
86
+ return null;
87
+ const position = parent.elements.indexOf(candidate);
88
+ return position < 0 ? null : { pattern: parent, position };
89
+ };
90
+ if (!ts.isExpression(node))
91
+ return null;
92
+ const own = asElement(node);
93
+ if (own)
94
+ return { pattern: own.pattern, position: own.position, keyNode: node, defaulted: false };
95
+ const parent = node.parent;
96
+ if (parent && ts.isBinaryExpression(parent) && parent.operatorToken.kind === ts.SyntaxKind.EqualsToken && parent.left === node) {
97
+ const wrapper = asElement(parent);
98
+ if (wrapper)
99
+ return { pattern: wrapper.pattern, position: wrapper.position, keyNode: parent, defaulted: true };
100
+ }
101
+ if (parent && ts.isSpreadElement(parent) && parent.expression === node) {
102
+ const wrapper = asElement(parent);
103
+ if (wrapper)
104
+ return { pattern: wrapper.pattern, position: wrapper.position, keyNode: parent, defaulted: false };
105
+ }
106
+ return null;
107
+ };
108
+ /**
109
+ * A "simple" array assignment write target -- a name or a property reference,
110
+ * never a nested pattern (which gets its own recursive `destructuring`
111
+ * candidate the same way a nested binding pattern does).
112
+ */
113
+ export const arrayAssignmentWriteTargetOf = (node) => {
114
+ if (!ts.isIdentifier(node) && !ts.isPropertyAccessExpression(node) && !ts.isElementAccessExpression(node))
115
+ return null;
116
+ return arrayAssignmentTargetOf(node);
117
+ };
118
+ /**
119
+ * The literal a nested array-pattern's OWN elements are drawn from -- either
120
+ * the top-level source (`arrayAssignmentSource`), or, when `pattern` is
121
+ * itself one element of an ENCLOSING pattern (`[a, [b]] = [1, [2]]`), that
122
+ * enclosing pattern's own literal element at the same position, recursively.
123
+ * Stops the moment either the outer source or the recovered element is not
124
+ * itself a literal -- there is no sound way to index INTO an arbitrary
125
+ * expression's type without `checker.createArrayType`, which is
126
+ * checker-internal (`structural-array-element.ts`'s header documents the
127
+ * identical wall for `never[]`).
128
+ *
129
+ * Shared between `local-bindings.ts` (recovering a bare element's evidence
130
+ * expression) and `structural-array-element.ts` (recovering a REST target's
131
+ * source, which needs the pattern's source as a whole rather than one
132
+ * position of it) -- both ask the same "what literal is this pattern reading
133
+ * from" question and must never derive two different answers for it.
134
+ */
135
+ export const arrayAssignmentPatternSourceExpression = (pattern) => {
136
+ const direct = arrayAssignmentSource(pattern);
137
+ if (direct)
138
+ return direct;
139
+ const nested = arrayAssignmentTargetOf(pattern);
140
+ if (!nested || ts.isSpreadElement(nested.keyNode))
141
+ return null;
142
+ const outerSource = arrayAssignmentPatternSourceExpression(nested.pattern);
143
+ if (!outerSource || !ts.isArrayLiteralExpression(outerSource))
144
+ return null;
145
+ const element = outerSource.elements[nested.position];
146
+ return element && !ts.isSpreadElement(element) && !ts.isOmittedExpression(element) ? element : null;
147
+ };
@@ -0,0 +1,8 @@
1
+ import ts from 'typescript';
2
+ export type BagAbsence = 'null' | 'undefined';
3
+ /** Absence belongs to a binding, not to the bag object it may later hold.
4
+ * Follow the same storage aliases as bag inference, preserving initial and
5
+ * assigned nullish values across returned aliases. This deliberately retains
6
+ * absence when the checker cannot prove a read excludes it.
7
+ */
8
+ export declare const createBagAbsenceResolver: (checker: ts.TypeChecker, ownerOf: (expression: ts.Expression) => ts.Node | null, calleeOf: (expression: ts.Expression) => ts.Node | null, writesTo: ReadonlyMap<ts.Node, readonly ts.Expression[]>, returnsOf: ReadonlyMap<ts.Node, readonly (ts.Expression | null)[]>) => ((node: ts.Node) => readonly BagAbsence[]);
@@ -0,0 +1,42 @@
1
+ import ts from 'typescript';
2
+ /** Absence belongs to a binding, not to the bag object it may later hold.
3
+ * Follow the same storage aliases as bag inference, preserving initial and
4
+ * assigned nullish values across returned aliases. This deliberately retains
5
+ * absence when the checker cannot prove a read excludes it.
6
+ */
7
+ export const createBagAbsenceResolver = (checker, ownerOf, calleeOf, writesTo, returnsOf) => {
8
+ const visit = (node, seen) => {
9
+ if (seen.has(node))
10
+ return [];
11
+ const next = new Set(seen).add(node);
12
+ const join = (nodes) => [
13
+ ...new Set(nodes.flatMap((value) => (value ? visit(value, next) : ['undefined'])))
14
+ ];
15
+ if (ts.isVariableDeclaration(node) || ts.isPropertyDeclaration(node)) {
16
+ return join([node.initializer ?? null, ...(writesTo.get(node) ?? [])]);
17
+ }
18
+ if (ts.isParenthesizedExpression(node) || ts.isAsExpression(node) || ts.isTypeAssertionExpression(node) || ts.isNonNullExpression(node))
19
+ return visit(node.expression, next);
20
+ if (ts.isCallExpression(node) || ts.isNewExpression(node)) {
21
+ const callee = calleeOf(node.expression);
22
+ return callee ? join(returnsOf.get(callee) ?? []) : [];
23
+ }
24
+ if (ts.isFunctionDeclaration(node) || ts.isFunctionExpression(node) || ts.isArrowFunction(node) || ts.isMethodDeclaration(node))
25
+ return join(returnsOf.get(node) ?? []);
26
+ const type = checker.getTypeAtLocation(node);
27
+ const arms = type.isUnion() ? type.types : [type];
28
+ const explicit = arms.flatMap((arm) => (arm.flags & ts.TypeFlags.Null) !== 0 ? ['null'] : (arm.flags & ts.TypeFlags.Undefined) !== 0 ? ['undefined'] : []);
29
+ if (ts.isIdentifier(node) || ts.isPropertyAccessExpression(node)) {
30
+ const owner = ownerOf(node);
31
+ if (owner) {
32
+ const inferred = visit(owner, next);
33
+ // A checker flow narrowing can exclude absence; an erased type cannot.
34
+ if ((type.flags & (ts.TypeFlags.Any | ts.TypeFlags.Unknown)) === 0)
35
+ return inferred.filter((absence) => explicit.includes(absence));
36
+ return [...new Set([...explicit, ...inferred])];
37
+ }
38
+ }
39
+ return explicit;
40
+ };
41
+ return (node) => visit(node, new Set());
42
+ };