@scriptc/compiler 0.2.3 → 0.2.5

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 (1124) hide show
  1. package/ambient/scriptc-node-fallback.d.ts +915 -215
  2. package/ambient/scriptc-overrides.d.ts +5 -1
  3. package/ambient/scriptc.d.ts +22 -2
  4. package/dist/backend/build-cache.d.ts +4 -0
  5. package/dist/backend/build-cache.js +16 -2
  6. package/dist/backend/build-cache.js.map +1 -1
  7. package/dist/backend/cycle-analysis.js +17 -5
  8. package/dist/backend/cycle-analysis.js.map +1 -1
  9. package/dist/backend/cycle-analysis.test.js +50 -11
  10. package/dist/backend/cycle-analysis.test.js.map +1 -1
  11. package/dist/backend/debug-symbols.js.map +1 -1
  12. package/dist/backend/executable-features.js +2 -1
  13. package/dist/backend/executable-features.js.map +1 -1
  14. package/dist/backend/external-c.d.ts +13 -6
  15. package/dist/backend/external-c.js +15 -3
  16. package/dist/backend/external-c.js.map +1 -1
  17. package/dist/backend/ffi-callbacks.js +6 -9
  18. package/dist/backend/ffi-callbacks.js.map +1 -1
  19. package/dist/backend/library-identity-markers.js.map +1 -1
  20. package/dist/backend/library-pack.d.ts +1 -1
  21. package/dist/backend/library-pack.js +81 -24
  22. package/dist/backend/library-pack.js.map +1 -1
  23. package/dist/backend/link-plan-core.js +9 -2
  24. package/dist/backend/link-plan-core.js.map +1 -1
  25. package/dist/backend/link-plan.d.ts +1 -1
  26. package/dist/backend/link-plan.js +4 -5
  27. package/dist/backend/link-plan.js.map +1 -1
  28. package/dist/backend/linker.d.ts +1 -1
  29. package/dist/backend/linker.js +42 -23
  30. package/dist/backend/linker.js.map +1 -1
  31. package/dist/backend/literals.js +5 -4
  32. package/dist/backend/literals.js.map +1 -1
  33. package/dist/backend/literals.test.js +30 -5
  34. package/dist/backend/literals.test.js.map +1 -1
  35. package/dist/backend/llvm/blocks.test.js +5 -2
  36. package/dist/backend/llvm/blocks.test.js.map +1 -1
  37. package/dist/backend/llvm/borrowed-inputs.d.ts +15 -0
  38. package/dist/backend/llvm/borrowed-inputs.js +28 -0
  39. package/dist/backend/llvm/borrowed-inputs.js.map +1 -0
  40. package/dist/backend/llvm/borrowed-receivers.js +43 -19
  41. package/dist/backend/llvm/borrowed-receivers.js.map +1 -1
  42. package/dist/backend/llvm/byte-numbers.d.ts +10 -0
  43. package/dist/backend/llvm/byte-numbers.js +240 -0
  44. package/dist/backend/llvm/byte-numbers.js.map +1 -0
  45. package/dist/backend/llvm/bytes-bounds.d.ts +9 -0
  46. package/dist/backend/llvm/bytes-bounds.js +240 -0
  47. package/dist/backend/llvm/bytes-bounds.js.map +1 -0
  48. package/dist/backend/llvm/call-lifetimes.d.ts +10 -0
  49. package/dist/backend/llvm/call-lifetimes.js +83 -20
  50. package/dist/backend/llvm/call-lifetimes.js.map +1 -1
  51. package/dist/backend/llvm/call-lifetimes.test.js +203 -18
  52. package/dist/backend/llvm/call-lifetimes.test.js.map +1 -1
  53. package/dist/backend/llvm/checked-value-lifetimes.d.ts +13 -0
  54. package/dist/backend/llvm/checked-value-lifetimes.js +45 -0
  55. package/dist/backend/llvm/checked-value-lifetimes.js.map +1 -0
  56. package/dist/backend/llvm/classes.js +16 -12
  57. package/dist/backend/llvm/classes.js.map +1 -1
  58. package/dist/backend/llvm/common.js +4 -1
  59. package/dist/backend/llvm/common.js.map +1 -1
  60. package/dist/backend/llvm/counted-loops.d.ts +6 -0
  61. package/dist/backend/llvm/counted-loops.js +35 -0
  62. package/dist/backend/llvm/counted-loops.js.map +1 -0
  63. package/dist/backend/llvm/debug-info.js +33 -13
  64. package/dist/backend/llvm/debug-info.js.map +1 -1
  65. package/dist/backend/llvm/debug-info.test.js +28 -6
  66. package/dist/backend/llvm/debug-info.test.js.map +1 -1
  67. package/dist/backend/llvm/dyn.js +68 -22
  68. package/dist/backend/llvm/dyn.js.map +1 -1
  69. package/dist/backend/llvm/emitter.d.ts +34 -12
  70. package/dist/backend/llvm/emitter.js +357 -124
  71. package/dist/backend/llvm/emitter.js.map +1 -1
  72. package/dist/backend/llvm/emitter.test.js +237 -46
  73. package/dist/backend/llvm/emitter.test.js.map +1 -1
  74. package/dist/backend/llvm/expr-async.js +28 -8
  75. package/dist/backend/llvm/expr-async.js.map +1 -1
  76. package/dist/backend/llvm/expr-bytes.d.ts +4 -4
  77. package/dist/backend/llvm/expr-bytes.js +78 -36
  78. package/dist/backend/llvm/expr-bytes.js.map +1 -1
  79. package/dist/backend/llvm/expr-callbacks.js +10 -4
  80. package/dist/backend/llvm/expr-callbacks.js.map +1 -1
  81. package/dist/backend/llvm/expr-calls.js +40 -21
  82. package/dist/backend/llvm/expr-calls.js.map +1 -1
  83. package/dist/backend/llvm/expr-containers.d.ts +4 -1
  84. package/dist/backend/llvm/expr-containers.js +157 -76
  85. package/dist/backend/llvm/expr-containers.js.map +1 -1
  86. package/dist/backend/llvm/expr-context.d.ts +11 -0
  87. package/dist/backend/llvm/expr-control.js +27 -8
  88. package/dist/backend/llvm/expr-control.js.map +1 -1
  89. package/dist/backend/llvm/expr-dispatch.js +3 -1
  90. package/dist/backend/llvm/expr-dispatch.js.map +1 -1
  91. package/dist/backend/llvm/expr-dynamic.js +50 -33
  92. package/dist/backend/llvm/expr-dynamic.js.map +1 -1
  93. package/dist/backend/llvm/expr-island.js +26 -6
  94. package/dist/backend/llvm/expr-island.js.map +1 -1
  95. package/dist/backend/llvm/expr-primitives.js +139 -37
  96. package/dist/backend/llvm/expr-primitives.js.map +1 -1
  97. package/dist/backend/llvm/expr-primitives.test.js +43 -1
  98. package/dist/backend/llvm/expr-primitives.test.js.map +1 -1
  99. package/dist/backend/llvm/expr-records.js +16 -9
  100. package/dist/backend/llvm/expr-records.js.map +1 -1
  101. package/dist/backend/llvm/expr-stream-bridges.js +44 -26
  102. package/dist/backend/llvm/expr-stream-bridges.js.map +1 -1
  103. package/dist/backend/llvm/expr-stream-bridges.test.js +51 -14
  104. package/dist/backend/llvm/expr-stream-bridges.test.js.map +1 -1
  105. package/dist/backend/llvm/expr-stream-callbacks.js +34 -14
  106. package/dist/backend/llvm/expr-stream-callbacks.js.map +1 -1
  107. package/dist/backend/llvm/integer-values.d.ts +10 -0
  108. package/dist/backend/llvm/integer-values.js +52 -0
  109. package/dist/backend/llvm/integer-values.js.map +1 -0
  110. package/dist/backend/llvm/integer-views.d.ts +7 -0
  111. package/dist/backend/llvm/integer-views.js +83 -0
  112. package/dist/backend/llvm/integer-views.js.map +1 -0
  113. package/dist/backend/llvm/integer-views.test.d.ts +1 -0
  114. package/dist/backend/llvm/integer-views.test.js +69 -0
  115. package/dist/backend/llvm/integer-views.test.js.map +1 -0
  116. package/dist/backend/llvm/lib-abi.js +13 -4
  117. package/dist/backend/llvm/lib-abi.js.map +1 -1
  118. package/dist/backend/llvm/lib-connect.js +7 -1
  119. package/dist/backend/llvm/lib-connect.js.map +1 -1
  120. package/dist/backend/llvm/lib-datagram.js +35 -10
  121. package/dist/backend/llvm/lib-datagram.js.map +1 -1
  122. package/dist/backend/llvm/lib-dispatch.js +36 -15
  123. package/dist/backend/llvm/lib-dispatch.js.map +1 -1
  124. package/dist/backend/llvm/lib-filesystem.js +38 -23
  125. package/dist/backend/llvm/lib-filesystem.js.map +1 -1
  126. package/dist/backend/llvm/lib-http2.js +60 -15
  127. package/dist/backend/llvm/lib-http2.js.map +1 -1
  128. package/dist/backend/llvm/lib-lookup.js +12 -5
  129. package/dist/backend/llvm/lib-lookup.js.map +1 -1
  130. package/dist/backend/llvm/lib-network.js +97 -31
  131. package/dist/backend/llvm/lib-network.js.map +1 -1
  132. package/dist/backend/llvm/lib-process.js +57 -14
  133. package/dist/backend/llvm/lib-process.js.map +1 -1
  134. package/dist/backend/llvm/lib-shared.js +107 -31
  135. package/dist/backend/llvm/lib-shared.js.map +1 -1
  136. package/dist/backend/llvm/lib-stream.js +33 -14
  137. package/dist/backend/llvm/lib-stream.js.map +1 -1
  138. package/dist/backend/llvm/lib-test.js +21 -7
  139. package/dist/backend/llvm/lib-test.js.map +1 -1
  140. package/dist/backend/llvm/lib-tls.js +69 -20
  141. package/dist/backend/llvm/lib-tls.js.map +1 -1
  142. package/dist/backend/llvm/local-array-reads.d.ts +3 -4
  143. package/dist/backend/llvm/local-array-reads.js +100 -121
  144. package/dist/backend/llvm/local-array-reads.js.map +1 -1
  145. package/dist/backend/llvm/local-array-reads.test.js +379 -71
  146. package/dist/backend/llvm/local-array-reads.test.js.map +1 -1
  147. package/dist/backend/llvm/local-union-storage.d.ts +25 -0
  148. package/dist/backend/llvm/local-union-storage.js +109 -0
  149. package/dist/backend/llvm/local-union-storage.js.map +1 -0
  150. package/dist/backend/llvm/local-union-storage.test.d.ts +1 -0
  151. package/dist/backend/llvm/local-union-storage.test.js +210 -0
  152. package/dist/backend/llvm/local-union-storage.test.js.map +1 -0
  153. package/dist/backend/llvm/map-read-lifetimes.d.ts +6 -2
  154. package/dist/backend/llvm/map-read-lifetimes.js +46 -16
  155. package/dist/backend/llvm/map-read-lifetimes.js.map +1 -1
  156. package/dist/backend/llvm/map-read-lifetimes.test.js +93 -17
  157. package/dist/backend/llvm/map-read-lifetimes.test.js.map +1 -1
  158. package/dist/backend/llvm/reference-effects.d.ts +23 -0
  159. package/dist/backend/llvm/reference-effects.js +179 -0
  160. package/dist/backend/llvm/reference-effects.js.map +1 -0
  161. package/dist/backend/llvm/reference-effects.test.d.ts +1 -0
  162. package/dist/backend/llvm/reference-effects.test.js +157 -0
  163. package/dist/backend/llvm/reference-effects.test.js.map +1 -0
  164. package/dist/backend/llvm/shapes.d.ts +7 -4
  165. package/dist/backend/llvm/shapes.js +82 -22
  166. package/dist/backend/llvm/shapes.js.map +1 -1
  167. package/dist/backend/llvm/shapes.test.js +3 -1
  168. package/dist/backend/llvm/shapes.test.js.map +1 -1
  169. package/dist/backend/llvm/split.js +4 -4
  170. package/dist/backend/llvm/split.js.map +1 -1
  171. package/dist/backend/llvm/split.test.js +14 -6
  172. package/dist/backend/llvm/split.test.js.map +1 -1
  173. package/dist/backend/llvm/stack-unions.js +14 -5
  174. package/dist/backend/llvm/stack-unions.js.map +1 -1
  175. package/dist/backend/llvm/stack-unions.test.js +172 -32
  176. package/dist/backend/llvm/stack-unions.test.js.map +1 -1
  177. package/dist/backend/llvm/string-construction.d.ts +10 -0
  178. package/dist/backend/llvm/string-construction.js +38 -0
  179. package/dist/backend/llvm/string-construction.js.map +1 -0
  180. package/dist/backend/llvm/string-construction.test.d.ts +1 -0
  181. package/dist/backend/llvm/string-construction.test.js +90 -0
  182. package/dist/backend/llvm/string-construction.test.js.map +1 -0
  183. package/dist/backend/llvm/string-lifetimes.d.ts +2 -2
  184. package/dist/backend/llvm/string-lifetimes.js +19 -11
  185. package/dist/backend/llvm/string-lifetimes.js.map +1 -1
  186. package/dist/backend/llvm/string-lifetimes.test.js +127 -32
  187. package/dist/backend/llvm/string-lifetimes.test.js.map +1 -1
  188. package/dist/backend/llvm/switch-dispatch.d.ts +9 -0
  189. package/dist/backend/llvm/switch-dispatch.js +114 -0
  190. package/dist/backend/llvm/switch-dispatch.js.map +1 -0
  191. package/dist/backend/llvm/switch-dispatch.test.d.ts +1 -0
  192. package/dist/backend/llvm/switch-dispatch.test.js +83 -0
  193. package/dist/backend/llvm/switch-dispatch.test.js.map +1 -0
  194. package/dist/backend/llvm/unsupported.js.map +1 -1
  195. package/dist/backend/llvm/walkers.js +6 -3
  196. package/dist/backend/llvm/walkers.js.map +1 -1
  197. package/dist/backend/mangle.js +9 -3
  198. package/dist/backend/mangle.js.map +1 -1
  199. package/dist/backend/may-throw.js +18 -8
  200. package/dist/backend/may-throw.js.map +1 -1
  201. package/dist/backend/may-throw.test.js +118 -22
  202. package/dist/backend/may-throw.test.js.map +1 -1
  203. package/dist/backend/native/artifact-stamps.d.ts +39 -0
  204. package/dist/backend/native/artifact-stamps.js +371 -0
  205. package/dist/backend/native/artifact-stamps.js.map +1 -0
  206. package/dist/backend/native/cache-warm.d.ts +24 -0
  207. package/dist/backend/native/cache-warm.js +80 -0
  208. package/dist/backend/native/cache-warm.js.map +1 -0
  209. package/dist/backend/native/compiler-fingerprint.d.ts +19 -0
  210. package/dist/backend/native/compiler-fingerprint.js +357 -0
  211. package/dist/backend/native/compiler-fingerprint.js.map +1 -0
  212. package/dist/backend/native/contracts.d.ts +314 -0
  213. package/dist/backend/native/contracts.js +2 -0
  214. package/dist/backend/native/contracts.js.map +1 -0
  215. package/dist/backend/native/dependency-files.d.ts +5 -0
  216. package/dist/backend/native/dependency-files.js +83 -0
  217. package/dist/backend/native/dependency-files.js.map +1 -0
  218. package/dist/backend/native/driver.d.ts +50 -0
  219. package/dist/backend/native/driver.js +294 -0
  220. package/dist/backend/native/driver.js.map +1 -0
  221. package/dist/backend/native/executable.d.ts +18 -0
  222. package/dist/backend/native/executable.js +1267 -0
  223. package/dist/backend/native/executable.js.map +1 -0
  224. package/dist/backend/native/library.d.ts +2 -0
  225. package/dist/backend/native/library.js +614 -0
  226. package/dist/backend/native/library.js.map +1 -0
  227. package/dist/backend/native/linker-fingerprint.d.ts +8 -0
  228. package/dist/backend/native/linker-fingerprint.js +174 -0
  229. package/dist/backend/native/linker-fingerprint.js.map +1 -0
  230. package/dist/backend/native/object-merge.d.ts +2 -0
  231. package/dist/backend/native/object-merge.js +154 -0
  232. package/dist/backend/native/object-merge.js.map +1 -0
  233. package/dist/backend/native/process.d.ts +17 -0
  234. package/dist/backend/native/process.js +42 -0
  235. package/dist/backend/native/process.js.map +1 -0
  236. package/dist/backend/native/program-shards.d.ts +21 -0
  237. package/dist/backend/native/program-shards.js +99 -0
  238. package/dist/backend/native/program-shards.js.map +1 -0
  239. package/dist/backend/native/runtime-inputs.d.ts +12 -0
  240. package/dist/backend/native/runtime-inputs.js +163 -0
  241. package/dist/backend/native/runtime-inputs.js.map +1 -0
  242. package/dist/backend/native/runtime-inputs.test.d.ts +1 -0
  243. package/dist/backend/native/runtime-inputs.test.js +64 -0
  244. package/dist/backend/native/runtime-inputs.test.js.map +1 -0
  245. package/dist/backend/native/runtime-objects.d.ts +16 -0
  246. package/dist/backend/native/runtime-objects.js +122 -0
  247. package/dist/backend/native/runtime-objects.js.map +1 -0
  248. package/dist/backend/native/session.d.ts +12 -0
  249. package/dist/backend/native/session.js +31 -0
  250. package/dist/backend/native/session.js.map +1 -0
  251. package/dist/backend/native/tool-identity.d.ts +37 -0
  252. package/dist/backend/native/tool-identity.js +310 -0
  253. package/dist/backend/native/tool-identity.js.map +1 -0
  254. package/dist/backend/native/trace-paths.d.ts +12 -0
  255. package/dist/backend/native/trace-paths.js +73 -0
  256. package/dist/backend/native/trace-paths.js.map +1 -0
  257. package/dist/backend/native/vendor.d.ts +1 -0
  258. package/dist/backend/native/vendor.js +12 -0
  259. package/dist/backend/native/vendor.js.map +1 -0
  260. package/dist/backend/native-codegen-core.js +2 -1
  261. package/dist/backend/native-codegen-core.js.map +1 -1
  262. package/dist/backend/native-codegen.d.ts +1 -1
  263. package/dist/backend/native-codegen.js +24 -13
  264. package/dist/backend/native-codegen.js.map +1 -1
  265. package/dist/backend/native-codegen.test.js +12 -9
  266. package/dist/backend/native-codegen.test.js.map +1 -1
  267. package/dist/backend/native-link-info-core.js +9 -5
  268. package/dist/backend/native-link-info-core.js.map +1 -1
  269. package/dist/backend/native-link-info.js +14 -5
  270. package/dist/backend/native-link-info.js.map +1 -1
  271. package/dist/backend/native-link-info.test.js +58 -13
  272. package/dist/backend/native-link-info.test.js.map +1 -1
  273. package/dist/backend/native-toolchain.d.ts +17 -450
  274. package/dist/backend/native-toolchain.js +17 -3971
  275. package/dist/backend/native-toolchain.js.map +1 -1
  276. package/dist/backend/native-toolchain.test.js +103 -72
  277. package/dist/backend/native-toolchain.test.js.map +1 -1
  278. package/dist/backend/native-tools.js +27 -8
  279. package/dist/backend/native-tools.js.map +1 -1
  280. package/dist/backend/object-localize.js +17 -14
  281. package/dist/backend/object-localize.js.map +1 -1
  282. package/dist/backend/object-localize.test.js +59 -12
  283. package/dist/backend/object-localize.test.js.map +1 -1
  284. package/dist/backend/runtime-pack-core.js +96 -49
  285. package/dist/backend/runtime-pack-core.js.map +1 -1
  286. package/dist/backend/runtime-pack-native.js +5 -3
  287. package/dist/backend/runtime-pack-native.js.map +1 -1
  288. package/dist/backend/runtime-pack-targets.test.js +87 -15
  289. package/dist/backend/runtime-pack-targets.test.js.map +1 -1
  290. package/dist/backend/runtime-pack.d.ts +1 -1
  291. package/dist/backend/runtime-pack.js +11 -12
  292. package/dist/backend/runtime-pack.js.map +1 -1
  293. package/dist/backend/runtime-pack.test.js +40 -24
  294. package/dist/backend/runtime-pack.test.js.map +1 -1
  295. package/dist/backend/source-locations.js.map +1 -1
  296. package/dist/backend/source-locations.test.js +7 -2
  297. package/dist/backend/source-locations.test.js.map +1 -1
  298. package/dist/backend/target-diagnostics.js +44 -14
  299. package/dist/backend/target-diagnostics.js.map +1 -1
  300. package/dist/backend/target-diagnostics.test.js +93 -20
  301. package/dist/backend/target-diagnostics.test.js.map +1 -1
  302. package/dist/backend/targets.js +230 -86
  303. package/dist/backend/targets.js.map +1 -1
  304. package/dist/backend/targets.test.js +32 -18
  305. package/dist/backend/targets.test.js.map +1 -1
  306. package/dist/backend/toolchain-environment.js +5 -1
  307. package/dist/backend/toolchain-environment.js.map +1 -1
  308. package/dist/backend/vendor-archives.d.ts +2 -2
  309. package/dist/backend/vendor-archives.js +84 -35
  310. package/dist/backend/vendor-archives.js.map +1 -1
  311. package/dist/backend/vendor-inputs.js +13 -1
  312. package/dist/backend/vendor-inputs.js.map +1 -1
  313. package/dist/backend/warm-cache.d.ts +1 -1
  314. package/dist/backend/warm-cache.js +33 -9
  315. package/dist/backend/warm-cache.js.map +1 -1
  316. package/dist/cli/command.js +39 -9
  317. package/dist/cli/command.js.map +1 -1
  318. package/dist/cli/output-options.js +14 -4
  319. package/dist/cli/output-options.js.map +1 -1
  320. package/dist/cli/paths.js.map +1 -1
  321. package/dist/cli/wasi-runner.js.map +1 -1
  322. package/dist/compat/fetch-profile.js +36 -35
  323. package/dist/compat/fetch-profile.js.map +1 -1
  324. package/dist/coverage/report.js +16 -17
  325. package/dist/coverage/report.js.map +1 -1
  326. package/dist/coverage/surface-manifest.js +112 -26
  327. package/dist/coverage/surface-manifest.js.map +1 -1
  328. package/dist/diagnostics/diagnostic.js +55 -16
  329. package/dist/diagnostics/diagnostic.js.map +1 -1
  330. package/dist/executable/executable-cache.d.ts +1 -1
  331. package/dist/executable/executable-cache.js +78 -48
  332. package/dist/executable/executable-cache.js.map +1 -1
  333. package/dist/executable/executable-cache.test.js +75 -26
  334. package/dist/executable/executable-cache.test.js.map +1 -1
  335. package/dist/executable/prepare.js +2 -2
  336. package/dist/executable/prepare.js.map +1 -1
  337. package/dist/ffi/ffi-manifest.js +78 -20
  338. package/dist/ffi/ffi-manifest.js.map +1 -1
  339. package/dist/ffi/ffi-manifest.test.js +96 -16
  340. package/dist/ffi/ffi-manifest.test.js.map +1 -1
  341. package/dist/format-integer.js.map +1 -1
  342. package/dist/frontend/analysis.js +12 -2
  343. package/dist/frontend/analysis.js.map +1 -1
  344. package/dist/frontend/arguments-usage.js.map +1 -1
  345. package/dist/frontend/binding-source.js +9 -3
  346. package/dist/frontend/binding-source.js.map +1 -1
  347. package/dist/frontend/builtin-modules.js +46 -2
  348. package/dist/frontend/builtin-modules.js.map +1 -1
  349. package/dist/frontend/cjs-resolve.js +40 -17
  350. package/dist/frontend/cjs-resolve.js.map +1 -1
  351. package/dist/frontend/cjs-syntax.js +31 -10
  352. package/dist/frontend/cjs-syntax.js.map +1 -1
  353. package/dist/frontend/comptime-node.test.js +10 -11
  354. package/dist/frontend/comptime-node.test.js.map +1 -1
  355. package/dist/frontend/dts-paths.js +7 -3
  356. package/dist/frontend/dts-paths.js.map +1 -1
  357. package/dist/frontend/fork-target.js +17 -12
  358. package/dist/frontend/fork-target.js.map +1 -1
  359. package/dist/frontend/function-completion.js +11 -6
  360. package/dist/frontend/function-completion.js.map +1 -1
  361. package/dist/frontend/helper-tokens.js +53 -6
  362. package/dist/frontend/helper-tokens.js.map +1 -1
  363. package/dist/frontend/helper-tokens.test.js +18 -2
  364. package/dist/frontend/helper-tokens.test.js.map +1 -1
  365. package/dist/frontend/inferred-js-diagnostics.js +32 -12
  366. package/dist/frontend/inferred-js-diagnostics.js.map +1 -1
  367. package/dist/frontend/inferred-js-diagnostics.test.js +11 -15
  368. package/dist/frontend/inferred-js-diagnostics.test.js.map +1 -1
  369. package/dist/frontend/input-tracker.js +11 -11
  370. package/dist/frontend/input-tracker.js.map +1 -1
  371. package/dist/frontend/input-tracker.test.js +4 -1
  372. package/dist/frontend/input-tracker.test.js.map +1 -1
  373. package/dist/frontend/lib-contract.js +38 -9
  374. package/dist/frontend/lib-contract.js.map +1 -1
  375. package/dist/frontend/literal-values.js.map +1 -1
  376. package/dist/frontend/literal-values.test.js +28 -8
  377. package/dist/frontend/literal-values.test.js.map +1 -1
  378. package/dist/frontend/lowering/abstract-equality.js +53 -10
  379. package/dist/frontend/lowering/abstract-equality.js.map +1 -1
  380. package/dist/frontend/lowering/array-indexed-mutation.d.ts +1 -1
  381. package/dist/frontend/lowering/array-indexed-mutation.js +108 -106
  382. package/dist/frontend/lowering/array-indexed-mutation.js.map +1 -1
  383. package/dist/frontend/lowering/array-values.js +37 -14
  384. package/dist/frontend/lowering/array-values.js.map +1 -1
  385. package/dist/frontend/lowering/binding-analysis.d.ts +50 -0
  386. package/dist/frontend/lowering/binding-analysis.js +376 -0
  387. package/dist/frontend/lowering/binding-analysis.js.map +1 -0
  388. package/dist/frontend/lowering/builtin-calls.d.ts +9 -0
  389. package/dist/frontend/lowering/builtin-calls.js +60 -0
  390. package/dist/frontend/lowering/builtin-calls.js.map +1 -0
  391. package/dist/frontend/lowering/builtins/arguments.d.ts +43 -0
  392. package/dist/frontend/lowering/builtins/arguments.js +247 -0
  393. package/dist/frontend/lowering/builtins/arguments.js.map +1 -0
  394. package/dist/frontend/lowering/builtins/async-context.d.ts +52 -0
  395. package/dist/frontend/lowering/builtins/async-context.js +436 -0
  396. package/dist/frontend/lowering/builtins/async-context.js.map +1 -0
  397. package/dist/frontend/lowering/builtins/atomics.d.ts +15 -0
  398. package/dist/frontend/lowering/builtins/atomics.js +46 -0
  399. package/dist/frontend/lowering/builtins/atomics.js.map +1 -0
  400. package/dist/frontend/lowering/builtins/callable-aliases.d.ts +13 -0
  401. package/dist/frontend/lowering/builtins/callable-aliases.js +87 -0
  402. package/dist/frontend/lowering/builtins/callable-aliases.js.map +1 -0
  403. package/dist/frontend/lowering/builtins/child-process-async.d.ts +18 -0
  404. package/dist/frontend/lowering/builtins/child-process-async.js +245 -0
  405. package/dist/frontend/lowering/builtins/child-process-async.js.map +1 -0
  406. package/dist/frontend/lowering/builtins/child-process-methods.d.ts +21 -0
  407. package/dist/frontend/lowering/builtins/child-process-methods.js +362 -0
  408. package/dist/frontend/lowering/builtins/child-process-methods.js.map +1 -0
  409. package/dist/frontend/lowering/builtins/child-process-sync.d.ts +4 -0
  410. package/dist/frontend/lowering/builtins/child-process-sync.js +639 -0
  411. package/dist/frontend/lowering/builtins/child-process-sync.js.map +1 -0
  412. package/dist/frontend/lowering/builtins/child-process.d.ts +55 -0
  413. package/dist/frontend/lowering/builtins/child-process.js +669 -0
  414. package/dist/frontend/lowering/builtins/child-process.js.map +1 -0
  415. package/dist/frontend/lowering/builtins/compression.d.ts +7 -0
  416. package/dist/frontend/lowering/builtins/compression.js +115 -0
  417. package/dist/frontend/lowering/builtins/compression.js.map +1 -0
  418. package/dist/frontend/lowering/builtins/console.d.ts +10 -0
  419. package/dist/frontend/lowering/builtins/console.js +38 -0
  420. package/dist/frontend/lowering/builtins/console.js.map +1 -0
  421. package/dist/frontend/lowering/builtins/constants.d.ts +24 -0
  422. package/dist/frontend/lowering/builtins/constants.js +141 -0
  423. package/dist/frontend/lowering/builtins/constants.js.map +1 -0
  424. package/dist/frontend/lowering/builtins/crypto.d.ts +22 -0
  425. package/dist/frontend/lowering/builtins/crypto.js +517 -0
  426. package/dist/frontend/lowering/builtins/crypto.js.map +1 -0
  427. package/dist/frontend/lowering/builtins/dates.d.ts +7 -0
  428. package/dist/frontend/lowering/builtins/dates.js +101 -0
  429. package/dist/frontend/lowering/builtins/dates.js.map +1 -0
  430. package/dist/frontend/lowering/builtins/environment.d.ts +34 -0
  431. package/dist/frontend/lowering/builtins/environment.js +95 -0
  432. package/dist/frontend/lowering/builtins/environment.js.map +1 -0
  433. package/dist/frontend/lowering/builtins/errors.d.ts +14 -0
  434. package/dist/frontend/lowering/builtins/errors.js +83 -0
  435. package/dist/frontend/lowering/builtins/errors.js.map +1 -0
  436. package/dist/frontend/lowering/builtins/filesystem-calls.d.ts +32 -0
  437. package/dist/frontend/lowering/builtins/filesystem-calls.js +678 -0
  438. package/dist/frontend/lowering/builtins/filesystem-calls.js.map +1 -0
  439. package/dist/frontend/lowering/builtins/filesystem.d.ts +108 -0
  440. package/dist/frontend/lowering/builtins/filesystem.js +1061 -0
  441. package/dist/frontend/lowering/builtins/filesystem.js.map +1 -0
  442. package/dist/frontend/lowering/builtins/ipc.d.ts +8 -0
  443. package/dist/frontend/lowering/builtins/ipc.js +76 -0
  444. package/dist/frontend/lowering/builtins/ipc.js.map +1 -0
  445. package/dist/frontend/lowering/builtins/json.d.ts +12 -0
  446. package/dist/frontend/lowering/builtins/json.js +387 -0
  447. package/dist/frontend/lowering/builtins/json.js.map +1 -0
  448. package/dist/frontend/lowering/builtins/module-bindings.d.ts +85 -0
  449. package/dist/frontend/lowering/builtins/module-bindings.js +346 -0
  450. package/dist/frontend/lowering/builtins/module-bindings.js.map +1 -0
  451. package/dist/frontend/lowering/builtins/module-calls.d.ts +8 -0
  452. package/dist/frontend/lowering/builtins/module-calls.js +303 -0
  453. package/dist/frontend/lowering/builtins/module-calls.js.map +1 -0
  454. package/dist/frontend/lowering/builtins/module-resolution.d.ts +38 -0
  455. package/dist/frontend/lowering/builtins/module-resolution.js +344 -0
  456. package/dist/frontend/lowering/builtins/module-resolution.js.map +1 -0
  457. package/dist/frontend/lowering/builtins/numbers.d.ts +15 -0
  458. package/dist/frontend/lowering/builtins/numbers.js +124 -0
  459. package/dist/frontend/lowering/builtins/numbers.js.map +1 -0
  460. package/dist/frontend/lowering/builtins/operating-system.d.ts +13 -0
  461. package/dist/frontend/lowering/builtins/operating-system.js +148 -0
  462. package/dist/frontend/lowering/builtins/operating-system.js.map +1 -0
  463. package/dist/frontend/lowering/builtins/performance.d.ts +13 -0
  464. package/dist/frontend/lowering/builtins/performance.js +100 -0
  465. package/dist/frontend/lowering/builtins/performance.js.map +1 -0
  466. package/dist/frontend/lowering/builtins/process.d.ts +50 -0
  467. package/dist/frontend/lowering/builtins/process.js +1138 -0
  468. package/dist/frontend/lowering/builtins/process.js.map +1 -0
  469. package/dist/frontend/lowering/builtins/promises.d.ts +14 -0
  470. package/dist/frontend/lowering/builtins/promises.js +356 -0
  471. package/dist/frontend/lowering/builtins/promises.js.map +1 -0
  472. package/dist/frontend/lowering/builtins/properties.d.ts +11 -0
  473. package/dist/frontend/lowering/builtins/properties.js +186 -0
  474. package/dist/frontend/lowering/builtins/properties.js.map +1 -0
  475. package/dist/frontend/lowering/builtins/querystring.d.ts +19 -0
  476. package/dist/frontend/lowering/builtins/querystring.js +150 -0
  477. package/dist/frontend/lowering/builtins/querystring.js.map +1 -0
  478. package/dist/frontend/lowering/builtins/readline.d.ts +13 -0
  479. package/dist/frontend/lowering/builtins/readline.js +138 -0
  480. package/dist/frontend/lowering/builtins/readline.js.map +1 -0
  481. package/dist/frontend/lowering/builtins/receiver-types.d.ts +5 -0
  482. package/dist/frontend/lowering/builtins/receiver-types.js +15 -0
  483. package/dist/frontend/lowering/builtins/receiver-types.js.map +1 -0
  484. package/dist/frontend/lowering/builtins/reflection.d.ts +13 -0
  485. package/dist/frontend/lowering/builtins/reflection.js +95 -0
  486. package/dist/frontend/lowering/builtins/reflection.js.map +1 -0
  487. package/dist/frontend/lowering/builtins/strings.d.ts +14 -0
  488. package/dist/frontend/lowering/builtins/strings.js +121 -0
  489. package/dist/frontend/lowering/builtins/strings.js.map +1 -0
  490. package/dist/frontend/lowering/builtins/text-codecs.d.ts +29 -0
  491. package/dist/frontend/lowering/builtins/text-codecs.js +590 -0
  492. package/dist/frontend/lowering/builtins/text-codecs.js.map +1 -0
  493. package/dist/frontend/lowering/builtins/timers.d.ts +22 -0
  494. package/dist/frontend/lowering/builtins/timers.js +180 -0
  495. package/dist/frontend/lowering/builtins/timers.js.map +1 -0
  496. package/dist/frontend/lowering/builtins/url.d.ts +37 -0
  497. package/dist/frontend/lowering/builtins/url.js +596 -0
  498. package/dist/frontend/lowering/builtins/url.js.map +1 -0
  499. package/dist/frontend/lowering/builtins/util-types.d.ts +7 -0
  500. package/dist/frontend/lowering/builtins/util-types.js +31 -0
  501. package/dist/frontend/lowering/builtins/util-types.js.map +1 -0
  502. package/dist/frontend/lowering/call-arguments.d.ts +72 -0
  503. package/dist/frontend/lowering/call-arguments.js +618 -0
  504. package/dist/frontend/lowering/call-arguments.js.map +1 -0
  505. package/dist/frontend/lowering/call-signatures.d.ts +115 -0
  506. package/dist/frontend/lowering/call-signatures.js +719 -0
  507. package/dist/frontend/lowering/call-signatures.js.map +1 -0
  508. package/dist/frontend/lowering/callback-arg.js.map +1 -1
  509. package/dist/frontend/lowering/checked-iterable-spread.js +53 -10
  510. package/dist/frontend/lowering/checked-iterable-spread.js.map +1 -1
  511. package/dist/frontend/lowering/checked-promise-all.js +41 -9
  512. package/dist/frontend/lowering/checked-promise-all.js.map +1 -1
  513. package/dist/frontend/lowering/class-callbacks.d.ts +1 -1
  514. package/dist/frontend/lowering/class-callbacks.js +130 -27
  515. package/dist/frontend/lowering/class-callbacks.js.map +1 -1
  516. package/dist/frontend/lowering/class-construction.d.ts +1 -1
  517. package/dist/frontend/lowering/class-construction.js +247 -50
  518. package/dist/frontend/lowering/class-construction.js.map +1 -1
  519. package/dist/frontend/lowering/class-descriptors.js +109 -29
  520. package/dist/frontend/lowering/class-descriptors.js.map +1 -1
  521. package/dist/frontend/lowering/class-dynamic-dispatch.d.ts +6 -1
  522. package/dist/frontend/lowering/class-dynamic-dispatch.js +2471 -465
  523. package/dist/frontend/lowering/class-dynamic-dispatch.js.map +1 -1
  524. package/dist/frontend/lowering/class-dynamic-dispatch.test.js +284 -44
  525. package/dist/frontend/lowering/class-dynamic-dispatch.test.js.map +1 -1
  526. package/dist/frontend/lowering/class-instance-constructor.js +17 -5
  527. package/dist/frontend/lowering/class-instance-constructor.js.map +1 -1
  528. package/dist/frontend/lowering/class-method-values.js +199 -51
  529. package/dist/frontend/lowering/class-method-values.js.map +1 -1
  530. package/dist/frontend/lowering/class-prototypes.js +345 -86
  531. package/dist/frontend/lowering/class-prototypes.js.map +1 -1
  532. package/dist/frontend/lowering/class-runtime-statics.d.ts +1 -1
  533. package/dist/frontend/lowering/class-runtime-statics.js +80 -17
  534. package/dist/frontend/lowering/class-runtime-statics.js.map +1 -1
  535. package/dist/frontend/lowering/class-static-data.js +76 -16
  536. package/dist/frontend/lowering/class-static-data.js.map +1 -1
  537. package/dist/frontend/lowering/coercions/builders.d.ts +13 -0
  538. package/dist/frontend/lowering/coercions/builders.js +77 -0
  539. package/dist/frontend/lowering/coercions/builders.js.map +1 -0
  540. package/dist/frontend/lowering/coercions/function-adapters.d.ts +58 -0
  541. package/dist/frontend/lowering/coercions/function-adapters.js +430 -0
  542. package/dist/frontend/lowering/coercions/function-adapters.js.map +1 -0
  543. package/dist/frontend/lowering/coercions/island.d.ts +37 -0
  544. package/dist/frontend/lowering/coercions/island.js +350 -0
  545. package/dist/frontend/lowering/coercions/island.js.map +1 -0
  546. package/dist/frontend/lowering/coercions/state.d.ts +14 -0
  547. package/dist/frontend/lowering/coercions/state.js +16 -0
  548. package/dist/frontend/lowering/coercions/state.js.map +1 -0
  549. package/dist/frontend/lowering/coercions/structural-plans.d.ts +40 -0
  550. package/dist/frontend/lowering/coercions/structural-plans.js +447 -0
  551. package/dist/frontend/lowering/coercions/structural-plans.js.map +1 -0
  552. package/dist/frontend/lowering/coercions/structural.d.ts +63 -0
  553. package/dist/frontend/lowering/coercions/structural.js +616 -0
  554. package/dist/frontend/lowering/coercions/structural.js.map +1 -0
  555. package/dist/frontend/lowering/coercions/unions.d.ts +65 -0
  556. package/dist/frontend/lowering/coercions/unions.js +318 -0
  557. package/dist/frontend/lowering/coercions/unions.js.map +1 -0
  558. package/dist/frontend/lowering/collection-ingestion.js +359 -67
  559. package/dist/frontend/lowering/collection-ingestion.js.map +1 -1
  560. package/dist/frontend/lowering/containers/array-callbacks.d.ts +92 -0
  561. package/dist/frontend/lowering/containers/array-callbacks.js +1646 -0
  562. package/dist/frontend/lowering/containers/array-callbacks.js.map +1 -0
  563. package/dist/frontend/lowering/containers/array-construction.d.ts +42 -0
  564. package/dist/frontend/lowering/containers/array-construction.js +1044 -0
  565. package/dist/frontend/lowering/containers/array-construction.js.map +1 -0
  566. package/dist/frontend/lowering/containers/array-iteration.d.ts +16 -0
  567. package/dist/frontend/lowering/containers/array-iteration.js +95 -0
  568. package/dist/frontend/lowering/containers/array-iteration.js.map +1 -0
  569. package/dist/frontend/lowering/containers/array-methods.d.ts +27 -0
  570. package/dist/frontend/lowering/containers/array-methods.js +1854 -0
  571. package/dist/frontend/lowering/containers/array-methods.js.map +1 -0
  572. package/dist/frontend/lowering/containers/bytes.d.ts +17 -17
  573. package/dist/frontend/lowering/containers/bytes.js +419 -105
  574. package/dist/frontend/lowering/containers/bytes.js.map +1 -1
  575. package/dist/frontend/lowering/containers/callback-arguments.d.ts +26 -0
  576. package/dist/frontend/lowering/containers/callback-arguments.js +179 -0
  577. package/dist/frontend/lowering/containers/callback-arguments.js.map +1 -0
  578. package/dist/frontend/lowering/containers/collection-grouping.d.ts +19 -0
  579. package/dist/frontend/lowering/containers/collection-grouping.js +297 -0
  580. package/dist/frontend/lowering/containers/collection-grouping.js.map +1 -0
  581. package/dist/frontend/lowering/containers/collection-methods.d.ts +57 -0
  582. package/dist/frontend/lowering/containers/collection-methods.js +1314 -0
  583. package/dist/frontend/lowering/containers/collection-methods.js.map +1 -0
  584. package/dist/frontend/lowering/containers/dynamic-receivers.d.ts +18 -0
  585. package/dist/frontend/lowering/containers/dynamic-receivers.js +114 -0
  586. package/dist/frontend/lowering/containers/dynamic-receivers.js.map +1 -0
  587. package/dist/frontend/lowering/containers/for-of.d.ts +60 -0
  588. package/dist/frontend/lowering/containers/for-of.js +643 -0
  589. package/dist/frontend/lowering/containers/for-of.js.map +1 -0
  590. package/dist/frontend/lowering/containers/indexed-objects.d.ts +132 -0
  591. package/dist/frontend/lowering/containers/indexed-objects.js +1743 -0
  592. package/dist/frontend/lowering/containers/indexed-objects.js.map +1 -0
  593. package/dist/frontend/lowering/containers/iterator-helpers.d.ts +20 -0
  594. package/dist/frontend/lowering/containers/iterator-helpers.js +809 -0
  595. package/dist/frontend/lowering/containers/iterator-helpers.js.map +1 -0
  596. package/dist/frontend/lowering/containers/string-and-regexp.js +585 -157
  597. package/dist/frontend/lowering/containers/string-and-regexp.js.map +1 -1
  598. package/dist/frontend/lowering/containers/string-replacement.js +213 -63
  599. package/dist/frontend/lowering/containers/string-replacement.js.map +1 -1
  600. package/dist/frontend/lowering/crypto-tables.js +263 -64
  601. package/dist/frontend/lowering/crypto-tables.js.map +1 -1
  602. package/dist/frontend/lowering/deferred-module-initializers.js +172 -68
  603. package/dist/frontend/lowering/deferred-module-initializers.js.map +1 -1
  604. package/dist/frontend/lowering/deferred-module-initializers.test.js +41 -8
  605. package/dist/frontend/lowering/deferred-module-initializers.test.js.map +1 -1
  606. package/dist/frontend/lowering/error-methods.js +339 -65
  607. package/dist/frontend/lowering/error-methods.js.map +1 -1
  608. package/dist/frontend/lowering/expressions/evaluation-safety.js +3 -2
  609. package/dist/frontend/lowering/expressions/evaluation-safety.js.map +1 -1
  610. package/dist/frontend/lowering/expressions/global-symbols.js +2 -1
  611. package/dist/frontend/lowering/expressions/global-symbols.js.map +1 -1
  612. package/dist/frontend/lowering/expressions/native-proxy.js +11 -5
  613. package/dist/frontend/lowering/expressions/native-proxy.js.map +1 -1
  614. package/dist/frontend/lowering/expressions/nullish-assignment.js +67 -13
  615. package/dist/frontend/lowering/expressions/nullish-assignment.js.map +1 -1
  616. package/dist/frontend/lowering/expressions/object-literals.js +589 -162
  617. package/dist/frontend/lowering/expressions/object-literals.js.map +1 -1
  618. package/dist/frontend/lowering/expressions/optional-chains.d.ts +1 -1
  619. package/dist/frontend/lowering/expressions/optional-chains.js +68 -17
  620. package/dist/frontend/lowering/expressions/optional-chains.js.map +1 -1
  621. package/dist/frontend/lowering/expressions/union-field-write.js +45 -18
  622. package/dist/frontend/lowering/expressions/union-field-write.js.map +1 -1
  623. package/dist/frontend/lowering/function-context.js +5 -1
  624. package/dist/frontend/lowering/function-context.js.map +1 -1
  625. package/dist/frontend/lowering/function-returns.d.ts +67 -0
  626. package/dist/frontend/lowering/function-returns.js +392 -0
  627. package/dist/frontend/lowering/function-returns.js.map +1 -0
  628. package/dist/frontend/lowering/generator-delegation.d.ts +1 -1
  629. package/dist/frontend/lowering/generator-delegation.js +171 -39
  630. package/dist/frontend/lowering/generator-delegation.js.map +1 -1
  631. package/dist/frontend/lowering/generator-dynamic-dispatch.d.ts +1 -1
  632. package/dist/frontend/lowering/generator-dynamic-dispatch.js +176 -36
  633. package/dist/frontend/lowering/generator-dynamic-dispatch.js.map +1 -1
  634. package/dist/frontend/lowering/generic-functions.d.ts +274 -0
  635. package/dist/frontend/lowering/generic-functions.js +1727 -0
  636. package/dist/frontend/lowering/generic-functions.js.map +1 -0
  637. package/dist/frontend/lowering/import-meta.d.ts +1 -1
  638. package/dist/frontend/lowering/import-meta.js +37 -14
  639. package/dist/frontend/lowering/import-meta.js.map +1 -1
  640. package/dist/frontend/lowering/indexed-comparison.js +6 -2
  641. package/dist/frontend/lowering/indexed-comparison.js.map +1 -1
  642. package/dist/frontend/lowering/iterator-consumption.d.ts +9 -0
  643. package/dist/frontend/lowering/iterator-consumption.js +91 -0
  644. package/dist/frontend/lowering/iterator-consumption.js.map +1 -0
  645. package/dist/frontend/lowering/lib-boundary.js +40 -17
  646. package/dist/frontend/lowering/lib-boundary.js.map +1 -1
  647. package/dist/frontend/lowering/lib-boundary.test.js +49 -11
  648. package/dist/frontend/lowering/lib-boundary.test.js.map +1 -1
  649. package/dist/frontend/lowering/lower-array-sort.d.ts +0 -19
  650. package/dist/frontend/lowering/lower-array-sort.js +331 -566
  651. package/dist/frontend/lowering/lower-array-sort.js.map +1 -1
  652. package/dist/frontend/lowering/lower-assert.js +248 -43
  653. package/dist/frontend/lowering/lower-assert.js.map +1 -1
  654. package/dist/frontend/lowering/lower-async-iteration.js +71 -16
  655. package/dist/frontend/lowering/lower-async-iteration.js.map +1 -1
  656. package/dist/frontend/lowering/lower-builtin-values.js +420 -71
  657. package/dist/frontend/lowering/lower-builtin-values.js.map +1 -1
  658. package/dist/frontend/lowering/lower-calls.d.ts +39 -558
  659. package/dist/frontend/lowering/lower-calls.js +2593 -5667
  660. package/dist/frontend/lowering/lower-calls.js.map +1 -1
  661. package/dist/frontend/lowering/lower-classes.d.ts +243 -242
  662. package/dist/frontend/lowering/lower-classes.js +1704 -727
  663. package/dist/frontend/lowering/lower-classes.js.map +1 -1
  664. package/dist/frontend/lowering/lower-comptime.d.ts +35 -35
  665. package/dist/frontend/lowering/lower-comptime.js +39 -37
  666. package/dist/frontend/lowering/lower-comptime.js.map +1 -1
  667. package/dist/frontend/lowering/lower-dgram.js +59 -31
  668. package/dist/frontend/lowering/lower-dgram.js.map +1 -1
  669. package/dist/frontend/lowering/lower-enums.js +5 -2
  670. package/dist/frontend/lowering/lower-enums.js.map +1 -1
  671. package/dist/frontend/lowering/lower-event-emitter.js +322 -85
  672. package/dist/frontend/lowering/lower-event-emitter.js.map +1 -1
  673. package/dist/frontend/lowering/lower-expando.js +19 -7
  674. package/dist/frontend/lowering/lower-expando.js.map +1 -1
  675. package/dist/frontend/lowering/lower-exprs.d.ts +194 -194
  676. package/dist/frontend/lowering/lower-exprs.js +3455 -1153
  677. package/dist/frontend/lowering/lower-exprs.js.map +1 -1
  678. package/dist/frontend/lowering/lower-functions.d.ts +23 -0
  679. package/dist/frontend/lowering/lower-functions.js +449 -0
  680. package/dist/frontend/lowering/lower-functions.js.map +1 -0
  681. package/dist/frontend/lowering/lower-generators.js +121 -32
  682. package/dist/frontend/lowering/lower-generators.js.map +1 -1
  683. package/dist/frontend/lowering/lower-global-value.js +15 -4
  684. package/dist/frontend/lowering/lower-global-value.js.map +1 -1
  685. package/dist/frontend/lowering/lower-inspect.js +479 -89
  686. package/dist/frontend/lowering/lower-inspect.js.map +1 -1
  687. package/dist/frontend/lowering/lower-island.d.ts +79 -79
  688. package/dist/frontend/lowering/lower-island.js +365 -273
  689. package/dist/frontend/lowering/lower-island.js.map +1 -1
  690. package/dist/frontend/lowering/lower-island.test.js +7 -2
  691. package/dist/frontend/lowering/lower-island.test.js.map +1 -1
  692. package/dist/frontend/lowering/lower-mixins.js +17 -8
  693. package/dist/frontend/lowering/lower-mixins.js.map +1 -1
  694. package/dist/frontend/lowering/lower-modules.d.ts +94 -94
  695. package/dist/frontend/lowering/lower-modules.js +612 -321
  696. package/dist/frontend/lowering/lower-modules.js.map +1 -1
  697. package/dist/frontend/lowering/lower-modules.test.js +91 -20
  698. package/dist/frontend/lowering/lower-modules.test.js.map +1 -1
  699. package/dist/frontend/lowering/lower-namespaces.js +25 -8
  700. package/dist/frontend/lowering/lower-namespaces.js.map +1 -1
  701. package/dist/frontend/lowering/lower-node-module.js +115 -34
  702. package/dist/frontend/lowering/lower-node-module.js.map +1 -1
  703. package/dist/frontend/lowering/lower-server.js +1210 -290
  704. package/dist/frontend/lowering/lower-server.js.map +1 -1
  705. package/dist/frontend/lowering/lower-stmts.d.ts +148 -148
  706. package/dist/frontend/lowering/lower-stmts.js +2312 -984
  707. package/dist/frontend/lowering/lower-stmts.js.map +1 -1
  708. package/dist/frontend/lowering/lower-stmts.test.js +13 -5
  709. package/dist/frontend/lowering/lower-stmts.test.js.map +1 -1
  710. package/dist/frontend/lowering/lower-stream.js +362 -90
  711. package/dist/frontend/lowering/lower-stream.js.map +1 -1
  712. package/dist/frontend/lowering/lower-system-errors.js +30 -8
  713. package/dist/frontend/lowering/lower-system-errors.js.map +1 -1
  714. package/dist/frontend/lowering/lower-test.js +40 -13
  715. package/dist/frontend/lowering/lower-test.js.map +1 -1
  716. package/dist/frontend/lowering/lower-timers.d.ts +31 -0
  717. package/dist/frontend/lowering/lower-timers.js +336 -0
  718. package/dist/frontend/lowering/lower-timers.js.map +1 -0
  719. package/dist/frontend/lowering/lower-url.d.ts +1 -1
  720. package/dist/frontend/lowering/lower-url.js +46 -13
  721. package/dist/frontend/lowering/lower-url.js.map +1 -1
  722. package/dist/frontend/lowering/lowerer.d.ts +21 -351
  723. package/dist/frontend/lowering/lowerer.js +1031 -2704
  724. package/dist/frontend/lowering/lowerer.js.map +1 -1
  725. package/dist/frontend/lowering/lowerer.test.js +85 -17
  726. package/dist/frontend/lowering/lowerer.test.js.map +1 -1
  727. package/dist/frontend/lowering/module-namespace-elements.js +43 -8
  728. package/dist/frontend/lowering/module-namespace-elements.js.map +1 -1
  729. package/dist/frontend/lowering/native-ffi.d.ts +21 -1
  730. package/dist/frontend/lowering/native-ffi.js +487 -18
  731. package/dist/frontend/lowering/native-ffi.js.map +1 -1
  732. package/dist/frontend/lowering/object-enumeration-receiver.js +55 -10
  733. package/dist/frontend/lowering/object-enumeration-receiver.js.map +1 -1
  734. package/dist/frontend/lowering/object-factory-new.d.ts +1 -1
  735. package/dist/frontend/lowering/object-factory-new.js +36 -11
  736. package/dist/frontend/lowering/object-factory-new.js.map +1 -1
  737. package/dist/frontend/lowering/optional-arguments.js +49 -20
  738. package/dist/frontend/lowering/optional-arguments.js.map +1 -1
  739. package/dist/frontend/lowering/pairs-snapshot.js +66 -14
  740. package/dist/frontend/lowering/pairs-snapshot.js.map +1 -1
  741. package/dist/frontend/lowering/runtime-optional-locals.js +3 -1
  742. package/dist/frontend/lowering/runtime-optional-locals.js.map +1 -1
  743. package/dist/frontend/lowering/runtime-optional-locals.test.js.map +1 -1
  744. package/dist/frontend/lowering/sanitize-class-types.js +4 -1
  745. package/dist/frontend/lowering/sanitize-class-types.js.map +1 -1
  746. package/dist/frontend/lowering/sanitize-class-types.test.js +86 -18
  747. package/dist/frontend/lowering/sanitize-class-types.test.js.map +1 -1
  748. package/dist/frontend/lowering/static-this.js +13 -6
  749. package/dist/frontend/lowering/static-this.js.map +1 -1
  750. package/dist/frontend/lowering/string-index.js +32 -10
  751. package/dist/frontend/lowering/string-index.js.map +1 -1
  752. package/dist/frontend/lowering/surfaces.d.ts +42 -42
  753. package/dist/frontend/lowering/surfaces.js +1094 -249
  754. package/dist/frontend/lowering/surfaces.js.map +1 -1
  755. package/dist/frontend/lowering/symbol-fields.js +40 -15
  756. package/dist/frontend/lowering/symbol-fields.js.map +1 -1
  757. package/dist/frontend/lowering/symbol-methods.js.map +1 -1
  758. package/dist/frontend/lowering/text-decoder-encoding.js +236 -24
  759. package/dist/frontend/lowering/text-decoder-encoding.js.map +1 -1
  760. package/dist/frontend/lowering/text-decoder-encoding.test.js +84 -12
  761. package/dist/frontend/lowering/text-decoder-encoding.test.js.map +1 -1
  762. package/dist/frontend/lowering/union-narrow.js +59 -16
  763. package/dist/frontend/lowering/union-narrow.js.map +1 -1
  764. package/dist/frontend/lowering/union-narrow.test.js +24 -7
  765. package/dist/frontend/lowering/union-narrow.test.js.map +1 -1
  766. package/dist/frontend/lowering/union-retag.js +155 -40
  767. package/dist/frontend/lowering/union-retag.js.map +1 -1
  768. package/dist/frontend/lowering/union-retag.test.js +131 -33
  769. package/dist/frontend/lowering/union-retag.test.js.map +1 -1
  770. package/dist/frontend/lowering/unregistered-class-types.js.map +1 -1
  771. package/dist/frontend/lowering/unregistered-class-types.test.js +34 -8
  772. package/dist/frontend/lowering/unregistered-class-types.test.js.map +1 -1
  773. package/dist/frontend/module-syntax.js +21 -8
  774. package/dist/frontend/module-syntax.js.map +1 -1
  775. package/dist/frontend/module-syntax.test.js +37 -13
  776. package/dist/frontend/module-syntax.test.js.map +1 -1
  777. package/dist/frontend/npm-fetch-analysis.js +13 -4
  778. package/dist/frontend/npm-fetch-analysis.js.map +1 -1
  779. package/dist/frontend/npm-fetch-analysis.test.js +33 -10
  780. package/dist/frontend/npm-fetch-analysis.test.js.map +1 -1
  781. package/dist/frontend/npm-fetch-node.js.map +1 -1
  782. package/dist/frontend/npm-fetch-syntax.js +4 -9
  783. package/dist/frontend/npm-fetch-syntax.js.map +1 -1
  784. package/dist/frontend/npm-node.js +3 -1
  785. package/dist/frontend/npm-node.js.map +1 -1
  786. package/dist/frontend/npm-static-bundled-cjs.js +88 -29
  787. package/dist/frontend/npm-static-bundled-cjs.js.map +1 -1
  788. package/dist/frontend/npm-static-bundled-cjs.test.js +29 -10
  789. package/dist/frontend/npm-static-bundled-cjs.test.js.map +1 -1
  790. package/dist/frontend/npm-static-declaration-syntax.js +148 -56
  791. package/dist/frontend/npm-static-declaration-syntax.js.map +1 -1
  792. package/dist/frontend/npm-static-declarations.d.ts +1 -1
  793. package/dist/frontend/npm-static-declarations.js.map +1 -1
  794. package/dist/frontend/npm-static-declarations.test.js +33 -7
  795. package/dist/frontend/npm-static-declarations.test.js.map +1 -1
  796. package/dist/frontend/npm-static-prune.js +26 -12
  797. package/dist/frontend/npm-static-prune.js.map +1 -1
  798. package/dist/frontend/npm-static-prune.test.js +17 -3
  799. package/dist/frontend/npm-static-prune.test.js.map +1 -1
  800. package/dist/frontend/npm-static-rewrite-host.js +2 -3
  801. package/dist/frontend/npm-static-rewrite-host.js.map +1 -1
  802. package/dist/frontend/npm-static-rewrite-syntax.js +64 -21
  803. package/dist/frontend/npm-static-rewrite-syntax.js.map +1 -1
  804. package/dist/frontend/npm-static-rewrite.js.map +1 -1
  805. package/dist/frontend/npm-static-subtyping.js +9 -4
  806. package/dist/frontend/npm-static-subtyping.js.map +1 -1
  807. package/dist/frontend/npm-static-subtyping.test.js +30 -6
  808. package/dist/frontend/npm-static-subtyping.test.js.map +1 -1
  809. package/dist/frontend/npm-static.js +15 -4
  810. package/dist/frontend/npm-static.js.map +1 -1
  811. package/dist/frontend/npm.js +122 -36
  812. package/dist/frontend/npm.js.map +1 -1
  813. package/dist/frontend/npm.test.js +30 -10
  814. package/dist/frontend/npm.test.js.map +1 -1
  815. package/dist/frontend/pipeline-native.js.map +1 -1
  816. package/dist/frontend/pipeline.js +25 -8
  817. package/dist/frontend/pipeline.js.map +1 -1
  818. package/dist/frontend/pipeline.test.js +21 -7
  819. package/dist/frontend/pipeline.test.js.map +1 -1
  820. package/dist/frontend/program-node.js +5 -3
  821. package/dist/frontend/program-node.js.map +1 -1
  822. package/dist/frontend/program.d.ts +2 -2
  823. package/dist/frontend/program.js +234 -101
  824. package/dist/frontend/program.js.map +1 -1
  825. package/dist/frontend/program.test.js +27 -27
  826. package/dist/frontend/program.test.js.map +1 -1
  827. package/dist/frontend/provenance-core.js +8 -4
  828. package/dist/frontend/provenance-core.js.map +1 -1
  829. package/dist/frontend/provenance-registry.js +1 -4
  830. package/dist/frontend/provenance-registry.js.map +1 -1
  831. package/dist/frontend/resolve.js +32 -20
  832. package/dist/frontend/resolve.js.map +1 -1
  833. package/dist/frontend/resolve.test.js +1 -1
  834. package/dist/frontend/resolve.test.js.map +1 -1
  835. package/dist/frontend/runtime-resolve.js +13 -4
  836. package/dist/frontend/runtime-resolve.js.map +1 -1
  837. package/dist/frontend/runtime-resolve.test.js +25 -9
  838. package/dist/frontend/runtime-resolve.test.js.map +1 -1
  839. package/dist/frontend/services-node.js +6 -2
  840. package/dist/frontend/services-node.js.map +1 -1
  841. package/dist/frontend/services-node.test.js +18 -6
  842. package/dist/frontend/services-node.test.js.map +1 -1
  843. package/dist/frontend/services.js +8 -4
  844. package/dist/frontend/services.js.map +1 -1
  845. package/dist/frontend/services.test.js +6 -2
  846. package/dist/frontend/services.test.js.map +1 -1
  847. package/dist/frontend/ts7/api.js +12 -4
  848. package/dist/frontend/ts7/api.js.map +1 -1
  849. package/dist/frontend/ts7/ast-bytes.js +10 -3
  850. package/dist/frontend/ts7/ast-bytes.js.map +1 -1
  851. package/dist/frontend/ts7/ast-bytes.test.js +23 -4
  852. package/dist/frontend/ts7/ast-bytes.test.js.map +1 -1
  853. package/dist/frontend/ts7/ast-guards.test.js +14 -5
  854. package/dist/frontend/ts7/ast-guards.test.js.map +1 -1
  855. package/dist/frontend/ts7/ast-node.d.ts +6 -1
  856. package/dist/frontend/ts7/ast-node.js +484 -164
  857. package/dist/frontend/ts7/ast-node.js.map +1 -1
  858. package/dist/frontend/ts7/ast-node.test.js +109 -36
  859. package/dist/frontend/ts7/ast-node.test.js.map +1 -1
  860. package/dist/frontend/ts7/ast-text.js +13 -3
  861. package/dist/frontend/ts7/ast-text.js.map +1 -1
  862. package/dist/frontend/ts7/ast-text.test.js.map +1 -1
  863. package/dist/frontend/ts7/ast-types.js.map +1 -1
  864. package/dist/frontend/ts7/ast-wire.d.ts +1 -1
  865. package/dist/frontend/ts7/ast-wire.js +55 -20
  866. package/dist/frontend/ts7/ast-wire.js.map +1 -1
  867. package/dist/frontend/ts7/ast-wire.test.js +53 -8
  868. package/dist/frontend/ts7/ast-wire.test.js.map +1 -1
  869. package/dist/frontend/ts7/ast.js +47 -28
  870. package/dist/frontend/ts7/ast.js.map +1 -1
  871. package/dist/frontend/ts7/census-check.js +1 -1
  872. package/dist/frontend/ts7/census-check.js.map +1 -1
  873. package/dist/frontend/ts7/checker-cache.js.map +1 -1
  874. package/dist/frontend/ts7/checker.js +5 -3
  875. package/dist/frontend/ts7/checker.js.map +1 -1
  876. package/dist/frontend/ts7/checker.test.js +54 -17
  877. package/dist/frontend/ts7/checker.test.js.map +1 -1
  878. package/dist/frontend/ts7/enums.test.js +9 -4
  879. package/dist/frontend/ts7/enums.test.js.map +1 -1
  880. package/dist/frontend/ts7/native-api.js.map +1 -1
  881. package/dist/frontend/ts7/native-host.js.map +1 -1
  882. package/dist/frontend/ts7/native-process.js +9 -3
  883. package/dist/frontend/ts7/native-process.js.map +1 -1
  884. package/dist/frontend/ts7/program-adapter.js +1 -1
  885. package/dist/frontend/ts7/program-adapter.js.map +1 -1
  886. package/dist/frontend/ts7/program-host.js +7 -4
  887. package/dist/frontend/ts7/program-host.js.map +1 -1
  888. package/dist/frontend/ts7/program-host.test.js +43 -11
  889. package/dist/frontend/ts7/program-host.test.js.map +1 -1
  890. package/dist/frontend/ts7/rpc-api.js +3 -1
  891. package/dist/frontend/ts7/rpc-api.js.map +1 -1
  892. package/dist/frontend/ts7/rpc-client.js +15 -5
  893. package/dist/frontend/ts7/rpc-client.js.map +1 -1
  894. package/dist/frontend/ts7/rpc-client.test.js +26 -8
  895. package/dist/frontend/ts7/rpc-client.test.js.map +1 -1
  896. package/dist/frontend/ts7/rpc-filesystem.js.map +1 -1
  897. package/dist/frontend/ts7/rpc-filesystem.test.js +43 -10
  898. package/dist/frontend/ts7/rpc-filesystem.test.js.map +1 -1
  899. package/dist/frontend/ts7/rpc-process.js +16 -6
  900. package/dist/frontend/ts7/rpc-process.js.map +1 -1
  901. package/dist/frontend/ts7/rpc-process.test.js.map +1 -1
  902. package/dist/frontend/ts7/rpc-wire.d.ts +1 -0
  903. package/dist/frontend/ts7/rpc-wire.js +41 -14
  904. package/dist/frontend/ts7/rpc-wire.js.map +1 -1
  905. package/dist/frontend/ts7/rpc-wire.test.js +36 -6
  906. package/dist/frontend/ts7/rpc-wire.test.js.map +1 -1
  907. package/dist/frontend/ts7/semantic-checker.js +209 -68
  908. package/dist/frontend/ts7/semantic-checker.js.map +1 -1
  909. package/dist/frontend/ts7/semantic-checker.test.js +29 -14
  910. package/dist/frontend/ts7/semantic-checker.test.js.map +1 -1
  911. package/dist/frontend/ts7/semantic-json.js +7 -1
  912. package/dist/frontend/ts7/semantic-json.js.map +1 -1
  913. package/dist/frontend/ts7/semantic-json.test.js +17 -3
  914. package/dist/frontend/ts7/semantic-json.test.js.map +1 -1
  915. package/dist/frontend/ts7/semantic-model.js +147 -51
  916. package/dist/frontend/ts7/semantic-model.js.map +1 -1
  917. package/dist/frontend/ts7/semantic-model.test.js +72 -19
  918. package/dist/frontend/ts7/semantic-model.test.js.map +1 -1
  919. package/dist/frontend/ts7/semantic-types.d.ts +2 -2
  920. package/dist/frontend/ts7/session-cache.js +10 -3
  921. package/dist/frontend/ts7/session-cache.js.map +1 -1
  922. package/dist/frontend/ts7/session-cache.test.js +13 -4
  923. package/dist/frontend/ts7/session-cache.test.js.map +1 -1
  924. package/dist/frontend/ts7/session-path.js +25 -10
  925. package/dist/frontend/ts7/session-path.js.map +1 -1
  926. package/dist/frontend/ts7/session-path.test.js +47 -4
  927. package/dist/frontend/ts7/session-path.test.js.map +1 -1
  928. package/dist/frontend/ts7/session-timing.js +22 -3
  929. package/dist/frontend/ts7/session-timing.js.map +1 -1
  930. package/dist/frontend/ts7/session-timing.test.js +12 -3
  931. package/dist/frontend/ts7/session-timing.test.js.map +1 -1
  932. package/dist/frontend/ts7/session.d.ts +1 -0
  933. package/dist/frontend/ts7/session.js +109 -35
  934. package/dist/frontend/ts7/session.js.map +1 -1
  935. package/dist/frontend/ts7/session.test.js +69 -15
  936. package/dist/frontend/ts7/session.test.js.map +1 -1
  937. package/dist/frontend/ts7/source-parser.js +17 -6
  938. package/dist/frontend/ts7/source-parser.js.map +1 -1
  939. package/dist/frontend/ts7/source-parser.test.js +32 -9
  940. package/dist/frontend/ts7/source-parser.test.js.map +1 -1
  941. package/dist/frontend/tsc-codes.js +56 -11
  942. package/dist/frontend/tsc-codes.js.map +1 -1
  943. package/dist/frontend/tsc-codes.test.d.ts +1 -0
  944. package/dist/frontend/tsc-codes.test.js +16 -0
  945. package/dist/frontend/tsc-codes.test.js.map +1 -0
  946. package/dist/frontend/type-mapper.js +547 -206
  947. package/dist/frontend/type-mapper.js.map +1 -1
  948. package/dist/frontend/type-mapper.test.js +108 -33
  949. package/dist/frontend/type-mapper.test.js.map +1 -1
  950. package/dist/frontend/union-discriminants.js +8 -2
  951. package/dist/frontend/union-discriminants.js.map +1 -1
  952. package/dist/frontend/union-discriminants.test.js +77 -20
  953. package/dist/frontend/union-discriminants.test.js.map +1 -1
  954. package/dist/index.d.ts +9 -8
  955. package/dist/index.js +150 -81
  956. package/dist/index.js.map +1 -1
  957. package/dist/ir/analysis.js +97 -38
  958. package/dist/ir/analysis.js.map +1 -1
  959. package/dist/ir/analysis.test.js +91 -15
  960. package/dist/ir/analysis.test.js.map +1 -1
  961. package/dist/ir/api.d.ts +4 -0
  962. package/dist/ir/api.js +6 -0
  963. package/dist/ir/api.js.map +1 -0
  964. package/dist/ir/build.d.ts +7 -0
  965. package/dist/ir/build.js +27 -1
  966. package/dist/ir/build.js.map +1 -1
  967. package/dist/ir/builtin-effects.d.ts +9 -0
  968. package/dist/ir/builtin-effects.js +631 -0
  969. package/dist/ir/builtin-effects.js.map +1 -0
  970. package/dist/ir/builtin-signatures.d.ts +15 -0
  971. package/dist/ir/builtin-signatures.js +3396 -0
  972. package/dist/ir/builtin-signatures.js.map +1 -0
  973. package/dist/ir/byte-numbers.d.ts +20 -0
  974. package/dist/ir/byte-numbers.js +116 -0
  975. package/dist/ir/byte-numbers.js.map +1 -0
  976. package/dist/ir/byte-numbers.test.d.ts +1 -0
  977. package/dist/ir/byte-numbers.test.js +55 -0
  978. package/dist/ir/byte-numbers.test.js.map +1 -0
  979. package/dist/ir/constant-tables.js +13 -5
  980. package/dist/ir/constant-tables.js.map +1 -1
  981. package/dist/ir/constant-tables.test.js +47 -7
  982. package/dist/ir/constant-tables.test.js.map +1 -1
  983. package/dist/ir/control-flow.js +2 -1
  984. package/dist/ir/control-flow.js.map +1 -1
  985. package/dist/ir/control-flow.test.js +35 -11
  986. package/dist/ir/control-flow.test.js.map +1 -1
  987. package/dist/ir/initializer-bindings.d.ts +9 -0
  988. package/dist/ir/initializer-bindings.js +115 -0
  989. package/dist/ir/initializer-bindings.js.map +1 -0
  990. package/dist/ir/initializer-bindings.test.d.ts +1 -0
  991. package/dist/ir/initializer-bindings.test.js +118 -0
  992. package/dist/ir/initializer-bindings.test.js.map +1 -0
  993. package/dist/ir/integer-loop-facts.d.ts +12 -0
  994. package/dist/ir/integer-loop-facts.js +137 -0
  995. package/dist/ir/integer-loop-facts.js.map +1 -0
  996. package/dist/ir/integer-loops.d.ts +19 -0
  997. package/dist/ir/integer-loops.js +172 -11
  998. package/dist/ir/integer-loops.js.map +1 -1
  999. package/dist/ir/integer-loops.test.js +122 -9
  1000. package/dist/ir/integer-loops.test.js.map +1 -1
  1001. package/dist/ir/integer-ranges.d.ts +8 -6
  1002. package/dist/ir/integer-ranges.js +416 -90
  1003. package/dist/ir/integer-ranges.js.map +1 -1
  1004. package/dist/ir/integer-ranges.test.js +239 -10
  1005. package/dist/ir/integer-ranges.test.js.map +1 -1
  1006. package/dist/ir/intrinsic-signatures.d.ts +20 -0
  1007. package/dist/ir/intrinsic-signatures.js +57 -0
  1008. package/dist/ir/intrinsic-signatures.js.map +1 -0
  1009. package/dist/ir/ir.d.ts +14 -2155
  1010. package/dist/ir/ir.js +169 -1394
  1011. package/dist/ir/ir.js.map +1 -1
  1012. package/dist/ir/ir.test.js +98 -77
  1013. package/dist/ir/ir.test.js.map +1 -1
  1014. package/dist/ir/runtime-features.d.ts +221 -0
  1015. package/dist/ir/runtime-features.js +551 -0
  1016. package/dist/ir/runtime-features.js.map +1 -0
  1017. package/dist/ir/runtime-features.test.d.ts +1 -0
  1018. package/dist/ir/runtime-features.test.js +98 -0
  1019. package/dist/ir/runtime-features.test.js.map +1 -0
  1020. package/dist/ir/scalar-records.js +130 -40
  1021. package/dist/ir/scalar-records.js.map +1 -1
  1022. package/dist/ir/scalar-records.test.js +146 -27
  1023. package/dist/ir/scalar-records.test.js.map +1 -1
  1024. package/dist/ir/serialize.js +4 -2
  1025. package/dist/ir/serialize.js.map +1 -1
  1026. package/dist/ir/serialize.test.js +44 -9
  1027. package/dist/ir/serialize.test.js.map +1 -1
  1028. package/dist/ir/traverse.js +156 -43
  1029. package/dist/ir/traverse.js.map +1 -1
  1030. package/dist/ir/traverse.test.js +99 -24
  1031. package/dist/ir/traverse.test.js.map +1 -1
  1032. package/dist/ir/validate.d.ts +1 -31
  1033. package/dist/ir/validate.js +826 -1915
  1034. package/dist/ir/validate.js.map +1 -1
  1035. package/dist/ir/validate.test.js +627 -111
  1036. package/dist/ir/validate.test.js.map +1 -1
  1037. package/dist/library/cache-primitives.js +9 -10
  1038. package/dist/library/cache-primitives.js.map +1 -1
  1039. package/dist/library/cache-reset.test.js +2 -1
  1040. package/dist/library/cache-reset.test.js.map +1 -1
  1041. package/dist/library/compiler-self-identity.js +11 -5
  1042. package/dist/library/compiler-self-identity.js.map +1 -1
  1043. package/dist/library/compiler-self-identity.test.js +10 -3
  1044. package/dist/library/compiler-self-identity.test.js.map +1 -1
  1045. package/dist/library/fence-eval.js +24 -7
  1046. package/dist/library/fence-eval.js.map +1 -1
  1047. package/dist/library/fence-eval.test.js +31 -7
  1048. package/dist/library/fence-eval.test.js.map +1 -1
  1049. package/dist/library/int-infer.js +199 -59
  1050. package/dist/library/int-infer.js.map +1 -1
  1051. package/dist/library/int-infer.test.js +133 -57
  1052. package/dist/library/int-infer.test.js.map +1 -1
  1053. package/dist/library/ir-policy.d.ts +27 -0
  1054. package/dist/library/ir-policy.js +232 -0
  1055. package/dist/library/ir-policy.js.map +1 -0
  1056. package/dist/library/library-cache.js +40 -17
  1057. package/dist/library/library-cache.js.map +1 -1
  1058. package/dist/library/library-cache.test.js +24 -13
  1059. package/dist/library/library-cache.test.js.map +1 -1
  1060. package/dist/library/library-profile.js +68 -13
  1061. package/dist/library/library-profile.js.map +1 -1
  1062. package/dist/library/prepare.js +48 -20
  1063. package/dist/library/prepare.js.map +1 -1
  1064. package/dist/library/semantic-source.js +16 -14
  1065. package/dist/library/semantic-source.js.map +1 -1
  1066. package/dist/library/semantic-source.test.js +9 -14
  1067. package/dist/library/semantic-source.test.js.map +1 -1
  1068. package/dist/library/sidecar-validate.js +53 -12
  1069. package/dist/library/sidecar-validate.js.map +1 -1
  1070. package/dist/library/sidecar.js +85 -24
  1071. package/dist/library/sidecar.js.map +1 -1
  1072. package/dist/library/trap-teaching.js +11 -2
  1073. package/dist/library/trap-teaching.js.map +1 -1
  1074. package/dist/native/cache.js +10 -4
  1075. package/dist/native/cache.js.map +1 -1
  1076. package/dist/native/cli.js +34 -9
  1077. package/dist/native/cli.js.map +1 -1
  1078. package/dist/native/compiler.js +167 -43
  1079. package/dist/native/compiler.js.map +1 -1
  1080. package/dist/native/compiler.test.js +129 -32
  1081. package/dist/native/compiler.test.js.map +1 -1
  1082. package/dist/native/comptime.js +23 -7
  1083. package/dist/native/comptime.js.map +1 -1
  1084. package/dist/native/comptime.test.js +26 -6
  1085. package/dist/native/comptime.test.js.map +1 -1
  1086. package/dist/native/executable-cache.js +77 -27
  1087. package/dist/native/executable-cache.js.map +1 -1
  1088. package/dist/native/executable-cache.test.js +41 -6
  1089. package/dist/native/executable-cache.test.js.map +1 -1
  1090. package/dist/native/file-identity.js +9 -2
  1091. package/dist/native/file-identity.js.map +1 -1
  1092. package/dist/native/file-identity.test.js.map +1 -1
  1093. package/dist/native/library.js +50 -12
  1094. package/dist/native/library.js.map +1 -1
  1095. package/dist/native/prepare.js +119 -34
  1096. package/dist/native/prepare.js.map +1 -1
  1097. package/dist/native/prepare.test.js +22 -6
  1098. package/dist/native/prepare.test.js.map +1 -1
  1099. package/dist/native/runtime-typescript.js +24 -11
  1100. package/dist/native/runtime-typescript.js.map +1 -1
  1101. package/dist/native/runtime-typescript.test.js.map +1 -1
  1102. package/dist/native/sanitizer.js +71 -18
  1103. package/dist/native/sanitizer.js.map +1 -1
  1104. package/dist/native/sanitizer.test.js +77 -20
  1105. package/dist/native/sanitizer.test.js.map +1 -1
  1106. package/dist/native/task.js.map +1 -1
  1107. package/dist/native/task.test.js +7 -2
  1108. package/dist/native/task.test.js.map +1 -1
  1109. package/dist/native/toolchain.js +74 -29
  1110. package/dist/native/toolchain.js.map +1 -1
  1111. package/dist/native/toolchain.test.js +95 -18
  1112. package/dist/native/toolchain.test.js.map +1 -1
  1113. package/dist/startup-cache.d.ts +1 -1
  1114. package/dist/startup-cache.js +1 -1
  1115. package/dist/startup-cache.js.map +1 -1
  1116. package/dist/timing.js.map +1 -1
  1117. package/package.json +20 -20
  1118. package/surface-manifest.json +1 -1
  1119. package/dist/frontend/lowering/lower-builtins.d.ts +0 -601
  1120. package/dist/frontend/lowering/lower-builtins.js +0 -8984
  1121. package/dist/frontend/lowering/lower-builtins.js.map +0 -1
  1122. package/dist/frontend/lowering/lower-containers.d.ts +0 -382
  1123. package/dist/frontend/lowering/lower-containers.js +0 -7366
  1124. package/dist/frontend/lowering/lower-containers.js.map +0 -1
