pnpm 11.22.0 → 11.24.0

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 (441) hide show
  1. package/CHANGELOG.md +234 -0
  2. package/README.md +12 -0
  3. package/dist/pnpm.mjs +9230 -7674
  4. package/dist/worker.js +40 -8
  5. package/package.json +1 -1
  6. package/artifacts/exe/dist/node-gyp-bin/node-gyp +0 -6
  7. package/artifacts/exe/dist/node-gyp-bin/node-gyp.cmd +0 -5
  8. package/artifacts/exe/dist/node_modules/.bin/node-gyp +0 -50
  9. package/artifacts/exe/dist/node_modules/.bin/node-which +0 -50
  10. package/artifacts/exe/dist/node_modules/.bin/nopt +0 -50
  11. package/artifacts/exe/dist/node_modules/.bin/semver +0 -50
  12. package/artifacts/exe/dist/node_modules/.package-map.json +0 -1
  13. package/artifacts/exe/dist/node_modules/@isaacs/fs-minipass/LICENSE +0 -15
  14. package/artifacts/exe/dist/node_modules/@isaacs/fs-minipass/dist/commonjs/index.js +0 -430
  15. package/artifacts/exe/dist/node_modules/@isaacs/fs-minipass/dist/commonjs/package.json +0 -3
  16. package/artifacts/exe/dist/node_modules/@isaacs/fs-minipass/dist/esm/index.js +0 -420
  17. package/artifacts/exe/dist/node_modules/@isaacs/fs-minipass/dist/esm/package.json +0 -3
  18. package/artifacts/exe/dist/node_modules/@isaacs/fs-minipass/package.json +0 -72
  19. package/artifacts/exe/dist/node_modules/abbrev/LICENSE +0 -46
  20. package/artifacts/exe/dist/node_modules/abbrev/lib/index.js +0 -53
  21. package/artifacts/exe/dist/node_modules/abbrev/package.json +0 -41
  22. package/artifacts/exe/dist/node_modules/chownr/dist/commonjs/index.js +0 -93
  23. package/artifacts/exe/dist/node_modules/chownr/dist/commonjs/package.json +0 -3
  24. package/artifacts/exe/dist/node_modules/chownr/dist/esm/index.js +0 -85
  25. package/artifacts/exe/dist/node_modules/chownr/dist/esm/package.json +0 -3
  26. package/artifacts/exe/dist/node_modules/chownr/package.json +0 -69
  27. package/artifacts/exe/dist/node_modules/env-paths/index.js +0 -74
  28. package/artifacts/exe/dist/node_modules/env-paths/license +0 -9
  29. package/artifacts/exe/dist/node_modules/env-paths/package.json +0 -45
  30. package/artifacts/exe/dist/node_modules/exponential-backoff/LICENSE +0 -202
  31. package/artifacts/exe/dist/node_modules/exponential-backoff/dist/backoff.js +0 -124
  32. package/artifacts/exe/dist/node_modules/exponential-backoff/dist/delay/always/always.delay.js +0 -25
  33. package/artifacts/exe/dist/node_modules/exponential-backoff/dist/delay/delay.base.js +0 -45
  34. package/artifacts/exe/dist/node_modules/exponential-backoff/dist/delay/delay.factory.js +0 -17
  35. package/artifacts/exe/dist/node_modules/exponential-backoff/dist/delay/delay.interface.js +0 -3
  36. package/artifacts/exe/dist/node_modules/exponential-backoff/dist/delay/skip-first/skip-first.delay.js +0 -82
  37. package/artifacts/exe/dist/node_modules/exponential-backoff/dist/jitter/full/full.jitter.js +0 -8
  38. package/artifacts/exe/dist/node_modules/exponential-backoff/dist/jitter/jitter.factory.js +0 -15
  39. package/artifacts/exe/dist/node_modules/exponential-backoff/dist/jitter/no/no.jitter.js +0 -7
  40. package/artifacts/exe/dist/node_modules/exponential-backoff/dist/options.js +0 -31
  41. package/artifacts/exe/dist/node_modules/exponential-backoff/package.json +0 -62
  42. package/artifacts/exe/dist/node_modules/fdir/LICENSE +0 -7
  43. package/artifacts/exe/dist/node_modules/fdir/dist/index.cjs +0 -588
  44. package/artifacts/exe/dist/node_modules/fdir/dist/index.d.cts +0 -155
  45. package/artifacts/exe/dist/node_modules/fdir/dist/index.d.mts +0 -155
  46. package/artifacts/exe/dist/node_modules/fdir/dist/index.mjs +0 -570
  47. package/artifacts/exe/dist/node_modules/fdir/package.json +0 -103
  48. package/artifacts/exe/dist/node_modules/graceful-fs/LICENSE +0 -15
  49. package/artifacts/exe/dist/node_modules/graceful-fs/clone.js +0 -23
  50. package/artifacts/exe/dist/node_modules/graceful-fs/graceful-fs.js +0 -448
  51. package/artifacts/exe/dist/node_modules/graceful-fs/legacy-streams.js +0 -118
  52. package/artifacts/exe/dist/node_modules/graceful-fs/package.json +0 -53
  53. package/artifacts/exe/dist/node_modules/graceful-fs/polyfills.js +0 -355
  54. package/artifacts/exe/dist/node_modules/isexe/dist/commonjs/index.js +0 -56
  55. package/artifacts/exe/dist/node_modules/isexe/dist/commonjs/index.min.js +0 -2
  56. package/artifacts/exe/dist/node_modules/isexe/dist/commonjs/options.js +0 -3
  57. package/artifacts/exe/dist/node_modules/isexe/dist/commonjs/package.json +0 -3
  58. package/artifacts/exe/dist/node_modules/isexe/dist/commonjs/posix.js +0 -67
  59. package/artifacts/exe/dist/node_modules/isexe/dist/commonjs/win32.js +0 -63
  60. package/artifacts/exe/dist/node_modules/isexe/dist/esm/index.js +0 -16
  61. package/artifacts/exe/dist/node_modules/isexe/dist/esm/index.min.js +0 -2
  62. package/artifacts/exe/dist/node_modules/isexe/dist/esm/options.js +0 -2
  63. package/artifacts/exe/dist/node_modules/isexe/dist/esm/package.json +0 -3
  64. package/artifacts/exe/dist/node_modules/isexe/dist/esm/posix.js +0 -62
  65. package/artifacts/exe/dist/node_modules/isexe/dist/esm/win32.js +0 -58
  66. package/artifacts/exe/dist/node_modules/isexe/package.json +0 -78
  67. package/artifacts/exe/dist/node_modules/minipass/dist/commonjs/index.js +0 -1038
  68. package/artifacts/exe/dist/node_modules/minipass/dist/commonjs/package.json +0 -3
  69. package/artifacts/exe/dist/node_modules/minipass/dist/esm/index.js +0 -1020
  70. package/artifacts/exe/dist/node_modules/minipass/dist/esm/package.json +0 -3
  71. package/artifacts/exe/dist/node_modules/minipass/package.json +0 -77
  72. package/artifacts/exe/dist/node_modules/minizlib/LICENSE +0 -26
  73. package/artifacts/exe/dist/node_modules/minizlib/dist/commonjs/constants.js +0 -123
  74. package/artifacts/exe/dist/node_modules/minizlib/dist/commonjs/index.js +0 -416
  75. package/artifacts/exe/dist/node_modules/minizlib/dist/commonjs/package.json +0 -3
  76. package/artifacts/exe/dist/node_modules/minizlib/dist/esm/constants.js +0 -117
  77. package/artifacts/exe/dist/node_modules/minizlib/dist/esm/index.js +0 -363
  78. package/artifacts/exe/dist/node_modules/minizlib/dist/esm/package.json +0 -3
  79. package/artifacts/exe/dist/node_modules/minizlib/package.json +0 -80
  80. package/artifacts/exe/dist/node_modules/node-gyp/.release-please-manifest.json +0 -3
  81. package/artifacts/exe/dist/node_modules/node-gyp/LICENSE +0 -24
  82. package/artifacts/exe/dist/node_modules/node-gyp/addon.gypi +0 -204
  83. package/artifacts/exe/dist/node_modules/node-gyp/bin/node-gyp.js +0 -145
  84. package/artifacts/exe/dist/node_modules/node-gyp/eslint.config.js +0 -3
  85. package/artifacts/exe/dist/node_modules/node-gyp/gyp/.release-please-manifest.json +0 -3
  86. package/artifacts/exe/dist/node_modules/node-gyp/gyp/LICENSE +0 -28
  87. package/artifacts/exe/dist/node_modules/node-gyp/gyp/data/ninja/build.ninja +0 -4
  88. package/artifacts/exe/dist/node_modules/node-gyp/gyp/data/win/large-pdb-shim.cc +0 -12
  89. package/artifacts/exe/dist/node_modules/node-gyp/gyp/gyp +0 -8
  90. package/artifacts/exe/dist/node_modules/node-gyp/gyp/gyp.bat +0 -5
  91. package/artifacts/exe/dist/node_modules/node-gyp/gyp/gyp_main.py +0 -45
  92. package/artifacts/exe/dist/node_modules/node-gyp/gyp/pylib/gyp/MSVSNew.py +0 -365
  93. package/artifacts/exe/dist/node_modules/node-gyp/gyp/pylib/gyp/MSVSProject.py +0 -206
  94. package/artifacts/exe/dist/node_modules/node-gyp/gyp/pylib/gyp/MSVSSettings.py +0 -1283
  95. package/artifacts/exe/dist/node_modules/node-gyp/gyp/pylib/gyp/MSVSSettings_test.py +0 -1545
  96. package/artifacts/exe/dist/node_modules/node-gyp/gyp/pylib/gyp/MSVSToolFile.py +0 -59
  97. package/artifacts/exe/dist/node_modules/node-gyp/gyp/pylib/gyp/MSVSUserFile.py +0 -152
  98. package/artifacts/exe/dist/node_modules/node-gyp/gyp/pylib/gyp/MSVSUtil.py +0 -270
  99. package/artifacts/exe/dist/node_modules/node-gyp/gyp/pylib/gyp/MSVSVersion.py +0 -607
  100. package/artifacts/exe/dist/node_modules/node-gyp/gyp/pylib/gyp/__init__.py +0 -706
  101. package/artifacts/exe/dist/node_modules/node-gyp/gyp/pylib/gyp/common.py +0 -725
  102. package/artifacts/exe/dist/node_modules/node-gyp/gyp/pylib/gyp/common_test.py +0 -186
  103. package/artifacts/exe/dist/node_modules/node-gyp/gyp/pylib/gyp/easy_xml.py +0 -170
  104. package/artifacts/exe/dist/node_modules/node-gyp/gyp/pylib/gyp/easy_xml_test.py +0 -113
  105. package/artifacts/exe/dist/node_modules/node-gyp/gyp/pylib/gyp/flock_tool.py +0 -55
  106. package/artifacts/exe/dist/node_modules/node-gyp/gyp/pylib/gyp/generator/__init__.py +0 -0
  107. package/artifacts/exe/dist/node_modules/node-gyp/gyp/pylib/gyp/generator/analyzer.py +0 -805
  108. package/artifacts/exe/dist/node_modules/node-gyp/gyp/pylib/gyp/generator/android.py +0 -1169
  109. package/artifacts/exe/dist/node_modules/node-gyp/gyp/pylib/gyp/generator/cmake.py +0 -1316
  110. package/artifacts/exe/dist/node_modules/node-gyp/gyp/pylib/gyp/generator/compile_commands_json.py +0 -128
  111. package/artifacts/exe/dist/node_modules/node-gyp/gyp/pylib/gyp/generator/dump_dependency_json.py +0 -104
  112. package/artifacts/exe/dist/node_modules/node-gyp/gyp/pylib/gyp/generator/eclipse.py +0 -461
  113. package/artifacts/exe/dist/node_modules/node-gyp/gyp/pylib/gyp/generator/gypd.py +0 -88
  114. package/artifacts/exe/dist/node_modules/node-gyp/gyp/pylib/gyp/generator/gypsh.py +0 -55
  115. package/artifacts/exe/dist/node_modules/node-gyp/gyp/pylib/gyp/generator/make.py +0 -2755
  116. package/artifacts/exe/dist/node_modules/node-gyp/gyp/pylib/gyp/generator/msvs.py +0 -3970
  117. package/artifacts/exe/dist/node_modules/node-gyp/gyp/pylib/gyp/generator/msvs_test.py +0 -44
  118. package/artifacts/exe/dist/node_modules/node-gyp/gyp/pylib/gyp/generator/ninja.py +0 -2957
  119. package/artifacts/exe/dist/node_modules/node-gyp/gyp/pylib/gyp/generator/ninja_test.py +0 -77
  120. package/artifacts/exe/dist/node_modules/node-gyp/gyp/pylib/gyp/generator/xcode.py +0 -1389
  121. package/artifacts/exe/dist/node_modules/node-gyp/gyp/pylib/gyp/generator/xcode_test.py +0 -26
  122. package/artifacts/exe/dist/node_modules/node-gyp/gyp/pylib/gyp/input.py +0 -3097
  123. package/artifacts/exe/dist/node_modules/node-gyp/gyp/pylib/gyp/input_test.py +0 -99
  124. package/artifacts/exe/dist/node_modules/node-gyp/gyp/pylib/gyp/mac_tool.py +0 -765
  125. package/artifacts/exe/dist/node_modules/node-gyp/gyp/pylib/gyp/msvs_emulation.py +0 -1255
  126. package/artifacts/exe/dist/node_modules/node-gyp/gyp/pylib/gyp/ninja_syntax.py +0 -174
  127. package/artifacts/exe/dist/node_modules/node-gyp/gyp/pylib/gyp/simple_copy.py +0 -61
  128. package/artifacts/exe/dist/node_modules/node-gyp/gyp/pylib/gyp/win_tool.py +0 -371
  129. package/artifacts/exe/dist/node_modules/node-gyp/gyp/pylib/gyp/xcode_emulation.py +0 -1936
  130. package/artifacts/exe/dist/node_modules/node-gyp/gyp/pylib/gyp/xcode_emulation_test.py +0 -54
  131. package/artifacts/exe/dist/node_modules/node-gyp/gyp/pylib/gyp/xcode_ninja.py +0 -301
  132. package/artifacts/exe/dist/node_modules/node-gyp/gyp/pylib/gyp/xcodeproj_file.py +0 -3180
  133. package/artifacts/exe/dist/node_modules/node-gyp/gyp/pylib/gyp/xml_fix.py +0 -64
  134. package/artifacts/exe/dist/node_modules/node-gyp/gyp/pylib/packaging/LICENSE +0 -3
  135. package/artifacts/exe/dist/node_modules/node-gyp/gyp/pylib/packaging/LICENSE.APACHE +0 -177
  136. package/artifacts/exe/dist/node_modules/node-gyp/gyp/pylib/packaging/LICENSE.BSD +0 -23
  137. package/artifacts/exe/dist/node_modules/node-gyp/gyp/pylib/packaging/__init__.py +0 -15
  138. package/artifacts/exe/dist/node_modules/node-gyp/gyp/pylib/packaging/_elffile.py +0 -107
  139. package/artifacts/exe/dist/node_modules/node-gyp/gyp/pylib/packaging/_manylinux.py +0 -252
  140. package/artifacts/exe/dist/node_modules/node-gyp/gyp/pylib/packaging/_musllinux.py +0 -83
  141. package/artifacts/exe/dist/node_modules/node-gyp/gyp/pylib/packaging/_parser.py +0 -359
  142. package/artifacts/exe/dist/node_modules/node-gyp/gyp/pylib/packaging/_structures.py +0 -61
  143. package/artifacts/exe/dist/node_modules/node-gyp/gyp/pylib/packaging/_tokenizer.py +0 -192
  144. package/artifacts/exe/dist/node_modules/node-gyp/gyp/pylib/packaging/markers.py +0 -251
  145. package/artifacts/exe/dist/node_modules/node-gyp/gyp/pylib/packaging/metadata.py +0 -807
  146. package/artifacts/exe/dist/node_modules/node-gyp/gyp/pylib/packaging/py.typed +0 -0
  147. package/artifacts/exe/dist/node_modules/node-gyp/gyp/pylib/packaging/requirements.py +0 -90
  148. package/artifacts/exe/dist/node_modules/node-gyp/gyp/pylib/packaging/specifiers.py +0 -1030
  149. package/artifacts/exe/dist/node_modules/node-gyp/gyp/pylib/packaging/tags.py +0 -541
  150. package/artifacts/exe/dist/node_modules/node-gyp/gyp/pylib/packaging/utils.py +0 -172
  151. package/artifacts/exe/dist/node_modules/node-gyp/gyp/pylib/packaging/version.py +0 -563
  152. package/artifacts/exe/dist/node_modules/node-gyp/gyp/pyproject.toml +0 -116
  153. package/artifacts/exe/dist/node_modules/node-gyp/gyp/release-please-config.json +0 -11
  154. package/artifacts/exe/dist/node_modules/node-gyp/gyp/test_gyp.py +0 -260
  155. package/artifacts/exe/dist/node_modules/node-gyp/lib/Find-VisualStudio.cs +0 -250
  156. package/artifacts/exe/dist/node_modules/node-gyp/lib/build.js +0 -230
  157. package/artifacts/exe/dist/node_modules/node-gyp/lib/clean.js +0 -15
  158. package/artifacts/exe/dist/node_modules/node-gyp/lib/configure.js +0 -328
  159. package/artifacts/exe/dist/node_modules/node-gyp/lib/create-config-gypi.js +0 -153
  160. package/artifacts/exe/dist/node_modules/node-gyp/lib/download.js +0 -86
  161. package/artifacts/exe/dist/node_modules/node-gyp/lib/find-node-directory.js +0 -63
  162. package/artifacts/exe/dist/node_modules/node-gyp/lib/find-python.js +0 -304
  163. package/artifacts/exe/dist/node_modules/node-gyp/lib/find-visualstudio.js +0 -606
  164. package/artifacts/exe/dist/node_modules/node-gyp/lib/install.js +0 -411
  165. package/artifacts/exe/dist/node_modules/node-gyp/lib/list.js +0 -26
  166. package/artifacts/exe/dist/node_modules/node-gyp/lib/log.js +0 -168
  167. package/artifacts/exe/dist/node_modules/node-gyp/lib/node-gyp.js +0 -199
  168. package/artifacts/exe/dist/node_modules/node-gyp/lib/process-release.js +0 -144
  169. package/artifacts/exe/dist/node_modules/node-gyp/lib/rebuild.js +0 -12
  170. package/artifacts/exe/dist/node_modules/node-gyp/lib/remove.js +0 -43
  171. package/artifacts/exe/dist/node_modules/node-gyp/lib/util.js +0 -81
  172. package/artifacts/exe/dist/node_modules/node-gyp/macOS_Catalina_acid_test.sh +0 -21
  173. package/artifacts/exe/dist/node_modules/node-gyp/package.json +0 -52
  174. package/artifacts/exe/dist/node_modules/node-gyp/release-please-config.json +0 -40
  175. package/artifacts/exe/dist/node_modules/node-gyp/src/win_delay_load_hook.cc +0 -41
  176. package/artifacts/exe/dist/node_modules/nopt/LICENSE +0 -15
  177. package/artifacts/exe/dist/node_modules/nopt/bin/nopt.js +0 -29
  178. package/artifacts/exe/dist/node_modules/nopt/lib/debug.js +0 -5
  179. package/artifacts/exe/dist/node_modules/nopt/lib/nopt-lib.js +0 -514
  180. package/artifacts/exe/dist/node_modules/nopt/lib/nopt.js +0 -34
  181. package/artifacts/exe/dist/node_modules/nopt/lib/type-defs.js +0 -91
  182. package/artifacts/exe/dist/node_modules/nopt/package.json +0 -52
  183. package/artifacts/exe/dist/node_modules/picomatch/LICENSE +0 -21
  184. package/artifacts/exe/dist/node_modules/picomatch/index.js +0 -17
  185. package/artifacts/exe/dist/node_modules/picomatch/lib/constants.js +0 -184
  186. package/artifacts/exe/dist/node_modules/picomatch/lib/parse.js +0 -1416
  187. package/artifacts/exe/dist/node_modules/picomatch/lib/picomatch.js +0 -361
  188. package/artifacts/exe/dist/node_modules/picomatch/lib/scan.js +0 -391
  189. package/artifacts/exe/dist/node_modules/picomatch/lib/utils.js +0 -72
  190. package/artifacts/exe/dist/node_modules/picomatch/package.json +0 -83
  191. package/artifacts/exe/dist/node_modules/picomatch/posix.js +0 -3
  192. package/artifacts/exe/dist/node_modules/proc-log/LICENSE +0 -15
  193. package/artifacts/exe/dist/node_modules/proc-log/lib/index.js +0 -158
  194. package/artifacts/exe/dist/node_modules/proc-log/package.json +0 -46
  195. package/artifacts/exe/dist/node_modules/semver/LICENSE +0 -15
  196. package/artifacts/exe/dist/node_modules/semver/bin/semver.js +0 -195
  197. package/artifacts/exe/dist/node_modules/semver/classes/comparator.js +0 -143
  198. package/artifacts/exe/dist/node_modules/semver/classes/index.js +0 -7
  199. package/artifacts/exe/dist/node_modules/semver/classes/range.js +0 -577
  200. package/artifacts/exe/dist/node_modules/semver/classes/semver.js +0 -350
  201. package/artifacts/exe/dist/node_modules/semver/functions/clean.js +0 -8
  202. package/artifacts/exe/dist/node_modules/semver/functions/cmp.js +0 -54
  203. package/artifacts/exe/dist/node_modules/semver/functions/coerce.js +0 -62
  204. package/artifacts/exe/dist/node_modules/semver/functions/compare-build.js +0 -9
  205. package/artifacts/exe/dist/node_modules/semver/functions/compare-loose.js +0 -5
  206. package/artifacts/exe/dist/node_modules/semver/functions/compare.js +0 -7
  207. package/artifacts/exe/dist/node_modules/semver/functions/diff.js +0 -60
  208. package/artifacts/exe/dist/node_modules/semver/functions/eq.js +0 -5
  209. package/artifacts/exe/dist/node_modules/semver/functions/gt.js +0 -5
  210. package/artifacts/exe/dist/node_modules/semver/functions/gte.js +0 -5
  211. package/artifacts/exe/dist/node_modules/semver/functions/inc.js +0 -21
  212. package/artifacts/exe/dist/node_modules/semver/functions/lt.js +0 -5
  213. package/artifacts/exe/dist/node_modules/semver/functions/lte.js +0 -5
  214. package/artifacts/exe/dist/node_modules/semver/functions/major.js +0 -5
  215. package/artifacts/exe/dist/node_modules/semver/functions/minor.js +0 -5
  216. package/artifacts/exe/dist/node_modules/semver/functions/neq.js +0 -5
  217. package/artifacts/exe/dist/node_modules/semver/functions/parse.js +0 -18
  218. package/artifacts/exe/dist/node_modules/semver/functions/patch.js +0 -5
  219. package/artifacts/exe/dist/node_modules/semver/functions/prerelease.js +0 -8
  220. package/artifacts/exe/dist/node_modules/semver/functions/rcompare.js +0 -5
  221. package/artifacts/exe/dist/node_modules/semver/functions/rsort.js +0 -5
  222. package/artifacts/exe/dist/node_modules/semver/functions/satisfies.js +0 -12
  223. package/artifacts/exe/dist/node_modules/semver/functions/sort.js +0 -5
  224. package/artifacts/exe/dist/node_modules/semver/functions/truncate.js +0 -48
  225. package/artifacts/exe/dist/node_modules/semver/functions/valid.js +0 -8
  226. package/artifacts/exe/dist/node_modules/semver/index.js +0 -93
  227. package/artifacts/exe/dist/node_modules/semver/internal/constants.js +0 -37
  228. package/artifacts/exe/dist/node_modules/semver/internal/debug.js +0 -11
  229. package/artifacts/exe/dist/node_modules/semver/internal/identifiers.js +0 -29
  230. package/artifacts/exe/dist/node_modules/semver/internal/lrucache.js +0 -42
  231. package/artifacts/exe/dist/node_modules/semver/internal/parse-options.js +0 -17
  232. package/artifacts/exe/dist/node_modules/semver/internal/re.js +0 -223
  233. package/artifacts/exe/dist/node_modules/semver/package.json +0 -78
  234. package/artifacts/exe/dist/node_modules/semver/preload.js +0 -4
  235. package/artifacts/exe/dist/node_modules/semver/range.bnf +0 -17
  236. package/artifacts/exe/dist/node_modules/semver/ranges/gtr.js +0 -6
  237. package/artifacts/exe/dist/node_modules/semver/ranges/intersects.js +0 -9
  238. package/artifacts/exe/dist/node_modules/semver/ranges/ltr.js +0 -6
  239. package/artifacts/exe/dist/node_modules/semver/ranges/max-satisfying.js +0 -27
  240. package/artifacts/exe/dist/node_modules/semver/ranges/min-satisfying.js +0 -26
  241. package/artifacts/exe/dist/node_modules/semver/ranges/min-version.js +0 -63
  242. package/artifacts/exe/dist/node_modules/semver/ranges/outside.js +0 -82
  243. package/artifacts/exe/dist/node_modules/semver/ranges/simplify.js +0 -49
  244. package/artifacts/exe/dist/node_modules/semver/ranges/subset.js +0 -249
  245. package/artifacts/exe/dist/node_modules/semver/ranges/to-comparators.js +0 -10
  246. package/artifacts/exe/dist/node_modules/semver/ranges/valid.js +0 -13
  247. package/artifacts/exe/dist/node_modules/tar/dist/commonjs/create.js +0 -82
  248. package/artifacts/exe/dist/node_modules/tar/dist/commonjs/cwd-error.js +0 -18
  249. package/artifacts/exe/dist/node_modules/tar/dist/commonjs/extract.js +0 -88
  250. package/artifacts/exe/dist/node_modules/tar/dist/commonjs/get-write-flag.js +0 -32
  251. package/artifacts/exe/dist/node_modules/tar/dist/commonjs/header.js +0 -348
  252. package/artifacts/exe/dist/node_modules/tar/dist/commonjs/index.js +0 -64
  253. package/artifacts/exe/dist/node_modules/tar/dist/commonjs/index.min.js +0 -4
  254. package/artifacts/exe/dist/node_modules/tar/dist/commonjs/large-numbers.js +0 -99
  255. package/artifacts/exe/dist/node_modules/tar/dist/commonjs/list.js +0 -153
  256. package/artifacts/exe/dist/node_modules/tar/dist/commonjs/make-command.js +0 -52
  257. package/artifacts/exe/dist/node_modules/tar/dist/commonjs/mkdir.js +0 -187
  258. package/artifacts/exe/dist/node_modules/tar/dist/commonjs/mode-fix.js +0 -29
  259. package/artifacts/exe/dist/node_modules/tar/dist/commonjs/normalize-unicode.js +0 -38
  260. package/artifacts/exe/dist/node_modules/tar/dist/commonjs/normalize-windows-path.js +0 -12
  261. package/artifacts/exe/dist/node_modules/tar/dist/commonjs/options.js +0 -66
  262. package/artifacts/exe/dist/node_modules/tar/dist/commonjs/pack.js +0 -544
  263. package/artifacts/exe/dist/node_modules/tar/dist/commonjs/package.json +0 -3
  264. package/artifacts/exe/dist/node_modules/tar/dist/commonjs/parse.js +0 -655
  265. package/artifacts/exe/dist/node_modules/tar/dist/commonjs/path-reservations.js +0 -170
  266. package/artifacts/exe/dist/node_modules/tar/dist/commonjs/pax.js +0 -182
  267. package/artifacts/exe/dist/node_modules/tar/dist/commonjs/process-umask.js +0 -7
  268. package/artifacts/exe/dist/node_modules/tar/dist/commonjs/read-entry.js +0 -136
  269. package/artifacts/exe/dist/node_modules/tar/dist/commonjs/replace.js +0 -227
  270. package/artifacts/exe/dist/node_modules/tar/dist/commonjs/strip-absolute-path.js +0 -29
  271. package/artifacts/exe/dist/node_modules/tar/dist/commonjs/strip-trailing-slashes.js +0 -18
  272. package/artifacts/exe/dist/node_modules/tar/dist/commonjs/symlink-error.js +0 -19
  273. package/artifacts/exe/dist/node_modules/tar/dist/commonjs/types.js +0 -70
  274. package/artifacts/exe/dist/node_modules/tar/dist/commonjs/unpack.js +0 -932
  275. package/artifacts/exe/dist/node_modules/tar/dist/commonjs/update.js +0 -33
  276. package/artifacts/exe/dist/node_modules/tar/dist/commonjs/warn-method.js +0 -31
  277. package/artifacts/exe/dist/node_modules/tar/dist/commonjs/winchars.js +0 -14
  278. package/artifacts/exe/dist/node_modules/tar/dist/commonjs/write-entry.js +0 -698
  279. package/artifacts/exe/dist/node_modules/tar/dist/esm/create.js +0 -76
  280. package/artifacts/exe/dist/node_modules/tar/dist/esm/cwd-error.js +0 -14
  281. package/artifacts/exe/dist/node_modules/tar/dist/esm/extract.js +0 -49
  282. package/artifacts/exe/dist/node_modules/tar/dist/esm/get-write-flag.js +0 -26
  283. package/artifacts/exe/dist/node_modules/tar/dist/esm/header.js +0 -311
  284. package/artifacts/exe/dist/node_modules/tar/dist/esm/index.js +0 -20
  285. package/artifacts/exe/dist/node_modules/tar/dist/esm/index.min.js +0 -4
  286. package/artifacts/exe/dist/node_modules/tar/dist/esm/large-numbers.js +0 -94
  287. package/artifacts/exe/dist/node_modules/tar/dist/esm/list.js +0 -113
  288. package/artifacts/exe/dist/node_modules/tar/dist/esm/make-command.js +0 -48
  289. package/artifacts/exe/dist/node_modules/tar/dist/esm/mkdir.js +0 -179
  290. package/artifacts/exe/dist/node_modules/tar/dist/esm/mode-fix.js +0 -25
  291. package/artifacts/exe/dist/node_modules/tar/dist/esm/normalize-unicode.js +0 -34
  292. package/artifacts/exe/dist/node_modules/tar/dist/esm/normalize-windows-path.js +0 -9
  293. package/artifacts/exe/dist/node_modules/tar/dist/esm/options.js +0 -54
  294. package/artifacts/exe/dist/node_modules/tar/dist/esm/pack.js +0 -502
  295. package/artifacts/exe/dist/node_modules/tar/dist/esm/package.json +0 -3
  296. package/artifacts/exe/dist/node_modules/tar/dist/esm/parse.js +0 -651
  297. package/artifacts/exe/dist/node_modules/tar/dist/esm/path-reservations.js +0 -166
  298. package/artifacts/exe/dist/node_modules/tar/dist/esm/pax.js +0 -178
  299. package/artifacts/exe/dist/node_modules/tar/dist/esm/process-umask.js +0 -3
  300. package/artifacts/exe/dist/node_modules/tar/dist/esm/read-entry.js +0 -132
  301. package/artifacts/exe/dist/node_modules/tar/dist/esm/replace.js +0 -221
  302. package/artifacts/exe/dist/node_modules/tar/dist/esm/strip-absolute-path.js +0 -25
  303. package/artifacts/exe/dist/node_modules/tar/dist/esm/strip-trailing-slashes.js +0 -14
  304. package/artifacts/exe/dist/node_modules/tar/dist/esm/symlink-error.js +0 -15
  305. package/artifacts/exe/dist/node_modules/tar/dist/esm/types.js +0 -65
  306. package/artifacts/exe/dist/node_modules/tar/dist/esm/unpack.js +0 -891
  307. package/artifacts/exe/dist/node_modules/tar/dist/esm/update.js +0 -30
  308. package/artifacts/exe/dist/node_modules/tar/dist/esm/warn-method.js +0 -27
  309. package/artifacts/exe/dist/node_modules/tar/dist/esm/winchars.js +0 -9
  310. package/artifacts/exe/dist/node_modules/tar/dist/esm/write-entry.js +0 -656
  311. package/artifacts/exe/dist/node_modules/tar/package.json +0 -298
  312. package/artifacts/exe/dist/node_modules/tinyglobby/LICENSE +0 -21
  313. package/artifacts/exe/dist/node_modules/tinyglobby/dist/index.cjs +0 -335
  314. package/artifacts/exe/dist/node_modules/tinyglobby/dist/index.d.cts +0 -148
  315. package/artifacts/exe/dist/node_modules/tinyglobby/dist/index.d.mts +0 -148
  316. package/artifacts/exe/dist/node_modules/tinyglobby/dist/index.mjs +0 -307
  317. package/artifacts/exe/dist/node_modules/tinyglobby/package.json +0 -70
  318. package/artifacts/exe/dist/node_modules/undici/LICENSE +0 -21
  319. package/artifacts/exe/dist/node_modules/undici/index-fetch.js +0 -35
  320. package/artifacts/exe/dist/node_modules/undici/index.js +0 -169
  321. package/artifacts/exe/dist/node_modules/undici/lib/api/abort-signal.js +0 -57
  322. package/artifacts/exe/dist/node_modules/undici/lib/api/api-connect.js +0 -108
  323. package/artifacts/exe/dist/node_modules/undici/lib/api/api-pipeline.js +0 -251
  324. package/artifacts/exe/dist/node_modules/undici/lib/api/api-request.js +0 -214
  325. package/artifacts/exe/dist/node_modules/undici/lib/api/api-stream.js +0 -220
  326. package/artifacts/exe/dist/node_modules/undici/lib/api/api-upgrade.js +0 -108
  327. package/artifacts/exe/dist/node_modules/undici/lib/api/index.js +0 -7
  328. package/artifacts/exe/dist/node_modules/undici/lib/api/readable.js +0 -385
  329. package/artifacts/exe/dist/node_modules/undici/lib/api/util.js +0 -93
  330. package/artifacts/exe/dist/node_modules/undici/lib/core/connect.js +0 -240
  331. package/artifacts/exe/dist/node_modules/undici/lib/core/constants.js +0 -118
  332. package/artifacts/exe/dist/node_modules/undici/lib/core/diagnostics.js +0 -202
  333. package/artifacts/exe/dist/node_modules/undici/lib/core/errors.js +0 -425
  334. package/artifacts/exe/dist/node_modules/undici/lib/core/request.js +0 -416
  335. package/artifacts/exe/dist/node_modules/undici/lib/core/symbols.js +0 -67
  336. package/artifacts/exe/dist/node_modules/undici/lib/core/tree.js +0 -152
  337. package/artifacts/exe/dist/node_modules/undici/lib/core/util.js +0 -719
  338. package/artifacts/exe/dist/node_modules/undici/lib/dispatcher/agent.js +0 -129
  339. package/artifacts/exe/dist/node_modules/undici/lib/dispatcher/balanced-pool.js +0 -209
  340. package/artifacts/exe/dist/node_modules/undici/lib/dispatcher/client-h1.js +0 -1496
  341. package/artifacts/exe/dist/node_modules/undici/lib/dispatcher/client-h2.js +0 -744
  342. package/artifacts/exe/dist/node_modules/undici/lib/dispatcher/client.js +0 -623
  343. package/artifacts/exe/dist/node_modules/undici/lib/dispatcher/dispatcher-base.js +0 -199
  344. package/artifacts/exe/dist/node_modules/undici/lib/dispatcher/dispatcher.js +0 -65
  345. package/artifacts/exe/dist/node_modules/undici/lib/dispatcher/env-http-proxy-agent.js +0 -160
  346. package/artifacts/exe/dist/node_modules/undici/lib/dispatcher/fixed-queue.js +0 -117
  347. package/artifacts/exe/dist/node_modules/undici/lib/dispatcher/pool-base.js +0 -194
  348. package/artifacts/exe/dist/node_modules/undici/lib/dispatcher/pool-stats.js +0 -34
  349. package/artifacts/exe/dist/node_modules/undici/lib/dispatcher/pool.js +0 -107
  350. package/artifacts/exe/dist/node_modules/undici/lib/dispatcher/proxy-agent.js +0 -274
  351. package/artifacts/exe/dist/node_modules/undici/lib/dispatcher/retry-agent.js +0 -35
  352. package/artifacts/exe/dist/node_modules/undici/lib/global.js +0 -32
  353. package/artifacts/exe/dist/node_modules/undici/lib/handler/decorator-handler.js +0 -44
  354. package/artifacts/exe/dist/node_modules/undici/lib/handler/redirect-handler.js +0 -232
  355. package/artifacts/exe/dist/node_modules/undici/lib/handler/retry-handler.js +0 -408
  356. package/artifacts/exe/dist/node_modules/undici/lib/interceptor/dns.js +0 -375
  357. package/artifacts/exe/dist/node_modules/undici/lib/interceptor/dump.js +0 -123
  358. package/artifacts/exe/dist/node_modules/undici/lib/interceptor/redirect-interceptor.js +0 -21
  359. package/artifacts/exe/dist/node_modules/undici/lib/interceptor/redirect.js +0 -24
  360. package/artifacts/exe/dist/node_modules/undici/lib/interceptor/response-error.js +0 -86
  361. package/artifacts/exe/dist/node_modules/undici/lib/interceptor/retry.js +0 -19
  362. package/artifacts/exe/dist/node_modules/undici/lib/llhttp/.gitkeep +0 -0
  363. package/artifacts/exe/dist/node_modules/undici/lib/llhttp/constants.js +0 -278
  364. package/artifacts/exe/dist/node_modules/undici/lib/llhttp/llhttp-wasm.js +0 -5
  365. package/artifacts/exe/dist/node_modules/undici/lib/llhttp/llhttp_simd-wasm.js +0 -5
  366. package/artifacts/exe/dist/node_modules/undici/lib/llhttp/utils.js +0 -15
  367. package/artifacts/exe/dist/node_modules/undici/lib/mock/mock-agent.js +0 -160
  368. package/artifacts/exe/dist/node_modules/undici/lib/mock/mock-client.js +0 -59
  369. package/artifacts/exe/dist/node_modules/undici/lib/mock/mock-errors.js +0 -28
  370. package/artifacts/exe/dist/node_modules/undici/lib/mock/mock-interceptor.js +0 -207
  371. package/artifacts/exe/dist/node_modules/undici/lib/mock/mock-pool.js +0 -59
  372. package/artifacts/exe/dist/node_modules/undici/lib/mock/mock-symbols.js +0 -23
  373. package/artifacts/exe/dist/node_modules/undici/lib/mock/mock-utils.js +0 -367
  374. package/artifacts/exe/dist/node_modules/undici/lib/mock/pending-interceptors-formatter.js +0 -43
  375. package/artifacts/exe/dist/node_modules/undici/lib/mock/pluralizer.js +0 -29
  376. package/artifacts/exe/dist/node_modules/undici/lib/util/timers.js +0 -423
  377. package/artifacts/exe/dist/node_modules/undici/lib/web/cache/cache.js +0 -859
  378. package/artifacts/exe/dist/node_modules/undici/lib/web/cache/cachestorage.js +0 -152
  379. package/artifacts/exe/dist/node_modules/undici/lib/web/cache/symbols.js +0 -5
  380. package/artifacts/exe/dist/node_modules/undici/lib/web/cache/util.js +0 -45
  381. package/artifacts/exe/dist/node_modules/undici/lib/web/cookies/constants.js +0 -12
  382. package/artifacts/exe/dist/node_modules/undici/lib/web/cookies/index.js +0 -184
  383. package/artifacts/exe/dist/node_modules/undici/lib/web/cookies/parse.js +0 -310
  384. package/artifacts/exe/dist/node_modules/undici/lib/web/cookies/util.js +0 -352
  385. package/artifacts/exe/dist/node_modules/undici/lib/web/eventsource/eventsource-stream.js +0 -398
  386. package/artifacts/exe/dist/node_modules/undici/lib/web/eventsource/eventsource.js +0 -480
  387. package/artifacts/exe/dist/node_modules/undici/lib/web/eventsource/util.js +0 -37
  388. package/artifacts/exe/dist/node_modules/undici/lib/web/fetch/LICENSE +0 -21
  389. package/artifacts/exe/dist/node_modules/undici/lib/web/fetch/body.js +0 -529
  390. package/artifacts/exe/dist/node_modules/undici/lib/web/fetch/constants.js +0 -124
  391. package/artifacts/exe/dist/node_modules/undici/lib/web/fetch/data-url.js +0 -744
  392. package/artifacts/exe/dist/node_modules/undici/lib/web/fetch/dispatcher-weakref.js +0 -46
  393. package/artifacts/exe/dist/node_modules/undici/lib/web/fetch/file.js +0 -126
  394. package/artifacts/exe/dist/node_modules/undici/lib/web/fetch/formdata-parser.js +0 -474
  395. package/artifacts/exe/dist/node_modules/undici/lib/web/fetch/formdata.js +0 -252
  396. package/artifacts/exe/dist/node_modules/undici/lib/web/fetch/global.js +0 -40
  397. package/artifacts/exe/dist/node_modules/undici/lib/web/fetch/headers.js +0 -687
  398. package/artifacts/exe/dist/node_modules/undici/lib/web/fetch/index.js +0 -2272
  399. package/artifacts/exe/dist/node_modules/undici/lib/web/fetch/request.js +0 -1037
  400. package/artifacts/exe/dist/node_modules/undici/lib/web/fetch/response.js +0 -610
  401. package/artifacts/exe/dist/node_modules/undici/lib/web/fetch/symbols.js +0 -9
  402. package/artifacts/exe/dist/node_modules/undici/lib/web/fetch/util.js +0 -1632
  403. package/artifacts/exe/dist/node_modules/undici/lib/web/fetch/webidl.js +0 -695
  404. package/artifacts/exe/dist/node_modules/undici/lib/web/fileapi/encoding.js +0 -290
  405. package/artifacts/exe/dist/node_modules/undici/lib/web/fileapi/filereader.js +0 -344
  406. package/artifacts/exe/dist/node_modules/undici/lib/web/fileapi/progressevent.js +0 -78
  407. package/artifacts/exe/dist/node_modules/undici/lib/web/fileapi/symbols.js +0 -10
  408. package/artifacts/exe/dist/node_modules/undici/lib/web/fileapi/util.js +0 -391
  409. package/artifacts/exe/dist/node_modules/undici/lib/web/websocket/connection.js +0 -371
  410. package/artifacts/exe/dist/node_modules/undici/lib/web/websocket/constants.js +0 -66
  411. package/artifacts/exe/dist/node_modules/undici/lib/web/websocket/events.js +0 -329
  412. package/artifacts/exe/dist/node_modules/undici/lib/web/websocket/frame.js +0 -96
  413. package/artifacts/exe/dist/node_modules/undici/lib/web/websocket/permessage-deflate.js +0 -100
  414. package/artifacts/exe/dist/node_modules/undici/lib/web/websocket/receiver.js +0 -513
  415. package/artifacts/exe/dist/node_modules/undici/lib/web/websocket/sender.js +0 -104
  416. package/artifacts/exe/dist/node_modules/undici/lib/web/websocket/symbols.js +0 -12
  417. package/artifacts/exe/dist/node_modules/undici/lib/web/websocket/util.js +0 -322
  418. package/artifacts/exe/dist/node_modules/undici/lib/web/websocket/websocket.js +0 -595
  419. package/artifacts/exe/dist/node_modules/undici/package.json +0 -160
  420. package/artifacts/exe/dist/node_modules/undici/scripts/strip-comments.js +0 -8
  421. package/artifacts/exe/dist/node_modules/v8-compile-cache/LICENSE +0 -21
  422. package/artifacts/exe/dist/node_modules/v8-compile-cache/package.json +0 -34
  423. package/artifacts/exe/dist/node_modules/v8-compile-cache/v8-compile-cache.js +0 -373
  424. package/artifacts/exe/dist/node_modules/which/LICENSE +0 -15
  425. package/artifacts/exe/dist/node_modules/which/bin/which.js +0 -52
  426. package/artifacts/exe/dist/node_modules/which/lib/index.js +0 -111
  427. package/artifacts/exe/dist/node_modules/which/package.json +0 -52
  428. package/artifacts/exe/dist/node_modules/yallist/dist/commonjs/index.js +0 -384
  429. package/artifacts/exe/dist/node_modules/yallist/dist/commonjs/package.json +0 -3
  430. package/artifacts/exe/dist/node_modules/yallist/dist/esm/index.js +0 -379
  431. package/artifacts/exe/dist/node_modules/yallist/dist/esm/package.json +0 -3
  432. package/artifacts/exe/dist/node_modules/yallist/package.json +0 -68
  433. package/artifacts/exe/dist/pnpm.mjs +0 -323057
  434. package/artifacts/exe/dist/pnpmrc +0 -2
  435. package/artifacts/exe/dist/templates/completion.bash +0 -31
  436. package/artifacts/exe/dist/templates/completion.fish +0 -22
  437. package/artifacts/exe/dist/templates/completion.ps1 +0 -193
  438. package/artifacts/exe/dist/templates/completion.zsh +0 -27
  439. package/artifacts/exe/dist/vendor/fastlist-0.3.0-x64.exe +0 -0
  440. package/artifacts/exe/dist/vendor/fastlist-0.3.0-x86.exe +0 -0
  441. package/artifacts/exe/dist/worker.js +0 -12117
