@scriptc/compiler 0.3.6 → 0.4.1

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 (1358) hide show
  1. package/ambient/scriptc-node-fallback.d.ts +717 -55
  2. package/ambient/scriptc.d.ts +134 -0
  3. package/dist/backend/cycle-analysis.d.ts +1 -1
  4. package/dist/backend/cycle-analysis.js +1 -0
  5. package/dist/backend/cycle-analysis.js.map +1 -1
  6. package/dist/backend/cycle-analysis.test.js +13 -1
  7. package/dist/backend/cycle-analysis.test.js.map +1 -1
  8. package/dist/backend/cycle-mutability.js +16 -5
  9. package/dist/backend/cycle-mutability.js.map +1 -1
  10. package/dist/backend/executable-features.js +20 -0
  11. package/dist/backend/executable-features.js.map +1 -1
  12. package/dist/backend/immutability.test.js +1 -1
  13. package/dist/backend/library-pack.js +9 -0
  14. package/dist/backend/library-pack.js.map +1 -1
  15. package/dist/backend/link-plan-core.d.ts +2 -0
  16. package/dist/backend/link-plan-core.js +2 -0
  17. package/dist/backend/link-plan-core.js.map +1 -1
  18. package/dist/backend/link-plan.d.ts +1 -0
  19. package/dist/backend/link-plan.js +1 -0
  20. package/dist/backend/link-plan.js.map +1 -1
  21. package/dist/backend/llvm/alloc.d.ts +41 -4
  22. package/dist/backend/llvm/alloc.js +138 -7
  23. package/dist/backend/llvm/alloc.js.map +1 -1
  24. package/dist/backend/llvm/alloc.test.js +30 -1
  25. package/dist/backend/llvm/alloc.test.js.map +1 -1
  26. package/dist/backend/llvm/appended-array-literals.test.js +1 -1
  27. package/dist/backend/llvm/array-search.js +3 -1
  28. package/dist/backend/llvm/array-search.js.map +1 -1
  29. package/dist/backend/llvm/array-search.test.js +1 -1
  30. package/dist/backend/llvm/blocks.d.ts +8 -0
  31. package/dist/backend/llvm/blocks.js +43 -1
  32. package/dist/backend/llvm/blocks.js.map +1 -1
  33. package/dist/backend/llvm/blocks.test.js +22 -1
  34. package/dist/backend/llvm/blocks.test.js.map +1 -1
  35. package/dist/backend/llvm/byte-numbers.js +15 -5
  36. package/dist/backend/llvm/byte-numbers.js.map +1 -1
  37. package/dist/backend/llvm/bytes-alias.d.ts +14 -0
  38. package/dist/backend/llvm/bytes-alias.js +20 -0
  39. package/dist/backend/llvm/bytes-alias.js.map +1 -0
  40. package/dist/backend/llvm/bytes-loop-versions.d.ts +86 -0
  41. package/dist/backend/llvm/bytes-loop-versions.js +506 -0
  42. package/dist/backend/llvm/bytes-loop-versions.js.map +1 -0
  43. package/dist/backend/llvm/bytes-loop-versions.test.d.ts +1 -0
  44. package/dist/backend/llvm/bytes-loop-versions.test.js +244 -0
  45. package/dist/backend/llvm/bytes-loop-versions.test.js.map +1 -0
  46. package/dist/backend/llvm/call-lifetimes.js +50 -1
  47. package/dist/backend/llvm/call-lifetimes.js.map +1 -1
  48. package/dist/backend/llvm/call-lifetimes.test.js +34 -0
  49. package/dist/backend/llvm/call-lifetimes.test.js.map +1 -1
  50. package/dist/backend/llvm/checked-narrows.test.js +1 -1
  51. package/dist/backend/llvm/checked-value-lifetimes.js +4 -1
  52. package/dist/backend/llvm/checked-value-lifetimes.js.map +1 -1
  53. package/dist/backend/llvm/classes.d.ts +38 -1
  54. package/dist/backend/llvm/classes.js +185 -35
  55. package/dist/backend/llvm/classes.js.map +1 -1
  56. package/dist/backend/llvm/classes.test.js +79 -17
  57. package/dist/backend/llvm/classes.test.js.map +1 -1
  58. package/dist/backend/llvm/common.d.ts +21 -3
  59. package/dist/backend/llvm/common.js +51 -3
  60. package/dist/backend/llvm/common.js.map +1 -1
  61. package/dist/backend/llvm/constant-callbacks.d.ts +5 -1
  62. package/dist/backend/llvm/constant-callbacks.js +55 -12
  63. package/dist/backend/llvm/constant-callbacks.js.map +1 -1
  64. package/dist/backend/llvm/constant-callbacks.test.js +88 -1
  65. package/dist/backend/llvm/constant-callbacks.test.js.map +1 -1
  66. package/dist/backend/llvm/counted-loops.d.ts +4 -0
  67. package/dist/backend/llvm/counted-loops.js +37 -0
  68. package/dist/backend/llvm/counted-loops.js.map +1 -1
  69. package/dist/backend/llvm/dense-array-access.d.ts +15 -4
  70. package/dist/backend/llvm/dense-array-access.js +125 -44
  71. package/dist/backend/llvm/dense-array-access.js.map +1 -1
  72. package/dist/backend/llvm/dense-array-access.test.js +63 -3
  73. package/dist/backend/llvm/dense-array-access.test.js.map +1 -1
  74. package/dist/backend/llvm/dense-array-loops.d.ts +51 -0
  75. package/dist/backend/llvm/dense-array-loops.js +162 -0
  76. package/dist/backend/llvm/dense-array-loops.js.map +1 -0
  77. package/dist/backend/llvm/dense-array-loops.test.d.ts +1 -0
  78. package/dist/backend/llvm/dense-array-loops.test.js +128 -0
  79. package/dist/backend/llvm/dense-array-loops.test.js.map +1 -0
  80. package/dist/backend/llvm/dyn-handle-tags.test.d.ts +1 -0
  81. package/dist/backend/llvm/dyn-handle-tags.test.js +38 -0
  82. package/dist/backend/llvm/dyn-handle-tags.test.js.map +1 -0
  83. package/dist/backend/llvm/dyn.d.ts +37 -4
  84. package/dist/backend/llvm/dyn.js +354 -183
  85. package/dist/backend/llvm/dyn.js.map +1 -1
  86. package/dist/backend/llvm/emit-function.d.ts +64 -0
  87. package/dist/backend/llvm/emit-function.js +1193 -0
  88. package/dist/backend/llvm/emit-function.js.map +1 -0
  89. package/dist/backend/llvm/emit-module.d.ts +24 -0
  90. package/dist/backend/llvm/emit-module.js +1557 -0
  91. package/dist/backend/llvm/emit-module.js.map +1 -0
  92. package/dist/backend/llvm/emit-statements.d.ts +59 -0
  93. package/dist/backend/llvm/emit-statements.js +2041 -0
  94. package/dist/backend/llvm/emit-statements.js.map +1 -0
  95. package/dist/backend/llvm/emitter.d.ts +566 -291
  96. package/dist/backend/llvm/emitter.js +728 -4671
  97. package/dist/backend/llvm/emitter.js.map +1 -1
  98. package/dist/backend/llvm/emitter.test.js +57 -3
  99. package/dist/backend/llvm/emitter.test.js.map +1 -1
  100. package/dist/backend/llvm/expr-async.js +73 -46
  101. package/dist/backend/llvm/expr-async.js.map +1 -1
  102. package/dist/backend/llvm/expr-async.test.js +1 -1
  103. package/dist/backend/llvm/expr-bytes.d.ts +2 -0
  104. package/dist/backend/llvm/expr-bytes.js +76 -29
  105. package/dist/backend/llvm/expr-bytes.js.map +1 -1
  106. package/dist/backend/llvm/expr-callbacks.d.ts +6 -2
  107. package/dist/backend/llvm/expr-callbacks.js +48 -11
  108. package/dist/backend/llvm/expr-callbacks.js.map +1 -1
  109. package/dist/backend/llvm/expr-calls.d.ts +1 -1
  110. package/dist/backend/llvm/expr-calls.js +87 -56
  111. package/dist/backend/llvm/expr-calls.js.map +1 -1
  112. package/dist/backend/llvm/expr-calls.test.js +1 -1
  113. package/dist/backend/llvm/expr-containers.js +45 -24
  114. package/dist/backend/llvm/expr-containers.js.map +1 -1
  115. package/dist/backend/llvm/expr-control.js +16 -16
  116. package/dist/backend/llvm/expr-control.js.map +1 -1
  117. package/dist/backend/llvm/expr-dynamic.d.ts +3 -0
  118. package/dist/backend/llvm/expr-dynamic.js +113 -66
  119. package/dist/backend/llvm/expr-dynamic.js.map +1 -1
  120. package/dist/backend/llvm/expr-primitives.js +124 -28
  121. package/dist/backend/llvm/expr-primitives.js.map +1 -1
  122. package/dist/backend/llvm/expr-primitives.test.js +57 -2
  123. package/dist/backend/llvm/expr-primitives.test.js.map +1 -1
  124. package/dist/backend/llvm/expr-records.d.ts +1 -1
  125. package/dist/backend/llvm/expr-records.js +32 -11
  126. package/dist/backend/llvm/expr-records.js.map +1 -1
  127. package/dist/backend/llvm/expr-stream-bridges.js +65 -27
  128. package/dist/backend/llvm/expr-stream-bridges.js.map +1 -1
  129. package/dist/backend/llvm/expr-stream-bridges.test.js +2 -2
  130. package/dist/backend/llvm/expr-stream-callbacks.js +22 -1
  131. package/dist/backend/llvm/expr-stream-callbacks.js.map +1 -1
  132. package/dist/backend/llvm/int32-abi.test.js +2 -2
  133. package/dist/backend/llvm/integer-clones.js +3 -3
  134. package/dist/backend/llvm/integer-clones.js.map +1 -1
  135. package/dist/backend/llvm/integer-clones.test.js +3 -3
  136. package/dist/backend/llvm/integer-remainder.d.ts +34 -13
  137. package/dist/backend/llvm/integer-remainder.js +156 -22
  138. package/dist/backend/llvm/integer-remainder.js.map +1 -1
  139. package/dist/backend/llvm/intern-tables.test.js +1 -1
  140. package/dist/backend/llvm/js-ic.d.ts +18 -0
  141. package/dist/backend/llvm/js-ic.js +712 -0
  142. package/dist/backend/llvm/js-ic.js.map +1 -0
  143. package/dist/backend/llvm/jsval-encoding.d.ts +21 -0
  144. package/dist/backend/llvm/jsval-encoding.js +20 -0
  145. package/dist/backend/llvm/jsval-encoding.js.map +1 -0
  146. package/dist/backend/llvm/jsval.d.ts +12 -0
  147. package/dist/backend/llvm/jsval.js +616 -0
  148. package/dist/backend/llvm/jsval.js.map +1 -0
  149. package/dist/backend/llvm/lazy-captures.d.ts +12 -2
  150. package/dist/backend/llvm/lazy-captures.js +39 -17
  151. package/dist/backend/llvm/lazy-captures.js.map +1 -1
  152. package/dist/backend/llvm/lib-abi.js +1 -1
  153. package/dist/backend/llvm/lib-abi.js.map +1 -1
  154. package/dist/backend/llvm/lib-connect.js +1 -1
  155. package/dist/backend/llvm/lib-connect.js.map +1 -1
  156. package/dist/backend/llvm/lib-datagram.js +14 -8
  157. package/dist/backend/llvm/lib-datagram.js.map +1 -1
  158. package/dist/backend/llvm/lib-dispatch.js +189 -23
  159. package/dist/backend/llvm/lib-dispatch.js.map +1 -1
  160. package/dist/backend/llvm/lib-filesystem.js +42 -13
  161. package/dist/backend/llvm/lib-filesystem.js.map +1 -1
  162. package/dist/backend/llvm/lib-http2.js +3 -3
  163. package/dist/backend/llvm/lib-http2.js.map +1 -1
  164. package/dist/backend/llvm/lib-lookup.js +2 -2
  165. package/dist/backend/llvm/lib-lookup.js.map +1 -1
  166. package/dist/backend/llvm/lib-network.js +56 -22
  167. package/dist/backend/llvm/lib-network.js.map +1 -1
  168. package/dist/backend/llvm/lib-process.js +94 -53
  169. package/dist/backend/llvm/lib-process.js.map +1 -1
  170. package/dist/backend/llvm/lib-shared.d.ts +12 -0
  171. package/dist/backend/llvm/lib-shared.js +209 -6
  172. package/dist/backend/llvm/lib-shared.js.map +1 -1
  173. package/dist/backend/llvm/lib-stream.js +46 -16
  174. package/dist/backend/llvm/lib-stream.js.map +1 -1
  175. package/dist/backend/llvm/lib-test.js +43 -7
  176. package/dist/backend/llvm/lib-test.js.map +1 -1
  177. package/dist/backend/llvm/lib-tls.js +4 -9
  178. package/dist/backend/llvm/lib-tls.js.map +1 -1
  179. package/dist/backend/llvm/local-array-reads.js +42 -33
  180. package/dist/backend/llvm/local-array-reads.js.map +1 -1
  181. package/dist/backend/llvm/local-array-reads.test.js +1 -1
  182. package/dist/backend/llvm/local-extents.d.ts +19 -0
  183. package/dist/backend/llvm/local-extents.js +169 -0
  184. package/dist/backend/llvm/local-extents.js.map +1 -0
  185. package/dist/backend/llvm/local-extents.test.d.ts +1 -0
  186. package/dist/backend/llvm/local-extents.test.js +92 -0
  187. package/dist/backend/llvm/local-extents.test.js.map +1 -0
  188. package/dist/backend/llvm/local-union-storage.js +7 -7
  189. package/dist/backend/llvm/local-union-storage.js.map +1 -1
  190. package/dist/backend/llvm/local-union-storage.test.js +2 -2
  191. package/dist/backend/llvm/map-entry-fusion.test.js +1 -1
  192. package/dist/backend/llvm/map-number-lookup.d.ts +20 -4
  193. package/dist/backend/llvm/map-number-lookup.js +45 -9
  194. package/dist/backend/llvm/map-number-lookup.js.map +1 -1
  195. package/dist/backend/llvm/map-number-lookup.test.js +2 -2
  196. package/dist/backend/llvm/map-read-lifetimes.test.js +2 -2
  197. package/dist/backend/llvm/narrow-guards.d.ts +38 -0
  198. package/dist/backend/llvm/narrow-guards.js +215 -0
  199. package/dist/backend/llvm/narrow-guards.js.map +1 -0
  200. package/dist/backend/llvm/nullable-unions.d.ts +64 -6
  201. package/dist/backend/llvm/nullable-unions.js +103 -6
  202. package/dist/backend/llvm/nullable-unions.js.map +1 -1
  203. package/dist/backend/llvm/nullable-unions.test.d.ts +1 -0
  204. package/dist/backend/llvm/nullable-unions.test.js +65 -0
  205. package/dist/backend/llvm/nullable-unions.test.js.map +1 -0
  206. package/dist/backend/llvm/publish.d.ts +7 -0
  207. package/dist/backend/llvm/publish.js +50 -19
  208. package/dist/backend/llvm/publish.js.map +1 -1
  209. package/dist/backend/llvm/publish.test.js +1 -1
  210. package/dist/backend/llvm/receivers.d.ts +31 -0
  211. package/dist/backend/llvm/receivers.js +395 -0
  212. package/dist/backend/llvm/receivers.js.map +1 -0
  213. package/dist/backend/llvm/record-results.d.ts +12 -1
  214. package/dist/backend/llvm/record-results.js +64 -4
  215. package/dist/backend/llvm/record-results.js.map +1 -1
  216. package/dist/backend/llvm/reference-effects.js +9 -0
  217. package/dist/backend/llvm/reference-effects.js.map +1 -1
  218. package/dist/backend/llvm/reference-writes.d.ts +4 -0
  219. package/dist/backend/llvm/reference-writes.js +142 -6
  220. package/dist/backend/llvm/reference-writes.js.map +1 -1
  221. package/dist/backend/llvm/reference-writes.test.d.ts +1 -0
  222. package/dist/backend/llvm/reference-writes.test.js +88 -0
  223. package/dist/backend/llvm/reference-writes.test.js.map +1 -0
  224. package/dist/backend/llvm/regex-matchers.d.ts +8 -0
  225. package/dist/backend/llvm/regex-matchers.js +33 -0
  226. package/dist/backend/llvm/regex-matchers.js.map +1 -1
  227. package/dist/backend/llvm/regex-matchers.test.js +23 -1
  228. package/dist/backend/llvm/regex-matchers.test.js.map +1 -1
  229. package/dist/backend/llvm/regions.d.ts +1 -1
  230. package/dist/backend/llvm/regions.js +10 -7
  231. package/dist/backend/llvm/regions.js.map +1 -1
  232. package/dist/backend/llvm/regions.test.js +8 -2
  233. package/dist/backend/llvm/regions.test.js.map +1 -1
  234. package/dist/backend/llvm/shapes.d.ts +74 -45
  235. package/dist/backend/llvm/shapes.js +289 -28
  236. package/dist/backend/llvm/shapes.js.map +1 -1
  237. package/dist/backend/llvm/shapes.test.js +37 -3
  238. package/dist/backend/llvm/shapes.test.js.map +1 -1
  239. package/dist/backend/llvm/speculative-integers.d.ts +20 -1
  240. package/dist/backend/llvm/speculative-integers.js +94 -6
  241. package/dist/backend/llvm/speculative-integers.js.map +1 -1
  242. package/dist/backend/llvm/speculative-integers.test.js +55 -1
  243. package/dist/backend/llvm/speculative-integers.test.js.map +1 -1
  244. package/dist/backend/llvm/split-loops.js +2 -2
  245. package/dist/backend/llvm/split-loops.js.map +1 -1
  246. package/dist/backend/llvm/stack-objects.d.ts +26 -6
  247. package/dist/backend/llvm/stack-objects.js +133 -10
  248. package/dist/backend/llvm/stack-objects.js.map +1 -1
  249. package/dist/backend/llvm/stack-objects.test.js +55 -1
  250. package/dist/backend/llvm/stack-objects.test.js.map +1 -1
  251. package/dist/backend/llvm/stack-unions.test.js +1 -1
  252. package/dist/backend/llvm/string-construction.test.js +1 -1
  253. package/dist/backend/llvm/string-lifetimes.test.js +15 -14
  254. package/dist/backend/llvm/string-lifetimes.test.js.map +1 -1
  255. package/dist/backend/llvm/string-reads.d.ts +1 -1
  256. package/dist/backend/llvm/string-reads.js +4 -4
  257. package/dist/backend/llvm/string-reads.js.map +1 -1
  258. package/dist/backend/llvm/string-slices.d.ts +25 -0
  259. package/dist/backend/llvm/string-slices.js +207 -1
  260. package/dist/backend/llvm/string-slices.js.map +1 -1
  261. package/dist/backend/llvm/string-slices.test.js +139 -2
  262. package/dist/backend/llvm/string-slices.test.js.map +1 -1
  263. package/dist/backend/llvm/switch-dispatch.test.js +2 -2
  264. package/dist/backend/llvm/thread-slots.d.ts +5 -0
  265. package/dist/backend/llvm/thread-slots.js +142 -0
  266. package/dist/backend/llvm/thread-slots.js.map +1 -0
  267. package/dist/backend/llvm/thread-slots.test.d.ts +1 -0
  268. package/dist/backend/llvm/thread-slots.test.js +111 -0
  269. package/dist/backend/llvm/thread-slots.test.js.map +1 -0
  270. package/dist/backend/llvm/union-repr.d.ts +7 -7
  271. package/dist/backend/llvm/union-repr.js +18 -2
  272. package/dist/backend/llvm/union-repr.js.map +1 -1
  273. package/dist/backend/llvm/union-retype.test.js +17 -3
  274. package/dist/backend/llvm/union-retype.test.js.map +1 -1
  275. package/dist/backend/llvm/walkers.d.ts +2 -2
  276. package/dist/backend/llvm/walkers.js +51 -26
  277. package/dist/backend/llvm/walkers.js.map +1 -1
  278. package/dist/backend/llvm/wasm-modules.d.ts +16 -0
  279. package/dist/backend/llvm/wasm-modules.js +66 -0
  280. package/dist/backend/llvm/wasm-modules.js.map +1 -0
  281. package/dist/backend/llvm/wrapping-sums.d.ts +7 -0
  282. package/dist/backend/llvm/wrapping-sums.js +11 -3
  283. package/dist/backend/llvm/wrapping-sums.js.map +1 -1
  284. package/dist/backend/mangle.d.ts +12 -0
  285. package/dist/backend/mangle.js +18 -0
  286. package/dist/backend/mangle.js.map +1 -1
  287. package/dist/backend/may-throw.d.ts +3 -0
  288. package/dist/backend/may-throw.js +4 -2
  289. package/dist/backend/may-throw.js.map +1 -1
  290. package/dist/backend/may-throw.test.js +1 -1
  291. package/dist/backend/native/contracts.d.ts +57 -0
  292. package/dist/backend/native/executable.js +211 -139
  293. package/dist/backend/native/executable.js.map +1 -1
  294. package/dist/backend/native/library.js +2 -0
  295. package/dist/backend/native/library.js.map +1 -1
  296. package/dist/backend/native/runtime-inputs.d.ts +1 -1
  297. package/dist/backend/native/runtime-inputs.js +1 -0
  298. package/dist/backend/native/runtime-inputs.js.map +1 -1
  299. package/dist/backend/native-codegen.d.ts +6 -0
  300. package/dist/backend/native-codegen.js +19 -0
  301. package/dist/backend/native-codegen.js.map +1 -1
  302. package/dist/backend/native-codegen.test.js +27 -0
  303. package/dist/backend/native-codegen.test.js.map +1 -1
  304. package/dist/backend/native-link-info-core.d.ts +48 -0
  305. package/dist/backend/native-link-info-core.js.map +1 -1
  306. package/dist/backend/native-profile.d.ts +32 -0
  307. package/dist/backend/native-profile.js +39 -0
  308. package/dist/backend/native-profile.js.map +1 -0
  309. package/dist/backend/native-profile.test.d.ts +1 -0
  310. package/dist/backend/native-profile.test.js +58 -0
  311. package/dist/backend/native-profile.test.js.map +1 -0
  312. package/dist/backend/native-tools.d.ts +14 -0
  313. package/dist/backend/native-tools.js +13 -0
  314. package/dist/backend/native-tools.js.map +1 -1
  315. package/dist/backend/publication.test.js +1 -1
  316. package/dist/backend/runtime-abi.d.ts +2 -2
  317. package/dist/backend/runtime-abi.js +2 -2
  318. package/dist/backend/runtime-pack-core.d.ts +13 -1
  319. package/dist/backend/runtime-pack-core.js +14 -1
  320. package/dist/backend/runtime-pack-core.js.map +1 -1
  321. package/dist/backend/runtime-pack-native.js +1 -1
  322. package/dist/backend/runtime-pack-native.js.map +1 -1
  323. package/dist/backend/runtime-pack-native.test.d.ts +1 -0
  324. package/dist/backend/runtime-pack-native.test.js +31 -0
  325. package/dist/backend/runtime-pack-native.test.js.map +1 -0
  326. package/dist/backend/runtime-pack-targets.test.js +9 -1
  327. package/dist/backend/runtime-pack-targets.test.js.map +1 -1
  328. package/dist/backend/runtime-pack.test.js +9 -1
  329. package/dist/backend/runtime-pack.test.js.map +1 -1
  330. package/dist/backend/stack-observations.d.ts +22 -0
  331. package/dist/backend/stack-observations.js +382 -0
  332. package/dist/backend/stack-observations.js.map +1 -0
  333. package/dist/backend/stack-observations.test.d.ts +1 -0
  334. package/dist/backend/stack-observations.test.js +233 -0
  335. package/dist/backend/stack-observations.test.js.map +1 -0
  336. package/dist/backend/target-diagnostics.js +15 -0
  337. package/dist/backend/target-diagnostics.js.map +1 -1
  338. package/dist/backend/target-diagnostics.test.js +1 -1
  339. package/dist/backend/warm-cache.js +8 -0
  340. package/dist/backend/warm-cache.js.map +1 -1
  341. package/dist/backend/young-nursery.d.ts +7 -0
  342. package/dist/backend/young-nursery.js +10 -0
  343. package/dist/backend/young-nursery.js.map +1 -0
  344. package/dist/cli/command.js +106 -4
  345. package/dist/cli/command.js.map +1 -1
  346. package/dist/cli/host.d.ts +3 -0
  347. package/dist/cli/output-options.d.ts +2 -0
  348. package/dist/cli/output-options.js +9 -0
  349. package/dist/cli/output-options.js.map +1 -1
  350. package/dist/cli/usage.d.ts +21 -1
  351. package/dist/cli/usage.js +43 -1
  352. package/dist/cli/usage.js.map +1 -1
  353. package/dist/compat/fetch-profile.js +10 -1
  354. package/dist/compat/fetch-profile.js.map +1 -1
  355. package/dist/compile-types.d.ts +22 -0
  356. package/dist/contracts/check.js +25 -8
  357. package/dist/contracts/check.js.map +1 -1
  358. package/dist/contracts/int32-elements.d.ts +115 -0
  359. package/dist/contracts/int32-elements.js +1179 -0
  360. package/dist/contracts/int32-elements.js.map +1 -0
  361. package/dist/coverage/report.d.ts +16 -0
  362. package/dist/coverage/report.js +182 -1
  363. package/dist/coverage/report.js.map +1 -1
  364. package/dist/coverage/surface-manifest.js +16 -3
  365. package/dist/coverage/surface-manifest.js.map +1 -1
  366. package/dist/coverage/verdict-cache.d.ts +2 -0
  367. package/dist/coverage/verdict-cache.js +12 -0
  368. package/dist/coverage/verdict-cache.js.map +1 -1
  369. package/dist/coverage/verdict-cache.test.js +2 -1
  370. package/dist/coverage/verdict-cache.test.js.map +1 -1
  371. package/dist/diagnostics/diagnostic.d.ts +10 -6
  372. package/dist/diagnostics/diagnostic.js +29 -21
  373. package/dist/diagnostics/diagnostic.js.map +1 -1
  374. package/dist/diagnostics/envelope.d.ts +39 -2
  375. package/dist/diagnostics/envelope.js.map +1 -1
  376. package/dist/diagnostics/render.d.ts +7 -0
  377. package/dist/diagnostics/render.js +50 -13
  378. package/dist/diagnostics/render.js.map +1 -1
  379. package/dist/diagnostics/render.test.d.ts +1 -0
  380. package/dist/diagnostics/render.test.js +49 -0
  381. package/dist/diagnostics/render.test.js.map +1 -0
  382. package/dist/executable/executable-cache.d.ts +27 -0
  383. package/dist/executable/executable-cache.js +19 -1
  384. package/dist/executable/executable-cache.js.map +1 -1
  385. package/dist/executable/executable-cache.test.js +12 -1
  386. package/dist/executable/executable-cache.test.js.map +1 -1
  387. package/dist/executable/prepare.js +2 -1
  388. package/dist/executable/prepare.js.map +1 -1
  389. package/dist/frontend/analysis.js +6 -1
  390. package/dist/frontend/analysis.js.map +1 -1
  391. package/dist/frontend/arguments-usage.d.ts +8 -0
  392. package/dist/frontend/arguments-usage.js +98 -0
  393. package/dist/frontend/arguments-usage.js.map +1 -1
  394. package/dist/frontend/arguments-usage.test.d.ts +1 -0
  395. package/dist/frontend/arguments-usage.test.js +32 -0
  396. package/dist/frontend/arguments-usage.test.js.map +1 -0
  397. package/dist/frontend/builtin-modules.d.ts +16 -2
  398. package/dist/frontend/builtin-modules.js +40 -7
  399. package/dist/frontend/builtin-modules.js.map +1 -1
  400. package/dist/frontend/builtin-package-aliases.d.ts +24 -0
  401. package/dist/frontend/builtin-package-aliases.js +133 -0
  402. package/dist/frontend/builtin-package-aliases.js.map +1 -0
  403. package/dist/frontend/builtin-package-aliases.test.d.ts +1 -0
  404. package/dist/frontend/builtin-package-aliases.test.js +48 -0
  405. package/dist/frontend/builtin-package-aliases.test.js.map +1 -0
  406. package/dist/frontend/cjs-syntax.js +52 -51
  407. package/dist/frontend/cjs-syntax.js.map +1 -1
  408. package/dist/frontend/contract-types.d.ts +3 -0
  409. package/dist/frontend/contract-types.js +36 -7
  410. package/dist/frontend/contract-types.js.map +1 -1
  411. package/dist/frontend/dts-paths.d.ts +4 -0
  412. package/dist/frontend/dts-paths.js +9 -1
  413. package/dist/frontend/dts-paths.js.map +1 -1
  414. package/dist/frontend/experimental-import.d.ts +5 -1
  415. package/dist/frontend/experimental-import.js +26 -7
  416. package/dist/frontend/experimental-import.js.map +1 -1
  417. package/dist/frontend/fork-target.js +20 -22
  418. package/dist/frontend/fork-target.js.map +1 -1
  419. package/dist/frontend/fork-target.test.js +2 -1
  420. package/dist/frontend/fork-target.test.js.map +1 -1
  421. package/dist/frontend/function-completion.js +6 -6
  422. package/dist/frontend/function-completion.js.map +1 -1
  423. package/dist/frontend/helper-tokens.js +15 -3
  424. package/dist/frontend/helper-tokens.js.map +1 -1
  425. package/dist/frontend/helper-tokens.test.js +7 -1
  426. package/dist/frontend/helper-tokens.test.js.map +1 -1
  427. package/dist/frontend/inferred-js-diagnostics.js +14 -17
  428. package/dist/frontend/inferred-js-diagnostics.js.map +1 -1
  429. package/dist/frontend/input-tracker.d.ts +3 -0
  430. package/dist/frontend/input-tracker.js +32 -3
  431. package/dist/frontend/input-tracker.js.map +1 -1
  432. package/dist/frontend/lib-contract.js +36 -32
  433. package/dist/frontend/lib-contract.js.map +1 -1
  434. package/dist/frontend/lib-exports.js +3 -3
  435. package/dist/frontend/lib-exports.js.map +1 -1
  436. package/dist/frontend/lowering/array-values.d.ts +8 -3
  437. package/dist/frontend/lowering/array-values.js +60 -11
  438. package/dist/frontend/lowering/array-values.js.map +1 -1
  439. package/dist/frontend/lowering/assert-instances.js +4 -4
  440. package/dist/frontend/lowering/assert-instances.js.map +1 -1
  441. package/dist/frontend/lowering/assertion-identity.d.ts +12 -0
  442. package/dist/frontend/lowering/assertion-identity.js +70 -0
  443. package/dist/frontend/lowering/assertion-identity.js.map +1 -0
  444. package/dist/frontend/lowering/assertion-members.d.ts +28 -0
  445. package/dist/frontend/lowering/assertion-members.js +185 -0
  446. package/dist/frontend/lowering/assertion-members.js.map +1 -0
  447. package/dist/frontend/lowering/binding-analysis.js +27 -20
  448. package/dist/frontend/lowering/binding-analysis.js.map +1 -1
  449. package/dist/frontend/lowering/builtin-calls.js +63 -5
  450. package/dist/frontend/lowering/builtin-calls.js.map +1 -1
  451. package/dist/frontend/lowering/builtin-function-fences.d.ts +14 -0
  452. package/dist/frontend/lowering/builtin-function-fences.js +42 -0
  453. package/dist/frontend/lowering/builtin-function-fences.js.map +1 -0
  454. package/dist/frontend/lowering/builtins/arguments.js +1 -1
  455. package/dist/frontend/lowering/builtins/arguments.js.map +1 -1
  456. package/dist/frontend/lowering/builtins/async-context.js +53 -52
  457. package/dist/frontend/lowering/builtins/async-context.js.map +1 -1
  458. package/dist/frontend/lowering/builtins/atomics.js +6 -6
  459. package/dist/frontend/lowering/builtins/atomics.js.map +1 -1
  460. package/dist/frontend/lowering/builtins/blob.js +8 -6
  461. package/dist/frontend/lowering/builtins/blob.js.map +1 -1
  462. package/dist/frontend/lowering/builtins/builtin-class-dyn.d.ts +31 -0
  463. package/dist/frontend/lowering/builtins/builtin-class-dyn.js +205 -0
  464. package/dist/frontend/lowering/builtins/builtin-class-dyn.js.map +1 -0
  465. package/dist/frontend/lowering/builtins/callable-aliases.js +17 -5
  466. package/dist/frontend/lowering/builtins/callable-aliases.js.map +1 -1
  467. package/dist/frontend/lowering/builtins/child-process-async.js +7 -7
  468. package/dist/frontend/lowering/builtins/child-process-async.js.map +1 -1
  469. package/dist/frontend/lowering/builtins/child-process-methods.d.ts +6 -4
  470. package/dist/frontend/lowering/builtins/child-process-methods.js +310 -57
  471. package/dist/frontend/lowering/builtins/child-process-methods.js.map +1 -1
  472. package/dist/frontend/lowering/builtins/child-process-sync.js +16 -10
  473. package/dist/frontend/lowering/builtins/child-process-sync.js.map +1 -1
  474. package/dist/frontend/lowering/builtins/child-process.d.ts +6 -4
  475. package/dist/frontend/lowering/builtins/child-process.js +85 -61
  476. package/dist/frontend/lowering/builtins/child-process.js.map +1 -1
  477. package/dist/frontend/lowering/builtins/class-values.d.ts +60 -0
  478. package/dist/frontend/lowering/builtins/class-values.js +226 -0
  479. package/dist/frontend/lowering/builtins/class-values.js.map +1 -0
  480. package/dist/frontend/lowering/builtins/compression.d.ts +9 -0
  481. package/dist/frontend/lowering/builtins/compression.js +107 -44
  482. package/dist/frontend/lowering/builtins/compression.js.map +1 -1
  483. package/dist/frontend/lowering/builtins/constants.d.ts +9 -1
  484. package/dist/frontend/lowering/builtins/constants.js +28 -7
  485. package/dist/frontend/lowering/builtins/constants.js.map +1 -1
  486. package/dist/frontend/lowering/builtins/crypto.d.ts +22 -0
  487. package/dist/frontend/lowering/builtins/crypto.js +215 -38
  488. package/dist/frontend/lowering/builtins/crypto.js.map +1 -1
  489. package/dist/frontend/lowering/builtins/dates.d.ts +7 -1
  490. package/dist/frontend/lowering/builtins/dates.js +92 -16
  491. package/dist/frontend/lowering/builtins/dates.js.map +1 -1
  492. package/dist/frontend/lowering/builtins/disposable-stack.d.ts +18 -0
  493. package/dist/frontend/lowering/builtins/disposable-stack.js +137 -0
  494. package/dist/frontend/lowering/builtins/disposable-stack.js.map +1 -0
  495. package/dist/frontend/lowering/builtins/ecdh.d.ts +10 -0
  496. package/dist/frontend/lowering/builtins/ecdh.js +208 -0
  497. package/dist/frontend/lowering/builtins/ecdh.js.map +1 -0
  498. package/dist/frontend/lowering/builtins/environment.js +3 -3
  499. package/dist/frontend/lowering/builtins/environment.js.map +1 -1
  500. package/dist/frontend/lowering/builtins/errors.d.ts +14 -10
  501. package/dist/frontend/lowering/builtins/errors.js +169 -3
  502. package/dist/frontend/lowering/builtins/errors.js.map +1 -1
  503. package/dist/frontend/lowering/builtins/filesystem-calls.js +128 -116
  504. package/dist/frontend/lowering/builtins/filesystem-calls.js.map +1 -1
  505. package/dist/frontend/lowering/builtins/filesystem.js +77 -77
  506. package/dist/frontend/lowering/builtins/filesystem.js.map +1 -1
  507. package/dist/frontend/lowering/builtins/fs-glob.js +3 -3
  508. package/dist/frontend/lowering/builtins/fs-glob.js.map +1 -1
  509. package/dist/frontend/lowering/builtins/fs-streams.js +10 -11
  510. package/dist/frontend/lowering/builtins/fs-streams.js.map +1 -1
  511. package/dist/frontend/lowering/builtins/ipc.js +45 -8
  512. package/dist/frontend/lowering/builtins/ipc.js.map +1 -1
  513. package/dist/frontend/lowering/builtins/json.js +284 -24
  514. package/dist/frontend/lowering/builtins/json.js.map +1 -1
  515. package/dist/frontend/lowering/builtins/key-object.js +4 -4
  516. package/dist/frontend/lowering/builtins/key-object.js.map +1 -1
  517. package/dist/frontend/lowering/builtins/module-bindings.d.ts +8 -0
  518. package/dist/frontend/lowering/builtins/module-bindings.js +71 -22
  519. package/dist/frontend/lowering/builtins/module-bindings.js.map +1 -1
  520. package/dist/frontend/lowering/builtins/module-calls.js +55 -44
  521. package/dist/frontend/lowering/builtins/module-calls.js.map +1 -1
  522. package/dist/frontend/lowering/builtins/module-resolution.d.ts +4 -3
  523. package/dist/frontend/lowering/builtins/module-resolution.js +24 -23
  524. package/dist/frontend/lowering/builtins/module-resolution.js.map +1 -1
  525. package/dist/frontend/lowering/builtins/navigator.d.ts +13 -0
  526. package/dist/frontend/lowering/builtins/navigator.js +40 -0
  527. package/dist/frontend/lowering/builtins/navigator.js.map +1 -0
  528. package/dist/frontend/lowering/builtins/net-address.d.ts +19 -0
  529. package/dist/frontend/lowering/builtins/net-address.js +156 -0
  530. package/dist/frontend/lowering/builtins/net-address.js.map +1 -0
  531. package/dist/frontend/lowering/builtins/numbers.js +25 -9
  532. package/dist/frontend/lowering/builtins/numbers.js.map +1 -1
  533. package/dist/frontend/lowering/builtins/operating-system.d.ts +4 -0
  534. package/dist/frontend/lowering/builtins/operating-system.js +25 -12
  535. package/dist/frontend/lowering/builtins/operating-system.js.map +1 -1
  536. package/dist/frontend/lowering/builtins/performance.d.ts +12 -0
  537. package/dist/frontend/lowering/builtins/performance.js +259 -8
  538. package/dist/frontend/lowering/builtins/performance.js.map +1 -1
  539. package/dist/frontend/lowering/builtins/process.d.ts +41 -1
  540. package/dist/frontend/lowering/builtins/process.js +505 -99
  541. package/dist/frontend/lowering/builtins/process.js.map +1 -1
  542. package/dist/frontend/lowering/builtins/promises.d.ts +5 -1
  543. package/dist/frontend/lowering/builtins/promises.js +326 -43
  544. package/dist/frontend/lowering/builtins/promises.js.map +1 -1
  545. package/dist/frontend/lowering/builtins/promisify-callback.d.ts +40 -0
  546. package/dist/frontend/lowering/builtins/promisify-callback.js +338 -0
  547. package/dist/frontend/lowering/builtins/promisify-callback.js.map +1 -0
  548. package/dist/frontend/lowering/builtins/properties.js +37 -1
  549. package/dist/frontend/lowering/builtins/properties.js.map +1 -1
  550. package/dist/frontend/lowering/builtins/querystring.js +14 -14
  551. package/dist/frontend/lowering/builtins/querystring.js.map +1 -1
  552. package/dist/frontend/lowering/builtins/readline.d.ts +12 -2
  553. package/dist/frontend/lowering/builtins/readline.js +136 -39
  554. package/dist/frontend/lowering/builtins/readline.js.map +1 -1
  555. package/dist/frontend/lowering/builtins/receiver-types.js +3 -5
  556. package/dist/frontend/lowering/builtins/receiver-types.js.map +1 -1
  557. package/dist/frontend/lowering/builtins/reflection.js +42 -14
  558. package/dist/frontend/lowering/builtins/reflection.js.map +1 -1
  559. package/dist/frontend/lowering/builtins/runtime-constructor.d.ts +26 -0
  560. package/dist/frontend/lowering/builtins/runtime-constructor.js +165 -0
  561. package/dist/frontend/lowering/builtins/runtime-constructor.js.map +1 -0
  562. package/dist/frontend/lowering/builtins/strings.js +101 -12
  563. package/dist/frontend/lowering/builtins/strings.js.map +1 -1
  564. package/dist/frontend/lowering/builtins/text-codecs.js +41 -38
  565. package/dist/frontend/lowering/builtins/text-codecs.js.map +1 -1
  566. package/dist/frontend/lowering/builtins/timers.js +79 -30
  567. package/dist/frontend/lowering/builtins/timers.js.map +1 -1
  568. package/dist/frontend/lowering/builtins/typed-array-members.d.ts +7 -0
  569. package/dist/frontend/lowering/builtins/typed-array-members.js +160 -0
  570. package/dist/frontend/lowering/builtins/typed-array-members.js.map +1 -0
  571. package/dist/frontend/lowering/builtins/url.d.ts +3 -0
  572. package/dist/frontend/lowering/builtins/url.js +120 -17
  573. package/dist/frontend/lowering/builtins/url.js.map +1 -1
  574. package/dist/frontend/lowering/builtins/util-types.js +20 -4
  575. package/dist/frontend/lowering/builtins/util-types.js.map +1 -1
  576. package/dist/frontend/lowering/builtins/v8.d.ts +11 -0
  577. package/dist/frontend/lowering/builtins/v8.js +105 -0
  578. package/dist/frontend/lowering/builtins/v8.js.map +1 -0
  579. package/dist/frontend/lowering/builtins/webassembly.d.ts +33 -0
  580. package/dist/frontend/lowering/builtins/webassembly.js +388 -0
  581. package/dist/frontend/lowering/builtins/webassembly.js.map +1 -0
  582. package/dist/frontend/lowering/builtins/webcrypto.d.ts +20 -0
  583. package/dist/frontend/lowering/builtins/webcrypto.js +112 -0
  584. package/dist/frontend/lowering/builtins/webcrypto.js.map +1 -0
  585. package/dist/frontend/lowering/builtins/workers.d.ts +12 -0
  586. package/dist/frontend/lowering/builtins/workers.js +193 -8
  587. package/dist/frontend/lowering/builtins/workers.js.map +1 -1
  588. package/dist/frontend/lowering/call-arguments.js +69 -14
  589. package/dist/frontend/lowering/call-arguments.js.map +1 -1
  590. package/dist/frontend/lowering/call-signatures.d.ts +23 -1
  591. package/dist/frontend/lowering/call-signatures.js +379 -55
  592. package/dist/frontend/lowering/call-signatures.js.map +1 -1
  593. package/dist/frontend/lowering/checked-promise-all.d.ts +3 -0
  594. package/dist/frontend/lowering/checked-promise-all.js +1 -1
  595. package/dist/frontend/lowering/checked-promise-all.js.map +1 -1
  596. package/dist/frontend/lowering/cjs-exports-object.d.ts +53 -0
  597. package/dist/frontend/lowering/cjs-exports-object.js +561 -0
  598. package/dist/frontend/lowering/cjs-exports-object.js.map +1 -0
  599. package/dist/frontend/lowering/cjs-inline-require.d.ts +86 -0
  600. package/dist/frontend/lowering/cjs-inline-require.js +314 -0
  601. package/dist/frontend/lowering/cjs-inline-require.js.map +1 -0
  602. package/dist/frontend/lowering/cjs-tsc-interop.d.ts +28 -0
  603. package/dist/frontend/lowering/cjs-tsc-interop.js +208 -0
  604. package/dist/frontend/lowering/cjs-tsc-interop.js.map +1 -0
  605. package/dist/frontend/lowering/class-attributes.d.ts +19 -0
  606. package/dist/frontend/lowering/class-attributes.js +378 -0
  607. package/dist/frontend/lowering/class-attributes.js.map +1 -0
  608. package/dist/frontend/lowering/class-callbacks.d.ts +3 -1
  609. package/dist/frontend/lowering/class-callbacks.js +21 -10
  610. package/dist/frontend/lowering/class-callbacks.js.map +1 -1
  611. package/dist/frontend/lowering/class-construction.js +49 -4
  612. package/dist/frontend/lowering/class-construction.js.map +1 -1
  613. package/dist/frontend/lowering/class-descriptors.d.ts +2 -0
  614. package/dist/frontend/lowering/class-descriptors.js +8 -8
  615. package/dist/frontend/lowering/class-descriptors.js.map +1 -1
  616. package/dist/frontend/lowering/class-dynamic-dispatch.d.ts +64 -0
  617. package/dist/frontend/lowering/class-dynamic-dispatch.js +1124 -90
  618. package/dist/frontend/lowering/class-dynamic-dispatch.js.map +1 -1
  619. package/dist/frontend/lowering/class-instance-constructor.js +1 -1
  620. package/dist/frontend/lowering/class-instance-constructor.js.map +1 -1
  621. package/dist/frontend/lowering/class-iterables.d.ts +11 -0
  622. package/dist/frontend/lowering/class-iterables.js +31 -0
  623. package/dist/frontend/lowering/class-iterables.js.map +1 -0
  624. package/dist/frontend/lowering/class-method-mutations.js +73 -35
  625. package/dist/frontend/lowering/class-method-mutations.js.map +1 -1
  626. package/dist/frontend/lowering/class-method-values.js +56 -10
  627. package/dist/frontend/lowering/class-method-values.js.map +1 -1
  628. package/dist/frontend/lowering/class-protocol-dispatch.js +24 -22
  629. package/dist/frontend/lowering/class-protocol-dispatch.js.map +1 -1
  630. package/dist/frontend/lowering/class-protocols.d.ts +10 -0
  631. package/dist/frontend/lowering/class-protocols.js +76 -45
  632. package/dist/frontend/lowering/class-protocols.js.map +1 -1
  633. package/dist/frontend/lowering/class-prototypes.d.ts +6 -0
  634. package/dist/frontend/lowering/class-prototypes.js +86 -19
  635. package/dist/frontend/lowering/class-prototypes.js.map +1 -1
  636. package/dist/frontend/lowering/class-runtime-statics.js +1 -1
  637. package/dist/frontend/lowering/class-runtime-statics.js.map +1 -1
  638. package/dist/frontend/lowering/class-static-data.js +2 -2
  639. package/dist/frontend/lowering/class-static-data.js.map +1 -1
  640. package/dist/frontend/lowering/class-to-primitive.d.ts +25 -0
  641. package/dist/frontend/lowering/class-to-primitive.js +264 -0
  642. package/dist/frontend/lowering/class-to-primitive.js.map +1 -0
  643. package/dist/frontend/lowering/class-unions.d.ts +25 -0
  644. package/dist/frontend/lowering/class-unions.js +102 -1
  645. package/dist/frontend/lowering/class-unions.js.map +1 -1
  646. package/dist/frontend/lowering/code-generation.d.ts +14 -0
  647. package/dist/frontend/lowering/code-generation.js +127 -0
  648. package/dist/frontend/lowering/code-generation.js.map +1 -0
  649. package/dist/frontend/lowering/coercions/fresh-spread.d.ts +13 -0
  650. package/dist/frontend/lowering/coercions/fresh-spread.js +95 -0
  651. package/dist/frontend/lowering/coercions/fresh-spread.js.map +1 -0
  652. package/dist/frontend/lowering/coercions/function-adapters.d.ts +16 -2
  653. package/dist/frontend/lowering/coercions/function-adapters.js +239 -68
  654. package/dist/frontend/lowering/coercions/function-adapters.js.map +1 -1
  655. package/dist/frontend/lowering/coercions/structural-plans.js +25 -3
  656. package/dist/frontend/lowering/coercions/structural-plans.js.map +1 -1
  657. package/dist/frontend/lowering/coercions/structural.js +35 -3
  658. package/dist/frontend/lowering/coercions/structural.js.map +1 -1
  659. package/dist/frontend/lowering/coercions/unions.d.ts +15 -0
  660. package/dist/frontend/lowering/coercions/unions.js +57 -1
  661. package/dist/frontend/lowering/coercions/unions.js.map +1 -1
  662. package/dist/frontend/lowering/collection-ingestion.js +2 -2
  663. package/dist/frontend/lowering/collection-ingestion.js.map +1 -1
  664. package/dist/frontend/lowering/collection-narrowing.js +2 -4
  665. package/dist/frontend/lowering/collection-narrowing.js.map +1 -1
  666. package/dist/frontend/lowering/construction-escapes.js +8 -8
  667. package/dist/frontend/lowering/construction-escapes.js.map +1 -1
  668. package/dist/frontend/lowering/construction-escapes.test.js +4 -4
  669. package/dist/frontend/lowering/construction-escapes.test.js.map +1 -1
  670. package/dist/frontend/lowering/constructor-returns.d.ts +61 -0
  671. package/dist/frontend/lowering/constructor-returns.js +477 -0
  672. package/dist/frontend/lowering/constructor-returns.js.map +1 -0
  673. package/dist/frontend/lowering/containers/array-callback-call.js +1 -1
  674. package/dist/frontend/lowering/containers/array-callback-call.js.map +1 -1
  675. package/dist/frontend/lowering/containers/array-callbacks.d.ts +17 -0
  676. package/dist/frontend/lowering/containers/array-callbacks.js +287 -118
  677. package/dist/frontend/lowering/containers/array-callbacks.js.map +1 -1
  678. package/dist/frontend/lowering/containers/array-concat.js +1 -1
  679. package/dist/frontend/lowering/containers/array-concat.js.map +1 -1
  680. package/dist/frontend/lowering/containers/array-construction.d.ts +0 -1
  681. package/dist/frontend/lowering/containers/array-construction.js +58 -13
  682. package/dist/frontend/lowering/containers/array-construction.js.map +1 -1
  683. package/dist/frontend/lowering/containers/array-from-async.d.ts +6 -5
  684. package/dist/frontend/lowering/containers/array-from-async.js +159 -14
  685. package/dist/frontend/lowering/containers/array-from-async.js.map +1 -1
  686. package/dist/frontend/lowering/containers/array-methods.js +94 -77
  687. package/dist/frontend/lowering/containers/array-methods.js.map +1 -1
  688. package/dist/frontend/lowering/containers/array-pipelines.js +1 -0
  689. package/dist/frontend/lowering/containers/array-pipelines.js.map +1 -1
  690. package/dist/frontend/lowering/containers/bytes.d.ts +9 -0
  691. package/dist/frontend/lowering/containers/bytes.js +649 -113
  692. package/dist/frontend/lowering/containers/bytes.js.map +1 -1
  693. package/dist/frontend/lowering/containers/callback-arguments.d.ts +9 -1
  694. package/dist/frontend/lowering/containers/callback-arguments.js +55 -5
  695. package/dist/frontend/lowering/containers/callback-arguments.js.map +1 -1
  696. package/dist/frontend/lowering/containers/collection-grouping.d.ts +7 -8
  697. package/dist/frontend/lowering/containers/collection-grouping.js +217 -26
  698. package/dist/frontend/lowering/containers/collection-grouping.js.map +1 -1
  699. package/dist/frontend/lowering/containers/collection-methods.js +126 -28
  700. package/dist/frontend/lowering/containers/collection-methods.js.map +1 -1
  701. package/dist/frontend/lowering/containers/dynamic-receivers.js +1 -1
  702. package/dist/frontend/lowering/containers/dynamic-receivers.js.map +1 -1
  703. package/dist/frontend/lowering/containers/exec-result-uses.js +2 -2
  704. package/dist/frontend/lowering/containers/exec-result-uses.js.map +1 -1
  705. package/dist/frontend/lowering/containers/for-of.d.ts +6 -0
  706. package/dist/frontend/lowering/containers/for-of.js +19 -19
  707. package/dist/frontend/lowering/containers/for-of.js.map +1 -1
  708. package/dist/frontend/lowering/containers/indexed-objects.js +142 -57
  709. package/dist/frontend/lowering/containers/indexed-objects.js.map +1 -1
  710. package/dist/frontend/lowering/containers/iterator-helpers.d.ts +53 -4
  711. package/dist/frontend/lowering/containers/iterator-helpers.js +1581 -462
  712. package/dist/frontend/lowering/containers/iterator-helpers.js.map +1 -1
  713. package/dist/frontend/lowering/containers/match-row-uses.d.ts +17 -0
  714. package/dist/frontend/lowering/containers/match-row-uses.js +264 -0
  715. package/dist/frontend/lowering/containers/match-row-uses.js.map +1 -0
  716. package/dist/frontend/lowering/containers/string-and-regexp.d.ts +14 -0
  717. package/dist/frontend/lowering/containers/string-and-regexp.js +455 -30
  718. package/dist/frontend/lowering/containers/string-and-regexp.js.map +1 -1
  719. package/dist/frontend/lowering/containers/string-replacement.js +1 -1
  720. package/dist/frontend/lowering/containers/string-replacement.js.map +1 -1
  721. package/dist/frontend/lowering/cycle-initialization.d.ts +30 -10
  722. package/dist/frontend/lowering/cycle-initialization.js +191 -35
  723. package/dist/frontend/lowering/cycle-initialization.js.map +1 -1
  724. package/dist/frontend/lowering/deferred-module-initializers.js +47 -43
  725. package/dist/frontend/lowering/deferred-module-initializers.js.map +1 -1
  726. package/dist/frontend/lowering/devirtualize.d.ts +1 -1
  727. package/dist/frontend/lowering/devirtualize.js +27 -7
  728. package/dist/frontend/lowering/devirtualize.js.map +1 -1
  729. package/dist/frontend/lowering/divergences.d.ts +0 -5
  730. package/dist/frontend/lowering/divergences.js +62 -125
  731. package/dist/frontend/lowering/divergences.js.map +1 -1
  732. package/dist/frontend/lowering/dyn-streams.d.ts +25 -0
  733. package/dist/frontend/lowering/dyn-streams.js +257 -0
  734. package/dist/frontend/lowering/dyn-streams.js.map +1 -0
  735. package/dist/frontend/lowering/error-methods.js +4 -1
  736. package/dist/frontend/lowering/error-methods.js.map +1 -1
  737. package/dist/frontend/lowering/error-name-order.d.ts +19 -0
  738. package/dist/frontend/lowering/error-name-order.js +93 -0
  739. package/dist/frontend/lowering/error-name-order.js.map +1 -0
  740. package/dist/frontend/lowering/expressions/array-literals.d.ts +21 -0
  741. package/dist/frontend/lowering/expressions/array-literals.js +723 -0
  742. package/dist/frontend/lowering/expressions/array-literals.js.map +1 -0
  743. package/dist/frontend/lowering/expressions/binary.d.ts +35 -0
  744. package/dist/frontend/lowering/expressions/binary.js +2557 -0
  745. package/dist/frontend/lowering/expressions/binary.js.map +1 -0
  746. package/dist/frontend/lowering/expressions/element-access.d.ts +31 -0
  747. package/dist/frontend/lowering/expressions/element-access.js +1804 -0
  748. package/dist/frontend/lowering/expressions/element-access.js.map +1 -0
  749. package/dist/frontend/lowering/expressions/evaluation-safety.js +4 -3
  750. package/dist/frontend/lowering/expressions/evaluation-safety.js.map +1 -1
  751. package/dist/frontend/lowering/expressions/hosted-narrowing.d.ts +38 -0
  752. package/dist/frontend/lowering/expressions/hosted-narrowing.js +160 -0
  753. package/dist/frontend/lowering/expressions/hosted-narrowing.js.map +1 -0
  754. package/dist/frontend/lowering/expressions/identifiers.d.ts +4 -0
  755. package/dist/frontend/lowering/expressions/identifiers.js +830 -0
  756. package/dist/frontend/lowering/expressions/identifiers.js.map +1 -0
  757. package/dist/frontend/lowering/expressions/keyed-field-targets.d.ts +52 -0
  758. package/dist/frontend/lowering/expressions/keyed-field-targets.js +307 -0
  759. package/dist/frontend/lowering/expressions/keyed-field-targets.js.map +1 -0
  760. package/dist/frontend/lowering/expressions/narrowing.d.ts +37 -0
  761. package/dist/frontend/lowering/expressions/narrowing.js +1337 -0
  762. package/dist/frontend/lowering/expressions/narrowing.js.map +1 -0
  763. package/dist/frontend/lowering/expressions/native-proxy.js +4 -4
  764. package/dist/frontend/lowering/expressions/native-proxy.js.map +1 -1
  765. package/dist/frontend/lowering/expressions/nullish-assignment.js +45 -0
  766. package/dist/frontend/lowering/expressions/nullish-assignment.js.map +1 -1
  767. package/dist/frontend/lowering/expressions/object-literals.d.ts +10 -0
  768. package/dist/frontend/lowering/expressions/object-literals.js +301 -86
  769. package/dist/frontend/lowering/expressions/object-literals.js.map +1 -1
  770. package/dist/frontend/lowering/expressions/optional-chains.d.ts +3 -2
  771. package/dist/frontend/lowering/expressions/optional-chains.js +103 -17
  772. package/dist/frontend/lowering/expressions/optional-chains.js.map +1 -1
  773. package/dist/frontend/lowering/expressions/property-access.d.ts +115 -0
  774. package/dist/frontend/lowering/expressions/property-access.js +3787 -0
  775. package/dist/frontend/lowering/expressions/property-access.js.map +1 -0
  776. package/dist/frontend/lowering/expressions/relational.d.ts +28 -0
  777. package/dist/frontend/lowering/expressions/relational.js +1724 -0
  778. package/dist/frontend/lowering/expressions/relational.js.map +1 -0
  779. package/dist/frontend/lowering/expressions/typeof.d.ts +22 -0
  780. package/dist/frontend/lowering/expressions/typeof.js +551 -0
  781. package/dist/frontend/lowering/expressions/typeof.js.map +1 -0
  782. package/dist/frontend/lowering/expressions/union-fields.js +1 -1
  783. package/dist/frontend/lowering/expressions/union-fields.js.map +1 -1
  784. package/dist/frontend/lowering/expressions/updates.d.ts +21 -0
  785. package/dist/frontend/lowering/expressions/updates.js +780 -0
  786. package/dist/frontend/lowering/expressions/updates.js.map +1 -0
  787. package/dist/frontend/lowering/function-context.d.ts +10 -0
  788. package/dist/frontend/lowering/function-context.js +11 -1
  789. package/dist/frontend/lowering/function-context.js.map +1 -1
  790. package/dist/frontend/lowering/function-returns.js +52 -28
  791. package/dist/frontend/lowering/function-returns.js.map +1 -1
  792. package/dist/frontend/lowering/general-streams.d.ts +25 -0
  793. package/dist/frontend/lowering/general-streams.js +108 -0
  794. package/dist/frontend/lowering/general-streams.js.map +1 -0
  795. package/dist/frontend/lowering/generator-delegation.d.ts +8 -0
  796. package/dist/frontend/lowering/generator-delegation.js +191 -1
  797. package/dist/frontend/lowering/generator-delegation.js.map +1 -1
  798. package/dist/frontend/lowering/generator-dynamic-dispatch.d.ts +7 -0
  799. package/dist/frontend/lowering/generator-dynamic-dispatch.js +172 -69
  800. package/dist/frontend/lowering/generator-dynamic-dispatch.js.map +1 -1
  801. package/dist/frontend/lowering/generic-functions.d.ts +43 -0
  802. package/dist/frontend/lowering/generic-functions.js +593 -118
  803. package/dist/frontend/lowering/generic-functions.js.map +1 -1
  804. package/dist/frontend/lowering/handle-properties.d.ts +24 -0
  805. package/dist/frontend/lowering/handle-properties.js +281 -0
  806. package/dist/frontend/lowering/handle-properties.js.map +1 -0
  807. package/dist/frontend/lowering/import-meta.js +2 -2
  808. package/dist/frontend/lowering/import-meta.js.map +1 -1
  809. package/dist/frontend/lowering/intern-tables.js +10 -9
  810. package/dist/frontend/lowering/intern-tables.js.map +1 -1
  811. package/dist/frontend/lowering/iterable-spelling.d.ts +7 -0
  812. package/dist/frontend/lowering/iterable-spelling.js +38 -0
  813. package/dist/frontend/lowering/iterable-spelling.js.map +1 -0
  814. package/dist/frontend/lowering/iterator-adapters.d.ts +19 -0
  815. package/dist/frontend/lowering/iterator-adapters.js +331 -3
  816. package/dist/frontend/lowering/iterator-adapters.js.map +1 -1
  817. package/dist/frontend/lowering/js-class-fields.d.ts +28 -0
  818. package/dist/frontend/lowering/js-class-fields.js +170 -0
  819. package/dist/frontend/lowering/js-class-fields.js.map +1 -0
  820. package/dist/frontend/lowering/js-dynamic-objects.d.ts +15 -0
  821. package/dist/frontend/lowering/js-dynamic-objects.js +299 -0
  822. package/dist/frontend/lowering/js-dynamic-objects.js.map +1 -0
  823. package/dist/frontend/lowering/js-dynamic-objects.test.d.ts +1 -0
  824. package/dist/frontend/lowering/js-dynamic-objects.test.js +35 -0
  825. package/dist/frontend/lowering/js-dynamic-objects.test.js.map +1 -0
  826. package/dist/frontend/lowering/json-require.d.ts +22 -0
  827. package/dist/frontend/lowering/json-require.js +131 -0
  828. package/dist/frontend/lowering/json-require.js.map +1 -0
  829. package/dist/frontend/lowering/key-order-witness.d.ts +44 -0
  830. package/dist/frontend/lowering/key-order-witness.js +641 -0
  831. package/dist/frontend/lowering/key-order-witness.js.map +1 -0
  832. package/dist/frontend/lowering/key-order-witness.test.d.ts +1 -0
  833. package/dist/frontend/lowering/key-order-witness.test.js +239 -0
  834. package/dist/frontend/lowering/key-order-witness.test.js.map +1 -0
  835. package/dist/frontend/lowering/lifetime-regions.js +7 -7
  836. package/dist/frontend/lowering/lifetime-regions.js.map +1 -1
  837. package/dist/frontend/lowering/lower-array-sort.d.ts +33 -15
  838. package/dist/frontend/lowering/lower-array-sort.js +117 -21
  839. package/dist/frontend/lowering/lower-array-sort.js.map +1 -1
  840. package/dist/frontend/lowering/lower-array-sort.test.js +93 -14
  841. package/dist/frontend/lowering/lower-array-sort.test.js.map +1 -1
  842. package/dist/frontend/lowering/lower-assert.js +61 -60
  843. package/dist/frontend/lowering/lower-assert.js.map +1 -1
  844. package/dist/frontend/lowering/lower-async-iteration.d.ts +10 -1
  845. package/dist/frontend/lowering/lower-async-iteration.js +34 -6
  846. package/dist/frontend/lowering/lower-async-iteration.js.map +1 -1
  847. package/dist/frontend/lowering/lower-builtin-values.d.ts +5 -0
  848. package/dist/frontend/lowering/lower-builtin-values.js +33 -3
  849. package/dist/frontend/lowering/lower-builtin-values.js.map +1 -1
  850. package/dist/frontend/lowering/lower-calls.js +1404 -448
  851. package/dist/frontend/lowering/lower-calls.js.map +1 -1
  852. package/dist/frontend/lowering/lower-classes.d.ts +54 -3
  853. package/dist/frontend/lowering/lower-classes.js +1529 -472
  854. package/dist/frontend/lowering/lower-classes.js.map +1 -1
  855. package/dist/frontend/lowering/lower-comptime.d.ts +4 -2
  856. package/dist/frontend/lowering/lower-comptime.js +111 -13
  857. package/dist/frontend/lowering/lower-comptime.js.map +1 -1
  858. package/dist/frontend/lowering/lower-console.js +13 -11
  859. package/dist/frontend/lowering/lower-console.js.map +1 -1
  860. package/dist/frontend/lowering/lower-dgram.d.ts +10 -0
  861. package/dist/frontend/lowering/lower-dgram.js +241 -21
  862. package/dist/frontend/lowering/lower-dgram.js.map +1 -1
  863. package/dist/frontend/lowering/lower-enums.js +113 -14
  864. package/dist/frontend/lowering/lower-enums.js.map +1 -1
  865. package/dist/frontend/lowering/lower-event-emitter.d.ts +16 -7
  866. package/dist/frontend/lowering/lower-event-emitter.js +258 -70
  867. package/dist/frontend/lowering/lower-event-emitter.js.map +1 -1
  868. package/dist/frontend/lowering/lower-event-target.js +2 -2
  869. package/dist/frontend/lowering/lower-event-target.js.map +1 -1
  870. package/dist/frontend/lowering/lower-expando.js +17 -13
  871. package/dist/frontend/lowering/lower-expando.js.map +1 -1
  872. package/dist/frontend/lowering/lower-exprs.d.ts +188 -186
  873. package/dist/frontend/lowering/lower-exprs.js +1509 -12486
  874. package/dist/frontend/lowering/lower-exprs.js.map +1 -1
  875. package/dist/frontend/lowering/lower-functions.js +72 -22
  876. package/dist/frontend/lowering/lower-functions.js.map +1 -1
  877. package/dist/frontend/lowering/lower-generators.d.ts +6 -0
  878. package/dist/frontend/lowering/lower-generators.js +39 -20
  879. package/dist/frontend/lowering/lower-generators.js.map +1 -1
  880. package/dist/frontend/lowering/lower-global-value.js +5 -1
  881. package/dist/frontend/lowering/lower-global-value.js.map +1 -1
  882. package/dist/frontend/lowering/lower-inspect.js +900 -107
  883. package/dist/frontend/lowering/lower-inspect.js.map +1 -1
  884. package/dist/frontend/lowering/lower-mixins.js +23 -20
  885. package/dist/frontend/lowering/lower-mixins.js.map +1 -1
  886. package/dist/frontend/lowering/lower-mock.d.ts +8 -1
  887. package/dist/frontend/lowering/lower-mock.js +185 -18
  888. package/dist/frontend/lowering/lower-mock.js.map +1 -1
  889. package/dist/frontend/lowering/lower-modules.d.ts +11 -3
  890. package/dist/frontend/lowering/lower-modules.js +445 -94
  891. package/dist/frontend/lowering/lower-modules.js.map +1 -1
  892. package/dist/frontend/lowering/lower-namespaces.d.ts +6 -0
  893. package/dist/frontend/lowering/lower-namespaces.js +65 -33
  894. package/dist/frontend/lowering/lower-namespaces.js.map +1 -1
  895. package/dist/frontend/lowering/lower-node-module.d.ts +16 -0
  896. package/dist/frontend/lowering/lower-node-module.js +147 -14
  897. package/dist/frontend/lowering/lower-node-module.js.map +1 -1
  898. package/dist/frontend/lowering/lower-server.d.ts +6 -6
  899. package/dist/frontend/lowering/lower-server.js +514 -101
  900. package/dist/frontend/lowering/lower-server.js.map +1 -1
  901. package/dist/frontend/lowering/lower-stdlib.d.ts +4 -0
  902. package/dist/frontend/lowering/lower-stdlib.js +179 -118
  903. package/dist/frontend/lowering/lower-stdlib.js.map +1 -1
  904. package/dist/frontend/lowering/lower-stmts.d.ts +30 -7
  905. package/dist/frontend/lowering/lower-stmts.js +1950 -433
  906. package/dist/frontend/lowering/lower-stmts.js.map +1 -1
  907. package/dist/frontend/lowering/lower-stream.d.ts +3 -0
  908. package/dist/frontend/lowering/lower-stream.js +398 -56
  909. package/dist/frontend/lowering/lower-stream.js.map +1 -1
  910. package/dist/frontend/lowering/lower-test.d.ts +3 -0
  911. package/dist/frontend/lowering/lower-test.js +437 -62
  912. package/dist/frontend/lowering/lower-test.js.map +1 -1
  913. package/dist/frontend/lowering/lower-timers.js +96 -32
  914. package/dist/frontend/lowering/lower-timers.js.map +1 -1
  915. package/dist/frontend/lowering/lower-url.js +1 -1
  916. package/dist/frontend/lowering/lower-url.js.map +1 -1
  917. package/dist/frontend/lowering/lowerer.d.ts +424 -27
  918. package/dist/frontend/lowering/lowerer.js +2062 -310
  919. package/dist/frontend/lowering/lowerer.js.map +1 -1
  920. package/dist/frontend/lowering/lowerer.test.js +10 -4
  921. package/dist/frontend/lowering/lowerer.test.js.map +1 -1
  922. package/dist/frontend/lowering/maybe-promise.d.ts +46 -0
  923. package/dist/frontend/lowering/maybe-promise.js +249 -0
  924. package/dist/frontend/lowering/maybe-promise.js.map +1 -0
  925. package/dist/frontend/lowering/module-member-this.d.ts +3 -0
  926. package/dist/frontend/lowering/module-member-this.js +262 -0
  927. package/dist/frontend/lowering/module-member-this.js.map +1 -0
  928. package/dist/frontend/lowering/module-namespace-elements.js +1 -1
  929. package/dist/frontend/lowering/module-namespace-elements.js.map +1 -1
  930. package/dist/frontend/lowering/nan-coded-reads.d.ts +3 -0
  931. package/dist/frontend/lowering/nan-coded-reads.js +45 -32
  932. package/dist/frontend/lowering/nan-coded-reads.js.map +1 -1
  933. package/dist/frontend/lowering/narrowing-stability.d.ts +18 -3
  934. package/dist/frontend/lowering/narrowing-stability.js +104 -32
  935. package/dist/frontend/lowering/narrowing-stability.js.map +1 -1
  936. package/dist/frontend/lowering/native-ffi.js +11 -11
  937. package/dist/frontend/lowering/native-ffi.js.map +1 -1
  938. package/dist/frontend/lowering/object-factory-new.js +6 -8
  939. package/dist/frontend/lowering/object-factory-new.js.map +1 -1
  940. package/dist/frontend/lowering/private-brands.d.ts +46 -0
  941. package/dist/frontend/lowering/private-brands.js +265 -0
  942. package/dist/frontend/lowering/private-brands.js.map +1 -0
  943. package/dist/frontend/lowering/promise-executor-adapter.d.ts +11 -0
  944. package/dist/frontend/lowering/promise-executor-adapter.js +87 -0
  945. package/dist/frontend/lowering/promise-executor-adapter.js.map +1 -0
  946. package/dist/frontend/lowering/rebindable-functions.d.ts +8 -0
  947. package/dist/frontend/lowering/rebindable-functions.js +54 -0
  948. package/dist/frontend/lowering/rebindable-functions.js.map +1 -0
  949. package/dist/frontend/lowering/require-initialization.d.ts +32 -0
  950. package/dist/frontend/lowering/require-initialization.js +246 -0
  951. package/dist/frontend/lowering/require-initialization.js.map +1 -0
  952. package/dist/frontend/lowering/runtime-optional-bounds.js +7 -7
  953. package/dist/frontend/lowering/runtime-optional-bounds.js.map +1 -1
  954. package/dist/frontend/lowering/runtime-optional-elements.js +12 -12
  955. package/dist/frontend/lowering/runtime-optional-elements.js.map +1 -1
  956. package/dist/frontend/lowering/runtime-optional-guards.js +10 -10
  957. package/dist/frontend/lowering/runtime-optional-guards.js.map +1 -1
  958. package/dist/frontend/lowering/runtime-optional-guards.test.js +1 -1
  959. package/dist/frontend/lowering/runtime-optional-guards.test.js.map +1 -1
  960. package/dist/frontend/lowering/runtime-optional-ownership.js +10 -9
  961. package/dist/frontend/lowering/runtime-optional-ownership.js.map +1 -1
  962. package/dist/frontend/lowering/runtime-optional-provenance.js +2 -2
  963. package/dist/frontend/lowering/runtime-optional-provenance.js.map +1 -1
  964. package/dist/frontend/lowering/runtime-optional-records.d.ts +35 -0
  965. package/dist/frontend/lowering/runtime-optional-records.js +205 -32
  966. package/dist/frontend/lowering/runtime-optional-records.js.map +1 -1
  967. package/dist/frontend/lowering/runtime-optional-records.test.js +19 -1
  968. package/dist/frontend/lowering/runtime-optional-records.test.js.map +1 -1
  969. package/dist/frontend/lowering/sanitize-class-types.test.js +2 -2
  970. package/dist/frontend/lowering/split-consumers.js +4 -4
  971. package/dist/frontend/lowering/split-consumers.js.map +1 -1
  972. package/dist/frontend/lowering/static-function-names.d.ts +28 -0
  973. package/dist/frontend/lowering/static-function-names.js +212 -0
  974. package/dist/frontend/lowering/static-function-names.js.map +1 -0
  975. package/dist/frontend/lowering/static-this.js +6 -6
  976. package/dist/frontend/lowering/static-this.js.map +1 -1
  977. package/dist/frontend/lowering/static-typeof.d.ts +26 -0
  978. package/dist/frontend/lowering/static-typeof.js +133 -0
  979. package/dist/frontend/lowering/static-typeof.js.map +1 -0
  980. package/dist/frontend/lowering/strict-mode.d.ts +5 -0
  981. package/dist/frontend/lowering/strict-mode.js +31 -0
  982. package/dist/frontend/lowering/strict-mode.js.map +1 -0
  983. package/dist/frontend/lowering/string-index-bounds.js +13 -12
  984. package/dist/frontend/lowering/string-index-bounds.js.map +1 -1
  985. package/dist/frontend/lowering/string-index.d.ts +12 -0
  986. package/dist/frontend/lowering/string-index.js +72 -1
  987. package/dist/frontend/lowering/string-index.js.map +1 -1
  988. package/dist/frontend/lowering/surfaces.d.ts +12 -3
  989. package/dist/frontend/lowering/surfaces.js +282 -45
  990. package/dist/frontend/lowering/surfaces.js.map +1 -1
  991. package/dist/frontend/lowering/symbol-fields.d.ts +7 -0
  992. package/dist/frontend/lowering/symbol-fields.js +204 -36
  993. package/dist/frontend/lowering/symbol-fields.js.map +1 -1
  994. package/dist/frontend/lowering/symbol-methods.d.ts +2 -1
  995. package/dist/frontend/lowering/symbol-methods.js +24 -6
  996. package/dist/frontend/lowering/symbol-methods.js.map +1 -1
  997. package/dist/frontend/lowering/thenables.d.ts +16 -0
  998. package/dist/frontend/lowering/thenables.js +124 -0
  999. package/dist/frontend/lowering/thenables.js.map +1 -0
  1000. package/dist/frontend/lowering/thread-slots.d.ts +13 -0
  1001. package/dist/frontend/lowering/thread-slots.js +208 -0
  1002. package/dist/frontend/lowering/thread-slots.js.map +1 -0
  1003. package/dist/frontend/lowering/typed-arguments.d.ts +74 -0
  1004. package/dist/frontend/lowering/typed-arguments.js +472 -0
  1005. package/dist/frontend/lowering/typed-arguments.js.map +1 -0
  1006. package/dist/frontend/lowering/union-retag.d.ts +8 -0
  1007. package/dist/frontend/lowering/union-retag.js +27 -0
  1008. package/dist/frontend/lowering/union-retag.js.map +1 -1
  1009. package/dist/frontend/lowering/union-retag.test.js +24 -1
  1010. package/dist/frontend/lowering/union-retag.test.js.map +1 -1
  1011. package/dist/frontend/lowering/var-hoisting.js +6 -6
  1012. package/dist/frontend/lowering/var-hoisting.js.map +1 -1
  1013. package/dist/frontend/lowering/width-lift.d.ts +4 -0
  1014. package/dist/frontend/mock-shapes.js +13 -6
  1015. package/dist/frontend/mock-shapes.js.map +1 -1
  1016. package/dist/frontend/module-source-candidates.js +1 -1
  1017. package/dist/frontend/module-source-candidates.js.map +1 -1
  1018. package/dist/frontend/module-source-candidates.test.js +2 -1
  1019. package/dist/frontend/module-source-candidates.test.js.map +1 -1
  1020. package/dist/frontend/module-syntax.js +8 -8
  1021. package/dist/frontend/module-syntax.js.map +1 -1
  1022. package/dist/frontend/npm-static-builtin-aliases.d.ts +8 -0
  1023. package/dist/frontend/npm-static-builtin-aliases.js +65 -0
  1024. package/dist/frontend/npm-static-builtin-aliases.js.map +1 -0
  1025. package/dist/frontend/npm-static-bundled-chunks.d.ts +58 -0
  1026. package/dist/frontend/npm-static-bundled-chunks.js +981 -0
  1027. package/dist/frontend/npm-static-bundled-chunks.js.map +1 -0
  1028. package/dist/frontend/npm-static-bundled-chunks.test.d.ts +1 -0
  1029. package/dist/frontend/npm-static-bundled-chunks.test.js +399 -0
  1030. package/dist/frontend/npm-static-bundled-chunks.test.js.map +1 -0
  1031. package/dist/frontend/npm-static-bundled-cjs.js +24 -23
  1032. package/dist/frontend/npm-static-bundled-cjs.js.map +1 -1
  1033. package/dist/frontend/npm-static-bundled-esm.d.ts +9 -0
  1034. package/dist/frontend/npm-static-bundled-esm.js +988 -0
  1035. package/dist/frontend/npm-static-bundled-esm.js.map +1 -0
  1036. package/dist/frontend/npm-static-bundled-esm.test.d.ts +1 -0
  1037. package/dist/frontend/npm-static-bundled-esm.test.js +336 -0
  1038. package/dist/frontend/npm-static-bundled-esm.test.js.map +1 -0
  1039. package/dist/frontend/npm-static-cjs-exports-alias.d.ts +2 -0
  1040. package/dist/frontend/npm-static-cjs-exports-alias.js +186 -0
  1041. package/dist/frontend/npm-static-cjs-exports-alias.js.map +1 -0
  1042. package/dist/frontend/npm-static-cjs-exports-alias.test.d.ts +1 -0
  1043. package/dist/frontend/npm-static-cjs-exports-alias.test.js +73 -0
  1044. package/dist/frontend/npm-static-cjs-exports-alias.test.js.map +1 -0
  1045. package/dist/frontend/npm-static-cjs-exports-var.d.ts +2 -0
  1046. package/dist/frontend/npm-static-cjs-exports-var.js +236 -0
  1047. package/dist/frontend/npm-static-cjs-exports-var.js.map +1 -0
  1048. package/dist/frontend/npm-static-declaration-syntax.js +102 -101
  1049. package/dist/frontend/npm-static-declaration-syntax.js.map +1 -1
  1050. package/dist/frontend/npm-static-enum-iife.d.ts +6 -0
  1051. package/dist/frontend/npm-static-enum-iife.js +280 -0
  1052. package/dist/frontend/npm-static-enum-iife.js.map +1 -0
  1053. package/dist/frontend/npm-static-enum-iife.test.d.ts +1 -0
  1054. package/dist/frontend/npm-static-enum-iife.test.js +116 -0
  1055. package/dist/frontend/npm-static-enum-iife.test.js.map +1 -0
  1056. package/dist/frontend/npm-static-prune.js +36 -24
  1057. package/dist/frontend/npm-static-prune.js.map +1 -1
  1058. package/dist/frontend/npm-static-rewrite-host.d.ts +4 -1
  1059. package/dist/frontend/npm-static-rewrite-host.js +14 -3
  1060. package/dist/frontend/npm-static-rewrite-host.js.map +1 -1
  1061. package/dist/frontend/npm-static-rewrite-syntax.d.ts +19 -0
  1062. package/dist/frontend/npm-static-rewrite-syntax.js +274 -101
  1063. package/dist/frontend/npm-static-rewrite-syntax.js.map +1 -1
  1064. package/dist/frontend/npm-static-subtyping.js +7 -9
  1065. package/dist/frontend/npm-static-subtyping.js.map +1 -1
  1066. package/dist/frontend/npm-static.d.ts +25 -1
  1067. package/dist/frontend/npm-static.js +212 -16
  1068. package/dist/frontend/npm-static.js.map +1 -1
  1069. package/dist/frontend/npm-static.test.js +22 -1
  1070. package/dist/frontend/npm-static.test.js.map +1 -1
  1071. package/dist/frontend/npm.js +13 -0
  1072. package/dist/frontend/npm.js.map +1 -1
  1073. package/dist/frontend/package-shims.d.ts +47 -0
  1074. package/dist/frontend/package-shims.js +300 -0
  1075. package/dist/frontend/package-shims.js.map +1 -0
  1076. package/dist/frontend/pipeline.js +230 -26
  1077. package/dist/frontend/pipeline.js.map +1 -1
  1078. package/dist/frontend/pipeline.test.js +22 -1
  1079. package/dist/frontend/pipeline.test.js.map +1 -1
  1080. package/dist/frontend/program-analysis.d.ts +6 -1
  1081. package/dist/frontend/program-analysis.js +7 -0
  1082. package/dist/frontend/program-analysis.js.map +1 -1
  1083. package/dist/frontend/program.d.ts +100 -2
  1084. package/dist/frontend/program.js +1627 -262
  1085. package/dist/frontend/program.js.map +1 -1
  1086. package/dist/frontend/program.test.js +76 -6
  1087. package/dist/frontend/program.test.js.map +1 -1
  1088. package/dist/frontend/resolve.js +49 -2
  1089. package/dist/frontend/resolve.js.map +1 -1
  1090. package/dist/frontend/resolve.test.js +49 -0
  1091. package/dist/frontend/resolve.test.js.map +1 -1
  1092. package/dist/frontend/services.d.ts +26 -1
  1093. package/dist/frontend/services.js +59 -3
  1094. package/dist/frontend/services.js.map +1 -1
  1095. package/dist/frontend/services.test.js +2 -1
  1096. package/dist/frontend/services.test.js.map +1 -1
  1097. package/dist/frontend/threads-import.js +1 -1
  1098. package/dist/frontend/threads-import.js.map +1 -1
  1099. package/dist/frontend/tier-analysis.d.ts +71 -0
  1100. package/dist/frontend/tier-analysis.js +522 -0
  1101. package/dist/frontend/tier-analysis.js.map +1 -0
  1102. package/dist/frontend/ts7/api-conformance.d.ts +234 -0
  1103. package/dist/frontend/ts7/api-conformance.js +7 -0
  1104. package/dist/frontend/ts7/api-conformance.js.map +1 -0
  1105. package/dist/frontend/ts7/ast-guards.generated.js +2 -1
  1106. package/dist/frontend/ts7/ast-guards.generated.js.map +1 -1
  1107. package/dist/frontend/ts7/ast-node.d.ts +47 -25
  1108. package/dist/frontend/ts7/ast-node.js +64 -18
  1109. package/dist/frontend/ts7/ast-node.js.map +1 -1
  1110. package/dist/frontend/ts7/ast-node.test.js +36 -12
  1111. package/dist/frontend/ts7/ast-node.test.js.map +1 -1
  1112. package/dist/frontend/ts7/ast-types.d.ts +10 -3
  1113. package/dist/frontend/ts7/ast-types.generated.d.ts +39 -39
  1114. package/dist/frontend/ts7/ast.d.ts +1 -0
  1115. package/dist/frontend/ts7/ast.js +3 -2
  1116. package/dist/frontend/ts7/ast.js.map +1 -1
  1117. package/dist/frontend/ts7/checker-backend.d.ts +23 -0
  1118. package/dist/frontend/ts7/checker-backend.js +88 -0
  1119. package/dist/frontend/ts7/checker-backend.js.map +1 -0
  1120. package/dist/frontend/ts7/checker-backend.test.d.ts +1 -0
  1121. package/dist/frontend/ts7/checker-backend.test.js +63 -0
  1122. package/dist/frontend/ts7/checker-backend.test.js.map +1 -0
  1123. package/dist/frontend/ts7/checker-cache.d.ts +0 -3
  1124. package/dist/frontend/ts7/checker-cache.js +0 -6
  1125. package/dist/frontend/ts7/checker-cache.js.map +1 -1
  1126. package/dist/frontend/ts7/checker.d.ts +18 -11
  1127. package/dist/frontend/ts7/checker.js +42 -55
  1128. package/dist/frontend/ts7/checker.js.map +1 -1
  1129. package/dist/frontend/ts7/checker.test.js +10 -7
  1130. package/dist/frontend/ts7/checker.test.js.map +1 -1
  1131. package/dist/frontend/ts7/diagnostic.d.ts +19 -0
  1132. package/dist/frontend/ts7/diagnostic.js +22 -0
  1133. package/dist/frontend/ts7/diagnostic.js.map +1 -0
  1134. package/dist/frontend/ts7/node-functions.d.ts +8 -0
  1135. package/dist/frontend/ts7/node-functions.js +18 -0
  1136. package/dist/frontend/ts7/node-functions.js.map +1 -0
  1137. package/dist/frontend/ts7/program-host.d.ts +10 -5
  1138. package/dist/frontend/ts7/program-host.js +19 -0
  1139. package/dist/frontend/ts7/program-host.js.map +1 -1
  1140. package/dist/frontend/ts7/rpc-api.d.ts +5 -1
  1141. package/dist/frontend/ts7/rpc-api.js +8 -1
  1142. package/dist/frontend/ts7/rpc-api.js.map +1 -1
  1143. package/dist/frontend/ts7/semantic-checker.d.ts +13 -6
  1144. package/dist/frontend/ts7/semantic-checker.js +26 -8
  1145. package/dist/frontend/ts7/semantic-checker.js.map +1 -1
  1146. package/dist/frontend/ts7/semantic-checker.test.js +12 -9
  1147. package/dist/frontend/ts7/semantic-checker.test.js.map +1 -1
  1148. package/dist/frontend/ts7/semantic-model.d.ts +57 -24
  1149. package/dist/frontend/ts7/semantic-model.js +114 -16
  1150. package/dist/frontend/ts7/semantic-model.js.map +1 -1
  1151. package/dist/frontend/ts7/semantic-model.test.js +4 -4
  1152. package/dist/frontend/ts7/semantic-model.test.js.map +1 -1
  1153. package/dist/frontend/ts7/semantic-types.d.ts +7 -3
  1154. package/dist/frontend/ts7/semantic-types.js +1 -1
  1155. package/dist/frontend/ts7/semantic-types.js.map +1 -1
  1156. package/dist/frontend/ts7/session.d.ts +30 -15
  1157. package/dist/frontend/ts7/session.js +8 -5
  1158. package/dist/frontend/ts7/session.js.map +1 -1
  1159. package/dist/frontend/ts7/session.test.js +9 -5
  1160. package/dist/frontend/ts7/session.test.js.map +1 -1
  1161. package/dist/frontend/ts7/source-parser.d.ts +6 -2
  1162. package/dist/frontend/ts7/source-parser.js +24 -3
  1163. package/dist/frontend/ts7/source-parser.js.map +1 -1
  1164. package/dist/frontend/ts7/source-parser.test.js +38 -17
  1165. package/dist/frontend/ts7/source-parser.test.js.map +1 -1
  1166. package/dist/frontend/type-mapper.d.ts +122 -2
  1167. package/dist/frontend/type-mapper.js +2735 -723
  1168. package/dist/frontend/type-mapper.js.map +1 -1
  1169. package/dist/frontend/type-only-imports.d.ts +28 -0
  1170. package/dist/frontend/type-only-imports.js +122 -0
  1171. package/dist/frontend/type-only-imports.js.map +1 -0
  1172. package/dist/frontend/worker-target.js +8 -8
  1173. package/dist/frontend/worker-target.js.map +1 -1
  1174. package/dist/index.d.ts +4 -1
  1175. package/dist/index.js +87 -8
  1176. package/dist/index.js.map +1 -1
  1177. package/dist/ir/analysis.js +4 -2
  1178. package/dist/ir/analysis.js.map +1 -1
  1179. package/dist/ir/api.d.ts +1 -1
  1180. package/dist/ir/api.js +1 -1
  1181. package/dist/ir/api.js.map +1 -1
  1182. package/dist/ir/array-length-stability.d.ts +31 -0
  1183. package/dist/ir/array-length-stability.js +249 -0
  1184. package/dist/ir/array-length-stability.js.map +1 -0
  1185. package/dist/ir/array-length-stability.test.d.ts +1 -0
  1186. package/dist/ir/array-length-stability.test.js +134 -0
  1187. package/dist/ir/array-length-stability.test.js.map +1 -0
  1188. package/dist/ir/build.d.ts +2 -2
  1189. package/dist/ir/build.js +1 -1
  1190. package/dist/ir/build.js.map +1 -1
  1191. package/dist/ir/builtin-effects.js +116 -0
  1192. package/dist/ir/builtin-effects.js.map +1 -1
  1193. package/dist/ir/builtin-signatures.d.ts +1 -1
  1194. package/dist/ir/builtin-signatures.js +540 -29
  1195. package/dist/ir/builtin-signatures.js.map +1 -1
  1196. package/dist/ir/byte-numbers.js +3 -0
  1197. package/dist/ir/byte-numbers.js.map +1 -1
  1198. package/dist/ir/callback-specialization.d.ts +37 -0
  1199. package/dist/ir/callback-specialization.js +459 -0
  1200. package/dist/ir/callback-specialization.js.map +1 -0
  1201. package/dist/ir/callback-specialization.test.d.ts +1 -0
  1202. package/dist/ir/callback-specialization.test.js +208 -0
  1203. package/dist/ir/callback-specialization.test.js.map +1 -0
  1204. package/dist/ir/capture-values.d.ts +0 -1
  1205. package/dist/ir/capture-values.js +51 -40
  1206. package/dist/ir/capture-values.js.map +1 -1
  1207. package/dist/ir/constant-globals.test.js +1 -1
  1208. package/dist/ir/constant-tables.test.js +1 -1
  1209. package/dist/ir/field-values.test.js +1 -1
  1210. package/dist/ir/final-fields.test.js +1 -1
  1211. package/dist/ir/function-references.test.js +9 -1
  1212. package/dist/ir/function-references.test.js.map +1 -1
  1213. package/dist/ir/init-only-globals.test.js +1 -1
  1214. package/dist/ir/initializer-bindings.test.js +1 -1
  1215. package/dist/ir/int32-slots.d.ts +14 -0
  1216. package/dist/ir/int32-slots.js +97 -14
  1217. package/dist/ir/int32-slots.js.map +1 -1
  1218. package/dist/ir/int32-slots.test.js +1 -1
  1219. package/dist/ir/integer-loop-facts.d.ts +7 -0
  1220. package/dist/ir/integer-loop-facts.js +103 -17
  1221. package/dist/ir/integer-loop-facts.js.map +1 -1
  1222. package/dist/ir/integer-loops.d.ts +1 -1
  1223. package/dist/ir/integer-loops.js +39 -9
  1224. package/dist/ir/integer-loops.js.map +1 -1
  1225. package/dist/ir/integer-loops.test.js +104 -0
  1226. package/dist/ir/integer-loops.test.js.map +1 -1
  1227. package/dist/ir/integer-ranges.d.ts +13 -1
  1228. package/dist/ir/integer-ranges.js +125 -26
  1229. package/dist/ir/integer-ranges.js.map +1 -1
  1230. package/dist/ir/integer-ranges.test.js +273 -2
  1231. package/dist/ir/integer-ranges.test.js.map +1 -1
  1232. package/dist/ir/intrinsic-signatures.js +6 -0
  1233. package/dist/ir/intrinsic-signatures.js.map +1 -1
  1234. package/dist/ir/ir.d.ts +221 -58
  1235. package/dist/ir/ir.js +127 -12
  1236. package/dist/ir/ir.js.map +1 -1
  1237. package/dist/ir/ir.test.js +10 -0
  1238. package/dist/ir/ir.test.js.map +1 -1
  1239. package/dist/ir/js-ic.d.ts +52 -0
  1240. package/dist/ir/js-ic.js +199 -0
  1241. package/dist/ir/js-ic.js.map +1 -0
  1242. package/dist/ir/js-ic.test.d.ts +1 -0
  1243. package/dist/ir/js-ic.test.js +148 -0
  1244. package/dist/ir/js-ic.test.js.map +1 -0
  1245. package/dist/ir/jsval.d.ts +8 -0
  1246. package/dist/ir/jsval.js +399 -0
  1247. package/dist/ir/jsval.js.map +1 -0
  1248. package/dist/ir/jsval.test.d.ts +1 -0
  1249. package/dist/ir/jsval.test.js +239 -0
  1250. package/dist/ir/jsval.test.js.map +1 -0
  1251. package/dist/ir/runtime-features.d.ts +183 -33
  1252. package/dist/ir/runtime-features.js +795 -422
  1253. package/dist/ir/runtime-features.js.map +1 -1
  1254. package/dist/ir/scalar-records.test.js +1 -1
  1255. package/dist/ir/self-captures.d.ts +33 -0
  1256. package/dist/ir/self-captures.js +245 -0
  1257. package/dist/ir/self-captures.js.map +1 -0
  1258. package/dist/ir/self-captures.test.d.ts +1 -0
  1259. package/dist/ir/self-captures.test.js +135 -0
  1260. package/dist/ir/self-captures.test.js.map +1 -0
  1261. package/dist/ir/serialize.d.ts +1 -1
  1262. package/dist/ir/serialize.js +7 -4
  1263. package/dist/ir/serialize.js.map +1 -1
  1264. package/dist/ir/tiers.d.ts +26 -0
  1265. package/dist/ir/tiers.js +101 -0
  1266. package/dist/ir/tiers.js.map +1 -0
  1267. package/dist/ir/tiers.test.d.ts +1 -0
  1268. package/dist/ir/tiers.test.js +140 -0
  1269. package/dist/ir/tiers.test.js.map +1 -0
  1270. package/dist/ir/traverse.js +201 -150
  1271. package/dist/ir/traverse.js.map +1 -1
  1272. package/dist/ir/traverse.test.js +33 -30
  1273. package/dist/ir/traverse.test.js.map +1 -1
  1274. package/dist/ir/unshare.js +65 -3
  1275. package/dist/ir/unshare.js.map +1 -1
  1276. package/dist/ir/unshare.test.js +1 -1
  1277. package/dist/ir/validate.js +196 -76
  1278. package/dist/ir/validate.js.map +1 -1
  1279. package/dist/ir/validate.test.js +41 -11
  1280. package/dist/ir/validate.test.js.map +1 -1
  1281. package/dist/library/fence-eval.test.js +1 -1
  1282. package/dist/library/int-infer.test.js +4 -4
  1283. package/dist/library/ir-policy.js +14 -0
  1284. package/dist/library/ir-policy.js.map +1 -1
  1285. package/dist/library/library-cache.d.ts +1 -0
  1286. package/dist/library/library-cache.js.map +1 -1
  1287. package/dist/library/library-cache.test.js +5 -5
  1288. package/dist/library/library-profile.d.ts +4 -4
  1289. package/dist/library/library-profile.js +35 -7
  1290. package/dist/library/library-profile.js.map +1 -1
  1291. package/dist/library/prepare.js +13 -1
  1292. package/dist/library/prepare.js.map +1 -1
  1293. package/dist/native/cli.js +22 -0
  1294. package/dist/native/cli.js.map +1 -1
  1295. package/dist/native/compiler.js +35 -6
  1296. package/dist/native/compiler.js.map +1 -1
  1297. package/dist/native/compiler.test.js +2 -2
  1298. package/dist/native/executable-cache.js +3 -0
  1299. package/dist/native/executable-cache.js.map +1 -1
  1300. package/dist/native/prepare.js +10 -0
  1301. package/dist/native/prepare.js.map +1 -1
  1302. package/dist/native/sanitizer.test.js +19 -0
  1303. package/dist/native/sanitizer.test.js.map +1 -1
  1304. package/dist/native/toolchain.d.ts +2 -0
  1305. package/dist/native/toolchain.js +10 -1
  1306. package/dist/native/toolchain.js.map +1 -1
  1307. package/dist/native/toolchain.test.js +39 -1
  1308. package/dist/native/toolchain.test.js.map +1 -1
  1309. package/dist/startup-cache.d.ts +1 -0
  1310. package/dist/startup-cache.js +1 -0
  1311. package/dist/startup-cache.js.map +1 -1
  1312. package/dist/wasm/base64.d.ts +5 -0
  1313. package/dist/wasm/base64.js +62 -0
  1314. package/dist/wasm/base64.js.map +1 -0
  1315. package/dist/wasm/binary.d.ts +36 -0
  1316. package/dist/wasm/binary.js +1976 -0
  1317. package/dist/wasm/binary.js.map +1 -0
  1318. package/dist/wasm/binary.test.d.ts +1 -0
  1319. package/dist/wasm/binary.test.js +190 -0
  1320. package/dist/wasm/binary.test.js.map +1 -0
  1321. package/dist/wasm/discover.d.ts +38 -0
  1322. package/dist/wasm/discover.js +377 -0
  1323. package/dist/wasm/discover.js.map +1 -0
  1324. package/dist/wasm/discover.test.d.ts +1 -0
  1325. package/dist/wasm/discover.test.js +24 -0
  1326. package/dist/wasm/discover.test.js.map +1 -0
  1327. package/dist/wasm/module.d.ts +151 -0
  1328. package/dist/wasm/module.js +575 -0
  1329. package/dist/wasm/module.js.map +1 -0
  1330. package/dist/wasm/translate.d.ts +48 -0
  1331. package/dist/wasm/translate.js +2129 -0
  1332. package/dist/wasm/translate.js.map +1 -0
  1333. package/dist/wasm/translate.test.d.ts +1 -0
  1334. package/dist/wasm/translate.test.js +207 -0
  1335. package/dist/wasm/translate.test.js.map +1 -0
  1336. package/package.json +22 -20
  1337. package/shims/fs-extra/core/api.ts +1192 -0
  1338. package/shims/fs-extra/index.ts +9 -0
  1339. package/shims/undici/core/agent.ts +163 -0
  1340. package/shims/undici/core/api.ts +93 -0
  1341. package/shims/undici/core/client.ts +1304 -0
  1342. package/shims/undici/core/connector.ts +157 -0
  1343. package/shims/undici/core/diagnostics-types.ts +68 -0
  1344. package/shims/undici/core/diagnostics.ts +16 -0
  1345. package/shims/undici/core/dispatcher.ts +574 -0
  1346. package/shims/undici/core/errors-v5.ts +22 -0
  1347. package/shims/undici/core/errors-v7.ts +25 -0
  1348. package/shims/undici/core/errors.ts +255 -0
  1349. package/shims/undici/core/fetch.ts +635 -0
  1350. package/shims/undici/core/pool.ts +280 -0
  1351. package/shims/undici/core/readable.ts +268 -0
  1352. package/shims/undici/core/request.ts +313 -0
  1353. package/shims/undici/core/timers.ts +80 -0
  1354. package/shims/undici/core/types.ts +167 -0
  1355. package/shims/undici/core/util.ts +67 -0
  1356. package/shims/undici/v5.ts +119 -0
  1357. package/shims/undici/v7.ts +119 -0
  1358. package/surface-manifest.json +304 -22
