@scriptc/compiler 0.3.3 → 0.3.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 (352) hide show
  1. package/ambient/scriptc-node-fallback.d.ts +844 -36
  2. package/dist/backend/cycle-mutability.d.ts +5 -0
  3. package/dist/backend/cycle-mutability.js +62 -3
  4. package/dist/backend/cycle-mutability.js.map +1 -1
  5. package/dist/backend/executable-features.js +1 -0
  6. package/dist/backend/executable-features.js.map +1 -1
  7. package/dist/backend/library-pack.js +1 -0
  8. package/dist/backend/library-pack.js.map +1 -1
  9. package/dist/backend/llvm/array-search.js +1 -1
  10. package/dist/backend/llvm/array-search.js.map +1 -1
  11. package/dist/backend/llvm/call-lifetimes.d.ts +11 -1
  12. package/dist/backend/llvm/call-lifetimes.js +30 -3
  13. package/dist/backend/llvm/call-lifetimes.js.map +1 -1
  14. package/dist/backend/llvm/call-lifetimes.test.js +31 -1
  15. package/dist/backend/llvm/call-lifetimes.test.js.map +1 -1
  16. package/dist/backend/llvm/common.d.ts +5 -0
  17. package/dist/backend/llvm/common.js +7 -0
  18. package/dist/backend/llvm/common.js.map +1 -1
  19. package/dist/backend/llvm/constant-callbacks.d.ts +2 -21
  20. package/dist/backend/llvm/constant-callbacks.js +36 -219
  21. package/dist/backend/llvm/constant-callbacks.js.map +1 -1
  22. package/dist/backend/llvm/constant-callbacks.test.js +22 -0
  23. package/dist/backend/llvm/constant-callbacks.test.js.map +1 -1
  24. package/dist/backend/llvm/dense-array-access.d.ts +9 -0
  25. package/dist/backend/llvm/dense-array-access.js +29 -3
  26. package/dist/backend/llvm/dense-array-access.js.map +1 -1
  27. package/dist/backend/llvm/dyn.d.ts +46 -1
  28. package/dist/backend/llvm/dyn.js +218 -33
  29. package/dist/backend/llvm/dyn.js.map +1 -1
  30. package/dist/backend/llvm/emitter.d.ts +87 -1
  31. package/dist/backend/llvm/emitter.js +568 -61
  32. package/dist/backend/llvm/emitter.js.map +1 -1
  33. package/dist/backend/llvm/expr-async.js +17 -7
  34. package/dist/backend/llvm/expr-async.js.map +1 -1
  35. package/dist/backend/llvm/expr-bytes.d.ts +9 -0
  36. package/dist/backend/llvm/expr-bytes.js +159 -64
  37. package/dist/backend/llvm/expr-bytes.js.map +1 -1
  38. package/dist/backend/llvm/expr-callbacks.d.ts +11 -0
  39. package/dist/backend/llvm/expr-callbacks.js +53 -0
  40. package/dist/backend/llvm/expr-callbacks.js.map +1 -1
  41. package/dist/backend/llvm/expr-calls.d.ts +3 -1
  42. package/dist/backend/llvm/expr-calls.js +137 -3
  43. package/dist/backend/llvm/expr-calls.js.map +1 -1
  44. package/dist/backend/llvm/expr-containers.js +63 -29
  45. package/dist/backend/llvm/expr-containers.js.map +1 -1
  46. package/dist/backend/llvm/expr-primitives.js +9 -1
  47. package/dist/backend/llvm/expr-primitives.js.map +1 -1
  48. package/dist/backend/llvm/expr-stream-bridges.js +4 -0
  49. package/dist/backend/llvm/expr-stream-bridges.js.map +1 -1
  50. package/dist/backend/llvm/integer-clones.d.ts +103 -0
  51. package/dist/backend/llvm/integer-clones.js +1336 -0
  52. package/dist/backend/llvm/integer-clones.js.map +1 -0
  53. package/dist/backend/llvm/integer-clones.test.d.ts +1 -0
  54. package/dist/backend/llvm/integer-clones.test.js +219 -0
  55. package/dist/backend/llvm/integer-clones.test.js.map +1 -0
  56. package/dist/backend/llvm/intern-tables.test.d.ts +1 -0
  57. package/dist/backend/llvm/intern-tables.test.js +77 -0
  58. package/dist/backend/llvm/intern-tables.test.js.map +1 -0
  59. package/dist/backend/llvm/lib-datagram.js +24 -0
  60. package/dist/backend/llvm/lib-datagram.js.map +1 -1
  61. package/dist/backend/llvm/lib-dispatch.js +96 -1
  62. package/dist/backend/llvm/lib-dispatch.js.map +1 -1
  63. package/dist/backend/llvm/lib-filesystem.js +51 -0
  64. package/dist/backend/llvm/lib-filesystem.js.map +1 -1
  65. package/dist/backend/llvm/lib-network.js +16 -0
  66. package/dist/backend/llvm/lib-network.js.map +1 -1
  67. package/dist/backend/llvm/lib-process.js +24 -0
  68. package/dist/backend/llvm/lib-process.js.map +1 -1
  69. package/dist/backend/llvm/lib-shared.d.ts +5 -0
  70. package/dist/backend/llvm/lib-shared.js +114 -3
  71. package/dist/backend/llvm/lib-shared.js.map +1 -1
  72. package/dist/backend/llvm/lib-stream.js +87 -0
  73. package/dist/backend/llvm/lib-stream.js.map +1 -1
  74. package/dist/backend/llvm/lib-test.js +9 -0
  75. package/dist/backend/llvm/lib-test.js.map +1 -1
  76. package/dist/backend/llvm/lib-tls.js +6 -0
  77. package/dist/backend/llvm/lib-tls.js.map +1 -1
  78. package/dist/backend/llvm/local-array-reads.js +1 -1
  79. package/dist/backend/llvm/local-array-reads.js.map +1 -1
  80. package/dist/backend/llvm/map-entry-fusion.d.ts +28 -0
  81. package/dist/backend/llvm/map-entry-fusion.js +233 -0
  82. package/dist/backend/llvm/map-entry-fusion.js.map +1 -0
  83. package/dist/backend/llvm/map-entry-fusion.test.d.ts +1 -0
  84. package/dist/backend/llvm/map-entry-fusion.test.js +183 -0
  85. package/dist/backend/llvm/map-entry-fusion.test.js.map +1 -0
  86. package/dist/backend/llvm/map-number-lookup.d.ts +6 -0
  87. package/dist/backend/llvm/map-number-lookup.js +23 -1
  88. package/dist/backend/llvm/map-number-lookup.js.map +1 -1
  89. package/dist/backend/llvm/map-number-lookup.test.js +60 -5
  90. package/dist/backend/llvm/map-number-lookup.test.js.map +1 -1
  91. package/dist/backend/llvm/map-read-lifetimes.d.ts +11 -0
  92. package/dist/backend/llvm/map-read-lifetimes.js +92 -1
  93. package/dist/backend/llvm/map-read-lifetimes.js.map +1 -1
  94. package/dist/backend/llvm/map-read-lifetimes.test.js +131 -3
  95. package/dist/backend/llvm/map-read-lifetimes.test.js.map +1 -1
  96. package/dist/backend/llvm/publish.d.ts +21 -0
  97. package/dist/backend/llvm/publish.js +101 -11
  98. package/dist/backend/llvm/publish.js.map +1 -1
  99. package/dist/backend/llvm/publish.test.d.ts +1 -0
  100. package/dist/backend/llvm/publish.test.js +94 -0
  101. package/dist/backend/llvm/publish.test.js.map +1 -0
  102. package/dist/backend/llvm/record-results.js +76 -2
  103. package/dist/backend/llvm/record-results.js.map +1 -1
  104. package/dist/backend/llvm/record-sources.d.ts +7 -0
  105. package/dist/backend/llvm/record-sources.js +14 -0
  106. package/dist/backend/llvm/record-sources.js.map +1 -0
  107. package/dist/backend/llvm/reference-writes.js +5 -2
  108. package/dist/backend/llvm/reference-writes.js.map +1 -1
  109. package/dist/backend/llvm/regions.d.ts +4 -1
  110. package/dist/backend/llvm/regions.js +12 -3
  111. package/dist/backend/llvm/regions.js.map +1 -1
  112. package/dist/backend/llvm/shapes.d.ts +9 -3
  113. package/dist/backend/llvm/shapes.js +18 -14
  114. package/dist/backend/llvm/shapes.js.map +1 -1
  115. package/dist/backend/llvm/shapes.test.js +5 -3
  116. package/dist/backend/llvm/shapes.test.js.map +1 -1
  117. package/dist/backend/llvm/string-lifetimes.test.js +75 -1
  118. package/dist/backend/llvm/string-lifetimes.test.js.map +1 -1
  119. package/dist/backend/llvm/string-reads.js +2 -2
  120. package/dist/backend/llvm/string-reads.js.map +1 -1
  121. package/dist/backend/llvm/string-slices.js +2 -2
  122. package/dist/backend/llvm/string-slices.js.map +1 -1
  123. package/dist/backend/llvm/walkers.d.ts +17 -0
  124. package/dist/backend/llvm/walkers.js +123 -0
  125. package/dist/backend/llvm/walkers.js.map +1 -1
  126. package/dist/backend/may-throw.js +4 -0
  127. package/dist/backend/may-throw.js.map +1 -1
  128. package/dist/backend/native/contracts.d.ts +5 -1
  129. package/dist/backend/native/executable.js +16 -6
  130. package/dist/backend/native/executable.js.map +1 -1
  131. package/dist/backend/native/runtime-inputs.d.ts +1 -1
  132. package/dist/backend/native/runtime-inputs.js +1 -0
  133. package/dist/backend/native/runtime-inputs.js.map +1 -1
  134. package/dist/backend/native-codegen-core.d.ts +4 -4
  135. package/dist/backend/native-codegen-core.js +4 -6
  136. package/dist/backend/native-codegen-core.js.map +1 -1
  137. package/dist/backend/native-codegen.test.js +7 -8
  138. package/dist/backend/native-codegen.test.js.map +1 -1
  139. package/dist/backend/native-link-info-core.d.ts +3 -0
  140. package/dist/backend/native-link-info-core.js.map +1 -1
  141. package/dist/backend/publication.js +3 -1
  142. package/dist/backend/publication.js.map +1 -1
  143. package/dist/backend/runtime-abi.d.ts +2 -2
  144. package/dist/backend/runtime-abi.js +2 -2
  145. package/dist/backend/runtime-pack-targets.test.js +2 -1
  146. package/dist/backend/runtime-pack-targets.test.js.map +1 -1
  147. package/dist/backend/runtime-pack.test.js +2 -1
  148. package/dist/backend/runtime-pack.test.js.map +1 -1
  149. package/dist/backend/target-diagnostics.js +7 -0
  150. package/dist/backend/target-diagnostics.js.map +1 -1
  151. package/dist/backend/warm-cache.js +1 -0
  152. package/dist/backend/warm-cache.js.map +1 -1
  153. package/dist/executable/executable-cache.d.ts +1 -0
  154. package/dist/executable/executable-cache.js +1 -0
  155. package/dist/executable/executable-cache.js.map +1 -1
  156. package/dist/executable/executable-cache.test.js +1 -0
  157. package/dist/executable/executable-cache.test.js.map +1 -1
  158. package/dist/frontend/experimental-import.d.ts +5 -1
  159. package/dist/frontend/experimental-import.js +28 -3
  160. package/dist/frontend/experimental-import.js.map +1 -1
  161. package/dist/frontend/lowering/assert-instances.d.ts +38 -0
  162. package/dist/frontend/lowering/assert-instances.js +269 -0
  163. package/dist/frontend/lowering/assert-instances.js.map +1 -0
  164. package/dist/frontend/lowering/builtin-calls.js +3 -0
  165. package/dist/frontend/lowering/builtin-calls.js.map +1 -1
  166. package/dist/frontend/lowering/builtins/callable-aliases.js +54 -8
  167. package/dist/frontend/lowering/builtins/callable-aliases.js.map +1 -1
  168. package/dist/frontend/lowering/builtins/child-process-async.d.ts +8 -6
  169. package/dist/frontend/lowering/builtins/child-process-async.js +45 -29
  170. package/dist/frontend/lowering/builtins/child-process-async.js.map +1 -1
  171. package/dist/frontend/lowering/builtins/compression.d.ts +18 -0
  172. package/dist/frontend/lowering/builtins/compression.js +175 -2
  173. package/dist/frontend/lowering/builtins/compression.js.map +1 -1
  174. package/dist/frontend/lowering/builtins/constants.js +7 -2
  175. package/dist/frontend/lowering/builtins/constants.js.map +1 -1
  176. package/dist/frontend/lowering/builtins/crypto.d.ts +6 -0
  177. package/dist/frontend/lowering/builtins/crypto.js +111 -1
  178. package/dist/frontend/lowering/builtins/crypto.js.map +1 -1
  179. package/dist/frontend/lowering/builtins/errors.js +23 -0
  180. package/dist/frontend/lowering/builtins/errors.js.map +1 -1
  181. package/dist/frontend/lowering/builtins/filesystem-calls.d.ts +2 -0
  182. package/dist/frontend/lowering/builtins/filesystem-calls.js +5 -0
  183. package/dist/frontend/lowering/builtins/filesystem-calls.js.map +1 -1
  184. package/dist/frontend/lowering/builtins/filesystem.js +60 -0
  185. package/dist/frontend/lowering/builtins/filesystem.js.map +1 -1
  186. package/dist/frontend/lowering/builtins/fs-streams.d.ts +26 -0
  187. package/dist/frontend/lowering/builtins/fs-streams.js +131 -0
  188. package/dist/frontend/lowering/builtins/fs-streams.js.map +1 -0
  189. package/dist/frontend/lowering/builtins/module-calls.js +5 -1
  190. package/dist/frontend/lowering/builtins/module-calls.js.map +1 -1
  191. package/dist/frontend/lowering/builtins/timers.d.ts +3 -0
  192. package/dist/frontend/lowering/builtins/timers.js +109 -23
  193. package/dist/frontend/lowering/builtins/timers.js.map +1 -1
  194. package/dist/frontend/lowering/call-signatures.js +6 -0
  195. package/dist/frontend/lowering/call-signatures.js.map +1 -1
  196. package/dist/frontend/lowering/class-dynamic-dispatch.js +216 -20
  197. package/dist/frontend/lowering/class-dynamic-dispatch.js.map +1 -1
  198. package/dist/frontend/lowering/containers/bytes.js +33 -12
  199. package/dist/frontend/lowering/containers/bytes.js.map +1 -1
  200. package/dist/frontend/lowering/devirtualize.js +20 -7
  201. package/dist/frontend/lowering/devirtualize.js.map +1 -1
  202. package/dist/frontend/lowering/intern-tables.d.ts +13 -0
  203. package/dist/frontend/lowering/intern-tables.js +536 -0
  204. package/dist/frontend/lowering/intern-tables.js.map +1 -0
  205. package/dist/frontend/lowering/lower-assert.js +700 -61
  206. package/dist/frontend/lowering/lower-assert.js.map +1 -1
  207. package/dist/frontend/lowering/lower-async-iteration.js +11 -2
  208. package/dist/frontend/lowering/lower-async-iteration.js.map +1 -1
  209. package/dist/frontend/lowering/lower-calls.js +75 -6
  210. package/dist/frontend/lowering/lower-calls.js.map +1 -1
  211. package/dist/frontend/lowering/lower-classes.d.ts +3 -0
  212. package/dist/frontend/lowering/lower-classes.js +43 -0
  213. package/dist/frontend/lowering/lower-classes.js.map +1 -1
  214. package/dist/frontend/lowering/lower-dgram.js +132 -67
  215. package/dist/frontend/lowering/lower-dgram.js.map +1 -1
  216. package/dist/frontend/lowering/lower-event-emitter.d.ts +9 -1
  217. package/dist/frontend/lowering/lower-event-emitter.js +78 -0
  218. package/dist/frontend/lowering/lower-event-emitter.js.map +1 -1
  219. package/dist/frontend/lowering/lower-exprs.d.ts +4 -0
  220. package/dist/frontend/lowering/lower-exprs.js +144 -58
  221. package/dist/frontend/lowering/lower-exprs.js.map +1 -1
  222. package/dist/frontend/lowering/lower-inspect.d.ts +6 -0
  223. package/dist/frontend/lowering/lower-inspect.js +138 -39
  224. package/dist/frontend/lowering/lower-inspect.js.map +1 -1
  225. package/dist/frontend/lowering/lower-mock.d.ts +11 -0
  226. package/dist/frontend/lowering/lower-mock.js +504 -0
  227. package/dist/frontend/lowering/lower-mock.js.map +1 -0
  228. package/dist/frontend/lowering/lower-modules.js +7 -0
  229. package/dist/frontend/lowering/lower-modules.js.map +1 -1
  230. package/dist/frontend/lowering/lower-server.d.ts +4 -0
  231. package/dist/frontend/lowering/lower-server.js +448 -30
  232. package/dist/frontend/lowering/lower-server.js.map +1 -1
  233. package/dist/frontend/lowering/lower-stmts.js +35 -8
  234. package/dist/frontend/lowering/lower-stmts.js.map +1 -1
  235. package/dist/frontend/lowering/lower-stream.d.ts +10 -6
  236. package/dist/frontend/lowering/lower-stream.js +794 -27
  237. package/dist/frontend/lowering/lower-stream.js.map +1 -1
  238. package/dist/frontend/lowering/lower-test.js +86 -8
  239. package/dist/frontend/lowering/lower-test.js.map +1 -1
  240. package/dist/frontend/lowering/lowerer.d.ts +25 -1
  241. package/dist/frontend/lowering/lowerer.js +74 -9
  242. package/dist/frontend/lowering/lowerer.js.map +1 -1
  243. package/dist/frontend/lowering/pairs-snapshot.d.ts +6 -0
  244. package/dist/frontend/lowering/pairs-snapshot.js +49 -0
  245. package/dist/frontend/lowering/pairs-snapshot.js.map +1 -1
  246. package/dist/frontend/lowering/record-sources.d.ts +15 -0
  247. package/dist/frontend/lowering/record-sources.js +46 -0
  248. package/dist/frontend/lowering/record-sources.js.map +1 -0
  249. package/dist/frontend/lowering/surfaces.d.ts +4 -0
  250. package/dist/frontend/lowering/surfaces.js +94 -16
  251. package/dist/frontend/lowering/surfaces.js.map +1 -1
  252. package/dist/frontend/lowering/zlib-constants.d.ts +1 -0
  253. package/dist/frontend/lowering/zlib-constants.js +181 -0
  254. package/dist/frontend/lowering/zlib-constants.js.map +1 -0
  255. package/dist/frontend/mock-shapes.d.ts +10 -0
  256. package/dist/frontend/mock-shapes.js +76 -0
  257. package/dist/frontend/mock-shapes.js.map +1 -0
  258. package/dist/frontend/pipeline.js +5 -3
  259. package/dist/frontend/pipeline.js.map +1 -1
  260. package/dist/frontend/program.js +6 -1
  261. package/dist/frontend/program.js.map +1 -1
  262. package/dist/frontend/resolve.d.ts +4 -0
  263. package/dist/frontend/resolve.js +14 -0
  264. package/dist/frontend/resolve.js.map +1 -1
  265. package/dist/frontend/tsc-codes.js +1 -0
  266. package/dist/frontend/tsc-codes.js.map +1 -1
  267. package/dist/frontend/type-mapper.d.ts +8 -0
  268. package/dist/frontend/type-mapper.js +155 -9
  269. package/dist/frontend/type-mapper.js.map +1 -1
  270. package/dist/index.js +2 -1
  271. package/dist/index.js.map +1 -1
  272. package/dist/ir/analysis.d.ts +10 -0
  273. package/dist/ir/analysis.js +35 -0
  274. package/dist/ir/analysis.js.map +1 -1
  275. package/dist/ir/analysis.test.js +69 -1
  276. package/dist/ir/analysis.test.js.map +1 -1
  277. package/dist/ir/builtin-effects.js +72 -0
  278. package/dist/ir/builtin-effects.js.map +1 -1
  279. package/dist/ir/builtin-signatures.d.ts +1 -1
  280. package/dist/ir/builtin-signatures.js +238 -15
  281. package/dist/ir/builtin-signatures.js.map +1 -1
  282. package/dist/ir/capture-values.d.ts +107 -0
  283. package/dist/ir/capture-values.js +850 -0
  284. package/dist/ir/capture-values.js.map +1 -0
  285. package/dist/ir/capture-values.test.d.ts +1 -0
  286. package/dist/ir/capture-values.test.js +268 -0
  287. package/dist/ir/capture-values.test.js.map +1 -0
  288. package/dist/ir/field-values.d.ts +16 -0
  289. package/dist/ir/field-values.js +128 -0
  290. package/dist/ir/field-values.js.map +1 -0
  291. package/dist/ir/field-values.test.d.ts +1 -0
  292. package/dist/ir/field-values.test.js +160 -0
  293. package/dist/ir/field-values.test.js.map +1 -0
  294. package/dist/ir/final-fields.d.ts +4 -1
  295. package/dist/ir/final-fields.js +11 -3
  296. package/dist/ir/final-fields.js.map +1 -1
  297. package/dist/ir/function-references.test.js +1 -1
  298. package/dist/ir/function-references.test.js.map +1 -1
  299. package/dist/ir/init-only-globals.d.ts +16 -0
  300. package/dist/ir/init-only-globals.js +121 -0
  301. package/dist/ir/init-only-globals.js.map +1 -0
  302. package/dist/ir/init-only-globals.test.d.ts +1 -0
  303. package/dist/ir/init-only-globals.test.js +115 -0
  304. package/dist/ir/init-only-globals.test.js.map +1 -0
  305. package/dist/ir/initializer-bindings.d.ts +18 -1
  306. package/dist/ir/initializer-bindings.js +91 -1
  307. package/dist/ir/initializer-bindings.js.map +1 -1
  308. package/dist/ir/initializer-bindings.test.js +57 -2
  309. package/dist/ir/initializer-bindings.test.js.map +1 -1
  310. package/dist/ir/int32-slots.d.ts +22 -0
  311. package/dist/ir/int32-slots.js +376 -13
  312. package/dist/ir/int32-slots.js.map +1 -1
  313. package/dist/ir/int32-slots.test.js +91 -8
  314. package/dist/ir/int32-slots.test.js.map +1 -1
  315. package/dist/ir/integer-loop-facts.d.ts +19 -1
  316. package/dist/ir/integer-loop-facts.js +155 -7
  317. package/dist/ir/integer-loop-facts.js.map +1 -1
  318. package/dist/ir/integer-ranges.d.ts +8 -5
  319. package/dist/ir/integer-ranges.js +147 -55
  320. package/dist/ir/integer-ranges.js.map +1 -1
  321. package/dist/ir/integer-ranges.test.js +225 -7
  322. package/dist/ir/integer-ranges.test.js.map +1 -1
  323. package/dist/ir/ir.d.ts +29 -2
  324. package/dist/ir/ir.js +17 -0
  325. package/dist/ir/ir.js.map +1 -1
  326. package/dist/ir/property-bags.d.ts +14 -0
  327. package/dist/ir/property-bags.js +121 -0
  328. package/dist/ir/property-bags.js.map +1 -0
  329. package/dist/ir/receiver-readers.d.ts +21 -0
  330. package/dist/ir/receiver-readers.js +217 -0
  331. package/dist/ir/receiver-readers.js.map +1 -0
  332. package/dist/ir/runtime-features.d.ts +1 -0
  333. package/dist/ir/runtime-features.js +34 -2
  334. package/dist/ir/runtime-features.js.map +1 -1
  335. package/dist/ir/validate.js +221 -5
  336. package/dist/ir/validate.js.map +1 -1
  337. package/dist/ir/validate.test.js +21 -0
  338. package/dist/ir/validate.test.js.map +1 -1
  339. package/dist/library/int-infer.js +3 -0
  340. package/dist/library/int-infer.js.map +1 -1
  341. package/dist/library/ir-policy.js +1 -0
  342. package/dist/library/ir-policy.js.map +1 -1
  343. package/dist/native/cli.js +1 -0
  344. package/dist/native/cli.js.map +1 -1
  345. package/dist/native/compiler.js +1 -3
  346. package/dist/native/compiler.js.map +1 -1
  347. package/dist/native/prepare.js +1 -0
  348. package/dist/native/prepare.js.map +1 -1
  349. package/dist/native/sanitizer.test.js +1 -0
  350. package/dist/native/sanitizer.test.js.map +1 -1
  351. package/package.json +20 -20
  352. package/surface-manifest.json +896 -49