@@ -0,0 +1,1138 @@
1
+ import { envSnapshotHelper, lowerProcessLoadEnvFile } from "./environment.js";
2
+ import { dynUndefinedExpr, boolLit, numLit, strLit, varRef } from "../../../ir/build.js";
3
+ import { timerStyleCallback } from "../lower-timers.js";
4
+ import * as ts from "../../ts7/adapter.js";
5
+ import { own } from "../lowerer.js";
6
+ import { isJsSourceFile, locOf } from "../../program.js";
7
+ import { isSafeToDiscard } from "../expressions/evaluation-safety.js";
8
+ import { defaultAfterUndefined, lowerStaticallyUndefinedArgument } from "../optional-arguments.js";
9
+ import { voidizedCallback } from "../lower-server.js";
10
+ import { BOOL, BYTES_U8, DYN, F64, PROCSTREAM_T, STRING, UNDEFINED_T, VOID, arrayOf, canBoxFuncIntoDyn, funcOf, typeKey, } from "../../../ir/ir.js";
11
+ import { lowerBuiltinLoaderValue } from "../lower-builtin-values.js";
12
+ import { lowerProcessIpcSend, ipcMessageListener, ipcDisconnectListener } from "./ipc.js";
13
+ import { lowerDiagnosticsSubscriber, lowerTracingArguments } from "./async-context.js";
14
+ /** Method calls on first-class process-stream receivers (procStream —
15
+ * a WritableStream-typed value like prefixStream's `output` param):
16
+ * write(data) with one string, dispatched at runtime onto the exact
17
+ * stdout/stderr write paths (the fd IS the value). Everything else
18
+ * @types/node declares on WritableStream fences member-qualified.
19
+ * Null for non-procStream receivers. */
20
+ export function lowerProcStreamMethodCall(lowerer, call, access) {
21
+ if (lowerer.chainBlocked(call, access))
22
+ return null;
23
+ if (lowerer.mapTypeOf(lowerer.typeOf(access.expression))?.kind !== "procStream")
24
+ return null;
25
+ if (!lowerer.isStdlibMember(access))
26
+ return null;
27
+ const name = access.name.text;
28
+ const loc = locOf(call);
29
+ if (isJsSourceFile(call.getSourceFile())) {
30
+ const receiver = lowerer.lowerExpr(access.expression);
31
+ if (receiver.type.kind === "dyn") {
32
+ return {
33
+ kind: "dynInvoke",
34
+ recv: receiver,
35
+ method: name,
36
+ calleeName: call.expression.getText(),
37
+ args: call.arguments.map((arg) => lowerer.lowerExprExpecting(arg, DYN)),
38
+ type: DYN,
39
+ loc,
40
+ };
41
+ }
42
+ }
43
+ if (name === "write" && call.arguments.length === 1) {
44
+ const receiver = lowerer.lowerExpr(access.expression);
45
+ const data = lowerer.lowerExpr(call.arguments[0]);
46
+ if (data.type.kind !== "string") {
47
+ lowerer.noLowering(`write of '${lowerer.fmt(data.type)}' data on a stream value`, call.arguments[0], "one string is the supported form here — narrow unions first");
48
+ }
49
+ return { kind: "libCall", fn: "procStream.write", args: [receiver, data], type: BOOL, loc };
50
+ }
51
+ lowerer.noLowering(`WritableStream.${name}`, call, "write(data) with one string is the supported stream-value member", lowerer.checker.getSymbolAtLocation(access.name));
52
+ }
53
+ /** `process.stdin/stdout/stderr.isTTY` → isatty(3) on the stream's fd
54
+ * (a REAL boolean: Node's non-TTY streams expose `undefined` here — the
55
+ * documented divergence; truthiness tests, the actual usage, agree), and
56
+ * `process.stdout/stderr.columns/rows` → ioctl(TIOCGWINSZ) on the fd, with
57
+ * Node's non-TTY answer intact: the read is `number | undefined` and a
58
+ * non-TTY (or ioctl-refusing) stream yields the undefined arm. The
59
+ * receiver match sees through parens and as-casts to the SYMBOL —
60
+ * `(process.stderr as typeof process.stderr & { columns?: number })
61
+ * .columns` is the wild widening pattern (@types/node declares a plain
62
+ * `number`, so honest code casts the undefined possibility back in), and
63
+ * the cast changes the expression's TYPE, never the value. columns sites
64
+ * whose checker type does NOT admit undefined are fenced with that exact
65
+ * fix instead of lowering to a lie. Null for anything else, so the
66
+ * property chain keeps trying. */
67
+ export function lowerProcessStreamProperty(lowerer, expr) {
68
+ if (expr.questionDotToken)
69
+ return null;
70
+ const member = expr.name.text;
71
+ const direct = ts.isPropertyAccessExpression(expr.expression)
72
+ ? lowerer.stdlibGlobalMember(expr.expression, "process")
73
+ : null;
74
+ if (isJsSourceFile(expr.getSourceFile()) &&
75
+ (direct === "stdin" ||
76
+ direct === "stdout" ||
77
+ direct === "stderr" ||
78
+ lowerer.mapTypeOf(lowerer.typeOf(expr.expression))?.kind === "procStream")) {
79
+ const value = lowerer.lowerExpr(expr.expression);
80
+ if (value.type.kind === "dyn")
81
+ return {
82
+ kind: "dynKeyGet",
83
+ value,
84
+ key: strLit(member, locOf(expr.name)),
85
+ type: DYN,
86
+ loc: locOf(expr),
87
+ };
88
+ }
89
+ if (member !== "isTTY" && member !== "columns" && member !== "rows")
90
+ return null;
91
+ let recv = expr.expression;
92
+ while (ts.isParenthesizedExpression(recv) || ts.isAsExpression(recv) || ts.isTypeAssertion(recv))
93
+ recv = recv.expression;
94
+ // Browser-compatible packages commonly write
95
+ // `(process.stdout || {}).isTTY`. Node's stream object is always
96
+ // present and truthy, so the fallback cannot run; match the left
97
+ // receiver exactly as the value-level always-truthy `||` lowering
98
+ // does, preserving the native isatty/columns answer.
99
+ if (ts.isBinaryExpression(recv) && recv.operatorToken.kind === ts.SyntaxKind.BarBarToken) {
100
+ let left = recv.left;
101
+ while (ts.isParenthesizedExpression(left) ||
102
+ ts.isAsExpression(left) ||
103
+ ts.isTypeAssertion(left))
104
+ left = left.expression;
105
+ if (ts.isPropertyAccessExpression(left))
106
+ recv = left;
107
+ }
108
+ if (!ts.isPropertyAccessExpression(recv))
109
+ return null;
110
+ const stream = lowerer.stdlibGlobalMember(recv, "process");
111
+ if (stream !== "stdin" && stream !== "stdout" && stream !== "stderr")
112
+ return null;
113
+ const loc = locOf(expr);
114
+ const fd = {
115
+ kind: "numLit",
116
+ value: stream === "stdin" ? 0 : stream === "stdout" ? 1 : 2,
117
+ type: F64,
118
+ loc,
119
+ };
120
+ if (member === "isTTY") {
121
+ return { kind: "libCall", fn: "process.isTTY", args: [fd], type: BOOL, loc };
122
+ }
123
+ if (stream === "stdin")
124
+ return null; // no geometry on a ReadStream — generic fences apply
125
+ const declared = lowerer.mapTypeOf(lowerer.typeOf(expr));
126
+ const want = lowerer.withUndefinedArm(F64);
127
+ // JS files skip the annotation fence: there is no annotation to fix —
128
+ // the read IS Node's `number | undefined` and lowers to exactly that
129
+ // (commander's `isTTY ? columns : undefined` help-width probes).
130
+ if ((!declared || typeKey(declared) !== typeKey(want)) && !isJsSourceFile(expr.getSourceFile())) {
131
+ lowerer.noLowering(`process.${stream}.${member} as a plain number`, expr, `on a non-TTY stream Node's .${member} is undefined — type the read to admit it: ` +
132
+ `(process.${stream} as typeof process.${stream} & { ${member}?: number }).${member}`);
133
+ }
134
+ return {
135
+ kind: "libCall",
136
+ fn: member === "rows" ? "process.rows" : "process.columns",
137
+ args: [fd],
138
+ type: want,
139
+ loc,
140
+ };
141
+ }
142
+ /** `process.argv` / `process.platform` / `process.pid` property READS
143
+ * lower to zero-arg libCalls (argv returns +1 on one interned array —
144
+ * identity and mutation semantics match Node's stable process.argv).
145
+ * `process.env` as a WHOLE value lowers to a fresh SNAPSHOT record —
146
+ * `{ [k: string]: string | undefined }` built over environ by the
147
+ * interned %env.snapshot helper: `{ ...process.env }`, Object.keys, and
148
+ * spawn-env flows all snapshot at the read, exactly what Node's own
149
+ * spread does (and nothing in a compiled program mutates environ between
150
+ * a snapshot and its use except process.env writes, which precede the
151
+ * read in source order). Method members referenced without a call are
152
+ * rejected specifically. Null for non-process receivers (the chain keeps
153
+ * trying other property lowerings). */
154
+ export function lowerProcessProperty(lowerer, expr) {
155
+ if (!expr.questionDotToken &&
156
+ expr.name.text === "bigint" &&
157
+ ts.isPropertyAccessExpression(expr.expression) &&
158
+ lowerer.stdlibGlobalMember(expr.expression, "process") === "hrtime") {
159
+ const loc = locOf(expr);
160
+ return {
161
+ kind: "dynKeyGet",
162
+ value: { kind: "libCall", fn: "process.hrtimeValue", args: [], type: DYN, loc },
163
+ key: { kind: "strLit", value: "bigint", type: STRING, loc },
164
+ type: DYN,
165
+ loc,
166
+ };
167
+ }
168
+ // node and openssl name the compatibility target, not linked engines.
169
+ // Read the stable object so descriptor edits through aliases stay visible.
170
+ if ((expr.name.text === "node" || expr.name.text === "openssl") &&
171
+ !expr.questionDotToken &&
172
+ ts.isPropertyAccessExpression(expr.expression) &&
173
+ lowerer.stdlibGlobalMember(expr.expression, "process") === "versions") {
174
+ // versions.openssl answers the compat target's string for the same
175
+ // reason versions.node does: Boolean(versions.openssl) is Node's own
176
+ // "is crypto available" probe, and the crypto module exists here
177
+ // (unsupported members fence per site). SEMANTICS.md documents that
178
+ // the string names the compat target, not a linked library.
179
+ const loc = locOf(expr);
180
+ return lowerer.coerceToExpected({
181
+ kind: "dynKeyGet",
182
+ key: { kind: "strLit", value: expr.name.text, type: STRING, loc },
183
+ value: { kind: "libCall", fn: "process.versions", args: [], type: DYN, loc },
184
+ type: DYN,
185
+ loc,
186
+ }, STRING);
187
+ }
188
+ // Other components begin absent. Consult the same object even for the
189
+ // capability probes: users can define or delete their own entries.
190
+ if (ts.isPropertyAccessExpression(expr.expression) &&
191
+ lowerer.stdlibGlobalMember(expr.expression, "process") === "versions") {
192
+ const loc = locOf(expr);
193
+ return {
194
+ kind: "dynKeyGet",
195
+ key: { kind: "strLit", value: expr.name.text, type: STRING, loc },
196
+ value: { kind: "libCall", fn: "process.versions", args: [], type: DYN, loc },
197
+ type: DYN,
198
+ loc,
199
+ };
200
+ }
201
+ // The capability-probe members that honestly DON'T EXIST in a
202
+ // compiled binary — each reads undefined (their declared types carry
203
+ // the undefined arm), so feature probes take their documented
204
+ // fallbacks: no gyp build config (process.config.variables.* — no ICU,
205
+ // no QUIC — and process.config.target_defaults), no feature flags
206
+ // (process.features.* — no inspector, not a debug build).
207
+ if (!expr.questionDotToken && ts.isPropertyAccessExpression(expr.expression)) {
208
+ const container = lowerer.stdlibGlobalMember(expr.expression, "process");
209
+ if (container === "features") {
210
+ return { kind: "unitLit", unit: "undefined", type: UNDEFINED_T, loc: locOf(expr) };
211
+ }
212
+ if (container === "config" &&
213
+ (expr.name.text === "variables" || expr.name.text === "target_defaults")) {
214
+ // `target_defaults` reads undefined directly. `variables` only
215
+ // appears as the receiver of a member read — that OUTER access is
216
+ // the undefined answer (below); a bare `variables` value fences.
217
+ if (expr.name.text === "target_defaults") {
218
+ return { kind: "unitLit", unit: "undefined", type: UNDEFINED_T, loc: locOf(expr) };
219
+ }
220
+ }
221
+ // process.config.variables.<name> — the full chain.
222
+ if (ts.isPropertyAccessExpression(expr.expression.expression) &&
223
+ expr.expression.name.text === "variables" &&
224
+ lowerer.stdlibGlobalMember(expr.expression.expression, "process") === "config") {
225
+ return { kind: "unitLit", unit: "undefined", type: UNDEFINED_T, loc: locOf(expr) };
226
+ }
227
+ }
228
+ const member = lowerer.stdlibGlobalMember(expr, "process");
229
+ if (member === null)
230
+ return null;
231
+ const loc = locOf(expr);
232
+ if (member === "versions") {
233
+ return { kind: "libCall", fn: "process.versions", args: [], type: DYN, loc };
234
+ }
235
+ if (member === "hrtime") {
236
+ return { kind: "libCall", fn: "process.hrtimeValue", args: [], type: DYN, loc };
237
+ }
238
+ if (member === "getBuiltinModule") {
239
+ // Keep the native loader's argument validation when the function is
240
+ // stored. The declaration's string signature must not insert a checked
241
+ // adapter before the loader gets to report Node's invalid-id error.
242
+ return { kind: "dynFrom", value: lowerBuiltinLoaderValue(lowerer, loc), type: DYN, loc };
243
+ }
244
+ if (member === "argv") {
245
+ return { kind: "libCall", fn: "process.argv", args: [], type: arrayOf(STRING), loc };
246
+ }
247
+ if (member === "connected") {
248
+ return { kind: "libCall", fn: "process.connected", args: [], type: BOOL, loc };
249
+ }
250
+ // process.execArgv: the extra CLI arguments Node itself consumed — a
251
+ // compiled binary consumed none, so the honest answer is a fresh [].
252
+ if (member === "execArgv") {
253
+ return { kind: "arrayLit", elems: [], type: arrayOf(STRING), loc };
254
+ }
255
+ // process._exiting — the runtime's exit-sequence flag (true while
256
+ // 'exit' listeners run), Node's own undocumented member.
257
+ if (member === "_exiting") {
258
+ return { kind: "libCall", fn: "process.exiting", args: [], type: BOOL, loc };
259
+ }
260
+ if (member === "platform") {
261
+ return { kind: "libCall", fn: "process.platform", args: [], type: STRING, loc };
262
+ }
263
+ // process.arch: the compiled binary's OWN architecture ("arm64",
264
+ // "x64") — the same answer Node gives for its own build on the same
265
+ // machine.
266
+ if (member === "arch") {
267
+ return { kind: "libCall", fn: "process.arch", args: [], type: STRING, loc };
268
+ }
269
+ if (member === "pid") {
270
+ return { kind: "libCall", fn: "process.pid", args: [], type: F64, loc };
271
+ }
272
+ // process.execPath: the compiled binary's own resolved absolute path —
273
+ // the honest answer where Node's is the node executable's (SEMANTICS.md
274
+ // divergence 12, the argv[0]/argv[1] precedent).
275
+ if (member === "execPath") {
276
+ return { kind: "libCall", fn: "process.execPath", args: [], type: STRING, loc };
277
+ }
278
+ if (member === "env") {
279
+ const mapped = lowerer.mapTypeOf(lowerer.typeOf(expr));
280
+ if (mapped?.kind === "record") {
281
+ const helper = envSnapshotHelper(lowerer, mapped.shapeId, loc);
282
+ if (helper !== null) {
283
+ return { kind: "call", callee: helper, args: [], type: mapped, loc };
284
+ }
285
+ }
286
+ lowerer.unsupported("SC1090", expr, "process.env as a value of this type (read one variable: process.env.NAME or process.env[name])");
287
+ }
288
+ if (member === "exit" || member === "cwd" || member === "getuid" || member === "kill") {
289
+ lowerer.unsupported("SC1090", expr, `process methods as values (call '${member}' directly)`);
290
+ }
291
+ // process.stdout / process.stderr as first-class VALUES (flowing into
292
+ // a `NodeJS.WritableStream` slot — the prefixStream idiom): the
293
+ // procStream scalar, minted as the stream's fd. Member reads
294
+ // (`process.stdout.isTTY`, `.write(...)`) never reach here — their
295
+ // OUTER expressions dispatch first.
296
+ if (member === "stdin" ||
297
+ ((member === "stdout" || member === "stderr") && isJsSourceFile(expr.getSourceFile()))) {
298
+ return {
299
+ kind: "libCall",
300
+ fn: "process.stdio",
301
+ args: [numLit(member === "stdin" ? 0 : member === "stdout" ? 1 : 2, loc)],
302
+ type: DYN,
303
+ loc,
304
+ };
305
+ }
306
+ if (member === "stdout" || member === "stderr") {
307
+ return { kind: "numLit", value: member === "stdout" ? 1 : 2, type: PROCSTREAM_T, loc };
308
+ }
309
+ // Other members: type errors under the fallback declarations; with
310
+ // @types/node they typecheck and fall through to stdlibMemberFence
311
+ // (SC2020 naming process.<member>, with the console.log hint for
312
+ // stdout/stderr).
313
+ return null;
314
+ }
315
+ /** `process.exit(code)` / `process.cwd()` → libCall. The fallback
316
+ * declaration makes exit's code required; @types/node declares it
317
+ * optional. A bare `process.exit()` uses the current exitCode, or zero
318
+ * when unset. */
319
+ export function lowerProcessMethodCall(lowerer, call, access) {
320
+ if (call.questionDotToken)
321
+ return null;
322
+ if (isJsSourceFile(call.getSourceFile()) && ts.isPropertyAccessExpression(access.expression)) {
323
+ const stream = lowerer.stdlibGlobalMember(access.expression, "process");
324
+ if (stream === "stdin" || stream === "stdout" || stream === "stderr") {
325
+ if (call.arguments.some(ts.isSpreadElement))
326
+ lowerer.noLowering("process stream spread arguments", call);
327
+ return {
328
+ kind: "dynInvoke",
329
+ recv: lowerer.lowerExpr(access.expression),
330
+ method: access.name.text,
331
+ calleeName: access.getText(),
332
+ args: call.arguments.map((arg) => lowerer.lowerExprExpecting(arg, DYN)),
333
+ type: DYN,
334
+ loc: locOf(call),
335
+ };
336
+ }
337
+ }
338
+ const directProcessMember = lowerer.stdlibGlobalMember(access, "process");
339
+ if (directProcessMember === "loadEnvFile")
340
+ return lowerProcessLoadEnvFile(lowerer, call);
341
+ if (directProcessMember === "hrtime") {
342
+ if (call.arguments.some(ts.isSpreadElement))
343
+ lowerer.noLowering("process.hrtime with spread arguments", call);
344
+ const loc = locOf(call);
345
+ return {
346
+ kind: "dynCall",
347
+ callee: { kind: "libCall", fn: "process.hrtimeValue", args: [], type: DYN, loc },
348
+ args: call.arguments.map((arg) => lowerer.lowerExprExpecting(arg, DYN)),
349
+ calleeName: "process.hrtime",
350
+ type: DYN,
351
+ loc,
352
+ };
353
+ }
354
+ if (directProcessMember === "getBuiltinModule") {
355
+ if (call.arguments.some(ts.isSpreadElement))
356
+ lowerer.noLowering("process.getBuiltinModule with spread arguments", call);
357
+ const loc = locOf(call);
358
+ const id = call.arguments[0]
359
+ ? lowerer.lowerExprExpecting(call.arguments[0], DYN)
360
+ : dynUndefinedExpr(loc);
361
+ const binding = lowerer.declareHiddenLocal("%builtinId", DYN);
362
+ return {
363
+ kind: "seqExpr",
364
+ stmts: [
365
+ { kind: "varDecl", localId: binding.id, init: id, loc },
366
+ ...call.arguments.slice(1).map((arg) => ({
367
+ kind: "exprStmt",
368
+ expr: lowerer.lowerExpr(arg),
369
+ loc: locOf(arg),
370
+ })),
371
+ ],
372
+ result: {
373
+ kind: "callValue",
374
+ callee: lowerBuiltinLoaderValue(lowerer, loc),
375
+ args: [varRef(binding.id, DYN, loc)],
376
+ type: DYN,
377
+ loc,
378
+ },
379
+ type: DYN,
380
+ loc,
381
+ };
382
+ }
383
+ if (directProcessMember === "send")
384
+ return lowerProcessIpcSend(lowerer, call);
385
+ if (directProcessMember === "disconnect") {
386
+ if (call.arguments.length !== 0) {
387
+ lowerer.noLowering(`process.disconnect with ${call.arguments.length} arguments`, call);
388
+ }
389
+ if (!ts.isExpressionStatement(call.parent)) {
390
+ lowerer.unsupported("SC1090", call, "using the result of process.disconnect() (call it as its own statement)");
391
+ }
392
+ return { kind: "libCall", fn: "process.disconnect", args: [], type: VOID, loc: locOf(call) };
393
+ }
394
+ // process.stdout.write(s[, encoding][, callback]) and stderr's twin:
395
+ // raw bytes, no newline or formatting. stdout shares console.log's
396
+ // promptly-submitted stream, preserving source order. Node's boolean
397
+ // is a backpressure signal; this synchronous write is constantly true.
398
+ // String encodings are compile-time-known BufferEncoding spellings;
399
+ // byte chunks evaluate but ignore the encoding like Node. Completion
400
+ // callbacks ride the next-tick queue and receive the success `null`.
401
+ // process.stdin.destroy(): a deliberate no-op — no stream machinery
402
+ // exists to tear down, and no other stdin surface observes the
403
+ // destroyed state (SEMANTICS.md documents it).
404
+ if (access.name.text === "destroy" &&
405
+ ts.isPropertyAccessExpression(access.expression) &&
406
+ lowerer.stdlibGlobalMember(access.expression, "process") === "stdin") {
407
+ if (call.arguments.length !== 0) {
408
+ lowerer.noLowering("stdin.destroy with arguments", call);
409
+ }
410
+ return { kind: "libCall", fn: "process.stdinDestroy", args: [], type: VOID, loc: locOf(call) };
411
+ }
412
+ // process.stdin.setRawMode(mode): termios raw mode when stdin IS a
413
+ // TTY (libuv's UV_TTY_MODE_RAW — the flag set Node applies; false
414
+ // restores the entry state). When stdin is NOT a TTY, Node's
415
+ // process.stdin is a Socket with no setRawMode member at all, so the
416
+ // call throws Node's exact catchable TypeError — the portless
417
+ // exit-hook wraps it in try/catch and relies on exactly that. Node
418
+ // returns `this` for chaining; that composition has no lowering, so
419
+ // statement position (or a concise arrow body) is required.
420
+ if (access.name.text === "setRawMode" &&
421
+ ts.isPropertyAccessExpression(access.expression) &&
422
+ lowerer.stdlibGlobalMember(access.expression, "process") === "stdin") {
423
+ const loc = locOf(call);
424
+ if (!ts.isExpressionStatement(call.parent) && !ts.isArrowFunction(call.parent)) {
425
+ lowerer.unsupported("SC1090", call, "using the result of stdin.setRawMode(...) (the ReadStream chain — call it as its own statement)");
426
+ }
427
+ if (call.arguments.length !== 1) {
428
+ lowerer.noLowering(`stdin.setRawMode with ${call.arguments.length} arguments`, call, "the supported form is setRawMode(mode) with one boolean");
429
+ }
430
+ const mode = lowerer.lowerExpr(call.arguments[0]);
431
+ if (mode.type.kind !== "bool") {
432
+ lowerer.noLowering(`stdin.setRawMode of '${lowerer.fmt(mode.type)}' modes`, call.arguments[0], "the mode is a boolean here — narrow unions first");
433
+ }
434
+ return { kind: "libCall", fn: "process.stdinSetRawMode", args: [mode], type: VOID, loc };
435
+ }
436
+ // process.stdin.on/once("data" | "end" | "error", cb): the piped-stdin
437
+ // event slice. A 'data' listener keeps the event loop alive until EOF
438
+ // (Node's flowing stdin); 'end'/'error' listeners alone do not. `once`
439
+ // auto-removes after the first delivery. Listener shapes are pinned
440
+ // per event — the runtime adapters cover exactly these.
441
+ if ((access.name.text === "on" || access.name.text === "once") &&
442
+ ts.isPropertyAccessExpression(access.expression) &&
443
+ lowerer.stdlibGlobalMember(access.expression, "process") === "stdin") {
444
+ const loc = locOf(call);
445
+ const once = access.name.text === "once";
446
+ if (call.arguments.length !== 2) {
447
+ lowerer.noLowering(`stdin.${access.name.text} with ${call.arguments.length} arguments`, call);
448
+ }
449
+ const evT = lowerer.typeOf(call.arguments[0]);
450
+ const event = evT.isStringLiteralType() ? evT.value : null;
451
+ if (event !== "data" && event !== "end" && event !== "error") {
452
+ lowerer.noLowering(`stdin.${access.name.text}(${event === null ? "non-literal event" : `"${event}"`}, ...)`, call.arguments[0], '"data", "end", and "error" are the supported stdin events (as literals)');
453
+ }
454
+ if (!ts.isExpressionStatement(call.parent)) {
455
+ lowerer.unsupported("SC1090", call, "chaining stdin listener registration (the result is void here — register each listener as its own statement)");
456
+ }
457
+ const cb = lowerer.lowerExpr(call.arguments[1]);
458
+ if (cb.type.kind !== "func" || cb.type.ret.kind !== "void" || cb.type.params.length > 1) {
459
+ lowerer.unsupported("SC1090", call.arguments[1], "stdin listeners with more than one parameter or a return value");
460
+ }
461
+ const param = cb.type.params[0];
462
+ const onceArg = { kind: "boolLit", value: once, type: BOOL, loc };
463
+ if (event === "data") {
464
+ if (param !== undefined && !(param.kind === "bytes" && param.elem === "u8")) {
465
+ lowerer.unsupported("SC1090", call.arguments[1], `data listeners whose parameter is not 'Uint8Array' (got '${lowerer.fmt(param)}')`);
466
+ }
467
+ return { kind: "libCall", fn: "stdin.onData", args: [cb, onceArg], type: VOID, loc };
468
+ }
469
+ if (event === "end") {
470
+ if (param !== undefined) {
471
+ lowerer.unsupported("SC1090", call.arguments[1], "end listeners with parameters (use ())");
472
+ }
473
+ return { kind: "libCall", fn: "stdin.onEnd", args: [cb, onceArg], type: VOID, loc };
474
+ }
475
+ if (param !== undefined && !(param.kind === "object" && param.className === "%Error")) {
476
+ lowerer.unsupported("SC1090", call.arguments[1], `error listeners whose parameter is not 'Error' (got '${lowerer.fmt(param)}')`);
477
+ }
478
+ return { kind: "libCall", fn: "stdin.onError", args: [cb, onceArg], type: VOID, loc };
479
+ }
480
+ if (access.name.text === "write" && ts.isPropertyAccessExpression(access.expression)) {
481
+ const stream = lowerer.stdlibGlobalMember(access.expression, "process");
482
+ if (stream === "stdout" || stream === "stderr") {
483
+ const loc = locOf(call);
484
+ const args = call.arguments;
485
+ if (args.length < 1 || args.length > 3 || args.some(ts.isSpreadElement)) {
486
+ lowerer.noLowering(`process.${stream}.write with ${args.length} arguments`, call, "the supported forms are write(data[, encoding][, callback]) with a static BufferEncoding and completion callback");
487
+ }
488
+ const secondNode = args[1];
489
+ const thirdNode = args[2];
490
+ const secondUndefined = secondNode
491
+ ? lowerStaticallyUndefinedArgument(lowerer, secondNode)
492
+ : null;
493
+ const thirdUndefined = thirdNode
494
+ ? lowerStaticallyUndefinedArgument(lowerer, thirdNode)
495
+ : null;
496
+ const secondT = secondNode && !secondUndefined ? lowerer.mapTypeOf(lowerer.typeOf(secondNode)) : undefined;
497
+ const callbackNode = args.length === 3 && !thirdUndefined
498
+ ? thirdNode
499
+ : args.length === 2 && secondT?.kind === "func"
500
+ ? secondNode
501
+ : undefined;
502
+ const encodingNode = (args.length === 3 || (args.length === 2 && callbackNode === undefined)) && !secondUndefined
503
+ ? secondNode
504
+ : undefined;
505
+ // Node's BufferEncoding aliases normalize before bytes are made.
506
+ // Preserve an effectful literal-typed expression even when its
507
+ // spelling folds (for example a function returning `"binary"`).
508
+ const encoding = (() => {
509
+ const defaultEncoding = {
510
+ kind: "strLit",
511
+ value: "utf8",
512
+ type: STRING,
513
+ loc,
514
+ };
515
+ if (secondUndefined) {
516
+ return defaultAfterUndefined(secondUndefined, defaultEncoding);
517
+ }
518
+ if (!encodingNode) {
519
+ return defaultEncoding;
520
+ }
521
+ const aliases = {
522
+ utf8: "utf8",
523
+ "utf-8": "utf8",
524
+ hex: "hex",
525
+ base64: "base64",
526
+ base64url: "base64url",
527
+ latin1: "latin1",
528
+ binary: "latin1",
529
+ ascii: "ascii",
530
+ utf16le: "utf16le",
531
+ "utf-16le": "utf16le",
532
+ ucs2: "utf16le",
533
+ "ucs-2": "utf16le",
534
+ };
535
+ const t = lowerer.typeOf(encodingNode);
536
+ const raw = t.isStringLiteralType() ? t.value : undefined;
537
+ const canonical = raw !== undefined ? own(aliases, raw) : undefined;
538
+ if (canonical === undefined) {
539
+ lowerer.noLowering(`process.${stream}.write with this encoding`, encodingNode, 'use a literal "utf8", "hex", "base64", "base64url", "latin1", "binary", "ascii", "utf16le", or "ucs2" encoding');
540
+ }
541
+ const evaluated = lowerer.lowerExprExpecting(encodingNode, STRING);
542
+ if (canonical === raw)
543
+ return evaluated;
544
+ const normalized = {
545
+ kind: "strLit",
546
+ value: canonical,
547
+ type: STRING,
548
+ loc: locOf(encodingNode),
549
+ };
550
+ return isSafeToDiscard(evaluated)
551
+ ? normalized
552
+ : {
553
+ kind: "seqExpr",
554
+ stmts: [{ kind: "exprStmt", expr: evaluated, loc: evaluated.loc }],
555
+ result: normalized,
556
+ type: STRING,
557
+ loc: evaluated.loc,
558
+ };
559
+ })();
560
+ let data = lowerer.lowerExpr(args[0]);
561
+ // A checked-dynamic argument in a JS file takes the validated
562
+ // string exit (the trust-but-verify boundary: commander's
563
+ // `writeOut: (str) => process.stdout.write(str)` — str untyped):
564
+ // a runtime string writes; anything else throws the dynCheck's
565
+ // honest TypeError at the call.
566
+ if (data.type.kind === "dyn" && isJsSourceFile(call.getSourceFile())) {
567
+ data = { kind: "dynCheck", value: data, type: STRING, loc };
568
+ }
569
+ const isBytes = data.type.kind === "bytes" && data.type.elem === "u8";
570
+ if (!isBytes && data.type.kind !== "string") {
571
+ lowerer.noLowering(`process.${stream}.write of non-string data`, args[0], "strings and Buffer/Uint8Array values write; narrow unions first");
572
+ }
573
+ let callback;
574
+ if (callbackNode) {
575
+ callback = lowerer.lowerExpr(callbackNode);
576
+ if (callback.type.kind === "dyn" && isJsSourceFile(call.getSourceFile())) {
577
+ callback = {
578
+ kind: "dynCheck",
579
+ value: callback,
580
+ type: funcOf([DYN], VOID),
581
+ loc: locOf(callbackNode),
582
+ };
583
+ }
584
+ let callbackOk = callback.type.kind === "func" && callback.type.params.length <= 1;
585
+ if (callbackOk && callback.type.kind === "func" && callback.type.params.length === 1) {
586
+ const param = callback.type.params[0];
587
+ if (param.kind !== "dyn") {
588
+ const def = param.kind === "union" ? lowerer.unions.get(param.unionId) : undefined;
589
+ callbackOk =
590
+ !!def &&
591
+ def.arms.some((a) => a.kind === "nullT") &&
592
+ def.arms.some((a) => a.kind === "object" && a.className === "%Error") &&
593
+ def.arms.every((a) => a.kind === "nullT" ||
594
+ a.kind === "undefinedT" ||
595
+ (a.kind === "object" && a.className === "%Error"));
596
+ }
597
+ }
598
+ if (!callbackOk) {
599
+ lowerer.unsupported("SC1090", callbackNode, "process output completion callbacks must accept at most one Error | null parameter");
600
+ }
601
+ callback = voidizedCallback(lowerer, callback, locOf(callbackNode));
602
+ }
603
+ // Encoding- or callback-bearing writes use one fixed byte ABI. For
604
+ // strings, Buffer.from's encoder runs after data/encoding evaluation
605
+ // and before the callback expression; only its pure allocation moves
606
+ // earlier than Node's internal write conversion.
607
+ if (callback || args.length > 1 || isBytes) {
608
+ const bytes = isBytes
609
+ ? data
610
+ : {
611
+ kind: "libCall",
612
+ fn: "buffer.fromStr",
613
+ args: [data, encoding],
614
+ type: BYTES_U8,
615
+ loc,
616
+ };
617
+ const defaultRuntimeEncoding = {
618
+ kind: "strLit",
619
+ value: "utf8",
620
+ type: STRING,
621
+ loc,
622
+ };
623
+ let runtimeEncoding = isBytes ? encoding : defaultRuntimeEncoding;
624
+ // An explicitly-undefined third argument is still evaluated after
625
+ // data and encoding, even though it schedules no callback. Strings
626
+ // already evaluate encoding while producing `bytes`; byte chunks
627
+ // fold both ignored argument effects into this final ABI slot.
628
+ if (thirdUndefined && !isSafeToDiscard(thirdUndefined)) {
629
+ const effects = isBytes
630
+ ? [encoding, thirdUndefined].filter((effect) => !isSafeToDiscard(effect))
631
+ : [thirdUndefined];
632
+ runtimeEncoding = {
633
+ kind: "seqExpr",
634
+ stmts: effects.map((effect) => ({ kind: "exprStmt", expr: effect, loc: effect.loc })),
635
+ result: defaultRuntimeEncoding,
636
+ type: STRING,
637
+ loc: thirdUndefined.loc,
638
+ };
639
+ }
640
+ if (callback) {
641
+ return {
642
+ kind: "libCall",
643
+ fn: stream === "stdout" ? "process.stdoutWriteBytesCb" : "process.stderrWriteBytesCb",
644
+ args: [bytes, runtimeEncoding, callback],
645
+ type: BOOL,
646
+ loc,
647
+ };
648
+ }
649
+ return {
650
+ kind: "libCall",
651
+ fn: stream === "stdout" ? "process.stdoutWriteBytes" : "process.stderrWriteBytes",
652
+ args: [bytes, runtimeEncoding],
653
+ type: BOOL,
654
+ loc,
655
+ };
656
+ }
657
+ return {
658
+ kind: "libCall",
659
+ fn: stream === "stdout" ? "process.stdoutWrite" : "process.stderrWrite",
660
+ args: [data],
661
+ type: BOOL,
662
+ loc,
663
+ };
664
+ }
665
+ }
666
+ const member = lowerer.stdlibGlobalMember(access, "process");
667
+ if (member === null)
668
+ return null;
669
+ const loc = locOf(call);
670
+ // process.on/once/off: the CLI event slice — named OS
671
+ // signal handlers and the 'exit' hook. Signal listeners run as
672
+ // macrotasks at loop turns, replace the default disposition while
673
+ // registered (removing the last restores Ctrl-C death), and never
674
+ // keep the loop alive; 'exit' listeners run synchronously at
675
+ // termination (normal exit, process.exit, the exit-1 paths) with the
676
+ // exit code. `once` auto-removes; `off` removes by identity (bind
677
+ // the listener to a const so both sites see the same value), and
678
+ // `removeListener` IS `off` — Node aliases them.
679
+ const isOff = member === "off" || member === "removeListener";
680
+ if (member === "on" || member === "once" || isOff) {
681
+ if (call.arguments.length !== 2) {
682
+ lowerer.noLowering(`process.${member} with ${call.arguments.length} arguments`, call);
683
+ }
684
+ const evT = lowerer.typeOf(call.arguments[0]);
685
+ const event = evT.isStringLiteralType() ? evT.value : null;
686
+ if ((event === "message" || event === "disconnect") && !isOff) {
687
+ if (!ts.isExpressionStatement(call.parent)) {
688
+ lowerer.unsupported("SC1090", call, "chaining process IPC listener registration (register each listener as its own statement)");
689
+ }
690
+ const callback = event === "message"
691
+ ? ipcMessageListener(lowerer, call.arguments[1])
692
+ : ipcDisconnectListener(lowerer, call.arguments[1]);
693
+ return {
694
+ kind: "libCall",
695
+ fn: event === "message" ? "process.onMessage" : "process.onDisconnect",
696
+ args: [callback, boolLit(member === "once", loc)],
697
+ type: VOID,
698
+ loc,
699
+ };
700
+ }
701
+ if (event === "uncaughtException" || event === "uncaughtExceptionMonitor") {
702
+ if (!ts.isExpressionStatement(call.parent)) {
703
+ lowerer.unsupported("SC1090", call, "chaining process exception listener registration");
704
+ }
705
+ const cb = lowerDiagnosticsSubscriber(lowerer, call.arguments[1]);
706
+ const monitor = boolLit(event === "uncaughtExceptionMonitor", loc);
707
+ return {
708
+ kind: "libCall",
709
+ fn: isOff ? "process.offUncaughtException" : "process.onUncaughtException",
710
+ args: isOff ? [cb, monitor] : [cb, boolLit(member === "once", loc), monitor],
711
+ type: VOID,
712
+ loc,
713
+ };
714
+ }
715
+ // 'unhandledRejection': the listener crosses as a dyn function and
716
+ // the completed-checkpoint report dispatches it (reason, promise) per
717
+ // never-observed rejection instead of printing and exiting 1
718
+ // (scr_async.c). `once` auto-removes after one delivery and
719
+ // `off`/`removeListener` remove by closure identity — the warning
720
+ // registry's story. 'rejectionHandled' is the sibling registry:
721
+ // a handler attached after delivery fires it once, synchronously
722
+ // with the promise.
723
+ if (event === "unhandledRejection" || event === "rejectionHandled") {
724
+ if (!ts.isExpressionStatement(call.parent)) {
725
+ lowerer.unsupported("SC1090", call, "chaining process listener registration (the result is void here — register each listener as its own statement)");
726
+ }
727
+ const cb = lowerDiagnosticsSubscriber(lowerer, call.arguments[1]);
728
+ const onceArg = { kind: "boolLit", value: member === "once", type: BOOL, loc };
729
+ const fn = event === "unhandledRejection"
730
+ ? isOff
731
+ ? "process.offUnhandledRejection"
732
+ : "process.onUnhandledRejection"
733
+ : isOff
734
+ ? "process.offRejectionHandled"
735
+ : "process.onRejectionHandled";
736
+ return { kind: "libCall", fn, args: isOff ? [cb] : [cb, onceArg], type: VOID, loc };
737
+ }
738
+ // 'warning': the listener crosses as a dyn function; emitWarning
739
+ // and the runtime deprecation sites dispatch synchronously
740
+ // (SEMANTICS.md). off/removeListener remove by closure identity.
741
+ if (event === "warning" && (member === "on" || isOff)) {
742
+ if (!ts.isExpressionStatement(call.parent)) {
743
+ lowerer.unsupported("SC1090", call, "chaining process listener registration (the result is void here — register each listener as its own statement)");
744
+ }
745
+ const cb = lowerDiagnosticsSubscriber(lowerer, call.arguments[1]);
746
+ return {
747
+ kind: "libCall",
748
+ fn: isOff ? "process.offWarning" : "process.onWarning",
749
+ args: [cb],
750
+ type: VOID,
751
+ loc,
752
+ };
753
+ }
754
+ if (event === null || event.startsWith("SIG")) {
755
+ if (!ts.isExpressionStatement(call.parent)) {
756
+ lowerer.unsupported("SC1090", call, "chaining process signal listener registration");
757
+ }
758
+ const name = lowerer.coerceToExpected(lowerer.lowerExpr(call.arguments[0]), STRING);
759
+ if (name.type.kind !== "string" && name.type.kind !== "dyn") {
760
+ lowerer.noLowering("process signal event name that is not a string", call.arguments[0]);
761
+ }
762
+ const signal = name.type.kind === "string"
763
+ ? name
764
+ : { kind: "dynCheck", value: name, type: STRING, loc };
765
+ const cb = lowerDiagnosticsSubscriber(lowerer, call.arguments[1]);
766
+ return {
767
+ kind: "libCall",
768
+ fn: isOff ? "process.offSignal" : "process.onSignal",
769
+ args: isOff ? [signal, cb] : [signal, cb, boolLit(member === "once", loc)],
770
+ type: VOID,
771
+ loc,
772
+ };
773
+ }
774
+ if (event !== "exit") {
775
+ lowerer.noLowering(`process.${member}("${event}", ...)`, call.arguments[0]);
776
+ }
777
+ if (!ts.isExpressionStatement(call.parent)) {
778
+ lowerer.unsupported("SC1090", call, "chaining process listener registration (the result is void here — register each listener as its own statement)");
779
+ }
780
+ let cb = lowerer.lowerExpr(call.arguments[1]);
781
+ // The checked-dynamic listener (test/common's `process.on('exit',
782
+ // runCallChecks)` — an implicit-any JS function, func(dyn)=>dyn, or
783
+ // a dyn VALUE that rode an untyped binding): adapt through the dyn
784
+ // function boundary to the registry's exact shape — box (dynFrom)
785
+ // when needed, then dynCheck into (number)=>void / ()=>void. The
786
+ // adapter delivers the exit code as a dyn argument and releases the
787
+ // result; a non-function dyn value throws the catchable TypeError
788
+ // at REGISTRATION (Node's ERR_INVALID_ARG_TYPE moment).
789
+ {
790
+ const target = funcOf([F64], VOID);
791
+ const exact = cb.type.kind === "func" &&
792
+ cb.type.ret.kind === "void" &&
793
+ cb.type.params.length <= 1 &&
794
+ (cb.type.params[0] === undefined || cb.type.params[0].kind === "f64");
795
+ if (!exact) {
796
+ if (cb.type.kind === "dyn") {
797
+ cb = { kind: "dynCheck", value: cb, type: target, loc };
798
+ }
799
+ else if (cb.type.kind === "func" &&
800
+ canBoxFuncIntoDyn(cb.type, (id) => lowerer.shapes.get(id), (id) => lowerer.unions.get(id))) {
801
+ cb = {
802
+ kind: "dynCheck",
803
+ value: { kind: "dynFrom", value: cb, type: DYN, loc },
804
+ type: target,
805
+ loc,
806
+ };
807
+ }
808
+ }
809
+ }
810
+ if (cb.type.kind !== "func" || cb.type.ret.kind !== "void" || cb.type.params.length > 1) {
811
+ lowerer.unsupported("SC1090", call.arguments[1], "process listeners with more than one parameter or a return value");
812
+ }
813
+ const param = cb.type.params[0];
814
+ const onceArg = { kind: "boolLit", value: member === "once", type: BOOL, loc };
815
+ if (param !== undefined && param.kind !== "f64") {
816
+ lowerer.unsupported("SC1090", call.arguments[1], `exit listeners whose parameter is not 'number' (got '${lowerer.fmt(param)}')`);
817
+ }
818
+ if (isOff) {
819
+ return { kind: "libCall", fn: "process.offExit", args: [cb], type: VOID, loc };
820
+ }
821
+ return { kind: "libCall", fn: "process.onExit", args: [cb, onceArg], type: VOID, loc };
822
+ }
823
+ // process.emitWarning(...): the argument vector crosses as ONE dyn
824
+ // array and the runtime applies Node's full grammar (string or Error
825
+ // warning; type/ctor/options second; code/ctor third — wrong kinds
826
+ // throw ERR_INVALID_ARG_TYPE). A single SPREAD of a checked-dynamic
827
+ // array passes that array directly (the suite's forEach-spread
828
+ // shape: `.forEach((args) => process.emitWarning(...args))`).
829
+ if (member === "emitWarning") {
830
+ let argsArr = null;
831
+ if (call.arguments.length === 1 && ts.isSpreadElement(call.arguments[0])) {
832
+ const spread = lowerer.lowerExpr(call.arguments[0].expression);
833
+ if (spread.type.kind === "dyn") {
834
+ argsArr = spread;
835
+ }
836
+ else {
837
+ lowerer.noLowering("process.emitWarning with a typed spread argument", call.arguments[0], "spread an untyped (checked-dynamic) array, or write the arguments positionally");
838
+ }
839
+ }
840
+ else {
841
+ argsArr = lowerTracingArguments(lowerer, call.arguments, loc);
842
+ }
843
+ return { kind: "libCall", fn: "process.emitWarning", args: [argsArr], type: VOID, loc };
844
+ }
845
+ if (member === "cwd") {
846
+ return { kind: "libCall", fn: "process.cwd", args: [], type: STRING, loc };
847
+ }
848
+ // process.nextTick(cb, ...args): the user tick queue — callbacks
849
+ // drain before promise jobs at every loop checkpoint (Node's tick-
850
+ // then-microtask order; the station-time divergence for ticks
851
+ // scheduled by station listeners is SEMANTICS.md territory). The
852
+ // callback adapts exactly like setImmediate's: zero-param passes
853
+ // through, boxable parameterized shapes ride the checked-dynamic
854
+ // boundary, trailing call arguments ride the interned dyn thunk.
855
+ if (member === "nextTick") {
856
+ if (call.arguments.length === 0) {
857
+ lowerer.noLowering("process.nextTick with 0 arguments", call, "the supported form is process.nextTick(callback, ...args)");
858
+ }
859
+ const cb = timerStyleCallback(lowerer, call.arguments, "process.nextTick", loc);
860
+ return { kind: "libCall", fn: "process.nextTick", args: [cb], type: VOID, loc };
861
+ }
862
+ // The process introspection statics — plain reads of the process's
863
+ // own clocks and counters, Node's shapes exactly.
864
+ if (member === "uptime" || member === "availableMemory" || member === "constrainedMemory") {
865
+ if (call.arguments.length !== 0) {
866
+ lowerer.noLowering(`process.${member} with ${call.arguments.length} arguments`, call);
867
+ }
868
+ const fn = member === "uptime"
869
+ ? "process.uptime"
870
+ : member === "availableMemory"
871
+ ? "process.availableMemory"
872
+ : "process.constrainedMemory";
873
+ return { kind: "libCall", fn, args: [], type: F64, loc };
874
+ }
875
+ // process.cpuUsage(prev?) / process.threadCpuUsage(prev?) — the
876
+ // {user, system} microsecond records (getrusage / the thread clock).
877
+ // The prev form validates Node-style (prevValue.user then .system,
878
+ // the ERR_INVALID_ARG_VALUE RangeError with the received number) and
879
+ // answers the per-field diffs; the record evaluates ONCE through an
880
+ // interned helper (the X509Certificate precedent). Typed non-record
881
+ // prevs (Node's ERR_INVALID_ARG_TYPE shapes) keep a pointed fence.
882
+ if (member === "cpuUsage" || member === "threadCpuUsage") {
883
+ const prefix = member === "cpuUsage" ? "cpu" : "threadCpu";
884
+ const t = lowerer.mapTypeOf(lowerer.typeOf(call));
885
+ if (t?.kind !== "record")
886
+ lowerer.badType(call, lowerer.typeOf(call));
887
+ const shape = lowerer.shapes.get(t.shapeId);
888
+ if (!shape || shape.fields.length !== 2 || !shape.fields.every((f) => f.type.kind === "f64")) {
889
+ lowerer.badType(call, lowerer.typeOf(call));
890
+ }
891
+ const sampleField = (name) => ({
892
+ kind: "libCall",
893
+ fn: (name === "user" ? `process.${prefix}User` : `process.${prefix}System`),
894
+ args: [],
895
+ type: F64,
896
+ loc,
897
+ });
898
+ if (call.arguments.length === 0) {
899
+ return {
900
+ kind: "recordLit",
901
+ fields: shape.fields.map((f) => ({ name: f.name, value: sampleField(f.name) })),
902
+ type: t,
903
+ loc,
904
+ };
905
+ }
906
+ if (call.arguments.length !== 1) {
907
+ lowerer.noLowering(`process.${member} with ${call.arguments.length} arguments`, call);
908
+ }
909
+ const prev = lowerer.lowerExpr(call.arguments[0]);
910
+ const prevShape = prev.type.kind === "record" ? lowerer.shapes.get(prev.type.shapeId) : undefined;
911
+ const prevOk = prevShape !== undefined &&
912
+ ["user", "system"].every((n) => prevShape.fields.some((f) => f.name === n && f.type.kind === "f64"));
913
+ if (prev.type.kind !== "record" || !prevOk) {
914
+ lowerer.noLowering(`process.${member} of a '${lowerer.fmt(prev.type)}' previous value`, call.arguments[0], "the previous value is the record a prior call answered ({ user, system } numbers) — Node's ERR_INVALID_ARG_TYPE shapes have no lowering");
915
+ }
916
+ const prevT = prev.type;
917
+ const key = `${prefix}usage.diff:${prevT.shapeId}:${t.shapeId}`;
918
+ let helper = lowerer.valueHelpers.get(key);
919
+ if (!helper) {
920
+ helper = `%${prefix}usage.diff.${lowerer.valueHelpers.size}`;
921
+ lowerer.valueHelpers.set(key, helper);
922
+ const pRef = { kind: "varRef", localId: "p.0", type: prevT, loc };
923
+ const fieldOf = (name) => ({
924
+ kind: "recordGet",
925
+ obj: pRef,
926
+ shapeId: prevT.shapeId,
927
+ field: name,
928
+ type: F64,
929
+ loc,
930
+ });
931
+ const diffField = (name) => ({
932
+ kind: "libCall",
933
+ fn: (name === "user"
934
+ ? `process.${prefix}UserDiff`
935
+ : `process.${prefix}SystemDiff`),
936
+ args: [fieldOf(name)],
937
+ type: F64,
938
+ loc,
939
+ });
940
+ lowerer.liftedFns.push({
941
+ name: helper,
942
+ params: [{ localId: "p.0", name: "p", type: prevT }],
943
+ returnType: t,
944
+ locals: [{ id: "p.0", name: "p", type: prevT, mutable: false }],
945
+ body: [
946
+ // Node validates prevValue.user THEN prevValue.system, before
947
+ // any sampling — the RangeError order the suite pins.
948
+ {
949
+ kind: "exprStmt",
950
+ expr: {
951
+ kind: "libCall",
952
+ fn: "process.cpuPrevValidate",
953
+ args: [fieldOf("user"), fieldOf("system")],
954
+ type: VOID,
955
+ loc,
956
+ },
957
+ loc,
958
+ },
959
+ {
960
+ kind: "return",
961
+ value: {
962
+ kind: "recordLit",
963
+ fields: shape.fields.map((f) => ({ name: f.name, value: diffField(f.name) })),
964
+ type: t,
965
+ loc,
966
+ },
967
+ loc,
968
+ },
969
+ ],
970
+ loc,
971
+ });
972
+ }
973
+ return { kind: "call", callee: helper, args: [prev], type: t, loc };
974
+ }
975
+ // process.resourceUsage() — getrusage's 16 fields in Node's names and
976
+ // units (CPU times in microseconds, maxRSS in kilobytes).
977
+ if (member === "resourceUsage") {
978
+ if (call.arguments.length !== 0) {
979
+ lowerer.noLowering(`process.resourceUsage with ${call.arguments.length} arguments`, call);
980
+ }
981
+ const t = lowerer.mapTypeOf(lowerer.typeOf(call));
982
+ if (t?.kind !== "record")
983
+ lowerer.badType(call, lowerer.typeOf(call));
984
+ const shape = lowerer.shapes.get(t.shapeId);
985
+ const RUSAGE_FIELDS = [
986
+ "userCPUTime",
987
+ "systemCPUTime",
988
+ "maxRSS",
989
+ "sharedMemorySize",
990
+ "unsharedDataSize",
991
+ "unsharedStackSize",
992
+ "minorPageFault",
993
+ "majorPageFault",
994
+ "swappedOut",
995
+ "fsRead",
996
+ "fsWrite",
997
+ "ipcSent",
998
+ "ipcReceived",
999
+ "signalsCount",
1000
+ "voluntaryContextSwitches",
1001
+ "involuntaryContextSwitches",
1002
+ ];
1003
+ if (!shape ||
1004
+ !shape.fields.every((f) => RUSAGE_FIELDS.includes(f.name) && f.type.kind === "f64")) {
1005
+ lowerer.badType(call, lowerer.typeOf(call));
1006
+ }
1007
+ return {
1008
+ kind: "recordLit",
1009
+ fields: shape.fields.map((f) => ({
1010
+ name: f.name,
1011
+ value: {
1012
+ kind: "libCall",
1013
+ fn: "process.rusage",
1014
+ args: [{ kind: "numLit", value: RUSAGE_FIELDS.indexOf(f.name), type: F64, loc }],
1015
+ type: F64,
1016
+ loc,
1017
+ },
1018
+ })),
1019
+ type: t,
1020
+ loc,
1021
+ };
1022
+ }
1023
+ // process.getActiveResourcesInfo() — the loop's own bookkeeping:
1024
+ // 'Timeout' per armed timer (a firing, uncleared one included —
1025
+ // Node's lifetime) and 'Immediate' per queued, unfired immediate.
1026
+ // DIVERGENCE (SEMANTICS.md): resources this runtime does not model
1027
+ // as loop handles (TCP wraps, FS requests) are absent from the answer.
1028
+ if (member === "getActiveResourcesInfo") {
1029
+ if (call.arguments.length !== 0) {
1030
+ lowerer.noLowering(`process.getActiveResourcesInfo with ${call.arguments.length} arguments`, call);
1031
+ }
1032
+ return { kind: "libCall", fn: "process.activeResources", args: [], type: arrayOf(STRING), loc };
1033
+ }
1034
+ // umask(2): the no-argument form reads without setting (the frontend
1035
+ // completes it to the -1 read sentinel); umask(mask) sets and answers
1036
+ // the previous mask, Node's shape either way.
1037
+ if (member === "umask") {
1038
+ if (call.arguments.length > 1) {
1039
+ lowerer.noLowering(`process.umask with ${call.arguments.length} arguments`, call);
1040
+ }
1041
+ const mask = call.arguments.length === 1
1042
+ ? lowerer.lowerExpr(call.arguments[0])
1043
+ : { kind: "numLit", value: -1, type: F64, loc };
1044
+ if (mask.type.kind !== "f64") {
1045
+ lowerer.noLowering("process.umask of non-number masks", call.arguments[0]);
1046
+ }
1047
+ return { kind: "libCall", fn: "process.umask", args: [mask], type: F64, loc };
1048
+ }
1049
+ // chdir(2) — throws Node's fs-shaped error on failure.
1050
+ if (member === "chdir") {
1051
+ if (call.arguments.length !== 1) {
1052
+ lowerer.noLowering(`process.chdir with ${call.arguments.length} arguments`, call);
1053
+ }
1054
+ const dir = lowerer.lowerExpr(call.arguments[0]);
1055
+ if (dir.type.kind !== "string") {
1056
+ lowerer.noLowering("process.chdir of non-string paths", call.arguments[0]);
1057
+ }
1058
+ return { kind: "libCall", fn: "process.chdir", args: [dir], type: VOID, loc };
1059
+ }
1060
+ // getuid(2): POSIX-only target, so the call always answers a number —
1061
+ // the plain-f64 result is honest here even though @types/node declares
1062
+ // the member optional (that optionality covers Windows). The `?.()`
1063
+ // spelling routes here through lowerProcessOptionalMethodCall.
1064
+ if (member === "getuid" || member === "getgid") {
1065
+ if (call.arguments.length !== 0) {
1066
+ lowerer.noLowering(`process.${member} with ${call.arguments.length} arguments`, call);
1067
+ }
1068
+ return {
1069
+ kind: "libCall",
1070
+ fn: member === "getuid" ? "process.getuid" : "process.getgid",
1071
+ args: [],
1072
+ type: F64,
1073
+ loc,
1074
+ };
1075
+ }
1076
+ // process.kill(pid, signal?) — Node's semantics exactly: the signal is
1077
+ // a name string (the runtime resolves Node's signal table; unknown
1078
+ // names throw the ERR_UNKNOWN_SIGNAL TypeError), a number (0 probes),
1079
+ // or omitted (SIGTERM); a non-int32 pid throws Node's
1080
+ // ERR_INVALID_ARG_TYPE TypeError text, and kill(2) failures throw
1081
+ // Node's `kill ESRCH`/`kill EPERM` Error. The result is Node's
1082
+ // constant true.
1083
+ if (member === "kill") {
1084
+ if (call.arguments.length < 1 || call.arguments.length > 2) {
1085
+ lowerer.noLowering(`process.kill with ${call.arguments.length} arguments`, call);
1086
+ }
1087
+ const pid = lowerer.lowerExprExpecting(call.arguments[0], F64);
1088
+ const sigNode = call.arguments[1];
1089
+ if (!sigNode) {
1090
+ const dflt = { kind: "strLit", value: "SIGTERM", type: STRING, loc };
1091
+ return { kind: "libCall", fn: "process.kill", args: [pid, dflt], type: BOOL, loc };
1092
+ }
1093
+ const sig = lowerer.lowerExpr(sigNode);
1094
+ if (sig.type.kind === "f64") {
1095
+ return { kind: "libCall", fn: "process.killNum", args: [pid, sig], type: BOOL, loc };
1096
+ }
1097
+ if (sig.type.kind === "string") {
1098
+ return { kind: "libCall", fn: "process.kill", args: [pid, sig], type: BOOL, loc };
1099
+ }
1100
+ lowerer.noLowering(`process.kill with a '${lowerer.fmt(sig.type)}' signal`, sigNode, "pass a signal name string or number (narrow unions first)");
1101
+ }
1102
+ if (member === "exit") {
1103
+ const arg = call.arguments[0];
1104
+ const code = arg !== undefined
1105
+ ? lowerer.lowerExprExpecting(arg, F64)
1106
+ : { kind: "libCall", fn: "process.currentExitCode", args: [], type: F64, loc };
1107
+ return { kind: "libCall", fn: "process.exit", args: [code], type: VOID, loc };
1108
+ }
1109
+ return null; // process.argv(...) etc. are tsc errors before lowering
1110
+ }
1111
+ /** `process.getuid?.()` — the optional call of an optional process
1112
+ * method. On a POSIX target the member always exists, so the `?.` IS the
1113
+ * call (the checker's undefined arm covers Windows, which scriptc does
1114
+ * not target) and the honest result is the plain number. Intercepted
1115
+ * BEFORE the optional-chain machinery: `process.getuid` has no value
1116
+ * lowering for the chain to guard. Null when this isn't that shape. */
1117
+ export function lowerProcessOptionalMethodCall(lowerer, expr) {
1118
+ if (!expr.questionDotToken)
1119
+ return null;
1120
+ if (!ts.isPropertyAccessExpression(expr.expression))
1121
+ return null;
1122
+ const member = lowerer.stdlibGlobalMember(expr.expression, "process");
1123
+ if (member === "send")
1124
+ return lowerProcessIpcSend(lowerer, expr);
1125
+ if (member !== "getuid" && member !== "getgid")
1126
+ return null;
1127
+ if (expr.arguments.length !== 0) {
1128
+ lowerer.noLowering(`process.${member} with ${expr.arguments.length} arguments`, expr);
1129
+ }
1130
+ return {
1131
+ kind: "libCall",
1132
+ fn: member === "getuid" ? "process.getuid" : "process.getgid",
1133
+ args: [],
1134
+ type: F64,
1135
+ loc: locOf(expr),
1136
+ };
1137
+ }
1138
+ //# sourceMappingURL=process.js.map