@scriptc/compiler 0.4.6 → 0.4.7

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 (652) hide show
  1. package/ambient/node-fallback/events.d.ts +6 -1
  2. package/ambient/node-fallback/fs-promises.d.ts +1 -1
  3. package/ambient/node-fallback/fs.d.ts +54 -10
  4. package/ambient/node-fallback/http.d.ts +3 -1
  5. package/ambient/node-fallback/net.d.ts +19 -0
  6. package/ambient/node-fallback/querystring.d.ts +3 -3
  7. package/ambient/scriptc-node-fallback.d.ts +58 -13
  8. package/dist/backend/executable-features.js +13 -0
  9. package/dist/backend/executable-features.js.map +1 -1
  10. package/dist/backend/immutability.d.ts +12 -1
  11. package/dist/backend/immutability.js +50 -4
  12. package/dist/backend/immutability.js.map +1 -1
  13. package/dist/backend/immutability.test.js +95 -1
  14. package/dist/backend/immutability.test.js.map +1 -1
  15. package/dist/backend/library-pack.js +2 -0
  16. package/dist/backend/library-pack.js.map +1 -1
  17. package/dist/backend/linker.d.ts +11 -0
  18. package/dist/backend/linker.js +31 -3
  19. package/dist/backend/linker.js.map +1 -1
  20. package/dist/backend/lld.d.ts +7 -2
  21. package/dist/backend/lld.js +5 -3
  22. package/dist/backend/lld.js.map +1 -1
  23. package/dist/backend/lld.test.js +10 -4
  24. package/dist/backend/lld.test.js.map +1 -1
  25. package/dist/backend/llvm/constant-callbacks.test.js +50 -1
  26. package/dist/backend/llvm/constant-callbacks.test.js.map +1 -1
  27. package/dist/backend/llvm/cpu-dispatch.js +6 -5
  28. package/dist/backend/llvm/cpu-dispatch.js.map +1 -1
  29. package/dist/backend/llvm/dyn.d.ts +53 -1
  30. package/dist/backend/llvm/dyn.js +221 -9
  31. package/dist/backend/llvm/dyn.js.map +1 -1
  32. package/dist/backend/llvm/emit-function.js +1 -1
  33. package/dist/backend/llvm/emit-function.js.map +1 -1
  34. package/dist/backend/llvm/emit-module.js +148 -50
  35. package/dist/backend/llvm/emit-module.js.map +1 -1
  36. package/dist/backend/llvm/emit-statements.js +39 -19
  37. package/dist/backend/llvm/emit-statements.js.map +1 -1
  38. package/dist/backend/llvm/emitter.d.ts +29 -2
  39. package/dist/backend/llvm/emitter.js +86 -7
  40. package/dist/backend/llvm/emitter.js.map +1 -1
  41. package/dist/backend/llvm/expr-calls.d.ts +4 -1
  42. package/dist/backend/llvm/expr-calls.js +20 -4
  43. package/dist/backend/llvm/expr-calls.js.map +1 -1
  44. package/dist/backend/llvm/expr-dynamic.js +209 -16
  45. package/dist/backend/llvm/expr-dynamic.js.map +1 -1
  46. package/dist/backend/llvm/expr-primitives.js +94 -11
  47. package/dist/backend/llvm/expr-primitives.js.map +1 -1
  48. package/dist/backend/llvm/expr-stream-bridges.d.ts +8 -0
  49. package/dist/backend/llvm/expr-stream-bridges.js +42 -2
  50. package/dist/backend/llvm/expr-stream-bridges.js.map +1 -1
  51. package/dist/backend/llvm/expr-stream-callbacks.d.ts +16 -0
  52. package/dist/backend/llvm/expr-stream-callbacks.js +206 -20
  53. package/dist/backend/llvm/expr-stream-callbacks.js.map +1 -1
  54. package/dist/backend/llvm/integer-values.d.ts +2 -0
  55. package/dist/backend/llvm/integer-values.js +6 -0
  56. package/dist/backend/llvm/integer-values.js.map +1 -1
  57. package/dist/backend/llvm/js-ic.d.ts +38 -0
  58. package/dist/backend/llvm/js-ic.js +295 -1
  59. package/dist/backend/llvm/js-ic.js.map +1 -1
  60. package/dist/backend/llvm/lib-dispatch.js +20 -0
  61. package/dist/backend/llvm/lib-dispatch.js.map +1 -1
  62. package/dist/backend/llvm/lib-filesystem.js +116 -11
  63. package/dist/backend/llvm/lib-filesystem.js.map +1 -1
  64. package/dist/backend/llvm/lib-process.js +136 -24
  65. package/dist/backend/llvm/lib-process.js.map +1 -1
  66. package/dist/backend/llvm/lib-shared.js +70 -0
  67. package/dist/backend/llvm/lib-shared.js.map +1 -1
  68. package/dist/backend/llvm/lib-stream.js +67 -0
  69. package/dist/backend/llvm/lib-stream.js.map +1 -1
  70. package/dist/backend/llvm/loop-entry-versions.d.ts +2 -2
  71. package/dist/backend/llvm/loop-entry-versions.js +43 -21
  72. package/dist/backend/llvm/loop-entry-versions.js.map +1 -1
  73. package/dist/backend/llvm/loop-state.d.ts +7 -1
  74. package/dist/backend/llvm/loop-state.js +20 -2
  75. package/dist/backend/llvm/loop-state.js.map +1 -1
  76. package/dist/backend/llvm/map-number-lookup.d.ts +3 -1
  77. package/dist/backend/llvm/map-number-lookup.js +7 -3
  78. package/dist/backend/llvm/map-number-lookup.js.map +1 -1
  79. package/dist/backend/llvm/map-number-lookup.test.js +52 -11
  80. package/dist/backend/llvm/map-number-lookup.test.js.map +1 -1
  81. package/dist/backend/llvm/receiver-brackets.test.d.ts +1 -0
  82. package/dist/backend/llvm/receiver-brackets.test.js +68 -0
  83. package/dist/backend/llvm/receiver-brackets.test.js.map +1 -0
  84. package/dist/backend/llvm/record-views.d.ts +22 -2
  85. package/dist/backend/llvm/record-views.js +139 -10
  86. package/dist/backend/llvm/record-views.js.map +1 -1
  87. package/dist/backend/llvm/record-views.test.js +76 -0
  88. package/dist/backend/llvm/record-views.test.js.map +1 -1
  89. package/dist/backend/llvm/reference-writes.js +1 -0
  90. package/dist/backend/llvm/reference-writes.js.map +1 -1
  91. package/dist/backend/llvm/shapes.d.ts +3 -0
  92. package/dist/backend/llvm/shapes.js +18 -3
  93. package/dist/backend/llvm/shapes.js.map +1 -1
  94. package/dist/backend/llvm/shapes.test.js +4 -0
  95. package/dist/backend/llvm/shapes.test.js.map +1 -1
  96. package/dist/backend/llvm/speculative-integers.d.ts +10 -1
  97. package/dist/backend/llvm/speculative-integers.js +59 -8
  98. package/dist/backend/llvm/speculative-integers.js.map +1 -1
  99. package/dist/backend/llvm/unwind-abi.d.ts +3 -3
  100. package/dist/backend/llvm/unwind-abi.js +8 -3
  101. package/dist/backend/llvm/unwind-abi.js.map +1 -1
  102. package/dist/backend/llvm/walkers.js +1 -1
  103. package/dist/backend/llvm/walkers.js.map +1 -1
  104. package/dist/backend/native/contracts.d.ts +54 -0
  105. package/dist/backend/native/executable.js +87 -5
  106. package/dist/backend/native/executable.js.map +1 -1
  107. package/dist/backend/native/library.js +1 -1
  108. package/dist/backend/native/library.js.map +1 -1
  109. package/dist/backend/native/runtime-inputs.js +5 -1
  110. package/dist/backend/native/runtime-inputs.js.map +1 -1
  111. package/dist/backend/native/vendor.d.ts +1 -1
  112. package/dist/backend/native/vendor.js +1 -1
  113. package/dist/backend/native/vendor.js.map +1 -1
  114. package/dist/backend/native-codegen.js +3 -0
  115. package/dist/backend/native-codegen.js.map +1 -1
  116. package/dist/backend/native-link-info-core.d.ts +43 -0
  117. package/dist/backend/native-link-info-core.js.map +1 -1
  118. package/dist/backend/native-link-info.js +1 -0
  119. package/dist/backend/native-link-info.js.map +1 -1
  120. package/dist/backend/native-profile.d.ts +4 -1
  121. package/dist/backend/native-profile.js +12 -1
  122. package/dist/backend/native-profile.js.map +1 -1
  123. package/dist/backend/native-profile.test.js +10 -0
  124. package/dist/backend/native-profile.test.js.map +1 -1
  125. package/dist/backend/publication.d.ts +4 -1
  126. package/dist/backend/publication.js +4 -2
  127. package/dist/backend/publication.js.map +1 -1
  128. package/dist/backend/runtime-abi.d.ts +2 -2
  129. package/dist/backend/runtime-abi.js +2 -2
  130. package/dist/backend/runtime-pack-core.d.ts +31 -7
  131. package/dist/backend/runtime-pack-core.js +21 -1
  132. package/dist/backend/runtime-pack-core.js.map +1 -1
  133. package/dist/backend/runtime-pack-native.d.ts +18 -1
  134. package/dist/backend/runtime-pack-native.js +138 -29
  135. package/dist/backend/runtime-pack-native.js.map +1 -1
  136. package/dist/backend/runtime-pack-native.test.js +166 -4
  137. package/dist/backend/runtime-pack-native.test.js.map +1 -1
  138. package/dist/backend/runtime-pack-targets.test.js +3 -1
  139. package/dist/backend/runtime-pack-targets.test.js.map +1 -1
  140. package/dist/backend/runtime-pack.d.ts +7 -0
  141. package/dist/backend/runtime-pack.js +25 -3
  142. package/dist/backend/runtime-pack.js.map +1 -1
  143. package/dist/backend/runtime-pack.test.js +3 -11
  144. package/dist/backend/runtime-pack.test.js.map +1 -1
  145. package/dist/backend/vendor-archives.d.ts +4 -1
  146. package/dist/backend/vendor-archives.js +264 -3
  147. package/dist/backend/vendor-archives.js.map +1 -1
  148. package/dist/backend/vendor-inputs.d.ts +36 -0
  149. package/dist/backend/vendor-inputs.js +42 -0
  150. package/dist/backend/vendor-inputs.js.map +1 -1
  151. package/dist/backend/vendor-inputs.test.js +28 -1
  152. package/dist/backend/vendor-inputs.test.js.map +1 -1
  153. package/dist/backend/warm-cache.js +2 -0
  154. package/dist/backend/warm-cache.js.map +1 -1
  155. package/dist/compat/fetch-profile.d.ts +7 -1
  156. package/dist/compat/fetch-profile.js +23 -10
  157. package/dist/compat/fetch-profile.js.map +1 -1
  158. package/dist/compile-types.d.ts +7 -0
  159. package/dist/contracts/check.d.ts +3 -0
  160. package/dist/contracts/check.js +18 -5
  161. package/dist/contracts/check.js.map +1 -1
  162. package/dist/coverage/surface-manifest.js +1 -1
  163. package/dist/coverage/surface-manifest.js.map +1 -1
  164. package/dist/diagnostics/codes.d.ts +6 -0
  165. package/dist/diagnostics/codes.js +6 -0
  166. package/dist/diagnostics/codes.js.map +1 -1
  167. package/dist/diagnostics/diagnostic.d.ts +50 -0
  168. package/dist/diagnostics/diagnostic.js +142 -3
  169. package/dist/diagnostics/diagnostic.js.map +1 -1
  170. package/dist/diagnostics/dynamic-tier.js +3 -1
  171. package/dist/diagnostics/dynamic-tier.js.map +1 -1
  172. package/dist/executable/executable-cache.d.ts +29 -0
  173. package/dist/executable/executable-cache.js +18 -0
  174. package/dist/executable/executable-cache.js.map +1 -1
  175. package/dist/executable/executable-cache.test.js +5 -1
  176. package/dist/executable/executable-cache.test.js.map +1 -1
  177. package/dist/executable/prepare.d.ts +13 -3
  178. package/dist/executable/prepare.js +271 -18
  179. package/dist/executable/prepare.js.map +1 -1
  180. package/dist/frontend/early-errors.d.ts +14 -0
  181. package/dist/frontend/early-errors.js +305 -0
  182. package/dist/frontend/early-errors.js.map +1 -0
  183. package/dist/frontend/early-errors.test.d.ts +1 -0
  184. package/dist/frontend/early-errors.test.js +42 -0
  185. package/dist/frontend/early-errors.test.js.map +1 -0
  186. package/dist/frontend/inferred-js-diagnostics.test.js +23 -0
  187. package/dist/frontend/inferred-js-diagnostics.test.js.map +1 -1
  188. package/dist/frontend/input-tracker.d.ts +47 -0
  189. package/dist/frontend/input-tracker.js +173 -36
  190. package/dist/frontend/input-tracker.js.map +1 -1
  191. package/dist/frontend/input-tracker.test.js +86 -2
  192. package/dist/frontend/input-tracker.test.js.map +1 -1
  193. package/dist/frontend/js-inference.d.ts +2 -0
  194. package/dist/frontend/js-inference.js +18 -0
  195. package/dist/frontend/js-inference.js.map +1 -0
  196. package/dist/frontend/lowering/binding-analysis.d.ts +2 -1
  197. package/dist/frontend/lowering/binding-analysis.js +65 -1
  198. package/dist/frontend/lowering/binding-analysis.js.map +1 -1
  199. package/dist/frontend/lowering/builtin-calls.js +9 -0
  200. package/dist/frontend/lowering/builtin-calls.js.map +1 -1
  201. package/dist/frontend/lowering/builtin-namespaces.d.ts +1 -1
  202. package/dist/frontend/lowering/builtin-namespaces.js +19 -2
  203. package/dist/frontend/lowering/builtin-namespaces.js.map +1 -1
  204. package/dist/frontend/lowering/builtins/child-process-methods.d.ts +7 -0
  205. package/dist/frontend/lowering/builtins/child-process-methods.js +50 -10
  206. package/dist/frontend/lowering/builtins/child-process-methods.js.map +1 -1
  207. package/dist/frontend/lowering/builtins/child-process.js +5 -1
  208. package/dist/frontend/lowering/builtins/child-process.js.map +1 -1
  209. package/dist/frontend/lowering/builtins/dates.d.ts +1 -1
  210. package/dist/frontend/lowering/builtins/dates.js +23 -1
  211. package/dist/frontend/lowering/builtins/dates.js.map +1 -1
  212. package/dist/frontend/lowering/builtins/environment.d.ts +55 -0
  213. package/dist/frontend/lowering/builtins/environment.js +213 -2
  214. package/dist/frontend/lowering/builtins/environment.js.map +1 -1
  215. package/dist/frontend/lowering/builtins/filesystem-calls.js +47 -16
  216. package/dist/frontend/lowering/builtins/filesystem-calls.js.map +1 -1
  217. package/dist/frontend/lowering/builtins/filesystem.d.ts +25 -7
  218. package/dist/frontend/lowering/builtins/filesystem.js +185 -16
  219. package/dist/frontend/lowering/builtins/filesystem.js.map +1 -1
  220. package/dist/frontend/lowering/builtins/module-calls.js +39 -2
  221. package/dist/frontend/lowering/builtins/module-calls.js.map +1 -1
  222. package/dist/frontend/lowering/builtins/module-resolution.d.ts +8 -0
  223. package/dist/frontend/lowering/builtins/module-resolution.js +31 -5
  224. package/dist/frontend/lowering/builtins/module-resolution.js.map +1 -1
  225. package/dist/frontend/lowering/builtins/operating-system.d.ts +3 -2
  226. package/dist/frontend/lowering/builtins/operating-system.js +5 -4
  227. package/dist/frontend/lowering/builtins/operating-system.js.map +1 -1
  228. package/dist/frontend/lowering/builtins/process.d.ts +17 -1
  229. package/dist/frontend/lowering/builtins/process.js +285 -19
  230. package/dist/frontend/lowering/builtins/process.js.map +1 -1
  231. package/dist/frontend/lowering/builtins/querystring.d.ts +8 -0
  232. package/dist/frontend/lowering/builtins/querystring.js +202 -18
  233. package/dist/frontend/lowering/builtins/querystring.js.map +1 -1
  234. package/dist/frontend/lowering/builtins/readline.js +21 -3
  235. package/dist/frontend/lowering/builtins/readline.js.map +1 -1
  236. package/dist/frontend/lowering/builtins/reflection.js +60 -1
  237. package/dist/frontend/lowering/builtins/reflection.js.map +1 -1
  238. package/dist/frontend/lowering/builtins/text-codecs.js +208 -59
  239. package/dist/frontend/lowering/builtins/text-codecs.js.map +1 -1
  240. package/dist/frontend/lowering/builtins/url.js +20 -1
  241. package/dist/frontend/lowering/builtins/url.js.map +1 -1
  242. package/dist/frontend/lowering/builtins/v8.d.ts +5 -5
  243. package/dist/frontend/lowering/builtins/v8.js +7 -5
  244. package/dist/frontend/lowering/builtins/v8.js.map +1 -1
  245. package/dist/frontend/lowering/builtins/web-streams-dyn.d.ts +17 -2
  246. package/dist/frontend/lowering/builtins/web-streams-dyn.js +97 -9
  247. package/dist/frontend/lowering/builtins/web-streams-dyn.js.map +1 -1
  248. package/dist/frontend/lowering/call-signatures.js +77 -0
  249. package/dist/frontend/lowering/call-signatures.js.map +1 -1
  250. package/dist/frontend/lowering/cjs-exports-object.d.ts +3 -0
  251. package/dist/frontend/lowering/cjs-exports-object.js +1 -1
  252. package/dist/frontend/lowering/cjs-exports-object.js.map +1 -1
  253. package/dist/frontend/lowering/cjs-inline-require.js +5 -0
  254. package/dist/frontend/lowering/cjs-inline-require.js.map +1 -1
  255. package/dist/frontend/lowering/class-dynamic-dispatch.d.ts +5 -0
  256. package/dist/frontend/lowering/class-dynamic-dispatch.js +114 -0
  257. package/dist/frontend/lowering/class-dynamic-dispatch.js.map +1 -1
  258. package/dist/frontend/lowering/class-protocols.js +59 -10
  259. package/dist/frontend/lowering/class-protocols.js.map +1 -1
  260. package/dist/frontend/lowering/class-runtime-statics.js +15 -0
  261. package/dist/frontend/lowering/class-runtime-statics.js.map +1 -1
  262. package/dist/frontend/lowering/class-views.d.ts +13 -0
  263. package/dist/frontend/lowering/class-views.js +51 -0
  264. package/dist/frontend/lowering/class-views.js.map +1 -0
  265. package/dist/frontend/lowering/coercions/function-adapters.d.ts +15 -1
  266. package/dist/frontend/lowering/coercions/function-adapters.js +54 -10
  267. package/dist/frontend/lowering/coercions/function-adapters.js.map +1 -1
  268. package/dist/frontend/lowering/coercions/state.d.ts +7 -0
  269. package/dist/frontend/lowering/coercions/state.js +7 -0
  270. package/dist/frontend/lowering/coercions/state.js.map +1 -1
  271. package/dist/frontend/lowering/coercions/structural-plans.js +60 -3
  272. package/dist/frontend/lowering/coercions/structural-plans.js.map +1 -1
  273. package/dist/frontend/lowering/coercions/structural.js +29 -1
  274. package/dist/frontend/lowering/coercions/structural.js.map +1 -1
  275. package/dist/frontend/lowering/containers/array-callbacks.d.ts +8 -1
  276. package/dist/frontend/lowering/containers/array-callbacks.js +132 -28
  277. package/dist/frontend/lowering/containers/array-callbacks.js.map +1 -1
  278. package/dist/frontend/lowering/containers/array-construction.js +16 -5
  279. package/dist/frontend/lowering/containers/array-construction.js.map +1 -1
  280. package/dist/frontend/lowering/containers/array-methods.js +16 -0
  281. package/dist/frontend/lowering/containers/array-methods.js.map +1 -1
  282. package/dist/frontend/lowering/containers/bytes.js +4 -0
  283. package/dist/frontend/lowering/containers/bytes.js.map +1 -1
  284. package/dist/frontend/lowering/containers/callback-arguments.d.ts +11 -0
  285. package/dist/frontend/lowering/containers/callback-arguments.js +53 -0
  286. package/dist/frontend/lowering/containers/callback-arguments.js.map +1 -1
  287. package/dist/frontend/lowering/containers/filter-predicates.d.ts +10 -0
  288. package/dist/frontend/lowering/containers/filter-predicates.js +69 -3
  289. package/dist/frontend/lowering/containers/filter-predicates.js.map +1 -1
  290. package/dist/frontend/lowering/containers/indexed-objects.js +46 -2
  291. package/dist/frontend/lowering/containers/indexed-objects.js.map +1 -1
  292. package/dist/frontend/lowering/expressions/array-literals.d.ts +14 -0
  293. package/dist/frontend/lowering/expressions/array-literals.js +26 -10
  294. package/dist/frontend/lowering/expressions/array-literals.js.map +1 -1
  295. package/dist/frontend/lowering/expressions/binary.js +104 -12
  296. package/dist/frontend/lowering/expressions/binary.js.map +1 -1
  297. package/dist/frontend/lowering/expressions/element-access.js +121 -4
  298. package/dist/frontend/lowering/expressions/element-access.js.map +1 -1
  299. package/dist/frontend/lowering/expressions/identifiers.js +143 -3
  300. package/dist/frontend/lowering/expressions/identifiers.js.map +1 -1
  301. package/dist/frontend/lowering/expressions/keyed-field-targets.d.ts +11 -1
  302. package/dist/frontend/lowering/expressions/keyed-field-targets.js +22 -1
  303. package/dist/frontend/lowering/expressions/keyed-field-targets.js.map +1 -1
  304. package/dist/frontend/lowering/expressions/narrowing.js +25 -1
  305. package/dist/frontend/lowering/expressions/narrowing.js.map +1 -1
  306. package/dist/frontend/lowering/expressions/object-literals.d.ts +5 -1
  307. package/dist/frontend/lowering/expressions/object-literals.js +778 -229
  308. package/dist/frontend/lowering/expressions/object-literals.js.map +1 -1
  309. package/dist/frontend/lowering/expressions/optional-chains.js +66 -20
  310. package/dist/frontend/lowering/expressions/optional-chains.js.map +1 -1
  311. package/dist/frontend/lowering/expressions/property-access.d.ts +31 -0
  312. package/dist/frontend/lowering/expressions/property-access.js +796 -12
  313. package/dist/frontend/lowering/expressions/property-access.js.map +1 -1
  314. package/dist/frontend/lowering/expressions/relational.js +29 -1
  315. package/dist/frontend/lowering/expressions/relational.js.map +1 -1
  316. package/dist/frontend/lowering/expressions/typeof.js +17 -0
  317. package/dist/frontend/lowering/expressions/typeof.js.map +1 -1
  318. package/dist/frontend/lowering/expressions/updates.js +132 -17
  319. package/dist/frontend/lowering/expressions/updates.js.map +1 -1
  320. package/dist/frontend/lowering/frozen-records.d.ts +6 -0
  321. package/dist/frontend/lowering/frozen-records.js +10 -4
  322. package/dist/frontend/lowering/frozen-records.js.map +1 -1
  323. package/dist/frontend/lowering/frozen-records.test.d.ts +1 -0
  324. package/dist/frontend/lowering/frozen-records.test.js +44 -0
  325. package/dist/frontend/lowering/frozen-records.test.js.map +1 -0
  326. package/dist/frontend/lowering/function-names.d.ts +9 -0
  327. package/dist/frontend/lowering/function-names.js +95 -0
  328. package/dist/frontend/lowering/function-names.js.map +1 -0
  329. package/dist/frontend/lowering/function-returns.js +5 -3
  330. package/dist/frontend/lowering/function-returns.js.map +1 -1
  331. package/dist/frontend/lowering/generic-functions.d.ts +49 -0
  332. package/dist/frontend/lowering/generic-functions.js +365 -7
  333. package/dist/frontend/lowering/generic-functions.js.map +1 -1
  334. package/dist/frontend/lowering/global-values.d.ts +9 -0
  335. package/dist/frontend/lowering/global-values.js +44 -0
  336. package/dist/frontend/lowering/global-values.js.map +1 -1
  337. package/dist/frontend/lowering/handle-properties.js +34 -1
  338. package/dist/frontend/lowering/handle-properties.js.map +1 -1
  339. package/dist/frontend/lowering/key-order-witness.d.ts +54 -0
  340. package/dist/frontend/lowering/key-order-witness.js +546 -5
  341. package/dist/frontend/lowering/key-order-witness.js.map +1 -1
  342. package/dist/frontend/lowering/lib-boundary.js +14 -0
  343. package/dist/frontend/lowering/lib-boundary.js.map +1 -1
  344. package/dist/frontend/lowering/lower-assert.js +110 -1
  345. package/dist/frontend/lowering/lower-assert.js.map +1 -1
  346. package/dist/frontend/lowering/lower-builtin-values.d.ts +36 -6
  347. package/dist/frontend/lowering/lower-builtin-values.js +332 -58
  348. package/dist/frontend/lowering/lower-builtin-values.js.map +1 -1
  349. package/dist/frontend/lowering/lower-calls.d.ts +22 -1
  350. package/dist/frontend/lowering/lower-calls.js +427 -48
  351. package/dist/frontend/lowering/lower-calls.js.map +1 -1
  352. package/dist/frontend/lowering/lower-calls.test.d.ts +1 -0
  353. package/dist/frontend/lowering/lower-calls.test.js +78 -0
  354. package/dist/frontend/lowering/lower-calls.test.js.map +1 -0
  355. package/dist/frontend/lowering/lower-classes.d.ts +16 -5
  356. package/dist/frontend/lowering/lower-classes.js +168 -51
  357. package/dist/frontend/lowering/lower-classes.js.map +1 -1
  358. package/dist/frontend/lowering/lower-event-emitter.d.ts +9 -0
  359. package/dist/frontend/lowering/lower-event-emitter.js +383 -41
  360. package/dist/frontend/lowering/lower-event-emitter.js.map +1 -1
  361. package/dist/frontend/lowering/lower-exprs.d.ts +14 -0
  362. package/dist/frontend/lowering/lower-exprs.js +25 -0
  363. package/dist/frontend/lowering/lower-exprs.js.map +1 -1
  364. package/dist/frontend/lowering/lower-functions.js +2 -0
  365. package/dist/frontend/lowering/lower-functions.js.map +1 -1
  366. package/dist/frontend/lowering/lower-inspect.js +80 -33
  367. package/dist/frontend/lowering/lower-inspect.js.map +1 -1
  368. package/dist/frontend/lowering/lower-modules.js +87 -25
  369. package/dist/frontend/lowering/lower-modules.js.map +1 -1
  370. package/dist/frontend/lowering/lower-node-island.d.ts +35 -4
  371. package/dist/frontend/lowering/lower-node-island.js +456 -61
  372. package/dist/frontend/lowering/lower-node-island.js.map +1 -1
  373. package/dist/frontend/lowering/lower-server.js +160 -9
  374. package/dist/frontend/lowering/lower-server.js.map +1 -1
  375. package/dist/frontend/lowering/lower-shared-modules.js +13 -1
  376. package/dist/frontend/lowering/lower-shared-modules.js.map +1 -1
  377. package/dist/frontend/lowering/lower-stdlib.d.ts +3 -2
  378. package/dist/frontend/lowering/lower-stdlib.js +32 -18
  379. package/dist/frontend/lowering/lower-stdlib.js.map +1 -1
  380. package/dist/frontend/lowering/lower-stmts.d.ts +21 -4
  381. package/dist/frontend/lowering/lower-stmts.js +580 -103
  382. package/dist/frontend/lowering/lower-stmts.js.map +1 -1
  383. package/dist/frontend/lowering/lower-stream.js +126 -8
  384. package/dist/frontend/lowering/lower-stream.js.map +1 -1
  385. package/dist/frontend/lowering/lower-timers.js +133 -21
  386. package/dist/frontend/lowering/lower-timers.js.map +1 -1
  387. package/dist/frontend/lowering/lowerer.d.ts +139 -3
  388. package/dist/frontend/lowering/lowerer.js +579 -43
  389. package/dist/frontend/lowering/lowerer.js.map +1 -1
  390. package/dist/frontend/lowering/lowerer.test.js +1 -1
  391. package/dist/frontend/lowering/lowerer.test.js.map +1 -1
  392. package/dist/frontend/lowering/module-namespace-elements.js +15 -0
  393. package/dist/frontend/lowering/module-namespace-elements.js.map +1 -1
  394. package/dist/frontend/lowering/new-target.js +2 -2
  395. package/dist/frontend/lowering/nullish-empty-pattern.d.ts +17 -0
  396. package/dist/frontend/lowering/nullish-empty-pattern.js +118 -0
  397. package/dist/frontend/lowering/nullish-empty-pattern.js.map +1 -0
  398. package/dist/frontend/lowering/partial-assertions.d.ts +39 -0
  399. package/dist/frontend/lowering/partial-assertions.js +195 -0
  400. package/dist/frontend/lowering/partial-assertions.js.map +1 -0
  401. package/dist/frontend/lowering/primitive-wrappers.d.ts +34 -0
  402. package/dist/frontend/lowering/primitive-wrappers.js +220 -0
  403. package/dist/frontend/lowering/primitive-wrappers.js.map +1 -0
  404. package/dist/frontend/lowering/private-statics.d.ts +46 -0
  405. package/dist/frontend/lowering/private-statics.js +322 -0
  406. package/dist/frontend/lowering/private-statics.js.map +1 -0
  407. package/dist/frontend/lowering/record-sources.d.ts +12 -1
  408. package/dist/frontend/lowering/record-sources.js +60 -0
  409. package/dist/frontend/lowering/record-sources.js.map +1 -1
  410. package/dist/frontend/lowering/strict-equality.d.ts +4 -0
  411. package/dist/frontend/lowering/strict-equality.js +14 -0
  412. package/dist/frontend/lowering/strict-equality.js.map +1 -1
  413. package/dist/frontend/lowering/surfaces.d.ts +27 -0
  414. package/dist/frontend/lowering/surfaces.js +135 -62
  415. package/dist/frontend/lowering/surfaces.js.map +1 -1
  416. package/dist/frontend/lowering/unit-journal.d.ts +128 -17
  417. package/dist/frontend/lowering/unit-journal.js +310 -53
  418. package/dist/frontend/lowering/unit-journal.js.map +1 -1
  419. package/dist/frontend/lowering/unit-journal.test.js +91 -3
  420. package/dist/frontend/lowering/unit-journal.test.js.map +1 -1
  421. package/dist/frontend/lowering/unit-reuse.d.ts +92 -0
  422. package/dist/frontend/lowering/unit-reuse.js +1008 -0
  423. package/dist/frontend/lowering/unit-reuse.js.map +1 -0
  424. package/dist/frontend/lowering/width-lift.d.ts +12 -0
  425. package/dist/frontend/npm-file-import.test.d.ts +1 -0
  426. package/dist/frontend/npm-file-import.test.js +76 -0
  427. package/dist/frontend/npm-file-import.test.js.map +1 -0
  428. package/dist/frontend/npm-static.js +17 -2
  429. package/dist/frontend/npm-static.js.map +1 -1
  430. package/dist/frontend/npm.d.ts +9 -0
  431. package/dist/frontend/npm.js +82 -0
  432. package/dist/frontend/npm.js.map +1 -1
  433. package/dist/frontend/pipeline-native.js +2 -1
  434. package/dist/frontend/pipeline-native.js.map +1 -1
  435. package/dist/frontend/pipeline.d.ts +4 -0
  436. package/dist/frontend/pipeline.js +68 -7
  437. package/dist/frontend/pipeline.js.map +1 -1
  438. package/dist/frontend/program-node.d.ts +3 -0
  439. package/dist/frontend/program-node.js +13 -6
  440. package/dist/frontend/program-node.js.map +1 -1
  441. package/dist/frontend/program.d.ts +9 -0
  442. package/dist/frontend/program.js +159 -7
  443. package/dist/frontend/program.js.map +1 -1
  444. package/dist/frontend/provenance-core.js +4 -0
  445. package/dist/frontend/provenance-core.js.map +1 -1
  446. package/dist/frontend/services.d.ts +14 -0
  447. package/dist/frontend/services.js +52 -2
  448. package/dist/frontend/services.js.map +1 -1
  449. package/dist/frontend/services.test.js +61 -1
  450. package/dist/frontend/services.test.js.map +1 -1
  451. package/dist/frontend/shape-inference/analyze.d.ts +5 -0
  452. package/dist/frontend/shape-inference/analyze.js +104 -4
  453. package/dist/frontend/shape-inference/analyze.js.map +1 -1
  454. package/dist/frontend/shape-inference/domain.js +0 -1
  455. package/dist/frontend/shape-inference/domain.js.map +1 -1
  456. package/dist/frontend/shape-inference/index.js +5 -1
  457. package/dist/frontend/shape-inference/index.js.map +1 -1
  458. package/dist/frontend/shape-inference/memo.d.ts +2 -1
  459. package/dist/frontend/shape-inference/memo.js +6 -2
  460. package/dist/frontend/shape-inference/memo.js.map +1 -1
  461. package/dist/frontend/shape-inference/overlay.d.ts +1 -1
  462. package/dist/frontend/shape-inference/overlay.js +116 -2
  463. package/dist/frontend/shape-inference/overlay.js.map +1 -1
  464. package/dist/frontend/shape-inference/static-objects.js +11 -6
  465. package/dist/frontend/shape-inference/static-objects.js.map +1 -1
  466. package/dist/frontend/source-phase-imports.test.d.ts +1 -0
  467. package/dist/frontend/source-phase-imports.test.js +37 -0
  468. package/dist/frontend/source-phase-imports.test.js.map +1 -0
  469. package/dist/frontend/ts7/ast-node.d.ts +6 -1
  470. package/dist/frontend/ts7/ast-node.js +12 -0
  471. package/dist/frontend/ts7/ast-node.js.map +1 -1
  472. package/dist/frontend/ts7/ast-wire-protocols.test.js +11 -3
  473. package/dist/frontend/ts7/ast-wire-protocols.test.js.map +1 -1
  474. package/dist/frontend/ts7/ast-wire.js +3 -5
  475. package/dist/frontend/ts7/ast-wire.js.map +1 -1
  476. package/dist/frontend/ts7/checker-backend.d.ts +13 -0
  477. package/dist/frontend/ts7/checker-backend.js +84 -2
  478. package/dist/frontend/ts7/checker-backend.js.map +1 -1
  479. package/dist/frontend/ts7/checker-backend.test.js +126 -2
  480. package/dist/frontend/ts7/checker-backend.test.js.map +1 -1
  481. package/dist/frontend/ts7/program-host.d.ts +22 -1
  482. package/dist/frontend/ts7/program-host.js +49 -4
  483. package/dist/frontend/ts7/program-host.js.map +1 -1
  484. package/dist/frontend/ts7/program-host.test.js +83 -0
  485. package/dist/frontend/ts7/program-host.test.js.map +1 -1
  486. package/dist/frontend/ts7/rpc-process.d.ts +16 -1
  487. package/dist/frontend/ts7/rpc-process.js +170 -92
  488. package/dist/frontend/ts7/rpc-process.js.map +1 -1
  489. package/dist/frontend/ts7/rpc-process.test.js +49 -21
  490. package/dist/frontend/ts7/rpc-process.test.js.map +1 -1
  491. package/dist/frontend/tsc-codes.js +70 -0
  492. package/dist/frontend/tsc-codes.js.map +1 -1
  493. package/dist/frontend/type-mapper.d.ts +7 -2
  494. package/dist/frontend/type-mapper.js +148 -1
  495. package/dist/frontend/type-mapper.js.map +1 -1
  496. package/dist/index.d.ts +1 -1
  497. package/dist/index.js +152 -8
  498. package/dist/index.js.map +1 -1
  499. package/dist/ir/api.d.ts +1 -1
  500. package/dist/ir/api.js +1 -1
  501. package/dist/ir/api.js.map +1 -1
  502. package/dist/ir/build.d.ts +3 -2
  503. package/dist/ir/build.js +4 -2
  504. package/dist/ir/build.js.map +1 -1
  505. package/dist/ir/builtin-effects.js +53 -0
  506. package/dist/ir/builtin-effects.js.map +1 -1
  507. package/dist/ir/builtin-signatures.d.ts +1 -1
  508. package/dist/ir/builtin-signatures.js +211 -10
  509. package/dist/ir/builtin-signatures.js.map +1 -1
  510. package/dist/ir/codec.d.ts +82 -0
  511. package/dist/ir/codec.generated.d.ts +13 -0
  512. package/dist/ir/codec.generated.js +5274 -0
  513. package/dist/ir/codec.generated.js.map +1 -0
  514. package/dist/ir/codec.js +325 -0
  515. package/dist/ir/codec.js.map +1 -0
  516. package/dist/ir/codec.test.d.ts +1 -0
  517. package/dist/ir/codec.test.js +225 -0
  518. package/dist/ir/codec.test.js.map +1 -0
  519. package/dist/ir/fields.generated.d.ts +20 -10
  520. package/dist/ir/fields.generated.js +1031 -11
  521. package/dist/ir/fields.generated.js.map +1 -1
  522. package/dist/ir/fields.test.js +46 -2
  523. package/dist/ir/fields.test.js.map +1 -1
  524. package/dist/ir/function-references.d.ts +5 -4
  525. package/dist/ir/function-references.js +8 -4
  526. package/dist/ir/function-references.js.map +1 -1
  527. package/dist/ir/function-references.test.js +7 -0
  528. package/dist/ir/function-references.test.js.map +1 -1
  529. package/dist/ir/inline-array-sources.js +4 -1
  530. package/dist/ir/inline-array-sources.js.map +1 -1
  531. package/dist/ir/inline-array-views.d.ts +13 -0
  532. package/dist/ir/inline-array-views.js +944 -0
  533. package/dist/ir/inline-array-views.js.map +1 -0
  534. package/dist/ir/inline-arrays.d.ts +7 -0
  535. package/dist/ir/inline-arrays.js +190 -55
  536. package/dist/ir/inline-arrays.js.map +1 -1
  537. package/dist/ir/inline-arrays.test.js +140 -2
  538. package/dist/ir/inline-arrays.test.js.map +1 -1
  539. package/dist/ir/integer-ranges.js +16 -6
  540. package/dist/ir/integer-ranges.js.map +1 -1
  541. package/dist/ir/ir.d.ts +75 -44
  542. package/dist/ir/ir.js.map +1 -1
  543. package/dist/ir/js-ic.d.ts +10 -9
  544. package/dist/ir/js-ic.js +28 -20
  545. package/dist/ir/js-ic.js.map +1 -1
  546. package/dist/ir/js-ic.test.js +10 -2
  547. package/dist/ir/js-ic.test.js.map +1 -1
  548. package/dist/ir/jsval.js +374 -63
  549. package/dist/ir/jsval.js.map +1 -1
  550. package/dist/ir/jsval.test.js +96 -2
  551. package/dist/ir/jsval.test.js.map +1 -1
  552. package/dist/ir/loop-entry-ranges.js +112 -9
  553. package/dist/ir/loop-entry-ranges.js.map +1 -1
  554. package/dist/ir/loop-entry-ranges.test.js +40 -0
  555. package/dist/ir/loop-entry-ranges.test.js.map +1 -1
  556. package/dist/ir/parameter-versions.d.ts +2 -1
  557. package/dist/ir/parameter-versions.js +3 -1
  558. package/dist/ir/parameter-versions.js.map +1 -1
  559. package/dist/ir/receiver-readers.js +58 -2
  560. package/dist/ir/receiver-readers.js.map +1 -1
  561. package/dist/ir/runtime-features.d.ts +60 -1
  562. package/dist/ir/runtime-features.js +277 -2
  563. package/dist/ir/runtime-features.js.map +1 -1
  564. package/dist/ir/runtime-features.test.js +165 -1
  565. package/dist/ir/runtime-features.test.js.map +1 -1
  566. package/dist/ir/saturating-loop-jams.d.ts +8 -1
  567. package/dist/ir/saturating-loop-jams.js +46 -7
  568. package/dist/ir/saturating-loop-jams.js.map +1 -1
  569. package/dist/ir/saturating-loop-jams.test.js +39 -1
  570. package/dist/ir/saturating-loop-jams.test.js.map +1 -1
  571. package/dist/ir/self-captures.js +8 -1
  572. package/dist/ir/self-captures.js.map +1 -1
  573. package/dist/ir/self-captures.test.js +15 -0
  574. package/dist/ir/self-captures.test.js.map +1 -1
  575. package/dist/ir/serialize.d.ts +3 -2
  576. package/dist/ir/serialize.js +6 -2
  577. package/dist/ir/serialize.js.map +1 -1
  578. package/dist/ir/validate.js +82 -4
  579. package/dist/ir/validate.js.map +1 -1
  580. package/dist/ir/validate.test.js +46 -0
  581. package/dist/ir/validate.test.js.map +1 -1
  582. package/dist/library/ir-policy.js +3 -0
  583. package/dist/library/ir-policy.js.map +1 -1
  584. package/dist/native/cache.js +2 -0
  585. package/dist/native/cache.js.map +1 -1
  586. package/dist/native/cli.js +2 -0
  587. package/dist/native/cli.js.map +1 -1
  588. package/dist/native/compiler.js +8 -2
  589. package/dist/native/compiler.js.map +1 -1
  590. package/dist/native/prepare.js +32 -3
  591. package/dist/native/prepare.js.map +1 -1
  592. package/dist/native/sanitizer.js +53 -3
  593. package/dist/native/sanitizer.js.map +1 -1
  594. package/dist/native/sanitizer.test.js +88 -2
  595. package/dist/native/sanitizer.test.js.map +1 -1
  596. package/dist/native/toolchain.js +9 -2
  597. package/dist/native/toolchain.js.map +1 -1
  598. package/dist/node-islands/boundary.d.ts +25 -1
  599. package/dist/node-islands/boundary.js +28 -2
  600. package/dist/node-islands/boundary.js.map +1 -1
  601. package/dist/node-islands/detect.d.ts +18 -1
  602. package/dist/node-islands/detect.js +365 -40
  603. package/dist/node-islands/detect.js.map +1 -1
  604. package/dist/node-islands/detect.test.js +151 -4
  605. package/dist/node-islands/detect.test.js.map +1 -1
  606. package/dist/node-islands/effect-gate.js +30 -20
  607. package/dist/node-islands/effect-gate.js.map +1 -1
  608. package/dist/node-islands/effect-gate.test.js +4 -1
  609. package/dist/node-islands/effect-gate.test.js.map +1 -1
  610. package/dist/node-islands/libnode.d.ts +1 -1
  611. package/dist/node-islands/libnode.js +1 -1
  612. package/dist/node-islands/libnode.js.map +1 -1
  613. package/dist/node-islands/modules.d.ts +28 -0
  614. package/dist/node-islands/modules.js +156 -0
  615. package/dist/node-islands/modules.js.map +1 -1
  616. package/dist/node-islands/modules.test.js +105 -1
  617. package/dist/node-islands/modules.test.js.map +1 -1
  618. package/dist/node-islands/policy.js +2 -3
  619. package/dist/node-islands/policy.js.map +1 -1
  620. package/dist/node-islands/probe-recorder.d.ts +1 -0
  621. package/dist/node-islands/probe-recorder.js +596 -0
  622. package/dist/node-islands/probe-recorder.js.map +1 -0
  623. package/dist/node-islands/probe-recorder.test.d.ts +1 -0
  624. package/dist/node-islands/probe-recorder.test.js +80 -0
  625. package/dist/node-islands/probe-recorder.test.js.map +1 -0
  626. package/dist/node-islands/report.test.js +2 -0
  627. package/dist/node-islands/report.test.js.map +1 -1
  628. package/dist/node-islands/rules.js +4 -0
  629. package/dist/node-islands/rules.js.map +1 -1
  630. package/dist/node-islands/scan.d.ts +7 -1
  631. package/dist/node-islands/scan.js +51 -2
  632. package/dist/node-islands/scan.js.map +1 -1
  633. package/dist/node-islands/snapshot.d.ts +38 -1
  634. package/dist/node-islands/snapshot.js +165 -161
  635. package/dist/node-islands/snapshot.js.map +1 -1
  636. package/dist/node-islands/snapshot.test.js +63 -2
  637. package/dist/node-islands/snapshot.test.js.map +1 -1
  638. package/dist/node-islands/summary.js +8 -0
  639. package/dist/node-islands/summary.js.map +1 -1
  640. package/dist/node-islands/type-strip.d.ts +11 -0
  641. package/dist/node-islands/type-strip.js +157 -0
  642. package/dist/node-islands/type-strip.js.map +1 -0
  643. package/dist/node-islands/type-strip.test.d.ts +1 -0
  644. package/dist/node-islands/type-strip.test.js +31 -0
  645. package/dist/node-islands/type-strip.test.js.map +1 -0
  646. package/dist/project-config.d.ts +4 -0
  647. package/dist/project-config.js +19 -0
  648. package/dist/project-config.js.map +1 -1
  649. package/dist/project-config.test.js +10 -0
  650. package/dist/project-config.test.js.map +1 -1
  651. package/package.json +20 -20
  652. package/surface-manifest.json +43 -11