@@ -10,4 +10,10 @@ export declare function pairsSnapshotHelper(lowerer: Lowerer, shapeId: string, l
10
10
  callArgs?: IrExpr[];
11
11
  indexValueOk?: (indexValue: IrType) => boolean;
12
12
  lookupValue?: "http.reqHeaderValues" | "http.reqTrailerValues";
13
+ /** A key whose value is the string[] arm, read through `libCall`
14
+ * (set-cookie in `{ ...req.headers }`), when the slot union has one. */
15
+ listKey?: {
16
+ name: string;
17
+ libCall: IrLibFn;
18
+ };
13
19
  }): string | null;
@@ -21,6 +21,9 @@ export function pairsSnapshotHelper(lowerer, shapeId, loc, options) {
21
21
  }
22
22
  else if (stringTag < 0)
23
23
  return null;
24
+ const listTag = options.listKey && !options.lookupValue
25
+ ? lowerer.armTag(indexValue.unionId, arrayOf(STRING))
26
+ : -1;
24
27
  const key = `${options.keyPrefix}.snapshot:${shapeId}`;
25
28
  const existing = lowerer.valueHelpers.get(key);
26
29
  if (existing)
@@ -111,6 +114,52 @@ export function pairsSnapshotHelper(lowerer, shapeId, loc, options) {
111
114
  loc,
112
115
  },
