@kubb/agent 0.0.0-canary-20260217115709

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 (575) hide show
  1. package/.output/nitro.json +15 -0
  2. package/.output/server/chunks/_/package.mjs +4 -0
  3. package/.output/server/chunks/_/package.mjs.map +1 -0
  4. package/.output/server/chunks/nitro/nitro.mjs +6685 -0
  5. package/.output/server/chunks/nitro/nitro.mjs.map +1 -0
  6. package/.output/server/chunks/routes/api/generate.options.mjs +31 -0
  7. package/.output/server/chunks/routes/api/generate.options.mjs.map +1 -0
  8. package/.output/server/chunks/routes/api/generate.post.mjs +120 -0
  9. package/.output/server/chunks/routes/api/generate.post.mjs.map +1 -0
  10. package/.output/server/chunks/routes/api/health.get.mjs +36 -0
  11. package/.output/server/chunks/routes/api/health.get.mjs.map +1 -0
  12. package/.output/server/chunks/routes/api/info.get.mjs +63 -0
  13. package/.output/server/chunks/routes/api/info.get.mjs.map +1 -0
  14. package/.output/server/index.mjs +25 -0
  15. package/.output/server/index.mjs.map +1 -0
  16. package/.output/server/node_modules/.nitro/path-key@3.1.1/index.js +16 -0
  17. package/.output/server/node_modules/.nitro/path-key@3.1.1/package.json +39 -0
  18. package/.output/server/node_modules/.nitro/path-key@4.0.0/index.js +12 -0
  19. package/.output/server/node_modules/.nitro/path-key@4.0.0/package.json +41 -0
  20. package/.output/server/node_modules/.nitro/ws@8.18.0/lib/buffer-util.js +131 -0
  21. package/.output/server/node_modules/.nitro/ws@8.18.0/lib/constants.js +18 -0
  22. package/.output/server/node_modules/.nitro/ws@8.18.0/lib/event-target.js +292 -0
  23. package/.output/server/node_modules/.nitro/ws@8.18.0/lib/extension.js +203 -0
  24. package/.output/server/node_modules/.nitro/ws@8.18.0/lib/limiter.js +55 -0
  25. package/.output/server/node_modules/.nitro/ws@8.18.0/lib/permessage-deflate.js +514 -0
  26. package/.output/server/node_modules/.nitro/ws@8.18.0/lib/receiver.js +706 -0
  27. package/.output/server/node_modules/.nitro/ws@8.18.0/lib/sender.js +602 -0
  28. package/.output/server/node_modules/.nitro/ws@8.18.0/lib/stream.js +159 -0
  29. package/.output/server/node_modules/.nitro/ws@8.18.0/lib/subprotocol.js +62 -0
  30. package/.output/server/node_modules/.nitro/ws@8.18.0/lib/validation.js +152 -0
  31. package/.output/server/node_modules/.nitro/ws@8.18.0/lib/websocket-server.js +540 -0
  32. package/.output/server/node_modules/.nitro/ws@8.18.0/lib/websocket.js +1388 -0
  33. package/.output/server/node_modules/.nitro/ws@8.18.0/package.json +69 -0
  34. package/.output/server/node_modules/.nitro/ws@8.18.0/wrapper.mjs +8 -0
  35. package/.output/server/node_modules/.nitro/ws@8.19.0/lib/buffer-util.js +131 -0
  36. package/.output/server/node_modules/.nitro/ws@8.19.0/lib/constants.js +19 -0
  37. package/.output/server/node_modules/.nitro/ws@8.19.0/lib/event-target.js +292 -0
  38. package/.output/server/node_modules/.nitro/ws@8.19.0/lib/extension.js +203 -0
  39. package/.output/server/node_modules/.nitro/ws@8.19.0/lib/limiter.js +55 -0
  40. package/.output/server/node_modules/.nitro/ws@8.19.0/lib/permessage-deflate.js +528 -0
  41. package/.output/server/node_modules/.nitro/ws@8.19.0/lib/receiver.js +706 -0
  42. package/.output/server/node_modules/.nitro/ws@8.19.0/lib/sender.js +602 -0
  43. package/.output/server/node_modules/.nitro/ws@8.19.0/lib/stream.js +161 -0
  44. package/.output/server/node_modules/.nitro/ws@8.19.0/lib/subprotocol.js +62 -0
  45. package/.output/server/node_modules/.nitro/ws@8.19.0/lib/validation.js +152 -0
  46. package/.output/server/node_modules/.nitro/ws@8.19.0/lib/websocket-server.js +554 -0
  47. package/.output/server/node_modules/.nitro/ws@8.19.0/lib/websocket.js +1393 -0
  48. package/.output/server/node_modules/.nitro/ws@8.19.0/package.json +69 -0
  49. package/.output/server/node_modules/.nitro/ws@8.19.0/wrapper.mjs +8 -0
  50. package/.output/server/node_modules/@clack/core/dist/index.mjs +18 -0
  51. package/.output/server/node_modules/@clack/core/package.json +61 -0
  52. package/.output/server/node_modules/@clack/prompts/dist/index.mjs +135 -0
  53. package/.output/server/node_modules/@clack/prompts/package.json +66 -0
  54. package/.output/server/node_modules/@kubb/fabric-core/dist/Root-BQX3eHqb.js +830 -0
  55. package/.output/server/node_modules/@kubb/fabric-core/dist/chunk-BVHe6Par.js +22 -0
  56. package/.output/server/node_modules/@kubb/fabric-core/dist/defaultParser-BD_N68Bo.js +16 -0
  57. package/.output/server/node_modules/@kubb/fabric-core/dist/getRelativePath-C4Au07ON.js +58 -0
  58. package/.output/server/node_modules/@kubb/fabric-core/dist/index.js +668 -0
  59. package/.output/server/node_modules/@kubb/fabric-core/dist/parsers/typescript.js +102 -0
  60. package/.output/server/node_modules/@kubb/fabric-core/dist/parsers.js +18 -0
  61. package/.output/server/node_modules/@kubb/fabric-core/dist/plugins.js +620 -0
  62. package/.output/server/node_modules/@kubb/fabric-core/package.json +120 -0
  63. package/.output/server/node_modules/@kubb/react-fabric/dist/chunk-DbZtQ4qb.js +47 -0
  64. package/.output/server/node_modules/@kubb/react-fabric/dist/index.js +535 -0
  65. package/.output/server/node_modules/@kubb/react-fabric/dist/jsx-runtime-CQFBnRKx.js +265 -0
  66. package/.output/server/node_modules/@kubb/react-fabric/dist/jsx-runtime.js +13 -0
  67. package/.output/server/node_modules/@kubb/react-fabric/dist/parsers.js +3 -0
  68. package/.output/server/node_modules/@kubb/react-fabric/dist/plugins.js +7 -0
  69. package/.output/server/node_modules/@kubb/react-fabric/dist/react--draJ5Pm.js +1192 -0
  70. package/.output/server/node_modules/@kubb/react-fabric/dist/reactPlugin-DqJsInTf.js +17931 -0
  71. package/.output/server/node_modules/@kubb/react-fabric/package.json +140 -0
  72. package/.output/server/node_modules/@sec-ant/readable-stream/dist/ponyfill/asyncIterator.js +89 -0
  73. package/.output/server/node_modules/@sec-ant/readable-stream/dist/ponyfill/fromAnyIterable.js +34 -0
  74. package/.output/server/node_modules/@sec-ant/readable-stream/dist/ponyfill/index.js +6 -0
  75. package/.output/server/node_modules/@sec-ant/readable-stream/package.json +98 -0
  76. package/.output/server/node_modules/@sindresorhus/merge-streams/index.js +265 -0
  77. package/.output/server/node_modules/@sindresorhus/merge-streams/package.json +49 -0
  78. package/.output/server/node_modules/balanced-match/index.js +62 -0
  79. package/.output/server/node_modules/balanced-match/package.json +48 -0
  80. package/.output/server/node_modules/brace-expansion/index.js +201 -0
  81. package/.output/server/node_modules/brace-expansion/package.json +50 -0
  82. package/.output/server/node_modules/buffer-from/index.js +72 -0
  83. package/.output/server/node_modules/buffer-from/package.json +19 -0
  84. package/.output/server/node_modules/bytes/index.js +159 -0
  85. package/.output/server/node_modules/bytes/package.json +39 -0
  86. package/.output/server/node_modules/concat-map/index.js +13 -0
  87. package/.output/server/node_modules/concat-map/package.json +59 -0
  88. package/.output/server/node_modules/content-disposition/index.js +445 -0
  89. package/.output/server/node_modules/content-disposition/package.json +39 -0
  90. package/.output/server/node_modules/cross-spawn/index.js +39 -0
  91. package/.output/server/node_modules/cross-spawn/lib/enoent.js +59 -0
  92. package/.output/server/node_modules/cross-spawn/lib/parse.js +91 -0
  93. package/.output/server/node_modules/cross-spawn/lib/util/escape.js +47 -0
  94. package/.output/server/node_modules/cross-spawn/lib/util/readShebang.js +23 -0
  95. package/.output/server/node_modules/cross-spawn/lib/util/resolveCommand.js +52 -0
  96. package/.output/server/node_modules/cross-spawn/package.json +73 -0
  97. package/.output/server/node_modules/execa/index.js +28 -0
  98. package/.output/server/node_modules/execa/lib/arguments/command.js +20 -0
  99. package/.output/server/node_modules/execa/lib/arguments/cwd.js +39 -0
  100. package/.output/server/node_modules/execa/lib/arguments/encoding-option.js +50 -0
  101. package/.output/server/node_modules/execa/lib/arguments/escape.js +88 -0
  102. package/.output/server/node_modules/execa/lib/arguments/fd-options.js +108 -0
  103. package/.output/server/node_modules/execa/lib/arguments/file-url.js +25 -0
  104. package/.output/server/node_modules/execa/lib/arguments/options.js +96 -0
  105. package/.output/server/node_modules/execa/lib/arguments/shell.js +11 -0
  106. package/.output/server/node_modules/execa/lib/arguments/specific.js +111 -0
  107. package/.output/server/node_modules/execa/lib/convert/add.js +15 -0
  108. package/.output/server/node_modules/execa/lib/convert/concurrent.js +33 -0
  109. package/.output/server/node_modules/execa/lib/convert/duplex.js +69 -0
  110. package/.output/server/node_modules/execa/lib/convert/iterable.js +34 -0
  111. package/.output/server/node_modules/execa/lib/convert/readable.js +113 -0
  112. package/.output/server/node_modules/execa/lib/convert/shared.js +46 -0
  113. package/.output/server/node_modules/execa/lib/convert/writable.js +90 -0
  114. package/.output/server/node_modules/execa/lib/io/contents.js +116 -0
  115. package/.output/server/node_modules/execa/lib/io/input-sync.js +44 -0
  116. package/.output/server/node_modules/execa/lib/io/iterate.js +110 -0
  117. package/.output/server/node_modules/execa/lib/io/max-buffer.js +89 -0
  118. package/.output/server/node_modules/execa/lib/io/output-async.js +80 -0
  119. package/.output/server/node_modules/execa/lib/io/output-sync.js +135 -0
  120. package/.output/server/node_modules/execa/lib/io/pipeline.js +48 -0
  121. package/.output/server/node_modules/execa/lib/io/strip-newline.js +12 -0
  122. package/.output/server/node_modules/execa/lib/ipc/array.js +4 -0
  123. package/.output/server/node_modules/execa/lib/ipc/buffer-messages.js +47 -0
  124. package/.output/server/node_modules/execa/lib/ipc/forward.js +56 -0
  125. package/.output/server/node_modules/execa/lib/ipc/get-each.js +89 -0
  126. package/.output/server/node_modules/execa/lib/ipc/get-one.js +69 -0
  127. package/.output/server/node_modules/execa/lib/ipc/graceful.js +72 -0
  128. package/.output/server/node_modules/execa/lib/ipc/incoming.js +79 -0
  129. package/.output/server/node_modules/execa/lib/ipc/ipc-input.js +44 -0
  130. package/.output/server/node_modules/execa/lib/ipc/methods.js +49 -0
  131. package/.output/server/node_modules/execa/lib/ipc/outgoing.js +47 -0
  132. package/.output/server/node_modules/execa/lib/ipc/reference.js +44 -0
  133. package/.output/server/node_modules/execa/lib/ipc/send.js +91 -0
  134. package/.output/server/node_modules/execa/lib/ipc/strict.js +113 -0
  135. package/.output/server/node_modules/execa/lib/ipc/validation.js +111 -0
  136. package/.output/server/node_modules/execa/lib/methods/bind.js +23 -0
  137. package/.output/server/node_modules/execa/lib/methods/command.js +43 -0
  138. package/.output/server/node_modules/execa/lib/methods/create.js +65 -0
  139. package/.output/server/node_modules/execa/lib/methods/main-async.js +194 -0
  140. package/.output/server/node_modules/execa/lib/methods/main-sync.js +163 -0
  141. package/.output/server/node_modules/execa/lib/methods/node.js +51 -0
  142. package/.output/server/node_modules/execa/lib/methods/parameters.js +31 -0
  143. package/.output/server/node_modules/execa/lib/methods/promise.js +15 -0
  144. package/.output/server/node_modules/execa/lib/methods/script.js +22 -0
  145. package/.output/server/node_modules/execa/lib/methods/template.js +153 -0
  146. package/.output/server/node_modules/execa/lib/pipe/abort.js +20 -0
  147. package/.output/server/node_modules/execa/lib/pipe/pipe-arguments.js +91 -0
  148. package/.output/server/node_modules/execa/lib/pipe/sequence.js +24 -0
  149. package/.output/server/node_modules/execa/lib/pipe/setup.js +72 -0
  150. package/.output/server/node_modules/execa/lib/pipe/streaming.js +51 -0
  151. package/.output/server/node_modules/execa/lib/pipe/throw.js +58 -0
  152. package/.output/server/node_modules/execa/lib/resolve/all-async.js +46 -0
  153. package/.output/server/node_modules/execa/lib/resolve/all-sync.js +33 -0
  154. package/.output/server/node_modules/execa/lib/resolve/exit-async.js +54 -0
  155. package/.output/server/node_modules/execa/lib/resolve/exit-sync.js +25 -0
  156. package/.output/server/node_modules/execa/lib/resolve/stdio.js +47 -0
  157. package/.output/server/node_modules/execa/lib/resolve/wait-stream.js +96 -0
  158. package/.output/server/node_modules/execa/lib/resolve/wait-subprocess.js +146 -0
  159. package/.output/server/node_modules/execa/lib/return/duration.js +8 -0
  160. package/.output/server/node_modules/execa/lib/return/early-error.js +60 -0
  161. package/.output/server/node_modules/execa/lib/return/final-error.js +40 -0
  162. package/.output/server/node_modules/execa/lib/return/message.js +157 -0
  163. package/.output/server/node_modules/execa/lib/return/reject.js +13 -0
  164. package/.output/server/node_modules/execa/lib/return/result.js +186 -0
  165. package/.output/server/node_modules/execa/lib/stdio/direction.js +76 -0
  166. package/.output/server/node_modules/execa/lib/stdio/duplicate.js +116 -0
  167. package/.output/server/node_modules/execa/lib/stdio/handle-async.js +52 -0
  168. package/.output/server/node_modules/execa/lib/stdio/handle-sync.js +57 -0
  169. package/.output/server/node_modules/execa/lib/stdio/handle.js +214 -0
  170. package/.output/server/node_modules/execa/lib/stdio/input-option.js +50 -0
  171. package/.output/server/node_modules/execa/lib/stdio/native.js +106 -0
  172. package/.output/server/node_modules/execa/lib/stdio/stdio-option.js +60 -0
  173. package/.output/server/node_modules/execa/lib/stdio/type.js +173 -0
  174. package/.output/server/node_modules/execa/lib/terminate/cancel.js +20 -0
  175. package/.output/server/node_modules/execa/lib/terminate/cleanup.js +16 -0
  176. package/.output/server/node_modules/execa/lib/terminate/graceful.js +71 -0
  177. package/.output/server/node_modules/execa/lib/terminate/kill.js +93 -0
  178. package/.output/server/node_modules/execa/lib/terminate/signal.js +70 -0
  179. package/.output/server/node_modules/execa/lib/terminate/timeout.js +21 -0
  180. package/.output/server/node_modules/execa/lib/transform/encoding-transform.js +51 -0
  181. package/.output/server/node_modules/execa/lib/transform/generator.js +107 -0
  182. package/.output/server/node_modules/execa/lib/transform/normalize.js +111 -0
  183. package/.output/server/node_modules/execa/lib/transform/object-mode.js +41 -0
  184. package/.output/server/node_modules/execa/lib/transform/run-async.js +60 -0
  185. package/.output/server/node_modules/execa/lib/transform/run-sync.js +50 -0
  186. package/.output/server/node_modules/execa/lib/transform/split.js +110 -0
  187. package/.output/server/node_modules/execa/lib/transform/validate.js +43 -0
  188. package/.output/server/node_modules/execa/lib/utils/abort-signal.js +8 -0
  189. package/.output/server/node_modules/execa/lib/utils/deferred.js +7 -0
  190. package/.output/server/node_modules/execa/lib/utils/max-listeners.js +14 -0
  191. package/.output/server/node_modules/execa/lib/utils/standard-stream.js +6 -0
  192. package/.output/server/node_modules/execa/lib/utils/uint-array.js +69 -0
  193. package/.output/server/node_modules/execa/lib/verbose/complete.js +24 -0
  194. package/.output/server/node_modules/execa/lib/verbose/custom.js +26 -0
  195. package/.output/server/node_modules/execa/lib/verbose/default.js +54 -0
  196. package/.output/server/node_modules/execa/lib/verbose/error.js +13 -0
  197. package/.output/server/node_modules/execa/lib/verbose/info.js +39 -0
  198. package/.output/server/node_modules/execa/lib/verbose/ipc.js +15 -0
  199. package/.output/server/node_modules/execa/lib/verbose/log.js +54 -0
  200. package/.output/server/node_modules/execa/lib/verbose/output.js +60 -0
  201. package/.output/server/node_modules/execa/lib/verbose/start.js +15 -0
  202. package/.output/server/node_modules/execa/lib/verbose/values.js +33 -0
  203. package/.output/server/node_modules/execa/package.json +105 -0
  204. package/.output/server/node_modules/figures/index.js +292 -0
  205. package/.output/server/node_modules/figures/package.json +49 -0
  206. package/.output/server/node_modules/fs-extra/lib/copy/copy-sync.js +176 -0
  207. package/.output/server/node_modules/fs-extra/lib/copy/copy.js +180 -0
  208. package/.output/server/node_modules/fs-extra/lib/copy/index.js +7 -0
  209. package/.output/server/node_modules/fs-extra/lib/empty/index.js +39 -0
  210. package/.output/server/node_modules/fs-extra/lib/ensure/file.js +66 -0
  211. package/.output/server/node_modules/fs-extra/lib/ensure/index.js +23 -0
  212. package/.output/server/node_modules/fs-extra/lib/ensure/link.js +64 -0
  213. package/.output/server/node_modules/fs-extra/lib/ensure/symlink-paths.js +101 -0
  214. package/.output/server/node_modules/fs-extra/lib/ensure/symlink-type.js +34 -0
  215. package/.output/server/node_modules/fs-extra/lib/ensure/symlink.js +67 -0
  216. package/.output/server/node_modules/fs-extra/lib/fs/index.js +146 -0
  217. package/.output/server/node_modules/fs-extra/lib/index.js +16 -0
  218. package/.output/server/node_modules/fs-extra/lib/json/index.js +16 -0
  219. package/.output/server/node_modules/fs-extra/lib/json/jsonfile.js +11 -0
  220. package/.output/server/node_modules/fs-extra/lib/json/output-json-sync.js +12 -0
  221. package/.output/server/node_modules/fs-extra/lib/json/output-json.js +12 -0
  222. package/.output/server/node_modules/fs-extra/lib/mkdirs/index.js +14 -0
  223. package/.output/server/node_modules/fs-extra/lib/mkdirs/make-dir.js +27 -0
  224. package/.output/server/node_modules/fs-extra/lib/mkdirs/utils.js +21 -0
  225. package/.output/server/node_modules/fs-extra/lib/move/index.js +7 -0
  226. package/.output/server/node_modules/fs-extra/lib/move/move-sync.js +55 -0
  227. package/.output/server/node_modules/fs-extra/lib/move/move.js +59 -0
  228. package/.output/server/node_modules/fs-extra/lib/output-file/index.js +31 -0
  229. package/.output/server/node_modules/fs-extra/lib/path-exists/index.js +12 -0
  230. package/.output/server/node_modules/fs-extra/lib/remove/index.js +17 -0
  231. package/.output/server/node_modules/fs-extra/lib/util/async.js +29 -0
  232. package/.output/server/node_modules/fs-extra/lib/util/stat.js +159 -0
  233. package/.output/server/node_modules/fs-extra/lib/util/utimes.js +36 -0
  234. package/.output/server/node_modules/fs-extra/package.json +71 -0
  235. package/.output/server/node_modules/get-stream/package.json +60 -0
  236. package/.output/server/node_modules/get-stream/source/array-buffer.js +84 -0
  237. package/.output/server/node_modules/get-stream/source/array.js +32 -0
  238. package/.output/server/node_modules/get-stream/source/buffer.js +19 -0
  239. package/.output/server/node_modules/get-stream/source/contents.js +121 -0
  240. package/.output/server/node_modules/get-stream/source/exports.js +5 -0
  241. package/.output/server/node_modules/get-stream/source/index.js +13 -0
  242. package/.output/server/node_modules/get-stream/source/stream.js +65 -0
  243. package/.output/server/node_modules/get-stream/source/string.js +41 -0
  244. package/.output/server/node_modules/get-stream/source/utils.js +11 -0
  245. package/.output/server/node_modules/graceful-fs/clone.js +23 -0
  246. package/.output/server/node_modules/graceful-fs/graceful-fs.js +448 -0
  247. package/.output/server/node_modules/graceful-fs/legacy-streams.js +118 -0
  248. package/.output/server/node_modules/graceful-fs/package.json +53 -0
  249. package/.output/server/node_modules/graceful-fs/polyfills.js +355 -0
  250. package/.output/server/node_modules/human-signals/build/src/core.js +273 -0
  251. package/.output/server/node_modules/human-signals/build/src/main.js +70 -0
  252. package/.output/server/node_modules/human-signals/build/src/realtime.js +16 -0
  253. package/.output/server/node_modules/human-signals/build/src/signals.js +34 -0
  254. package/.output/server/node_modules/human-signals/package.json +66 -0
  255. package/.output/server/node_modules/is-plain-obj/index.js +8 -0
  256. package/.output/server/node_modules/is-plain-obj/package.json +41 -0
  257. package/.output/server/node_modules/is-stream/index.js +37 -0
  258. package/.output/server/node_modules/is-stream/package.json +48 -0
  259. package/.output/server/node_modules/is-unicode-supported/index.js +21 -0
  260. package/.output/server/node_modules/is-unicode-supported/package.json +47 -0
  261. package/.output/server/node_modules/isexe/index.js +57 -0
  262. package/.output/server/node_modules/isexe/mode.js +41 -0
  263. package/.output/server/node_modules/isexe/package.json +31 -0
  264. package/.output/server/node_modules/isexe/windows.js +42 -0
  265. package/.output/server/node_modules/jiti/dist/jiti.cjs +1 -0
  266. package/.output/server/node_modules/jiti/lib/jiti.mjs +29 -0
  267. package/.output/server/node_modules/jiti/package.json +133 -0
  268. package/.output/server/node_modules/js-runtime/dist/index.js +5 -0
  269. package/.output/server/node_modules/js-runtime/package.json +72 -0
  270. package/.output/server/node_modules/jsonfile/index.js +88 -0
  271. package/.output/server/node_modules/jsonfile/package.json +40 -0
  272. package/.output/server/node_modules/jsonfile/utils.js +14 -0
  273. package/.output/server/node_modules/mime-db/db.json +7088 -0
  274. package/.output/server/node_modules/mime-db/index.js +11 -0
  275. package/.output/server/node_modules/mime-db/package.json +57 -0
  276. package/.output/server/node_modules/mime-types/index.js +188 -0
  277. package/.output/server/node_modules/mime-types/package.json +43 -0
  278. package/.output/server/node_modules/minimatch/minimatch.js +947 -0
  279. package/.output/server/node_modules/minimatch/package.json +33 -0
  280. package/.output/server/node_modules/natural-orderby/dist/main.js +19 -0
  281. package/.output/server/node_modules/natural-orderby/dist/umd/natural-orderby.development.js +420 -0
  282. package/.output/server/node_modules/natural-orderby/dist/umd/natural-orderby.production.min.js +11 -0
  283. package/.output/server/node_modules/natural-orderby/package.json +119 -0
  284. package/.output/server/node_modules/npm-run-path/index.js +55 -0
  285. package/.output/server/node_modules/npm-run-path/package.json +52 -0
  286. package/.output/server/node_modules/p-limit/index.js +127 -0
  287. package/.output/server/node_modules/p-limit/package.json +58 -0
  288. package/.output/server/node_modules/parse-ms/index.js +45 -0
  289. package/.output/server/node_modules/parse-ms/package.json +47 -0
  290. package/.output/server/node_modules/path-is-inside/lib/path-is-inside.js +28 -0
  291. package/.output/server/node_modules/path-is-inside/package.json +27 -0
  292. package/.output/server/node_modules/path-to-regexp/index.js +421 -0
  293. package/.output/server/node_modules/path-to-regexp/package.json +46 -0
  294. package/.output/server/node_modules/picocolors/package.json +25 -0
  295. package/.output/server/node_modules/picocolors/picocolors.js +75 -0
  296. package/.output/server/node_modules/pretty-ms/index.js +149 -0
  297. package/.output/server/node_modules/pretty-ms/package.json +55 -0
  298. package/.output/server/node_modules/range-parser/index.js +158 -0
  299. package/.output/server/node_modules/range-parser/package.json +40 -0
  300. package/.output/server/node_modules/react-devtools-core/dist/backend.js +18302 -0
  301. package/.output/server/node_modules/react-devtools-core/package.json +38 -0
  302. package/.output/server/node_modules/remeda/dist/add.js +2 -0
  303. package/.output/server/node_modules/remeda/dist/addProp.js +2 -0
  304. package/.output/server/node_modules/remeda/dist/allPass.js +2 -0
  305. package/.output/server/node_modules/remeda/dist/anyPass.js +2 -0
  306. package/.output/server/node_modules/remeda/dist/binarySearchCutoffIndex-CLQRwIY1.js +2 -0
  307. package/.output/server/node_modules/remeda/dist/capitalize.js +2 -0
  308. package/.output/server/node_modules/remeda/dist/ceil.js +2 -0
  309. package/.output/server/node_modules/remeda/dist/chunk.js +2 -0
  310. package/.output/server/node_modules/remeda/dist/clamp.js +2 -0
  311. package/.output/server/node_modules/remeda/dist/clone.js +2 -0
  312. package/.output/server/node_modules/remeda/dist/concat.js +2 -0
  313. package/.output/server/node_modules/remeda/dist/conditional.js +2 -0
  314. package/.output/server/node_modules/remeda/dist/constant.js +2 -0
  315. package/.output/server/node_modules/remeda/dist/countBy.js +2 -0
  316. package/.output/server/node_modules/remeda/dist/debounce.js +2 -0
  317. package/.output/server/node_modules/remeda/dist/defaultTo.js +2 -0
  318. package/.output/server/node_modules/remeda/dist/difference.js +2 -0
  319. package/.output/server/node_modules/remeda/dist/differenceWith.js +2 -0
  320. package/.output/server/node_modules/remeda/dist/divide.js +2 -0
  321. package/.output/server/node_modules/remeda/dist/doNothing.js +2 -0
  322. package/.output/server/node_modules/remeda/dist/drop.js +2 -0
  323. package/.output/server/node_modules/remeda/dist/dropFirstBy.js +2 -0
  324. package/.output/server/node_modules/remeda/dist/dropLast.js +2 -0
  325. package/.output/server/node_modules/remeda/dist/dropLastWhile.js +2 -0
  326. package/.output/server/node_modules/remeda/dist/dropWhile.js +2 -0
  327. package/.output/server/node_modules/remeda/dist/endsWith.js +2 -0
  328. package/.output/server/node_modules/remeda/dist/entries.js +2 -0
  329. package/.output/server/node_modules/remeda/dist/evolve.js +2 -0
  330. package/.output/server/node_modules/remeda/dist/filter.js +2 -0
  331. package/.output/server/node_modules/remeda/dist/find.js +2 -0
  332. package/.output/server/node_modules/remeda/dist/findIndex.js +2 -0
  333. package/.output/server/node_modules/remeda/dist/findLast.js +2 -0
  334. package/.output/server/node_modules/remeda/dist/findLastIndex.js +2 -0
  335. package/.output/server/node_modules/remeda/dist/first.js +2 -0
  336. package/.output/server/node_modules/remeda/dist/firstBy.js +2 -0
  337. package/.output/server/node_modules/remeda/dist/flat.js +2 -0
  338. package/.output/server/node_modules/remeda/dist/flatMap.js +2 -0
  339. package/.output/server/node_modules/remeda/dist/floor.js +2 -0
  340. package/.output/server/node_modules/remeda/dist/forEach.js +2 -0
  341. package/.output/server/node_modules/remeda/dist/forEachObj.js +2 -0
  342. package/.output/server/node_modules/remeda/dist/fromEntries.js +2 -0
  343. package/.output/server/node_modules/remeda/dist/fromKeys.js +2 -0
  344. package/.output/server/node_modules/remeda/dist/funnel.js +2 -0
  345. package/.output/server/node_modules/remeda/dist/groupBy.js +2 -0
  346. package/.output/server/node_modules/remeda/dist/groupByProp.js +2 -0
  347. package/.output/server/node_modules/remeda/dist/hasAtLeast.js +2 -0
  348. package/.output/server/node_modules/remeda/dist/hasSubObject.js +2 -0
  349. package/.output/server/node_modules/remeda/dist/heap-OOe_F8_z.js +2 -0
  350. package/.output/server/node_modules/remeda/dist/identity.js +2 -0
  351. package/.output/server/node_modules/remeda/dist/index.js +1 -0
  352. package/.output/server/node_modules/remeda/dist/indexBy.js +2 -0
  353. package/.output/server/node_modules/remeda/dist/intersection.js +2 -0
  354. package/.output/server/node_modules/remeda/dist/intersectionWith.js +2 -0
  355. package/.output/server/node_modules/remeda/dist/invert.js +2 -0
  356. package/.output/server/node_modules/remeda/dist/isArray.js +2 -0
  357. package/.output/server/node_modules/remeda/dist/isBigInt.js +2 -0
  358. package/.output/server/node_modules/remeda/dist/isBoolean.js +2 -0
  359. package/.output/server/node_modules/remeda/dist/isDate.js +2 -0
  360. package/.output/server/node_modules/remeda/dist/isDeepEqual.js +2 -0
  361. package/.output/server/node_modules/remeda/dist/isDefined.js +2 -0
  362. package/.output/server/node_modules/remeda/dist/isEmpty.js +2 -0
  363. package/.output/server/node_modules/remeda/dist/isEmptyish.js +2 -0
  364. package/.output/server/node_modules/remeda/dist/isError.js +2 -0
  365. package/.output/server/node_modules/remeda/dist/isFunction.js +2 -0
  366. package/.output/server/node_modules/remeda/dist/isIncludedIn.js +2 -0
  367. package/.output/server/node_modules/remeda/dist/isNonNull.js +2 -0
  368. package/.output/server/node_modules/remeda/dist/isNonNullish.js +2 -0
  369. package/.output/server/node_modules/remeda/dist/isNot.js +2 -0
  370. package/.output/server/node_modules/remeda/dist/isNullish.js +2 -0
  371. package/.output/server/node_modules/remeda/dist/isNumber.js +2 -0
  372. package/.output/server/node_modules/remeda/dist/isObjectType.js +2 -0
  373. package/.output/server/node_modules/remeda/dist/isPlainObject.js +2 -0
  374. package/.output/server/node_modules/remeda/dist/isPromise.js +2 -0
  375. package/.output/server/node_modules/remeda/dist/isShallowEqual.js +2 -0
  376. package/.output/server/node_modules/remeda/dist/isStrictEqual.js +2 -0
  377. package/.output/server/node_modules/remeda/dist/isString.js +2 -0
  378. package/.output/server/node_modules/remeda/dist/isSymbol.js +2 -0
  379. package/.output/server/node_modules/remeda/dist/isTruthy.js +2 -0
  380. package/.output/server/node_modules/remeda/dist/join.js +2 -0
  381. package/.output/server/node_modules/remeda/dist/keys.js +2 -0
  382. package/.output/server/node_modules/remeda/dist/last.js +2 -0
  383. package/.output/server/node_modules/remeda/dist/lazyDataLastImpl-DtF3cihj.js +2 -0
  384. package/.output/server/node_modules/remeda/dist/length.js +2 -0
  385. package/.output/server/node_modules/remeda/dist/map.js +2 -0
  386. package/.output/server/node_modules/remeda/dist/mapKeys.js +2 -0
  387. package/.output/server/node_modules/remeda/dist/mapToObj.js +2 -0
  388. package/.output/server/node_modules/remeda/dist/mapValues.js +2 -0
  389. package/.output/server/node_modules/remeda/dist/mapWithFeedback.js +2 -0
  390. package/.output/server/node_modules/remeda/dist/mean.js +2 -0
  391. package/.output/server/node_modules/remeda/dist/meanBy.js +2 -0
  392. package/.output/server/node_modules/remeda/dist/median.js +2 -0
  393. package/.output/server/node_modules/remeda/dist/merge.js +2 -0
  394. package/.output/server/node_modules/remeda/dist/mergeAll.js +2 -0
  395. package/.output/server/node_modules/remeda/dist/mergeDeep.js +2 -0
  396. package/.output/server/node_modules/remeda/dist/multiply.js +2 -0
  397. package/.output/server/node_modules/remeda/dist/nthBy.js +2 -0
  398. package/.output/server/node_modules/remeda/dist/objOf.js +2 -0
  399. package/.output/server/node_modules/remeda/dist/omit.js +2 -0
  400. package/.output/server/node_modules/remeda/dist/omitBy.js +2 -0
  401. package/.output/server/node_modules/remeda/dist/once.js +2 -0
  402. package/.output/server/node_modules/remeda/dist/only.js +2 -0
  403. package/.output/server/node_modules/remeda/dist/partialBind.js +2 -0
  404. package/.output/server/node_modules/remeda/dist/partialLastBind.js +2 -0
  405. package/.output/server/node_modules/remeda/dist/partition.js +2 -0
  406. package/.output/server/node_modules/remeda/dist/pathOr.js +2 -0
  407. package/.output/server/node_modules/remeda/dist/pick.js +2 -0
  408. package/.output/server/node_modules/remeda/dist/pickBy.js +2 -0
  409. package/.output/server/node_modules/remeda/dist/pipe.js +2 -0
  410. package/.output/server/node_modules/remeda/dist/piped.js +2 -0
  411. package/.output/server/node_modules/remeda/dist/product.js +2 -0
  412. package/.output/server/node_modules/remeda/dist/prop.js +2 -0
  413. package/.output/server/node_modules/remeda/dist/pullObject.js +2 -0
  414. package/.output/server/node_modules/remeda/dist/purry.js +2 -0
  415. package/.output/server/node_modules/remeda/dist/purryFromLazy-B-_oTxzb.js +2 -0
  416. package/.output/server/node_modules/remeda/dist/purryOn-D4wFIFMT.js +2 -0
  417. package/.output/server/node_modules/remeda/dist/purryOrderRules-4JgY6z4X.js +2 -0
  418. package/.output/server/node_modules/remeda/dist/quickSelect-B4eZ0JeB.js +2 -0
  419. package/.output/server/node_modules/remeda/dist/randomBigInt.js +2 -0
  420. package/.output/server/node_modules/remeda/dist/randomInteger.js +2 -0
  421. package/.output/server/node_modules/remeda/dist/randomString.js +2 -0
  422. package/.output/server/node_modules/remeda/dist/range.js +2 -0
  423. package/.output/server/node_modules/remeda/dist/rankBy.js +2 -0
  424. package/.output/server/node_modules/remeda/dist/reduce.js +2 -0
  425. package/.output/server/node_modules/remeda/dist/reverse.js +2 -0
  426. package/.output/server/node_modules/remeda/dist/round.js +2 -0
  427. package/.output/server/node_modules/remeda/dist/sample.js +2 -0
  428. package/.output/server/node_modules/remeda/dist/set.js +2 -0
  429. package/.output/server/node_modules/remeda/dist/setPath.js +2 -0
  430. package/.output/server/node_modules/remeda/dist/shuffle.js +2 -0
  431. package/.output/server/node_modules/remeda/dist/sliceString.js +2 -0
  432. package/.output/server/node_modules/remeda/dist/sort.js +2 -0
  433. package/.output/server/node_modules/remeda/dist/sortBy.js +2 -0
  434. package/.output/server/node_modules/remeda/dist/sortedIndex.js +2 -0
  435. package/.output/server/node_modules/remeda/dist/sortedIndexBy.js +2 -0
  436. package/.output/server/node_modules/remeda/dist/sortedIndexWith.js +2 -0
  437. package/.output/server/node_modules/remeda/dist/sortedLastIndex.js +2 -0
  438. package/.output/server/node_modules/remeda/dist/sortedLastIndexBy.js +2 -0
  439. package/.output/server/node_modules/remeda/dist/splice.js +2 -0
  440. package/.output/server/node_modules/remeda/dist/split.js +2 -0
  441. package/.output/server/node_modules/remeda/dist/splitAt.js +2 -0
  442. package/.output/server/node_modules/remeda/dist/splitWhen.js +2 -0
  443. package/.output/server/node_modules/remeda/dist/startsWith.js +2 -0
  444. package/.output/server/node_modules/remeda/dist/stringToPath.js +2 -0
  445. package/.output/server/node_modules/remeda/dist/subtract.js +2 -0
  446. package/.output/server/node_modules/remeda/dist/sum.js +2 -0
  447. package/.output/server/node_modules/remeda/dist/sumBy.js +2 -0
  448. package/.output/server/node_modules/remeda/dist/swapInPlace-BrVgf3c3.js +2 -0
  449. package/.output/server/node_modules/remeda/dist/swapIndices.js +2 -0
  450. package/.output/server/node_modules/remeda/dist/swapProps.js +2 -0
  451. package/.output/server/node_modules/remeda/dist/take.js +2 -0
  452. package/.output/server/node_modules/remeda/dist/takeFirstBy.js +2 -0
  453. package/.output/server/node_modules/remeda/dist/takeLast.js +2 -0
  454. package/.output/server/node_modules/remeda/dist/takeLastWhile.js +2 -0
  455. package/.output/server/node_modules/remeda/dist/takeWhile.js +2 -0
  456. package/.output/server/node_modules/remeda/dist/tap.js +2 -0
  457. package/.output/server/node_modules/remeda/dist/times.js +2 -0
  458. package/.output/server/node_modules/remeda/dist/toCamelCase.js +2 -0
  459. package/.output/server/node_modules/remeda/dist/toKebabCase.js +2 -0
  460. package/.output/server/node_modules/remeda/dist/toLowerCase.js +2 -0
  461. package/.output/server/node_modules/remeda/dist/toSingle-qs9PC5sP.js +2 -0
  462. package/.output/server/node_modules/remeda/dist/toSnakeCase.js +2 -0
  463. package/.output/server/node_modules/remeda/dist/toTitleCase.js +2 -0
  464. package/.output/server/node_modules/remeda/dist/toUpperCase.js +2 -0
  465. package/.output/server/node_modules/remeda/dist/truncate.js +2 -0
  466. package/.output/server/node_modules/remeda/dist/uncapitalize.js +2 -0
  467. package/.output/server/node_modules/remeda/dist/unique.js +2 -0
  468. package/.output/server/node_modules/remeda/dist/uniqueBy.js +2 -0
  469. package/.output/server/node_modules/remeda/dist/uniqueWith.js +2 -0
  470. package/.output/server/node_modules/remeda/dist/utilityEvaluators-BQqW5Ir5.js +2 -0
  471. package/.output/server/node_modules/remeda/dist/values.js +2 -0
  472. package/.output/server/node_modules/remeda/dist/when.js +2 -0
  473. package/.output/server/node_modules/remeda/dist/withPrecision-CDZ-Oor7.js +2 -0
  474. package/.output/server/node_modules/remeda/dist/words-Dv8LmnKC.js +3 -0
  475. package/.output/server/node_modules/remeda/dist/zip.js +2 -0
  476. package/.output/server/node_modules/remeda/dist/zipWith.js +2 -0
  477. package/.output/server/node_modules/remeda/package.json +90 -0
  478. package/.output/server/node_modules/semver/classes/comparator.js +143 -0
  479. package/.output/server/node_modules/semver/classes/range.js +557 -0
  480. package/.output/server/node_modules/semver/classes/semver.js +333 -0
  481. package/.output/server/node_modules/semver/functions/clean.js +8 -0
  482. package/.output/server/node_modules/semver/functions/cmp.js +54 -0
  483. package/.output/server/node_modules/semver/functions/coerce.js +62 -0
  484. package/.output/server/node_modules/semver/functions/compare-build.js +9 -0
  485. package/.output/server/node_modules/semver/functions/compare-loose.js +5 -0
  486. package/.output/server/node_modules/semver/functions/compare.js +7 -0
  487. package/.output/server/node_modules/semver/functions/diff.js +60 -0
  488. package/.output/server/node_modules/semver/functions/eq.js +5 -0
  489. package/.output/server/node_modules/semver/functions/gt.js +5 -0
  490. package/.output/server/node_modules/semver/functions/gte.js +5 -0
  491. package/.output/server/node_modules/semver/functions/inc.js +21 -0
  492. package/.output/server/node_modules/semver/functions/lt.js +5 -0
  493. package/.output/server/node_modules/semver/functions/lte.js +5 -0
  494. package/.output/server/node_modules/semver/functions/major.js +5 -0
  495. package/.output/server/node_modules/semver/functions/minor.js +5 -0
  496. package/.output/server/node_modules/semver/functions/neq.js +5 -0
  497. package/.output/server/node_modules/semver/functions/parse.js +18 -0
  498. package/.output/server/node_modules/semver/functions/patch.js +5 -0
  499. package/.output/server/node_modules/semver/functions/prerelease.js +8 -0
  500. package/.output/server/node_modules/semver/functions/rcompare.js +5 -0
  501. package/.output/server/node_modules/semver/functions/rsort.js +5 -0
  502. package/.output/server/node_modules/semver/functions/satisfies.js +12 -0
  503. package/.output/server/node_modules/semver/functions/sort.js +5 -0
  504. package/.output/server/node_modules/semver/functions/valid.js +8 -0
  505. package/.output/server/node_modules/semver/index.js +91 -0
  506. package/.output/server/node_modules/semver/internal/constants.js +37 -0
  507. package/.output/server/node_modules/semver/internal/debug.js +11 -0
  508. package/.output/server/node_modules/semver/internal/identifiers.js +29 -0
  509. package/.output/server/node_modules/semver/internal/lrucache.js +42 -0
  510. package/.output/server/node_modules/semver/internal/parse-options.js +17 -0
  511. package/.output/server/node_modules/semver/internal/re.js +223 -0
  512. package/.output/server/node_modules/semver/package.json +78 -0
  513. package/.output/server/node_modules/semver/preload.js +4 -0
  514. package/.output/server/node_modules/semver/ranges/gtr.js +6 -0
  515. package/.output/server/node_modules/semver/ranges/intersects.js +9 -0
  516. package/.output/server/node_modules/semver/ranges/ltr.js +6 -0
  517. package/.output/server/node_modules/semver/ranges/max-satisfying.js +27 -0
  518. package/.output/server/node_modules/semver/ranges/min-satisfying.js +26 -0
  519. package/.output/server/node_modules/semver/ranges/min-version.js +63 -0
  520. package/.output/server/node_modules/semver/ranges/outside.js +82 -0
  521. package/.output/server/node_modules/semver/ranges/simplify.js +49 -0
  522. package/.output/server/node_modules/semver/ranges/subset.js +249 -0
  523. package/.output/server/node_modules/semver/ranges/to-comparators.js +10 -0
  524. package/.output/server/node_modules/semver/ranges/valid.js +13 -0
  525. package/.output/server/node_modules/serve-handler/package.json +68 -0
  526. package/.output/server/node_modules/serve-handler/src/directory.js +16 -0
  527. package/.output/server/node_modules/serve-handler/src/error.js +10 -0
  528. package/.output/server/node_modules/serve-handler/src/glob-slash.js +9 -0
  529. package/.output/server/node_modules/serve-handler/src/index.js +769 -0
  530. package/.output/server/node_modules/shebang-command/index.js +19 -0
  531. package/.output/server/node_modules/shebang-command/package.json +34 -0
  532. package/.output/server/node_modules/shebang-regex/index.js +2 -0
  533. package/.output/server/node_modules/shebang-regex/package.json +35 -0
  534. package/.output/server/node_modules/signal-exit/dist/mjs/index.js +275 -0
  535. package/.output/server/node_modules/signal-exit/dist/mjs/package.json +3 -0
  536. package/.output/server/node_modules/signal-exit/dist/mjs/signals.js +39 -0
  537. package/.output/server/node_modules/signal-exit/package.json +106 -0
  538. package/.output/server/node_modules/sisteransi/package.json +34 -0
  539. package/.output/server/node_modules/sisteransi/src/index.js +58 -0
  540. package/.output/server/node_modules/source-map/lib/array-set.js +121 -0
  541. package/.output/server/node_modules/source-map/lib/base64-vlq.js +140 -0
  542. package/.output/server/node_modules/source-map/lib/base64.js +67 -0
  543. package/.output/server/node_modules/source-map/lib/binary-search.js +111 -0
  544. package/.output/server/node_modules/source-map/lib/mapping-list.js +79 -0
  545. package/.output/server/node_modules/source-map/lib/quick-sort.js +114 -0
  546. package/.output/server/node_modules/source-map/lib/source-map-consumer.js +1145 -0
  547. package/.output/server/node_modules/source-map/lib/source-map-generator.js +425 -0
  548. package/.output/server/node_modules/source-map/lib/source-node.js +413 -0
  549. package/.output/server/node_modules/source-map/lib/util.js +488 -0
  550. package/.output/server/node_modules/source-map/package.json +73 -0
  551. package/.output/server/node_modules/source-map/source-map.js +8 -0
  552. package/.output/server/node_modules/source-map-support/package.json +31 -0
  553. package/.output/server/node_modules/source-map-support/source-map-support.js +625 -0
  554. package/.output/server/node_modules/string-argv/index.js +41 -0
  555. package/.output/server/node_modules/string-argv/package.json +51 -0
  556. package/.output/server/node_modules/strip-final-newline/index.js +26 -0
  557. package/.output/server/node_modules/strip-final-newline/package.json +49 -0
  558. package/.output/server/node_modules/typescript/lib/typescript.js +200276 -0
  559. package/.output/server/node_modules/typescript/package.json +120 -0
  560. package/.output/server/node_modules/unicorn-magic/default.js +14 -0
  561. package/.output/server/node_modules/unicorn-magic/node.js +49 -0
  562. package/.output/server/node_modules/unicorn-magic/package.json +62 -0
  563. package/.output/server/node_modules/universalify/index.js +24 -0
  564. package/.output/server/node_modules/universalify/package.json +34 -0
  565. package/.output/server/node_modules/which/package.json +43 -0
  566. package/.output/server/node_modules/which/which.js +125 -0
  567. package/.output/server/node_modules/yocto-queue/index.js +90 -0
  568. package/.output/server/node_modules/yocto-queue/package.json +48 -0
  569. package/.output/server/node_modules/yoctocolors/base.js +94 -0
  570. package/.output/server/node_modules/yoctocolors/index.js +2 -0
  571. package/.output/server/node_modules/yoctocolors/package.json +69 -0
  572. package/.output/server/package.json +66 -0
  573. package/LICENSE +21 -0
  574. package/README.md +99 -0
  575. package/package.json +70 -0
