@kubb/agent 4.28.0 → 4.29.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 (290) hide show
  1. package/.output/nitro.json +1 -1
  2. package/.output/server/chunks/nitro/nitro.mjs +382 -642
  3. package/.output/server/chunks/nitro/nitro.mjs.map +1 -1
  4. package/.output/server/chunks/routes/api/health.get.mjs +4 -6
  5. package/.output/server/chunks/routes/api/health.get.mjs.map +1 -1
  6. package/.output/server/index.mjs +4 -6
  7. package/.output/server/index.mjs.map +1 -1
  8. package/.output/server/node_modules/@kubb/fabric-core/dist/{defaultParser-BD_N68Bo.js → defaultParser-C1atU7yU.js} +2 -3
  9. package/.output/server/node_modules/@kubb/fabric-core/dist/{getRelativePath-C4Au07ON.js → getRelativePath-BcieQL5M.js} +1 -2
  10. package/.output/server/node_modules/@kubb/fabric-core/dist/index.js +8 -9
  11. package/.output/server/node_modules/@kubb/fabric-core/dist/{Root-BQX3eHqb.js → onProcessExit-CF200hsz.js} +109 -190
  12. package/.output/server/node_modules/@kubb/fabric-core/dist/parsers/typescript.js +3 -4
  13. package/.output/server/node_modules/@kubb/fabric-core/dist/parsers.js +2 -3
  14. package/.output/server/node_modules/@kubb/fabric-core/dist/plugins.js +58 -298
  15. package/.output/server/node_modules/@kubb/fabric-core/package.json +8 -18
  16. package/.output/server/node_modules/@kubb/react-fabric/dist/{chunk-DbZtQ4qb.js → chunk-Cnw5r_-A.js} +1 -5
  17. package/.output/server/node_modules/@kubb/react-fabric/dist/index.js +39 -41
  18. package/.output/server/node_modules/@kubb/react-fabric/dist/{jsx-runtime-CQFBnRKx.js → jsx-runtime-Dm7PKVbc.js} +6 -24
  19. package/.output/server/node_modules/@kubb/react-fabric/dist/jsx-runtime.js +5 -4
  20. package/.output/server/node_modules/@kubb/react-fabric/dist/plugins.js +3 -3
  21. package/.output/server/node_modules/@kubb/react-fabric/dist/{react--draJ5Pm.js → react-D652OKii.js} +31 -91
  22. package/.output/server/node_modules/@kubb/react-fabric/dist/{reactPlugin-DqJsInTf.js → reactPlugin-BkDkx1cs.js} +410 -1650
  23. package/.output/server/node_modules/@kubb/react-fabric/package.json +8 -11
  24. package/.output/server/node_modules/empathic/access.js +39 -0
  25. package/.output/server/node_modules/empathic/access.mjs +34 -0
  26. package/.output/server/node_modules/empathic/find.js +81 -0
  27. package/.output/server/node_modules/empathic/find.mjs +76 -0
  28. package/.output/server/node_modules/empathic/package.json +49 -0
  29. package/.output/server/node_modules/empathic/package.mjs +52 -0
  30. package/.output/server/node_modules/empathic/resolve.js +31 -0
  31. package/.output/server/node_modules/empathic/resolve.mjs +27 -0
  32. package/.output/server/node_modules/empathic/walk.js +22 -0
  33. package/.output/server/node_modules/empathic/walk.mjs +20 -0
  34. package/.output/server/node_modules/tinyexec/dist/main.js +633 -0
  35. package/.output/server/node_modules/tinyexec/package.json +61 -0
  36. package/.output/server/package.json +6 -44
  37. package/package.json +19 -21
  38. package/.output/server/node_modules/.nitro/path-key@3.1.1/index.js +0 -16
  39. package/.output/server/node_modules/.nitro/path-key@3.1.1/package.json +0 -39
  40. package/.output/server/node_modules/.nitro/path-key@4.0.0/index.js +0 -12
  41. package/.output/server/node_modules/.nitro/path-key@4.0.0/package.json +0 -41
  42. package/.output/server/node_modules/.nitro/path-to-regexp@3.3.0/index.js +0 -421
  43. package/.output/server/node_modules/.nitro/path-to-regexp@3.3.0/package.json +0 -46
  44. package/.output/server/node_modules/@kubb/fabric-core/dist/chunk-BVHe6Par.js +0 -22
  45. package/.output/server/node_modules/@sec-ant/readable-stream/dist/ponyfill/asyncIterator.js +0 -89
  46. package/.output/server/node_modules/@sec-ant/readable-stream/dist/ponyfill/fromAnyIterable.js +0 -34
  47. package/.output/server/node_modules/@sec-ant/readable-stream/dist/ponyfill/index.js +0 -6
  48. package/.output/server/node_modules/@sec-ant/readable-stream/package.json +0 -98
  49. package/.output/server/node_modules/@sindresorhus/merge-streams/index.js +0 -265
  50. package/.output/server/node_modules/@sindresorhus/merge-streams/package.json +0 -49
  51. package/.output/server/node_modules/balanced-match/index.js +0 -62
  52. package/.output/server/node_modules/balanced-match/package.json +0 -48
  53. package/.output/server/node_modules/brace-expansion/index.js +0 -201
  54. package/.output/server/node_modules/brace-expansion/package.json +0 -50
  55. package/.output/server/node_modules/bytes/index.js +0 -159
  56. package/.output/server/node_modules/bytes/package.json +0 -39
  57. package/.output/server/node_modules/concat-map/index.js +0 -13
  58. package/.output/server/node_modules/concat-map/package.json +0 -59
  59. package/.output/server/node_modules/content-disposition/index.js +0 -445
  60. package/.output/server/node_modules/content-disposition/package.json +0 -39
  61. package/.output/server/node_modules/cross-spawn/index.js +0 -39
  62. package/.output/server/node_modules/cross-spawn/lib/enoent.js +0 -59
  63. package/.output/server/node_modules/cross-spawn/lib/parse.js +0 -91
  64. package/.output/server/node_modules/cross-spawn/lib/util/escape.js +0 -47
  65. package/.output/server/node_modules/cross-spawn/lib/util/readShebang.js +0 -23
  66. package/.output/server/node_modules/cross-spawn/lib/util/resolveCommand.js +0 -52
  67. package/.output/server/node_modules/cross-spawn/package.json +0 -73
  68. package/.output/server/node_modules/execa/index.js +0 -28
  69. package/.output/server/node_modules/execa/lib/arguments/command.js +0 -20
  70. package/.output/server/node_modules/execa/lib/arguments/cwd.js +0 -39
  71. package/.output/server/node_modules/execa/lib/arguments/encoding-option.js +0 -50
  72. package/.output/server/node_modules/execa/lib/arguments/escape.js +0 -88
  73. package/.output/server/node_modules/execa/lib/arguments/fd-options.js +0 -108
  74. package/.output/server/node_modules/execa/lib/arguments/file-url.js +0 -25
  75. package/.output/server/node_modules/execa/lib/arguments/options.js +0 -96
  76. package/.output/server/node_modules/execa/lib/arguments/shell.js +0 -11
  77. package/.output/server/node_modules/execa/lib/arguments/specific.js +0 -111
  78. package/.output/server/node_modules/execa/lib/convert/add.js +0 -15
  79. package/.output/server/node_modules/execa/lib/convert/concurrent.js +0 -33
  80. package/.output/server/node_modules/execa/lib/convert/duplex.js +0 -69
  81. package/.output/server/node_modules/execa/lib/convert/iterable.js +0 -34
  82. package/.output/server/node_modules/execa/lib/convert/readable.js +0 -113
  83. package/.output/server/node_modules/execa/lib/convert/shared.js +0 -46
  84. package/.output/server/node_modules/execa/lib/convert/writable.js +0 -90
  85. package/.output/server/node_modules/execa/lib/io/contents.js +0 -116
  86. package/.output/server/node_modules/execa/lib/io/input-sync.js +0 -44
  87. package/.output/server/node_modules/execa/lib/io/iterate.js +0 -110
  88. package/.output/server/node_modules/execa/lib/io/max-buffer.js +0 -89
  89. package/.output/server/node_modules/execa/lib/io/output-async.js +0 -80
  90. package/.output/server/node_modules/execa/lib/io/output-sync.js +0 -135
  91. package/.output/server/node_modules/execa/lib/io/pipeline.js +0 -48
  92. package/.output/server/node_modules/execa/lib/io/strip-newline.js +0 -12
  93. package/.output/server/node_modules/execa/lib/ipc/array.js +0 -4
  94. package/.output/server/node_modules/execa/lib/ipc/buffer-messages.js +0 -47
  95. package/.output/server/node_modules/execa/lib/ipc/forward.js +0 -56
  96. package/.output/server/node_modules/execa/lib/ipc/get-each.js +0 -89
  97. package/.output/server/node_modules/execa/lib/ipc/get-one.js +0 -69
  98. package/.output/server/node_modules/execa/lib/ipc/graceful.js +0 -72
  99. package/.output/server/node_modules/execa/lib/ipc/incoming.js +0 -79
  100. package/.output/server/node_modules/execa/lib/ipc/ipc-input.js +0 -44
  101. package/.output/server/node_modules/execa/lib/ipc/methods.js +0 -49
  102. package/.output/server/node_modules/execa/lib/ipc/outgoing.js +0 -47
  103. package/.output/server/node_modules/execa/lib/ipc/reference.js +0 -44
  104. package/.output/server/node_modules/execa/lib/ipc/send.js +0 -91
  105. package/.output/server/node_modules/execa/lib/ipc/strict.js +0 -113
  106. package/.output/server/node_modules/execa/lib/ipc/validation.js +0 -111
  107. package/.output/server/node_modules/execa/lib/methods/bind.js +0 -23
  108. package/.output/server/node_modules/execa/lib/methods/command.js +0 -43
  109. package/.output/server/node_modules/execa/lib/methods/create.js +0 -65
  110. package/.output/server/node_modules/execa/lib/methods/main-async.js +0 -194
  111. package/.output/server/node_modules/execa/lib/methods/main-sync.js +0 -163
  112. package/.output/server/node_modules/execa/lib/methods/node.js +0 -51
  113. package/.output/server/node_modules/execa/lib/methods/parameters.js +0 -31
  114. package/.output/server/node_modules/execa/lib/methods/promise.js +0 -15
  115. package/.output/server/node_modules/execa/lib/methods/script.js +0 -22
  116. package/.output/server/node_modules/execa/lib/methods/template.js +0 -153
  117. package/.output/server/node_modules/execa/lib/pipe/abort.js +0 -20
  118. package/.output/server/node_modules/execa/lib/pipe/pipe-arguments.js +0 -91
  119. package/.output/server/node_modules/execa/lib/pipe/sequence.js +0 -24
  120. package/.output/server/node_modules/execa/lib/pipe/setup.js +0 -72
  121. package/.output/server/node_modules/execa/lib/pipe/streaming.js +0 -51
  122. package/.output/server/node_modules/execa/lib/pipe/throw.js +0 -58
  123. package/.output/server/node_modules/execa/lib/resolve/all-async.js +0 -46
  124. package/.output/server/node_modules/execa/lib/resolve/all-sync.js +0 -33
  125. package/.output/server/node_modules/execa/lib/resolve/exit-async.js +0 -54
  126. package/.output/server/node_modules/execa/lib/resolve/exit-sync.js +0 -25
  127. package/.output/server/node_modules/execa/lib/resolve/stdio.js +0 -47
  128. package/.output/server/node_modules/execa/lib/resolve/wait-stream.js +0 -96
  129. package/.output/server/node_modules/execa/lib/resolve/wait-subprocess.js +0 -146
  130. package/.output/server/node_modules/execa/lib/return/duration.js +0 -8
  131. package/.output/server/node_modules/execa/lib/return/early-error.js +0 -60
  132. package/.output/server/node_modules/execa/lib/return/final-error.js +0 -40
  133. package/.output/server/node_modules/execa/lib/return/message.js +0 -157
  134. package/.output/server/node_modules/execa/lib/return/reject.js +0 -13
  135. package/.output/server/node_modules/execa/lib/return/result.js +0 -186
  136. package/.output/server/node_modules/execa/lib/stdio/direction.js +0 -76
  137. package/.output/server/node_modules/execa/lib/stdio/duplicate.js +0 -116
  138. package/.output/server/node_modules/execa/lib/stdio/handle-async.js +0 -52
  139. package/.output/server/node_modules/execa/lib/stdio/handle-sync.js +0 -57
  140. package/.output/server/node_modules/execa/lib/stdio/handle.js +0 -214
  141. package/.output/server/node_modules/execa/lib/stdio/input-option.js +0 -50
  142. package/.output/server/node_modules/execa/lib/stdio/native.js +0 -106
  143. package/.output/server/node_modules/execa/lib/stdio/stdio-option.js +0 -60
  144. package/.output/server/node_modules/execa/lib/stdio/type.js +0 -173
  145. package/.output/server/node_modules/execa/lib/terminate/cancel.js +0 -20
  146. package/.output/server/node_modules/execa/lib/terminate/cleanup.js +0 -16
  147. package/.output/server/node_modules/execa/lib/terminate/graceful.js +0 -71
  148. package/.output/server/node_modules/execa/lib/terminate/kill.js +0 -93
  149. package/.output/server/node_modules/execa/lib/terminate/signal.js +0 -70
  150. package/.output/server/node_modules/execa/lib/terminate/timeout.js +0 -21
  151. package/.output/server/node_modules/execa/lib/transform/encoding-transform.js +0 -51
  152. package/.output/server/node_modules/execa/lib/transform/generator.js +0 -107
  153. package/.output/server/node_modules/execa/lib/transform/normalize.js +0 -111
  154. package/.output/server/node_modules/execa/lib/transform/object-mode.js +0 -41
  155. package/.output/server/node_modules/execa/lib/transform/run-async.js +0 -60
  156. package/.output/server/node_modules/execa/lib/transform/run-sync.js +0 -50
  157. package/.output/server/node_modules/execa/lib/transform/split.js +0 -110
  158. package/.output/server/node_modules/execa/lib/transform/validate.js +0 -43
  159. package/.output/server/node_modules/execa/lib/utils/abort-signal.js +0 -8
  160. package/.output/server/node_modules/execa/lib/utils/deferred.js +0 -7
  161. package/.output/server/node_modules/execa/lib/utils/max-listeners.js +0 -14
  162. package/.output/server/node_modules/execa/lib/utils/standard-stream.js +0 -6
  163. package/.output/server/node_modules/execa/lib/utils/uint-array.js +0 -69
  164. package/.output/server/node_modules/execa/lib/verbose/complete.js +0 -24
  165. package/.output/server/node_modules/execa/lib/verbose/custom.js +0 -26
  166. package/.output/server/node_modules/execa/lib/verbose/default.js +0 -54
  167. package/.output/server/node_modules/execa/lib/verbose/error.js +0 -13
  168. package/.output/server/node_modules/execa/lib/verbose/info.js +0 -39
  169. package/.output/server/node_modules/execa/lib/verbose/ipc.js +0 -15
  170. package/.output/server/node_modules/execa/lib/verbose/log.js +0 -54
  171. package/.output/server/node_modules/execa/lib/verbose/output.js +0 -60
  172. package/.output/server/node_modules/execa/lib/verbose/start.js +0 -15
  173. package/.output/server/node_modules/execa/lib/verbose/values.js +0 -33
  174. package/.output/server/node_modules/execa/package.json +0 -105
  175. package/.output/server/node_modules/figures/index.js +0 -292
  176. package/.output/server/node_modules/figures/package.json +0 -49
  177. package/.output/server/node_modules/fs-extra/lib/copy/copy-sync.js +0 -176
  178. package/.output/server/node_modules/fs-extra/lib/copy/copy.js +0 -180
  179. package/.output/server/node_modules/fs-extra/lib/copy/index.js +0 -7
  180. package/.output/server/node_modules/fs-extra/lib/empty/index.js +0 -39
  181. package/.output/server/node_modules/fs-extra/lib/ensure/file.js +0 -66
  182. package/.output/server/node_modules/fs-extra/lib/ensure/index.js +0 -23
  183. package/.output/server/node_modules/fs-extra/lib/ensure/link.js +0 -64
  184. package/.output/server/node_modules/fs-extra/lib/ensure/symlink-paths.js +0 -101
  185. package/.output/server/node_modules/fs-extra/lib/ensure/symlink-type.js +0 -34
  186. package/.output/server/node_modules/fs-extra/lib/ensure/symlink.js +0 -67
  187. package/.output/server/node_modules/fs-extra/lib/fs/index.js +0 -146
  188. package/.output/server/node_modules/fs-extra/lib/index.js +0 -16
  189. package/.output/server/node_modules/fs-extra/lib/json/index.js +0 -16
  190. package/.output/server/node_modules/fs-extra/lib/json/jsonfile.js +0 -11
  191. package/.output/server/node_modules/fs-extra/lib/json/output-json-sync.js +0 -12
  192. package/.output/server/node_modules/fs-extra/lib/json/output-json.js +0 -12
  193. package/.output/server/node_modules/fs-extra/lib/mkdirs/index.js +0 -14
  194. package/.output/server/node_modules/fs-extra/lib/mkdirs/make-dir.js +0 -27
  195. package/.output/server/node_modules/fs-extra/lib/mkdirs/utils.js +0 -21
  196. package/.output/server/node_modules/fs-extra/lib/move/index.js +0 -7
  197. package/.output/server/node_modules/fs-extra/lib/move/move-sync.js +0 -55
  198. package/.output/server/node_modules/fs-extra/lib/move/move.js +0 -59
  199. package/.output/server/node_modules/fs-extra/lib/output-file/index.js +0 -31
  200. package/.output/server/node_modules/fs-extra/lib/path-exists/index.js +0 -12
  201. package/.output/server/node_modules/fs-extra/lib/remove/index.js +0 -17
  202. package/.output/server/node_modules/fs-extra/lib/util/async.js +0 -29
  203. package/.output/server/node_modules/fs-extra/lib/util/stat.js +0 -159
  204. package/.output/server/node_modules/fs-extra/lib/util/utimes.js +0 -36
  205. package/.output/server/node_modules/fs-extra/package.json +0 -71
  206. package/.output/server/node_modules/get-stream/package.json +0 -60
  207. package/.output/server/node_modules/get-stream/source/array-buffer.js +0 -84
  208. package/.output/server/node_modules/get-stream/source/array.js +0 -32
  209. package/.output/server/node_modules/get-stream/source/buffer.js +0 -19
  210. package/.output/server/node_modules/get-stream/source/contents.js +0 -121
  211. package/.output/server/node_modules/get-stream/source/exports.js +0 -5
  212. package/.output/server/node_modules/get-stream/source/index.js +0 -13
  213. package/.output/server/node_modules/get-stream/source/stream.js +0 -65
  214. package/.output/server/node_modules/get-stream/source/string.js +0 -41
  215. package/.output/server/node_modules/get-stream/source/utils.js +0 -11
  216. package/.output/server/node_modules/graceful-fs/clone.js +0 -23
  217. package/.output/server/node_modules/graceful-fs/graceful-fs.js +0 -448
  218. package/.output/server/node_modules/graceful-fs/legacy-streams.js +0 -118
  219. package/.output/server/node_modules/graceful-fs/package.json +0 -53
  220. package/.output/server/node_modules/graceful-fs/polyfills.js +0 -355
  221. package/.output/server/node_modules/human-signals/build/src/core.js +0 -273
  222. package/.output/server/node_modules/human-signals/build/src/main.js +0 -70
  223. package/.output/server/node_modules/human-signals/build/src/realtime.js +0 -16
  224. package/.output/server/node_modules/human-signals/build/src/signals.js +0 -34
  225. package/.output/server/node_modules/human-signals/package.json +0 -66
  226. package/.output/server/node_modules/is-plain-obj/index.js +0 -8
  227. package/.output/server/node_modules/is-plain-obj/package.json +0 -41
  228. package/.output/server/node_modules/is-stream/index.js +0 -37
  229. package/.output/server/node_modules/is-stream/package.json +0 -48
  230. package/.output/server/node_modules/is-unicode-supported/index.js +0 -21
  231. package/.output/server/node_modules/is-unicode-supported/package.json +0 -47
  232. package/.output/server/node_modules/isexe/index.js +0 -57
  233. package/.output/server/node_modules/isexe/mode.js +0 -41
  234. package/.output/server/node_modules/isexe/package.json +0 -31
  235. package/.output/server/node_modules/isexe/windows.js +0 -42
  236. package/.output/server/node_modules/js-runtime/dist/index.js +0 -5
  237. package/.output/server/node_modules/js-runtime/package.json +0 -72
  238. package/.output/server/node_modules/jsonfile/index.js +0 -88
  239. package/.output/server/node_modules/jsonfile/package.json +0 -40
  240. package/.output/server/node_modules/jsonfile/utils.js +0 -14
  241. package/.output/server/node_modules/mime-db/db.json +0 -7088
  242. package/.output/server/node_modules/mime-db/index.js +0 -11
  243. package/.output/server/node_modules/mime-db/package.json +0 -57
  244. package/.output/server/node_modules/mime-types/index.js +0 -188
  245. package/.output/server/node_modules/mime-types/package.json +0 -43
  246. package/.output/server/node_modules/minimatch/minimatch.js +0 -947
  247. package/.output/server/node_modules/minimatch/package.json +0 -33
  248. package/.output/server/node_modules/natural-orderby/dist/main.js +0 -19
  249. package/.output/server/node_modules/natural-orderby/dist/umd/natural-orderby.development.js +0 -420
  250. package/.output/server/node_modules/natural-orderby/dist/umd/natural-orderby.production.min.js +0 -11
  251. package/.output/server/node_modules/natural-orderby/package.json +0 -119
  252. package/.output/server/node_modules/npm-run-path/index.js +0 -55
  253. package/.output/server/node_modules/npm-run-path/package.json +0 -52
  254. package/.output/server/node_modules/parse-ms/index.js +0 -45
  255. package/.output/server/node_modules/parse-ms/package.json +0 -47
  256. package/.output/server/node_modules/path-is-inside/lib/path-is-inside.js +0 -28
  257. package/.output/server/node_modules/path-is-inside/package.json +0 -27
  258. package/.output/server/node_modules/pretty-ms/index.js +0 -149
  259. package/.output/server/node_modules/pretty-ms/package.json +0 -55
  260. package/.output/server/node_modules/range-parser/index.js +0 -158
  261. package/.output/server/node_modules/range-parser/package.json +0 -40
  262. package/.output/server/node_modules/serve-handler/package.json +0 -68
  263. package/.output/server/node_modules/serve-handler/src/directory.js +0 -16
  264. package/.output/server/node_modules/serve-handler/src/error.js +0 -10
  265. package/.output/server/node_modules/serve-handler/src/glob-slash.js +0 -9
  266. package/.output/server/node_modules/serve-handler/src/index.js +0 -769
  267. package/.output/server/node_modules/shebang-command/index.js +0 -19
  268. package/.output/server/node_modules/shebang-command/package.json +0 -34
  269. package/.output/server/node_modules/shebang-regex/index.js +0 -2
  270. package/.output/server/node_modules/shebang-regex/package.json +0 -35
  271. package/.output/server/node_modules/signal-exit/dist/mjs/index.js +0 -275
  272. package/.output/server/node_modules/signal-exit/dist/mjs/package.json +0 -3
  273. package/.output/server/node_modules/signal-exit/dist/mjs/signals.js +0 -39
  274. package/.output/server/node_modules/signal-exit/package.json +0 -106
  275. package/.output/server/node_modules/string-argv/index.js +0 -41
  276. package/.output/server/node_modules/string-argv/package.json +0 -51
  277. package/.output/server/node_modules/strip-final-newline/index.js +0 -26
  278. package/.output/server/node_modules/strip-final-newline/package.json +0 -49
  279. package/.output/server/node_modules/unicorn-magic/default.js +0 -14
  280. package/.output/server/node_modules/unicorn-magic/node.js +0 -49
  281. package/.output/server/node_modules/unicorn-magic/package.json +0 -62
  282. package/.output/server/node_modules/universalify/index.js +0 -24
  283. package/.output/server/node_modules/universalify/package.json +0 -34
  284. package/.output/server/node_modules/which/package.json +0 -43
  285. package/.output/server/node_modules/which/which.js +0 -125
  286. package/.output/server/node_modules/yoctocolors/base.js +0 -94
  287. package/.output/server/node_modules/yoctocolors/index.js +0 -2
  288. package/.output/server/node_modules/yoctocolors/package.json +0 -69
  289. /package/.output/server/node_modules/{.nitro/path-to-regexp@8.3.0 → path-to-regexp}/dist/index.js +0 -0
  290. /package/.output/server/node_modules/{.nitro/path-to-regexp@8.3.0 → path-to-regexp}/package.json +0 -0