@@ -11,12 +11,13 @@ import { isSafeToDiscard } from "../expressions/evaluation-safety.js";
11
11
  import { resultIsDiscarded } from "../call-position.js";
12
12
  import { defaultAfterUndefined, lowerStaticallyUndefinedArgument } from "../optional-arguments.js";
13
13
  import { voidizedCallback } from "../lower-server.js";
14
- import { BOOL, BYTES_U8, DYN, F64, PROCSTREAM_T, STRING, UNDEFINED_T, VOID, arrayOf, canBoxFuncIntoDyn, funcOf, } from "../../../ir/ir.js";
14
+ import { BOOL, BYTES_U8, DYN, F64, PROCSTREAM_T, STRING, UNDEFINED_T, VOID, arrayOf, canBoxFuncIntoDyn, funcOf, isUnitType, } from "../../../ir/ir.js";
15
15
  import { lowerBuiltinLoaderValue } from "../lower-builtin-values.js";
16
16
  import { builtinFunctionValue } from "../lower-exprs.js";
17
17
  import { canonicalBuiltinModule } from "../../builtin-modules.js";
18
18
  import { lowerProcessIpcSend, ipcMessageListener, ipcDisconnectListener } from "./ipc.js";
19
19
  import { lowerDiagnosticsSubscriber, lowerTracingArguments } from "./async-context.js";