@@ -1,1496 +0,0 @@
1
- 'use strict'
2
-
3
- /* global WebAssembly */
4
-
5
- const assert = require('node:assert')
6
- const util = require('../core/util.js')
7
- const { channels } = require('../core/diagnostics.js')
8
- const timers = require('../util/timers.js')
9
- const {
10
- RequestContentLengthMismatchError,
11
- ResponseContentLengthMismatchError,
12
- RequestAbortedError,
13
- InvalidArgumentError,
14
- HeadersTimeoutError,
15
- HeadersOverflowError,
16
- SocketError,
17
- InformationalError,
18
- BodyTimeoutError,
19
- HTTPParserError,
20
- ResponseExceededMaxSizeError
21
- } = require('../core/errors.js')
22
- const {
23
- kUrl,
24
- kReset,
25
- kClient,
26
- kParser,
27
- kBlocking,
28
- kRunning,
29
- kPending,
30
- kSize,
31
- kWriting,
32
- kQueue,
33
- kNoRef,
34
- kKeepAliveDefaultTimeout,
35
- kHostHeader,
36
- kPendingIdx,
37
- kRunningIdx,
38
- kError,
39
- kPipelining,
40
- kSocket,
41
- kKeepAliveTimeoutValue,
42
- kMaxHeadersSize,
43
- kKeepAliveMaxTimeout,
44
- kKeepAliveTimeoutThreshold,
45
- kHeadersTimeout,
46
- kBodyTimeout,
47
- kStrictContentLength,
48
- kMaxRequests,
49
- kCounter,
50
- kMaxResponseSize,
51
- kOnError,
52
- kResume,
53
- kHTTPContext
54
- } = require('../core/symbols.js')
55
-
56
- const constants = require('../llhttp/constants.js')
57
- const EMPTY_BUF = Buffer.alloc(0)
58
- const FastBuffer = Buffer[Symbol.species]
59
- const addListener = util.addListener
60
- const removeAllListeners = util.removeAllListeners
61
- const kIdleSocketValidation = Symbol('kIdleSocketValidation')
62
- const kIdleSocketValidationTimeout = Symbol('kIdleSocketValidationTimeout')
63
- const kSocketUsed = Symbol('kSocketUsed')
64
-
65
- let extractBody
66
-
67
- async function lazyllhttp () {
68
- const llhttpWasmData = process.env.JEST_WORKER_ID ? require('../llhttp/llhttp-wasm.js') : undefined
69
-
70
- let mod
71
- try {
72
- mod = await WebAssembly.compile(require('../llhttp/llhttp_simd-wasm.js'))
73
- } catch (e) {
74
- /* istanbul ignore next */
75
-
76
- // We could check if the error was caused by the simd option not
77
- // being enabled, but the occurring of this other error
78
- // * https://github.com/emscripten-core/emscripten/issues/11495
79
- // got me to remove that check to avoid breaking Node 12.
80
- mod = await WebAssembly.compile(llhttpWasmData || require('../llhttp/llhttp-wasm.js'))
81
- }
82
-
83
- return await WebAssembly.instantiate(mod, {
84
- env: {
85
- /* eslint-disable camelcase */
86
-
87
- wasm_on_url: (p, at, len) => {
88
- /* istanbul ignore next */
89
- return 0
90
- },
91
- wasm_on_status: (p, at, len) => {
92
- assert(currentParser.ptr === p)
93
- const start = at - currentBufferPtr + currentBufferRef.byteOffset
94
- return currentParser.onStatus(new FastBuffer(currentBufferRef.buffer, start, len)) || 0
95
- },
96
- wasm_on_message_begin: (p) => {
97
- assert(currentParser.ptr === p)
98
- return currentParser.onMessageBegin() || 0
99
- },
100
- wasm_on_header_field: (p, at, len) => {
101
- assert(currentParser.ptr === p)
102
- const start = at - currentBufferPtr + currentBufferRef.byteOffset
103
- return currentParser.onHeaderField(new FastBuffer(currentBufferRef.buffer, start, len)) || 0
104
- },
105
- wasm_on_header_value: (p, at, len) => {
106
- assert(currentParser.ptr === p)
107
- const start = at - currentBufferPtr + currentBufferRef.byteOffset
108
- return currentParser.onHeaderValue(new FastBuffer(currentBufferRef.buffer, start, len)) || 0
109
- },
110
- wasm_on_headers_complete: (p, statusCode, upgrade, shouldKeepAlive) => {
111
- assert(currentParser.ptr === p)
112
- return currentParser.onHeadersComplete(statusCode, Boolean(upgrade), Boolean(shouldKeepAlive)) || 0
113
- },
114
- wasm_on_body: (p, at, len) => {
115
- assert(currentParser.ptr === p)
116
- const start = at - currentBufferPtr + currentBufferRef.byteOffset
117
- return currentParser.onBody(new FastBuffer(currentBufferRef.buffer, start, len)) || 0
118
- },
119
- wasm_on_message_complete: (p) => {
120
- assert(currentParser.ptr === p)
121
- return currentParser.onMessageComplete() || 0
122
- }
123
-
124
- /* eslint-enable camelcase */
125
- }
126
- })
127
- }
128
-
129
- let llhttpInstance = null
130
- let llhttpPromise = lazyllhttp()
131
- llhttpPromise.catch()
132
-
133
- let currentParser = null
134
- let currentBufferRef = null
135
- let currentBufferSize = 0
136
- let currentBufferPtr = null
137
-
138
- const USE_NATIVE_TIMER = 0
139
- const USE_FAST_TIMER = 1
140
-
141
- // Use fast timers for headers and body to take eventual event loop
142
- // latency into account.
143
- const TIMEOUT_HEADERS = 2 | USE_FAST_TIMER
144
- const TIMEOUT_BODY = 4 | USE_FAST_TIMER
145
-
146
- // Use native timers to ignore event loop latency for keep-alive
147
- // handling.
148
- const TIMEOUT_KEEP_ALIVE = 8 | USE_NATIVE_TIMER
149
-
150
- class Parser {
151
- constructor (client, socket, { exports }) {
152
- assert(Number.isFinite(client[kMaxHeadersSize]) && client[kMaxHeadersSize] > 0)
153
-
154
- this.llhttp = exports
155
- this.ptr = this.llhttp.llhttp_alloc(constants.TYPE.RESPONSE)
156
- this.client = client
157
- this.socket = socket
158
- this.timeout = null
159
- this.timeoutValue = null
160
- this.timeoutType = null
161
- this.statusCode = null
162
- this.statusText = ''
163
- this.upgrade = false
164
- this.headers = []
165
- this.headersSize = 0
166
- this.headersMaxSize = client[kMaxHeadersSize]
167
- this.shouldKeepAlive = false
168
- this.paused = false
169
- this.resume = this.resume.bind(this)
170
-
171
- this.bytesRead = 0
172
-
173
- this.keepAlive = ''
174
- this.contentLength = ''
175
- this.connection = ''
176
- this.maxResponseSize = client[kMaxResponseSize]
177
- }
178
-
179
- setTimeout (delay, type) {
180
- // If the existing timer and the new timer are of different timer type
181
- // (fast or native) or have different delay, we need to clear the existing
182
- // timer and set a new one.
183
- if (
184
- delay !== this.timeoutValue ||
185
- (type & USE_FAST_TIMER) ^ (this.timeoutType & USE_FAST_TIMER)
186
- ) {
187
- // If a timeout is already set, clear it with clearTimeout of the fast
188
- // timer implementation, as it can clear fast and native timers.
189
- if (this.timeout) {
190
- timers.clearTimeout(this.timeout)
191
- this.timeout = null
192
- }
193
-
194
- if (delay) {
195
- if (type & USE_FAST_TIMER) {
196
- this.timeout = timers.setFastTimeout(onParserTimeout, delay, new WeakRef(this))
197
- } else {
198
- this.timeout = setTimeout(onParserTimeout, delay, new WeakRef(this))
199
- this.timeout.unref()
200
- }
201
- }
202
-
203
- this.timeoutValue = delay
204
- } else if (this.timeout) {
205
- // istanbul ignore else: only for jest
206
- if (this.timeout.refresh) {
207
- this.timeout.refresh()
208
- }
209
- }
210
-
211
- this.timeoutType = type
212
- }
213
-
214
- resume () {
215
- if (this.socket.destroyed || !this.paused) {
216
- return
217
- }
218
-
219
- assert(this.ptr != null)
220
- assert(currentParser == null)
221
-
222
- this.llhttp.llhttp_resume(this.ptr)
223
-
224
- assert(this.timeoutType === TIMEOUT_BODY)
225
- if (this.timeout) {
226
- // istanbul ignore else: only for jest
227
- if (this.timeout.refresh) {
228
- this.timeout.refresh()
229
- }
230
- }
231
-
232
- this.paused = false
233
- this.execute(this.socket.read() || EMPTY_BUF) // Flush parser.
234
- this.readMore()
235
- }
236
-
237
- readMore () {
238
- while (!this.paused && this.ptr) {
239
- const chunk = this.socket.read()
240
- if (chunk === null) {
241
- break
242
- }
243
- this.execute(chunk)
244
- }
245
- }
246
-
247
- execute (data) {
248
- assert(this.ptr != null)
249
- assert(currentParser == null)
250
- assert(!this.paused)
251
-
252
- const { socket, llhttp } = this
253
-
254
- if (data.length > currentBufferSize) {
255
- if (currentBufferPtr) {
256
- llhttp.free(currentBufferPtr)
257
- }
258
- currentBufferSize = Math.ceil(data.length / 4096) * 4096
259
- currentBufferPtr = llhttp.malloc(currentBufferSize)
260
- }
261
-
262
- new Uint8Array(llhttp.memory.buffer, currentBufferPtr, currentBufferSize).set(data)
263
-
264
- // Call `execute` on the wasm parser.
265
- // We pass the `llhttp_parser` pointer address, the pointer address of buffer view data,
266
- // and finally the length of bytes to parse.
267
- // The return value is an error code or `constants.ERROR.OK`.
268
- try {
269
- let ret
270
-
271
- try {
272
- currentBufferRef = data
273
- currentParser = this
274
- ret = llhttp.llhttp_execute(this.ptr, currentBufferPtr, data.length)
275
- /* eslint-disable-next-line no-useless-catch */
276
- } catch (err) {
277
- /* istanbul ignore next: difficult to make a test case for */
278
- throw err
279
- } finally {
280
- currentParser = null
281
- currentBufferRef = null
282
- }
283
-
284
- const offset = llhttp.llhttp_get_error_pos(this.ptr) - currentBufferPtr
285
-
286
- if (ret !== constants.ERROR.OK) {
287
- const body = data.subarray(offset)
288
-
289
- if (ret === constants.ERROR.PAUSED_UPGRADE) {
290
- this.onUpgrade(body)
291
- } else if (ret === constants.ERROR.PAUSED) {
292
- this.paused = true
293
- socket.unshift(body)
294
- } else {
295
- throw this.createError(ret, body)
296
- }
297
- }
298
- } catch (err) {
299
- util.destroy(socket, err)
300
- }
301
- }
302
-
303
- finish () {
304
- assert(currentParser === null)
305
- assert(this.ptr != null)
306
- assert(!this.paused)
307
-
308
- const { llhttp } = this
309
-
310
- let ret
311
-
312
- try {
313
- currentParser = this
314
- ret = llhttp.llhttp_finish(this.ptr)
315
- } finally {
316
- currentParser = null
317
- }
318
-
319
- if (ret === constants.ERROR.OK) {
320
- return null
321
- }
322
-
323
- if (ret === constants.ERROR.PAUSED || ret === constants.ERROR.PAUSED_UPGRADE) {
324
- this.paused = true
325
- return null
326
- }
327
-
328
- return this.createError(ret, EMPTY_BUF)
329
- }
330
-
331
- createError (ret, data) {
332
- const { llhttp, contentLength, bytesRead } = this
333
-
334
- if (contentLength && bytesRead !== parseInt(contentLength, 10)) {
335
- return new ResponseContentLengthMismatchError()
336
- }
337
-
338
- const ptr = llhttp.llhttp_get_error_reason(this.ptr)
339
- let message = ''
340
- if (ptr) {
341
- const len = new Uint8Array(llhttp.memory.buffer, ptr).indexOf(0)
342
- message =
343
- 'Response does not match the HTTP/1.1 protocol (' +
344
- Buffer.from(llhttp.memory.buffer, ptr, len).toString() +
345
- ')'
346
- }
347
-
348
- return new HTTPParserError(message, constants.ERROR[ret], data)
349
- }
350
-
351
- destroy () {
352
- assert(this.ptr != null)
353
- assert(currentParser == null)
354
-
355
- this.llhttp.llhttp_free(this.ptr)
356
- this.ptr = null
357
-
358
- this.timeout && timers.clearTimeout(this.timeout)
359
- this.timeout = null
360
- this.timeoutValue = null
361
- this.timeoutType = null
362
-
363
- this.paused = false
364
- }
365
-
366
- onStatus (buf) {
367
- this.statusText = buf.toString()
368
- }
369
-
370
- onMessageBegin () {
371
- const { socket, client } = this
372
-
373
- /* istanbul ignore next: difficult to make a test case for */
374
- if (socket.destroyed) {
375
- return -1
376
- }
377
-
378
- if (client[kRunning] === 0) {
379
- util.destroy(socket, new SocketError('bad response', util.getSocketInfo(socket)))
380
- return -1
381
- }
382
-
383
- const request = client[kQueue][client[kRunningIdx]]
384
- if (!request) {
385
- return -1
386
- }
387
- request.onResponseStarted()
388
- }
389
-
390
- onHeaderField (buf) {
391
- const len = this.headers.length
392
-
393
- if ((len & 1) === 0) {
394
- this.headers.push(buf)
395
- } else {
396
- this.headers[len - 1] = Buffer.concat([this.headers[len - 1], buf])
397
- }
398
-
399
- this.trackHeader(buf.length)
400
- }
401
-
402
- onHeaderValue (buf) {
403
- let len = this.headers.length
404
-
405
- if ((len & 1) === 1) {
406
- this.headers.push(buf)
407
- len += 1
408
- } else {
409
- this.headers[len - 1] = Buffer.concat([this.headers[len - 1], buf])
410
- }
411
-
412
- const key = this.headers[len - 2]
413
- if (key.length === 10) {
414
- const headerName = util.bufferToLowerCasedHeaderName(key)
415
- if (headerName === 'keep-alive') {
416
- this.keepAlive += buf.toString()
417
- } else if (headerName === 'connection') {
418
- this.connection += buf.toString()
419
- }
420
- } else if (key.length === 14 && util.bufferToLowerCasedHeaderName(key) === 'content-length') {
421
- this.contentLength += buf.toString()
422
- }
423
-
424
- this.trackHeader(buf.length)
425
- }
426
-
427
- trackHeader (len) {
428
- this.headersSize += len
429
- if (this.headersSize >= this.headersMaxSize) {
430
- util.destroy(this.socket, new HeadersOverflowError())
431
- }
432
- }
433
-
434
- onUpgrade (head) {
435
- const { upgrade, client, socket, headers, statusCode } = this
436
-
437
- assert(upgrade)
438
- assert(client[kSocket] === socket)
439
- assert(!socket.destroyed)
440
- assert(!this.paused)
441
- assert((headers.length & 1) === 0)
442
-
443
- const request = client[kQueue][client[kRunningIdx]]
444
- assert(request)
445
- assert(request.upgrade || request.method === 'CONNECT')
446
-
447
- this.statusCode = null
448
- this.statusText = ''
449
- this.shouldKeepAlive = null
450
-
451
- this.headers = []
452
- this.headersSize = 0
453
-
454
- socket.unshift(head)
455
-
456
- socket[kParser].destroy()
457
- socket[kParser] = null
458
-
459
- socket[kClient] = null
460
- socket[kError] = null
461
-
462
- removeAllListeners(socket)
463
-
464
- client[kSocket] = null
465
- client[kHTTPContext] = null // TODO (fix): This is hacky...
466
- client[kQueue][client[kRunningIdx]++] = null
467
- client.emit('disconnect', client[kUrl], [client], new InformationalError('upgrade'))
468
-
469
- try {
470
- request.onUpgrade(statusCode, headers, socket)
471
- } catch (err) {
472
- util.destroy(socket, err)
473
- }
474
-
475
- client[kResume]()
476
- }
477
-
478
- onHeadersComplete (statusCode, upgrade, shouldKeepAlive) {
479
- const { client, socket, headers, statusText } = this
480
-
481
- /* istanbul ignore next: difficult to make a test case for */
482
- if (socket.destroyed) {
483
- return -1
484
- }
485
-
486
- if (client[kRunning] === 0) {
487
- util.destroy(socket, new SocketError('bad response', util.getSocketInfo(socket)))
488
- return -1
489
- }
490
-
491
- const request = client[kQueue][client[kRunningIdx]]
492
-
493
- /* istanbul ignore next: difficult to make a test case for */
494
- if (!request) {
495
- return -1
496
- }
497
-
498
- assert(!this.upgrade)
499
- assert(this.statusCode < 200)
500
-
501
- if (statusCode === 100) {
502
- util.destroy(socket, new SocketError('bad response', util.getSocketInfo(socket)))
503
- return -1
504
- }
505
-
506
- /* this can only happen if server is misbehaving */
507
- if (upgrade && !request.upgrade) {
508
- util.destroy(socket, new SocketError('bad upgrade', util.getSocketInfo(socket)))
509
- return -1
510
- }
511
-
512
- assert(this.timeoutType === TIMEOUT_HEADERS)
513
-
514
- this.statusCode = statusCode
515
- this.shouldKeepAlive = (
516
- shouldKeepAlive ||
517
- // Override llhttp value which does not allow keepAlive for HEAD.
518
- (request.method === 'HEAD' && !socket[kReset] && this.connection.toLowerCase() === 'keep-alive')
519
- )
520
-
521
- if (this.statusCode >= 200) {
522
- const bodyTimeout = request.bodyTimeout != null
523
- ? request.bodyTimeout
524
- : client[kBodyTimeout]
525
- this.setTimeout(bodyTimeout, TIMEOUT_BODY)
526
- } else if (this.timeout) {
527
- // istanbul ignore else: only for jest
528
- if (this.timeout.refresh) {
529
- this.timeout.refresh()
530
- }
531
- }
532
-
533
- if (request.method === 'CONNECT') {
534
- assert(client[kRunning] === 1)
535
- this.upgrade = true
536
- return 2
537
- }
538
-
539
- if (upgrade) {
540
- assert(client[kRunning] === 1)
541
- this.upgrade = true
542
- return 2
543
- }
544
-
545
- assert((this.headers.length & 1) === 0)
546
- this.headers = []
547
- this.headersSize = 0
548
-
549
- if (this.shouldKeepAlive && client[kPipelining]) {
550
- const keepAliveTimeout = this.keepAlive ? util.parseKeepAliveTimeout(this.keepAlive) : null
551
-
552
- if (keepAliveTimeout != null) {
553
- const timeout = Math.min(
554
- keepAliveTimeout - client[kKeepAliveTimeoutThreshold],
555
- client[kKeepAliveMaxTimeout]
556
- )
557
- if (timeout <= 0) {
558
- socket[kReset] = true
559
- } else {
560
- client[kKeepAliveTimeoutValue] = timeout
561
- }
562
- } else {
563
- client[kKeepAliveTimeoutValue] = client[kKeepAliveDefaultTimeout]
564
- }
565
- } else {
566
- // Stop more requests from being dispatched.
567
- socket[kReset] = true
568
- }
569
-
570
- const pause = request.onHeaders(statusCode, headers, this.resume, statusText) === false
571
-
572
- if (request.aborted) {
573
- return -1
574
- }
575
-
576
- if (request.method === 'HEAD') {
577
- return 1
578
- }
579
-
580
- if (statusCode < 200) {
581
- return 1
582
- }
583
-
584
- if (socket[kBlocking]) {
585
- socket[kBlocking] = false
586
- client[kResume]()
587
- }
588
-
589
- return pause ? constants.ERROR.PAUSED : 0
590
- }
591
-
592
- onBody (buf) {
593
- const { client, socket, statusCode, maxResponseSize } = this
594
-
595
- if (socket.destroyed) {
596
- return -1
597
- }
598
-
599
- const request = client[kQueue][client[kRunningIdx]]
600
- assert(request)
601
-
602
- assert(this.timeoutType === TIMEOUT_BODY)
603
- if (this.timeout) {
604
- // istanbul ignore else: only for jest
605
- if (this.timeout.refresh) {
606
- this.timeout.refresh()
607
- }
608
- }
609
-
610
- assert(statusCode >= 200)
611
-
612
- if (maxResponseSize > -1 && this.bytesRead + buf.length > maxResponseSize) {
613
- util.destroy(socket, new ResponseExceededMaxSizeError())
614
- return -1
615
- }
616
-
617
- this.bytesRead += buf.length
618
-
619
- if (request.onData(buf) === false) {
620
- return constants.ERROR.PAUSED
621
- }
622
- }
623
-
624
- onMessageComplete () {
625
- const { client, socket, statusCode, upgrade, headers, contentLength, bytesRead, shouldKeepAlive } = this
626
-
627
- if (socket.destroyed && (!statusCode || shouldKeepAlive)) {
628
- return -1
629
- }
630
-
631
- if (upgrade) {
632
- return
633
- }
634
-
635
- assert(statusCode >= 100)
636
- assert((this.headers.length & 1) === 0)
637
-
638
- const request = client[kQueue][client[kRunningIdx]]
639
- assert(request)
640
-
641
- this.statusCode = null
642
- this.statusText = ''
643
- this.bytesRead = 0
644
- this.contentLength = ''
645
- this.keepAlive = ''
646
- this.connection = ''
647
-
648
- this.headers = []
649
- this.headersSize = 0
650
-
651
- if (statusCode < 200) {
652
- return
653
- }
654
-
655
- /* istanbul ignore next: should be handled by llhttp? */
656
- if (request.method !== 'HEAD' && contentLength && bytesRead !== parseInt(contentLength, 10)) {
657
- util.destroy(socket, new ResponseContentLengthMismatchError())
658
- return -1
659
- }
660
-
661
- request.onComplete(headers)
662
-
663
- client[kQueue][client[kRunningIdx]++] = null
664
- socket[kSocketUsed] = true
665
-
666
- if (socket[kWriting]) {
667
- assert(client[kRunning] === 0)
668
- // Response completed before request.
669
- util.destroy(socket, new InformationalError('reset'))
670
- return constants.ERROR.PAUSED
671
- } else if (!shouldKeepAlive) {
672
- util.destroy(socket, new InformationalError('reset'))
673
- return constants.ERROR.PAUSED
674
- } else if (socket[kReset] && client[kRunning] === 0) {
675
- // Destroy socket once all requests have completed.
676
- // The request at the tail of the pipeline is the one
677
- // that requested reset and no further requests should
678
- // have been queued since then.
679
- util.destroy(socket, new InformationalError('reset'))
680
- return constants.ERROR.PAUSED
681
- } else if (client[kPipelining] == null || client[kPipelining] === 1) {
682
- // We must wait a full event loop cycle to reuse this socket to make sure
683
- // that non-spec compliant servers are not closing the connection even if they
684
- // said they won't.
685
- setImmediate(() => client[kResume]())
686
- } else {
687
- client[kResume]()
688
- }
689
- }
690
- }
691
-
692
- function onParserTimeout (parser) {
693
- const { socket, timeoutType, client, paused } = parser.deref()
694
-
695
- /* istanbul ignore else */
696
- if (timeoutType === TIMEOUT_HEADERS) {
697
- if (!socket[kWriting] || socket.writableNeedDrain || client[kRunning] > 1) {
698
- assert(!paused, 'cannot be paused while waiting for headers')
699
- util.destroy(socket, new HeadersTimeoutError())
700
- }
701
- } else if (timeoutType === TIMEOUT_BODY) {
702
- if (!paused) {
703
- util.destroy(socket, new BodyTimeoutError())
704
- }
705
- } else if (timeoutType === TIMEOUT_KEEP_ALIVE) {
706
- assert(client[kRunning] === 0 && client[kKeepAliveTimeoutValue])
707
- util.destroy(socket, new InformationalError('socket idle timeout'))
708
- }
709
- }
710
-
711
- async function connectH1 (client, socket) {
712
- client[kSocket] = socket
713
-
714
- if (!llhttpInstance) {
715
- llhttpInstance = await llhttpPromise
716
- llhttpPromise = null
717
- }
718
-
719
- socket[kNoRef] = false
720
- socket[kWriting] = false
721
- socket[kReset] = false
722
- socket[kBlocking] = false
723
- socket[kIdleSocketValidation] = 0
724
- socket[kIdleSocketValidationTimeout] = null
725
- socket[kSocketUsed] = false
726
- socket[kParser] = new Parser(client, socket, llhttpInstance)
727
-
728
- addListener(socket, 'error', function (err) {
729
- assert(err.code !== 'ERR_TLS_CERT_ALTNAME_INVALID')
730
-
731
- const parser = this[kParser]
732
-
733
- // On Mac OS, we get an ECONNRESET even if there is a full body to be forwarded
734
- // to the user.
735
- if (err.code === 'ECONNRESET' && parser.statusCode && !parser.shouldKeepAlive) {
736
- const parserErr = parser.finish()
737
- if (parserErr) {
738
- this[kError] = parserErr
739
- this[kClient][kOnError](parserErr)
740
- }
741
- return
742
- }
743
-
744
- this[kError] = err
745
-
746
- this[kClient][kOnError](err)
747
- })
748
- addListener(socket, 'readable', function () {
749
- const parser = this[kParser]
750
-
751
- if (parser) {
752
- parser.readMore()
753
- }
754
- })
755
- addListener(socket, 'end', function () {
756
- const parser = this[kParser]
757
-
758
- if (parser.statusCode && !parser.shouldKeepAlive) {
759
- const parserErr = parser.finish()
760
- if (parserErr) {
761
- util.destroy(this, parserErr)
762
- }
763
- return
764
- }
765
-
766
- util.destroy(this, new SocketError('other side closed', util.getSocketInfo(this)))
767
- })
768
- addListener(socket, 'close', function () {
769
- const client = this[kClient]
770
- const parser = this[kParser]
771
-
772
- clearIdleSocketValidation(this)
773
-
774
- if (parser) {
775
- if (!this[kError] && parser.statusCode && !parser.shouldKeepAlive) {
776
- this[kError] = parser.finish() || this[kError]
777
- }
778
-
779
- this[kParser].destroy()
780
- this[kParser] = null
781
- }
782
-
783
- const err = this[kError] || new SocketError('closed', util.getSocketInfo(this))
784
-
785
- client[kSocket] = null
786
- client[kHTTPContext] = null // TODO (fix): This is hacky...
787
-
788
- if (client.destroyed) {
789
- assert(client[kPending] === 0)
790
-
791
- // Fail entire queue.
792
- const requests = client[kQueue].splice(client[kRunningIdx])
793
- for (let i = 0; i < requests.length; i++) {
794
- const request = requests[i]
795
- util.errorRequest(client, request, err)
796
- }
797
- } else if (client[kRunning] > 0 && err.code !== 'UND_ERR_INFO') {
798
- // Fail head of pipeline.
799
- const request = client[kQueue][client[kRunningIdx]]
800
- client[kQueue][client[kRunningIdx]++] = null
801
-
802
- util.errorRequest(client, request, err)
803
- }
804
-
805
- client[kPendingIdx] = client[kRunningIdx]
806
-
807
- assert(client[kRunning] === 0)
808
-
809
- client.emit('disconnect', client[kUrl], [client], err)
810
-
811
- client[kResume]()
812
- })
813
-
814
- let closed = false
815
- socket.on('close', () => {
816
- closed = true
817
- })
818
-
819
- return {
820
- version: 'h1',
821
- defaultPipelining: 1,
822
- write (...args) {
823
- return writeH1(client, ...args)
824
- },
825
- resume () {
826
- resumeH1(client)
827
- },
828
- destroy (err, callback) {
829
- if (closed) {
830
- queueMicrotask(callback)
831
- } else {
832
- socket.destroy(err).on('close', callback)
833
- }
834
- },
835
- get destroyed () {
836
- return socket.destroyed
837
- },
838
- busy (request) {
839
- if (socket[kWriting] || socket[kReset] || socket[kBlocking] || socket[kIdleSocketValidation] === 1) {
840
- return true
841
- }
842
-
843
- if (request) {
844
- if (client[kRunning] > 0 && !request.idempotent) {
845
- // Non-idempotent request cannot be retried.
846
- // Ensure that no other requests are inflight and
847
- // could cause failure.
848
- return true
849
- }
850
-
851
- if (client[kRunning] > 0 && (request.upgrade || request.method === 'CONNECT')) {
852
- // Don't dispatch an upgrade until all preceding requests have completed.
853
- // A misbehaving server might upgrade the connection before all pipelined
854
- // request has completed.
855
- return true
856
- }
857
-
858
- if (client[kRunning] > 0 && util.bodyLength(request.body) !== 0 &&
859
- (util.isStream(request.body) || util.isAsyncIterable(request.body) || util.isFormDataLike(request.body))) {
860
- // Request with stream or iterator body can error while other requests
861
- // are inflight and indirectly error those as well.
862
- // Ensure this doesn't happen by waiting for inflight
863
- // to complete before dispatching.
864
-
865
- // Request with stream or iterator body cannot be retried.
866
- // Ensure that no other requests are inflight and
867
- // could cause failure.
868
- return true
869
- }
870
- }
871
-
872
- return false
873
- }
874
- }
875
- }
876
-
877
- function clearIdleSocketValidation (socket) {
878
- if (socket[kIdleSocketValidationTimeout]) {
879
- clearTimeout(socket[kIdleSocketValidationTimeout])
880
- socket[kIdleSocketValidationTimeout] = null
881
- }
882
-
883
- socket[kIdleSocketValidation] = 0
884
- }
885
-
886
- function scheduleIdleSocketValidation (client, socket) {
887
- socket[kIdleSocketValidation] = 1
888
- socket[kIdleSocketValidationTimeout] = setTimeout(() => {
889
- socket[kIdleSocketValidationTimeout] = null
890
- socket[kIdleSocketValidation] = 2
891
-
892
- if (client[kSocket] === socket && !socket.destroyed) {
893
- client[kResume]()
894
- }
895
- }, 0)
896
- socket[kIdleSocketValidationTimeout].unref?.()
897
- }
898
-
899
- /**
900
- * @param {import('./client.js')} client
901
- */
902
- function resumeH1 (client) {
903
- const socket = client[kSocket]
904
-
905
- if (socket && !socket.destroyed) {
906
- if (client[kSize] === 0) {
907
- if (!socket[kNoRef] && socket.unref) {
908
- socket.unref()
909
- socket[kNoRef] = true
910
- }
911
- } else if (socket[kNoRef] && socket.ref) {
912
- socket.ref()
913
- socket[kNoRef] = false
914
- }
915
-
916
- if (client[kRunning] === 0 && client[kPending] > 0 && socket[kSocketUsed]) {
917
- if (socket[kIdleSocketValidation] === 0) {
918
- scheduleIdleSocketValidation(client, socket)
919
- socket[kParser].readMore()
920
- if (socket.destroyed) {
921
- return
922
- }
923
- return
924
- }
925
-
926
- if (socket[kIdleSocketValidation] === 1) {
927
- socket[kParser].readMore()
928
- if (socket.destroyed) {
929
- return
930
- }
931
- return
932
- }
933
- }
934
-
935
- if (client[kRunning] === 0) {
936
- socket[kParser].readMore()
937
- if (socket.destroyed) {
938
- return
939
- }
940
- }
941
-
942
- if (client[kSize] === 0) {
943
- if (socket[kParser].timeoutType !== TIMEOUT_KEEP_ALIVE) {
944
- socket[kParser].setTimeout(client[kKeepAliveTimeoutValue], TIMEOUT_KEEP_ALIVE)
945
- }
946
- } else if (client[kRunning] > 0 && socket[kParser].statusCode < 200) {
947
- if (socket[kParser].timeoutType !== TIMEOUT_HEADERS) {
948
- const request = client[kQueue][client[kRunningIdx]]
949
- const headersTimeout = request.headersTimeout != null
950
- ? request.headersTimeout
951
- : client[kHeadersTimeout]
952
- socket[kParser].setTimeout(headersTimeout, TIMEOUT_HEADERS)
953
- }
954
- }
955
- }
956
- }
957
-
958
- // https://www.rfc-editor.org/rfc/rfc7230#section-3.3.2
959
- function shouldSendContentLength (method) {
960
- return method !== 'GET' && method !== 'HEAD' && method !== 'OPTIONS' && method !== 'TRACE' && method !== 'CONNECT'
961
- }
962
-
963
- function writeH1 (client, request) {
964
- const { method, path, host, upgrade, blocking, reset } = request
965
-
966
- let { body, headers, contentLength } = request
967
-
968
- // https://tools.ietf.org/html/rfc7231#section-4.3.1
969
- // https://tools.ietf.org/html/rfc7231#section-4.3.2
970
- // https://tools.ietf.org/html/rfc7231#section-4.3.5
971
-
972
- // Sending a payload body on a request that does not
973
- // expect it can cause undefined behavior on some
974
- // servers and corrupt connection state. Do not
975
- // re-use the connection for further requests.
976
-
977
- const expectsPayload = (
978
- method === 'PUT' ||
979
- method === 'POST' ||
980
- method === 'PATCH' ||
981
- method === 'QUERY' ||
982
- method === 'PROPFIND' ||
983
- method === 'PROPPATCH'
984
- )
985
-
986
- if (util.isFormDataLike(body)) {
987
- if (!extractBody) {
988
- extractBody = require('../web/fetch/body.js').extractBody
989
- }
990
-
991
- const [bodyStream, contentType] = extractBody(body)
992
- if (request.contentType == null) {
993
- headers.push('content-type', contentType)
994
- }
995
- body = bodyStream.stream
996
- contentLength = bodyStream.length
997
- } else if (util.isBlobLike(body) && request.contentType == null) {
998
- const contentType = body.type
999
- if (contentType) {
1000
- const contentTypeValue = `${contentType}`
1001
- if (!util.isValidHeaderValue(contentTypeValue)) {
1002
- util.errorRequest(client, request, new InvalidArgumentError('invalid content-type header'))
1003
- return false
1004
- }
1005
- headers.push('content-type', contentTypeValue)
1006
- }
1007
- }
1008
-
1009
- if (body && typeof body.read === 'function') {
1010
- // Try to read EOF in order to get length.
1011
- body.read(0)
1012
- }
1013
-
1014
- const bodyLength = util.bodyLength(body)
1015
-
1016
- contentLength = bodyLength ?? contentLength
1017
-
1018
- if (contentLength === null) {
1019
- contentLength = request.contentLength
1020
- }
1021
-
1022
- if (contentLength === 0 && !expectsPayload) {
1023
- // https://tools.ietf.org/html/rfc7230#section-3.3.2
1024
- // A user agent SHOULD NOT send a Content-Length header field when
1025
- // the request message does not contain a payload body and the method
1026
- // semantics do not anticipate such a body.
1027
-
1028
- contentLength = null
1029
- }
1030
-
1031
- // https://github.com/nodejs/undici/issues/2046
1032
- // A user agent may send a Content-Length header with 0 value, this should be allowed.
1033
- if (shouldSendContentLength(method) && contentLength > 0 && request.contentLength !== null && request.contentLength !== contentLength) {
1034
- if (client[kStrictContentLength]) {
1035
- util.errorRequest(client, request, new RequestContentLengthMismatchError())
1036
- return false
1037
- }
1038
-
1039
- process.emitWarning(new RequestContentLengthMismatchError())
1040
- }
1041
-
1042
- const socket = client[kSocket]
1043
- clearIdleSocketValidation(socket)
1044
-
1045
- const abort = (err) => {
1046
- if (request.aborted || request.completed) {
1047
- return
1048
- }
1049
-
1050
- util.errorRequest(client, request, err || new RequestAbortedError())
1051
-
1052
- util.destroy(body)
1053
- util.destroy(socket, new InformationalError('aborted'))
1054
- }
1055
-
1056
- try {
1057
- request.onConnect(abort)
1058
- } catch (err) {
1059
- util.errorRequest(client, request, err)
1060
- }
1061
-
1062
- if (request.aborted) {
1063
- return false
1064
- }
1065
-
1066
- if (method === 'HEAD') {
1067
- // https://github.com/mcollina/undici/issues/258
1068
- // Close after a HEAD request to interop with misbehaving servers
1069
- // that may send a body in the response.
1070
-
1071
- socket[kReset] = true
1072
- }
1073
-
1074
- if (upgrade || method === 'CONNECT') {
1075
- // On CONNECT or upgrade, block pipeline from dispatching further
1076
- // requests on this connection.
1077
-
1078
- socket[kReset] = true
1079
- }
1080
-
1081
- if (reset != null) {
1082
- socket[kReset] = reset
1083
- }
1084
-
1085
- if (client[kMaxRequests] && socket[kCounter]++ >= client[kMaxRequests]) {
1086
- socket[kReset] = true
1087
- }
1088
-
1089
- if (blocking) {
1090
- socket[kBlocking] = true
1091
- }
1092
-
1093
- let header = `${method} ${path} HTTP/1.1\r\n`
1094
-
1095
- if (typeof host === 'string') {
1096
- header += `host: ${host}\r\n`
1097
- } else {
1098
- header += client[kHostHeader]
1099
- }
1100
-
1101
- if (upgrade) {
1102
- header += `connection: upgrade\r\nupgrade: ${upgrade}\r\n`
1103
- } else if (client[kPipelining] && !socket[kReset]) {
1104
- header += 'connection: keep-alive\r\n'
1105
- } else {
1106
- header += 'connection: close\r\n'
1107
- }
1108
-
1109
- if (Array.isArray(headers)) {
1110
- for (let n = 0; n < headers.length; n += 2) {
1111
- const key = headers[n + 0]
1112
- const val = headers[n + 1]
1113
-
1114
- if (Array.isArray(val)) {
1115
- for (let i = 0; i < val.length; i++) {
1116
- header += `${key}: ${val[i]}\r\n`
1117
- }
1118
- } else {
1119
- header += `${key}: ${val}\r\n`
1120
- }
1121
- }
1122
- }
1123
-
1124
- if (channels.sendHeaders.hasSubscribers) {
1125
- channels.sendHeaders.publish({ request, headers: header, socket })
1126
- }
1127
-
1128
- /* istanbul ignore else: assertion */
1129
- if (!body || bodyLength === 0) {
1130
- writeBuffer(abort, null, client, request, socket, contentLength, header, expectsPayload)
1131
- } else if (util.isBuffer(body)) {
1132
- writeBuffer(abort, body, client, request, socket, contentLength, header, expectsPayload)
1133
- } else if (util.isBlobLike(body)) {
1134
- if (typeof body.stream === 'function') {
1135
- writeIterable(abort, body.stream(), client, request, socket, contentLength, header, expectsPayload)
1136
- } else {
1137
- writeBlob(abort, body, client, request, socket, contentLength, header, expectsPayload)
1138
- }
1139
- } else if (util.isStream(body)) {
1140
- writeStream(abort, body, client, request, socket, contentLength, header, expectsPayload)
1141
- } else if (util.isIterable(body)) {
1142
- writeIterable(abort, body, client, request, socket, contentLength, header, expectsPayload)
1143
- } else {
1144
- assert(false)
1145
- }
1146
-
1147
- return true
1148
- }
1149
-
1150
- function writeStream (abort, body, client, request, socket, contentLength, header, expectsPayload) {
1151
- assert(contentLength !== 0 || client[kRunning] === 0, 'stream body cannot be pipelined')
1152
-
1153
- let finished = false
1154
-
1155
- const writer = new AsyncWriter({ abort, socket, request, contentLength, client, expectsPayload, header })
1156
-
1157
- const onData = function (chunk) {
1158
- if (finished) {
1159
- return
1160
- }
1161
-
1162
- try {
1163
- if (!writer.write(chunk) && this.pause) {
1164
- this.pause()
1165
- }
1166
- } catch (err) {
1167
- util.destroy(this, err)
1168
- }
1169
- }
1170
- const onDrain = function () {
1171
- if (finished) {
1172
- return
1173
- }
1174
-
1175
- if (body.resume) {
1176
- body.resume()
1177
- }
1178
- }
1179
- const onClose = function () {
1180
- // 'close' might be emitted *before* 'error' for
1181
- // broken streams. Wait a tick to avoid this case.
1182
- queueMicrotask(() => {
1183
- // It's only safe to remove 'error' listener after
1184
- // 'close'.
1185
- body.removeListener('error', onFinished)
1186
- })
1187
-
1188
- if (!finished) {
1189
- const err = new RequestAbortedError()
1190
- queueMicrotask(() => onFinished(err))
1191
- }
1192
- }
1193
- const onFinished = function (err) {
1194
- if (finished) {
1195
- return
1196
- }
1197
-
1198
- finished = true
1199
-
1200
- assert(socket.destroyed || (socket[kWriting] && client[kRunning] <= 1))
1201
-
1202
- socket
1203
- .off('drain', onDrain)
1204
- .off('error', onFinished)
1205
-
1206
- body
1207
- .removeListener('data', onData)
1208
- .removeListener('end', onFinished)
1209
- .removeListener('close', onClose)
1210
-
1211
- if (!err) {
1212
- try {
1213
- writer.end()
1214
- } catch (er) {
1215
- err = er
1216
- }
1217
- }
1218
-
1219
- writer.destroy(err)
1220
-
1221
- if (err && (err.code !== 'UND_ERR_INFO' || err.message !== 'reset')) {
1222
- util.destroy(body, err)
1223
- } else {
1224
- util.destroy(body)
1225
- }
1226
- }
1227
-
1228
- body
1229
- .on('data', onData)
1230
- .on('end', onFinished)
1231
- .on('error', onFinished)
1232
- .on('close', onClose)
1233
-
1234
- if (body.resume) {
1235
- body.resume()
1236
- }
1237
-
1238
- socket
1239
- .on('drain', onDrain)
1240
- .on('error', onFinished)
1241
-
1242
- if (body.errorEmitted ?? body.errored) {
1243
- setImmediate(() => onFinished(body.errored))
1244
- } else if (body.endEmitted ?? body.readableEnded) {
1245
- setImmediate(() => onFinished(null))
1246
- }
1247
-
1248
- if (body.closeEmitted ?? body.closed) {
1249
- setImmediate(onClose)
1250
- }
1251
- }
1252
-
1253
- function writeBuffer (abort, body, client, request, socket, contentLength, header, expectsPayload) {
1254
- try {
1255
- if (!body) {
1256
- if (contentLength === 0) {
1257
- socket.write(`${header}content-length: 0\r\n\r\n`, 'latin1')
1258
- } else {
1259
- assert(contentLength === null, 'no body must not have content length')
1260
- socket.write(`${header}\r\n`, 'latin1')
1261
- }
1262
- } else if (util.isBuffer(body)) {
1263
- assert(contentLength === body.byteLength, 'buffer body must have content length')
1264
-
1265
- socket.cork()
1266
- socket.write(`${header}content-length: ${contentLength}\r\n\r\n`, 'latin1')
1267
- socket.write(body)
1268
- socket.uncork()
1269
- request.onBodySent(body)
1270
-
1271
- if (!expectsPayload && request.reset !== false) {
1272
- socket[kReset] = true
1273
- }
1274
- }
1275
- request.onRequestSent()
1276
-
1277
- client[kResume]()
1278
- } catch (err) {
1279
- abort(err)
1280
- }
1281
- }
1282
-
1283
- async function writeBlob (abort, body, client, request, socket, contentLength, header, expectsPayload) {
1284
- assert(contentLength === body.size, 'blob body must have content length')
1285
-
1286
- try {
1287
- if (contentLength != null && contentLength !== body.size) {
1288
- throw new RequestContentLengthMismatchError()
1289
- }
1290
-
1291
- const buffer = Buffer.from(await body.arrayBuffer())
1292
-
1293
- socket.cork()
1294
- socket.write(`${header}content-length: ${contentLength}\r\n\r\n`, 'latin1')
1295
- socket.write(buffer)
1296
- socket.uncork()
1297
-
1298
- request.onBodySent(buffer)
1299
- request.onRequestSent()
1300
-
1301
- if (!expectsPayload && request.reset !== false) {
1302
- socket[kReset] = true
1303
- }
1304
-
1305
- client[kResume]()
1306
- } catch (err) {
1307
- abort(err)
1308
- }
1309
- }
1310
-
1311
- async function writeIterable (abort, body, client, request, socket, contentLength, header, expectsPayload) {
1312
- assert(contentLength !== 0 || client[kRunning] === 0, 'iterator body cannot be pipelined')
1313
-
1314
- let callback = null
1315
- function onDrain () {
1316
- if (callback) {
1317
- const cb = callback
1318
- callback = null
1319
- cb()
1320
- }
1321
- }
1322
-
1323
- const waitForDrain = () => new Promise((resolve, reject) => {
1324
- assert(callback === null)
1325
-
1326
- if (socket[kError]) {
1327
- reject(socket[kError])
1328
- } else {
1329
- callback = resolve
1330
- }
1331
- })
1332
-
1333
- socket
1334
- .on('close', onDrain)
1335
- .on('drain', onDrain)
1336
-
1337
- const writer = new AsyncWriter({ abort, socket, request, contentLength, client, expectsPayload, header })
1338
- try {
1339
- // It's up to the user to somehow abort the async iterable.
1340
- for await (const chunk of body) {
1341
- if (socket[kError]) {
1342
- throw socket[kError]
1343
- }
1344
-
1345
- if (!writer.write(chunk)) {
1346
- await waitForDrain()
1347
- }
1348
- }
1349
-
1350
- writer.end()
1351
- } catch (err) {
1352
- writer.destroy(err)
1353
- } finally {
1354
- socket
1355
- .off('close', onDrain)
1356
- .off('drain', onDrain)
1357
- }
1358
- }
1359
-
1360
- class AsyncWriter {
1361
- constructor ({ abort, socket, request, contentLength, client, expectsPayload, header }) {
1362
- this.socket = socket
1363
- this.request = request
1364
- this.contentLength = contentLength
1365
- this.client = client
1366
- this.bytesWritten = 0
1367
- this.expectsPayload = expectsPayload
1368
- this.header = header
1369
- this.abort = abort
1370
-
1371
- socket[kWriting] = true
1372
- }
1373
-
1374
- write (chunk) {
1375
- const { socket, request, contentLength, client, bytesWritten, expectsPayload, header } = this
1376
-
1377
- if (socket[kError]) {
1378
- throw socket[kError]
1379
- }
1380
-
1381
- if (socket.destroyed) {
1382
- return false
1383
- }
1384
-
1385
- const len = Buffer.byteLength(chunk)
1386
- if (!len) {
1387
- return true
1388
- }
1389
-
1390
- // We should defer writing chunks.
1391
- if (contentLength !== null && bytesWritten + len > contentLength) {
1392
- if (client[kStrictContentLength]) {
1393
- throw new RequestContentLengthMismatchError()
1394
- }
1395
-
1396
- process.emitWarning(new RequestContentLengthMismatchError())
1397
- }
1398
-
1399
- socket.cork()
1400
-
1401
- if (bytesWritten === 0) {
1402
- if (!expectsPayload && request.reset !== false) {
1403
- socket[kReset] = true
1404
- }
1405
-
1406
- if (contentLength === null) {
1407
- socket.write(`${header}transfer-encoding: chunked\r\n`, 'latin1')
1408
- } else {
1409
- socket.write(`${header}content-length: ${contentLength}\r\n\r\n`, 'latin1')
1410
- }
1411
- }
1412
-
1413
- if (contentLength === null) {
1414
- socket.write(`\r\n${len.toString(16)}\r\n`, 'latin1')
1415
- }
1416
-
1417
- this.bytesWritten += len
1418
-
1419
- const ret = socket.write(chunk)
1420
-
1421
- socket.uncork()
1422
-
1423
- request.onBodySent(chunk)
1424
-
1425
- if (!ret) {
1426
- if (socket[kParser].timeout && socket[kParser].timeoutType === TIMEOUT_HEADERS) {
1427
- // istanbul ignore else: only for jest
1428
- if (socket[kParser].timeout.refresh) {
1429
- socket[kParser].timeout.refresh()
1430
- }
1431
- }
1432
- }
1433
-
1434
- return ret
1435
- }
1436
-
1437
- end () {
1438
- const { socket, contentLength, client, bytesWritten, expectsPayload, header, request } = this
1439
- request.onRequestSent()
1440
-
1441
- socket[kWriting] = false
1442
-
1443
- if (socket[kError]) {
1444
- throw socket[kError]
1445
- }
1446
-
1447
- if (socket.destroyed) {
1448
- return
1449
- }
1450
-
1451
- if (bytesWritten === 0) {
1452
- if (expectsPayload) {
1453
- // https://tools.ietf.org/html/rfc7230#section-3.3.2
1454
- // A user agent SHOULD send a Content-Length in a request message when
1455
- // no Transfer-Encoding is sent and the request method defines a meaning
1456
- // for an enclosed payload body.
1457
-
1458
- socket.write(`${header}content-length: 0\r\n\r\n`, 'latin1')
1459
- } else {
1460
- socket.write(`${header}\r\n`, 'latin1')
1461
- }
1462
- } else if (contentLength === null) {
1463
- socket.write('\r\n0\r\n\r\n', 'latin1')
1464
- }
1465
-
1466
- if (contentLength !== null && bytesWritten !== contentLength) {
1467
- if (client[kStrictContentLength]) {
1468
- throw new RequestContentLengthMismatchError()
1469
- } else {
1470
- process.emitWarning(new RequestContentLengthMismatchError())
1471
- }
1472
- }
1473
-
1474
- if (socket[kParser].timeout && socket[kParser].timeoutType === TIMEOUT_HEADERS) {
1475
- // istanbul ignore else: only for jest
1476
- if (socket[kParser].timeout.refresh) {
1477
- socket[kParser].timeout.refresh()
1478
- }
1479
- }
1480
-
1481
- client[kResume]()
1482
- }
1483
-
1484
- destroy (err) {
1485
- const { socket, client, abort } = this
1486
-
1487
- socket[kWriting] = false
1488
-
1489
- if (err) {
1490
- assert(client[kRunning] <= 1, 'pipeline should only contain this request')
1491
- abort(err)
1492
- }
1493
- }
1494
- }
1495
-
1496
- module.exports = connectH1