@scriptc/compiler 0.4.4 → 0.4.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 (775) hide show
  1. package/ambient/scriptc-node-fallback.d.ts +198 -44
  2. package/ambient/scriptc-overrides.d.ts +21 -0
  3. package/dist/backend/executable-features.js +3 -0
  4. package/dist/backend/executable-features.js.map +1 -1
  5. package/dist/backend/library-pack.js +2 -1
  6. package/dist/backend/library-pack.js.map +1 -1
  7. package/dist/backend/linker.js +11 -1
  8. package/dist/backend/linker.js.map +1 -1
  9. package/dist/backend/lld.d.ts +9 -0
  10. package/dist/backend/lld.js +48 -0
  11. package/dist/backend/lld.js.map +1 -0
  12. package/dist/backend/lld.test.d.ts +1 -0
  13. package/dist/backend/lld.test.js +53 -0
  14. package/dist/backend/lld.test.js.map +1 -0
  15. package/dist/backend/llvm/appended-array-literals.d.ts +11 -1
  16. package/dist/backend/llvm/appended-array-literals.js +29 -0
  17. package/dist/backend/llvm/appended-array-literals.js.map +1 -1
  18. package/dist/backend/llvm/blocks.js +10 -1
  19. package/dist/backend/llvm/blocks.js.map +1 -1
  20. package/dist/backend/llvm/bytes-alias.d.ts +13 -4
  21. package/dist/backend/llvm/bytes-alias.js +16 -5
  22. package/dist/backend/llvm/bytes-alias.js.map +1 -1
  23. package/dist/backend/llvm/bytes-bounds.d.ts +5 -1
  24. package/dist/backend/llvm/bytes-bounds.js +199 -2
  25. package/dist/backend/llvm/bytes-bounds.js.map +1 -1
  26. package/dist/backend/llvm/bytes-loop-versions.d.ts +45 -3
  27. package/dist/backend/llvm/bytes-loop-versions.js +238 -20
  28. package/dist/backend/llvm/bytes-loop-versions.js.map +1 -1
  29. package/dist/backend/llvm/bytes-loop-versions.test.js +11 -4
  30. package/dist/backend/llvm/bytes-loop-versions.test.js.map +1 -1
  31. package/dist/backend/llvm/call-lifetimes.d.ts +8 -2
  32. package/dist/backend/llvm/call-lifetimes.js +87 -18
  33. package/dist/backend/llvm/call-lifetimes.js.map +1 -1
  34. package/dist/backend/llvm/call-lifetimes.test.js +132 -0
  35. package/dist/backend/llvm/call-lifetimes.test.js.map +1 -1
  36. package/dist/backend/llvm/classes.d.ts +3 -2
  37. package/dist/backend/llvm/classes.js +4 -4
  38. package/dist/backend/llvm/classes.js.map +1 -1
  39. package/dist/backend/llvm/counted-loops.d.ts +14 -2
  40. package/dist/backend/llvm/counted-loops.js +54 -5
  41. package/dist/backend/llvm/counted-loops.js.map +1 -1
  42. package/dist/backend/llvm/debug-info.d.ts +42 -1
  43. package/dist/backend/llvm/debug-info.js +70 -1
  44. package/dist/backend/llvm/debug-info.js.map +1 -1
  45. package/dist/backend/llvm/dense-array-loops.js +2 -2
  46. package/dist/backend/llvm/dense-array-loops.js.map +1 -1
  47. package/dist/backend/llvm/dense-array-loops.test.js +1 -0
  48. package/dist/backend/llvm/dense-array-loops.test.js.map +1 -1
  49. package/dist/backend/llvm/dyn.d.ts +65 -8
  50. package/dist/backend/llvm/dyn.js +375 -40
  51. package/dist/backend/llvm/dyn.js.map +1 -1
  52. package/dist/backend/llvm/emit-function.js +28 -8
  53. package/dist/backend/llvm/emit-function.js.map +1 -1
  54. package/dist/backend/llvm/emit-journal.d.ts +8 -4
  55. package/dist/backend/llvm/emit-journal.js +75 -5
  56. package/dist/backend/llvm/emit-journal.js.map +1 -1
  57. package/dist/backend/llvm/emit-module.d.ts +4 -0
  58. package/dist/backend/llvm/emit-module.js +58 -23
  59. package/dist/backend/llvm/emit-module.js.map +1 -1
  60. package/dist/backend/llvm/emit-statements.js +297 -28
  61. package/dist/backend/llvm/emit-statements.js.map +1 -1
  62. package/dist/backend/llvm/emitter.d.ts +134 -13
  63. package/dist/backend/llvm/emitter.js +514 -87
  64. package/dist/backend/llvm/emitter.js.map +1 -1
  65. package/dist/backend/llvm/expr-bytes.d.ts +6 -4
  66. package/dist/backend/llvm/expr-bytes.js +31 -8
  67. package/dist/backend/llvm/expr-bytes.js.map +1 -1
  68. package/dist/backend/llvm/expr-calls.js +13 -11
  69. package/dist/backend/llvm/expr-calls.js.map +1 -1
  70. package/dist/backend/llvm/expr-containers.d.ts +11 -0
  71. package/dist/backend/llvm/expr-containers.js +87 -9
  72. package/dist/backend/llvm/expr-containers.js.map +1 -1
  73. package/dist/backend/llvm/expr-context.d.ts +3 -0
  74. package/dist/backend/llvm/expr-control.js +83 -0
  75. package/dist/backend/llvm/expr-control.js.map +1 -1
  76. package/dist/backend/llvm/expr-dynamic.d.ts +1 -1
  77. package/dist/backend/llvm/expr-dynamic.js +22 -4
  78. package/dist/backend/llvm/expr-dynamic.js.map +1 -1
  79. package/dist/backend/llvm/expr-primitives.js +107 -9
  80. package/dist/backend/llvm/expr-primitives.js.map +1 -1
  81. package/dist/backend/llvm/expr-stream-bridges.js +95 -22
  82. package/dist/backend/llvm/expr-stream-bridges.js.map +1 -1
  83. package/dist/backend/llvm/forked-analysis.d.ts +8 -0
  84. package/dist/backend/llvm/forked-analysis.js +43 -0
  85. package/dist/backend/llvm/forked-analysis.js.map +1 -0
  86. package/dist/backend/llvm/integer-values.d.ts +7 -0
  87. package/dist/backend/llvm/integer-values.js +42 -2
  88. package/dist/backend/llvm/integer-values.js.map +1 -1
  89. package/dist/backend/llvm/integer-views.d.ts +2 -1
  90. package/dist/backend/llvm/integer-views.js +12 -1
  91. package/dist/backend/llvm/integer-views.js.map +1 -1
  92. package/dist/backend/llvm/js-ic.d.ts +4 -0
  93. package/dist/backend/llvm/js-ic.js +133 -15
  94. package/dist/backend/llvm/js-ic.js.map +1 -1
  95. package/dist/backend/llvm/layouts.d.ts +1 -0
  96. package/dist/backend/llvm/layouts.js.map +1 -1
  97. package/dist/backend/llvm/lazy-captures.d.ts +6 -1
  98. package/dist/backend/llvm/lazy-captures.js +10 -5
  99. package/dist/backend/llvm/lazy-captures.js.map +1 -1
  100. package/dist/backend/llvm/lib-abi.d.ts +5 -0
  101. package/dist/backend/llvm/lib-abi.js +19 -0
  102. package/dist/backend/llvm/lib-abi.js.map +1 -1
  103. package/dist/backend/llvm/lib-dispatch.js +128 -42
  104. package/dist/backend/llvm/lib-dispatch.js.map +1 -1
  105. package/dist/backend/llvm/lib-filesystem.d.ts +10 -0
  106. package/dist/backend/llvm/lib-filesystem.js +32 -0
  107. package/dist/backend/llvm/lib-filesystem.js.map +1 -1
  108. package/dist/backend/llvm/lib-http2.js +2 -2
  109. package/dist/backend/llvm/lib-http2.js.map +1 -1
  110. package/dist/backend/llvm/lib-network.js +2 -0
  111. package/dist/backend/llvm/lib-network.js.map +1 -1
  112. package/dist/backend/llvm/lib-process.js +11 -0
  113. package/dist/backend/llvm/lib-process.js.map +1 -1
  114. package/dist/backend/llvm/lib-shared.js +43 -0
  115. package/dist/backend/llvm/lib-shared.js.map +1 -1
  116. package/dist/backend/llvm/lib-tls.js +28 -3
  117. package/dist/backend/llvm/lib-tls.js.map +1 -1
  118. package/dist/backend/llvm/local-union-storage.test.js +2 -1
  119. package/dist/backend/llvm/local-union-storage.test.js.map +1 -1
  120. package/dist/backend/llvm/loop-array-borrows.d.ts +4 -1
  121. package/dist/backend/llvm/loop-array-borrows.js +11 -5
  122. package/dist/backend/llvm/loop-array-borrows.js.map +1 -1
  123. package/dist/backend/llvm/map-entry-fusion.d.ts +5 -3
  124. package/dist/backend/llvm/map-entry-fusion.js +20 -11
  125. package/dist/backend/llvm/map-entry-fusion.js.map +1 -1
  126. package/dist/backend/llvm/map-entry-fusion.test.js +14 -6
  127. package/dist/backend/llvm/map-entry-fusion.test.js.map +1 -1
  128. package/dist/backend/llvm/map-number-lookup.d.ts +16 -6
  129. package/dist/backend/llvm/map-number-lookup.js +41 -9
  130. package/dist/backend/llvm/map-number-lookup.js.map +1 -1
  131. package/dist/backend/llvm/map-number-lookup.test.js +70 -2
  132. package/dist/backend/llvm/map-number-lookup.test.js.map +1 -1
  133. package/dist/backend/llvm/map-read-lifetimes.d.ts +25 -2
  134. package/dist/backend/llvm/map-read-lifetimes.js +136 -6
  135. package/dist/backend/llvm/map-read-lifetimes.js.map +1 -1
  136. package/dist/backend/llvm/map-read-lifetimes.test.js +8 -3
  137. package/dist/backend/llvm/map-read-lifetimes.test.js.map +1 -1
  138. package/dist/backend/llvm/nullable-unions.d.ts +5 -0
  139. package/dist/backend/llvm/nullable-unions.js +29 -2
  140. package/dist/backend/llvm/nullable-unions.js.map +1 -1
  141. package/dist/backend/llvm/nullable-unions.test.js +25 -1
  142. package/dist/backend/llvm/nullable-unions.test.js.map +1 -1
  143. package/dist/backend/llvm/record-union-keys.test.d.ts +1 -0
  144. package/dist/backend/llvm/record-union-keys.test.js +161 -0
  145. package/dist/backend/llvm/record-union-keys.test.js.map +1 -0
  146. package/dist/backend/llvm/serialized-ir-emission.test.js +2 -0
  147. package/dist/backend/llvm/serialized-ir-emission.test.js.map +1 -1
  148. package/dist/backend/llvm/shapes.d.ts +4 -5
  149. package/dist/backend/llvm/shapes.js +104 -51
  150. package/dist/backend/llvm/shapes.js.map +1 -1
  151. package/dist/backend/llvm/shapes.test.js +14 -2
  152. package/dist/backend/llvm/shapes.test.js.map +1 -1
  153. package/dist/backend/llvm/speculative-integers.d.ts +50 -3
  154. package/dist/backend/llvm/speculative-integers.js +411 -24
  155. package/dist/backend/llvm/speculative-integers.js.map +1 -1
  156. package/dist/backend/llvm/speculative-integers.test.js +103 -1
  157. package/dist/backend/llvm/speculative-integers.test.js.map +1 -1
  158. package/dist/backend/llvm/split.d.ts +10 -1
  159. package/dist/backend/llvm/split.js +243 -59
  160. package/dist/backend/llvm/split.js.map +1 -1
  161. package/dist/backend/llvm/split.test.js +92 -13
  162. package/dist/backend/llvm/split.test.js.map +1 -1
  163. package/dist/backend/llvm/stack-objects.test.js +3 -2
  164. package/dist/backend/llvm/stack-objects.test.js.map +1 -1
  165. package/dist/backend/llvm/string-lifetimes.test.js +1 -1
  166. package/dist/backend/llvm/string-lifetimes.test.js.map +1 -1
  167. package/dist/backend/llvm/string-reads.d.ts +13 -0
  168. package/dist/backend/llvm/string-reads.js +22 -0
  169. package/dist/backend/llvm/string-reads.js.map +1 -1
  170. package/dist/backend/llvm/string-slices.d.ts +36 -2
  171. package/dist/backend/llvm/string-slices.js +308 -12
  172. package/dist/backend/llvm/string-slices.js.map +1 -1
  173. package/dist/backend/llvm/string-slices.test.js +182 -3
  174. package/dist/backend/llvm/string-slices.test.js.map +1 -1
  175. package/dist/backend/llvm/string-unit-versions.d.ts +11 -0
  176. package/dist/backend/llvm/string-unit-versions.js +191 -0
  177. package/dist/backend/llvm/string-unit-versions.js.map +1 -0
  178. package/dist/backend/llvm/string-unit-versions.test.d.ts +1 -0
  179. package/dist/backend/llvm/string-unit-versions.test.js +117 -0
  180. package/dist/backend/llvm/string-unit-versions.test.js.map +1 -0
  181. package/dist/backend/llvm/test-boxed-unions.d.ts +5 -2
  182. package/dist/backend/llvm/test-boxed-unions.js +24 -8
  183. package/dist/backend/llvm/test-boxed-unions.js.map +1 -1
  184. package/dist/backend/llvm/unwind-abi.d.ts +52 -0
  185. package/dist/backend/llvm/unwind-abi.js +498 -0
  186. package/dist/backend/llvm/unwind-abi.js.map +1 -0
  187. package/dist/backend/llvm/unwind-abi.test.d.ts +1 -0
  188. package/dist/backend/llvm/unwind-abi.test.js +255 -0
  189. package/dist/backend/llvm/unwind-abi.test.js.map +1 -0
  190. package/dist/backend/llvm/wrapping-sums.d.ts +14 -10
  191. package/dist/backend/llvm/wrapping-sums.js +31 -14
  192. package/dist/backend/llvm/wrapping-sums.js.map +1 -1
  193. package/dist/backend/loop-polls.d.ts +6 -0
  194. package/dist/backend/loop-polls.js +24 -0
  195. package/dist/backend/loop-polls.js.map +1 -1
  196. package/dist/backend/may-throw.js +8 -8
  197. package/dist/backend/may-throw.js.map +1 -1
  198. package/dist/backend/native/contracts.d.ts +12 -2
  199. package/dist/backend/native/executable.js +48 -6
  200. package/dist/backend/native/executable.js.map +1 -1
  201. package/dist/backend/native/library.js +4 -3
  202. package/dist/backend/native/library.js.map +1 -1
  203. package/dist/backend/native/program-shards.d.ts +2 -2
  204. package/dist/backend/native/program-shards.js +2 -2
  205. package/dist/backend/native/program-shards.js.map +1 -1
  206. package/dist/backend/native/runtime-inputs.d.ts +1 -1
  207. package/dist/backend/native/runtime-inputs.js +4 -1
  208. package/dist/backend/native/runtime-inputs.js.map +1 -1
  209. package/dist/backend/native/vendor.d.ts +1 -1
  210. package/dist/backend/native/vendor.js +1 -1
  211. package/dist/backend/native/vendor.js.map +1 -1
  212. package/dist/backend/native-codegen.d.ts +3 -1
  213. package/dist/backend/native-codegen.js +4 -3
  214. package/dist/backend/native-codegen.js.map +1 -1
  215. package/dist/backend/native-link-info-core.d.ts +8 -0
  216. package/dist/backend/native-link-info-core.js.map +1 -1
  217. package/dist/backend/native-profile.d.ts +14 -0
  218. package/dist/backend/native-profile.js +28 -0
  219. package/dist/backend/native-profile.js.map +1 -1
  220. package/dist/backend/native-profile.test.js +8 -1
  221. package/dist/backend/native-profile.test.js.map +1 -1
  222. package/dist/backend/native-toolchain.test.js +11 -11
  223. package/dist/backend/native-toolchain.test.js.map +1 -1
  224. package/dist/backend/runtime-abi.d.ts +2 -2
  225. package/dist/backend/runtime-abi.js +2 -2
  226. package/dist/backend/runtime-pack-core.d.ts +3 -1
  227. package/dist/backend/runtime-pack-core.js +2 -0
  228. package/dist/backend/runtime-pack-core.js.map +1 -1
  229. package/dist/backend/runtime-pack-native.d.ts +17 -5
  230. package/dist/backend/runtime-pack-native.js +186 -14
  231. package/dist/backend/runtime-pack-native.js.map +1 -1
  232. package/dist/backend/runtime-pack-native.test.js +160 -3
  233. package/dist/backend/runtime-pack-native.test.js.map +1 -1
  234. package/dist/backend/runtime-pack-targets.test.js +2 -1
  235. package/dist/backend/runtime-pack-targets.test.js.map +1 -1
  236. package/dist/backend/runtime-pack.test.js +2 -1
  237. package/dist/backend/runtime-pack.test.js.map +1 -1
  238. package/dist/backend/vendor-archives.d.ts +4 -1
  239. package/dist/backend/vendor-archives.js +78 -4
  240. package/dist/backend/vendor-archives.js.map +1 -1
  241. package/dist/backend/vendor-inputs.d.ts +3 -1
  242. package/dist/backend/vendor-inputs.js +3 -1
  243. package/dist/backend/vendor-inputs.js.map +1 -1
  244. package/dist/backend/warm-cache.js +1 -0
  245. package/dist/backend/warm-cache.js.map +1 -1
  246. package/dist/cli/command.js +78 -11
  247. package/dist/cli/command.js.map +1 -1
  248. package/dist/cli/usage.d.ts +22 -1
  249. package/dist/cli/usage.js +33 -3
  250. package/dist/cli/usage.js.map +1 -1
  251. package/dist/compat/fetch-profile.d.ts +15 -6
  252. package/dist/compat/fetch-profile.js +519 -498
  253. package/dist/compat/fetch-profile.js.map +1 -1
  254. package/dist/compile-types.d.ts +7 -0
  255. package/dist/contracts/int32-elements.js +2 -1
  256. package/dist/contracts/int32-elements.js.map +1 -1
  257. package/dist/coverage/report.d.ts +14 -3
  258. package/dist/coverage/report.js +216 -0
  259. package/dist/coverage/report.js.map +1 -1
  260. package/dist/coverage/surface-manifest.js +25 -25
  261. package/dist/coverage/surface-manifest.js.map +1 -1
  262. package/dist/coverage/verdict-cache.d.ts +2 -0
  263. package/dist/coverage/verdict-cache.js +10 -1
  264. package/dist/coverage/verdict-cache.js.map +1 -1
  265. package/dist/diagnostics/diagnostic.d.ts +19 -0
  266. package/dist/diagnostics/diagnostic.js +52 -1
  267. package/dist/diagnostics/diagnostic.js.map +1 -1
  268. package/dist/diagnostics/envelope.d.ts +54 -0
  269. package/dist/diagnostics/envelope.js +7 -1
  270. package/dist/diagnostics/envelope.js.map +1 -1
  271. package/dist/diagnostics/render.d.ts +7 -0
  272. package/dist/diagnostics/render.js +15 -4
  273. package/dist/diagnostics/render.js.map +1 -1
  274. package/dist/executable/executable-cache.d.ts +3 -0
  275. package/dist/executable/executable-cache.js +1 -0
  276. package/dist/executable/executable-cache.js.map +1 -1
  277. package/dist/executable/executable-cache.test.js +1 -0
  278. package/dist/executable/executable-cache.test.js.map +1 -1
  279. package/dist/executable/prepare.js +5 -1
  280. package/dist/executable/prepare.js.map +1 -1
  281. package/dist/frontend/analysis.js +26 -2
  282. package/dist/frontend/analysis.js.map +1 -1
  283. package/dist/frontend/fork-target.js +67 -1
  284. package/dist/frontend/fork-target.js.map +1 -1
  285. package/dist/frontend/fork-target.test.js +43 -0
  286. package/dist/frontend/fork-target.test.js.map +1 -1
  287. package/dist/frontend/input-tracker.d.ts +4 -1
  288. package/dist/frontend/input-tracker.js +42 -4
  289. package/dist/frontend/input-tracker.js.map +1 -1
  290. package/dist/frontend/input-tracker.test.js +45 -0
  291. package/dist/frontend/input-tracker.test.js.map +1 -1
  292. package/dist/frontend/lowering/abstract-equality.js +38 -1
  293. package/dist/frontend/lowering/abstract-equality.js.map +1 -1
  294. package/dist/frontend/lowering/argument-counts.d.ts +36 -0
  295. package/dist/frontend/lowering/argument-counts.js +201 -0
  296. package/dist/frontend/lowering/argument-counts.js.map +1 -0
  297. package/dist/frontend/lowering/array-values.d.ts +27 -0
  298. package/dist/frontend/lowering/array-values.js +112 -0
  299. package/dist/frontend/lowering/array-values.js.map +1 -1
  300. package/dist/frontend/lowering/binding-analysis.d.ts +3 -0
  301. package/dist/frontend/lowering/binding-analysis.js +9 -3
  302. package/dist/frontend/lowering/binding-analysis.js.map +1 -1
  303. package/dist/frontend/lowering/builtin-namespaces.d.ts +13 -0
  304. package/dist/frontend/lowering/builtin-namespaces.js +238 -0
  305. package/dist/frontend/lowering/builtin-namespaces.js.map +1 -0
  306. package/dist/frontend/lowering/builtins/compression.d.ts +4 -3
  307. package/dist/frontend/lowering/builtins/compression.js +86 -5
  308. package/dist/frontend/lowering/builtins/compression.js.map +1 -1
  309. package/dist/frontend/lowering/builtins/date-classes.js +17 -1
  310. package/dist/frontend/lowering/builtins/date-classes.js.map +1 -1
  311. package/dist/frontend/lowering/builtins/dates.d.ts +19 -5
  312. package/dist/frontend/lowering/builtins/dates.js +159 -8
  313. package/dist/frontend/lowering/builtins/dates.js.map +1 -1
  314. package/dist/frontend/lowering/builtins/filesystem-calls.js +26 -1
  315. package/dist/frontend/lowering/builtins/filesystem-calls.js.map +1 -1
  316. package/dist/frontend/lowering/builtins/fs-streams.d.ts +4 -0
  317. package/dist/frontend/lowering/builtins/fs-streams.js +24 -1
  318. package/dist/frontend/lowering/builtins/fs-streams.js.map +1 -1
  319. package/dist/frontend/lowering/builtins/json.d.ts +4 -1
  320. package/dist/frontend/lowering/builtins/json.js +9 -3
  321. package/dist/frontend/lowering/builtins/json.js.map +1 -1
  322. package/dist/frontend/lowering/builtins/module-bindings.d.ts +6 -0
  323. package/dist/frontend/lowering/builtins/module-bindings.js +23 -1
  324. package/dist/frontend/lowering/builtins/module-bindings.js.map +1 -1
  325. package/dist/frontend/lowering/builtins/module-resolution.d.ts +5 -0
  326. package/dist/frontend/lowering/builtins/module-resolution.js +95 -4
  327. package/dist/frontend/lowering/builtins/module-resolution.js.map +1 -1
  328. package/dist/frontend/lowering/builtins/promises.js +144 -1
  329. package/dist/frontend/lowering/builtins/promises.js.map +1 -1
  330. package/dist/frontend/lowering/builtins/readline.d.ts +5 -1
  331. package/dist/frontend/lowering/builtins/readline.js +22 -11
  332. package/dist/frontend/lowering/builtins/readline.js.map +1 -1
  333. package/dist/frontend/lowering/builtins/reflection.d.ts +4 -1
  334. package/dist/frontend/lowering/builtins/reflection.js +41 -1
  335. package/dist/frontend/lowering/builtins/reflection.js.map +1 -1
  336. package/dist/frontend/lowering/builtins/text-codecs.js +31 -2
  337. package/dist/frontend/lowering/builtins/text-codecs.js.map +1 -1
  338. package/dist/frontend/lowering/builtins/webassembly.js +4 -1
  339. package/dist/frontend/lowering/builtins/webassembly.js.map +1 -1
  340. package/dist/frontend/lowering/builtins/x509.d.ts +33 -0
  341. package/dist/frontend/lowering/builtins/x509.js +431 -0
  342. package/dist/frontend/lowering/builtins/x509.js.map +1 -0
  343. package/dist/frontend/lowering/call-arguments.js +44 -0
  344. package/dist/frontend/lowering/call-arguments.js.map +1 -1
  345. package/dist/frontend/lowering/call-signatures.js +1 -1
  346. package/dist/frontend/lowering/call-signatures.js.map +1 -1
  347. package/dist/frontend/lowering/cjs-inline-require.js +1 -1
  348. package/dist/frontend/lowering/cjs-inline-require.js.map +1 -1
  349. package/dist/frontend/lowering/class-attributes.d.ts +7 -0
  350. package/dist/frontend/lowering/class-attributes.js +52 -10
  351. package/dist/frontend/lowering/class-attributes.js.map +1 -1
  352. package/dist/frontend/lowering/class-dynamic-dispatch.d.ts +13 -0
  353. package/dist/frontend/lowering/class-dynamic-dispatch.js +174 -9
  354. package/dist/frontend/lowering/class-dynamic-dispatch.js.map +1 -1
  355. package/dist/frontend/lowering/class-method-mutations.js +43 -8
  356. package/dist/frontend/lowering/class-method-mutations.js.map +1 -1
  357. package/dist/frontend/lowering/class-method-values.js +71 -1
  358. package/dist/frontend/lowering/class-method-values.js.map +1 -1
  359. package/dist/frontend/lowering/class-prototypes.d.ts +8 -0
  360. package/dist/frontend/lowering/class-prototypes.js +83 -2
  361. package/dist/frontend/lowering/class-prototypes.js.map +1 -1
  362. package/dist/frontend/lowering/class-to-primitive.d.ts +5 -0
  363. package/dist/frontend/lowering/class-to-primitive.js +79 -7
  364. package/dist/frontend/lowering/class-to-primitive.js.map +1 -1
  365. package/dist/frontend/lowering/coercions/state.d.ts +1 -0
  366. package/dist/frontend/lowering/coercions/state.js.map +1 -1
  367. package/dist/frontend/lowering/coercions/structural.js +89 -10
  368. package/dist/frontend/lowering/coercions/structural.js.map +1 -1
  369. package/dist/frontend/lowering/coercions/unions.d.ts +4 -2
  370. package/dist/frontend/lowering/coercions/unions.js +13 -6
  371. package/dist/frontend/lowering/coercions/unions.js.map +1 -1
  372. package/dist/frontend/lowering/containers/array-callbacks.js +51 -15
  373. package/dist/frontend/lowering/containers/array-callbacks.js.map +1 -1
  374. package/dist/frontend/lowering/containers/array-construction.d.ts +4 -1
  375. package/dist/frontend/lowering/containers/array-construction.js +102 -9
  376. package/dist/frontend/lowering/containers/array-construction.js.map +1 -1
  377. package/dist/frontend/lowering/containers/array-methods.js +85 -5
  378. package/dist/frontend/lowering/containers/array-methods.js.map +1 -1
  379. package/dist/frontend/lowering/containers/array-pipelines.js +346 -77
  380. package/dist/frontend/lowering/containers/array-pipelines.js.map +1 -1
  381. package/dist/frontend/lowering/containers/callback-arguments.js +11 -1
  382. package/dist/frontend/lowering/containers/callback-arguments.js.map +1 -1
  383. package/dist/frontend/lowering/containers/collection-methods.js +12 -0
  384. package/dist/frontend/lowering/containers/collection-methods.js.map +1 -1
  385. package/dist/frontend/lowering/containers/indexed-objects.js +73 -25
  386. package/dist/frontend/lowering/containers/indexed-objects.js.map +1 -1
  387. package/dist/frontend/lowering/containers/iterator-helpers.d.ts +4 -4
  388. package/dist/frontend/lowering/containers/iterator-helpers.js +8 -2
  389. package/dist/frontend/lowering/containers/iterator-helpers.js.map +1 -1
  390. package/dist/frontend/lowering/containers/replacer-params.d.ts +37 -0
  391. package/dist/frontend/lowering/containers/replacer-params.js +294 -0
  392. package/dist/frontend/lowering/containers/replacer-params.js.map +1 -0
  393. package/dist/frontend/lowering/containers/replacer-params.test.d.ts +1 -0
  394. package/dist/frontend/lowering/containers/replacer-params.test.js +61 -0
  395. package/dist/frontend/lowering/containers/replacer-params.test.js.map +1 -0
  396. package/dist/frontend/lowering/containers/string-and-regexp.js +2 -1
  397. package/dist/frontend/lowering/containers/string-and-regexp.js.map +1 -1
  398. package/dist/frontend/lowering/containers/string-replacement.js +7 -3
  399. package/dist/frontend/lowering/containers/string-replacement.js.map +1 -1
  400. package/dist/frontend/lowering/cycle-initialization.d.ts +4 -2
  401. package/dist/frontend/lowering/cycle-initialization.js +4 -1
  402. package/dist/frontend/lowering/cycle-initialization.js.map +1 -1
  403. package/dist/frontend/lowering/date-values.d.ts +9 -6
  404. package/dist/frontend/lowering/date-values.js +63 -16
  405. package/dist/frontend/lowering/date-values.js.map +1 -1
  406. package/dist/frontend/lowering/deferred-module-initializers.js +16 -8
  407. package/dist/frontend/lowering/deferred-module-initializers.js.map +1 -1
  408. package/dist/frontend/lowering/deferred-module-initializers.test.js +22 -6
  409. package/dist/frontend/lowering/deferred-module-initializers.test.js.map +1 -1
  410. package/dist/frontend/lowering/dispatch-sites.js +1 -0
  411. package/dist/frontend/lowering/dispatch-sites.js.map +1 -1
  412. package/dist/frontend/lowering/expressions/array-literals.d.ts +0 -8
  413. package/dist/frontend/lowering/expressions/array-literals.js +119 -26
  414. package/dist/frontend/lowering/expressions/array-literals.js.map +1 -1
  415. package/dist/frontend/lowering/expressions/binary.js +38 -0
  416. package/dist/frontend/lowering/expressions/binary.js.map +1 -1
  417. package/dist/frontend/lowering/expressions/element-access.js +50 -6
  418. package/dist/frontend/lowering/expressions/element-access.js.map +1 -1
  419. package/dist/frontend/lowering/expressions/identifiers.js +35 -3
  420. package/dist/frontend/lowering/expressions/identifiers.js.map +1 -1
  421. package/dist/frontend/lowering/expressions/narrowing.d.ts +2 -1
  422. package/dist/frontend/lowering/expressions/narrowing.js +8 -1
  423. package/dist/frontend/lowering/expressions/narrowing.js.map +1 -1
  424. package/dist/frontend/lowering/expressions/object-literals.js +8 -2
  425. package/dist/frontend/lowering/expressions/object-literals.js.map +1 -1
  426. package/dist/frontend/lowering/expressions/property-access.js +65 -34
  427. package/dist/frontend/lowering/expressions/property-access.js.map +1 -1
  428. package/dist/frontend/lowering/expressions/relational.js +76 -11
  429. package/dist/frontend/lowering/expressions/relational.js.map +1 -1
  430. package/dist/frontend/lowering/expressions/typeof.js +6 -1
  431. package/dist/frontend/lowering/expressions/typeof.js.map +1 -1
  432. package/dist/frontend/lowering/expressions/updates.js +20 -11
  433. package/dist/frontend/lowering/expressions/updates.js.map +1 -1
  434. package/dist/frontend/lowering/f64-handles.d.ts +8 -0
  435. package/dist/frontend/lowering/f64-handles.js +16 -0
  436. package/dist/frontend/lowering/f64-handles.js.map +1 -0
  437. package/dist/frontend/lowering/frozen-records.d.ts +5 -0
  438. package/dist/frontend/lowering/frozen-records.js +12 -4
  439. package/dist/frontend/lowering/frozen-records.js.map +1 -1
  440. package/dist/frontend/lowering/function-context.d.ts +3 -0
  441. package/dist/frontend/lowering/function-context.js.map +1 -1
  442. package/dist/frontend/lowering/function-returns.js +15 -0
  443. package/dist/frontend/lowering/function-returns.js.map +1 -1
  444. package/dist/frontend/lowering/generic-functions.js +17 -6
  445. package/dist/frontend/lowering/generic-functions.js.map +1 -1
  446. package/dist/frontend/lowering/instantiation-path.d.ts +3 -2
  447. package/dist/frontend/lowering/instantiation-path.js.map +1 -1
  448. package/dist/frontend/lowering/instantiation-path.test.js +6 -4
  449. package/dist/frontend/lowering/instantiation-path.test.js.map +1 -1
  450. package/dist/frontend/lowering/iterator-adapters.d.ts +4 -2
  451. package/dist/frontend/lowering/iterator-adapters.js +26 -33
  452. package/dist/frontend/lowering/iterator-adapters.js.map +1 -1
  453. package/dist/frontend/lowering/js-collection-types.d.ts +11 -0
  454. package/dist/frontend/lowering/js-collection-types.js +490 -0
  455. package/dist/frontend/lowering/js-collection-types.js.map +1 -0
  456. package/dist/frontend/lowering/lib-boundary.js +2 -2
  457. package/dist/frontend/lowering/lib-boundary.js.map +1 -1
  458. package/dist/frontend/lowering/lower-assert.d.ts +14 -0
  459. package/dist/frontend/lowering/lower-assert.js +283 -26
  460. package/dist/frontend/lowering/lower-assert.js.map +1 -1
  461. package/dist/frontend/lowering/lower-builtin-values.js +3 -3
  462. package/dist/frontend/lowering/lower-builtin-values.js.map +1 -1
  463. package/dist/frontend/lowering/lower-calls.js +97 -7
  464. package/dist/frontend/lowering/lower-calls.js.map +1 -1
  465. package/dist/frontend/lowering/lower-classes.d.ts +59 -7
  466. package/dist/frontend/lowering/lower-classes.js +647 -176
  467. package/dist/frontend/lowering/lower-classes.js.map +1 -1
  468. package/dist/frontend/lowering/lower-console.js +2 -1
  469. package/dist/frontend/lowering/lower-console.js.map +1 -1
  470. package/dist/frontend/lowering/lower-exprs.d.ts +5 -0
  471. package/dist/frontend/lowering/lower-exprs.js +52 -5
  472. package/dist/frontend/lowering/lower-exprs.js.map +1 -1
  473. package/dist/frontend/lowering/lower-functions.js +7 -0
  474. package/dist/frontend/lowering/lower-functions.js.map +1 -1
  475. package/dist/frontend/lowering/lower-generators.js +4 -3
  476. package/dist/frontend/lowering/lower-generators.js.map +1 -1
  477. package/dist/frontend/lowering/lower-inspect.js +264 -46
  478. package/dist/frontend/lowering/lower-inspect.js.map +1 -1
  479. package/dist/frontend/lowering/lower-modules.js +28 -17
  480. package/dist/frontend/lowering/lower-modules.js.map +1 -1
  481. package/dist/frontend/lowering/lower-namespaces.d.ts +3 -0
  482. package/dist/frontend/lowering/lower-namespaces.js +44 -1
  483. package/dist/frontend/lowering/lower-namespaces.js.map +1 -1
  484. package/dist/frontend/lowering/lower-node-module.js +1 -1
  485. package/dist/frontend/lowering/lower-node-module.js.map +1 -1
  486. package/dist/frontend/lowering/lower-server.js +126 -32
  487. package/dist/frontend/lowering/lower-server.js.map +1 -1
  488. package/dist/frontend/lowering/lower-stdlib.d.ts +4 -1
  489. package/dist/frontend/lowering/lower-stdlib.js +51 -37
  490. package/dist/frontend/lowering/lower-stdlib.js.map +1 -1
  491. package/dist/frontend/lowering/lower-stmts.js +294 -46
  492. package/dist/frontend/lowering/lower-stmts.js.map +1 -1
  493. package/dist/frontend/lowering/lower-stream.js +515 -121
  494. package/dist/frontend/lowering/lower-stream.js.map +1 -1
  495. package/dist/frontend/lowering/lowerer.d.ts +52 -10
  496. package/dist/frontend/lowering/lowerer.js +249 -37
  497. package/dist/frontend/lowering/lowerer.js.map +1 -1
  498. package/dist/frontend/lowering/lowerer.test.js +1 -1
  499. package/dist/frontend/lowering/lowerer.test.js.map +1 -1
  500. package/dist/frontend/lowering/module-namespace-elements.d.ts +13 -0
  501. package/dist/frontend/lowering/module-namespace-elements.js +118 -1
  502. package/dist/frontend/lowering/module-namespace-elements.js.map +1 -1
  503. package/dist/frontend/lowering/private-brands.d.ts +5 -0
  504. package/dist/frontend/lowering/private-brands.js +39 -0
  505. package/dist/frontend/lowering/private-brands.js.map +1 -1
  506. package/dist/frontend/lowering/runtime-optional-elements.d.ts +6 -0
  507. package/dist/frontend/lowering/runtime-optional-elements.js +14 -3
  508. package/dist/frontend/lowering/runtime-optional-elements.js.map +1 -1
  509. package/dist/frontend/lowering/sanitize-class-types.js +2 -0
  510. package/dist/frontend/lowering/sanitize-class-types.js.map +1 -1
  511. package/dist/frontend/lowering/site-dependencies.d.ts +7 -2
  512. package/dist/frontend/lowering/site-dependencies.js +0 -15
  513. package/dist/frontend/lowering/site-dependencies.js.map +1 -1
  514. package/dist/frontend/lowering/site-dependencies.test.js +7 -5
  515. package/dist/frontend/lowering/site-dependencies.test.js.map +1 -1
  516. package/dist/frontend/lowering/string-index-bounds.d.ts +7 -4
  517. package/dist/frontend/lowering/string-index-bounds.js +21 -7
  518. package/dist/frontend/lowering/string-index-bounds.js.map +1 -1
  519. package/dist/frontend/lowering/surfaces.d.ts +12 -3
  520. package/dist/frontend/lowering/surfaces.js +1576 -1539
  521. package/dist/frontend/lowering/surfaces.js.map +1 -1
  522. package/dist/frontend/lowering/symbol-fields.d.ts +7 -0
  523. package/dist/frontend/lowering/symbol-fields.js +45 -2
  524. package/dist/frontend/lowering/symbol-fields.js.map +1 -1
  525. package/dist/frontend/lowering/union-narrow.d.ts +5 -2
  526. package/dist/frontend/lowering/union-narrow.js +6 -3
  527. package/dist/frontend/lowering/union-narrow.js.map +1 -1
  528. package/dist/frontend/lowering/union-narrow.test.js +10 -0
  529. package/dist/frontend/lowering/union-narrow.test.js.map +1 -1
  530. package/dist/frontend/npm-static-namespace-defaults.d.ts +6 -0
  531. package/dist/frontend/npm-static-namespace-defaults.js +163 -0
  532. package/dist/frontend/npm-static-namespace-defaults.js.map +1 -0
  533. package/dist/frontend/npm-static-namespace-defaults.test.d.ts +1 -0
  534. package/dist/frontend/npm-static-namespace-defaults.test.js +72 -0
  535. package/dist/frontend/npm-static-namespace-defaults.test.js.map +1 -0
  536. package/dist/frontend/npm-static-prune.js +152 -111
  537. package/dist/frontend/npm-static-prune.js.map +1 -1
  538. package/dist/frontend/npm-static.js +35 -32
  539. package/dist/frontend/npm-static.js.map +1 -1
  540. package/dist/frontend/package-shims.d.ts +7 -4
  541. package/dist/frontend/package-shims.js +39 -40
  542. package/dist/frontend/package-shims.js.map +1 -1
  543. package/dist/frontend/pipeline-native.d.ts +2 -2
  544. package/dist/frontend/pipeline-native.js +2 -2
  545. package/dist/frontend/pipeline-native.js.map +1 -1
  546. package/dist/frontend/pipeline.d.ts +19 -2
  547. package/dist/frontend/pipeline.js +102 -11
  548. package/dist/frontend/pipeline.js.map +1 -1
  549. package/dist/frontend/program-analysis.d.ts +2 -0
  550. package/dist/frontend/program-analysis.js +3 -0
  551. package/dist/frontend/program-analysis.js.map +1 -1
  552. package/dist/frontend/program.d.ts +15 -0
  553. package/dist/frontend/program.js +227 -64
  554. package/dist/frontend/program.js.map +1 -1
  555. package/dist/frontend/resolve.d.ts +2 -0
  556. package/dist/frontend/resolve.js +5 -0
  557. package/dist/frontend/resolve.js.map +1 -1
  558. package/dist/frontend/services.d.ts +3 -0
  559. package/dist/frontend/services.js +31 -4
  560. package/dist/frontend/services.js.map +1 -1
  561. package/dist/frontend/shape-inference/analyze.d.ts +93 -0
  562. package/dist/frontend/shape-inference/analyze.js +3138 -0
  563. package/dist/frontend/shape-inference/analyze.js.map +1 -0
  564. package/dist/frontend/shape-inference/constant-graphs.d.ts +54 -0
  565. package/dist/frontend/shape-inference/constant-graphs.js +357 -0
  566. package/dist/frontend/shape-inference/constant-graphs.js.map +1 -0
  567. package/dist/frontend/shape-inference/domain.d.ts +32 -0
  568. package/dist/frontend/shape-inference/domain.js +104 -0
  569. package/dist/frontend/shape-inference/domain.js.map +1 -0
  570. package/dist/frontend/shape-inference/index.d.ts +7 -0
  571. package/dist/frontend/shape-inference/index.js +19 -0
  572. package/dist/frontend/shape-inference/index.js.map +1 -0
  573. package/dist/frontend/shape-inference/report.d.ts +21 -0
  574. package/dist/frontend/shape-inference/report.js +348 -0
  575. package/dist/frontend/shape-inference/report.js.map +1 -0
  576. package/dist/frontend/token-equivalence.d.ts +6 -0
  577. package/dist/frontend/token-equivalence.js +66 -9
  578. package/dist/frontend/token-equivalence.js.map +1 -1
  579. package/dist/frontend/token-equivalence.test.js +33 -1
  580. package/dist/frontend/token-equivalence.test.js.map +1 -1
  581. package/dist/frontend/ts7/checker-features.d.ts +15 -0
  582. package/dist/frontend/ts7/checker-features.js +45 -0
  583. package/dist/frontend/ts7/checker-features.js.map +1 -0
  584. package/dist/frontend/ts7/checker-features.test.d.ts +1 -0
  585. package/dist/frontend/ts7/checker-features.test.js +40 -0
  586. package/dist/frontend/ts7/checker-features.test.js.map +1 -0
  587. package/dist/frontend/ts7/checker-server.d.ts +19 -0
  588. package/dist/frontend/ts7/checker-server.js +46 -0
  589. package/dist/frontend/ts7/checker-server.js.map +1 -0
  590. package/dist/frontend/ts7/checker-server.test.d.ts +1 -0
  591. package/dist/frontend/ts7/checker-server.test.js +38 -0
  592. package/dist/frontend/ts7/checker-server.test.js.map +1 -0
  593. package/dist/frontend/ts7/lib-diagnostics.js +39 -13
  594. package/dist/frontend/ts7/lib-diagnostics.js.map +1 -1
  595. package/dist/frontend/ts7/lib-diagnostics.test.js +40 -0
  596. package/dist/frontend/ts7/lib-diagnostics.test.js.map +1 -1
  597. package/dist/frontend/ts7/native-api.d.ts +1 -0
  598. package/dist/frontend/ts7/native-api.js +25 -2
  599. package/dist/frontend/ts7/native-api.js.map +1 -1
  600. package/dist/frontend/ts7/native-process.d.ts +9 -2
  601. package/dist/frontend/ts7/native-process.js +22 -4
  602. package/dist/frontend/ts7/native-process.js.map +1 -1
  603. package/dist/frontend/ts7/program-host.d.ts +11 -0
  604. package/dist/frontend/ts7/program-host.js +36 -22
  605. package/dist/frontend/ts7/program-host.js.map +1 -1
  606. package/dist/frontend/ts7/semantic-json.d.ts +9 -0
  607. package/dist/frontend/ts7/semantic-json.js +25 -5
  608. package/dist/frontend/ts7/semantic-json.js.map +1 -1
  609. package/dist/frontend/ts7/semantic-model.js +3 -1
  610. package/dist/frontend/ts7/semantic-model.js.map +1 -1
  611. package/dist/frontend/ts7/source-parser.js +3 -1
  612. package/dist/frontend/ts7/source-parser.js.map +1 -1
  613. package/dist/frontend/tsc-codes.js +10 -0
  614. package/dist/frontend/tsc-codes.js.map +1 -1
  615. package/dist/frontend/type-mapper.d.ts +18 -6
  616. package/dist/frontend/type-mapper.js +160 -28
  617. package/dist/frontend/type-mapper.js.map +1 -1
  618. package/dist/index.d.ts +44 -3
  619. package/dist/index.js +27 -8
  620. package/dist/index.js.map +1 -1
  621. package/dist/ir/builtin-effects.js +29 -0
  622. package/dist/ir/builtin-effects.js.map +1 -1
  623. package/dist/ir/builtin-signatures.d.ts +7 -2
  624. package/dist/ir/builtin-signatures.js +5104 -4950
  625. package/dist/ir/builtin-signatures.js.map +1 -1
  626. package/dist/ir/callback-specialization.d.ts +4 -2
  627. package/dist/ir/callback-specialization.js +24 -9
  628. package/dist/ir/callback-specialization.js.map +1 -1
  629. package/dist/ir/capture-values.js +4 -2
  630. package/dist/ir/capture-values.js.map +1 -1
  631. package/dist/ir/char-unit-locals.d.ts +12 -2
  632. package/dist/ir/char-unit-locals.js +400 -58
  633. package/dist/ir/char-unit-locals.js.map +1 -1
  634. package/dist/ir/char-unit-locals.test.js +111 -0
  635. package/dist/ir/char-unit-locals.test.js.map +1 -1
  636. package/dist/ir/constant-globals.js +18 -4
  637. package/dist/ir/constant-globals.js.map +1 -1
  638. package/dist/ir/expression-inlining.d.ts +15 -0
  639. package/dist/ir/expression-inlining.js +166 -0
  640. package/dist/ir/expression-inlining.js.map +1 -0
  641. package/dist/ir/expression-inlining.test.d.ts +1 -0
  642. package/dist/ir/expression-inlining.test.js +123 -0
  643. package/dist/ir/expression-inlining.test.js.map +1 -0
  644. package/dist/ir/function-references.js +2 -0
  645. package/dist/ir/function-references.js.map +1 -1
  646. package/dist/ir/function-references.test.js +6 -0
  647. package/dist/ir/function-references.test.js.map +1 -1
  648. package/dist/ir/int32-arrays.d.ts +27 -6
  649. package/dist/ir/int32-arrays.js +106 -18
  650. package/dist/ir/int32-arrays.js.map +1 -1
  651. package/dist/ir/int32-slots.d.ts +26 -1
  652. package/dist/ir/int32-slots.js +284 -5
  653. package/dist/ir/int32-slots.js.map +1 -1
  654. package/dist/ir/int32-slots.test.js +5 -0
  655. package/dist/ir/int32-slots.test.js.map +1 -1
  656. package/dist/ir/integer-loop-facts.d.ts +5 -0
  657. package/dist/ir/integer-loop-facts.js +90 -1
  658. package/dist/ir/integer-loop-facts.js.map +1 -1
  659. package/dist/ir/integer-loops.d.ts +14 -1
  660. package/dist/ir/integer-loops.js +93 -7
  661. package/dist/ir/integer-loops.js.map +1 -1
  662. package/dist/ir/integer-loops.test.js +70 -0
  663. package/dist/ir/integer-loops.test.js.map +1 -1
  664. package/dist/ir/integer-ranges.js +18 -2
  665. package/dist/ir/integer-ranges.js.map +1 -1
  666. package/dist/ir/integer-ranges.test.js +64 -4
  667. package/dist/ir/integer-ranges.test.js.map +1 -1
  668. package/dist/ir/ir.d.ts +50 -8
  669. package/dist/ir/ir.js +38 -12
  670. package/dist/ir/ir.js.map +1 -1
  671. package/dist/ir/js-ic.d.ts +25 -5
  672. package/dist/ir/js-ic.js +93 -13
  673. package/dist/ir/js-ic.js.map +1 -1
  674. package/dist/ir/js-ic.test.js +153 -0
  675. package/dist/ir/js-ic.test.js.map +1 -1
  676. package/dist/ir/node-index.d.ts +7 -0
  677. package/dist/ir/node-index.js +32 -0
  678. package/dist/ir/node-index.js.map +1 -1
  679. package/dist/ir/receiver-readers.d.ts +6 -1
  680. package/dist/ir/receiver-readers.js +53 -28
  681. package/dist/ir/receiver-readers.js.map +1 -1
  682. package/dist/ir/row-pairs.d.ts +15 -0
  683. package/dist/ir/row-pairs.js +373 -0
  684. package/dist/ir/row-pairs.js.map +1 -0
  685. package/dist/ir/row-pairs.test.d.ts +1 -0
  686. package/dist/ir/row-pairs.test.js +129 -0
  687. package/dist/ir/row-pairs.test.js.map +1 -0
  688. package/dist/ir/runtime-features.d.ts +17 -4
  689. package/dist/ir/runtime-features.js +69 -12
  690. package/dist/ir/runtime-features.js.map +1 -1
  691. package/dist/ir/scalar-records.d.ts +15 -0
  692. package/dist/ir/scalar-records.js +301 -1
  693. package/dist/ir/scalar-records.js.map +1 -1
  694. package/dist/ir/scalar-records.test.js +181 -1
  695. package/dist/ir/scalar-records.test.js.map +1 -1
  696. package/dist/ir/self-captures.js +8 -0
  697. package/dist/ir/self-captures.js.map +1 -1
  698. package/dist/ir/validate.js +37 -28
  699. package/dist/ir/validate.js.map +1 -1
  700. package/dist/library/fence-eval.js +4 -4
  701. package/dist/library/fence-eval.js.map +1 -1
  702. package/dist/library/ir-policy.js +4 -0
  703. package/dist/library/ir-policy.js.map +1 -1
  704. package/dist/library/library-cache.d.ts +1 -0
  705. package/dist/library/library-cache.js +1 -0
  706. package/dist/library/library-cache.js.map +1 -1
  707. package/dist/library/library-cache.test.js +13 -0
  708. package/dist/library/library-cache.test.js.map +1 -1
  709. package/dist/native/cache.d.ts +5 -1
  710. package/dist/native/cache.js +15 -3
  711. package/dist/native/cache.js.map +1 -1
  712. package/dist/native/cli.js +6 -0
  713. package/dist/native/cli.js.map +1 -1
  714. package/dist/native/compiler.d.ts +3 -0
  715. package/dist/native/compiler.js +72 -26
  716. package/dist/native/compiler.js.map +1 -1
  717. package/dist/native/compiler.test.js +87 -2
  718. package/dist/native/compiler.test.js.map +1 -1
  719. package/dist/native/executable-cache-open.test.d.ts +1 -0
  720. package/dist/native/executable-cache-open.test.js +80 -0
  721. package/dist/native/executable-cache-open.test.js.map +1 -0
  722. package/dist/native/executable-cache.d.ts +43 -3
  723. package/dist/native/executable-cache.js +177 -36
  724. package/dist/native/executable-cache.js.map +1 -1
  725. package/dist/native/executable-cache.test.js +103 -0
  726. package/dist/native/executable-cache.test.js.map +1 -1
  727. package/dist/native/prepare.js +38 -16
  728. package/dist/native/prepare.js.map +1 -1
  729. package/dist/native/prepare.test.js +51 -1
  730. package/dist/native/prepare.test.js.map +1 -1
  731. package/dist/native/sanitizer.d.ts +1 -1
  732. package/dist/native/sanitizer.js +17 -3
  733. package/dist/native/sanitizer.js.map +1 -1
  734. package/dist/native/sanitizer.test.js +4 -0
  735. package/dist/native/sanitizer.test.js.map +1 -1
  736. package/dist/node-islands/classify.d.ts +14 -0
  737. package/dist/node-islands/classify.js +114 -0
  738. package/dist/node-islands/classify.js.map +1 -0
  739. package/dist/node-islands/detect.d.ts +13 -0
  740. package/dist/node-islands/detect.js +805 -0
  741. package/dist/node-islands/detect.js.map +1 -0
  742. package/dist/node-islands/detect.test.d.ts +1 -0
  743. package/dist/node-islands/detect.test.js +136 -0
  744. package/dist/node-islands/detect.test.js.map +1 -0
  745. package/dist/node-islands/origin.d.ts +21 -0
  746. package/dist/node-islands/origin.js +60 -0
  747. package/dist/node-islands/origin.js.map +1 -0
  748. package/dist/node-islands/policy.d.ts +49 -0
  749. package/dist/node-islands/policy.js +130 -0
  750. package/dist/node-islands/policy.js.map +1 -0
  751. package/dist/node-islands/report.d.ts +22 -0
  752. package/dist/node-islands/report.js +326 -0
  753. package/dist/node-islands/report.js.map +1 -0
  754. package/dist/node-islands/report.test.d.ts +1 -0
  755. package/dist/node-islands/report.test.js +228 -0
  756. package/dist/node-islands/report.test.js.map +1 -0
  757. package/dist/node-islands/rules.d.ts +20 -0
  758. package/dist/node-islands/rules.js +91 -0
  759. package/dist/node-islands/rules.js.map +1 -0
  760. package/dist/node-islands/scan.d.ts +53 -0
  761. package/dist/node-islands/scan.js +104 -0
  762. package/dist/node-islands/scan.js.map +1 -0
  763. package/dist/node-islands/summary.d.ts +78 -0
  764. package/dist/node-islands/summary.js +26 -0
  765. package/dist/node-islands/summary.js.map +1 -0
  766. package/dist/project-config.d.ts +50 -0
  767. package/dist/project-config.js +372 -0
  768. package/dist/project-config.js.map +1 -0
  769. package/dist/project-config.test.d.ts +1 -0
  770. package/dist/project-config.test.js +154 -0
  771. package/dist/project-config.test.js.map +1 -0
  772. package/dist/wasm/discover.js +6 -31
  773. package/dist/wasm/discover.js.map +1 -1
  774. package/package.json +20 -20
  775. package/surface-manifest.json +20 -35