@@ -0,0 +1,51 @@
1
+ import {finished} from 'node:stream/promises';
2
+ import mergeStreams from '@sindresorhus/merge-streams';
3
+ import {incrementMaxListeners} from '../utils/max-listeners.js';
4
+ import {pipeStreams} from '../io/pipeline.js';
5
+
6
+ // The piping behavior is like Bash.
7
+ // In particular, when one subprocess exits, the other is not terminated by a signal.
8
+ // Instead, its stdout (for the source) or stdin (for the destination) closes.
9
+ // If the subprocess uses it, it will make it error with SIGPIPE or EPIPE (for the source) or end (for the destination).
10
+ // If it does not use it, it will continue running.
11
+ // This allows for subprocesses to gracefully exit and lower the coupling between subprocesses.
12
+ export const pipeSubprocessStream = (sourceStream, destinationStream, maxListenersController) => {
13
+ const mergedStream = MERGED_STREAMS.has(destinationStream)
14
+ ? pipeMoreSubprocessStream(sourceStream, destinationStream)
15
+ : pipeFirstSubprocessStream(sourceStream, destinationStream);
16
+ incrementMaxListeners(sourceStream, SOURCE_LISTENERS_PER_PIPE, maxListenersController.signal);
17
+ incrementMaxListeners(destinationStream, DESTINATION_LISTENERS_PER_PIPE, maxListenersController.signal);
18
+ cleanupMergedStreamsMap(destinationStream);
19
+ return mergedStream;
20
+ };
21
+
22
+ // We use `merge-streams` to allow for multiple sources to pipe to the same destination.
23
+ const pipeFirstSubprocessStream = (sourceStream, destinationStream) => {
24
+ const mergedStream = mergeStreams([sourceStream]);
25
+ pipeStreams(mergedStream, destinationStream);
26
+ MERGED_STREAMS.set(destinationStream, mergedStream);
27
+ return mergedStream;
28
+ };
29
+
30
+ const pipeMoreSubprocessStream = (sourceStream, destinationStream) => {
31
+ const mergedStream = MERGED_STREAMS.get(destinationStream);
32
+ mergedStream.add(sourceStream);
33
+ return mergedStream;
34
+ };
35
+
36
+ const cleanupMergedStreamsMap = async destinationStream => {
37
+ try {
38
+ await finished(destinationStream, {cleanup: true, readable: false, writable: true});
39
+ } catch {}
40
+
41
+ MERGED_STREAMS.delete(destinationStream);
42
+ };
43
+
44
+ const MERGED_STREAMS = new WeakMap();
45
+
46
+ // Number of listeners set up on `sourceStream` by each `sourceStream.pipe(destinationStream)`
47
+ // Those are added by `merge-streams`
48
+ const SOURCE_LISTENERS_PER_PIPE = 2;
49
+ // Number of listeners set up on `destinationStream` by each `sourceStream.pipe(destinationStream)`
50
+ // Those are added by `finished()` in `cleanupMergedStreamsMap()`
51
+ const DESTINATION_LISTENERS_PER_PIPE = 1;
@@ -0,0 +1,58 @@
1
+ import {makeEarlyError} from '../return/result.js';
2
+ import {abortSourceStream, endDestinationStream} from '../io/pipeline.js';
3
+
4
+ // When passing invalid arguments to `source.pipe()`, throw asynchronously.
5
+ // We also abort both subprocesses.
6
+ export const handlePipeArgumentsError = ({
7
+ sourceStream,
8
+ sourceError,
9
+ destinationStream,
10
+ destinationError,
11
+ fileDescriptors,
12
+ sourceOptions,
13
+ startTime,
14
+ }) => {
15
+ const error = getPipeArgumentsError({
16
+ sourceStream,
17
+ sourceError,
18
+ destinationStream,
19
+ destinationError,
20
+ });
21
+ if (error !== undefined) {
22
+ throw createNonCommandError({
23
+ error,
24
+ fileDescriptors,
25
+ sourceOptions,
26
+ startTime,
27
+ });
28
+ }
29
+ };
30
+
31
+ const getPipeArgumentsError = ({sourceStream, sourceError, destinationStream, destinationError}) => {
32
+ if (sourceError !== undefined && destinationError !== undefined) {
33
+ return destinationError;
34
+ }
35
+
36
+ if (destinationError !== undefined) {
37
+ abortSourceStream(sourceStream);
38
+ return destinationError;
39
+ }
40
+
41
+ if (sourceError !== undefined) {
42
+ endDestinationStream(destinationStream);
43
+ return sourceError;
44
+ }
45
+ };
46
+
47
+ // Specific error return value when passing invalid arguments to `subprocess.pipe()` or when using `unpipeSignal`
48
+ export const createNonCommandError = ({error, fileDescriptors, sourceOptions, startTime}) => makeEarlyError({
49
+ error,
50
+ command: PIPE_COMMAND_MESSAGE,
51
+ escapedCommand: PIPE_COMMAND_MESSAGE,
52
+ fileDescriptors,
53
+ options: sourceOptions,
54
+ startTime,
55
+ isSync: false,
56
+ });
57
+
58
+ const PIPE_COMMAND_MESSAGE = 'source.pipe(destination)';
@@ -0,0 +1,46 @@
1
+ import mergeStreams from '@sindresorhus/merge-streams';
2
+ import {waitForSubprocessStream} from './stdio.js';
3
+
4
+ // `all` interleaves `stdout` and `stderr`
5
+ export const makeAllStream = ({stdout, stderr}, {all}) => all && (stdout || stderr)
6
+ ? mergeStreams([stdout, stderr].filter(Boolean))
7
+ : undefined;
8
+
9
+ // Read the contents of `subprocess.all` and|or wait for its completion
10
+ export const waitForAllStream = ({subprocess, encoding, buffer, maxBuffer, lines, stripFinalNewline, verboseInfo, streamInfo}) => waitForSubprocessStream({
11
+ ...getAllStream(subprocess, buffer),
12
+ fdNumber: 'all',
13
+ encoding,
14
+ maxBuffer: maxBuffer[1] + maxBuffer[2],
15
+ lines: lines[1] || lines[2],
16
+ allMixed: getAllMixed(subprocess),
17
+ stripFinalNewline,
18
+ verboseInfo,
19
+ streamInfo,
20
+ });
21
+
22
+ const getAllStream = ({stdout, stderr, all}, [, bufferStdout, bufferStderr]) => {
23
+ const buffer = bufferStdout || bufferStderr;
24
+ if (!buffer) {
25
+ return {stream: all, buffer};
26
+ }
27
+
28
+ if (!bufferStdout) {
29
+ return {stream: stderr, buffer};
30
+ }
31
+
32
+ if (!bufferStderr) {
33
+ return {stream: stdout, buffer};
34
+ }
35
+
36
+ return {stream: all, buffer};
37
+ };
38
+
39
+ // When `subprocess.stdout` is in objectMode but not `subprocess.stderr` (or the opposite), we need to use both:
40
+ // - `getStreamAsArray()` for the chunks in objectMode, to return as an array without changing each chunk
41
+ // - `getStreamAsArrayBuffer()` or `getStream()` for the chunks not in objectMode, to convert them from Buffers to string or Uint8Array
42
+ // We do this by emulating the Buffer -> string|Uint8Array conversion performed by `get-stream` with our own, which is identical.
43
+ const getAllMixed = ({all, stdout, stderr}) => all
44
+ && stdout
45
+ && stderr
46
+ && stdout.readableObjectMode !== stderr.readableObjectMode;
@@ -0,0 +1,33 @@
1
+ import {isUint8Array, concatUint8Arrays} from '../utils/uint-array.js';
2
+ import {stripNewline} from '../io/strip-newline.js';
3
+
4
+ // Retrieve `result.all` with synchronous methods
5
+ export const getAllSync = ([, stdout, stderr], options) => {
6
+ if (!options.all) {
7
+ return;
8
+ }
9
+
10
+ if (stdout === undefined) {
11
+ return stderr;
12
+ }
13
+
14
+ if (stderr === undefined) {
15
+ return stdout;
16
+ }
17
+
18
+ if (Array.isArray(stdout)) {
19
+ return Array.isArray(stderr)
20
+ ? [...stdout, ...stderr]
21
+ : [...stdout, stripNewline(stderr, options, 'all')];
22
+ }
23
+
24
+ if (Array.isArray(stderr)) {
25
+ return [stripNewline(stdout, options, 'all'), ...stderr];
26
+ }
27
+
28
+ if (isUint8Array(stdout) && isUint8Array(stderr)) {
29
+ return concatUint8Arrays([stdout, stderr]);
30
+ }
31
+
32
+ return `${stdout}${stderr}`;
33
+ };
@@ -0,0 +1,54 @@
1
+ import {once} from 'node:events';
2
+ import {DiscardedError} from '../return/final-error.js';
3
+
4
+ // If `error` is emitted before `spawn`, `exit` will never be emitted.
5
+ // However, `error` might be emitted after `spawn`.
6
+ // In that case, `exit` will still be emitted.
7
+ // Since the `exit` event contains the signal name, we want to make sure we are listening for it.
8
+ // This function also takes into account the following unlikely cases:
9
+ // - `exit` being emitted in the same microtask as `spawn`
10
+ // - `error` being emitted multiple times
11
+ export const waitForExit = async (subprocess, context) => {
12
+ const [exitCode, signal] = await waitForExitOrError(subprocess);
13
+ context.isForcefullyTerminated ??= false;
14
+ return [exitCode, signal];
15
+ };
16
+
17
+ const waitForExitOrError = async subprocess => {
18
+ const [spawnPayload, exitPayload] = await Promise.allSettled([
19
+ once(subprocess, 'spawn'),
20
+ once(subprocess, 'exit'),
21
+ ]);
22
+
23
+ if (spawnPayload.status === 'rejected') {
24
+ return [];
25
+ }
26
+
27
+ return exitPayload.status === 'rejected'
28
+ ? waitForSubprocessExit(subprocess)
29
+ : exitPayload.value;
30
+ };
31
+
32
+ const waitForSubprocessExit = async subprocess => {
33
+ try {
34
+ return await once(subprocess, 'exit');
35
+ } catch {
36
+ return waitForSubprocessExit(subprocess);
37
+ }
38
+ };
39
+
40
+ // Retrieve the final exit code and|or signal name
41
+ export const waitForSuccessfulExit = async exitPromise => {
42
+ const [exitCode, signal] = await exitPromise;
43
+
44
+ if (!isSubprocessErrorExit(exitCode, signal) && isFailedExit(exitCode, signal)) {
45
+ throw new DiscardedError();
46
+ }
47
+
48
+ return [exitCode, signal];
49
+ };
50
+
51
+ // When the subprocess fails due to an `error` event
52
+ const isSubprocessErrorExit = (exitCode, signal) => exitCode === undefined && signal === undefined;
53
+ // When the subprocess fails due to a non-0 exit code or to a signal termination
54
+ export const isFailedExit = (exitCode, signal) => exitCode !== 0 || signal !== null;
@@ -0,0 +1,25 @@
1
+ import {DiscardedError} from '../return/final-error.js';
2
+ import {isMaxBufferSync} from '../io/max-buffer.js';
3
+ import {isFailedExit} from './exit-async.js';
4
+
5
+ // Retrieve exit code, signal name and error information, with synchronous methods
6
+ export const getExitResultSync = ({error, status: exitCode, signal, output}, {maxBuffer}) => {
7
+ const resultError = getResultError(error, exitCode, signal);
8
+ const timedOut = resultError?.code === 'ETIMEDOUT';
9
+ const isMaxBuffer = isMaxBufferSync(resultError, output, maxBuffer);
10
+ return {
11
+ resultError,
12
+ exitCode,
13
+ signal,
14
+ timedOut,
15
+ isMaxBuffer,
16
+ };
17
+ };
18
+
19
+ const getResultError = (error, exitCode, signal) => {
20
+ if (error !== undefined) {
21
+ return error;
22
+ }
23
+
24
+ return isFailedExit(exitCode, signal) ? new DiscardedError() : undefined;
25
+ };
@@ -0,0 +1,47 @@
1
+ import {getStreamOutput} from '../io/contents.js';
2
+ import {waitForStream, isInputFileDescriptor} from './wait-stream.js';
3
+
4
+ // Read the contents of `subprocess.std*` and|or wait for its completion
5
+ export const waitForStdioStreams = ({subprocess, encoding, buffer, maxBuffer, lines, stripFinalNewline, verboseInfo, streamInfo}) => subprocess.stdio.map((stream, fdNumber) => waitForSubprocessStream({
6
+ stream,
7
+ fdNumber,
8
+ encoding,
9
+ buffer: buffer[fdNumber],
10
+ maxBuffer: maxBuffer[fdNumber],
11
+ lines: lines[fdNumber],
12
+ allMixed: false,
13
+ stripFinalNewline,
14
+ verboseInfo,
15
+ streamInfo,
16
+ }));
17
+
18
+ // Read the contents of `subprocess.std*` or `subprocess.all` and|or wait for its completion
19
+ export const waitForSubprocessStream = async ({stream, fdNumber, encoding, buffer, maxBuffer, lines, allMixed, stripFinalNewline, verboseInfo, streamInfo}) => {
20
+ if (!stream) {
21
+ return;
22
+ }
23
+
24
+ const onStreamEnd = waitForStream(stream, fdNumber, streamInfo);
25
+ if (isInputFileDescriptor(streamInfo, fdNumber)) {
26
+ await onStreamEnd;
27
+ return;
28
+ }
29
+
30
+ const [output] = await Promise.all([
31
+ getStreamOutput({
32
+ stream,
33
+ onStreamEnd,
34
+ fdNumber,
35
+ encoding,
36
+ buffer,
37
+ maxBuffer,
38
+ lines,
39
+ allMixed,
40
+ stripFinalNewline,
41
+ verboseInfo,
42
+ streamInfo,
43
+ }),
44
+ onStreamEnd,
45
+ ]);
46
+ return output;
47
+ };
@@ -0,0 +1,96 @@
1
+ import {finished} from 'node:stream/promises';
2
+
3
+ // Wraps `finished(stream)` to handle the following case:
4
+ // - When the subprocess exits, Node.js automatically calls `subprocess.stdin.destroy()`, which we need to ignore.
5
+ // - However, we still need to throw if `subprocess.stdin.destroy()` is called before subprocess exit.
6
+ export const waitForStream = async (stream, fdNumber, streamInfo, {isSameDirection, stopOnExit = false} = {}) => {
7
+ const state = handleStdinDestroy(stream, streamInfo);
8
+ const abortController = new AbortController();
9
+ try {
10
+ await Promise.race([
11
+ ...(stopOnExit ? [streamInfo.exitPromise] : []),
12
+ finished(stream, {cleanup: true, signal: abortController.signal}),
13
+ ]);
14
+ } catch (error) {
15
+ if (!state.stdinCleanedUp) {
16
+ handleStreamError(error, fdNumber, streamInfo, isSameDirection);
17
+ }
18
+ } finally {
19
+ abortController.abort();
20
+ }
21
+ };
22
+
23
+ // If `subprocess.stdin` is destroyed before being fully written to, it is considered aborted and should throw an error.
24
+ // This can happen for example when user called `subprocess.stdin.destroy()` before `subprocess.stdin.end()`.
25
+ // However, Node.js calls `subprocess.stdin.destroy()` on exit for cleanup purposes.
26
+ // https://github.com/nodejs/node/blob/0b4cdb4b42956cbd7019058e409e06700a199e11/lib/internal/child_process.js#L278
27
+ // This is normal and should not throw an error.
28
+ // Therefore, we need to differentiate between both situations to know whether to throw an error.
29
+ // Unfortunately, events (`close`, `error`, `end`, `exit`) cannot be used because `.destroy()` can take an arbitrary amount of time.
30
+ // For example, `stdin: 'pipe'` is implemented as a TCP socket, and its `.destroy()` method waits for TCP disconnection.
31
+ // Therefore `.destroy()` might end before or after subprocess exit, based on OS speed and load.
32
+ // The only way to detect this is to spy on `subprocess.stdin._destroy()` by wrapping it.
33
+ // If `subprocess.exitCode` or `subprocess.signalCode` is set, it means `.destroy()` is being called by Node.js itself.
34
+ const handleStdinDestroy = (stream, {originalStreams: [originalStdin], subprocess}) => {
35
+ const state = {stdinCleanedUp: false};
36
+ if (stream === originalStdin) {
37
+ spyOnStdinDestroy(stream, subprocess, state);
38
+ }
39
+
40
+ return state;
41
+ };
42
+
43
+ const spyOnStdinDestroy = (subprocessStdin, subprocess, state) => {
44
+ const {_destroy} = subprocessStdin;
45
+ subprocessStdin._destroy = (...destroyArguments) => {
46
+ setStdinCleanedUp(subprocess, state);
47
+ _destroy.call(subprocessStdin, ...destroyArguments);
48
+ };
49
+ };
50
+
51
+ const setStdinCleanedUp = ({exitCode, signalCode}, state) => {
52
+ if (exitCode !== null || signalCode !== null) {
53
+ state.stdinCleanedUp = true;
54
+ }
55
+ };
56
+
57
+ // We ignore EPIPEs on writable streams and aborts on readable streams since those can happen normally.
58
+ // When one stream errors, the error is propagated to the other streams on the same file descriptor.
59
+ // Those other streams might have a different direction due to the above.
60
+ // When this happens, the direction of both the initial stream and the others should then be taken into account.
61
+ // Therefore, we keep track of whether a stream error is currently propagating.
62
+ const handleStreamError = (error, fdNumber, streamInfo, isSameDirection) => {
63
+ if (!shouldIgnoreStreamError(error, fdNumber, streamInfo, isSameDirection)) {
64
+ throw error;
65
+ }
66
+ };
67
+
68
+ const shouldIgnoreStreamError = (error, fdNumber, streamInfo, isSameDirection = true) => {
69
+ if (streamInfo.propagating) {
70
+ return isStreamEpipe(error) || isStreamAbort(error);
71
+ }
72
+
73
+ streamInfo.propagating = true;
74
+ return isInputFileDescriptor(streamInfo, fdNumber) === isSameDirection
75
+ ? isStreamEpipe(error)
76
+ : isStreamAbort(error);
77
+ };
78
+
79
+ // Unfortunately, we cannot use the stream's class or properties to know whether it is readable or writable.
80
+ // For example, `subprocess.stdin` is technically a Duplex, but can only be used as a writable.
81
+ // Therefore, we need to use the file descriptor's direction (`stdin` is input, `stdout` is output, etc.).
82
+ // However, while `subprocess.std*` and transforms follow that direction, any stream passed the `std*` option has the opposite direction.
83
+ // For example, `subprocess.stdin` is a writable, but the `stdin` option is a readable.
84
+ export const isInputFileDescriptor = ({fileDescriptors}, fdNumber) => fdNumber !== 'all' && fileDescriptors[fdNumber].direction === 'input';
85
+
86
+ // When `stream.destroy()` is called without an `error` argument, stream is aborted.
87
+ // This is the only way to abort a readable stream, which can be useful in some instances.
88
+ // Therefore, we ignore this error on readable streams.
89
+ export const isStreamAbort = error => error?.code === 'ERR_STREAM_PREMATURE_CLOSE';
90
+
91
+ // When `stream.write()` is called but the underlying source has been closed, `EPIPE` is emitted.
92
+ // When piping subprocesses, the source subprocess usually decides when to stop piping.
93
+ // However, there are some instances when the destination does instead, such as `... | head -n1`.
94
+ // It notifies the source by using `EPIPE`.
95
+ // Therefore, we ignore this error on writable streams.
96
+ const isStreamEpipe = error => error?.code === 'EPIPE';
@@ -0,0 +1,146 @@
1
+ import {once} from 'node:events';
2
+ import {isStream as isNodeStream} from 'is-stream';
3
+ import {throwOnTimeout} from '../terminate/timeout.js';
4
+ import {throwOnCancel} from '../terminate/cancel.js';
5
+ import {throwOnGracefulCancel} from '../terminate/graceful.js';
6
+ import {isStandardStream} from '../utils/standard-stream.js';
7
+ import {TRANSFORM_TYPES} from '../stdio/type.js';
8
+ import {getBufferedData} from '../io/contents.js';
9
+ import {waitForIpcOutput, getBufferedIpcOutput} from '../ipc/buffer-messages.js';
10
+ import {sendIpcInput} from '../ipc/ipc-input.js';
11
+ import {waitForAllStream} from './all-async.js';
12
+ import {waitForStdioStreams} from './stdio.js';
13
+ import {waitForExit, waitForSuccessfulExit} from './exit-async.js';
14
+ import {waitForStream} from './wait-stream.js';
15
+
16
+ // Retrieve result of subprocess: exit code, signal, error, streams (stdout/stderr/all)
17
+ export const waitForSubprocessResult = async ({
18
+ subprocess,
19
+ options: {
20
+ encoding,
21
+ buffer,
22
+ maxBuffer,
23
+ lines,
24
+ timeoutDuration: timeout,
25
+ cancelSignal,
26
+ gracefulCancel,
27
+ forceKillAfterDelay,
28
+ stripFinalNewline,
29
+ ipc,
30
+ ipcInput,
31
+ },
32
+ context,
33
+ verboseInfo,
34
+ fileDescriptors,
35
+ originalStreams,
36
+ onInternalError,
37
+ controller,
38
+ }) => {
39
+ const exitPromise = waitForExit(subprocess, context);
40
+ const streamInfo = {
41
+ originalStreams,
42
+ fileDescriptors,
43
+ subprocess,
44
+ exitPromise,
45
+ propagating: false,
46
+ };
47
+
48
+ const stdioPromises = waitForStdioStreams({
49
+ subprocess,
50
+ encoding,
51
+ buffer,
52
+ maxBuffer,
53
+ lines,
54
+ stripFinalNewline,
55
+ verboseInfo,
56
+ streamInfo,
57
+ });
58
+ const allPromise = waitForAllStream({
59
+ subprocess,
60
+ encoding,
61
+ buffer,
62
+ maxBuffer,
63
+ lines,
64
+ stripFinalNewline,
65
+ verboseInfo,
66
+ streamInfo,
67
+ });
68
+ const ipcOutput = [];
69
+ const ipcOutputPromise = waitForIpcOutput({
70
+ subprocess,
71
+ buffer,
72
+ maxBuffer,
73
+ ipc,
74
+ ipcOutput,
75
+ verboseInfo,
76
+ });
77
+ const originalPromises = waitForOriginalStreams(originalStreams, subprocess, streamInfo);
78
+ const customStreamsEndPromises = waitForCustomStreamsEnd(fileDescriptors, streamInfo);
79
+
80
+ try {
81
+ return await Promise.race([
82
+ Promise.all([
83
+ {},
84
+ waitForSuccessfulExit(exitPromise),
85
+ Promise.all(stdioPromises),
86
+ allPromise,
87
+ ipcOutputPromise,
88
+ sendIpcInput(subprocess, ipcInput),
89
+ ...originalPromises,
90
+ ...customStreamsEndPromises,
91
+ ]),
92
+ onInternalError,
93
+ throwOnSubprocessError(subprocess, controller),
94
+ ...throwOnTimeout(subprocess, timeout, context, controller),
95
+ ...throwOnCancel({
96
+ subprocess,
97
+ cancelSignal,
98
+ gracefulCancel,
99
+ context,
100
+ controller,
101
+ }),
102
+ ...throwOnGracefulCancel({
103
+ subprocess,
104
+ cancelSignal,
105
+ gracefulCancel,
106
+ forceKillAfterDelay,
107
+ context,
108
+ controller,
109
+ }),
110
+ ]);
111
+ } catch (error) {
112
+ context.terminationReason ??= 'other';
113
+ return Promise.all([
114
+ {error},
115
+ exitPromise,
116
+ Promise.all(stdioPromises.map(stdioPromise => getBufferedData(stdioPromise))),
117
+ getBufferedData(allPromise),
118
+ getBufferedIpcOutput(ipcOutputPromise, ipcOutput),
119
+ Promise.allSettled(originalPromises),
120
+ Promise.allSettled(customStreamsEndPromises),
121
+ ]);
122
+ }
123
+ };
124
+
125
+ // Transforms replace `subprocess.std*`, which means they are not exposed to users.
126
+ // However, we still want to wait for their completion.
127
+ const waitForOriginalStreams = (originalStreams, subprocess, streamInfo) =>
128
+ originalStreams.map((stream, fdNumber) => stream === subprocess.stdio[fdNumber]
129
+ ? undefined
130
+ : waitForStream(stream, fdNumber, streamInfo));
131
+
132
+ // Some `stdin`/`stdout`/`stderr` options create a stream, e.g. when passing a file path.
133
+ // The `.pipe()` method automatically ends that stream when `subprocess` ends.
134
+ // This makes sure we wait for the completion of those streams, in order to catch any error.
135
+ const waitForCustomStreamsEnd = (fileDescriptors, streamInfo) => fileDescriptors.flatMap(({stdioItems}, fdNumber) => stdioItems
136
+ .filter(({value, stream = value}) => isNodeStream(stream, {checkOpen: false}) && !isStandardStream(stream))
137
+ .map(({type, value, stream = value}) => waitForStream(stream, fdNumber, streamInfo, {
138
+ isSameDirection: TRANSFORM_TYPES.has(type),
139
+ stopOnExit: type === 'native',
140
+ })));
141
+
142
+ // Fails when the subprocess emits an `error` event
143
+ const throwOnSubprocessError = async (subprocess, {signal}) => {
144
+ const [error] = await once(subprocess, 'error', {signal});
145
+ throw error;
146
+ };
@@ -0,0 +1,8 @@
1
+ import {hrtime} from 'node:process';
2
+
3
+ // Start counting time before spawning the subprocess
4
+ export const getStartTime = () => hrtime.bigint();
5
+
6
+ // Compute duration after the subprocess ended.
7
+ // Printed by the `verbose` option.
8
+ export const getDurationMs = startTime => Number(hrtime.bigint() - startTime) / 1e6;
@@ -0,0 +1,60 @@
1
+ import {ChildProcess} from 'node:child_process';
2
+ import {
3
+ PassThrough,
4
+ Readable,
5
+ Writable,
6
+ Duplex,
7
+ } from 'node:stream';
8
+ import {cleanupCustomStreams} from '../stdio/handle.js';
9
+ import {makeEarlyError} from './result.js';
10
+ import {handleResult} from './reject.js';
11
+
12
+ // When the subprocess fails to spawn.
13
+ // We ensure the returned error is always both a promise and a subprocess.
14
+ export const handleEarlyError = ({error, command, escapedCommand, fileDescriptors, options, startTime, verboseInfo}) => {
15
+ cleanupCustomStreams(fileDescriptors);
16
+
17
+ const subprocess = new ChildProcess();
18
+ createDummyStreams(subprocess, fileDescriptors);
19
+ Object.assign(subprocess, {readable, writable, duplex});
20
+
21
+ const earlyError = makeEarlyError({
22
+ error,
23
+ command,
24
+ escapedCommand,
25
+ fileDescriptors,
26
+ options,
27
+ startTime,
28
+ isSync: false,
29
+ });
30
+ const promise = handleDummyPromise(earlyError, verboseInfo, options);
31
+ return {subprocess, promise};
32
+ };
33
+
34
+ const createDummyStreams = (subprocess, fileDescriptors) => {
35
+ const stdin = createDummyStream();
36
+ const stdout = createDummyStream();
37
+ const stderr = createDummyStream();
38
+ const extraStdio = Array.from({length: fileDescriptors.length - 3}, createDummyStream);
39
+ const all = createDummyStream();
40
+ const stdio = [stdin, stdout, stderr, ...extraStdio];
41
+ Object.assign(subprocess, {
42
+ stdin,
43
+ stdout,
44
+ stderr,
45
+ all,
46
+ stdio,
47
+ });
48
+ };
49
+
50
+ const createDummyStream = () => {
51
+ const stream = new PassThrough();
52
+ stream.end();
53
+ return stream;
54
+ };
55
+
56
+ const readable = () => new Readable({read() {}});
57
+ const writable = () => new Writable({write() {}});
58
+ const duplex = () => new Duplex({read() {}, write() {}});
59
+
60
+ const handleDummyPromise = async (error, verboseInfo, options) => handleResult(error, verboseInfo, options);
@@ -0,0 +1,40 @@
1
+ // When the subprocess fails, this is the error instance being returned.
2
+ // If another error instance is being thrown, it is kept as `error.cause`.
3
+ export const getFinalError = (originalError, message, isSync) => {
4
+ const ErrorClass = isSync ? ExecaSyncError : ExecaError;
5
+ const options = originalError instanceof DiscardedError ? {} : {cause: originalError};
6
+ return new ErrorClass(message, options);
7
+ };
8
+
9
+ // Indicates that the error is used only to interrupt control flow, but not in the return value
10
+ export class DiscardedError extends Error {}
11
+
12
+ // Proper way to set `error.name`: it should be inherited and non-enumerable
13
+ const setErrorName = (ErrorClass, value) => {
14
+ Object.defineProperty(ErrorClass.prototype, 'name', {
15
+ value,
16
+ writable: true,
17
+ enumerable: false,
18
+ configurable: true,
19
+ });
20
+ Object.defineProperty(ErrorClass.prototype, execaErrorSymbol, {
21
+ value: true,
22
+ writable: false,
23
+ enumerable: false,
24
+ configurable: false,
25
+ });
26
+ };
27
+
28
+ // Unlike `instanceof`, this works across realms
29
+ export const isExecaError = error => isErrorInstance(error) && execaErrorSymbol in error;
30
+
31
+ const execaErrorSymbol = Symbol('isExecaError');
32
+
33
+ export const isErrorInstance = value => Object.prototype.toString.call(value) === '[object Error]';
34
+
35
+ // We use two different Error classes for async/sync methods since they have slightly different shape and types
36
+ export class ExecaError extends Error {}
37
+ setErrorName(ExecaError, ExecaError.name);
38
+
39
+ export class ExecaSyncError extends Error {}
40
+ setErrorName(ExecaSyncError, ExecaSyncError.name);