20
+ import { isCheckerPanic } from "../../../diagnostics/diagnostic.js";
20
21
  /** Whether the process has an IPC channel, Node's test for defining
21
22
  * process.send and process.disconnect: a channel this fork child opened
22
23
  * (programs with fork targets only), or a non-empty NODE_CHANNEL_FD from a
@@ -157,6 +158,66 @@ export function programReadsExitCode(lowerer) {
157
158
  lowerer.readsExitCode = found;
158
159
  return found;
159
160
  }
161
+ /** Whether any program file replaces a process output stream's write
162
+ * method: `process.stdout.write = …` / `process.stderr.write = …`, or the
163
+ * same assignment through a first-class alias of the stream (a value whose
164
+ * type maps to the process stream). Such a program routes its typed
165
+ * stdout/stderr writes through the stream object, so the replacement sees
166
+ * them with their arguments, as in Node. Cached per program; the first
167
+ * site found is recorded for the executable planner's SC8020 check. */
168
+ export function programPatchesStdio(lowerer) {
169
+ if (lowerer.patchesStdio !== null)
170
+ return lowerer.patchesStdio;
171
+ let found = false;
172
+ // undefined: not an output stream; null: a first-class alias of one.
173
+ const streamOf = (recv) => {
174
+ if (ts.isPropertyAccessExpression(recv)) {
175
+ const direct = lowerer.stdlibGlobalMember(recv, "process");
176
+ if (direct === "stdout" || direct === "stderr")
177
+ return direct;
178
+ }
179
+ // An arbitrary receiver's mapping is a query, never a commit: a checker
180
+ // panic (the type has no readable form) is not a patch site. The type
181
+ // cannot say WHICH output stream an alias holds.
182
+ try {
183
+ return lowerer.mapTypeOf(lowerer.typeOf(recv))?.kind === "procStream" ? null : undefined;
184
+ }
185
+ catch (e) {
186
+ if (!isCheckerPanic(e))
187
+ throw e;
188
+ return undefined;
189
+ }
190
+ };
191
+ const walk = (node) => {
192
+ if (found)
193
+ return;
194
+ if (ts.isBinaryExpression(node) &&
195
+ node.operatorToken.kind === ts.SyntaxKind.EqualsToken &&
196
+ ts.isPropertyAccessExpression(node.left) &&
197
+ node.left.name.text === "write") {
198
+ const recv = node.left.expression;
199
+ const direct = ts.isPropertyAccessExpression(recv)
200
+ ? lowerer.stdlibGlobalMember(recv, "process")
201
+ : null;
202
+ const stream = direct === "stdout" || direct === "stderr" ? direct : streamOf(recv);
203
+ if (stream !== undefined) {
204
+ found = true;
205
+ lowerer.stdioPatchSites.push({ stream, loc: locOf(node) });
206
+ return;
207
+ }
208
+ }
209
+ ts.forEachChild(node, walk);
210
+ };
211
+ for (const sf of lowerer.program.getImplementationSourceFiles()) {
212
+ if (sf.isDeclarationFile)
213
+ continue;
214
+ walk(sf);
215
+ if (found)
216
+ break;
217
+ }
218
+ lowerer.patchesStdio = found;
219
+ return found;
220
+ }
160
221
  /** The pinned Node release the runtime reports as process.versions.node
161
222
  * (packages/runtime/src/scr_lib.c SCR_NODE_COMPAT_VERSION, kept equal to
162
223
  * internal/compatibility/node-v24.json by test/node-pin.test.ts). */