113
116
  body: [
117
+ ...(listTag >= 0
118
+ ? [
119
+ {
120
+ kind: "if",
121
+ cond: {
122
+ kind: "strEq",
123
+ negated: false,
124
+ left: pairAt(0),
125
+ right: {
126
+ kind: "strLit",
127
+ value: options.listKey.name,
128
+ type: STRING,
129
+ loc,
130
+ },
131
+ type: BOOL,
132
+ loc,
133
+ },
134
+ then: [
135
+ {
136
+ kind: "recordKeySet",
137
+ obj: varRef("out.0", recordType, loc),
138
+ shapeId,
139
+ key: pairAt(0),
140
+ value: {
141
+ kind: "unionWrap",
142
+ unionId: indexValue.unionId,
143
+ tag: listTag,
144
+ value: {
145
+ kind: "libCall",
146
+ fn: options.listKey.libCall,
147
+ args: [...(options.callArgs ?? []), pairAt(0)],
148
+ type: arrayOf(STRING),
149
+ loc,
150
+ },
151
+ type: indexValue,
152
+ loc,
153
+ },
154
+ loc,
155
+ },
156
+ { kind: "continue", loc },
157
+ ],
158
+ else_: null,
159
+ loc,
160
+ },
161
+ ]
162
+ : []),
114
163
  {
115
164
  kind: "recordKeySet",
116
165
  obj: varRef("out.0", recordType, loc),
@@ -1 +1 @@
1
- {"version":3,"file":"pairs-snapshot.js","sourceRoot":"","sources":["../../../src/frontend/lowering/pairs-snapshot.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"pairs-snapshot.js","sourceRoot":"","sources":["../../../src/frontend/lowering/pairs-snapshot.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,OAAO,EACP,IAAI,EACJ,GAAG,EAKH,MAAM,GAEP,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAGnD;;6CAE6C;AAC7C,MAAM,UAAU,mBAAmB,CACjC,OAAgB,EAChB,OAAe,EACf,GAAW,EACX,OAUC;IAED,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAC1C,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU;QAAE,OAAO,IAAI,CAAC;IACvF,MAAM,UAAU,GAAG,KAAK,CAAC,UAAU,CAAC;IACpC,MAAM,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC;IAC1C,IAAI,YAAY,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC;QAAE,OAAO,IAAI,CAAC;IAC3D,IAAI,UAAU,CAAC,IAAI,KAAK,OAAO;QAAE,OAAO,IAAI,CAAC;IAC7C,MAAM,SAAS,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IACxF,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;QACxB,MAAM,UAAU,GAAG,OAAO,CAAC,gBAAgB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;QAC7D,IAAI,UAAU,CAAC,IAAI,KAAK,OAAO,IAAI,UAAU,CAAC,OAAO,KAAK,UAAU,CAAC,OAAO;YAAE,OAAO,IAAI,CAAC;IAC5F,CAAC;SAAM,IAAI,SAAS,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IACtC,MAAM,OAAO,GACX,OAAO,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,WAAW;QACrC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;QACrD,CAAC,CAAC,CAAC,CAAC,CAAC;IACT,MAAM,GAAG,GAAG,GAAG,OAAO,CAAC,SAAS,aAAa,OAAO,EAAE,CAAC;IACvD,MAAM,QAAQ,GAAG,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC/C,IAAI,QAAQ;QAAE,OAAO,QAAQ,CAAC;IAC9B,MAAM,IAAI,GAAG,IAAI,OAAO,CAAC,SAAS,aAAa,OAAO,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;IAC3E,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IACpC,MAAM,UAAU,GAAW,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC;IACvD,MAAM,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAClC,MAAM,MAAM,GAAG,CAAC,MAAc,EAAU,EAAE,CAAC,CAAC;QAC1C,IAAI,EAAE,UAAU;QAChB,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,CAAC;QACnC,KAAK,EACH,MAAM,KAAK,CAAC;YACV,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,CAAC;YACzB,CAAC,CAAC;gBACE,IAAI,EAAE,KAAK;gBACX,EAAE,EAAE,GAAG;gBACP,IAAI,EAAE,MAAM,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,CAAC;gBAC7B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;gBAC1B,IAAI,EAAE,GAAG;gBACT,GAAG;aACJ;QACP,IAAI,EAAE,MAAM;QACZ,GAAG;KACJ,CAAC,CAAC;IACH,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC;QACrB,IAAI;QACJ,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,EAAE;QAC5B,UAAU,EAAE,UAAU;QACtB,MAAM,EAAE;YACN,GAAG,CAAC,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;gBACxC,EAAE,EAAE,KAAK,CAAC,OAAO;gBACjB,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,OAAO,EAAE,KAAK;aACf,CAAC,CAAC;YACH,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE;YAC3D,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,KAAK,EAAE;YAC9D,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE;SACnD;QACD,IAAI,EAAE;YACJ;gBACE,IAAI,EAAE,SAAS;gBACf,OAAO,EAAE,MAAM;gBACf,IAAI,EAAE;oBACJ,IAAI,EAAE,SAAS;oBACf,EAAE,EAAE,OAAO,CAAC,OAAO;oBACnB,IAAI,EAAE,OAAO,CAAC,QAAQ,IAAI,EAAE;oBAC5B,IAAI,EAAE,SAAS;oBACf,GAAG;iBACJ;gBACD,GAAG;aACJ;YACD;gBACE,IAAI,EAAE,SAAS;gBACf,OAAO,EAAE,OAAO;gBAChB,IAAI,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE;gBAC9D,GAAG;aACJ;YACD;gBACE,IAAI,EAAE,KAAK;gBACX,IAAI,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE;gBACpE,IAAI,EAAE;oBACJ,IAAI,EAAE,KAAK;oBACX,EAAE,EAAE,GAAG;oBACP,IAAI,EAAE,MAAM,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,CAAC;oBAC7B,KAAK,EAAE;wBACL,IAAI,EAAE,cAAc;wBACpB,MAAM,EAAE,QAAQ;wBAChB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,CAAC;wBACxC,IAAI,EAAE,EAAE;wBACR,IAAI,EAAE,GAAG;wBACT,GAAG;qBACJ;oBACD,IAAI,EAAE,IAAI;oBACV,GAAG;iBACJ;gBACD,MAAM,EAAE;oBACN,IAAI,EAAE,QAAQ;oBACd,OAAO,EAAE,KAAK;oBACd,KAAK,EAAE;wBACL,IAAI,EAAE,KAAK;wBACX,EAAE,EAAE,GAAG;wBACP,IAAI,EAAE,MAAM,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,CAAC;wBAC7B,KAAK,EAAE,MAAM,CAAC,CAAC,EAAE,GAAG,CAAC;wBACrB,IAAI,EAAE,GAAG;wBACT,GAAG;qBACJ;oBACD,GAAG;iBACJ;gBACD,IAAI,EAAE;oBACJ,GAAG,CAAC,OAAO,IAAI,CAAC;wBACd,CAAC,CAAC;4BACE;gCACE,IAAI,EAAE,IAAa;gCACnB,IAAI,EAAE;oCACJ,IAAI,EAAE,OAAgB;oCACtB,OAAO,EAAE,KAAK;oCACd,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;oCACf,KAAK,EAAE;wCACL,IAAI,EAAE,QAAiB;wCACvB,KAAK,EAAE,OAAO,CAAC,OAAQ,CAAC,IAAI;wCAC5B,IAAI,EAAE,MAAM;wCACZ,GAAG;qCACJ;oCACD,IAAI,EAAE,IAAI;oCACV,GAAG;iCACJ;gCACD,IAAI,EAAE;oCACJ;wCACE,IAAI,EAAE,cAAuB;wCAC7B,GAAG,EAAE,MAAM,CAAC,OAAO,EAAE,UAAU,EAAE,GAAG,CAAC;wCACrC,OAAO;wCACP,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC;wCACd,KAAK,EAAE;4CACL,IAAI,EAAE,WAAoB;4CAC1B,OAAO,EAAE,UAAU,CAAC,OAAO;4CAC3B,GAAG,EAAE,OAAO;4CACZ,KAAK,EAAE;gDACL,IAAI,EAAE,SAAkB;gDACxB,EAAE,EAAE,OAAO,CAAC,OAAQ,CAAC,OAAO;gDAC5B,IAAI,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,IAAI,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;gDAC9C,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC;gDACrB,GAAG;6CACJ;4CACD,IAAI,EAAE,UAAU;4CAChB,GAAG;yCACJ;wCACD,GAAG;qCACJ;oCACD,EAAE,IAAI,EAAE,UAAmB,EAAE,GAAG,EAAE;iCACnC;gCACD,KAAK,EAAE,IAAI;gCACX,GAAG;6BACJ;yBACF;wBACH,CAAC,CAAC,EAAE,CAAC;oBACP;wBACE,IAAI,EAAE,cAAc;wBACpB,GAAG,EAAE,MAAM,CAAC,OAAO,EAAE,UAAU,EAAE,GAAG,CAAC;wBACrC,OAAO;wBACP,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC;wBACd,KAAK,EAAE,OAAO,CAAC,WAAW;4BACxB,CAAC,CAAC;gCACE,IAAI,EAAE,SAAS;gCACf,EAAE,EAAE,OAAO,CAAC,WAAW;gCACvB,IAAI,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,IAAI,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;gCAC9C,IAAI,EAAE,UAAU;gCAChB,GAAG;6BACJ;4BACH,CAAC,CAAC;gCACE,IAAI,EAAE,WAAW;gCACjB,OAAO,EAAE,UAAU,CAAC,OAAO;gCAC3B,GAAG,EAAE,SAAS;gCACd,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC;gCAChB,IAAI,EAAE,UAAU;gCAChB,GAAG;6BACJ;wBACL,GAAG;qBACJ;iBACF;gBACD,GAAG;aACJ;YACD,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,CAAC,OAAO,EAAE,UAAU,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE;SACjE;QACD,GAAG;KACJ,CAAC,CAAC;IACH,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -0,0 +1,15 @@
1
+ import type { IrExpr, IrType, SrcLoc } from "../../ir/ir.js";
2
+ import type { Lowerer } from "./lowerer.js";
3
+ /** Closed declared-field layouts with an ordinary data surface: the targets
4
+ * the checked record builder notes sources for. */
5
+ export declare function recordMayKeepSource(lowerer: Lowerer, t: IrType & {
6
+ kind: "record";
7
+ }): boolean;
8
+ /** `record.sourceHas(value)`: whether this record kept undeclared source
9
+ * properties. */
10
+ export declare function recordSourceTest(value: IrExpr, loc: SrcLoc): IrExpr;
11
+ /** A reflective answer over a record value that branches on its kept
12
+ * source: `staticAnswer` walks the declared fields, `viewAnswer` answers
13
+ * from the live checked view (typed `type`, the static answer's type). The
14
+ * receiver evaluates once. */
15
+ export declare function throughRecordSource(lowerer: Lowerer, receiver: IrExpr, loc: SrcLoc, staticAnswer: (record: IrExpr) => IrExpr, viewAnswer: (view: IrExpr, type: IrType) => IrExpr): IrExpr;
@@ -0,0 +1,46 @@
1
+ import { BOOL, DYN, recordTextCodecClass, shapeHasAccessorSlots } from "../../ir/ir.js";
2
+ import { varRef } from "../../ir/build.js";
3
+ import { isPerfEntryType } from "./builtins/performance.js";
4
+ /** Closed declared-field layouts with an ordinary data surface: the targets
5
+ * the checked record builder notes sources for. */
6
+ export function recordMayKeepSource(lowerer, t) {
7
+ const shape = lowerer.shapes.get(t.shapeId);
8
+ return (shape !== undefined &&
9
+ !shape.tuple &&
10
+ shape.indexValue === undefined &&
11
+ shape.fields.length > 0 &&
12
+ !shapeHasAccessorSlots(shape) &&
13
+ recordTextCodecClass(shape) === null &&
14
+ !isPerfEntryType(lowerer, t) &&
15
+ lowerer.dynConvertible(t));
16
+ }
17
+ /** `record.sourceHas(value)`: whether this record kept undeclared source
18
+ * properties. */
19
+ export function recordSourceTest(value, loc) {
20
+ return { kind: "libCall", fn: "record.sourceHas", args: [value], type: BOOL, loc };
21
+ }
22
+ /** A reflective answer over a record value that branches on its kept
23
+ * source: `staticAnswer` walks the declared fields, `viewAnswer` answers
24
+ * from the live checked view (typed `type`, the static answer's type). The
25
+ * receiver evaluates once. */
26
+ export function throughRecordSource(lowerer, receiver, loc, staticAnswer, viewAnswer) {
27
+ const local = lowerer.declareHiddenLocal("%sourcedRecord", receiver.type);
28
+ const record = () => varRef(local.id, receiver.type, loc);
29
+ const plain = staticAnswer(record());
30
+ const view = { kind: "dynFrom", value: record(), liveRef: true, type: DYN, loc };
31
+ return {
32
+ kind: "seqExpr",
33
+ stmts: [{ kind: "varDecl", localId: local.id, init: receiver, loc }],
34
+ result: {
35
+ kind: "ternary",
36
+ cond: recordSourceTest(record(), loc),
37
+ then: viewAnswer(view, plain.type),
38
+ else_: plain,
39
+ type: plain.type,
40
+ loc,
41
+ },
42
+ type: plain.type,
43
+ loc,
44
+ };
45
+ }
46
+ //# sourceMappingURL=record-sources.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"record-sources.js","sourceRoot":"","sources":["../../../src/frontend/lowering/record-sources.ts"],"names":[],"mappings":"AAYA,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AACxF,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAE3C,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAE5D;mDACmD;AACnD,MAAM,UAAU,mBAAmB,CAAC,OAAgB,EAAE,CAA8B;IAClF,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;IAC5C,OAAO,CACL,KAAK,KAAK,SAAS;QACnB,CAAC,KAAK,CAAC,KAAK;QACZ,KAAK,CAAC,UAAU,KAAK,SAAS;QAC9B,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC;QACvB,CAAC,qBAAqB,CAAC,KAAK,CAAC;QAC7B,oBAAoB,CAAC,KAAK,CAAC,KAAK,IAAI;QACpC,CAAC,eAAe,CAAC,OAAO,EAAE,CAAC,CAAC;QAC5B,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,CAC1B,CAAC;AACJ,CAAC;AAED;iBACiB;AACjB,MAAM,UAAU,gBAAgB,CAAC,KAAa,EAAE,GAAW;IACzD,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,kBAAkB,EAAE,IAAI,EAAE,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;AACrF,CAAC;AAED;;;8BAG8B;AAC9B,MAAM,UAAU,mBAAmB,CACjC,OAAgB,EAChB,QAAgB,EAChB,GAAW,EACX,YAAwC,EACxC,UAAkD;IAElD,MAAM,KAAK,GAAG,OAAO,CAAC,kBAAkB,CAAC,gBAAgB,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC1E,MAAM,MAAM,GAAG,GAAW,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IAClE,MAAM,KAAK,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC,CAAC;IACrC,MAAM,IAAI,GAAW,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;IACzF,OAAO;QACL,IAAI,EAAE,SAAS;QACf,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC;QACpE,MAAM,EAAE;YACN,IAAI,EAAE,SAAS;YACf,IAAI,EAAE,gBAAgB,CAAC,MAAM,EAAE,EAAE,GAAG,CAAC;YACrC,IAAI,EAAE,UAAU,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC;YAClC,KAAK,EAAE,KAAK;YACZ,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,GAAG;SACJ;QACD,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,GAAG;KACJ,CAAC;AACJ,CAAC"}
@@ -44,6 +44,10 @@ export declare const HTTP_SERVER_DOCUMENTED_OPTIONS: ReadonlySet<string>;
44
44
  * maxFreeSockets/timeout/port (+ scheduling, dropped: no free pool
45
45
  * exists); the rest fence by name and unknown keys drop like Node. */
46
46
  export declare const AGENT_DOCUMENTED_OPTIONS: ReadonlySet<string>;
47
+ /** new https.Agent(options) also takes tls.connect's client-side options,
48
+ * which Node merges into every request made through the agent. None lower
49
+ * yet, so each fences by name. */
50
+ export declare const HTTPS_AGENT_DOCUMENTED_OPTIONS: ReadonlySet<string>;
47
51
  /** https.request adds tls.connect's client-side TLS knobs. */
48
52
  export declare const HTTPS_CLIENT_DOCUMENTED_OPTIONS: ReadonlySet<string>;
49
53
  /** tls.createServer / tls.createSecureContext / https.createServer /
@@ -2,6 +2,9 @@ import * as ts from "../ts7/adapter.js";
2
2
  import { UNSUPPORTED } from "../../diagnostics/diagnostic.js";
3
3
  import { BOOL, BYTES_U8, CHILD_T, CRYPTOHASH_T, CRYPTOHMAC_T, DIR_T, DYN, F64, FILEHANDLE_T, SPAWNRES_T, STATS_T, STRING, URL_T, VOID, arrayOf, } from "../../ir/ir.js";
4
4
  import { isNodeTypesPath, requireSpecOf } from "../program.js";
5
+ import { ZLIB_CONSTANTS } from "./zlib-constants.js";
6
+ /** zlib stream instances: runtime Transform streams (scr_zlib_stream.c). */
7
+ const ZLIB_STREAM = { kind: "object", className: "%Transform" };
5
8
  /** Statement-level constructs rejected wholesale, keyed by syntax kind. */
6
9
  export const UNSUPPORTED_STMT = {
7
10
  // DoStatement / SwitchStatement are supported; handled in lowerStmt.
@@ -226,6 +229,28 @@ export const AGENT_DOCUMENTED_OPTIONS = new Set([
226
229
  "noDelay",
227
230
  "path",
228
231
  ]);
232
+ /** new https.Agent(options) also takes tls.connect's client-side options,
233
+ * which Node merges into every request made through the agent. None lower
234
+ * yet, so each fences by name. */
235
+ export const HTTPS_AGENT_DOCUMENTED_OPTIONS = new Set([
236
+ ...AGENT_DOCUMENTED_OPTIONS,
237
+ "ca",
238
+ "cert",
239
+ "ciphers",
240
+ "crl",
241
+ "ecdhCurve",
242
+ "key",
243
+ "maxCachedSessions",
244
+ "maxVersion",
245
+ "minVersion",
246
+ "passphrase",
247
+ "pfx",
248
+ "rejectUnauthorized",
249
+ "secureOptions",
250
+ "secureProtocol",
251
+ "servername",
252
+ "sessionIdContext",
253
+ ]);
229
254
  /** https.request adds tls.connect's client-side TLS knobs. */
230
255
  export const HTTPS_CLIENT_DOCUMENTED_OPTIONS = new Set([
231
256
  ...HTTP_CLIENT_DOCUMENTED_OPTIONS,
@@ -1008,6 +1033,18 @@ export const BUILTIN_MODULE_FNS = {
1008
1033
  // opendirSync's options (a literal { bufferSize, encoding: "utf8" })
1009
1034
  // lower in lowerBuiltinModuleCall; the row routes the dispatch.
1010
1035
  opendirSync: { fn: "fs.opendirSync", params: [STRING, F64], result: DIR_T },
1036
+ // createReadStream/createWriteStream lower in lowerBuiltinModuleCall
1037
+ // (path and options cross as dyn values); the rows route the dispatch.
1038
+ createReadStream: {
1039
+ fn: "fs.createReadStream",
1040
+ params: [DYN, DYN],
1041
+ result: { kind: "object", className: "%Readable" },
1042
+ },
1043
+ createWriteStream: {
1044
+ fn: "fs.createWriteStream",
1045
+ params: [DYN, DYN],
1046
+ result: { kind: "object", className: "%Writable" },
1047
+ },
1011
1048
  lstatSync: { fn: "fs.lstatSync", params: [STRING], result: STATS_T },
1012
1049
  fstatSync: {
1013
1050
  fn: "fs.fstatSync",
@@ -1340,6 +1377,10 @@ export const BUILTIN_MODULE_FNS = {
1340
1377
  hkdf: { fn: "crypto.hkdfCb", params: [], result: VOID },
1341
1378
  scryptSync: { fn: "crypto.scrypt", params: [BYTES_U8, BYTES_U8, F64, DYN], result: BYTES_U8 },
1342
1379
  scrypt: { fn: "crypto.scryptCb", params: [], result: VOID },
1380
+ // Checked-dynamic arguments; the result is a native Cipheriv or
1381
+ // Decipheriv handle (lowerCryptoModuleCall).
1382
+ createCipheriv: { fn: "crypto.cipherNew", params: [BOOL, DYN, DYN, DYN, DYN], result: DYN },
1383
+ createDecipheriv: { fn: "crypto.cipherNew", params: [BOOL, DYN, DYN, DYN, DYN], result: DYN },
1343
1384
  },
1344
1385
  zlib: {
1345
1386
  // The default-options convenience family is special-cased in
@@ -1361,6 +1402,15 @@ export const BUILTIN_MODULE_FNS = {
1361
1402
  unzip: { fn: "zlib.unzipCb", params: [], result: VOID },
1362
1403
  unzipSync: { fn: "zlib.unzipSync", params: [BYTES_U8], result: BYTES_U8 },
1363
1404
  crc32: { fn: "zlib.crc32", params: [], result: F64 },
1405
+ // The stream factories (special-cased in lowerZlibModuleCall): each
1406
+ // answers a runtime Transform stream over the zlib engine.
1407
+ createDeflate: { fn: "zlib.streamNew", params: [], result: ZLIB_STREAM },
1408
+ createInflate: { fn: "zlib.streamNew", params: [], result: ZLIB_STREAM },
1409
+ createGzip: { fn: "zlib.streamNew", params: [], result: ZLIB_STREAM },
1410
+ createGunzip: { fn: "zlib.streamNew", params: [], result: ZLIB_STREAM },
1411
+ createDeflateRaw: { fn: "zlib.streamNew", params: [], result: ZLIB_STREAM },
1412
+ createInflateRaw: { fn: "zlib.streamNew", params: [], result: ZLIB_STREAM },
1413
+ createUnzip: { fn: "zlib.streamNew", params: [], result: ZLIB_STREAM },
1364
1414
  },
1365
1415
  url: {
1366
1416
  fileURLToPath: {
@@ -1625,6 +1675,10 @@ export const BUILTIN_MODULE_FNS = {
1625
1675
  params: [F64],
1626
1676
  result: VOID,
1627
1677
  },
1678
+ // Node's IPv4Reg / IPv6Reg tests over String(input).
1679
+ isIP: { fn: "net.isIP", params: [DYN], result: F64 },
1680
+ isIPv4: { fn: "net.isIPv4", params: [DYN], result: BOOL },
1681
+ isIPv6: { fn: "net.isIPv6", params: [DYN], result: BOOL },
1628
1682
  },
1629
1683
  http: {},
1630
1684
  // node:tls and node:https ride the same spoke (tls.createServer's
@@ -1692,12 +1746,18 @@ export const BUILTIN_MODULE_FNS = {
1692
1746
  * lowering. Cluster metadata describes a directly-run native executable. */
1693
1747
  export const BUILTIN_MODULE_CONSTS = {
1694
1748
  http: { maxHeaderSize: 16384 },
1749
+ // Node's default protocol range, the TLS 1.2 to 1.3 range the bundled
1750
+ // mbedTLS negotiates
1751
+ tls: { DEFAULT_MIN_VERSION: "TLSv1.2", DEFAULT_MAX_VERSION: "TLSv1.3" },
1695
1752
  path: { sep: "/", delimiter: ":" },
1696
1753
  "path/posix": { sep: "/", delimiter: ":" },
1697
1754
  "path/win32": { sep: "\\", delimiter: ";" },
1698
1755
  os: { EOL: "\n", devNull: "/dev/null" },
1699
1756
  worker_threads: { isMainThread: true, threadId: 0 },
1700
1757
  cluster: { isPrimary: true, isMaster: true, isWorker: false },
1758
+ // zlib's module-level copies of its constants (every member outside
1759
+ // BROTLI_*, Node's own loop over zlib.constants).
1760
+ zlib: Object.fromEntries(Object.entries(ZLIB_CONSTANTS).filter(([name]) => !name.startsWith("BROTLI"))),
1701
1761
  };
1702
1762
  /** ALTERNATE libCall spellings of tabled builtin members: lowerings the
1703
1763
  * dispatch special-cases around the table row (Buffer/fd/options forms,
@@ -1730,6 +1790,23 @@ export const BUILTIN_MODULE_FN_ALIASES = {
1730
1790
  // The bytes-data form and the { mode } options form.
1731
1791
  writeFileSync: ["fs.writeFileSyncBytes", "fs.writeFileModeSync"],
1732
1792
  appendFileSync: ["fs.appendFileSyncBytes"],
1793
+ // The fs stream members (bytesRead/bytesWritten, pending, path, close).
1794
+ createReadStream: [
1795
+ "fs.fsStreamBytes",
1796
+ "fs.fsStreamPending",
1797
+ "fs.fsStreamPath",
1798
+ "fs.fsStreamPropDyn",
1799
+ "fs.fsStreamClose",
1800
+ "fs.fsStreamCloseCb",
1801
+ ],
1802
+ createWriteStream: [
1803
+ "fs.fsStreamBytes",
1804
+ "fs.fsStreamPending",
1805
+ "fs.fsStreamPath",
1806
+ "fs.fsStreamPropDyn",
1807
+ "fs.fsStreamClose",
1808
+ "fs.fsStreamCloseCb",
1809
+ ],
1733
1810
  // The utf8 string overload; the table row is the Buffer-window form.
1734
1811
  writeSync: ["fs.writeStrSync"],
1735
1812
  // The { recursive, mode } option lowerings.
@@ -2502,21 +2579,17 @@ export function builtinModulesArrayLit(loc) {
2502
2579
  /** Member-specific hints for RECOGNIZED builtin modules whose member has
2503
2580
  * no lowering. The default-options one-shot zlib/deflate-raw/gzip codecs
2504
2581
  * lower for strings and Buffers; the remaining surface points at them. */
2505
- const ZLIB_HINT = "the default-options deflate/inflate, raw, gzip/gunzip, and unzip sync/callback forms plus crc32 are the lowered zlib surface";
2506
- /** The legacy deep pair remains fenced. The shallow equal/notEqual pair
2507
- * lowers through the static Abstract Equality kernel in lower-assert. */
2508
- const ASSERT_LOOSE_DEEP_HINT = "legacy deep equality has no lowering yet — deepStrictEqual and " +
2509
- "notDeepStrictEqual compare structures with Node's modern semantics";
2582
+ const ZLIB_HINT = "the default-options deflate/inflate, raw, gzip/gunzip, and unzip sync/callback forms, crc32, " +
2583
+ "and the Deflate/Inflate/Gzip/Gunzip/DeflateRaw/InflateRaw/Unzip streams are the lowered zlib surface";
2584
+ /** Brotli has no codec in the static runtime (zlib is the only vendored
2585
+ * compression library). */
2586
+ const BROTLI_HINT = "Brotli needs a Brotli codec, which the static runtime does not vendor — " + ZLIB_HINT;
2510
2587
  const ASSERT_MODULE_HINTS = {
2511
- deepEqual: ASSERT_LOOSE_DEEP_HINT,
2512
- notDeepEqual: ASSERT_LOOSE_DEEP_HINT,
2513
2588
  ifError: "test explicitly instead: assert.strictEqual(err, null) / " +
2514
2589
  "assert.strictEqual(err, undefined)",
2515
2590
  rejects: "await the promise inside assert.throws's callback story instead: " +
2516
2591
  'try { await p; assert.fail("expected rejection") } catch { ... }',
2517
2592
  doesNotReject: "await the promise directly — an unexpected rejection already fails the test",
2518
- AssertionError: "the class itself has no lowering — catch and test err.name === " +
2519
- '"AssertionError" or err.code === "ERR_ASSERTION"',
2520
2593
  };
2521
2594
  export const BUILTIN_MODULE_FENCE_HINTS = {
2522
2595
  assert: ASSERT_MODULE_HINTS,
@@ -2527,10 +2600,9 @@ export const BUILTIN_MODULE_FENCE_HINTS = {
2527
2600
  ifError: ASSERT_MODULE_HINTS["ifError"],
2528
2601
  rejects: ASSERT_MODULE_HINTS["rejects"],
2529
2602
  doesNotReject: ASSERT_MODULE_HINTS["doesNotReject"],
2530
- AssertionError: ASSERT_MODULE_HINTS["AssertionError"],
2531
2603
  },
2532
2604
  util: {
2533
- promisify: "the lowered shapes are const bindings over child_process.execFile and fs.readFile; call the bound function directly",
2605
+ promisify: "the lowered shapes are const bindings over child_process.execFile, child_process.exec and the fs callback functions with an fs/promises counterpart; call the bound function directly",
2534
2606
  },
2535
2607
  "stream/consumers": {
2536
2608
  blob: "collecting a stream into a Blob is not supported yet — " +
@@ -2573,10 +2645,10 @@ export const BUILTIN_MODULE_FENCE_HINTS = {
2573
2645
  "public and private KeyObjects — neither exists in the static runtime, so no faithful lowering " +
2574
2646
  "can be small; the lowered crypto surface is hashing, randomness, secret KeyObjects, and the introspection statics",
2575
2647
  ])),
2576
- ...Object.fromEntries(["createCipheriv", "createDecipheriv", "getCipherInfo"].map((m) => [
2648
+ ...Object.fromEntries(["getCipherInfo"].map((m) => [
2577
2649
  m,
2578
- "symmetric ciphers need a cipher stack the static runtime does not vendor — " +
2579
- "the lowered crypto surface is hashing, randomness, and the introspection statics",
2650
+ "cipher metadata has no lowering — createCipheriv and createDecipheriv support " +
2651
+ "aes-128/192/256 in cbc, ctr, and gcm modes and chacha20-poly1305",
2580
2652
  ])),
2581
2653
  setFips: "a compiled binary has no FIPS provider to enable, and Node itself throws on setFips(true) " +
2582
2654
  "in a non-FIPS build — getFips() answers 0 here",
@@ -2584,8 +2656,14 @@ export const BUILTIN_MODULE_FENCE_HINTS = {
2584
2656
  "randomBytes, and the createHash chain",
2585
2657
  },
2586
2658
  zlib: {
2587
- brotliCompressSync: ZLIB_HINT,
2588
- brotliDecompressSync: ZLIB_HINT,
2659
+ brotliCompressSync: BROTLI_HINT,
2660
+ brotliDecompressSync: BROTLI_HINT,
2661
+ brotliCompress: BROTLI_HINT,
2662
+ brotliDecompress: BROTLI_HINT,
2663
+ createBrotliCompress: BROTLI_HINT,
2664
+ createBrotliDecompress: BROTLI_HINT,
2665
+ BrotliCompress: BROTLI_HINT,
2666
+ BrotliDecompress: BROTLI_HINT,
2589
2667
  },
2590
2668
  http2: {
2591
2669
  connect: "HTTP/2 client sessions have no lowering — the lowered http2 surface is the SERVER side: " +