@@ -0,0 +1,1304 @@
1
+ // undici's Client (lib/dispatcher/client.js + client-h1.js): HTTP/1.1 over
2
+ // one TCP/TLS connection at a time, with keep-alive reuse, a request queue,
3
+ // headers/body/idle timeouts and the same request lifecycle callbacks.
4
+ import type { Socket } from "node:net";
5
+ import { buildConnector } from "./connector.ts";
6
+ import { channels } from "./diagnostics.ts";
7
+ import { DispatcherBase } from "./dispatcher.ts";
8
+ import type { Dispatcher } from "./dispatcher.ts";
9
+ import {
10
+ BodyTimeoutError,
11
+ HeadersOverflowError,
12
+ HeadersTimeoutError,
13
+ HTTPParserError,
14
+ InformationalError,
15
+ InvalidArgumentError,
16
+ NotSupportedError,
17
+ RequestAbortedError,
18
+ RequestContentLengthMismatchError,
19
+ ResponseContentLengthMismatchError,
20
+ ResponseExceededMaxSizeError,
21
+ SocketError,
22
+ UndiciError,
23
+ } from "./errors.ts";
24
+ import type { SocketInfo } from "./errors.ts";
25
+ import { Request } from "./request.ts";
26
+ import { FastTimer } from "./timers.ts";
27
+ import { parseKeepAliveTimeout, parseOrigin } from "./util.ts";
28
+ import type {
29
+ ClientOptions,
30
+ Connector,
31
+ ConnectorOptions,
32
+ DispatchHandlers,
33
+ DispatchOptions,
34
+ Profile,
35
+ } from "./types.ts";
36
+
37
+ const TIMEOUT_NONE = 0;
38
+ const TIMEOUT_HEADERS = 1;
39
+ const TIMEOUT_BODY = 2;
40
+ const TIMEOUT_IDLE = 3;
41
+
42
+ export class Client extends DispatcherBase {
43
+ __url: URL;
44
+ __connector: Connector;
45
+ __socket: Socket | null;
46
+ __connecting: boolean;
47
+ __queue: (Request | null)[];
48
+ __runningIdx: number;
49
+ __pendingIdx: number;
50
+ __pipelining: number;
51
+ __hostHeader: string;
52
+ __maxHeaderSize: number;
53
+ __keepAliveDefaultTimeout: number;
54
+ __keepAliveMaxTimeout: number;
55
+ __keepAliveTimeoutThreshold: number;
56
+ __keepAliveTimeoutValue: number;
57
+ __headersTimeout: number;
58
+ __bodyTimeout: number;
59
+ __strictContentLength: boolean;
60
+ __maxRequests: number;
61
+ __maxResponseSize: number;
62
+ __resuming: number;
63
+ __needDrain: number;
64
+ __closedResolve: (() => void) | null;
65
+ __serverName: string | null;
66
+ __localAddress: string | null;
67
+ // Per-connection state (one socket at a time).
68
+ __sockNoRef: boolean;
69
+ __sockReset: boolean;
70
+ __sockBlocking: boolean;
71
+ __sockCounter: number;
72
+ __parser: ResponseParser | null;
73
+ __sockError: Error | null;
74
+ // The parser timer, held as closures over its handle (a nullable timer
75
+ // field does not compile under @types/node).
76
+ __timerCancel: (() => void) | null;
77
+ __timerRefresh: (() => void) | null;
78
+ __timerType: number;
79
+
80
+ constructor(url: string | URL, options: ClientOptions | undefined, profile: Profile) {
81
+ super(profile);
82
+ const opts: ClientOptions = options ?? {};
83
+ const pipelining = opts.pipelining ?? 1;
84
+ if (!Number.isInteger(pipelining) || pipelining < 0) {
85
+ throw new InvalidArgumentError("invalid pipelining");
86
+ }
87
+ if (pipelining > 1) {
88
+ throw new NotSupportedError(
89
+ "scriptc's undici client does not pipeline more than one request yet",
90
+ );
91
+ }
92
+ const maxHeaderSize = opts.maxHeaderSize ?? null;
93
+ if (maxHeaderSize !== null && !Number.isFinite(maxHeaderSize)) {
94
+ throw new InvalidArgumentError("invalid maxHeaderSize");
95
+ }
96
+ const connectTimeout = opts.connectTimeout ?? null;
97
+ if (connectTimeout !== null && (!Number.isFinite(connectTimeout) || connectTimeout < 0)) {
98
+ throw new InvalidArgumentError("invalid connectTimeout");
99
+ }
100
+ const keepAliveTimeout = opts.keepAliveTimeout ?? null;
101
+ if (
102
+ keepAliveTimeout !== null &&
103
+ (!Number.isFinite(keepAliveTimeout) || keepAliveTimeout <= 0)
104
+ ) {
105
+ throw new InvalidArgumentError("invalid keepAliveTimeout");
106
+ }
107
+ const keepAliveMaxTimeout = opts.keepAliveMaxTimeout ?? null;
108
+ if (
109
+ keepAliveMaxTimeout !== null &&
110
+ (!Number.isFinite(keepAliveMaxTimeout) || keepAliveMaxTimeout <= 0)
111
+ ) {
112
+ throw new InvalidArgumentError("invalid keepAliveMaxTimeout");
113
+ }
114
+ const keepAliveTimeoutThreshold = opts.keepAliveTimeoutThreshold ?? null;
115
+ if (keepAliveTimeoutThreshold !== null && !Number.isFinite(keepAliveTimeoutThreshold)) {
116
+ throw new InvalidArgumentError("invalid keepAliveTimeoutThreshold");
117
+ }
118
+ const headersTimeout = opts.headersTimeout ?? null;
119
+ if (headersTimeout !== null && (!Number.isInteger(headersTimeout) || headersTimeout < 0)) {
120
+ throw new InvalidArgumentError("headersTimeout must be a positive integer or zero");
121
+ }
122
+ const bodyTimeout = opts.bodyTimeout ?? null;
123
+ if (bodyTimeout !== null && (!Number.isInteger(bodyTimeout) || bodyTimeout < 0)) {
124
+ throw new InvalidArgumentError("bodyTimeout must be a positive integer or zero");
125
+ }
126
+ const maxRequests = opts.maxRequestsPerClient ?? 0;
127
+ if (!Number.isInteger(maxRequests) || maxRequests < 0) {
128
+ throw new InvalidArgumentError("maxRequestsPerClient must be a positive number");
129
+ }
130
+ const maxResponseSize = opts.maxResponseSize ?? -1;
131
+ if (!Number.isInteger(maxResponseSize) || maxResponseSize < -1) {
132
+ throw new InvalidArgumentError("maxResponseSize must be a positive number");
133
+ }
134
+
135
+ const connect = opts.connect ?? null;
136
+ if (typeof connect === "function") {
137
+ this.__connector = connect;
138
+ } else {
139
+ this.__connector = buildConnector(
140
+ connect !== null
141
+ ? {
142
+ ...connect,
143
+ timeout: connect.timeout !== undefined ? connect.timeout : connectTimeout,
144
+ }
145
+ : { timeout: connectTimeout },
146
+ );
147
+ }
148
+ // 5.x composes `interceptors.Client` around dispatch; 7.x dropped the
149
+ // option and ignores it.
150
+ const interceptors = opts.interceptors;
151
+ if (profile.major < 7 && interceptors !== undefined && interceptors.Client !== undefined) {
152
+ this.__interceptors = interceptors.Client;
153
+ }
154
+
155
+ this.__url = parseOrigin(url, profile);
156
+ this.__socket = null;
157
+ this.__connecting = false;
158
+ this.__queue = [];
159
+ this.__runningIdx = 0;
160
+ this.__pendingIdx = 0;
161
+ this.__pipelining = pipelining;
162
+ this.__hostHeader = `host: ${this.__url.hostname}${this.__url.port ? `:${this.__url.port}` : ""}\r\n`;
163
+ this.__maxHeaderSize = maxHeaderSize !== null && maxHeaderSize !== 0 ? maxHeaderSize : 16384;
164
+ this.__keepAliveDefaultTimeout = keepAliveTimeout ?? 4e3;
165
+ this.__keepAliveMaxTimeout = keepAliveMaxTimeout ?? 600e3;
166
+ this.__keepAliveTimeoutThreshold =
167
+ keepAliveTimeoutThreshold ?? (profile.major >= 7 ? 2e3 : 1e3);
168
+ this.__keepAliveTimeoutValue = this.__keepAliveDefaultTimeout;
169
+ const defaultTimeout = profile.major >= 7 ? 300e3 : 30e3;
170
+ this.__headersTimeout = headersTimeout ?? defaultTimeout;
171
+ this.__bodyTimeout = bodyTimeout ?? defaultTimeout;
172
+ this.__strictContentLength = opts.strictContentLength ?? true;
173
+ this.__maxRequests = maxRequests;
174
+ this.__maxResponseSize = maxResponseSize;
175
+ this.__resuming = 0;
176
+ this.__needDrain = 0;
177
+ this.__closedResolve = null;
178
+ this.__serverName = null;
179
+ this.__localAddress = opts.localAddress ?? null;
180
+ this.__sockNoRef = false;
181
+ this.__sockReset = false;
182
+ this.__sockBlocking = false;
183
+ this.__sockCounter = 0;
184
+ this.__parser = null;
185
+ this.__sockError = null;
186
+ this.__timerCancel = null;
187
+ this.__timerRefresh = null;
188
+ this.__timerType = TIMEOUT_NONE;
189
+ }
190
+
191
+ get pipelining(): number {
192
+ return this.__pipelining;
193
+ }
194
+
195
+ __pendingCount(): number {
196
+ return this.__queue.length - this.__pendingIdx;
197
+ }
198
+
199
+ __runningCount(): number {
200
+ return this.__pendingIdx - this.__runningIdx;
201
+ }
202
+
203
+ __sizeCount(): number {
204
+ return this.__queue.length - this.__runningIdx;
205
+ }
206
+
207
+ __connectedFlag(): boolean {
208
+ const socket = this.__socket;
209
+ return socket !== null && !this.__connecting && !socket.destroyed;
210
+ }
211
+
212
+ __busy(): boolean {
213
+ return (
214
+ (this.__socket !== null && (this.__sockReset || this.__sockBlocking)) ||
215
+ this.__sizeCount() >= (this.__pipelining || 1) ||
216
+ this.__pendingCount() > 0
217
+ );
218
+ }
219
+
220
+ __dispatch(opts: DispatchOptions, handler: DispatchHandlers): boolean {
221
+ const originValue = opts.origin;
222
+ const origin =
223
+ originValue === undefined || originValue === ""
224
+ ? this.__url.origin
225
+ : typeof originValue === "string"
226
+ ? originValue
227
+ : originValue.origin;
228
+ const request = new Request(origin, opts, handler, this.__profile);
229
+ this.__queue.push(request);
230
+ if (this.__resuming === 0) this.__resume(true);
231
+ if (this.__resuming !== 0 && this.__needDrain !== 2 && this.__busy()) this.__needDrain = 2;
232
+ return this.__needDrain < 2;
233
+ }
234
+
235
+ __close(): Promise<void> {
236
+ return new Promise<void>((resolve) => {
237
+ if (this.__sizeCount() === 0) {
238
+ this.destroy().then(() => resolve());
239
+ } else {
240
+ this.__closedResolve = resolve;
241
+ }
242
+ });
243
+ }
244
+
245
+ __destroy(err: Error): Promise<void> {
246
+ return new Promise<void>((resolve) => {
247
+ const requests = this.__queue.splice(this.__pendingIdx);
248
+ for (const request of requests) if (request !== null) this.__errorRequest(request, err);
249
+ const done = (): void => {
250
+ const closed = this.__closedResolve;
251
+ if (closed !== null) {
252
+ this.__closedResolve = null;
253
+ closed();
254
+ }
255
+ resolve();
256
+ };
257
+ const socket = this.__socket;
258
+ if (socket === null) {
259
+ queueMicrotask(done);
260
+ } else {
261
+ socket.on("close", () => done());
262
+ this.__destroySocket(socket, err);
263
+ }
264
+ this.__resume(false);
265
+ });
266
+ }
267
+
268
+ /** util.destroy(socket, err): remember the first error for 'close'. */
269
+ __destroySocket(socket: Socket, err: Error): void {
270
+ if (socket === this.__socket && this.__sockError === null) this.__sockError = err;
271
+ socket.destroy();
272
+ }
273
+
274
+ __errorRequest(request: Request, err: Error): void {
275
+ try {
276
+ request.onError(err);
277
+ } catch (e) {
278
+ this.emit("error", e as Error);
279
+ }
280
+ }
281
+
282
+ __socketInfo(): SocketInfo {
283
+ const socket = this.__socket;
284
+ if (socket === null) return {};
285
+ return {
286
+ localAddress: socket.localAddress,
287
+ localPort: socket.localPort,
288
+ remoteAddress: socket.remoteAddress,
289
+ remotePort: socket.remotePort,
290
+ remoteFamily: socket.remoteFamily,
291
+ timeout: undefined,
292
+ bytesWritten: socket.bytesWritten,
293
+ bytesRead: socket.bytesRead,
294
+ };
295
+ }
296
+
297
+ /** The parser timer: 5.x uses native timers throughout; 7.x drives the
298
+ * headers and body timeouts from its fast timers. */
299
+ __setTimeout(delay: number, type: number): void {
300
+ this.__clearTimer();
301
+ this.__timerType = type;
302
+ if (delay > 0) {
303
+ if (this.__profile.major >= 7 && (type === TIMEOUT_HEADERS || type === TIMEOUT_BODY)) {
304
+ const fast = new FastTimer(() => this.__onTimeout(), delay);
305
+ this.__timerCancel = () => fast.clear();
306
+ this.__timerRefresh = () => fast.refresh();
307
+ } else {
308
+ const timer = setTimeout(() => this.__onTimeout(), delay);
309
+ timer.unref();
310
+ this.__timerCancel = () => clearTimeout(timer);
311
+ this.__timerRefresh = () => {
312
+ timer.refresh();
313
+ };
314
+ }
315
+ }
316
+ }
317
+
318
+ __clearTimer(): void {
319
+ const cancel = this.__timerCancel;
320
+ this.__timerCancel = null;
321
+ this.__timerRefresh = null;
322
+ if (cancel !== null) cancel();
323
+ }
324
+
325
+ __refreshTimer(): void {
326
+ const refresh = this.__timerRefresh;
327
+ if (refresh !== null) refresh();
328
+ }
329
+
330
+ __onTimeout(): void {
331
+ const socket = this.__socket;
332
+ const parser = this.__parser;
333
+ // A body timeout that fires while the response is paused keeps its
334
+ // timer: resuming refreshes it, as undici's parser does.
335
+ if (this.__timerType === TIMEOUT_BODY && parser !== null && parser.paused) return;
336
+ this.__timerCancel = null;
337
+ this.__timerRefresh = null;
338
+ if (socket === null || parser === null) return;
339
+ if (this.__timerType === TIMEOUT_HEADERS) {
340
+ this.__destroySocket(socket, new HeadersTimeoutError());
341
+ } else if (this.__timerType === TIMEOUT_BODY) {
342
+ this.__destroySocket(socket, new BodyTimeoutError());
343
+ } else if (this.__timerType === TIMEOUT_IDLE) {
344
+ this.__destroySocket(socket, new InformationalError("socket idle timeout"));
345
+ }
346
+ }
347
+
348
+ __connect(): void {
349
+ const url = this.__url;
350
+ let hostname = url.hostname;
351
+ if (hostname.startsWith("[")) {
352
+ const idx = hostname.indexOf("]");
353
+ hostname = hostname.slice(1, idx);
354
+ }
355
+ this.__connecting = true;
356
+ const params: ConnectorOptions = {
357
+ host: url.host,
358
+ hostname,
359
+ protocol: url.protocol,
360
+ port: url.port,
361
+ servername: this.__serverName ?? undefined,
362
+ localAddress: this.__localAddress,
363
+ };
364
+ const connectParams = {
365
+ host: url.host,
366
+ hostname,
367
+ protocol: url.protocol,
368
+ port: url.port,
369
+ servername: this.__serverName,
370
+ localAddress: this.__localAddress,
371
+ };
372
+ if (channels.beforeConnect.hasSubscribers) {
373
+ channels.beforeConnect.publish({ connectParams });
374
+ }
375
+ let settled = false;
376
+ const onConnected = (err: Error | null, socket: Socket | null): void => {
377
+ if (settled) return;
378
+ settled = true;
379
+ // undici awaits the connector's promise: continue on a later tick.
380
+ queueMicrotask(() => {
381
+ if (err !== null || socket === null)
382
+ this.__onConnectError(err ?? new SocketError("connect failed"), connectParams);
383
+ else this.__onConnected(socket, connectParams);
384
+ });
385
+ };
386
+ try {
387
+ this.__connector(params, onConnected);
388
+ } catch (err) {
389
+ onConnected(err as Error, null);
390
+ }
391
+ }
392
+
393
+ __onConnected(
394
+ socket: Socket,
395
+ connectParams: {
396
+ host: string;
397
+ hostname: string;
398
+ protocol: string;
399
+ port: string;
400
+ servername: string | null;
401
+ localAddress: string | null;
402
+ },
403
+ ): void {
404
+ this.__connecting = false;
405
+ if (this.destroyed) {
406
+ socket.destroy();
407
+ this.__resume(false);
408
+ return;
409
+ }
410
+ this.__socket = socket;
411
+ this.__sockNoRef = false;
412
+ this.__sockReset = false;
413
+ this.__sockBlocking = false;
414
+ this.__sockCounter = 0;
415
+ this.__sockError = null;
416
+ const parser = new ResponseParser(this, socket);
417
+ this.__parser = parser;
418
+ socket.on("data", (chunk: Buffer) => {
419
+ if (this.__socket === socket) parser.execute(chunk);
420
+ });
421
+ socket.on("error", (err: Error) => {
422
+ if (this.__socket === socket) this.__onSocketError(socket, err);
423
+ });
424
+ socket.on("end", () => {
425
+ if (this.__socket === socket) this.__onSocketEnd(socket);
426
+ });
427
+ socket.on("close", () => {
428
+ if (this.__socket === socket) this.__onSocketClose(socket);
429
+ });
430
+ if (channels.connected.hasSubscribers) {
431
+ channels.connected.publish({ connectParams });
432
+ }
433
+ this.emit("connect", this.__url, [this as Dispatcher]);
434
+ this.__resume(false);
435
+ }
436
+
437
+ __onConnectError(
438
+ err: Error,
439
+ connectParams: {
440
+ host: string;
441
+ hostname: string;
442
+ protocol: string;
443
+ port: string;
444
+ servername: string | null;
445
+ localAddress: string | null;
446
+ },
447
+ ): void {
448
+ this.__connecting = false;
449
+ if (channels.connectError.hasSubscribers) {
450
+ channels.connectError.publish({ connectParams, error: err });
451
+ }
452
+ this.__onError(err);
453
+ this.emit("connectionError", this.__url, [this as Dispatcher], err);
454
+ this.__resume(false);
455
+ }
456
+
457
+ /** client.js onError: with nothing running, a connection-level failure
458
+ * fails every queued request. */
459
+ __onError(err: Error): void {
460
+ const code = errorCode(err);
461
+ if (this.__runningCount() === 0 && code !== "UND_ERR_INFO" && code !== "UND_ERR_SOCKET") {
462
+ const requests = this.__queue.splice(this.__runningIdx);
463
+ for (const request of requests) if (request !== null) this.__errorRequest(request, err);
464
+ }
465
+ }
466
+
467
+ __onSocketError(socket: Socket, err: Error): void {
468
+ const parser = this.__parser;
469
+ if (
470
+ errorCode(err) === "ECONNRESET" &&
471
+ parser !== null &&
472
+ parser.statusCode !== 0 &&
473
+ !parser.shouldKeepAlive
474
+ ) {
475
+ parser.finishOnEof();
476
+ return;
477
+ }
478
+ this.__destroySocket(socket, err);
479
+ this.__onError(err);
480
+ }
481
+
482
+ __onSocketEnd(socket: Socket): void {
483
+ const parser = this.__parser;
484
+ if (parser !== null && parser.statusCode !== 0 && !parser.shouldKeepAlive) {
485
+ parser.finishOnEof();
486
+ return;
487
+ }
488
+ this.__destroySocket(socket, new SocketError("other side closed", this.__socketInfo()));
489
+ }
490
+
491
+ __onSocketClose(_socket: Socket): void {
492
+ const parser = this.__parser;
493
+ const recorded = this.__sockError;
494
+ this.__sockError = null;
495
+ if (
496
+ recorded === null &&
497
+ parser !== null &&
498
+ parser.statusCode !== 0 &&
499
+ !parser.shouldKeepAlive
500
+ ) {
501
+ parser.finishOnEof();
502
+ }
503
+ const err = recorded ?? new SocketError("closed", this.__socketInfo());
504
+ this.__parser = null;
505
+ this.__socket = null;
506
+ this.__clearTimer();
507
+ this.__timerType = TIMEOUT_NONE;
508
+ if (this.destroyed) {
509
+ const requests = this.__queue.splice(this.__runningIdx);
510
+ for (const request of requests) if (request !== null) this.__errorRequest(request, err);
511
+ } else if (this.__runningCount() > 0 && errorCode(err) !== "UND_ERR_INFO") {
512
+ const request = this.__queue[this.__runningIdx];
513
+ this.__queue[this.__runningIdx++] = null;
514
+ if (request !== null && request !== undefined) this.__errorRequest(request, err);
515
+ }
516
+ this.__pendingIdx = this.__runningIdx;
517
+ this.emit("disconnect", this.__url, [this as Dispatcher], err);
518
+ this.__resume(false);
519
+ }
520
+
521
+ __emitDrain(): void {
522
+ this.__needDrain = 0;
523
+ this.emit("drain", this.__url, [this as Dispatcher]);
524
+ }
525
+
526
+ __resume(sync: boolean): void {
527
+ if (this.__resuming === 2) return;
528
+ this.__resuming = 2;
529
+ this.__resumeLoop(sync);
530
+ this.__resuming = 0;
531
+ if (this.__runningIdx > 256) {
532
+ this.__queue.splice(0, this.__runningIdx);
533
+ this.__pendingIdx -= this.__runningIdx;
534
+ this.__runningIdx = 0;
535
+ }
536
+ }
537
+
538
+ __resumeLoop(sync: boolean): void {
539
+ for (;;) {
540
+ if (this.destroyed) return;
541
+ if (this.closed && this.__sizeCount() === 0) {
542
+ this.destroy();
543
+ return;
544
+ }
545
+ const socket = this.__socket;
546
+ const parser = this.__parser;
547
+ if (socket !== null && parser !== null) {
548
+ if (this.__sizeCount() === 0) {
549
+ if (!this.__sockNoRef) {
550
+ socket.unref();
551
+ this.__sockNoRef = true;
552
+ }
553
+ } else if (this.__sockNoRef) {
554
+ socket.ref();
555
+ this.__sockNoRef = false;
556
+ }
557
+ if (this.__sizeCount() === 0) {
558
+ if (this.__timerType !== TIMEOUT_IDLE)
559
+ this.__setTimeout(this.__keepAliveTimeoutValue, TIMEOUT_IDLE);
560
+ } else if (this.__runningCount() > 0 && parser.statusCode < 200) {
561
+ if (this.__timerType !== TIMEOUT_HEADERS) {
562
+ const request = this.__queue[this.__runningIdx];
563
+ const headersTimeout =
564
+ request !== null && request !== undefined && request.headersTimeout !== null
565
+ ? request.headersTimeout
566
+ : this.__headersTimeout;
567
+ this.__setTimeout(headersTimeout, TIMEOUT_HEADERS);
568
+ }
569
+ }
570
+ }
571
+
572
+ if (this.__busy()) {
573
+ this.__needDrain = 2;
574
+ } else if (this.__needDrain === 2) {
575
+ if (sync) {
576
+ this.__needDrain = 1;
577
+ process.nextTick(() => this.__emitDrain());
578
+ } else {
579
+ this.__emitDrain();
580
+ }
581
+ continue;
582
+ }
583
+
584
+ if (this.__pendingCount() === 0) return;
585
+ if (this.__runningCount() >= (this.__pipelining || 1)) return;
586
+
587
+ const request = this.__queue[this.__pendingIdx]!;
588
+ if (this.__url.protocol === "https:" && this.__serverName !== request.servername) {
589
+ if (this.__runningCount() > 0) return;
590
+ this.__serverName = request.servername;
591
+ if (socket !== null) {
592
+ this.__destroySocket(socket, new InformationalError("servername changed"));
593
+ return;
594
+ }
595
+ }
596
+ if (this.__connecting) return;
597
+ if (socket === null) {
598
+ this.__connect();
599
+ continue;
600
+ }
601
+ if (socket.destroyed || this.__sockReset || this.__sockBlocking) return;
602
+ if (this.__runningCount() > 0 && !request.idempotent) return;
603
+
604
+ if (!request.aborted && this.__write(request, socket)) {
605
+ this.__pendingIdx++;
606
+ } else {
607
+ this.__queue.splice(this.__pendingIdx, 1);
608
+ }
609
+ }
610
+ }
611
+
612
+ __write(request: Request, socket: Socket): boolean {
613
+ const method = request.method;
614
+ const body = request.body;
615
+ const expectsPayload = method === "PUT" || method === "POST" || method === "PATCH";
616
+ // util.bodyLength: a missing body has length 0.
617
+ let contentLength: number | null = body !== null ? body.length : 0;
618
+ if (contentLength === 0 && !expectsPayload) contentLength = null;
619
+ const declared = request.contentLength;
620
+ const sendsLength =
621
+ method !== "GET" && method !== "HEAD" && method !== "OPTIONS" && method !== "TRACE";
622
+ const mismatch =
623
+ declared !== null &&
624
+ declared !== contentLength &&
625
+ (this.__profile.major < 7 || (sendsLength && contentLength !== null && contentLength > 0));
626
+ if (mismatch) {
627
+ if (this.__strictContentLength) {
628
+ this.__errorRequest(request, new RequestContentLengthMismatchError());
629
+ return false;
630
+ }
631
+ process.emitWarning(new RequestContentLengthMismatchError());
632
+ }
633
+
634
+ const abort = (err?: Error): void => {
635
+ if (request.aborted || request.completed) return;
636
+ this.__errorRequest(request, err ?? new RequestAbortedError());
637
+ this.__destroySocket(socket, new InformationalError("aborted"));
638
+ };
639
+ try {
640
+ request.onConnect(abort);
641
+ } catch (err) {
642
+ this.__errorRequest(request, err as Error);
643
+ }
644
+ if (request.aborted) return false;
645
+
646
+ if (method === "HEAD") this.__sockReset = true;
647
+ if (request.reset !== null) this.__sockReset = request.reset;
648
+ if (this.__maxRequests > 0 && this.__sockCounter++ >= this.__maxRequests)
649
+ this.__sockReset = true;
650
+ if (request.blocking) this.__sockBlocking = true;
651
+
652
+ let header = `${method} ${request.path} HTTP/1.1\r\n`;
653
+ header += request.host !== null ? `host: ${request.host}\r\n` : this.__hostHeader;
654
+ if (this.__pipelining !== 0 && !(this.__profile.major >= 7 && this.__sockReset)) {
655
+ header += "connection: keep-alive\r\n";
656
+ } else {
657
+ header += "connection: close\r\n";
658
+ }
659
+ header += request.headers;
660
+ if (channels.sendHeaders.hasSubscribers) {
661
+ channels.sendHeaders.publish({ request: request.diagnosticView(), headers: header });
662
+ }
663
+ if (body === null) {
664
+ if (contentLength === 0) socket.write(`${header}content-length: 0\r\n\r\n`);
665
+ else socket.write(`${header}\r\n`);
666
+ } else {
667
+ socket.write(`${header}content-length: ${contentLength}\r\n\r\n`);
668
+ socket.write(body);
669
+ request.onBodySent(body);
670
+ if (!expectsPayload && (this.__profile.major < 7 || request.reset !== false))
671
+ this.__sockReset = true;
672
+ }
673
+ request.onRequestSent();
674
+ return true;
675
+ }
676
+
677
+ // ResponseParser callbacks.
678
+
679
+ __onHeadersComplete(parser: ResponseParser, socket: Socket): number {
680
+ const request = this.__queue[this.__runningIdx];
681
+ if (request === null || request === undefined || socket.destroyed) return -1;
682
+ const statusCode = parser.statusCode;
683
+ if (statusCode === 100) {
684
+ this.__destroySocket(socket, new SocketError("bad response", this.__socketInfo()));
685
+ return -1;
686
+ }
687
+ if (statusCode >= 200) {
688
+ const bodyTimeout = request.bodyTimeout !== null ? request.bodyTimeout : this.__bodyTimeout;
689
+ this.__setTimeout(bodyTimeout, TIMEOUT_BODY);
690
+ }
691
+ if (parser.shouldKeepAlive && this.__pipelining !== 0) {
692
+ const hint =
693
+ parser.keepAliveHeader !== "" ? parseKeepAliveTimeout(parser.keepAliveHeader) : null;
694
+ if (hint !== null) {
695
+ const timeout = Math.min(
696
+ hint - this.__keepAliveTimeoutThreshold,
697
+ this.__keepAliveMaxTimeout,
698
+ );
699
+ if (timeout <= 0) this.__sockReset = true;
700
+ else this.__keepAliveTimeoutValue = timeout;
701
+ } else {
702
+ this.__keepAliveTimeoutValue = this.__keepAliveDefaultTimeout;
703
+ }
704
+ } else {
705
+ this.__sockReset = true;
706
+ }
707
+ let pause = false;
708
+ try {
709
+ pause =
710
+ request.onHeaders(statusCode, parser.headers, () => parser.resume(), parser.statusText) ===
711
+ false;
712
+ } catch (err) {
713
+ this.__destroySocket(socket, err as Error);
714
+ return -1;
715
+ }
716
+ if (request.method === "HEAD") return 1;
717
+ if (statusCode < 200) return 1;
718
+ if (this.__sockBlocking) {
719
+ this.__sockBlocking = false;
720
+ this.__resume(false);
721
+ }
722
+ return pause ? 2 : 0;
723
+ }
724
+
725
+ __onBody(parser: ResponseParser, socket: Socket, chunk: Buffer): boolean {
726
+ const request = this.__queue[this.__runningIdx];
727
+ if (request === null || request === undefined || socket.destroyed) return false;
728
+ if (this.__timerType === TIMEOUT_BODY) this.__refreshTimer();
729
+ if (this.__maxResponseSize > -1 && parser.bytesRead + chunk.length > this.__maxResponseSize) {
730
+ this.__destroySocket(socket, new ResponseExceededMaxSizeError());
731
+ return false;
732
+ }
733
+ parser.bytesRead += chunk.length;
734
+ try {
735
+ return request.onData(chunk) !== false;
736
+ } catch (err) {
737
+ this.__destroySocket(socket, err as Error);
738
+ return false;
739
+ }
740
+ }
741
+
742
+ /** Returns false when the socket was torn down (stop parsing). */
743
+ __onMessageComplete(parser: ResponseParser, socket: Socket, trailers: Buffer[]): boolean {
744
+ if (socket.destroyed && (parser.statusCode === 0 || parser.shouldKeepAlive)) return false;
745
+ const request = this.__queue[this.__runningIdx];
746
+ if (request === null || request === undefined) return false;
747
+ const statusCode = parser.statusCode;
748
+ const shouldKeepAlive = parser.shouldKeepAlive;
749
+ const contentLength = parser.contentLength;
750
+ const bytesRead = parser.bytesRead;
751
+ parser.reset();
752
+ if (statusCode < 200) return true;
753
+ if (request.method !== "HEAD" && contentLength >= 0 && bytesRead !== contentLength) {
754
+ this.__destroySocket(socket, new ResponseContentLengthMismatchError());
755
+ return false;
756
+ }
757
+ try {
758
+ request.onComplete(trailers);
759
+ } catch (err) {
760
+ this.__errorRequest(request, err as Error);
761
+ }
762
+ this.__queue[this.__runningIdx++] = null;
763
+ if (!shouldKeepAlive) {
764
+ this.__destroySocket(socket, new InformationalError("reset"));
765
+ return false;
766
+ }
767
+ if (this.__sockReset && this.__runningCount() === 0) {
768
+ this.__destroySocket(socket, new InformationalError("reset"));
769
+ return false;
770
+ }
771
+ if (this.__pipelining === 1) setImmediate(() => this.__resume(false));
772
+ else this.__resume(false);
773
+ return true;
774
+ }
775
+
776
+ __onParseError(socket: Socket, err: Error): void {
777
+ this.__destroySocket(socket, err);
778
+ }
779
+ }
780
+
781
+ function errorCode(err: Error): string {
782
+ if (err instanceof UndiciError) return err.code;
783
+ return (err as NodeJS.ErrnoException).code ?? "";
784
+ }
785
+
786
+ const CRLF = Buffer.from("\r\n");
787
+
788
+ // Chunk-size line states (llhttp's chunk_size* and chunk_extension* nodes).
789
+ const SIZE_FIRST = 0;
790
+ const SIZE_DIGITS = 1;
791
+ const SIZE_AFTER = 2;
792
+ const SIZE_EXT = 3;
793
+ const SIZE_EXT_NAME = 4;
794
+ const SIZE_EXT_VALUE = 5;
795
+ const SIZE_EXT_QUOTED = 6;
796
+ const SIZE_EXT_PAIR = 7;
797
+ const SIZE_EXT_QUOTED_DONE = 8;
798
+ const SIZE_CR = 9;
799
+
800
+ function hexDigit(c: number): number {
801
+ if (c >= 0x30 && c <= 0x39) return c - 0x30;
802
+ if (c >= 0x41 && c <= 0x46) return c - 0x37;
803
+ if (c >= 0x61 && c <= 0x66) return c - 0x57;
804
+ return -1;
805
+ }
806
+
807
+ /** tchar: ALPHA, DIGIT and !#$%&'*+-.^_`|~. */
808
+ const TOKEN_BYTES = tokenBytes();
809
+
810
+ function tokenBytes(): Uint8Array {
811
+ const table = new Uint8Array(256);
812
+ const marks = "!#$%&'*+-.^_`|~";
813
+ for (let i = 0; i < marks.length; i++) table[marks.charCodeAt(i)] = 1;
814
+ for (let c = 0x30; c <= 0x39; c++) table[c] = 1;
815
+ for (let c = 0x41; c <= 0x5a; c++) {
816
+ table[c] = 1;
817
+ table[c + 0x20] = 1;
818
+ }
819
+ return table;
820
+ }
821
+
822
+ /** qdtext: HTAB, SP and 0x21-0xff but '"' and '\\'. */
823
+ function isQuotedByte(c: number): boolean {
824
+ return c === 0x09 || c === 0x20 || (c >= 0x21 && c !== 0x22 && c !== 0x5c);
825
+ }
826
+
827
+ /** The byte after '\\' in a quoted-pair: HTAB, SP, VCHAR or obs-text. */
828
+ function isQuotedPairByte(c: number): boolean {
829
+ return c === 0x09 || c === 0x20 || (c >= 0x21 && c !== 0x7f);
830
+ }
831
+
832
+ /** An incremental HTTP/1.1 response parser (the subset of llhttp undici
833
+ * relies on): status line, raw header pairs, Content-Length, chunked and
834
+ * read-until-close bodies, trailers, and pause/resume back-pressure. */
835
+ class ResponseParser {
836
+ client: Client;
837
+ socket: Socket;
838
+ /** Unconsumed bytes of the current arrival, then the later arrivals in
839
+ * order. */
840
+ buf: Buffer;
841
+ queue: Buffer[];
842
+ state: number;
843
+ paused: boolean;
844
+ statusCode: number;
845
+ statusText: string;
846
+ headers: Buffer[];
847
+ headersSize: number;
848
+ versionMinor: number;
849
+ contentLength: number;
850
+ chunked: boolean;
851
+ connectionHeader: string;
852
+ keepAliveHeader: string;
853
+ shouldKeepAlive: boolean;
854
+ remaining: number;
855
+ bytesRead: number;
856
+ trailers: Buffer[];
857
+ skipBody: boolean;
858
+ sizeState: number;
859
+ sizeDigits: number;
860
+ chunkSize: number;
861
+
862
+ constructor(client: Client, socket: Socket) {
863
+ this.client = client;
864
+ this.socket = socket;
865
+ this.buf = Buffer.alloc(0);
866
+ this.queue = [];
867
+ this.state = 0;
868
+ this.paused = false;
869
+ this.statusCode = 0;
870
+ this.statusText = "";
871
+ this.headers = [];
872
+ this.headersSize = 0;
873
+ this.versionMinor = 1;
874
+ this.contentLength = -1;
875
+ this.chunked = false;
876
+ this.connectionHeader = "";
877
+ this.keepAliveHeader = "";
878
+ this.shouldKeepAlive = true;
879
+ this.remaining = 0;
880
+ this.bytesRead = 0;
881
+ this.trailers = [];
882
+ this.skipBody = false;
883
+ this.sizeState = SIZE_FIRST;
884
+ this.sizeDigits = 0;
885
+ this.chunkSize = 0;
886
+ }
887
+
888
+ reset(): void {
889
+ this.state = 0;
890
+ this.statusCode = 0;
891
+ this.statusText = "";
892
+ this.headers = [];
893
+ this.headersSize = 0;
894
+ this.contentLength = -1;
895
+ this.chunked = false;
896
+ this.connectionHeader = "";
897
+ this.keepAliveHeader = "";
898
+ this.remaining = 0;
899
+ this.bytesRead = 0;
900
+ this.trailers = [];
901
+ this.skipBody = false;
902
+ }
903
+
904
+ execute(data: Buffer): void {
905
+ if (this.buf.length === 0 && this.queue.length === 0) this.buf = data;
906
+ else this.queue.push(data);
907
+ if (!this.paused) this.run();
908
+ }
909
+
910
+ /** Moves the next queued arrival into `buf`, after the bytes left in it;
911
+ * false when nothing is queued. Only a partial status, header or trailer
912
+ * line (bounded by maxHeaderSize) or a partial chunk-data CRLF is copied. */
913
+ more(): boolean {
914
+ const next = this.queue.shift();
915
+ if (next === undefined) return false;
916
+ this.buf = this.buf.length === 0 ? next : Buffer.concat([this.buf, next]);
917
+ return true;
918
+ }
919
+
920
+ resume(): void {
921
+ if (!this.paused) return;
922
+ if (this.client.__timerType === TIMEOUT_BODY) this.client.__refreshTimer();
923
+ this.paused = false;
924
+ this.socket.resume();
925
+ this.run();
926
+ }
927
+
928
+ pause(): void {
929
+ this.paused = true;
930
+ this.socket.pause();
931
+ }
932
+
933
+ /** EOF while reading a close-delimited body completes the message. */
934
+ finishOnEof(): void {
935
+ if (this.state === 6) {
936
+ this.client.__onMessageComplete(this, this.socket, []);
937
+ }
938
+ }
939
+
940
+ /** A parse error with llhttp's reason: undici 7 puts it inside its
941
+ * protocol message and, as its error table maps names to numbers only,
942
+ * sets no code; undici 5 uses the reason as the message and the code. */
943
+ fail(reason: string, code: string): void {
944
+ const err =
945
+ this.client.__profile.major >= 7
946
+ ? new HTTPParserError(`Response does not match the HTTP/1.1 protocol (${reason})`)
947
+ : new HTTPParserError(reason, code, "");
948
+ this.client.__onParseError(this.socket, err);
949
+ this.state = 99;
950
+ }
951
+
952
+ /** Reads the chunk-size line one byte at a time as llhttp does, so a line
953
+ * that never ends holds no memory: hex digits (past 16 significant ones
954
+ * the size overflows), then extensions, checked and dropped, then CRLF.
955
+ * The 7.x profile follows llhttp 9 (undici 7), the 5.x profile llhttp 8
956
+ * in its lenient mode (undici 5). Returns true when the line is complete
957
+ * and chunkSize holds its size; false when it needs more bytes or failed. */
958
+ chunkSizeLine(): boolean {
959
+ const buf = this.buf;
960
+ if (this.sizeState === SIZE_FIRST) {
961
+ // The common line, hex digits then CRLF in this buffer, in one pass;
962
+ // any other line takes the byte loop below from its start.
963
+ let size = 0;
964
+ let digits = 0;
965
+ let j = 0;
966
+ for (; j < buf.length && j < 32; j++) {
967
+ const d = hexDigit(buf[j]!);
968
+ if (d === -1) break;
969
+ if (digits > 0 || d !== 0) {
970
+ digits++;
971
+ size = size * 16 + d;
972
+ }
973
+ }
974
+ if (j > 0 && digits <= 16 && j + 1 < buf.length && buf[j] === 0x0d && buf[j + 1] === 0x0a) {
975
+ this.chunkSize = size;
976
+ this.buf = buf.subarray(j + 2);
977
+ return true;
978
+ }
979
+ }
980
+ const v7 = this.client.__profile.major >= 7;
981
+ let i = 0;
982
+ while (i < buf.length) {
983
+ const c = buf[i]!;
984
+ const state = this.sizeState;
985
+ if (state === SIZE_FIRST || state === SIZE_DIGITS) {
986
+ const d = hexDigit(c);
987
+ if (d === -1) {
988
+ if (state === SIZE_FIRST) {
989
+ this.fail("Invalid character in chunk size", "INVALID_CHUNK_SIZE");
990
+ return false;
991
+ }
992
+ this.sizeState = SIZE_AFTER;
993
+ continue;
994
+ }
995
+ if (state === SIZE_FIRST) {
996
+ this.chunkSize = 0;
997
+ this.sizeDigits = 0;
998
+ this.sizeState = SIZE_DIGITS;
999
+ }
1000
+ if (this.sizeDigits > 0 || d !== 0) {
1001
+ if (this.sizeDigits === 16) {
1002
+ this.fail("Chunk size overflow", "INVALID_CHUNK_SIZE");
1003
+ return false;
1004
+ }
1005
+ this.sizeDigits++;
1006
+ this.chunkSize = this.chunkSize * 16 + d;
1007
+ }
1008
+ } else if (state === SIZE_AFTER) {
1009
+ if (c === 0x0d) this.sizeState = SIZE_CR;
1010
+ else if (c === 0x3b) this.sizeState = SIZE_EXT;
1011
+ else if (c === 0x0a && v7) {
1012
+ this.fail("Missing expected CR after chunk size", "CR_EXPECTED");
1013
+ return false;
1014
+ } else {
1015
+ this.fail("Invalid character in chunk size", "INVALID_CHUNK_SIZE");
1016
+ return false;
1017
+ }
1018
+ } else if (state === SIZE_EXT) {
1019
+ if (c === 0x20 || c === 0x0d) {
1020
+ this.fail("Invalid character in chunk extensions", "STRICT");
1021
+ return false;
1022
+ }
1023
+ this.sizeState = SIZE_EXT_NAME;
1024
+ continue;
1025
+ } else if (state === SIZE_EXT_NAME) {
1026
+ if (c === 0x3d) this.sizeState = SIZE_EXT_VALUE;
1027
+ else if (c === 0x3b) this.sizeState = SIZE_EXT;
1028
+ else if (c === 0x0d) this.sizeState = SIZE_CR;
1029
+ else if (c === 0x0a && v7) {
1030
+ this.fail("Missing expected CR after chunk extension name", "CR_EXPECTED");
1031
+ return false;
1032
+ } else if (TOKEN_BYTES[c] !== 1) {
1033
+ this.fail("Invalid character in chunk extensions name", "STRICT");
1034
+ return false;
1035
+ }
1036
+ } else if (state === SIZE_EXT_VALUE) {
1037
+ if (c === 0x22) this.sizeState = SIZE_EXT_QUOTED;
1038
+ // llhttp 8 goes on with the chunk-size node after a value's ';'.
1039
+ else if (c === 0x3b) this.sizeState = v7 ? SIZE_EXT : SIZE_AFTER;
1040
+ else if (c === 0x0d) this.sizeState = SIZE_CR;
1041
+ else if (c === 0x0a && v7) {
1042
+ this.fail("Missing expected CR after chunk extension value", "CR_EXPECTED");
1043
+ return false;
1044
+ } else if (TOKEN_BYTES[c] !== 1) {
1045
+ this.fail("Invalid character in chunk extensions value", "STRICT");
1046
+ return false;
1047
+ }
1048
+ } else if (state === SIZE_EXT_QUOTED) {
1049
+ if (c === 0x22) this.sizeState = SIZE_EXT_QUOTED_DONE;
1050
+ else if (c === 0x5c && v7) this.sizeState = SIZE_EXT_PAIR;
1051
+ else if (!isQuotedByte(c)) {
1052
+ this.fail("Invalid character in chunk extensions quoted value", "STRICT");
1053
+ return false;
1054
+ }
1055
+ } else if (state === SIZE_EXT_PAIR) {
1056
+ if (!isQuotedPairByte(c)) {
1057
+ this.fail("Invalid quoted-pair in chunk extensions quoted value", "STRICT");
1058
+ return false;
1059
+ }
1060
+ this.sizeState = SIZE_EXT_QUOTED;
1061
+ } else if (state === SIZE_EXT_QUOTED_DONE) {
1062
+ if (c === 0x3b) this.sizeState = SIZE_EXT;
1063
+ else if (c === 0x0d) this.sizeState = SIZE_CR;
1064
+ else if (c === 0x0a && v7) {
1065
+ this.fail("Missing expected CR after chunk extension value", "CR_EXPECTED");
1066
+ return false;
1067
+ } else {
1068
+ this.fail("Invalid character in chunk extensions quote value", "STRICT");
1069
+ return false;
1070
+ }
1071
+ } else {
1072
+ // SIZE_CR: llhttp 9 needs the LF; llhttp 8's lenient mode skips
1073
+ // whatever byte follows the CR.
1074
+ if (c !== 0x0a && v7) {
1075
+ this.fail("Expected LF after chunk size", "STRICT");
1076
+ return false;
1077
+ }
1078
+ this.buf = buf.subarray(i + 1);
1079
+ this.sizeState = SIZE_FIRST;
1080
+ return true;
1081
+ }
1082
+ i++;
1083
+ }
1084
+ this.buf = Buffer.alloc(0);
1085
+ return false;
1086
+ }
1087
+
1088
+ line(): Buffer | null {
1089
+ const idx = this.buf.indexOf(CRLF);
1090
+ if (idx === -1) return null;
1091
+ const out = this.buf.subarray(0, idx);
1092
+ this.buf = this.buf.subarray(idx + 2);
1093
+ return out;
1094
+ }
1095
+
1096
+ run(): void {
1097
+ while (!this.paused && this.state !== 99) {
1098
+ if (this.state === 0) {
1099
+ // Status line.
1100
+ const line = this.line();
1101
+ if (line === null) {
1102
+ if (this.buf.length > this.client.__maxHeaderSize) {
1103
+ this.client.__onParseError(this.socket, new HeadersOverflowError());
1104
+ this.state = 99;
1105
+ return;
1106
+ }
1107
+ if (this.more()) continue;
1108
+ return;
1109
+ }
1110
+ if (line.length === 0) continue;
1111
+ const text = line.toString("latin1");
1112
+ const m = /^HTTP\/1\.([01]) (\d{3})(?: (.*))?$/.exec(text);
1113
+ if (m === null) {
1114
+ const v7 = this.client.__profile.major >= 7;
1115
+ if (!text.startsWith("HTTP/")) {
1116
+ this.fail(v7 ? "Expected HTTP/, RTSP/ or ICE/" : "Expected HTTP/", "INVALID_CONSTANT");
1117
+ } else {
1118
+ this.fail(v7 ? "Invalid status code" : "Invalid response status", "INVALID_STATUS");
1119
+ }
1120
+ return;
1121
+ }
1122
+ this.versionMinor = Number(m[1]);
1123
+ this.statusCode = Number(m[2]);
1124
+ this.statusText = m[3] ?? "";
1125
+ this.headersSize = line.length;
1126
+ this.state = 1;
1127
+ } else if (this.state === 1 || this.state === 5) {
1128
+ // Header (1) or trailer (5) lines.
1129
+ const line = this.line();
1130
+ if (line === null) {
1131
+ if (this.headersSize + this.buf.length > this.client.__maxHeaderSize) {
1132
+ this.client.__onParseError(this.socket, new HeadersOverflowError());
1133
+ this.state = 99;
1134
+ return;
1135
+ }
1136
+ if (this.more()) continue;
1137
+ return;
1138
+ }
1139
+ this.headersSize += line.length;
1140
+ if (this.headersSize > this.client.__maxHeaderSize) {
1141
+ this.client.__onParseError(this.socket, new HeadersOverflowError());
1142
+ this.state = 99;
1143
+ return;
1144
+ }
1145
+ if (line.length > 0) {
1146
+ const colon = line.indexOf(0x3a);
1147
+ if (colon <= 0) {
1148
+ this.fail("Invalid header token", "INVALID_HEADER_TOKEN");
1149
+ return;
1150
+ }
1151
+ const name = line.subarray(0, colon);
1152
+ let start = colon + 1;
1153
+ let end = line.length;
1154
+ while (start < end && (line[start] === 0x20 || line[start] === 0x09)) start++;
1155
+ while (end > start && (line[end - 1] === 0x20 || line[end - 1] === 0x09)) end--;
1156
+ const value = line.subarray(start, end);
1157
+ if (this.state === 5) {
1158
+ this.trailers.push(Buffer.from(name), Buffer.from(value));
1159
+ continue;
1160
+ }
1161
+ this.headers.push(Buffer.from(name), Buffer.from(value));
1162
+ const lower = name.toString("latin1").toLowerCase();
1163
+ if (lower === "content-length") {
1164
+ const n = Number(value.toString("latin1"));
1165
+ if (!Number.isInteger(n) || n < 0) {
1166
+ this.fail("Invalid character in Content-Length", "INVALID_CONTENT_LENGTH");
1167
+ return;
1168
+ }
1169
+ this.contentLength = n;
1170
+ } else if (lower === "transfer-encoding") {
1171
+ this.chunked = /(?:^|,)\s*chunked\s*$/i.test(value.toString("latin1"));
1172
+ } else if (lower === "connection") {
1173
+ this.connectionHeader = value.toString("latin1").toLowerCase();
1174
+ } else if (lower === "keep-alive") {
1175
+ this.keepAliveHeader = value.toString("latin1");
1176
+ }
1177
+ continue;
1178
+ }
1179
+ if (this.state === 5) {
1180
+ if (!this.complete()) return;
1181
+ continue;
1182
+ }
1183
+ // End of headers.
1184
+ const noBody = this.statusCode < 200 || this.statusCode === 204 || this.statusCode === 304;
1185
+ const closeRequested = /(?:^|,)\s*close\s*(?:,|$)/.test(this.connectionHeader);
1186
+ const keepAliveRequested = /(?:^|,)\s*keep-alive\s*(?:,|$)/.test(this.connectionHeader);
1187
+ this.shouldKeepAlive = this.versionMinor === 1 ? !closeRequested : keepAliveRequested;
1188
+ if (!noBody && !this.chunked && this.contentLength < 0) this.shouldKeepAlive = false;
1189
+ const ret = this.client.__onHeadersComplete(this, this.socket);
1190
+ if (ret === -1) {
1191
+ this.state = 99;
1192
+ return;
1193
+ }
1194
+ this.skipBody = ret === 1 || noBody;
1195
+ if (this.skipBody) {
1196
+ if (!this.complete()) return;
1197
+ continue;
1198
+ }
1199
+ if (this.chunked) {
1200
+ this.state = 3;
1201
+ } else if (this.contentLength >= 0) {
1202
+ this.remaining = this.contentLength;
1203
+ this.state = 2;
1204
+ if (this.remaining === 0) {
1205
+ if (ret === 2) this.pause();
1206
+ if (!this.complete()) return;
1207
+ continue;
1208
+ }
1209
+ } else {
1210
+ this.state = 6;
1211
+ }
1212
+ if (ret === 2) this.pause();
1213
+ } else if (this.state === 2) {
1214
+ // Content-Length body.
1215
+ if (this.buf.length === 0) {
1216
+ if (this.more()) continue;
1217
+ return;
1218
+ }
1219
+ const n = Math.min(this.remaining, this.buf.length);
1220
+ const chunk = this.buf.subarray(0, n);
1221
+ this.buf = this.buf.subarray(n);
1222
+ this.remaining -= n;
1223
+ const more = this.client.__onBody(this, this.socket, Buffer.from(chunk));
1224
+ if (this.socket.destroyed) {
1225
+ this.state = 99;
1226
+ return;
1227
+ }
1228
+ if (!more) this.pause();
1229
+ if (this.remaining === 0) {
1230
+ if (!this.complete()) return;
1231
+ }
1232
+ } else if (this.state === 3) {
1233
+ // Chunk size line; a partial one continues with the next arrival.
1234
+ if (!this.chunkSizeLine()) {
1235
+ if (this.state === 3 && this.more()) continue;
1236
+ return;
1237
+ }
1238
+ if (this.chunkSize === 0) {
1239
+ this.state = 5;
1240
+ } else {
1241
+ this.remaining = this.chunkSize;
1242
+ this.state = 4;
1243
+ }
1244
+ } else if (this.state === 4) {
1245
+ // Chunk data, then its CRLF.
1246
+ if (this.remaining > 0) {
1247
+ if (this.buf.length === 0) {
1248
+ if (this.more()) continue;
1249
+ return;
1250
+ }
1251
+ const n = Math.min(this.remaining, this.buf.length);
1252
+ const chunk = this.buf.subarray(0, n);
1253
+ this.buf = this.buf.subarray(n);
1254
+ this.remaining -= n;
1255
+ const more = this.client.__onBody(this, this.socket, Buffer.from(chunk));
1256
+ if (this.socket.destroyed) {
1257
+ this.state = 99;
1258
+ return;
1259
+ }
1260
+ if (!more) this.pause();
1261
+ continue;
1262
+ }
1263
+ if (this.buf.length < 2) {
1264
+ if (this.more()) continue;
1265
+ return;
1266
+ }
1267
+ if (this.buf[0] !== 0x0d || this.buf[1] !== 0x0a) {
1268
+ this.fail("Expected LF after chunk data", "STRICT");
1269
+ return;
1270
+ }
1271
+ this.buf = this.buf.subarray(2);
1272
+ this.state = 3;
1273
+ } else if (this.state === 6) {
1274
+ // Read until the connection closes.
1275
+ if (this.buf.length === 0) {
1276
+ if (this.more()) continue;
1277
+ return;
1278
+ }
1279
+ const chunk = this.buf;
1280
+ this.buf = Buffer.alloc(0);
1281
+ const more = this.client.__onBody(this, this.socket, Buffer.from(chunk));
1282
+ if (this.socket.destroyed) {
1283
+ this.state = 99;
1284
+ return;
1285
+ }
1286
+ if (!more) this.pause();
1287
+ } else {
1288
+ return;
1289
+ }
1290
+ }
1291
+ }
1292
+
1293
+ /** Message complete: hand the trailers over and get ready for the next
1294
+ * response on this connection. Returns false when parsing must stop. */
1295
+ complete(): boolean {
1296
+ const trailers = this.trailers;
1297
+ const ok = this.client.__onMessageComplete(this, this.socket, trailers);
1298
+ if (!ok) {
1299
+ this.state = 99;
1300
+ return false;
1301
+ }
1302
+ return true;
1303
+ }
1304
+ }