@@ -215,9 +276,10 @@ export function lowerProcStreamMethodCall(lowerer, call, access) {
215
276
  lowerer.noLowering(`WritableStream.${name}`, call, "write(data) with one string and getWindowSize() are the supported stream-value methods", lowerer.checker.getSymbolAtLocation(access.name));
216
277
  }
217
278
  /** Standard streams expose optional terminal properties: pipes have no
218
- * isTTY, columns, or rows. The declarations do not prove their presence. */
279
+ * isTTY, columns, or rows, and only a TTY stdin has a raw-mode flag. The
280
+ * declarations do not prove their presence. */
219
281
  export function isOptionalProcessStreamProperty(lowerer, expr) {
220
- if (!["isTTY", "columns", "rows"].includes(expr.name.text))
282
+ if (!["isTTY", "columns", "rows", "isRaw"].includes(expr.name.text))
221
283
  return false;
222
284
  let recv = expr.expression;
223
285
  while (ts.isParenthesizedExpression(recv) || ts.isAsExpression(recv) || ts.isTypeAssertion(recv))
@@ -226,7 +288,7 @@ export function isOptionalProcessStreamProperty(lowerer, expr) {
226
288
  const stream = lowerer.stdlibGlobalMember(recv, "process");
227
289
  if (stream === "stdout" ||
228
290
  stream === "stderr" ||
229
- (stream === "stdin" && expr.name.text === "isTTY"))
291
+ (stream === "stdin" && (expr.name.text === "isTTY" || expr.name.text === "isRaw")))
230
292
  return true;
231
293
  }
