@scriptc/compiler 0.3.4 → 0.3.6

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 (316) hide show
  1. package/ambient/scriptc-node-fallback.d.ts +409 -42
  2. package/dist/backend/llvm/array-search.js +1 -1
  3. package/dist/backend/llvm/array-search.js.map +1 -1
  4. package/dist/backend/llvm/call-lifetimes.d.ts +6 -0
  5. package/dist/backend/llvm/call-lifetimes.js +19 -0
  6. package/dist/backend/llvm/call-lifetimes.js.map +1 -1
  7. package/dist/backend/llvm/constant-callbacks.d.ts +2 -21
  8. package/dist/backend/llvm/constant-callbacks.js +36 -219
  9. package/dist/backend/llvm/constant-callbacks.js.map +1 -1
  10. package/dist/backend/llvm/constant-callbacks.test.js +22 -0
  11. package/dist/backend/llvm/constant-callbacks.test.js.map +1 -1
  12. package/dist/backend/llvm/dense-array-access.d.ts +9 -0
  13. package/dist/backend/llvm/dense-array-access.js +27 -1
  14. package/dist/backend/llvm/dense-array-access.js.map +1 -1
  15. package/dist/backend/llvm/dyn.d.ts +6 -0
  16. package/dist/backend/llvm/dyn.js +71 -7
  17. package/dist/backend/llvm/dyn.js.map +1 -1
  18. package/dist/backend/llvm/emitter.d.ts +120 -2
  19. package/dist/backend/llvm/emitter.js +820 -142
  20. package/dist/backend/llvm/emitter.js.map +1 -1
  21. package/dist/backend/llvm/expr-async.js +17 -7
  22. package/dist/backend/llvm/expr-async.js.map +1 -1
  23. package/dist/backend/llvm/expr-bytes.js +1 -1
  24. package/dist/backend/llvm/expr-callbacks.d.ts +11 -0
  25. package/dist/backend/llvm/expr-callbacks.js +53 -0
  26. package/dist/backend/llvm/expr-callbacks.js.map +1 -1
  27. package/dist/backend/llvm/expr-calls.js +88 -2
  28. package/dist/backend/llvm/expr-calls.js.map +1 -1
  29. package/dist/backend/llvm/expr-containers.js +50 -27
  30. package/dist/backend/llvm/expr-containers.js.map +1 -1
  31. package/dist/backend/llvm/expr-dispatch.js +1 -0
  32. package/dist/backend/llvm/expr-dispatch.js.map +1 -1
  33. package/dist/backend/llvm/expr-dynamic.js +25 -1
  34. package/dist/backend/llvm/expr-dynamic.js.map +1 -1
  35. package/dist/backend/llvm/expr-primitives.d.ts +1 -1
  36. package/dist/backend/llvm/expr-primitives.js +20 -1
  37. package/dist/backend/llvm/expr-primitives.js.map +1 -1
  38. package/dist/backend/llvm/expr-stream-bridges.js +4 -0
  39. package/dist/backend/llvm/expr-stream-bridges.js.map +1 -1
  40. package/dist/backend/llvm/integer-clones.d.ts +103 -0
  41. package/dist/backend/llvm/integer-clones.js +1336 -0
  42. package/dist/backend/llvm/integer-clones.js.map +1 -0
  43. package/dist/backend/llvm/integer-clones.test.d.ts +1 -0
  44. package/dist/backend/llvm/integer-clones.test.js +219 -0
  45. package/dist/backend/llvm/integer-clones.test.js.map +1 -0
  46. package/dist/backend/llvm/lib-datagram.js +14 -0
  47. package/dist/backend/llvm/lib-datagram.js.map +1 -1
  48. package/dist/backend/llvm/lib-dispatch.js +32 -1
  49. package/dist/backend/llvm/lib-dispatch.js.map +1 -1
  50. package/dist/backend/llvm/lib-filesystem.js +61 -1
  51. package/dist/backend/llvm/lib-filesystem.js.map +1 -1
  52. package/dist/backend/llvm/lib-network.js +21 -3
  53. package/dist/backend/llvm/lib-network.js.map +1 -1
  54. package/dist/backend/llvm/lib-process.js +34 -0
  55. package/dist/backend/llvm/lib-process.js.map +1 -1
  56. package/dist/backend/llvm/lib-shared.js +77 -2
  57. package/dist/backend/llvm/lib-shared.js.map +1 -1
  58. package/dist/backend/llvm/lib-test.js +16 -3
  59. package/dist/backend/llvm/lib-test.js.map +1 -1
  60. package/dist/backend/llvm/lib-tls.js +6 -0
  61. package/dist/backend/llvm/lib-tls.js.map +1 -1
  62. package/dist/backend/llvm/local-array-reads.js +1 -1
  63. package/dist/backend/llvm/local-array-reads.js.map +1 -1
  64. package/dist/backend/llvm/map-entry-fusion.d.ts +28 -0
  65. package/dist/backend/llvm/map-entry-fusion.js +233 -0
  66. package/dist/backend/llvm/map-entry-fusion.js.map +1 -0
  67. package/dist/backend/llvm/map-entry-fusion.test.d.ts +1 -0
  68. package/dist/backend/llvm/map-entry-fusion.test.js +183 -0
  69. package/dist/backend/llvm/map-entry-fusion.test.js.map +1 -0
  70. package/dist/backend/llvm/map-number-lookup.d.ts +2 -0
  71. package/dist/backend/llvm/map-number-lookup.js +1 -1
  72. package/dist/backend/llvm/map-number-lookup.js.map +1 -1
  73. package/dist/backend/llvm/map-number-lookup.test.js +10 -11
  74. package/dist/backend/llvm/map-number-lookup.test.js.map +1 -1
  75. package/dist/backend/llvm/map-read-lifetimes.d.ts +2 -0
  76. package/dist/backend/llvm/map-read-lifetimes.js +3 -0
  77. package/dist/backend/llvm/map-read-lifetimes.js.map +1 -1
  78. package/dist/backend/llvm/map-read-lifetimes.test.js +2 -2
  79. package/dist/backend/llvm/nullable-unions.d.ts +6 -3
  80. package/dist/backend/llvm/nullable-unions.js +2 -0
  81. package/dist/backend/llvm/nullable-unions.js.map +1 -1
  82. package/dist/backend/llvm/publish.d.ts +16 -0
  83. package/dist/backend/llvm/publish.js +81 -10
  84. package/dist/backend/llvm/publish.js.map +1 -1
  85. package/dist/backend/llvm/publish.test.d.ts +1 -0
  86. package/dist/backend/llvm/publish.test.js +94 -0
  87. package/dist/backend/llvm/publish.test.js.map +1 -0
  88. package/dist/backend/llvm/record-results.d.ts +1 -1
  89. package/dist/backend/llvm/record-results.js +78 -4
  90. package/dist/backend/llvm/record-results.js.map +1 -1
  91. package/dist/backend/llvm/record-sources.d.ts +7 -0
  92. package/dist/backend/llvm/record-sources.js +14 -0
  93. package/dist/backend/llvm/record-sources.js.map +1 -0
  94. package/dist/backend/llvm/reference-writes.js +1 -0
  95. package/dist/backend/llvm/reference-writes.js.map +1 -1
  96. package/dist/backend/llvm/shapes.d.ts +12 -3
  97. package/dist/backend/llvm/shapes.js +23 -14
  98. package/dist/backend/llvm/shapes.js.map +1 -1
  99. package/dist/backend/llvm/shapes.test.js +5 -3
  100. package/dist/backend/llvm/shapes.test.js.map +1 -1
  101. package/dist/backend/llvm/speculative-integers.d.ts +74 -0
  102. package/dist/backend/llvm/speculative-integers.js +571 -0
  103. package/dist/backend/llvm/speculative-integers.js.map +1 -0
  104. package/dist/backend/llvm/speculative-integers.test.d.ts +1 -0
  105. package/dist/backend/llvm/speculative-integers.test.js +148 -0
  106. package/dist/backend/llvm/speculative-integers.test.js.map +1 -0
  107. package/dist/backend/llvm/string-lifetimes.test.js +75 -1
  108. package/dist/backend/llvm/string-lifetimes.test.js.map +1 -1
  109. package/dist/backend/llvm/walkers.d.ts +17 -0
  110. package/dist/backend/llvm/walkers.js +123 -0
  111. package/dist/backend/llvm/walkers.js.map +1 -1
  112. package/dist/backend/may-throw.js +2 -0
  113. package/dist/backend/may-throw.js.map +1 -1
  114. package/dist/backend/native/contracts.d.ts +2 -1
  115. package/dist/backend/native/executable.js +6 -1
  116. package/dist/backend/native/executable.js.map +1 -1
  117. package/dist/backend/native/runtime-inputs.d.ts +1 -1
  118. package/dist/backend/native/runtime-inputs.js +1 -0
  119. package/dist/backend/native/runtime-inputs.js.map +1 -1
  120. package/dist/backend/runtime-abi.d.ts +2 -2
  121. package/dist/backend/runtime-abi.js +2 -2
  122. package/dist/backend/runtime-pack-targets.test.js +1 -1
  123. package/dist/backend/runtime-pack.d.ts +7 -3
  124. package/dist/backend/runtime-pack.js +12 -6
  125. package/dist/backend/runtime-pack.js.map +1 -1
  126. package/dist/backend/runtime-pack.test.js +16 -7
  127. package/dist/backend/runtime-pack.test.js.map +1 -1
  128. package/dist/contracts/check.js +1 -0
  129. package/dist/contracts/check.js.map +1 -1
  130. package/dist/coverage/surface-manifest.js +3 -3
  131. package/dist/coverage/surface-manifest.js.map +1 -1
  132. package/dist/diagnostics/diagnostic.d.ts +1 -1
  133. package/dist/diagnostics/diagnostic.js +6 -2
  134. package/dist/diagnostics/diagnostic.js.map +1 -1
  135. package/dist/frontend/lowering/builtin-calls.js +13 -0
  136. package/dist/frontend/lowering/builtin-calls.js.map +1 -1
  137. package/dist/frontend/lowering/builtins/callable-aliases.js +82 -8
  138. package/dist/frontend/lowering/builtins/callable-aliases.js.map +1 -1
  139. package/dist/frontend/lowering/builtins/child-process-async.d.ts +8 -6
  140. package/dist/frontend/lowering/builtins/child-process-async.js +45 -29
  141. package/dist/frontend/lowering/builtins/child-process-async.js.map +1 -1
  142. package/dist/frontend/lowering/builtins/compression.d.ts +9 -0
  143. package/dist/frontend/lowering/builtins/compression.js +145 -30
  144. package/dist/frontend/lowering/builtins/compression.js.map +1 -1
  145. package/dist/frontend/lowering/builtins/crypto.js +12 -1
  146. package/dist/frontend/lowering/builtins/crypto.js.map +1 -1
  147. package/dist/frontend/lowering/builtins/errors.js +5 -3
  148. package/dist/frontend/lowering/builtins/errors.js.map +1 -1
  149. package/dist/frontend/lowering/builtins/filesystem-calls.d.ts +6 -0
  150. package/dist/frontend/lowering/builtins/filesystem-calls.js +16 -0
  151. package/dist/frontend/lowering/builtins/filesystem-calls.js.map +1 -1
  152. package/dist/frontend/lowering/builtins/filesystem.d.ts +8 -0
  153. package/dist/frontend/lowering/builtins/filesystem.js +199 -2
  154. package/dist/frontend/lowering/builtins/filesystem.js.map +1 -1
  155. package/dist/frontend/lowering/builtins/fs-streams.d.ts +26 -0
  156. package/dist/frontend/lowering/builtins/fs-streams.js +131 -0
  157. package/dist/frontend/lowering/builtins/fs-streams.js.map +1 -0
  158. package/dist/frontend/lowering/builtins/hash-stream.d.ts +12 -0
  159. package/dist/frontend/lowering/builtins/hash-stream.js +80 -0
  160. package/dist/frontend/lowering/builtins/hash-stream.js.map +1 -0
  161. package/dist/frontend/lowering/builtins/module-calls.js +17 -3
  162. package/dist/frontend/lowering/builtins/module-calls.js.map +1 -1
  163. package/dist/frontend/lowering/builtins/process.js +9 -2
  164. package/dist/frontend/lowering/builtins/process.js.map +1 -1
  165. package/dist/frontend/lowering/builtins/readline.d.ts +45 -13
  166. package/dist/frontend/lowering/builtins/readline.js +812 -47
  167. package/dist/frontend/lowering/builtins/readline.js.map +1 -1
  168. package/dist/frontend/lowering/builtins/workers.d.ts +4 -0
  169. package/dist/frontend/lowering/builtins/workers.js +58 -0
  170. package/dist/frontend/lowering/builtins/workers.js.map +1 -1
  171. package/dist/frontend/lowering/class-dynamic-dispatch.js +150 -8
  172. package/dist/frontend/lowering/class-dynamic-dispatch.js.map +1 -1
  173. package/dist/frontend/lowering/class-protocols.d.ts +55 -0
  174. package/dist/frontend/lowering/class-protocols.js +735 -0
  175. package/dist/frontend/lowering/class-protocols.js.map +1 -1
  176. package/dist/frontend/lowering/containers/array-from-async.d.ts +18 -0
  177. package/dist/frontend/lowering/containers/array-from-async.js +282 -0
  178. package/dist/frontend/lowering/containers/array-from-async.js.map +1 -0
  179. package/dist/frontend/lowering/containers/bytes.js +33 -12
  180. package/dist/frontend/lowering/containers/bytes.js.map +1 -1
  181. package/dist/frontend/lowering/containers/collection-grouping.js +2 -1
  182. package/dist/frontend/lowering/containers/collection-grouping.js.map +1 -1
  183. package/dist/frontend/lowering/containers/collection-methods.js +27 -23
  184. package/dist/frontend/lowering/containers/collection-methods.js.map +1 -1
  185. package/dist/frontend/lowering/devirtualize.js +20 -7
  186. package/dist/frontend/lowering/devirtualize.js.map +1 -1
  187. package/dist/frontend/lowering/divergences.js +188 -15
  188. package/dist/frontend/lowering/divergences.js.map +1 -1
  189. package/dist/frontend/lowering/lower-calls.js +129 -25
  190. package/dist/frontend/lowering/lower-calls.js.map +1 -1
  191. package/dist/frontend/lowering/lower-classes.js +46 -1
  192. package/dist/frontend/lowering/lower-classes.js.map +1 -1
  193. package/dist/frontend/lowering/lower-dgram.js +55 -15
  194. package/dist/frontend/lowering/lower-dgram.js.map +1 -1
  195. package/dist/frontend/lowering/lower-event-emitter.d.ts +9 -1
  196. package/dist/frontend/lowering/lower-event-emitter.js +88 -1
  197. package/dist/frontend/lowering/lower-event-emitter.js.map +1 -1
  198. package/dist/frontend/lowering/lower-exprs.d.ts +4 -0
  199. package/dist/frontend/lowering/lower-exprs.js +239 -71
  200. package/dist/frontend/lowering/lower-exprs.js.map +1 -1
  201. package/dist/frontend/lowering/lower-inspect.js +49 -3
  202. package/dist/frontend/lowering/lower-inspect.js.map +1 -1
  203. package/dist/frontend/lowering/lower-mock.d.ts +11 -1
  204. package/dist/frontend/lowering/lower-mock.js +377 -61
  205. package/dist/frontend/lowering/lower-mock.js.map +1 -1
  206. package/dist/frontend/lowering/lower-modules.js +1 -0
  207. package/dist/frontend/lowering/lower-modules.js.map +1 -1
  208. package/dist/frontend/lowering/lower-server.d.ts +2 -1
  209. package/dist/frontend/lowering/lower-server.js +234 -21
  210. package/dist/frontend/lowering/lower-server.js.map +1 -1
  211. package/dist/frontend/lowering/lower-stmts.js +60 -13
  212. package/dist/frontend/lowering/lower-stmts.js.map +1 -1
  213. package/dist/frontend/lowering/lower-stream.d.ts +1 -3
  214. package/dist/frontend/lowering/lower-stream.js +325 -20
  215. package/dist/frontend/lowering/lower-stream.js.map +1 -1
  216. package/dist/frontend/lowering/lower-test.js +147 -48
  217. package/dist/frontend/lowering/lower-test.js.map +1 -1
  218. package/dist/frontend/lowering/lowerer.d.ts +13 -1
  219. package/dist/frontend/lowering/lowerer.js +10 -2
  220. package/dist/frontend/lowering/lowerer.js.map +1 -1
  221. package/dist/frontend/lowering/null-prototype.d.ts +13 -0
  222. package/dist/frontend/lowering/null-prototype.js +33 -0
  223. package/dist/frontend/lowering/null-prototype.js.map +1 -0
  224. package/dist/frontend/lowering/record-sources.d.ts +15 -0
  225. package/dist/frontend/lowering/record-sources.js +46 -0
  226. package/dist/frontend/lowering/record-sources.js.map +1 -0
  227. package/dist/frontend/lowering/surfaces.d.ts +3 -3
  228. package/dist/frontend/lowering/surfaces.js +59 -5
  229. package/dist/frontend/lowering/surfaces.js.map +1 -1
  230. package/dist/frontend/mock-shapes.d.ts +5 -0
  231. package/dist/frontend/mock-shapes.js +27 -2
  232. package/dist/frontend/mock-shapes.js.map +1 -1
  233. package/dist/frontend/program.js +5 -4
  234. package/dist/frontend/program.js.map +1 -1
  235. package/dist/frontend/type-mapper.d.ts +3 -0
  236. package/dist/frontend/type-mapper.js +148 -4
  237. package/dist/frontend/type-mapper.js.map +1 -1
  238. package/dist/index.js +18 -8
  239. package/dist/index.js.map +1 -1
  240. package/dist/ir/analysis.d.ts +10 -0
  241. package/dist/ir/analysis.js +35 -0
  242. package/dist/ir/analysis.js.map +1 -1
  243. package/dist/ir/analysis.test.js +69 -1
  244. package/dist/ir/analysis.test.js.map +1 -1
  245. package/dist/ir/builtin-effects.js +72 -0
  246. package/dist/ir/builtin-effects.js.map +1 -1
  247. package/dist/ir/builtin-signatures.d.ts +1 -1
  248. package/dist/ir/builtin-signatures.js +258 -13
  249. package/dist/ir/builtin-signatures.js.map +1 -1
  250. package/dist/ir/capture-values.d.ts +107 -0
  251. package/dist/ir/capture-values.js +850 -0
  252. package/dist/ir/capture-values.js.map +1 -0
  253. package/dist/ir/capture-values.test.d.ts +1 -0
  254. package/dist/ir/capture-values.test.js +268 -0
  255. package/dist/ir/capture-values.test.js.map +1 -0
  256. package/dist/ir/field-values.d.ts +16 -0
  257. package/dist/ir/field-values.js +128 -0
  258. package/dist/ir/field-values.js.map +1 -0
  259. package/dist/ir/field-values.test.d.ts +1 -0
  260. package/dist/ir/field-values.test.js +160 -0
  261. package/dist/ir/field-values.test.js.map +1 -0
  262. package/dist/ir/final-fields.d.ts +4 -1
  263. package/dist/ir/final-fields.js +11 -3
  264. package/dist/ir/final-fields.js.map +1 -1
  265. package/dist/ir/function-references.test.js +2 -1
  266. package/dist/ir/function-references.test.js.map +1 -1
  267. package/dist/ir/init-only-globals.d.ts +16 -0
  268. package/dist/ir/init-only-globals.js +121 -0
  269. package/dist/ir/init-only-globals.js.map +1 -0
  270. package/dist/ir/init-only-globals.test.d.ts +1 -0
  271. package/dist/ir/init-only-globals.test.js +115 -0
  272. package/dist/ir/init-only-globals.test.js.map +1 -0
  273. package/dist/ir/initializer-bindings.d.ts +18 -1
  274. package/dist/ir/initializer-bindings.js +91 -1
  275. package/dist/ir/initializer-bindings.js.map +1 -1
  276. package/dist/ir/initializer-bindings.test.js +57 -2
  277. package/dist/ir/initializer-bindings.test.js.map +1 -1
  278. package/dist/ir/int32-slots.d.ts +22 -0
  279. package/dist/ir/int32-slots.js +398 -13
  280. package/dist/ir/int32-slots.js.map +1 -1
  281. package/dist/ir/int32-slots.test.js +119 -8
  282. package/dist/ir/int32-slots.test.js.map +1 -1
  283. package/dist/ir/integer-loop-facts.d.ts +27 -1
  284. package/dist/ir/integer-loop-facts.js +239 -7
  285. package/dist/ir/integer-loop-facts.js.map +1 -1
  286. package/dist/ir/integer-ranges.d.ts +8 -5
  287. package/dist/ir/integer-ranges.js +147 -59
  288. package/dist/ir/integer-ranges.js.map +1 -1
  289. package/dist/ir/integer-ranges.test.js +285 -7
  290. package/dist/ir/integer-ranges.test.js.map +1 -1
  291. package/dist/ir/ir.d.ts +22 -1
  292. package/dist/ir/ir.js +4 -0
  293. package/dist/ir/ir.js.map +1 -1
  294. package/dist/ir/property-bags.d.ts +14 -0
  295. package/dist/ir/property-bags.js +121 -0
  296. package/dist/ir/property-bags.js.map +1 -0
  297. package/dist/ir/receiver-readers.d.ts +21 -0
  298. package/dist/ir/receiver-readers.js +217 -0
  299. package/dist/ir/receiver-readers.js.map +1 -0
  300. package/dist/ir/runtime-features.d.ts +3 -1
  301. package/dist/ir/runtime-features.js +102 -7
  302. package/dist/ir/runtime-features.js.map +1 -1
  303. package/dist/ir/runtime-features.test.js +62 -0
  304. package/dist/ir/runtime-features.test.js.map +1 -1
  305. package/dist/ir/traverse.js +4 -0
  306. package/dist/ir/traverse.js.map +1 -1
  307. package/dist/ir/validate.js +71 -3
  308. package/dist/ir/validate.js.map +1 -1
  309. package/dist/ir/validate.test.js +59 -0
  310. package/dist/ir/validate.test.js.map +1 -1
  311. package/dist/library/int-infer.js +3 -0
  312. package/dist/library/int-infer.js.map +1 -1
  313. package/dist/library/ir-policy.js +5 -0
  314. package/dist/library/ir-policy.js.map +1 -1
  315. package/package.json +20 -20
  316. package/surface-manifest.json +57 -19