@@ -2089,7 +2089,7 @@ function fromGenHelpers(lowerer, gen, loc) {
2089
2089
  * lifted function per iterator class takes the iterator and answers the
2090
2090
  * object, whose `next` closure captures it. */
2091
2091
  function classIteratorObject(lowerer, cit, iter, loc) {
2092
- const key = `streamFromIter:${cit.iterT.className}`;
2092
+ const key = `streamFromIter:${cit.iterT.kind === "object" ? cit.iterT.className : typeKey(cit.iterT)}`;
2093
2093
  let name = lowerer.valueHelpers.get(key);
2094
2094
  if (!name) {
2095
2095
  name = keyedHelperName(lowerer, "%stream.fromIter", key);
@@ -2117,7 +2117,7 @@ function classIteratorObject(lowerer, cit, iter, loc) {
2117
2117
  {
2118
2118
  kind: "varDecl",
2119
2119
  localId: r.id,
2120
- init: classIteratorNextCall(lowerer, cit, varRef(it.id, cit.iterT, loc), loc),
2120
+ init: classIteratorNextCall(lowerer, cit, varRef(it.id, cit.iterT, loc), null, loc),
2121
2121
  loc,
2122
2122
  },
2123
2123
  {
@@ -2347,6 +2347,90 @@ export function streamClassAliasDecl(lowerer, nameNode, init) {
2347
2347
  * makeAsyncIterable — every stage position renders the same "body"
2348
2348
  * clause). finished() keeps its narrower isNodeStream wording. */
2349
2349
  const PIPELINE_STAGE_EXPECTED = "of type function or an instance of Blob, ReadableStream, WritableStream, Stream, Iterable, AsyncIterable, or Promise or { readable, writable } pair";
2350
+ /** A checked-dynamic pipeline stage (an untyped source or destination):
2351
+ * a boxed native stream unwraps at run time; other values (functions,
2352
+ * pairs) throw the not-supported Error there. */
2353
+ function unboxDynStage(lowerer, v, node) {
2354
+ noteUntypedStreamFlow(lowerer, null);
2355
+ return {
2356
+ kind: "libCall",
2357
+ fn: "stream.unboxDyn",
2358
+ args: [
2359
+ v,
2360
+ strLit(lowerer.dynNodeStreams
2361
+ ? "pipeline stages other than native streams (JavaScript stream objects, iterables, generators, plain functions, and { readable, writable } pairs) are not supported yet"
2362
+ : "pipeline stages other than native streams (iterables, generators, plain functions, and { readable, writable } pairs) are not supported yet", locOf(node)),
2363
+ ],
2364
+ type: { kind: "object", className: "%Duplex" },
2365
+ loc: locOf(node),
2366
+ };
2367
+ }
2368
+ /** pipeline() whose first stage is a stream argument (not a function
2369
+ * stage, an iterable of a static type, or a cipher value), lowered here.
2370
+ * When the value is checked-dynamic, Node keeps a stream there and pipes
2371
+ * it, and keeps an iterable (a string, an array, a generator, any value
2372
+ * with an iterator method) and pumps it into the next stage. The value is
2373
+ * evaluated once, and stream.dynIterableSource picks the lowering at run
2374
+ * time. Null when the first stage is not such an argument. */
2375
+ function lowerDynSourcePipeline(lowerer, node, loc, build) {
2376
+ if (pipelineStageFunction(lowerer, node) !== null)
2377
+ return null;
2378
+ if (iterableSourceType(lowerer, node) !== null || isValueStream(lowerer, node))
2379
+ return null;
2380
+ let value = lowerer.lowerExpr(node);
2381
+ // A Set, a Map or a generator object is iterated through its
2382
+ // checked-dynamic value.
2383
+ if (BOXED_SOURCE_KINDS.has(value.type.kind) && lowerer.dynConvertible(value.type)) {
2384
+ value = { kind: "dynFrom", value, type: DYN, loc: value.loc };
2385
+ }
2386
+ if (value.type.kind !== "dyn") {
2387
+ let stream;
2388
+ try {
2389
+ stream = streamArgOf(lowerer, node, value, "pipeline");
2390
+ }
2391
+ catch (e) {
2392
+ if (e instanceof StreamArgTypeThrow)
2393
+ return e.expr;
2394
+ throw e;
2395
+ }
2396
+ return build({ expr: stream, iterable: false });
2397
+ }
2398
+ const local = lowerer.declareHiddenLocal("%pipelineSource", DYN);
2399
+ const ref = varRef(local.id, DYN, loc);
2400
+ const stream = build({ expr: unboxDynStage(lowerer, ref, node), iterable: false });
2401
+ const iterable = build({ expr: ref, iterable: true });
2402
+ const type = stream.type;
2403
+ return {
2404
+ kind: "seqExpr",
2405
+ stmts: [{ kind: "varDecl", localId: local.id, init: value, loc }],
2406
+ result: {
2407
+ kind: "ternary",
2408
+ cond: { kind: "libCall", fn: "stream.dynIterableSource", args: [ref], type: BOOL, loc },
2409
+ then: lowerer.coerceToExpected(iterable, type),
2410
+ else_: stream,
2411
+ type,
2412
+ loc,
2413
+ },
2414
+ type,
2415
+ loc,
2416
+ };
2417
+ }
2418
+ /** The static types of a pipeline source that lowerDynSourcePipeline boxes
2419
+ * as checked-dynamic values. An array or a string reaches it when the
2420
+ * checker types the argument as any while its value keeps a static type. */
2421
+ const BOXED_SOURCE_KINDS = new Set([
2422
+ "set",
2423
+ "map",
2424
+ "generator",
2425
+ "array",
2426
+ "string",
2427
+ ]);
2428
+ /** lowerPipelineStages' source arguments for a checked-dynamic first stage. */
2429
+ function stagesSource(src) {
2430
+ if (src === null)
2431
+ return [undefined, undefined];
2432
+ return src.iterable ? [undefined, src.expr] : [new Map([[0, src.expr]]), undefined];
2433
+ }
2350
2434
  /** A stream-rooted argument, lowered — or the pointed fence (pipeline's
2351
2435
  * iterable/generator/function stages have no lowering yet). `what` picks
2352
2436
  * the validation ladder: finished() rejects EVERY non-stream through
@@ -2354,7 +2438,10 @@ const PIPELINE_STAGE_EXPECTED = "of type function or an instance of Blob, Readab
2354
2438
  * { readable, writable } pairs — those shapes fence instead of throwing
2355
2439
  * a ladder Node never throws. */
2356
2440
  function lowerStreamArg(lowerer, node, what) {
2357
- const lowered = lowerer.lowerExpr(node);
2441
+ return streamArgOf(lowerer, node, lowerer.lowerExpr(node), what);
2442
+ }
2443
+ /** lowerStreamArg over the argument's lowered value. */
2444
+ function streamArgOf(lowerer, node, lowered, what) {
2358
2445
  // A Hash, Hmac, Cipheriv or Decipheriv stage is its Transform; pipeline
2359
2446
  // and compose stages keep the value alive until the stream settles.
2360
2447
  const v = isValueStream(lowerer, node)
@@ -2363,21 +2450,8 @@ function lowerStreamArg(lowerer, node, what) {
2363
2450
  // A checked-dynamic pipeline stage (an untyped source or destination):
2364
2451
  // a boxed native stream unwraps at run time; other values (iterables,
2365
2452
  // functions) throw the not-supported Error there.
2366
- if (v.type.kind === "dyn" && what === "pipeline") {
2367
- noteUntypedStreamFlow(lowerer, null);
2368
- return {
2369
- kind: "libCall",
2370
- fn: "stream.unboxDyn",
2371
- args: [
2372
- v,
2373
- strLit(lowerer.dynNodeStreams
2374
- ? "pipeline stages other than native streams (JavaScript stream objects, iterables, generators, plain functions, and { readable, writable } pairs) are not supported yet"
2375
- : "pipeline stages other than native streams (iterables, generators, plain functions, and { readable, writable } pairs) are not supported yet", locOf(node)),
2376
- ],
2377
- type: { kind: "object", className: "%Duplex" },
2378
- loc: locOf(node),
2379
- };
2380
- }
2453
+ if (v.type.kind === "dyn" && what === "pipeline")
2454
+ return unboxDynStage(lowerer, v, node);
2381
2455
  const info = v.type.kind === "object" ? lowerer.classes.get(v.type.className) : undefined;
2382
2456
  if (!streamSidesOf(lowerer, info)) {
2383
2457
  // A provably-non-stream value in a JS source (the invalid-input
@@ -2655,59 +2729,69 @@ export function lowerStreamModuleCall(lowerer, call, bi, loc) {
2655
2729
  ? pipelineOptions(lowerer, lastArg)
2656
2730
  : null;
2657
2731
  const stageArgs = opts ? args.slice(0, -1) : args;
2658
- if (hasPipelineFunctionStage(lowerer, stageArgs)) {
2659
- const staged = lowerPipelineStages(lowerer, stageArgs, loc);
2660
- const type = staged.destPromise ?? { kind: "promise", inner: VOID };
2661
- // A promise destination's value settles the result (same type).
2662
- if (!opts) {
2663
- return staged.wrap({
2664
- kind: "libCall",
2665
- fn: "sp.pipelineStages",
2666
- args: staged.args,
2667
- type,
2668
- loc,
2669
- });
2670
- }
2671
- // the options: end, and the signal (flags bit 6)
2672
- const flagsArg = staged.args[3];
2673
- if (flagsArg.kind !== "numLit")
2674
- throw new InternalCompilerError("pipeline flags not a literal");
2675
- const args = [...staged.args, boolLit(opts.end, loc)];
2676
- if (opts.signal) {
2677
- args[3] = numLit(flagsArg.value | 64, loc);
2678
- args.push(opts.signal);
2679
- }
2680
- return staged.wrap({ kind: "libCall", fn: "sp.pipelineStagesOpts", args, type, loc });
2681
- }
2682
- let streams;
2683
- try {
2684
- streams = stageArgs.map((a) => lowerStreamArg(lowerer, a, "pipeline"));
2685
- }
2686
- catch (e) {
2687
- if (e instanceof StreamArgTypeThrow)
2688
- return e.expr;
2689
- throw e;
2690
- }
2691
- if (opts) {
2692
- const head = [numLit(streams.length, loc), ...streams, boolLit(opts.end, loc)];
2693
- return {
2694
- kind: "libCall",
2695
- fn: opts.signal ? "sp.pipelineOptsSignal" : "sp.pipelineOpts",
2696
- args: opts.signal ? [...head, opts.signal] : head,
2697
- type: { kind: "promise", inner: VOID },
2698
- loc,
2699
- };
2700
- }
2701
- return {
2732
+ const build = (src) => lowerPromisePipeline(lowerer, stageArgs, opts, src, loc);
2733
+ return lowerDynSourcePipeline(lowerer, stageArgs[0], loc, build) ?? build(null);
2734
+ }
2735
+ return null;
2736
+ }
2737
+ return lowerStreamModuleCallbackCall(lowerer, call, bi, loc);
2738
+ }
2739
+ /** stream/promises pipeline(...stages[, options]), with the first stage
2740
+ * pre-lowered when it is checked-dynamic (lowerDynSourcePipeline). */
2741
+ function lowerPromisePipeline(lowerer, stageArgs, opts, src, loc) {
2742
+ if (src?.iterable === true || hasPipelineFunctionStage(lowerer, stageArgs)) {
2743
+ const staged = lowerPipelineStages(lowerer, stageArgs, loc, ...stagesSource(src));
2744
+ const type = staged.destPromise ?? { kind: "promise", inner: VOID };
2745
+ // A promise destination's value settles the result (same type).
2746
+ if (!opts) {
2747
+ return staged.wrap({
2702
2748
  kind: "libCall",
2703
- fn: "sp.pipeline",
2704
- args: [numLit(streams.length, loc), ...streams],
2705
- type: { kind: "promise", inner: VOID },
2749
+ fn: "sp.pipelineStages",
2750
+ args: staged.args,
2751
+ type,
2706
2752
  loc,
2707
- };
2753
+ });
2708
2754
  }
2709
- return null;
2755
+ // the options: end, and the signal (flags bit 6)
2756
+ const flagsArg = staged.args[3];
2757
+ if (flagsArg.kind !== "numLit")
2758
+ throw new InternalCompilerError("pipeline flags not a literal");
2759
+ const args = [...staged.args, boolLit(opts.end, loc)];
2760
+ if (opts.signal) {
2761
+ args[3] = numLit(flagsArg.value | 64, loc);
2762
+ args.push(opts.signal);
2763
+ }
2764
+ return staged.wrap({ kind: "libCall", fn: "sp.pipelineStagesOpts", args, type, loc });
2765
+ }
2766
+ let streams;
2767
+ try {
2768
+ streams = stageArgs.map((a, i) => i === 0 && src !== null ? src.expr : lowerStreamArg(lowerer, a, "pipeline"));
2769
+ }
2770
+ catch (e) {
2771
+ if (e instanceof StreamArgTypeThrow)
2772
+ return e.expr;
2773
+ throw e;
2710
2774
  }
2775
+ if (opts) {
2776
+ const head = [numLit(streams.length, loc), ...streams, boolLit(opts.end, loc)];
2777
+ return {
2778
+ kind: "libCall",
2779
+ fn: opts.signal ? "sp.pipelineOptsSignal" : "sp.pipelineOpts",
2780
+ args: opts.signal ? [...head, opts.signal] : head,
2781
+ type: { kind: "promise", inner: VOID },
2782
+ loc,
2783
+ };
2784
+ }
2785
+ return {
2786
+ kind: "libCall",
2787
+ fn: "sp.pipeline",
2788
+ args: [numLit(streams.length, loc), ...streams],
2789
+ type: { kind: "promise", inner: VOID },
2790
+ loc,
2791
+ };
2792
+ }
2793
+ /** The node:stream and stream/consumers members of lowerStreamModuleCall. */
2794
+ function lowerStreamModuleCallbackCall(lowerer, call, bi, loc) {
2711
2795
  if (bi.module === "stream/consumers") {
2712
2796
  const args = call.arguments.nodes;
2713
2797
  // text/json/buffer/arrayBuffer(stream) → a pending promise the
@@ -2833,69 +2917,77 @@ export function lowerStreamModuleCall(lowerer, call, bi, loc) {
2833
2917
  if (args.length < 3) {
2834
2918
  lowerer.noLowering(`pipeline with ${args.length} arguments`, call, "the supported form is pipeline(source, ...streams, callback)");
2835
2919
  }
2836
- if (hasPipelineFunctionStage(lowerer, args.slice(0, -1))) {
2837
- const staged = lowerPipelineStages(lowerer, args.slice(0, -1), loc);
2838
- const cbNode = args[args.length - 1];
2839
- const cbParams = ts.isArrowFunction(cbNode) || ts.isFunctionExpression(cbNode)
2840
- ? cbNode.parameters.nodes.length
2841
- : 0;
2842
- if (staged.dest === 2 || (staged.dest === 1 && cbParams > 1)) {
2843
- // callback(err, value): the destination's value (undefined for
2844
- // an async generator) reaches the callback through the
2845
- // checked-dynamic path.
2846
- const cb = lowerer.lowerExprExpecting(args[args.length - 1], DYN);
2847
- // SCR_PIPE_TYPED_CB: a typed callback whose error parameter cannot
2848
- // hold undefined takes null for no error; others take undefined.
2849
- const stagedArgs = [...staged.args];
2850
- const flagsArg = stagedArgs[3];
2851
- if (flagsArg.kind !== "numLit")
2852
- throw new InternalCompilerError("pipeline flags not a literal");
2853
- if (!isJsSourceFile(ts.getSourceFileOfNode(call)) &&
2854
- !callbackErrorAdmitsUndefined(lowerer, cb))
2855
- stagedArgs[3] = numLit(flagsArg.value | 128, loc);
2856
- return staged.wrap({
2857
- kind: "libCall",
2858
- fn: "stream.pipelineStagesDyn",
2859
- args: [...stagedArgs, cb],
2860
- type: staged.last,
2861
- loc,
2862
- });
2863
- }
2864
- const { cb, dyn } = lowerEosCallback(lowerer, "pipeline", args[args.length - 1], staged.last);
2920
+ const build = (src) => lowerCallbackPipeline(lowerer, call, args, src, loc);
2921
+ return lowerDynSourcePipeline(lowerer, args[0], loc, build) ?? build(null);
2922
+ }
2923
+ if (bi.member === "compose") {
2924
+ if (call.arguments.nodes.some((a) => ts.isSpreadElement(a))) {
2925
+ lowerer.noLowering("compose with spread arguments", call, "pass the streams directly");
2926
+ }
2927
+ return lowerStreamCompose(lowerer, call.arguments.nodes, loc);
2928
+ }
2929
+ return null;
2930
+ }
2931
+ /** pipeline(...stages, callback), with the first stage pre-lowered when it
2932
+ * is checked-dynamic (lowerDynSourcePipeline). */
2933
+ function lowerCallbackPipeline(lowerer, call, args, src, loc) {
2934
+ if (src?.iterable === true || hasPipelineFunctionStage(lowerer, args.slice(0, -1))) {
2935
+ const staged = lowerPipelineStages(lowerer, args.slice(0, -1), loc, ...stagesSource(src));
2936
+ const cbNode = args[args.length - 1];
2937
+ const cbParams = ts.isArrowFunction(cbNode) || ts.isFunctionExpression(cbNode)
2938
+ ? cbNode.parameters.nodes.length
2939
+ : 0;
2940
+ if (staged.dest === 2 || (staged.dest === 1 && cbParams > 1)) {
2941
+ // callback(err, value): the destination's value (undefined for
2942
+ // an async generator) reaches the callback through the
2943
+ // checked-dynamic path.
2944
+ const cb = lowerer.lowerExprExpecting(args[args.length - 1], DYN);
2945
+ // SCR_PIPE_TYPED_CB: a typed callback whose error parameter cannot
2946
+ // hold undefined takes null for no error; others take undefined.
2947
+ const stagedArgs = [...staged.args];
2948
+ const flagsArg = stagedArgs[3];
2949
+ if (flagsArg.kind !== "numLit")
2950
+ throw new InternalCompilerError("pipeline flags not a literal");
2951
+ if (!isJsSourceFile(ts.getSourceFileOfNode(call)) &&
2952
+ !callbackErrorAdmitsUndefined(lowerer, cb))
2953
+ stagedArgs[3] = numLit(flagsArg.value | 128, loc);
2865
2954
  return staged.wrap({
2866
2955
  kind: "libCall",
2867
- fn: dyn ? "stream.pipelineStagesDyn" : "stream.pipelineStages",
2868
- args: [...staged.args, cb],
2956
+ fn: "stream.pipelineStagesDyn",
2957
+ args: [...stagedArgs, cb],
2869
2958
  type: staged.last,
2870
2959
  loc,
2871
2960
  });
2872
2961
  }
2873
- let streams;
2874
- try {
2875
- streams = args.slice(0, -1).map((a) => lowerStreamArg(lowerer, a, "pipeline"));
2876
- }
2877
- catch (e) {
2878
- if (e instanceof StreamArgTypeThrow)
2879
- return e.expr;
2880
- throw e;
2881
- }
2882
- const last = streams[streams.length - 1];
2883
- const { cb, dyn } = lowerEosCallback(lowerer, "pipeline", args[args.length - 1], last.type);
2884
- return {
2962
+ const { cb, dyn } = lowerEosCallback(lowerer, "pipeline", args[args.length - 1], staged.last);
2963
+ return staged.wrap({
2885
2964
  kind: "libCall",
2886
- fn: dyn ? "stream.pipelineDyn" : "stream.pipeline",
2887
- args: [numLit(streams.length, loc), ...streams, cb],
2888
- type: last.type,
2965
+ fn: dyn ? "stream.pipelineStagesDyn" : "stream.pipelineStages",
2966
+ args: [...staged.args, cb],
2967
+ type: staged.last,
2889
2968
  loc,
2890
- };
2969
+ });
2891
2970
  }
2892
- if (bi.member === "compose") {
2893
- if (call.arguments.nodes.some((a) => ts.isSpreadElement(a))) {
2894
- lowerer.noLowering("compose with spread arguments", call, "pass the streams directly");
2895
- }
2896
- return lowerStreamCompose(lowerer, call.arguments.nodes, loc);
2971
+ let streams;
2972
+ try {
2973
+ streams = args
2974
+ .slice(0, -1)
2975
+ .map((a, i) => (i === 0 && src !== null ? src.expr : lowerStreamArg(lowerer, a, "pipeline")));
2897
2976
  }
2898
- return null;
2977
+ catch (e) {
2978
+ if (e instanceof StreamArgTypeThrow)
2979
+ return e.expr;
2980
+ throw e;
2981
+ }
2982
+ const last = streams[streams.length - 1];
2983
+ const { cb, dyn } = lowerEosCallback(lowerer, "pipeline", args[args.length - 1], last.type);
2984
+ return {
2985
+ kind: "libCall",
2986
+ fn: dyn ? "stream.pipelineDyn" : "stream.pipeline",
2987
+ args: [numLit(streams.length, loc), ...streams, cb],
2988
+ type: last.type,
2989
+ loc,
2990
+ };
2899
2991
  }
2900
2992
  /** The function a pipeline() argument writes or names, or null when the
2901
2993
  * argument is not a function stage. */
@@ -3187,6 +3279,298 @@ function lowerWebStreamSource(lowerer, node, elemT, loc) {
3187
3279
  out,
3188
3280
  };
3189
3281
  }
3282
+ /** A checked-dynamic pipeline source that is an iterable at run time
3283
+ * (stream.dynIterableSource), as an async generator closure that iterates
3284
+ * it as Node's pipeline does with `for await`: the value's async iterator,
3285
+ * or its sync iterator stepped like the typed iterable sources. Each value
3286
+ * is yielded; leaving early closes the iterator through its return(). */
3287
+ function lowerDynIterableSource(lowerer, value, loc) {
3288
+ const out = {
3289
+ kind: "generator",
3290
+ async: true,
3291
+ yieldT: DYN,
3292
+ retT: VOID,
3293
+ nextT: UNDEFINED_T,
3294
+ };
3295
+ const genResultT = genResultRecord(DYN, VOID, lowerer.shapes, lowerer.unions);
3296
+ if (!genResultT)
3297
+ return null;
3298
+ const key = "dynIterableSource";
3299
+ let maker = lowerer.valueHelpers.get(key);
3300
+ if (!maker) {
3301
+ maker = `%stream.dynIterableSource.${lowerer.valueHelpers.size}`;
3302
+ const genName = `${maker}.gen`;
3303
+ const frame = new LiftedFrame(loc);
3304
+ const srcId = frame.local("src", DYN, false);
3305
+ const itId = frame.local("it", DYN, false);
3306
+ const syncId = frame.local("sync", BOOL, false);
3307
+ const nextId = frame.local("next", DYN, false);
3308
+ const stepId = frame.local("step", DYN, true);
3309
+ const valueId = frame.local("value", DYN, true);
3310
+ const activeId = frame.local("active", BOOL, true);
3311
+ const closeId = frame.local("close", DYN, false);
3312
+ const it = () => varRef(itId, DYN, loc);
3313
+ const sync = () => varRef(syncId, BOOL, loc);
3314
+ const step = () => varRef(stepId, DYN, loc);
3315
+ const value = () => varRef(valueId, DYN, loc);
3316
+ // for await over a sync iterator awaits each value, the final one
3317
+ // included (CreateAsyncFromSyncIterator): an object (a promise or a
3318
+ // thenable) passes on its result
3319
+ const awaitsValue = () => ({
3320
+ kind: "logical",
3321
+ op: "&&",
3322
+ left: sync(),
3323
+ right: {
3324
+ kind: "logical",
3325
+ op: "||",
3326
+ left: { kind: "dynTest", test: "promise", value: value(), type: BOOL, loc },
3327
+ right: {
3328
+ kind: "logical",
3329
+ op: "&&",
3330
+ left: {
3331
+ kind: "dynTest",
3332
+ test: "nullish",
3333
+ negated: true,
3334
+ value: value(),
3335
+ type: BOOL,
3336
+ loc,
3337
+ },
3338
+ right: { kind: "dynTest", test: "object", value: value(), type: BOOL, loc },
3339
+ type: BOOL,
3340
+ loc,
3341
+ },
3342
+ type: BOOL,
3343
+ loc,
3344
+ },
3345
+ type: BOOL,
3346
+ loc,
3347
+ });
3348
+ const get = (obj, name) => ({
3349
+ kind: "dynKeyGet",
3350
+ value: obj,
3351
+ key: strLit(name, loc),
3352
+ type: DYN,
3353
+ loc,
3354
+ });
3355
+ const awaitDyn = (v) => ({
3356
+ kind: "libCall",
3357
+ fn: "async.awaitDyn",
3358
+ args: [v],
3359
+ type: DYN,
3360
+ loc,
3361
+ });
3362
+ const call = (callee, calleeName) => ({
3363
+ kind: "dynCall",
3364
+ callee,
3365
+ receiver: it(),
3366
+ calleeName,
3367
+ args: [],
3368
+ type: DYN,
3369
+ loc,
3370
+ });
3371
+ const setActive = (on) => ({
3372
+ kind: "assign",
3373
+ localId: activeId,
3374
+ value: boolLit(on, loc),
3375
+ loc,
3376
+ });
3377
+ const nextCall = () => call(varRef(nextId, DYN, loc), "iterator method");
3378
+ const body = [
3379
+ {
3380
+ kind: "varDecl",
3381
+ localId: itId,
3382
+ init: {
3383
+ kind: "libCall",
3384
+ fn: "dyn.iteratorResult",
3385
+ args: [
3386
+ {
3387
+ kind: "libCall",
3388
+ fn: "dyn.asyncIteratorOpen",
3389
+ args: [varRef(srcId, DYN, loc), strLit("", loc)],
3390
+ type: DYN,
3391
+ loc,
3392
+ },
3393
+ ],
3394
+ type: DYN,
3395
+ loc,
3396
+ },
3397
+ loc,
3398
+ },
3399
+ {
3400
+ kind: "varDecl",
3401
+ localId: syncId,
3402
+ init: { kind: "libCall", fn: "dyn.asyncIteratorWasSync", args: [], type: BOOL, loc },
3403
+ loc,
3404
+ },
3405
+ { kind: "varDecl", localId: nextId, init: get(it(), "next"), loc },
3406
+ { kind: "varDecl", localId: stepId, init: dynUndefinedExpr(loc), loc },
3407
+ { kind: "varDecl", localId: valueId, init: dynUndefinedExpr(loc), loc },
3408
+ { kind: "varDecl", localId: activeId, init: boolLit(false, loc), loc },
3409
+ {
3410
+ kind: "tryCatch",
3411
+ tryBody: [
3412
+ {
3413
+ kind: "while",
3414
+ cond: boolLit(true, loc),
3415
+ body: [
3416
+ setActive(false),
3417
+ {
3418
+ kind: "assign",
3419
+ localId: stepId,
3420
+ value: {
3421
+ kind: "libCall",
3422
+ fn: "dyn.iteratorResult",
3423
+ args: [
3424
+ {
3425
+ kind: "ternary",
3426
+ cond: sync(),
3427
+ then: nextCall(),
3428
+ else_: awaitDyn(nextCall()),
3429
+ type: DYN,
3430
+ loc,
3431
+ },
3432
+ ],
3433
+ type: DYN,
3434
+ loc,
3435
+ },
3436
+ loc,
3437
+ },
3438
+ {
3439
+ kind: "if",
3440
+ cond: {
3441
+ kind: "dynTest",
3442
+ test: "truthy",
3443
+ value: get(step(), "done"),
3444
+ type: BOOL,
3445
+ loc,
3446
+ },
3447
+ // a sync iterator's final value is awaited too: a rejection
3448
+ // rejects the pump, and the finished iterator is not closed.
3449
+ // An async iterator's final value is not read.
3450
+ then: [
3451
+ {
3452
+ kind: "if",
3453
+ cond: sync(),
3454
+ then: [
3455
+ { kind: "assign", localId: valueId, value: get(step(), "value"), loc },
3456
+ {
3457
+ kind: "if",
3458
+ cond: awaitsValue(),
3459
+ then: [{ kind: "exprStmt", expr: awaitDyn(value()), loc }],
3460
+ else_: null,
3461
+ loc,
3462
+ },
3463
+ ],
3464
+ else_: null,
3465
+ loc,
3466
+ },
3467
+ { kind: "break", loc },
3468
+ ],
3469
+ else_: null,
3470
+ loc,
3471
+ },
3472
+ setActive(true),
3473
+ { kind: "assign", localId: valueId, value: get(step(), "value"), loc },
3474
+ // a rejection here closes the iterator
3475
+ {
3476
+ kind: "if",
3477
+ cond: awaitsValue(),
3478
+ then: [{ kind: "assign", localId: valueId, value: awaitDyn(value()), loc }],
3479
+ else_: null,
3480
+ loc,
3481
+ },
3482
+ {
3483
+ kind: "exprStmt",
3484
+ expr: { kind: "yieldExpr", value: value(), type: VOID, loc },
3485
+ loc,
3486
+ },
3487
+ ],
3488
+ loc,
3489
+ },
3490
+ ],
3491
+ catchBody: null,
3492
+ catchLocalId: null,
3493
+ finallyBody: [
3494
+ {
3495
+ kind: "if",
3496
+ cond: varRef(activeId, BOOL, loc),
3497
+ then: [
3498
+ { kind: "varDecl", localId: closeId, init: get(it(), "return"), loc },
3499
+ {
3500
+ kind: "if",
3501
+ cond: {
3502
+ kind: "unary",
3503
+ op: "!",
3504
+ operand: {
3505
+ kind: "dynTest",
3506
+ test: "nullish",
3507
+ value: varRef(closeId, DYN, loc),
3508
+ type: BOOL,
3509
+ loc,
3510
+ },
3511
+ type: BOOL,
3512
+ loc,
3513
+ },
3514
+ then: [
3515
+ {
3516
+ kind: "exprStmt",
3517
+ expr: awaitDyn(call(varRef(closeId, DYN, loc), "iterator return")),
3518
+ loc,
3519
+ },
3520
+ ],
3521
+ else_: null,
3522
+ loc,
3523
+ },
3524
+ ],
3525
+ else_: null,
3526
+ loc,
3527
+ },
3528
+ ],
3529
+ loc,
3530
+ },
3531
+ { kind: "return", value: null, loc },
3532
+ ];
3533
+ const srcLocal = frame.locals.find((l) => l.id === srcId);
3534
+ srcLocal.boxed = true;
3535
+ lowerer.valueHelpers.set(key, maker);
3536
+ lowerer.liftedFns.push({
3537
+ name: genName,
3538
+ params: [],
3539
+ returnType: VOID,
3540
+ async: true,
3541
+ captures: [{ localId: srcId, name: "src", type: DYN }],
3542
+ locals: frame.locals,
3543
+ body,
3544
+ generator: { yieldT: DYN, nextT: UNDEFINED_T, resultType: genResultT },
3545
+ loc,
3546
+ });
3547
+ const makerSrc = { id: "src.0", name: "src", type: DYN, mutable: false, boxed: true };
3548
+ lowerer.liftedFns.push({
3549
+ name: maker,
3550
+ params: [{ localId: makerSrc.id, name: makerSrc.name, type: DYN }],
3551
+ returnType: funcOf([], out),
3552
+ locals: [makerSrc],
3553
+ body: [
3554
+ {
3555
+ kind: "return",
3556
+ value: {
3557
+ kind: "closure",
3558
+ fnName: genName,
3559
+ captures: [makerSrc.id],
3560
+ type: funcOf([], out),
3561
+ loc,
3562
+ },
3563
+ loc,
3564
+ },
3565
+ ],
3566
+ loc,
3567
+ });
3568
+ }
3569
+ return {
3570
+ closure: { kind: "call", callee: maker, args: [value], type: funcOf([], out), loc },
3571
+ out,
3572
+ };
3573
+ }
3190
3574
  function lowerIterableSource(lowerer, node, fn, loc) {
3191
3575
  if (fn === null) {
3192
3576
  const webElem = staticReadableStreamElementType(lowerer, node);
@@ -3316,7 +3700,7 @@ function lowerIterableSource(lowerer, node, fn, loc) {
3316
3700
  * pipeline passes it: makeAsyncIterable answers the previous stream
3317
3701
  * itself (a Readable is async iterable) or the previous stage's
3318
3702
  * generator. */
3319
- function lowerPipelineStages(lowerer, stageArgs, loc, preLowered) {
3703
+ function lowerPipelineStages(lowerer, stageArgs, loc, preLowered, dynSource) {
3320
3704
  if (stageArgs.length > 52) {
3321
3705
  lowerer.noLowering("pipeline with function stages and more than 52 stages", stageArgs[52], "split the pipeline");
3322
3706
  }
@@ -3336,6 +3720,16 @@ function lowerPipelineStages(lowerer, stageArgs, loc, preLowered) {
3336
3720
  const argOrder = [];
3337
3721
  for (let j = 0; j < stageArgs.length; j++) {
3338
3722
  const arg = stageArgs[j];
3723
+ if (j === 0 && dynSource !== undefined) {
3724
+ const source = lowerDynIterableSource(lowerer, dynSource, loc);
3725
+ if (source === null)
3726
+ lowerer.noLowering("pipeline over this source", arg);
3727
+ positions += 1;
3728
+ argOrder.push({ list: stages, index: stages.length });
3729
+ stages.push(source.closure);
3730
+ srcT = source.out;
3731
+ continue;
3732
+ }
3339
3733
  // compose's head and tail functions arrive as Duplex.from streams
3340
3734
  const fn = preLowered?.has(j) ? null : pipelineStageFunction(lowerer, arg);
3341
3735
  const syncSourceFn = j === 0 &&