232
294
  return lowerer.mapTypeOf(lowerer.typeOf(expr.expression))?.kind === "procStream";
@@ -297,6 +359,26 @@ export function lowerProcessStreamProperty(lowerer, expr) {
297
359
  loc: locOf(expr),
298
360
  };
299
361
  }
362
+ // The write method as a VALUE in TypeScript (`const original =
363
+ // process.stdout.write`, `process.stdout.write.bind(process.stdout)`):
364
+ // the stream object's current write slot, a checked-dynamic function
365
+ // (the native method until a program replaces it).
366
+ if (member === "write" && (direct === "stdout" || direct === "stderr")) {
367
+ const loc = locOf(expr);
368
+ return {
369
+ kind: "dynKeyGet",
370
+ value: {
371
+ kind: "libCall",
372
+ fn: "process.stdioSlot",
373
+ args: [numLit(direct === "stdout" ? 1 : 2, loc)],
374
+ type: DYN,
375
+ loc,
376
+ },
377
+ key: strLit("write", locOf(expr.name)),
378
+ type: DYN,
379
+ loc,
380
+ };
381
+ }
300
382
  // `if (process.stdin.setRawMode)`: Node's stdin has the method only
301
383
  // when it is a TTY. The runtime's stream object answers the same
302
384
  // presence (the method or undefined); calls keep their direct lowering.