@@ -3,6 +3,7 @@ import {} from "../lowerer.js";
3
3
  import { isJsSourceFile } from "../../program.js";
4
4
  import { builtinModuleFnOf } from "../surfaces.js";
5
5
  import { registerHttpClientFnBinding } from "../lower-server.js";
6
+ import { isPromisifiedZlibMember } from "./compression.js";
6
7
  /** Compile-time util.promisify projections. The immutable result binding
7
8
  * owns no runtime slot: calls rewrite to the target's promise lowering,
8
9
  * while value uses remain explicit fences. Unsupported targets report at
@@ -13,9 +14,13 @@ export function isPromisifyCall(lowerer, init) {
13
14
  e = e.expression;
14
15
  if (!ts.isCallExpression(e) || e.questionDotToken)
15
16
  return null;
16
- if (!ts.isIdentifier(e.expression))
17
- return null;
18
- const bi = lowerer.builtinImportOf(e.expression);
17
+ // `promisify(...)` over a named import, `util.promisify(...)` over a
18
+ // namespace or default import.
19
+ const bi = ts.isIdentifier(e.expression)
20
+ ? lowerer.builtinImportOf(e.expression)
21
+ : ts.isPropertyAccessExpression(e.expression)
22
+ ? lowerer.builtinMemberOf(e.expression)
23
+ : null;
19
24
  if (!bi || bi.module !== "util" || bi.member !== "promisify")
20
25
  return null;
21
26
  return e;
@@ -57,6 +62,49 @@ export function registerBuiltinCallableAlias(lowerer, nameNode, init) {
57
62
  });
58
63
  return true;
59
64
  }
65
+ /** The fs callback functions whose promisified form is the fs/promises
66
+ * member of the same name: the callback's single result is the promise's
67
+ * value and the errors are the same. fs.open (an fd number, where
68
+ * fs/promises.open gives a FileHandle), fs.exists (a custom promisify),
69
+ * and fs.read/fs.write (multi-value callbacks) are not in the set. */
70
+ const PROMISIFIED_FS_MEMBERS = new Set([
71
+ "access",
72
+ "appendFile",
73
+ "chmod",
74
+ "chown",
75
+ "copyFile",
76
+ "lchown",
77
+ "link",
78
+ "lstat",
79
+ "lutimes",
80
+ "mkdir",
81
+ "mkdtemp",
82
+ "readFile",
83
+ "readdir",
84
+ "readlink",
85
+ "realpath",
86
+ "rename",
87
+ "rm",
88
+ "rmdir",
89
+ "stat",
90
+ "statfs",
91
+ "symlink",
92
+ "truncate",
93
+ "unlink",
94
+ "utimes",
95
+ "writeFile",
96
+ ]);
97
+ /** The global setTimeout/setImmediate as a promisify target, keyed like
98
+ * the node:timers exports they are. Node's util.promisify returns their
99
+ * custom promisified form, which is timers/promises' function of the same
100
+ * name. */
101
+ function globalTimerOf(lowerer, ident) {
102
+ if (ident.text !== "setTimeout" && ident.text !== "setImmediate")
103
+ return null;
104
+ if (!lowerer.isStdlibSymbol(lowerer.resolveValueSymbol(ident) ?? undefined))
105
+ return null;
106
+ return { module: "timers", member: ident.text };
107
+ }
60
108
  export function registerPromisifiedBuiltinDecl(lowerer, nameNode, init) {
61
109
  if (!init)
62
110
  return false;
@@ -70,14 +118,40 @@ export function registerPromisifiedBuiltinDecl(lowerer, nameNode, init) {
70
118
  if (!e)
71
119
  return false;
72
120
  const argNode = e.arguments.length === 1 ? e.arguments[0] : null;
73
- const target = argNode && ts.isIdentifier(argNode) ? lowerer.builtinImportOf(argNode) : null;
121
+ // `promisify(exec)` over a named import, or `promisify(cp.exec)` over a
122
+ // namespace import.
123
+ const target = !argNode
124
+ ? null
125
+ : ts.isIdentifier(argNode)
126
+ ? (lowerer.builtinImportOf(argNode) ?? globalTimerOf(lowerer, argNode))
127
+ : ts.isPropertyAccessExpression(argNode)
128
+ ? lowerer.builtinMemberOf(argNode)
129
+ : null;
74
130
  const projection = target?.module === "child_process" && target.member === "execFile"
75
131
  ? { kind: "promisified-exec-file" }
76
- : target?.module === "fs" && target.member === "readFile"
77
- ? { kind: "promisified-builtin", module: "fs/promises", member: "readFile" }
78
- : null;
132
+ : target?.module === "child_process" && target.member === "exec"
133
+ ? { kind: "promisified-exec" }
134
+ : target?.module === "fs" && PROMISIFIED_FS_MEMBERS.has(target.member)
135
+ ? { kind: "promisified-builtin", module: "fs/promises", member: target.member }
136
+ : target?.module === "timers" &&
137
+ (target.member === "setTimeout" || target.member === "setImmediate")
138
+ ? {
139
+ kind: "promisified-builtin",
140
+ module: "timers/promises",
141
+ member: target.member,
142
+ }
143
+ : target?.module === "stream" &&
144
+ (target.member === "finished" || target.member === "pipeline")
145
+ ? {
146
+ kind: "promisified-builtin",
147
+ module: "stream/promises",
148
+ member: target.member,
149
+ }
150
+ : target?.module === "zlib" && isPromisifiedZlibMember(target.member)
151
+ ? { kind: "promisified-zlib", member: target.member }
152
+ : null;
79
153
  if (!projection) {
80
- lowerer.noLowering("util.promisify of this target", argNode ?? e, "child_process.execFile and fs.readFile are the supported targets");
154
+ lowerer.noLowering("util.promisify of this target", argNode ?? e, "child_process.exec, child_process.execFile, setTimeout, setImmediate, stream.finished, stream.pipeline, the zlib callback one-shots and the fs callback functions with an fs/promises counterpart are the supported targets");
81
155
  }
82
156
  const symbol = lowerer.checker.getSymbolAtLocation(nameNode);
83
157
  if (symbol)
@@ -1 +1 @@
1
- {"version":3,"file":"callable-aliases.js","sourceRoot":"","sources":["../../../../src/frontend/lowering/builtins/callable-aliases.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"callable-aliases.js","sourceRoot":"","sources":["../../../../src/frontend/lowering/builtins/callable-aliases.ts"],"names":[],"mappings":"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"}
@@ -3,11 +3,13 @@ import { type Lowerer } from "../lowerer.js";
3
3
  import { type IrExpr, type SrcLoc } from "../../../ir/ir.js";
4
4
  /** A call THROUGH a promisified-execFile binding:
5
5
  * `execFileAsync(file, args?, options?)` → one call of the interned
6
- * %execFileAsync helper — an ASYNC IR function (a throw becomes a rejection
7
- * automatically) that runs the exec core synchronously and returns
8
- * `{ stdout, stderr }`, exactly Node's promisified execFile behind an
9
- * already-settled promise (the fs/promises stance, divergence 23).
10
- * Options are the exec-sync slice minus stdio (the async form always
6
+ * %execFileAsync helper (with `shell`, a promisified-exec binding:
7
+ * `execAsync(command, options?)` → %execAsync, the command line run by
8
+ * /bin/sh -c as execSync runs it) — an ASYNC IR function (a throw
9
+ * becomes a rejection automatically) that runs the exec core
10
+ * synchronously and returns `{ stdout, stderr }`, exactly Node's
11
+ * promisified execFile/exec behind an already-settled promise (the
12
+ * fs/promises stance, divergence 23). Options are the exec-sync slice minus stdio (the async form always
11
13
  * captures both streams, no echo): encoding must spell utf8, cwd/env/
12
14
  * timeout lower, maxBuffer/windowsHide are accepted no-ops, killSignal
13
15
  * only as its SIGTERM default. Rejections carry Node's async messages
@@ -15,4 +17,4 @@ import { type IrExpr, type SrcLoc } from "../../../ir/ir.js";
15
17
  * and "spawn <file> ENOENT" with .code); Node's numeric `.code` on a
16
18
  * Command-failed rejection (the exit status) is NOT carried —
17
19
  * SEMANTICS.md divergence 50's stance. */
18
- export declare function lowerExecFileAsyncCall(lowerer: Lowerer, expr: ts.CallExpression, loc: SrcLoc): IrExpr;
20
+ export declare function lowerExecFileAsyncCall(lowerer: Lowerer, expr: ts.CallExpression, loc: SrcLoc, shell?: boolean): IrExpr;
@@ -6,13 +6,16 @@ import {} from "../lowerer.js";
6
6
  import { conditionalSpreadOf } from "../expressions/object-literals.js";
7
7
  import { BOOL, F64, SPAWNRES_T, STRING, arrayOf, } from "../../../ir/ir.js";
8
8
  import { optionMember } from "./arguments.js";
9
+ import { execResultShape } from "../../type-mapper.js";
9
10
  /** A call THROUGH a promisified-execFile binding:
10
11
  * `execFileAsync(file, args?, options?)` → one call of the interned
11
- * %execFileAsync helper — an ASYNC IR function (a throw becomes a rejection
12
- * automatically) that runs the exec core synchronously and returns
13
- * `{ stdout, stderr }`, exactly Node's promisified execFile behind an
14
- * already-settled promise (the fs/promises stance, divergence 23).
15
- * Options are the exec-sync slice minus stdio (the async form always
12
+ * %execFileAsync helper (with `shell`, a promisified-exec binding:
13
+ * `execAsync(command, options?)` → %execAsync, the command line run by
14
+ * /bin/sh -c as execSync runs it) — an ASYNC IR function (a throw
15
+ * becomes a rejection automatically) that runs the exec core
16
+ * synchronously and returns `{ stdout, stderr }`, exactly Node's
17
+ * promisified execFile/exec behind an already-settled promise (the
18
+ * fs/promises stance, divergence 23). Options are the exec-sync slice minus stdio (the async form always
16
19
  * captures both streams, no echo): encoding must spell utf8, cwd/env/
17
20
  * timeout lower, maxBuffer/windowsHide are accepted no-ops, killSignal
18
21
  * only as its SIGTERM default. Rejections carry Node's async messages
@@ -20,17 +23,31 @@ import { optionMember } from "./arguments.js";
20
23
  * and "spawn <file> ENOENT" with .code); Node's numeric `.code` on a
21
24
  * Command-failed rejection (the exit status) is NOT carried —
22
25
  * SEMANTICS.md divergence 50's stance. */
23
- export function lowerExecFileAsyncCall(lowerer, expr, loc) {
26
+ export function lowerExecFileAsyncCall(lowerer, expr, loc, shell = false) {
27
+ const what = shell ? "the promisified exec" : "the promisified execFile";
24
28
  if (expr.arguments.length < 1 ||
25
- expr.arguments.length > 3 ||
29
+ expr.arguments.length > (shell ? 2 : 3) ||
26
30
  expr.arguments.some(ts.isSpreadElement)) {
27
- lowerer.noLowering("the promisified execFile with this argument shape", expr, "the supported form is execFileAsync(file, args?, options?)");
31
+ lowerer.noLowering(`${what} with this argument shape`, expr, shell
32
+ ? "the supported form is execAsync(command, options?)"
33
+ : "the supported form is execFileAsync(file, args?, options?)");
28
34
  }
29
- const cmd = lowerer.lowerExprExpecting(expr.arguments[0], STRING);
30
- const argv = lowerChildArgsArg(lowerer, expr.arguments[1], loc);
31
- const optsNode = expr.arguments[2];
35
+ const command = lowerer.lowerExprExpecting(expr.arguments[0], STRING);
36
+ // exec: /bin/sh -c <command>, execSync's lowering (the command string
37
+ // rides as the argv[1] the failure display reads); execFile: file + its
38
+ // args list.
39
+ const cmd = shell ? { kind: "strLit", value: "/bin/sh", type: STRING, loc } : command;
40
+ const argv = shell
41
+ ? {
42
+ kind: "arrayLit",
43
+ elems: [{ kind: "strLit", value: "-c", type: STRING, loc }, command],
44
+ type: arrayOf(STRING),
45
+ loc,
46
+ }
47
+ : lowerChildArgsArg(lowerer, expr.arguments[1], loc);
48
+ const optsNode = expr.arguments[shell ? 1 : 2];
32
49
  const emptyStr = { kind: "strLit", value: "", type: STRING, loc };
33
- const helper = execFileAsyncHelper(lowerer, loc);
50
+ const helper = execFileAsyncHelper(lowerer, loc, shell);
34
51
  const envRecT = { kind: "record", shapeId: helper.envShapeId };
35
52
  const envRec = (has, pairs) => ({
36
53
  kind: "recordLit",
@@ -47,7 +64,7 @@ export function lowerExecFileAsyncCall(lowerer, expr, loc) {
47
64
  let timeout = numLit(0, loc);
48
65
  if (optsNode) {
49
66
  if (!ts.isObjectLiteralExpression(optsNode)) {
50
- lowerer.noLowering("the promisified execFile with a non-literal options argument", optsNode, "pass the options inline so each member can be checked");
67
+ lowerer.noLowering(`${what} with a non-literal options argument`, optsNode, "pass the options inline so each member can be checked");
51
68
  }
52
69
  for (const p of optsNode.properties) {
53
70
  // The conditional-spread idiom carrying `env` — the portless
@@ -76,17 +93,17 @@ export function lowerExecFileAsyncCall(lowerer, expr, loc) {
76
93
  };
77
94
  continue;
78
95
  }
79
- lowerer.noLowering("the promisified execFile with this options spread", p, "the one supported spread is the conditional `...(c ? { env: ... } : {})` (either orientation) — write other members inline");
96
+ lowerer.noLowering(`${what} with this options spread`, p, "the one supported spread is the conditional `...(c ? { env: ... } : {})` (either orientation) — write other members inline");
80
97
  }
81
98
  const m = optionMember(p);
82
99
  if (!m) {
83
- lowerer.noLowering("the promisified execFile with this options shape", p, "spreads and computed keys have no lowering — write each member inline");
100
+ lowerer.noLowering(`${what} with this options shape`, p, "spreads and computed keys have no lowering — write each member inline");
84
101
  }
85
102
  switch (m.name) {
86
103
  case "encoding": {
87
104
  const t = lowerer.typeOf(m.value);
88
105
  if (!t.isStringLiteralType() || (t.value !== "utf8" && t.value !== "utf-8")) {
89
- lowerer.noLowering("the promisified execFile with a non-utf8 encoding", m.value, 'outputs are captured as utf8 — pass { encoding: "utf8" } (Node\'s own default here)');
106
+ lowerer.noLowering(`${what} with a non-utf8 encoding`, m.value, 'outputs are captured as utf8 — pass { encoding: "utf8" } (Node\'s own default here)');
90
107
  }
91
108
  break;
92
109
  }
@@ -108,12 +125,12 @@ export function lowerExecFileAsyncCall(lowerer, expr, loc) {
108
125
  case "killSignal": {
109
126
  const t = lowerer.typeOf(m.value);
110
127
  if (!t.isStringLiteralType() || t.value !== "SIGTERM") {
111
- lowerer.noLowering("the promisified execFile with a non-default killSignal", m.value, "only the SIGTERM default is implemented for the timeout kill");
128
+ lowerer.noLowering(`${what} with a non-default killSignal`, m.value, "only the SIGTERM default is implemented for the timeout kill");
112
129
  }
113
130
  break;
114
131
  }
115
132
  default:
116
- lowerer.noLowering(`the promisified execFile option '${m.name}'`, p, "encoding, cwd, env, timeout, and maxBuffer are the supported options");
133
+ lowerer.noLowering(`${what} option '${m.name}'`, p, "encoding, cwd, env, timeout, and maxBuffer are the supported options");
117
134
  }
118
135
  }
119
136
  }
@@ -126,16 +143,14 @@ export function lowerExecFileAsyncCall(lowerer, expr, loc) {
126
143
  };
127
144
  }
128
145
  /** The interned `%execFileAsync` helper behind promisified-execFile
129
- * calls: an ASYNC IR function (params: cmd, argv, cwd, hasEnv, envPairs,
130
- * timeoutMs) whose body runs the may-throw cp.execCapture libCall — the
131
- * async machinery turns a throw into the rejection, Node's promisified
146
+ * calls (`%execAsync`, with `shell`, behind promisified-exec ones): an
147
+ * ASYNC IR function (params: cmd, argv, cwd, env {has, pairs}, timeoutMs)
148
+ * whose body runs the may-throw cp.execCapture libCall — the async
149
+ * machinery turns a throw into the rejection, Node's promisified
132
150
  * behavior — and returns the `{ stdout, stderr }` record built from the
133
- * capture. One helper per program (the shape is fixed). */
134
- function execFileAsyncHelper(lowerer, loc) {
135
- const shapeId = lowerer.shapes.intern([
136
- { name: "stderr", type: STRING },
137
- { name: "stdout", type: STRING },
138
- ]);
151
+ * capture. One helper per program and form (the shape is fixed). */
152
+ function execFileAsyncHelper(lowerer, loc, shell) {
153
+ const shapeId = execResultShape(lowerer.shapes);
139
154
  // The env choice travels as ONE {has, pairs} record so a conditional
140
155
  // env spread's condition evaluates exactly once at the call site (has
141
156
  // and pairs both derive from it).
@@ -143,11 +158,11 @@ function execFileAsyncHelper(lowerer, loc) {
143
158
  { name: "has", type: BOOL },
144
159
  { name: "pairs", type: arrayOf(STRING) },
145
160
  ]);
146
- const key = "execFileAsync";
161
+ const key = shell ? "execAsync" : "execFileAsync";
147
162
  const existing = lowerer.valueHelpers.get(key);
148
163
  if (existing)
149
164
  return { name: existing, shapeId, envShapeId };
150
- const name = `%execFileAsync.${lowerer.valueHelpers.size}`;
165
+ const name = `%${key}.${lowerer.valueHelpers.size}`;
151
166
  lowerer.valueHelpers.set(key, name);
152
167
  const recT = { kind: "record", shapeId };
153
168
  const envRecT = { kind: "record", shapeId: envShapeId };
@@ -162,6 +177,7 @@ function execFileAsyncHelper(lowerer, loc) {
162
177
  args: [
163
178
  varRef("cmd.0", STRING, loc),
164
179
  varRef("argv.0", strArrT, loc),
180
+ boolLit(shell, loc),
165
181
  varRef("cwd.0", STRING, loc),
166
182
  {
167
183
  kind: "recordGet",
@@ -1 +1 @@
1
- {"version":3,"file":"child-process-async.js","sourceRoot":"","sources":["../../../../src/frontend/lowering/builtins/child-process-async.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"child-process-async.js","sourceRoot":"","sources":["../../../../src/frontend/lowering/builtins/child-process-async.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC/D,OAAO,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAC3C,OAAO,EAAgB,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AACxE,OAAO,EACL,IAAI,EACJ,GAAG,EAIH,UAAU,EACV,MAAM,EAEN,OAAO,GACR,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEvD;;;;;;;;;;;;;;;0CAe0C;AAC1C,MAAM,UAAU,sBAAsB,CACpC,OAAgB,EAChB,IAAuB,EACvB,GAAW,EACX,KAAK,GAAG,KAAK;IAEb,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,0BAA0B,CAAC;IACzE,IACE,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC;QACzB,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACvC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,eAAe,CAAC,EACvC,CAAC;QACD,OAAO,CAAC,UAAU,CAChB,GAAG,IAAI,2BAA2B,EAClC,IAAI,EACJ,KAAK;YACH,CAAC,CAAC,oDAAoD;YACtD,CAAC,CAAC,4DAA4D,CACjE,CAAC;IACJ,CAAC;IACD,MAAM,OAAO,GAAG,OAAO,CAAC,kBAAkB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAE,EAAE,MAAM,CAAC,CAAC;IACvE,sEAAsE;IACtE,wEAAwE;IACxE,aAAa;IACb,MAAM,GAAG,GAAW,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;IAC9F,MAAM,IAAI,GAAW,KAAK;QACxB,CAAC,CAAC;YACE,IAAI,EAAE,UAAU;YAChB,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,OAAO,CAAC;YACpE,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC;YACrB,GAAG;SACJ;QACH,CAAC,CAAC,iBAAiB,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACvD,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAE/C,MAAM,QAAQ,GAAW,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;IAC1E,MAAM,MAAM,GAAG,mBAAmB,CAAC,OAAO,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;IACxD,MAAM,OAAO,GAAW,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC,UAAU,EAAE,CAAC;IACvE,MAAM,MAAM,GAAG,CAAC,GAAY,EAAE,KAAa,EAAU,EAAE,CAAC,CAAC;QACvD,IAAI,EAAE,WAAW;QACjB,MAAM,EAAE;YACN,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE;YACzC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE;SAChC;QACD,IAAI,EAAE,OAAO;QACb,GAAG;KACJ,CAAC,CAAC;IACH,MAAM,UAAU,GAAG,GAAW,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;IAC/F,IAAI,GAAG,GAAW,QAAQ,CAAC;IAC3B,IAAI,GAAG,GAAW,MAAM,CAAC,KAAK,EAAE,UAAU,EAAE,CAAC,CAAC;IAC9C,IAAI,OAAO,GAAW,MAAM,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACrC,IAAI,QAAQ,EAAE,CAAC;QACb,IAAI,CAAC,EAAE,CAAC,yBAAyB,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC5C,OAAO,CAAC,UAAU,CAChB,GAAG,IAAI,sCAAsC,EAC7C,QAAQ,EACR,uDAAuD,CACxD,CAAC;QACJ,CAAC;QACD,KAAK,MAAM,CAAC,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC;YACpC,6DAA6D;YAC7D,iEAAiE;YACjE,gEAAgE;YAChE,iEAAiE;YACjE,kEAAkE;YAClE,8DAA8D;YAC9D,IAAI,EAAE,CAAC,kBAAkB,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC7B,MAAM,EAAE,GAAG,mBAAmB,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;gBAC7C,IACE,EAAE,KAAK,IAAI;oBACX,EAAE,KAAK,aAAa;oBACpB,EAAE,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC;oBACrB,EAAE,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC,IAAI,CAAC,IAAI,KAAK,KAAK;oBAChC,EAAE,CAAC,oBAAoB,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC,EACrC,CAAC;oBACD,MAAM,IAAI,GAAG,OAAO,CAAC,cAAc,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;oBAC7C,MAAM,OAAO,GAAG,MAAM,CACpB,IAAI,EACJ,gBAAgB,CAAC,OAAO,EAAG,EAAE,CAAC,KAAK,CAAC,CAAC,CAA2B,CAAC,WAAW,CAAC,CAC9E,CAAC;oBACF,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,EAAE,UAAU,EAAE,CAAC,CAAC;oBAC3C,GAAG,GAAG;wBACJ,IAAI,EAAE,SAAS;wBACf,IAAI;wBACJ,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM;wBACpC,KAAK,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO;wBACrC,IAAI,EAAE,OAAO;wBACb,GAAG;qBACJ,CAAC;oBACF,SAAS;gBACX,CAAC;gBACD,OAAO,CAAC,UAAU,CAChB,GAAG,IAAI,2BAA2B,EAClC,CAAC,EACD,4HAA4H,CAC7H,CAAC;YACJ,CAAC;YACD,MAAM,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;YAC1B,IAAI,CAAC,CAAC,EAAE,CAAC;gBACP,OAAO,CAAC,UAAU,CAChB,GAAG,IAAI,0BAA0B,EACjC,CAAC,EACD,uEAAuE,CACxE,CAAC;YACJ,CAAC;YACD,QAAQ,CAAC,CAAC,IAAI,EAAE,CAAC;gBACf,KAAK,UAAU,EAAE,CAAC;oBAChB,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;oBAClC,IAAI,CAAC,CAAC,CAAC,mBAAmB,EAAE,IAAI,CAAC,CAAC,CAAC,KAAK,KAAK,MAAM,IAAI,CAAC,CAAC,KAAK,KAAK,OAAO,CAAC,EAAE,CAAC;wBAC5E,OAAO,CAAC,UAAU,CAChB,GAAG,IAAI,2BAA2B,EAClC,CAAC,CAAC,KAAK,EACP,qFAAqF,CACtF,CAAC;oBACJ,CAAC;oBACD,MAAM;gBACR,CAAC;gBACD,KAAK,KAAK;oBACR,GAAG,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;oBAClD,MAAM;gBACR,KAAK,KAAK;oBACR,GAAG,GAAG,MAAM,CAAC,IAAI,EAAE,gBAAgB,CAAC,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;oBACvD,MAAM;gBACR,KAAK,SAAS;oBACZ,OAAO,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;oBACnD,MAAM;gBACR,KAAK,WAAW;oBACd,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,yCAAyC;oBACrE,MAAM;gBACR,KAAK,aAAa;oBAChB,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,sBAAsB;oBAClD,MAAM;gBACR,KAAK,YAAY,EAAE,CAAC;oBAClB,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;oBAClC,IAAI,CAAC,CAAC,CAAC,mBAAmB,EAAE,IAAI,CAAC,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;wBACtD,OAAO,CAAC,UAAU,CAChB,GAAG,IAAI,gCAAgC,EACvC,CAAC,CAAC,KAAK,EACP,8DAA8D,CAC/D,CAAC;oBACJ,CAAC;oBACD,MAAM;gBACR,CAAC;gBACD;oBACE,OAAO,CAAC,UAAU,CAChB,GAAG,IAAI,YAAY,CAAC,CAAC,IAAI,GAAG,EAC5B,CAAC,EACD,sEAAsE,CACvE,CAAC;YACN,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO;QACL,IAAI,EAAE,MAAM;QACZ,MAAM,EAAE,MAAM,CAAC,IAAI;QACnB,IAAI,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,CAAC;QACpC,IAAI,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,EAAE;QAC7E,GAAG;KACJ,CAAC;AACJ,CAAC;AAED;;;;;;oEAMoE;AACpE,SAAS,mBAAmB,CAC1B,OAAgB,EAChB,GAAW,EACX,KAAc;IAEd,MAAM,OAAO,GAAG,eAAe,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAChD,qEAAqE;IACrE,sEAAsE;IACtE,kCAAkC;IAClC,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC;QACvC,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE;QAC3B,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,EAAE;KACzC,CAAC,CAAC;IACH,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,eAAe,CAAC;IAClD,MAAM,QAAQ,GAAG,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC/C,IAAI,QAAQ;QAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC;IAC7D,MAAM,IAAI,GAAG,IAAI,GAAG,IAAI,OAAO,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;IACpD,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IACpC,MAAM,IAAI,GAAW,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC;IACjD,MAAM,OAAO,GAAW,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC;IAChE,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAEhC,MAAM,IAAI,GAAa;QACrB;YACE,IAAI,EAAE,SAAS;YACf,OAAO,EAAE,KAAK;YACd,IAAI,EAAE;gBACJ,IAAI,EAAE,SAAS;gBACf,EAAE,EAAE,gBAAgB;gBACpB,IAAI,EAAE;oBACJ,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC;oBAC5B,MAAM,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,CAAC;oBAC9B,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC;oBACnB,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC;oBAC5B;wBACE,IAAI,EAAE,WAAW;wBACjB,GAAG,EAAE,MAAM,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC;wBAClC,OAAO,EAAE,UAAU;wBACnB,KAAK,EAAE,KAAK;wBACZ,IAAI,EAAE,IAAI;wBACV,GAAG;qBACJ;oBACD;wBACE,IAAI,EAAE,WAAW;wBACjB,GAAG,EAAE,MAAM,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC;wBAClC,OAAO,EAAE,UAAU;wBACnB,KAAK,EAAE,OAAO;wBACd,IAAI,EAAE,OAAO;wBACb,GAAG;qBACJ;oBACD,MAAM,CAAC,WAAW,EAAE,GAAG,EAAE,GAAG,CAAC;iBAC9B;gBACD,IAAI,EAAE,UAAU;gBAChB,GAAG;aACJ;YACD,GAAG;SACJ;QACD;YACE,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE;gBACL,IAAI,EAAE,WAAW;gBACjB,MAAM,EAAE;oBACN;wBACE,IAAI,EAAE,QAAQ;wBACd,KAAK,EAAE;4BACL,IAAI,EAAE,SAAS;4BACf,EAAE,EAAE,iBAAiB;4BACrB,IAAI,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,CAAC,CAAC;4BACtC,IAAI,EAAE,MAAM;4BACZ,GAAG;yBACJ;qBACF;oBACD;wBACE,IAAI,EAAE,QAAQ;wBACd,KAAK,EAAE;4BACL,IAAI,EAAE,SAAS;4BACf,EAAE,EAAE,iBAAiB;4BACrB,IAAI,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,CAAC,CAAC;4BACtC,IAAI,EAAE,MAAM;4BACZ,GAAG;yBACJ;qBACF;iBACF;gBACD,IAAI,EAAE,IAAI;gBACV,GAAG;aACJ;YACD,GAAG;SACJ;KACF,CAAC;IACF,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC;QACrB,IAAI;QACJ,MAAM,EAAE;YACN,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE;YAC/C,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE;YAClD,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE;YAC/C,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE;YAChD,EAAE,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,EAAE;SACrD;QACD,UAAU,EAAE,IAAI;QAChB,KAAK,EAAE,IAAI;QACX,MAAM,EAAE;YACN,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE;YAC1D,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE;YAC7D,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE;YAC1D,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE;YAC3D,EAAE,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE;YAC/D,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,KAAK,EAAE;SAC3D;QACD,IAAI;QACJ,GAAG;KACJ,CAAC,CAAC;IACH,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC;AACvC,CAAC"}
@@ -19,6 +19,15 @@ export declare function lowerZlibStreamBytesWritten(lowerer: Lowerer, access: ts
19
19
  * the write-callback rule; numeric operands cross as dyn values for the
20
20
  * runtime's range checks. */
21
21
  export declare function lowerZlibStreamMethodCall(lowerer: Lowerer, call: ts.CallExpression, access: ts.PropertyAccessExpression): IrExpr;
22
+ /** True for a zlib callback one-shot util.promisify converts (deflate,
23
+ * inflate, deflateRaw, inflateRaw, gzip, gunzip and unzip). */
24
+ export declare function isPromisifiedZlibMember(member: string): boolean;
25
+ /** A call through `promisify(zlib.gzip)` and the other callback one-shots:
26
+ * `gzipAsync(data, options?)` runs the callback form's work and returns a
27
+ * promise that settles where the callback would run, with the Buffer or the
28
+ * callback form's Error. An options or input error rejects the promise, as
29
+ * the throw inside Node's promisify wrapper does. */
30
+ export declare function lowerPromisifiedZlibCall(lowerer: Lowerer, expr: ts.CallExpression, member: string, loc: SrcLoc): IrExpr;
22
31
  export declare function lowerZlibModuleCall(lowerer: Lowerer, expr: ts.CallExpression, bi: {
23
32
  module: string;
24
33
  member: string;
@@ -5,7 +5,7 @@ import * as ts from "../../ts7/adapter.js";
5
5
  import {} from "../lowerer.js";
6
6
  import { locOf } from "../../program.js";
7
7
  import { isNodeTypesPath } from "../../dts-paths.js";
8
- import { BYTES_U8, DYN, F64, funcOf, VOID, ZLIB_STREAM_MODES, } from "../../../ir/ir.js";
8
+ import { BYTES_U8, DYN, F64, funcOf, STRING, VOID, ZLIB_STREAM_MODES, } from "../../../ir/ir.js";
9
9
  const ZLIB_SYNC_FNS = {
10
10
  deflateSync: "zlib.deflateSync",
11
11
  inflateSync: "zlib.inflateSync",
@@ -25,6 +25,40 @@ const ZLIB_CALLBACK_FNS = {
25
25
  unzip: "zlib.unzipCb",
26
26
  };
27
27
  const ZLIB_STREAM_T = { kind: "object", className: "%Transform" };
28
+ /** A zlib data argument, lowered once: Buffer/Uint8Array bytes, a string
29
+ * (UTF-8 encoded here), or a checked-dynamic value (the JS lane's untyped
30
+ * data, which the runtime converts after validating the options — Node's
31
+ * order). Other static types keep the byte-input fence. */
32
+ function zlibInput(lowerer, node, loc) {
33
+ const value = lowerer.lowerExpr(node);
34
+ if (value.type.kind === "dyn")
35
+ return { value, dyn: true };
36
+ if (value.type.kind === "bytes" && value.type.elem === "u8")
37
+ return { value, dyn: false };
38
+ if (value.type.kind === "string") {
39
+ return {
40
+ value: {
41
+ kind: "libCall",
42
+ fn: "buffer.fromStr",
43
+ args: [value, { kind: "strLit", value: "utf8", type: STRING, loc }],
44
+ type: BYTES_U8,
45
+ loc,
46
+ },
47
+ dyn: false,
48
+ };
49
+ }
50
+ lowerer.noLowering(`zlib byte input of '${lowerer.fmt(value.type)}' values`, node, "string and Buffer/Uint8Array values are supported");
51
+ }
52
+ /** A zlib options argument as the dyn value the runtime ladder reads. */
53
+ function zlibOptionsValue(lowerer, node, what, loc) {
54
+ const raw = lowerer.lowerExpr(node);
55
+ if (raw.type.kind === "dyn")
56
+ return raw;
57
+ if (raw.kind === "unitLit" || lowerer.dynConvertible(raw.type)) {
58
+ return { kind: "dynFrom", value: raw, type: DYN, loc };
59
+ }
60
+ lowerer.noLowering(`${what} with a '${lowerer.fmt(raw.type)}' options value`, node, "zlib options are a plain object of numbers, booleans and Buffers");
61
+ }
28
62
  /** `zlib.createGzip(options?)` and `new zlib.Gzip(options?)`: the runtime
29
63
  * Transform stream (scr_zlib_stream.c). The options value crosses as a dyn
30
64
  * value and is validated at runtime with Node's ladder, so literal and
@@ -35,18 +69,7 @@ export function lowerZlibStreamNew(lowerer, args, mode, what, site, loc) {
35
69
  if (args.length > 1) {
36
70
  lowerer.noLowering(`${what} with ${args.length} arguments`, args[1], "the supported form takes one options object");
37
71
  }
38
- let options = dynUndefinedExpr(loc);
39
- if (args[0] !== undefined) {
40
- const raw = lowerer.lowerExpr(args[0]);
41
- if (raw.type.kind === "dyn")
42
- options = raw;
43
- else if (raw.kind === "unitLit" || lowerer.dynConvertible(raw.type)) {
44
- options = { kind: "dynFrom", value: raw, type: DYN, loc };
45
- }
46
- else {
47
- lowerer.noLowering(`${what} with a '${lowerer.fmt(raw.type)}' options value`, args[0], "zlib stream options are a plain object of numbers, booleans and Buffers");
48
- }
49
- }
72
+ const options = args[0] !== undefined ? zlibOptionsValue(lowerer, args[0], what, loc) : dynUndefinedExpr(loc);
50
73
  return {
51
74
  kind: "libCall",
52
75
  fn: "zlib.streamNew",
@@ -182,6 +205,55 @@ export function lowerZlibStreamMethodCall(lowerer, call, access) {
182
205
  lowerer.noLowering(`zlib stream member '${member}'`, access);
183
206
  }
184
207
  }
208
+ /** node_zlib_mode of each one-shot form (the options-taking runtime entry). */
209
+ const ZLIB_ONE_SHOT_MODES = {
210
+ deflateSync: 1,
211
+ inflateSync: 2,
212
+ gzipSync: 3,
213
+ gunzipSync: 4,
214
+ deflateRawSync: 5,
215
+ inflateRawSync: 6,
216
+ unzipSync: 7,
217
+ deflate: 1,
218
+ inflate: 2,
219
+ gzip: 3,
220
+ gunzip: 4,
221
+ deflateRaw: 5,
222
+ inflateRaw: 6,
223
+ unzip: 7,
224
+ };
225
+ /** True for a zlib callback one-shot util.promisify converts (deflate,
226
+ * inflate, deflateRaw, inflateRaw, gzip, gunzip and unzip). */
227
+ export function isPromisifiedZlibMember(member) {
228
+ return ZLIB_CALLBACK_FNS[member] !== undefined;
229
+ }
230
+ /** A call through `promisify(zlib.gzip)` and the other callback one-shots:
231
+ * `gzipAsync(data, options?)` runs the callback form's work and returns a
232
+ * promise that settles where the callback would run, with the Buffer or the
233
+ * callback form's Error. An options or input error rejects the promise, as
234
+ * the throw inside Node's promisify wrapper does. */
235
+ export function lowerPromisifiedZlibCall(lowerer, expr, member, loc) {
236
+ if (expr.arguments.some(ts.isSpreadElement)) {
237
+ lowerer.noLowering(`the promisified zlib.${member} with spread arguments`, expr);
238
+ }
239
+ if (expr.arguments.length !== 1 && expr.arguments.length !== 2) {
240
+ lowerer.noLowering(`the promisified zlib.${member} with ${expr.arguments.length} arguments`, expr, `the supported forms are ${member}Async(data) and ${member}Async(data, options)`);
241
+ }
242
+ const input = zlibInput(lowerer, expr.arguments[0], loc);
243
+ return {
244
+ kind: "libCall",
245
+ fn: input.dyn ? "zlib.promiseDyn" : "zlib.promise",
246
+ args: [
247
+ numLit(ZLIB_ONE_SHOT_MODES[member], loc),
248
+ input.value,
249
+ expr.arguments[1] !== undefined
250
+ ? zlibOptionsValue(lowerer, expr.arguments[1], `zlib.${member}`, loc)
251
+ : dynUndefinedExpr(loc),
252
+ ],
253
+ type: { kind: "promise", inner: BYTES_U8 },
254
+ loc,
255
+ };
256
+ }
185
257
  const ZLIB_STREAM_FACTORIES = {
186
258
  createDeflate: 1,
187
259
  createInflate: 2,
@@ -201,13 +273,31 @@ export function lowerZlibModuleCall(lowerer, expr, bi, loc) {
201
273
  }
202
274
  const syncFn = ZLIB_SYNC_FNS[bi.member];
203
275
  if (syncFn !== undefined) {
276
+ if (expr.arguments.length === 0 || expr.arguments.length > 2) {
277
+ lowerer.noLowering(`${bi.member} with ${expr.arguments.length} arguments`, expr);
278
+ }
279
+ const input = zlibInput(lowerer, expr.arguments[0], loc);
280
+ if (input.dyn) {
281
+ return {
282
+ kind: "libCall",
283
+ fn: "zlib.syncOptsDyn",
284
+ args: [
285
+ numLit(ZLIB_ONE_SHOT_MODES[bi.member], loc),
286
+ input.value,
287
+ expr.arguments[1] !== undefined
288
+ ? zlibOptionsValue(lowerer, expr.arguments[1], `zlib.${bi.member}`, loc)
289
+ : dynUndefinedExpr(loc),
290
+ ],
291
+ type: BYTES_U8,
292
+ loc,
293
+ };
294
+ }
204
295
  if (expr.arguments.length === 2 &&
205
296
  (bi.member === "deflateSync" || bi.member === "deflateRawSync" || bi.member === "gzipSync")) {
206
297
  const options = expr.arguments[1];
207
- // A literal level is enough for build-time compression in the native
208
- // emitters. Other options retain the explicit refusal: dropping
209
- // strategy/windowBits/dictionaries without a diagnostic changes the
210
- // wire bytes.
298
+ // A lone literal level keeps the direct compression entry (build-time
299
+ // compression in the native emitters uses it); other options take the
300
+ // runtime option ladder below.
211
301
  if (ts.isObjectLiteralExpression(options) && options.properties.length === 1) {
212
302
  const prop = options.properties[0];
213
303
  if (ts.isPropertyAssignment(prop) &&
@@ -226,7 +316,7 @@ export function lowerZlibModuleCall(lowerer, expr, bi, loc) {
226
316
  kind: "libCall",
227
317
  fn: "zlib.deflateLevelSync",
228
318
  args: [
229
- lowerBuiltinByteInput(lowerer, expr.arguments[0], loc, "zlib"),
319
+ input.value,
230
320
  numLit(bi.member === "deflateSync" ? 0 : bi.member === "deflateRawSync" ? 1 : 2, loc),
231
321
  numLit(level, loc),
232
322
  ],
@@ -236,33 +326,58 @@ export function lowerZlibModuleCall(lowerer, expr, bi, loc) {
236
326
  }
237
327
  }
238
328
  }
239
- lowerer.noLowering(`${bi.member} with these options`, options, "the static compression options form is { level: <integer literal from -1 through 9> }");
240
329
  }
241
- if (expr.arguments.length !== 1) {
242
- const site = expr.arguments[1] ?? expr;
243
- lowerer.noLowering(`${bi.member} with explicit options`, site, `${bi.member}(data) with Node's default options is supported`);
330
+ if (expr.arguments.length === 2) {
331
+ return {
332
+ kind: "libCall",
333
+ fn: "zlib.syncOpts",
334
+ args: [
335
+ numLit(ZLIB_ONE_SHOT_MODES[bi.member], loc),
336
+ input.value,
337
+ zlibOptionsValue(lowerer, expr.arguments[1], `zlib.${bi.member}`, loc),
338
+ ],
339
+ type: BYTES_U8,
340
+ loc,
341
+ };
244
342
  }
245
343
  return {
246
344
  kind: "libCall",
247
345
  fn: syncFn,
248
- args: [lowerBuiltinByteInput(lowerer, expr.arguments[0], loc, "zlib")],
346
+ args: [input.value],
249
347
  type: BYTES_U8,
250
348
  loc,
251
349
  };
252
350
  }
253
351
  const callbackFn = ZLIB_CALLBACK_FNS[bi.member];
254
352
  if (callbackFn !== undefined) {
255
- if (expr.arguments.length !== 2) {
256
- const site = expr.arguments.length >= 3 ? expr.arguments[1] : expr;
257
- lowerer.noLowering(`${bi.member} with ${expr.arguments.length} arguments`, site, `${bi.member}(data, callback) with Node's default options is supported; explicit options are not yet lowered`);
353
+ if (expr.arguments.length !== 2 && expr.arguments.length !== 3) {
354
+ lowerer.noLowering(`${bi.member} with ${expr.arguments.length} arguments`, expr, `${bi.member}(data, callback) and ${bi.member}(data, options, callback) are supported`);
355
+ }
356
+ const input = zlibInput(lowerer, expr.arguments[0], loc);
357
+ const dynData = input.dyn;
358
+ if (expr.arguments.length === 3 || dynData) {
359
+ // (data, options, callback): Node validates the options before the
360
+ // callback and the input, so the runtime ladder runs first.
361
+ const withOptions = expr.arguments.length === 3;
362
+ return {
363
+ kind: "libCall",
364
+ fn: dynData ? "zlib.cbOptsDyn" : "zlib.cbOpts",
365
+ args: [
366
+ numLit(ZLIB_ONE_SHOT_MODES[bi.member], loc),
367
+ input.value,
368
+ withOptions
369
+ ? zlibOptionsValue(lowerer, expr.arguments[1], `zlib.${bi.member}`, loc)
370
+ : dynUndefinedExpr(loc),
371
+ errorFirstBytesCallback(lowerer, expr.arguments[withOptions ? 2 : 1], "zlib"),
372
+ ],
373
+ type: VOID,
374
+ loc,
375
+ };
258
376
  }
259
377
  return {
260
378
  kind: "libCall",
261
379
  fn: callbackFn,
262
- args: [
263
- lowerBuiltinByteInput(lowerer, expr.arguments[0], loc, "zlib"),
264
- errorFirstBytesCallback(lowerer, expr.arguments[1], "zlib"),
265
- ],
380
+ args: [input.value, errorFirstBytesCallback(lowerer, expr.arguments[1], "zlib")],
266
381
  type: VOID,
267
382
  loc,
268
383
  };