@@ -1,69 +0,0 @@
1
- import {once, on} from 'node:events';
2
- import {
3
- validateIpcMethod,
4
- throwOnEarlyDisconnect,
5
- disconnect,
6
- getStrictResponseError,
7
- } from './validation.js';
8
- import {getIpcEmitter, isConnected} from './forward.js';
9
- import {addReference, removeReference} from './reference.js';
10
-
11
- // Like `[sub]process.once('message')` but promise-based
12
- export const getOneMessage = ({anyProcess, channel, isSubprocess, ipc}, {reference = true, filter} = {}) => {
13
- validateIpcMethod({
14
- methodName: 'getOneMessage',
15
- isSubprocess,
16
- ipc,
17
- isConnected: isConnected(anyProcess),
18
- });
19
-
20
- return getOneMessageAsync({
21
- anyProcess,
22
- channel,
23
- isSubprocess,
24
- filter,
25
- reference,
26
- });
27
- };
28
-
29
- const getOneMessageAsync = async ({anyProcess, channel, isSubprocess, filter, reference}) => {
30
- addReference(channel, reference);
31
- const ipcEmitter = getIpcEmitter(anyProcess, channel, isSubprocess);
32
- const controller = new AbortController();
33
- try {
34
- return await Promise.race([
35
- getMessage(ipcEmitter, filter, controller),
36
- throwOnDisconnect(ipcEmitter, isSubprocess, controller),
37
- throwOnStrictError(ipcEmitter, isSubprocess, controller),
38
- ]);
39
- } catch (error) {
40
- disconnect(anyProcess);
41
- throw error;
42
- } finally {
43
- controller.abort();
44
- removeReference(channel, reference);
45
- }
46
- };
47
-
48
- const getMessage = async (ipcEmitter, filter, {signal}) => {
49
- if (filter === undefined) {
50
- const [message] = await once(ipcEmitter, 'message', {signal});
51
- return message;
52
- }
53
-
54
- for await (const [message] of on(ipcEmitter, 'message', {signal})) {
55
- if (filter(message)) {
56
- return message;
57
- }
58
- }
59
- };
60
-
61
- const throwOnDisconnect = async (ipcEmitter, isSubprocess, {signal}) => {
62
- await once(ipcEmitter, 'disconnect', {signal});
63
- throwOnEarlyDisconnect(isSubprocess);
64
- };
65
-
66
- const throwOnStrictError = async (ipcEmitter, isSubprocess, {signal}) => {
67
- const [error] = await once(ipcEmitter, 'strict:error', {signal});
68
- throw getStrictResponseError(error, isSubprocess);
69
- };
@@ -1,72 +0,0 @@
1
- import {scheduler} from 'node:timers/promises';
2
- import {sendOneMessage} from './send.js';
3
- import {getIpcEmitter} from './forward.js';
4
- import {validateConnection, getAbortDisconnectError, throwOnMissingParent} from './validation.js';
5
-
6
- // Send an IPC message so the subprocess performs a graceful termination
7
- export const sendAbort = (subprocess, message) => {
8
- const methodName = 'cancelSignal';
9
- validateConnection(methodName, false, subprocess.connected);
10
- return sendOneMessage({
11
- anyProcess: subprocess,
12
- methodName,
13
- isSubprocess: false,
14
- wrappedMessage: {type: GRACEFUL_CANCEL_TYPE, message},
15
- message,
16
- });
17
- };
18
-
19
- // When the signal is being used, start listening for incoming messages.
20
- // Unbuffering messages takes one microtask to complete, so this must be async.
21
- export const getCancelSignal = async ({anyProcess, channel, isSubprocess, ipc}) => {
22
- await startIpc({
23
- anyProcess,
24
- channel,
25
- isSubprocess,
26
- ipc,
27
- });
28
- return cancelController.signal;
29
- };
30
-
31
- const startIpc = async ({anyProcess, channel, isSubprocess, ipc}) => {
32
- if (cancelListening) {
33
- return;
34
- }
35
-
36
- cancelListening = true;
37
-
38
- if (!ipc) {
39
- throwOnMissingParent();
40
- return;
41
- }
42
-
43
- if (channel === null) {
44
- abortOnDisconnect();
45
- return;
46
- }
47
-
48
- getIpcEmitter(anyProcess, channel, isSubprocess);
49
- await scheduler.yield();
50
- };
51
-
52
- let cancelListening = false;
53
-
54
- // Reception of IPC message to perform a graceful termination
55
- export const handleAbort = wrappedMessage => {
56
- if (wrappedMessage?.type !== GRACEFUL_CANCEL_TYPE) {
57
- return false;
58
- }
59
-
60
- cancelController.abort(wrappedMessage.message);
61
- return true;
62
- };
63
-
64
- const GRACEFUL_CANCEL_TYPE = 'execa:ipc:cancel';
65
-
66
- // When the current process disconnects early, the subprocess `cancelSignal` is aborted.
67
- // Otherwise, the signal would never be able to be aborted later on.
68
- export const abortOnDisconnect = () => {
69
- cancelController.abort(getAbortDisconnectError());
70
- };
71
-
72
- const cancelController = new AbortController();
@@ -1,79 +0,0 @@
1
- import {once} from 'node:events';
2
- import {scheduler} from 'node:timers/promises';
3
- import {waitForOutgoingMessages} from './outgoing.js';
4
- import {redoAddedReferences} from './reference.js';
5
- import {handleStrictRequest, handleStrictResponse} from './strict.js';
6
- import {handleAbort, abortOnDisconnect} from './graceful.js';
7
-
8
- // By default, Node.js buffers `message` events.
9
- // - Buffering happens when there is a `message` event is emitted but there is no handler.
10
- // - As soon as a `message` event handler is set, all buffered `message` events are emitted, emptying the buffer.
11
- // - This happens both in the current process and the subprocess.
12
- // - See https://github.com/nodejs/node/blob/501546e8f37059cd577041e23941b640d0d4d406/lib/internal/child_process.js#L719
13
- // This is helpful. Notably, this allows sending messages to a subprocess that's still initializing.
14
- // However, it has several problems.
15
- // - This works with `events.on()` but not `events.once()` since all buffered messages are emitted at once.
16
- // For example, users cannot call `await getOneMessage()`/`getEachMessage()` multiple times in a row.
17
- // - When a user intentionally starts listening to `message` at a specific point in time, past `message` events are replayed, which might be unexpected.
18
- // - Buffering is unlimited, which might lead to an out-of-memory crash.
19
- // - This does not work well with multiple consumers.
20
- // For example, Execa consumes events with both `result.ipcOutput` and manual IPC calls like `getOneMessage()`.
21
- // Since `result.ipcOutput` reads all incoming messages, no buffering happens for manual IPC calls.
22
- // - Forgetting to setup a `message` listener, or setting it up too late, is a programming mistake.
23
- // The default behavior does not allow users to realize they made that mistake.
24
- // To solve those problems, instead of buffering messages, we debounce them.
25
- // The `message` event so it is emitted at most once per macrotask.
26
- export const onMessage = async ({anyProcess, channel, isSubprocess, ipcEmitter}, wrappedMessage) => {
27
- if (handleStrictResponse(wrappedMessage) || handleAbort(wrappedMessage)) {
28
- return;
29
- }
30
-
31
- if (!INCOMING_MESSAGES.has(anyProcess)) {
32
- INCOMING_MESSAGES.set(anyProcess, []);
33
- }
34
-
35
- const incomingMessages = INCOMING_MESSAGES.get(anyProcess);
36
- incomingMessages.push(wrappedMessage);
37
-
38
- if (incomingMessages.length > 1) {
39
- return;
40
- }
41
-
42
- while (incomingMessages.length > 0) {
43
- // eslint-disable-next-line no-await-in-loop
44
- await waitForOutgoingMessages(anyProcess, ipcEmitter, wrappedMessage);
45
- // eslint-disable-next-line no-await-in-loop
46
- await scheduler.yield();
47
-
48
- // eslint-disable-next-line no-await-in-loop
49
- const message = await handleStrictRequest({
50
- wrappedMessage: incomingMessages[0],
51
- anyProcess,
52
- channel,
53
- isSubprocess,
54
- ipcEmitter,
55
- });
56
-
57
- incomingMessages.shift();
58
- ipcEmitter.emit('message', message);
59
- ipcEmitter.emit('message:done');
60
- }
61
- };
62
-
63
- // If the `message` event is currently debounced, the `disconnect` event must wait for it
64
- export const onDisconnect = async ({anyProcess, channel, isSubprocess, ipcEmitter, boundOnMessage}) => {
65
- abortOnDisconnect();
66
-
67
- const incomingMessages = INCOMING_MESSAGES.get(anyProcess);
68
- while (incomingMessages?.length > 0) {
69
- // eslint-disable-next-line no-await-in-loop
70
- await once(ipcEmitter, 'message:done');
71
- }
72
-
73
- anyProcess.removeListener('message', boundOnMessage);
74
- redoAddedReferences(channel, isSubprocess);
75
- ipcEmitter.connected = false;
76
- ipcEmitter.emit('disconnect');
77
- };
78
-
79
- const INCOMING_MESSAGES = new WeakMap();
@@ -1,44 +0,0 @@
1
- import {serialize} from 'node:v8';
2
-
3
- // Validate the `ipcInput` option
4
- export const validateIpcInputOption = ({ipcInput, ipc, serialization}) => {
5
- if (ipcInput === undefined) {
6
- return;
7
- }
8
-
9
- if (!ipc) {
10
- throw new Error('The `ipcInput` option cannot be set unless the `ipc` option is `true`.');
11
- }
12
-
13
- validateIpcInput[serialization](ipcInput);
14
- };
15
-
16
- const validateAdvancedInput = ipcInput => {
17
- try {
18
- serialize(ipcInput);
19
- } catch (error) {
20
- throw new Error('The `ipcInput` option is not serializable with a structured clone.', {cause: error});
21
- }
22
- };
23
-
24
- const validateJsonInput = ipcInput => {
25
- try {
26
- JSON.stringify(ipcInput);
27
- } catch (error) {
28
- throw new Error('The `ipcInput` option is not serializable with JSON.', {cause: error});
29
- }
30
- };
31
-
32
- const validateIpcInput = {
33
- advanced: validateAdvancedInput,
34
- json: validateJsonInput,
35
- };
36
-
37
- // When the `ipcInput` option is set, it is sent as an initial IPC message to the subprocess
38
- export const sendIpcInput = async (subprocess, ipcInput) => {
39
- if (ipcInput === undefined) {
40
- return;
41
- }
42
-
43
- await subprocess.sendMessage(ipcInput);
44
- };
@@ -1,49 +0,0 @@
1
- import process from 'node:process';
2
- import {sendMessage} from './send.js';
3
- import {getOneMessage} from './get-one.js';
4
- import {getEachMessage} from './get-each.js';
5
- import {getCancelSignal} from './graceful.js';
6
-
7
- // Add promise-based IPC methods in current process
8
- export const addIpcMethods = (subprocess, {ipc}) => {
9
- Object.assign(subprocess, getIpcMethods(subprocess, false, ipc));
10
- };
11
-
12
- // Get promise-based IPC in the subprocess
13
- export const getIpcExport = () => {
14
- const anyProcess = process;
15
- const isSubprocess = true;
16
- const ipc = process.channel !== undefined;
17
-
18
- return {
19
- ...getIpcMethods(anyProcess, isSubprocess, ipc),
20
- getCancelSignal: getCancelSignal.bind(undefined, {
21
- anyProcess,
22
- channel: anyProcess.channel,
23
- isSubprocess,
24
- ipc,
25
- }),
26
- };
27
- };
28
-
29
- // Retrieve the `ipc` shared by both the current process and the subprocess
30
- const getIpcMethods = (anyProcess, isSubprocess, ipc) => ({
31
- sendMessage: sendMessage.bind(undefined, {
32
- anyProcess,
33
- channel: anyProcess.channel,
34
- isSubprocess,
35
- ipc,
36
- }),
37
- getOneMessage: getOneMessage.bind(undefined, {
38
- anyProcess,
39
- channel: anyProcess.channel,
40
- isSubprocess,
41
- ipc,
42
- }),
43
- getEachMessage: getEachMessage.bind(undefined, {
44
- anyProcess,
45
- channel: anyProcess.channel,
46
- isSubprocess,
47
- ipc,
48
- }),
49
- });
@@ -1,47 +0,0 @@
1
- import {createDeferred} from '../utils/deferred.js';
2
- import {getFdSpecificValue} from '../arguments/specific.js';
3
- import {SUBPROCESS_OPTIONS} from '../arguments/fd-options.js';
4
- import {validateStrictDeadlock} from './strict.js';
5
-
6
- // When `sendMessage()` is ongoing, any `message` being received waits before being emitted.
7
- // This allows calling one or multiple `await sendMessage()` followed by `await getOneMessage()`/`await getEachMessage()`.
8
- // Without running into a race condition when the other process sends a response too fast, before the current process set up a listener.
9
- export const startSendMessage = (anyProcess, wrappedMessage, strict) => {
10
- if (!OUTGOING_MESSAGES.has(anyProcess)) {
11
- OUTGOING_MESSAGES.set(anyProcess, new Set());
12
- }
13
-
14
- const outgoingMessages = OUTGOING_MESSAGES.get(anyProcess);
15
- const onMessageSent = createDeferred();
16
- const id = strict ? wrappedMessage.id : undefined;
17
- const outgoingMessage = {onMessageSent, id};
18
- outgoingMessages.add(outgoingMessage);
19
- return {outgoingMessages, outgoingMessage};
20
- };
21
-
22
- export const endSendMessage = ({outgoingMessages, outgoingMessage}) => {
23
- outgoingMessages.delete(outgoingMessage);
24
- outgoingMessage.onMessageSent.resolve();
25
- };
26
-
27
- // Await while `sendMessage()` is ongoing, unless there is already a `message` listener
28
- export const waitForOutgoingMessages = async (anyProcess, ipcEmitter, wrappedMessage) => {
29
- while (!hasMessageListeners(anyProcess, ipcEmitter) && OUTGOING_MESSAGES.get(anyProcess)?.size > 0) {
30
- const outgoingMessages = [...OUTGOING_MESSAGES.get(anyProcess)];
31
- validateStrictDeadlock(outgoingMessages, wrappedMessage);
32
- // eslint-disable-next-line no-await-in-loop
33
- await Promise.all(outgoingMessages.map(({onMessageSent}) => onMessageSent));
34
- }
35
- };
36
-
37
- const OUTGOING_MESSAGES = new WeakMap();
38
-
39
- // Whether any `message` listener is setup
40
- export const hasMessageListeners = (anyProcess, ipcEmitter) => ipcEmitter.listenerCount('message') > getMinListenerCount(anyProcess);
41
-
42
- // When `buffer` is `false`, we set up a `message` listener that should be ignored.
43
- // That listener is only meant to intercept `strict` acknowledgement responses.
44
- const getMinListenerCount = anyProcess => SUBPROCESS_OPTIONS.has(anyProcess)
45
- && !getFdSpecificValue(SUBPROCESS_OPTIONS.get(anyProcess).options.buffer, 'ipc')
46
- ? 1
47
- : 0;
@@ -1,44 +0,0 @@
1
- // By default, Node.js keeps the subprocess alive while it has a `message` or `disconnect` listener.
2
- // We replicate the same logic for the events that we proxy.
3
- // This ensures the subprocess is kept alive while `getOneMessage()` and `getEachMessage()` are ongoing.
4
- // This is not a problem with `sendMessage()` since Node.js handles that method automatically.
5
- // We do not use `anyProcess.channel.ref()` since this would prevent the automatic `.channel.refCounted()` Node.js is doing.
6
- // We keep a reference to `anyProcess.channel` since it might be `null` while `getOneMessage()` or `getEachMessage()` is still processing debounced messages.
7
- // See https://github.com/nodejs/node/blob/2aaeaa863c35befa2ebaa98fb7737ec84df4d8e9/lib/internal/child_process.js#L547
8
- export const addReference = (channel, reference) => {
9
- if (reference) {
10
- addReferenceCount(channel);
11
- }
12
- };
13
-
14
- const addReferenceCount = channel => {
15
- channel.refCounted();
16
- };
17
-
18
- export const removeReference = (channel, reference) => {
19
- if (reference) {
20
- removeReferenceCount(channel);
21
- }
22
- };
23
-
24
- const removeReferenceCount = channel => {
25
- channel.unrefCounted();
26
- };
27
-
28
- // To proxy events, we setup some global listeners on the `message` and `disconnect` events.
29
- // Those should not keep the subprocess alive, so we remove the automatic counting that Node.js is doing.
30
- // See https://github.com/nodejs/node/blob/1b965270a9c273d4cf70e8808e9d28b9ada7844f/lib/child_process.js#L180
31
- export const undoAddedReferences = (channel, isSubprocess) => {
32
- if (isSubprocess) {
33
- removeReferenceCount(channel);
34
- removeReferenceCount(channel);
35
- }
36
- };
37
-
38
- // Reverse it during `disconnect`
39
- export const redoAddedReferences = (channel, isSubprocess) => {
40
- if (isSubprocess) {
41
- addReferenceCount(channel);
42
- addReferenceCount(channel);
43
- }
44
- };
@@ -1,91 +0,0 @@
1
- import {promisify} from 'node:util';
2
- import {
3
- validateIpcMethod,
4
- handleEpipeError,
5
- handleSerializationError,
6
- disconnect,
7
- } from './validation.js';
8
- import {startSendMessage, endSendMessage} from './outgoing.js';
9
- import {handleSendStrict, waitForStrictResponse} from './strict.js';
10
-
11
- // Like `[sub]process.send()` but promise-based.
12
- // We do not `await subprocess` during `.sendMessage()` nor `.getOneMessage()` since those methods are transient.
13
- // Users would still need to `await subprocess` after the method is done.
14
- // Also, this would prevent `unhandledRejection` event from being emitted, making it silent.
15
- export const sendMessage = ({anyProcess, channel, isSubprocess, ipc}, message, {strict = false} = {}) => {
16
- const methodName = 'sendMessage';
17
- validateIpcMethod({
18
- methodName,
19
- isSubprocess,
20
- ipc,
21
- isConnected: anyProcess.connected,
22
- });
23
-
24
- return sendMessageAsync({
25
- anyProcess,
26
- channel,
27
- methodName,
28
- isSubprocess,
29
- message,
30
- strict,
31
- });
32
- };
33
-
34
- const sendMessageAsync = async ({anyProcess, channel, methodName, isSubprocess, message, strict}) => {
35
- const wrappedMessage = handleSendStrict({
36
- anyProcess,
37
- channel,
38
- isSubprocess,
39
- message,
40
- strict,
41
- });
42
- const outgoingMessagesState = startSendMessage(anyProcess, wrappedMessage, strict);
43
- try {
44
- await sendOneMessage({
45
- anyProcess,
46
- methodName,
47
- isSubprocess,
48
- wrappedMessage,
49
- message,
50
- });
51
- } catch (error) {
52
- disconnect(anyProcess);
53
- throw error;
54
- } finally {
55
- endSendMessage(outgoingMessagesState);
56
- }
57
- };
58
-
59
- // Used internally by `cancelSignal`
60
- export const sendOneMessage = async ({anyProcess, methodName, isSubprocess, wrappedMessage, message}) => {
61
- const sendMethod = getSendMethod(anyProcess);
62
-
63
- try {
64
- await Promise.all([
65
- waitForStrictResponse(wrappedMessage, anyProcess, isSubprocess),
66
- sendMethod(wrappedMessage),
67
- ]);
68
- } catch (error) {
69
- handleEpipeError({error, methodName, isSubprocess});
70
- handleSerializationError({
71
- error,
72
- methodName,
73
- isSubprocess,
74
- message,
75
- });
76
- throw error;
77
- }
78
- };
79
-
80
- // [sub]process.send() promisified, memoized
81
- const getSendMethod = anyProcess => {
82
- if (PROCESS_SEND_METHODS.has(anyProcess)) {
83
- return PROCESS_SEND_METHODS.get(anyProcess);
84
- }
85
-
86
- const sendMethod = promisify(anyProcess.send.bind(anyProcess));
87
- PROCESS_SEND_METHODS.set(anyProcess, sendMethod);
88
- return sendMethod;
89
- };
90
-
91
- const PROCESS_SEND_METHODS = new WeakMap();
@@ -1,113 +0,0 @@
1
- import {once} from 'node:events';
2
- import {createDeferred} from '../utils/deferred.js';
3
- import {incrementMaxListeners} from '../utils/max-listeners.js';
4
- import {sendMessage} from './send.js';
5
- import {throwOnMissingStrict, throwOnStrictDisconnect, throwOnStrictDeadlockError} from './validation.js';
6
- import {getIpcEmitter} from './forward.js';
7
- import {hasMessageListeners} from './outgoing.js';
8
-
9
- // When using the `strict` option, wrap the message with metadata during `sendMessage()`
10
- export const handleSendStrict = ({anyProcess, channel, isSubprocess, message, strict}) => {
11
- if (!strict) {
12
- return message;
13
- }
14
-
15
- const ipcEmitter = getIpcEmitter(anyProcess, channel, isSubprocess);
16
- const hasListeners = hasMessageListeners(anyProcess, ipcEmitter);
17
- return {
18
- id: count++,
19
- type: REQUEST_TYPE,
20
- message,
21
- hasListeners,
22
- };
23
- };
24
-
25
- let count = 0n;
26
-
27
- // Handles when both processes are calling `sendMessage()` with `strict` at the same time.
28
- // If neither process is listening, this would create a deadlock. We detect it and throw.
29
- export const validateStrictDeadlock = (outgoingMessages, wrappedMessage) => {
30
- if (wrappedMessage?.type !== REQUEST_TYPE || wrappedMessage.hasListeners) {
31
- return;
32
- }
33
-
34
- for (const {id} of outgoingMessages) {
35
- if (id !== undefined) {
36
- STRICT_RESPONSES[id].resolve({isDeadlock: true, hasListeners: false});
37
- }
38
- }
39
- };
40
-
41
- // The other process then sends the acknowledgment back as a response
42
- export const handleStrictRequest = async ({wrappedMessage, anyProcess, channel, isSubprocess, ipcEmitter}) => {
43
- if (wrappedMessage?.type !== REQUEST_TYPE || !anyProcess.connected) {
44
- return wrappedMessage;
45
- }
46
-
47
- const {id, message} = wrappedMessage;
48
- const response = {id, type: RESPONSE_TYPE, message: hasMessageListeners(anyProcess, ipcEmitter)};
49
-
50
- try {
51
- await sendMessage({
52
- anyProcess,
53
- channel,
54
- isSubprocess,
55
- ipc: true,
56
- }, response);
57
- } catch (error) {
58
- ipcEmitter.emit('strict:error', error);
59
- }
60
-
61
- return message;
62
- };
63
-
64
- // Reception of the acknowledgment response
65
- export const handleStrictResponse = wrappedMessage => {
66
- if (wrappedMessage?.type !== RESPONSE_TYPE) {
67
- return false;
68
- }
69
-
70
- const {id, message: hasListeners} = wrappedMessage;
71
- STRICT_RESPONSES[id]?.resolve({isDeadlock: false, hasListeners});
72
- return true;
73
- };
74
-
75
- // Wait for the other process to receive the message from `sendMessage()`
76
- export const waitForStrictResponse = async (wrappedMessage, anyProcess, isSubprocess) => {
77
- if (wrappedMessage?.type !== REQUEST_TYPE) {
78
- return;
79
- }
80
-
81
- const deferred = createDeferred();
82
- STRICT_RESPONSES[wrappedMessage.id] = deferred;
83
- const controller = new AbortController();
84
-
85
- try {
86
- const {isDeadlock, hasListeners} = await Promise.race([
87
- deferred,
88
- throwOnDisconnect(anyProcess, isSubprocess, controller),
89
- ]);
90
-
91
- if (isDeadlock) {
92
- throwOnStrictDeadlockError(isSubprocess);
93
- }
94
-
95
- if (!hasListeners) {
96
- throwOnMissingStrict(isSubprocess);
97
- }
98
- } finally {
99
- controller.abort();
100
- delete STRICT_RESPONSES[wrappedMessage.id];
101
- }
102
- };
103
-
104
- const STRICT_RESPONSES = {};
105
-
106
- const throwOnDisconnect = async (anyProcess, isSubprocess, {signal}) => {
107
- incrementMaxListeners(anyProcess, 1, signal);
108
- await once(anyProcess, 'disconnect', {signal});
109
- throwOnStrictDisconnect(isSubprocess);
110
- };
111
-
112
- const REQUEST_TYPE = 'execa:ipc:request';
113
- const RESPONSE_TYPE = 'execa:ipc:response';