@@ -312,7 +394,11 @@ export function lowerProcessStreamProperty(lowerer, expr) {
312
394
  if (member !== "isTTY" &&
313
395
  member !== "columns" &&
314
396
  member !== "rows" &&
315
- member !== "writableLength")
397
+ member !== "writableLength" &&
398
+ member !== "fd" &&
399
+ member !== "isRaw" &&
400
+ member !== "writableHighWaterMark" &&
401
+ member !== "writableNeedDrain")
316
402
  return null;
317
403
  let recv = expr.expression;
318
404
  while (ts.isParenthesizedExpression(recv) || ts.isAsExpression(recv) || ts.isTypeAssertion(recv))
@@ -340,12 +426,21 @@ export function lowerProcessStreamProperty(lowerer, expr) {
340
426
  // nothing is ever queued and Node's number is always 0. The other
341
427
  // members stay keyed reads — the runtime stream answers their live
342
428
  // values (isatty columns/rows, stdin readableLength).
343
- if (member === "writableLength") {
429
+ if (member === "writableLength" ||
430
+ member === "writableHighWaterMark" ||
431
+ member === "writableNeedDrain") {
344
432
  // The receiver still EVALUATES: a call or property read that hands
345
433
  // back the stream runs its own side effects — and throws where Node
346
434
  // throws — before the constant answers, exactly as the read of the
347
435
  // member would. A pure receiver (the alias above) folds away.
348
- const answer = { kind: "numLit", value: 0, type: F64, loc: locOf(expr) };
436
+ const answer = member === "writableNeedDrain"
437
+ ? { kind: "boolLit", value: false, type: BOOL, loc: locOf(expr) }
438
+ : {
439
+ kind: "numLit",
440
+ value: member === "writableLength" ? 0 : 65536,
441
+ type: F64,
442
+ loc: locOf(expr),
443
+ };
349
444
  const effect = lowerer.lowerExpr(expr.expression);
350
445
  if (isSafeToDiscard(effect))
351
446
  return answer;
@@ -353,7 +448,7 @@ export function lowerProcessStreamProperty(lowerer, expr) {
353
448
  kind: "seqExpr",
354
449
  stmts: [{ kind: "exprStmt", expr: effect, loc: locOf(expr.expression) }],
355
450
  result: answer,
356
- type: F64,
451
+ type: answer.type,
357
452
  loc: locOf(expr),
358
453
  };
359
454
  }
@@ -385,6 +480,18 @@ export function lowerProcessStreamProperty(lowerer, expr) {
385
480
  // correct; the write itself never defers.
386
481
  if (member === "writableLength")
387
482
  return { kind: "numLit", value: 0, type: F64, loc };
483
+ // Node's default high-water mark for the process streams, and the
484
+ // drain flag a synchronous write never sets.
485
+ if (member === "writableHighWaterMark") {
486
+ if (stream === "stdin")
487
+ return null;
488
+ return { kind: "numLit", value: 65536, type: F64, loc };
489
+ }
490
+ if (member === "writableNeedDrain") {
491
+ if (stream === "stdin")
492
+ return null;
493
+ return { kind: "boolLit", value: false, type: BOOL, loc };
494
+ }
388
495
  if (member === "isTTY") {
389
496
  const type = lowerer.withUndefinedArm(BOOL);
390
497
  return {
@@ -396,8 +503,30 @@ export function lowerProcessStreamProperty(lowerer, expr) {
396
503
  loc,
397
504
  };
398
505
  }
399
- if (stream === "stdin")
400
- return null;
506
+ if (member === "fd") {
507
+ // The process streams are built over fd 0/1/2 (Node answers those on
508
+ // a TTY, a pipe, and a redirected file alike).
509
+ return {
510
+ kind: "numLit",
511
+ value: stream === "stdin" ? 0 : stream === "stdout" ? 1 : 2,
512
+ type: F64,
513
+ loc,
514
+ };
515
+ }
516
+ if (stream === "stdin") {
517
+ if (member !== "isRaw")
518
+ return null;
519
+ // Node answers the raw-mode flag of a TTY stdin and undefined on
520
+ // anything else (a pipe-backed stdin); the runtime sentinel carries
521
+ // both (scr_process_stdin_is_raw).
522
+ return {
523
+ kind: "libCall",
524
+ fn: "process.stdinIsRaw",
525
+ args: [],
526
+ type: lowerer.withUndefinedArm(BOOL),
527
+ loc,
528
+ };
529
+ }
401
530
  const want = lowerer.withUndefinedArm(F64);
402
531
  return {
403
532
  kind: "libCall",
@@ -499,9 +628,10 @@ export function lowerProcessProperty(lowerer, expr) {
499
628
  // The capability-probe members that honestly DON'T EXIST in a
500
629
  // compiled binary — each reads undefined (their declared types carry
501
630
  // the undefined arm), so feature probes take their documented
502
- // fallbacks: no gyp build config (process.config.variables.* — no ICU,
503
- // no QUIC — and process.config.target_defaults), no feature flags
504
- // (process.features.* — no inspector, not a debug build).
631
+ // fallbacks: no gyp build config (process.config.variables.* — no QUIC
632
+ // — and process.config.target_defaults; v8_enable_i18n_support is the
633
+ // exception below, answered from the binary's linked ICU), no feature
634
+ // flags (process.features.* — no inspector, not a debug build).
505
635
  if (!expr.questionDotToken && ts.isPropertyAccessExpression(expr.expression)) {
506
636
  const container = lowerer.stdlibGlobalMember(expr.expression, "process");
507
637
  if (container === "features") {
@@ -520,6 +650,13 @@ export function lowerProcessProperty(lowerer, expr) {
520
650
  if (ts.isPropertyAccessExpression(expr.expression.expression) &&
521
651
  expr.expression.name.text === "variables" &&
522
652
  lowerer.stdlibGlobalMember(expr.expression.expression, "process") === "config") {
653
+ // The one variable a compiled binary can answer truthfully:
654
+ // v8_enable_i18n_support. Node bundles ICU and answers the number 1;
655
+ // this read selects the `icu` runtime feature (scr_intl.c), so a
656
+ // binary that reports ICU is a binary that carries it.
657
+ if (expr.name.text === "v8_enable_i18n_support") {
658
+ return { kind: "libCall", fn: "icu.i18nSupport", args: [], type: F64, loc: locOf(expr) };
659
+ }
523
660
  return { kind: "unitLit", unit: "undefined", type: UNDEFINED_T, loc: locOf(expr) };
524
661
  }
525
662
  }
@@ -650,7 +787,16 @@ export function lowerProcessProperty(lowerer, expr) {
650
787
  return { kind: "libCall", fn: "process.execPath", args: [], type: STRING, loc };
651
788
  }
652
789
  if (member === "env") {
653
- const mapped = lowerer.mapTypeOf(lowerer.typeOf(expr));
790
+ let mapped = lowerer.mapTypeOf(lowerer.typeOf(expr));
791
+ // `(globalThis as { process?: { env?: E } }).process?.env`: the cast
792
+ // types env as optional, but Node always defines it. Snapshot into the
793
+ // record arm; the caller's coercion wraps it into the optional type.
794
+ if (mapped?.kind === "union") {
795
+ const arms = lowerer.unions.get(mapped.unionId)?.arms ?? [];
796
+ const records = arms.filter((arm) => arm.kind === "record");
797
+ if (records.length === 1 && arms.every((arm) => arm.kind === "record" || isUnitType(arm)))
798
+ mapped = records[0];
799
+ }
654
800
  if (mapped?.kind === "record") {
655
801
  const helper = envSnapshotHelper(lowerer, mapped.shapeId, loc);
656
802
  if (helper !== null) {
@@ -814,6 +960,50 @@ export function lowerProcessMethodCall(lowerer, call, access) {
814
960
  }
815
961
  return { kind: "libCall", fn: "process.stdinSetRawMode", args: [mode], type: VOID, loc };
816
962
  }
963
+ // process.stdout/stderr.on("drain", fn) and its spellings: Node emits
964
+ // 'drain' only after a write() returned false, and these writes are
965
+ // synchronous (they never return false), so the listener can never run.
966
+ // Registering it is therefore observably a no-op: the receiver and the
967
+ // listener are evaluated for their effects and nothing is retained.
968
+ // listenerCount/listeners/eventNames on the process streams stay
969
+ // refused, so the missing registration cannot be observed.
970
+ if ([
971
+ "on",
972
+ "once",
973
+ "off",
974
+ "addListener",
975
+ "removeListener",
976
+ "prependListener",
977
+ "prependOnceListener",
978
+ ].includes(access.name.text) &&
979
+ ts.isPropertyAccessExpression(access.expression) &&
980
+ call.arguments.nodes.length === 2 &&
981
+ !call.arguments.nodes.some(ts.isSpreadElement)) {
982
+ const stream = lowerer.stdlibGlobalMember(access.expression, "process");
983
+ const evT = lowerer.typeOf(call.arguments.nodes[0]);
984
+ if ((stream === "stdout" || stream === "stderr") &&
985
+ evT.isStringLiteralType() &&
986
+ evT.value === "drain") {
987
+ const loc = locOf(call);
988
+ const parent = call.parent;
989
+ const discarded = ts.isExpressionStatement(parent) || (ts.isArrowFunction(parent) && parent.body === call);
990
+ if (!discarded) {
991
+ lowerer.unsupported("SC1090", call, `using the result of process.${stream}.${access.name.text}("drain", ...) (register it as its own statement)`);
992
+ }
993
+ const stmts = [];
994
+ for (const arg of call.arguments.nodes) {
995
+ const value = lowerer.lowerExprExpecting(arg, DYN);
996
+ if (!isSafeToDiscard(value))
997
+ stmts.push({ kind: "exprStmt", expr: value, loc: value.loc });
998
+ }
999
+ // The call's value is discarded (statement position or a void arrow
1000
+ // body), so the lowering is the evaluated arguments alone; a bare
1001
+ // unitLit has no standalone IR value, so the no-op result is the
1002
+ // dynamic undefined a discarded call leaves.
1003
+ const result = dynUndefinedExpr(loc);
1004
+ return stmts.length === 0 ? result : { kind: "seqExpr", stmts, result, type: DYN, loc };
1005
+ }
1006
+ }
817
1007
  // process.stdout.on("resize", cb) (and once/off/removeListener/
818
1008
  // addListener, stderr too): the terminal resize event, registered on the
819
1009
  // runtime's process stream object (a SIGWINCH listener that emits when a
@@ -936,6 +1126,33 @@ export function lowerProcessMethodCall(lowerer, call, access) {
936
1126
  if (stream === "stdout" || stream === "stderr") {
937
1127
  const loc = locOf(call);
938
1128
  const args = call.arguments.nodes;
1129
+ // In a program that replaces a process stream's write, a write call is
1130
+ // what Node makes it: a call of the stream's CURRENT write property,
1131
+ // with the arguments as passed (the replacement sees byte chunks,
1132
+ // encodings and callbacks). The native method behind the slot is the
1133
+ // same synchronous write, so an unpatched stream behaves as before.
1134
+ if (programPatchesStdio(lowerer) && !args.some(ts.isSpreadElement)) {
1135
+ const handle = {
1136
+ kind: "libCall",
1137
+ fn: "process.stdioSlot",
1138
+ args: [numLit(stream === "stdout" ? 1 : 2, loc)],
1139
+ type: DYN,
1140
+ loc,
1141
+ };
1142
+ const invoke = {
1143
+ kind: "dynInvoke",
1144
+ recv: handle,
1145
+ method: "write",
1146
+ calleeName: ts.getTextOfNode(access),
1147
+ args: args.map((arg) => lowerer.lowerExprExpecting(arg, DYN)),
1148
+ type: DYN,
1149
+ loc,
1150
+ };
1151
+ // The declared boolean: a replacement returning something else
1152
+ // throws at a use that needs the boolean (types do not lie); a
1153
+ // discarded result is not converted.
1154
+ return resultIsDiscarded(call) ? invoke : lowerer.coerceToExpected(invoke, BOOL);
1155
+ }
939
1156
  if (args.length < 1 || args.length > 3 || args.some(ts.isSpreadElement)) {
940
1157
  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");
941
1158
  }
@@ -1020,6 +1237,22 @@ export function lowerProcessMethodCall(lowerer, call, access) {
1020
1237
  if (data.type.kind === "dyn" && isJsSourceFile(ts.getSourceFileOfNode(call))) {
1021
1238
  data = { kind: "dynCheck", value: data, type: STRING, loc };
1022
1239
  }
1240
+ // A chunk known only at run time (`any`, or a string | Uint8Array
1241
+ // union): the runtime dispatches on the value — a string or a
1242
+ // Uint8Array/Buffer writes, null throws ERR_STREAM_NULL_VALUES, any
1243
+ // other value throws ERR_INVALID_ARG_TYPE, as Node's Writable.write
1244
+ // does before writing anything. Only the one-argument form.
1245
+ if (args.length === 1 &&
1246
+ (data.type.kind === "dyn" || data.type.kind === "union") &&
1247
+ (data.type.kind === "dyn" || lowerer.dynConvertible(data.type))) {
1248
+ return {
1249
+ kind: "libCall",
1250
+ fn: "process.stdioWriteDyn",
1251
+ args: [numLit(stream === "stdout" ? 1 : 2, loc), lowerer.coerceToExpected(data, DYN)],
1252
+ type: BOOL,
1253
+ loc,
1254
+ };
1255
+ }
1023
1256
  const isBytes = data.type.kind === "bytes" && data.type.elem === "u8";
1024
1257
  if (!isBytes && data.type.kind !== "string") {
1025
1258
  lowerer.noLowering(`process.${stream}.write of non-string data`, args[0], "strings and Buffer/Uint8Array values write; narrow unions first");
@@ -1141,13 +1374,25 @@ export function lowerProcessMethodCall(lowerer, call, access) {
1141
1374
  // the listener to a const so both sites see the same value), and
1142
1375
  // `removeListener` IS `off` — Node aliases them.
1143
1376
  const isOff = member === "off" || member === "removeListener";
1144
- if (member === "on" || member === "once" || isOff) {
1377
+ // process.prependListener(event, cb): Node's front-of-list registration.
1378
+ // The signal, 'exit', and 'uncaughtException'/'uncaughtExceptionMonitor'
1379
+ // registries have a prepend entry; every other family registers by
1380
+ // appending only, so it refuses rather than reordering silently.
1381
+ // prependOnceListener has no runtime entry at all.
1382
+ const isPrepend = member === "prependListener";
1383
+ if (member === "prependOnceListener") {
1384
+ lowerer.noLowering("process.prependOnceListener", access, "use prependListener or once (prependOnceListener has no lowering)");
1385
+ }
1386
+ if (member === "on" || member === "once" || isOff || isPrepend) {
1145
1387
  if (call.arguments.nodes.length !== 2) {
1146
1388
  lowerer.noLowering(`process.${member} with ${call.arguments.nodes.length} arguments`, call);
1147
1389
  }
1148
1390
  const evT = lowerer.typeOf(call.arguments.nodes[0]);
1149
1391
  const event = evT.isStringLiteralType() ? evT.value : null;
1150
1392
  if ((event === "message" || event === "disconnect") && !isOff) {
1393
+ if (isPrepend) {
1394
+ lowerer.noLowering(`process.prependListener("${event}", ...)`, call, "prependListener is supported for signals, 'exit', and 'uncaughtException' (register these families with on/once)");
1395
+ }
1151
1396
  if (!resultIsDiscarded(call)) {
1152
1397
  lowerer.unsupported("SC1090", call, "chaining process IPC listener registration (register each listener as its own statement)");
1153
1398
  }
@@ -1170,8 +1415,16 @@ export function lowerProcessMethodCall(lowerer, call, access) {
1170
1415
  const monitor = boolLit(event === "uncaughtExceptionMonitor", loc);
1171
1416
  return {
1172
1417
  kind: "libCall",
1173
- fn: isOff ? "process.offUncaughtException" : "process.onUncaughtException",
1174
- args: isOff ? [cb, monitor] : [cb, boolLit(member === "once", loc), monitor],
1418
+ fn: isOff
1419
+ ? "process.offUncaughtException"
1420
+ : isPrepend
1421
+ ? "process.prependUncaughtException"
1422
+ : "process.onUncaughtException",
1423
+ args: isOff
1424
+ ? [cb, monitor]
1425
+ : isPrepend
1426
+ ? [cb, monitor]
1427
+ : [cb, boolLit(member === "once", loc), monitor],
1175
1428
  type: VOID,
1176
1429
  loc,
1177
1430
  };
@@ -1185,6 +1438,9 @@ export function lowerProcessMethodCall(lowerer, call, access) {
1185
1438
  // a handler attached after delivery fires it once, synchronously
1186
1439
  // with the promise.
1187
1440
  if (event === "unhandledRejection" || event === "rejectionHandled") {
1441
+ if (isPrepend) {
1442
+ lowerer.noLowering(`process.prependListener("${event}", ...)`, call, "prependListener is supported for signals, 'exit', and 'uncaughtException' (register these families with on/once)");
1443
+ }
1188
1444
  if (!resultIsDiscarded(call)) {
1189
1445
  lowerer.unsupported("SC1090", call, "chaining process listener registration (the result is void here — register each listener as its own statement)");
1190
1446
  }
@@ -1203,6 +1459,9 @@ export function lowerProcessMethodCall(lowerer, call, access) {
1203
1459
  // util.deprecate dispatch on the next tick. off/removeListener remove
1204
1460
  // by closure identity.
1205
1461
  if (event === "warning" && (member === "on" || isOff)) {
1462
+ if (isPrepend) {
1463
+ lowerer.noLowering('process.prependListener("warning", ...)', call, "prependListener is supported for signals, 'exit', and 'uncaughtException' (register this family with on)");
1464
+ }
1206
1465
  if (!resultIsDiscarded(call)) {
1207
1466
  lowerer.unsupported("SC1090", call, "chaining process listener registration (the result is void here — register each listener as its own statement)");
1208
1467
  }
@@ -1229,8 +1488,12 @@ export function lowerProcessMethodCall(lowerer, call, access) {
1229
1488
  const cb = lowerDiagnosticsSubscriber(lowerer, call.arguments.nodes[1]);
1230
1489
  return {
1231
1490
  kind: "libCall",
1232
- fn: isOff ? "process.offSignal" : "process.onSignal",
1233
- args: isOff ? [signal, cb] : [signal, cb, boolLit(member === "once", loc)],
1491
+ fn: isOff ? "process.offSignal" : isPrepend ? "process.prependSignal" : "process.onSignal",
1492
+ args: isOff
1493
+ ? [signal, cb]
1494
+ : isPrepend
1495
+ ? [signal, cb]
1496
+ : [signal, cb, boolLit(member === "once", loc)],
1234
1497
  type: VOID,
1235
1498
  loc,
1236
1499
  };
@@ -1282,6 +1545,9 @@ export function lowerProcessMethodCall(lowerer, call, access) {
1282
1545
  if (isOff) {
1283
1546
  return { kind: "libCall", fn: "process.offExit", args: [cb], type: VOID, loc };
1284
1547
  }
1548
+ if (isPrepend) {
1549
+ return { kind: "libCall", fn: "process.prependExit", args: [cb], type: VOID, loc };
1550
+ }
1285
1551
  return { kind: "libCall", fn: "process.onExit", args: [cb, onceArg], type: VOID, loc };
1286
1552
  }
1287
1553
  // process.emitWarning(...): the argument vector crosses as ONE dyn