@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,51 +0,0 @@
1
- import {Buffer} from 'node:buffer';
2
- import {StringDecoder} from 'node:string_decoder';
3
- import {isUint8Array, bufferToUint8Array} from '../utils/uint-array.js';
4
-
5
- /*
6
- When using binary encodings, add an internal generator that converts chunks from `Buffer` to `string` or `Uint8Array`.
7
- Chunks might be Buffer, Uint8Array or strings since:
8
- - `subprocess.stdout|stderr` emits Buffers
9
- - `subprocess.stdin.write()` accepts Buffer, Uint8Array or string
10
- - Previous generators might return Uint8Array or string
11
-
12
- However, those are converted to Buffer:
13
- - on writes: `Duplex.writable` `decodeStrings: true` default option
14
- - on reads: `Duplex.readable` `readableEncoding: null` default option
15
- */
16
- export const getEncodingTransformGenerator = (binary, encoding, skipped) => {
17
- if (skipped) {
18
- return;
19
- }
20
-
21
- if (binary) {
22
- return {transform: encodingUint8ArrayGenerator.bind(undefined, new TextEncoder())};
23
- }
24
-
25
- const stringDecoder = new StringDecoder(encoding);
26
- return {
27
- transform: encodingStringGenerator.bind(undefined, stringDecoder),
28
- final: encodingStringFinal.bind(undefined, stringDecoder),
29
- };
30
- };
31
-
32
- const encodingUint8ArrayGenerator = function * (textEncoder, chunk) {
33
- if (Buffer.isBuffer(chunk)) {
34
- yield bufferToUint8Array(chunk);
35
- } else if (typeof chunk === 'string') {
36
- yield textEncoder.encode(chunk);
37
- } else {
38
- yield chunk;
39
- }
40
- };
41
-
42
- const encodingStringGenerator = function * (stringDecoder, chunk) {
43
- yield isUint8Array(chunk) ? stringDecoder.write(chunk) : chunk;
44
- };
45
-
46
- const encodingStringFinal = function * (stringDecoder) {
47
- const lastChunk = stringDecoder.end();
48
- if (lastChunk !== '') {
49
- yield lastChunk;
50
- }
51
- };
@@ -1,107 +0,0 @@
1
- import {Transform, getDefaultHighWaterMark} from 'node:stream';
2
- import {isAsyncGenerator} from '../stdio/type.js';
3
- import {getSplitLinesGenerator, getAppendNewlineGenerator} from './split.js';
4
- import {getValidateTransformInput, getValidateTransformReturn} from './validate.js';
5
- import {getEncodingTransformGenerator} from './encoding-transform.js';
6
- import {
7
- pushChunks,
8
- transformChunk,
9
- finalChunks,
10
- destroyTransform,
11
- } from './run-async.js';
12
- import {
13
- pushChunksSync,
14
- transformChunkSync,
15
- finalChunksSync,
16
- runTransformSync,
17
- } from './run-sync.js';
18
-
19
- /*
20
- Generators can be used to transform/filter standard streams.
21
-
22
- Generators have a simple syntax, yet allows all of the following:
23
- - Sharing `state` between chunks
24
- - Flushing logic, by using a `final` function
25
- - Asynchronous logic
26
- - Emitting multiple chunks from a single source chunk, even if spaced in time, by using multiple `yield`
27
- - Filtering, by using no `yield`
28
-
29
- Therefore, there is no need to allow Node.js or web transform streams.
30
-
31
- The `highWaterMark` is kept as the default value, since this is what `subprocess.std*` uses.
32
-
33
- Chunks are currently processed serially. We could add a `concurrency` option to parallelize in the future.
34
-
35
- Transform an array of generator functions into a `Transform` stream.
36
- `Duplex.from(generator)` cannot be used because it does not allow setting the `objectMode` and `highWaterMark`.
37
- */
38
- export const generatorToStream = ({
39
- value,
40
- value: {transform, final, writableObjectMode, readableObjectMode},
41
- optionName,
42
- }, {encoding}) => {
43
- const state = {};
44
- const generators = addInternalGenerators(value, encoding, optionName);
45
-
46
- const transformAsync = isAsyncGenerator(transform);
47
- const finalAsync = isAsyncGenerator(final);
48
- const transformMethod = transformAsync
49
- ? pushChunks.bind(undefined, transformChunk, state)
50
- : pushChunksSync.bind(undefined, transformChunkSync);
51
- const finalMethod = transformAsync || finalAsync
52
- ? pushChunks.bind(undefined, finalChunks, state)
53
- : pushChunksSync.bind(undefined, finalChunksSync);
54
- const destroyMethod = transformAsync || finalAsync
55
- ? destroyTransform.bind(undefined, state)
56
- : undefined;
57
-
58
- const stream = new Transform({
59
- writableObjectMode,
60
- writableHighWaterMark: getDefaultHighWaterMark(writableObjectMode),
61
- readableObjectMode,
62
- readableHighWaterMark: getDefaultHighWaterMark(readableObjectMode),
63
- transform(chunk, encoding, done) {
64
- transformMethod([chunk, generators, 0], this, done);
65
- },
66
- flush(done) {
67
- finalMethod([generators], this, done);
68
- },
69
- destroy: destroyMethod,
70
- });
71
- return {stream};
72
- };
73
-
74
- // Applies transform generators in sync mode
75
- export const runGeneratorsSync = (chunks, stdioItems, encoding, isInput) => {
76
- const generators = stdioItems.filter(({type}) => type === 'generator');
77
- const reversedGenerators = isInput ? generators.reverse() : generators;
78
-
79
- for (const {value, optionName} of reversedGenerators) {
80
- const generators = addInternalGenerators(value, encoding, optionName);
81
- chunks = runTransformSync(generators, chunks);
82
- }
83
-
84
- return chunks;
85
- };
86
-
87
- // Generators used internally to convert the chunk type, validate it, and split into lines
88
- const addInternalGenerators = (
89
- {transform, final, binary, writableObjectMode, readableObjectMode, preserveNewlines},
90
- encoding,
91
- optionName,
92
- ) => {
93
- const state = {};
94
- return [
95
- {transform: getValidateTransformInput(writableObjectMode, optionName)},
96
- getEncodingTransformGenerator(binary, encoding, writableObjectMode),
97
- getSplitLinesGenerator(binary, preserveNewlines, writableObjectMode, state),
98
- {transform, final},
99
- {transform: getValidateTransformReturn(readableObjectMode, optionName)},
100
- getAppendNewlineGenerator({
101
- binary,
102
- preserveNewlines,
103
- readableObjectMode,
104
- state,
105
- }),
106
- ].filter(Boolean);
107
- };
@@ -1,111 +0,0 @@
1
- import isPlainObj from 'is-plain-obj';
2
- import {BINARY_ENCODINGS} from '../arguments/encoding-option.js';
3
- import {TRANSFORM_TYPES} from '../stdio/type.js';
4
- import {getTransformObjectModes} from './object-mode.js';
5
-
6
- // Transforms generators/duplex/TransformStream can have multiple shapes.
7
- // This normalizes it and applies default values.
8
- export const normalizeTransforms = (stdioItems, optionName, direction, options) => [
9
- ...stdioItems.filter(({type}) => !TRANSFORM_TYPES.has(type)),
10
- ...getTransforms(stdioItems, optionName, direction, options),
11
- ];
12
-
13
- const getTransforms = (stdioItems, optionName, direction, {encoding}) => {
14
- const transforms = stdioItems.filter(({type}) => TRANSFORM_TYPES.has(type));
15
- const newTransforms = Array.from({length: transforms.length});
16
-
17
- for (const [index, stdioItem] of Object.entries(transforms)) {
18
- newTransforms[index] = normalizeTransform({
19
- stdioItem,
20
- index: Number(index),
21
- newTransforms,
22
- optionName,
23
- direction,
24
- encoding,
25
- });
26
- }
27
-
28
- return sortTransforms(newTransforms, direction);
29
- };
30
-
31
- const normalizeTransform = ({stdioItem, stdioItem: {type}, index, newTransforms, optionName, direction, encoding}) => {
32
- if (type === 'duplex') {
33
- return normalizeDuplex({stdioItem, optionName});
34
- }
35
-
36
- if (type === 'webTransform') {
37
- return normalizeTransformStream({
38
- stdioItem,
39
- index,
40
- newTransforms,
41
- direction,
42
- });
43
- }
44
-
45
- return normalizeGenerator({
46
- stdioItem,
47
- index,
48
- newTransforms,
49
- direction,
50
- encoding,
51
- });
52
- };
53
-
54
- const normalizeDuplex = ({
55
- stdioItem,
56
- stdioItem: {
57
- value: {
58
- transform,
59
- transform: {writableObjectMode, readableObjectMode},
60
- objectMode = readableObjectMode,
61
- },
62
- },
63
- optionName,
64
- }) => {
65
- if (objectMode && !readableObjectMode) {
66
- throw new TypeError(`The \`${optionName}.objectMode\` option can only be \`true\` if \`new Duplex({objectMode: true})\` is used.`);
67
- }
68
-
69
- if (!objectMode && readableObjectMode) {
70
- throw new TypeError(`The \`${optionName}.objectMode\` option cannot be \`false\` if \`new Duplex({objectMode: true})\` is used.`);
71
- }
72
-
73
- return {
74
- ...stdioItem,
75
- value: {transform, writableObjectMode, readableObjectMode},
76
- };
77
- };
78
-
79
- const normalizeTransformStream = ({stdioItem, stdioItem: {value}, index, newTransforms, direction}) => {
80
- const {transform, objectMode} = isPlainObj(value) ? value : {transform: value};
81
- const {writableObjectMode, readableObjectMode} = getTransformObjectModes(objectMode, index, newTransforms, direction);
82
- return ({
83
- ...stdioItem,
84
- value: {transform, writableObjectMode, readableObjectMode},
85
- });
86
- };
87
-
88
- const normalizeGenerator = ({stdioItem, stdioItem: {value}, index, newTransforms, direction, encoding}) => {
89
- const {
90
- transform,
91
- final,
92
- binary: binaryOption = false,
93
- preserveNewlines = false,
94
- objectMode,
95
- } = isPlainObj(value) ? value : {transform: value};
96
- const binary = binaryOption || BINARY_ENCODINGS.has(encoding);
97
- const {writableObjectMode, readableObjectMode} = getTransformObjectModes(objectMode, index, newTransforms, direction);
98
- return {
99
- ...stdioItem,
100
- value: {
101
- transform,
102
- final,
103
- binary,
104
- preserveNewlines,
105
- writableObjectMode,
106
- readableObjectMode,
107
- },
108
- };
109
- };
110
-
111
- const sortTransforms = (newTransforms, direction) => direction === 'input' ? newTransforms.reverse() : newTransforms;
@@ -1,41 +0,0 @@
1
- import {TRANSFORM_TYPES} from '../stdio/type.js';
2
-
3
- /*
4
- Retrieve the `objectMode`s of a single transform.
5
- `objectMode` determines the return value's type, i.e. the `readableObjectMode`.
6
- The chunk argument's type is based on the previous generator's return value, i.e. the `writableObjectMode` is based on the previous `readableObjectMode`.
7
- The last input's generator is read by `subprocess.stdin` which:
8
- - should not be in `objectMode` for performance reasons.
9
- - can only be strings, Buffers and Uint8Arrays.
10
- Therefore its `readableObjectMode` must be `false`.
11
- The same applies to the first output's generator's `writableObjectMode`.
12
- */
13
- export const getTransformObjectModes = (objectMode, index, newTransforms, direction) => direction === 'output'
14
- ? getOutputObjectModes(objectMode, index, newTransforms)
15
- : getInputObjectModes(objectMode, index, newTransforms);
16
-
17
- const getOutputObjectModes = (objectMode, index, newTransforms) => {
18
- const writableObjectMode = index !== 0 && newTransforms[index - 1].value.readableObjectMode;
19
- const readableObjectMode = objectMode ?? writableObjectMode;
20
- return {writableObjectMode, readableObjectMode};
21
- };
22
-
23
- const getInputObjectModes = (objectMode, index, newTransforms) => {
24
- const writableObjectMode = index === 0
25
- ? objectMode === true
26
- : newTransforms[index - 1].value.readableObjectMode;
27
- const readableObjectMode = index !== newTransforms.length - 1 && (objectMode ?? writableObjectMode);
28
- return {writableObjectMode, readableObjectMode};
29
- };
30
-
31
- // Retrieve the `objectMode` of a file descriptor, e.g. `stdout` or `stderr`
32
- export const getFdObjectMode = (stdioItems, direction) => {
33
- const lastTransform = stdioItems.findLast(({type}) => TRANSFORM_TYPES.has(type));
34
- if (lastTransform === undefined) {
35
- return false;
36
- }
37
-
38
- return direction === 'input'
39
- ? lastTransform.value.writableObjectMode
40
- : lastTransform.value.readableObjectMode;
41
- };
@@ -1,60 +0,0 @@
1
- import {callbackify} from 'node:util';
2
-
3
- // Applies a series of generator functions asynchronously
4
- export const pushChunks = callbackify(async (getChunks, state, getChunksArguments, transformStream) => {
5
- state.currentIterable = getChunks(...getChunksArguments);
6
-
7
- try {
8
- for await (const chunk of state.currentIterable) {
9
- transformStream.push(chunk);
10
- }
11
- } finally {
12
- delete state.currentIterable;
13
- }
14
- });
15
-
16
- // For each new chunk, apply each `transform()` method
17
- export const transformChunk = async function * (chunk, generators, index) {
18
- if (index === generators.length) {
19
- yield chunk;
20
- return;
21
- }
22
-
23
- const {transform = identityGenerator} = generators[index];
24
- for await (const transformedChunk of transform(chunk)) {
25
- yield * transformChunk(transformedChunk, generators, index + 1);
26
- }
27
- };
28
-
29
- // At the end, apply each `final()` method, followed by the `transform()` method of the next transforms
30
- export const finalChunks = async function * (generators) {
31
- for (const [index, {final}] of Object.entries(generators)) {
32
- yield * generatorFinalChunks(final, Number(index), generators);
33
- }
34
- };
35
-
36
- const generatorFinalChunks = async function * (final, index, generators) {
37
- if (final === undefined) {
38
- return;
39
- }
40
-
41
- for await (const finalChunk of final()) {
42
- yield * transformChunk(finalChunk, generators, index + 1);
43
- }
44
- };
45
-
46
- // Cancel any ongoing async generator when the Transform is destroyed, e.g. when the subprocess errors
47
- export const destroyTransform = callbackify(async ({currentIterable}, error) => {
48
- if (currentIterable !== undefined) {
49
- await (error ? currentIterable.throw(error) : currentIterable.return());
50
- return;
51
- }
52
-
53
- if (error) {
54
- throw error;
55
- }
56
- });
57
-
58
- const identityGenerator = function * (chunk) {
59
- yield chunk;
60
- };
@@ -1,50 +0,0 @@
1
- // Duplicate the code from `run-async.js` but as synchronous functions
2
- export const pushChunksSync = (getChunksSync, getChunksArguments, transformStream, done) => {
3
- try {
4
- for (const chunk of getChunksSync(...getChunksArguments)) {
5
- transformStream.push(chunk);
6
- }
7
-
8
- done();
9
- } catch (error) {
10
- done(error);
11
- }
12
- };
13
-
14
- // Run synchronous generators with `execaSync()`
15
- export const runTransformSync = (generators, chunks) => [
16
- ...chunks.flatMap(chunk => [...transformChunkSync(chunk, generators, 0)]),
17
- ...finalChunksSync(generators),
18
- ];
19
-
20
- export const transformChunkSync = function * (chunk, generators, index) {
21
- if (index === generators.length) {
22
- yield chunk;
23
- return;
24
- }
25
-
26
- const {transform = identityGenerator} = generators[index];
27
- for (const transformedChunk of transform(chunk)) {
28
- yield * transformChunkSync(transformedChunk, generators, index + 1);
29
- }
30
- };
31
-
32
- export const finalChunksSync = function * (generators) {
33
- for (const [index, {final}] of Object.entries(generators)) {
34
- yield * generatorFinalChunksSync(final, Number(index), generators);
35
- }
36
- };
37
-
38
- const generatorFinalChunksSync = function * (final, index, generators) {
39
- if (final === undefined) {
40
- return;
41
- }
42
-
43
- for (const finalChunk of final()) {
44
- yield * transformChunkSync(finalChunk, generators, index + 1);
45
- }
46
- };
47
-
48
- const identityGenerator = function * (chunk) {
49
- yield chunk;
50
- };
@@ -1,110 +0,0 @@
1
- // Split chunks line-wise for generators passed to the `std*` options
2
- export const getSplitLinesGenerator = (binary, preserveNewlines, skipped, state) => binary || skipped
3
- ? undefined
4
- : initializeSplitLines(preserveNewlines, state);
5
-
6
- // Same but for synchronous methods
7
- export const splitLinesSync = (chunk, preserveNewlines, objectMode) => objectMode
8
- ? chunk.flatMap(item => splitLinesItemSync(item, preserveNewlines))
9
- : splitLinesItemSync(chunk, preserveNewlines);
10
-
11
- const splitLinesItemSync = (chunk, preserveNewlines) => {
12
- const {transform, final} = initializeSplitLines(preserveNewlines, {});
13
- return [...transform(chunk), ...final()];
14
- };
15
-
16
- const initializeSplitLines = (preserveNewlines, state) => {
17
- state.previousChunks = '';
18
- return {
19
- transform: splitGenerator.bind(undefined, state, preserveNewlines),
20
- final: linesFinal.bind(undefined, state),
21
- };
22
- };
23
-
24
- // This imperative logic is much faster than using `String.split()` and uses very low memory.
25
- const splitGenerator = function * (state, preserveNewlines, chunk) {
26
- if (typeof chunk !== 'string') {
27
- yield chunk;
28
- return;
29
- }
30
-
31
- let {previousChunks} = state;
32
- let start = -1;
33
-
34
- for (let end = 0; end < chunk.length; end += 1) {
35
- if (chunk[end] === '\n') {
36
- const newlineLength = getNewlineLength(chunk, end, preserveNewlines, state);
37
- let line = chunk.slice(start + 1, end + 1 - newlineLength);
38
-
39
- if (previousChunks.length > 0) {
40
- line = concatString(previousChunks, line);
41
- previousChunks = '';
42
- }
43
-
44
- yield line;
45
- start = end;
46
- }
47
- }
48
-
49
- if (start !== chunk.length - 1) {
50
- previousChunks = concatString(previousChunks, chunk.slice(start + 1));
51
- }
52
-
53
- state.previousChunks = previousChunks;
54
- };
55
-
56
- const getNewlineLength = (chunk, end, preserveNewlines, state) => {
57
- if (preserveNewlines) {
58
- return 0;
59
- }
60
-
61
- state.isWindowsNewline = end !== 0 && chunk[end - 1] === '\r';
62
- return state.isWindowsNewline ? 2 : 1;
63
- };
64
-
65
- const linesFinal = function * ({previousChunks}) {
66
- if (previousChunks.length > 0) {
67
- yield previousChunks;
68
- }
69
- };
70
-
71
- // Unless `preserveNewlines: true` is used, we strip the newline of each line.
72
- // This re-adds them after the user `transform` code has run.
73
- export const getAppendNewlineGenerator = ({binary, preserveNewlines, readableObjectMode, state}) => binary || preserveNewlines || readableObjectMode
74
- ? undefined
75
- : {transform: appendNewlineGenerator.bind(undefined, state)};
76
-
77
- const appendNewlineGenerator = function * ({isWindowsNewline = false}, chunk) {
78
- const {unixNewline, windowsNewline, LF, concatBytes} = typeof chunk === 'string' ? linesStringInfo : linesUint8ArrayInfo;
79
-
80
- if (chunk.at(-1) === LF) {
81
- yield chunk;
82
- return;
83
- }
84
-
85
- const newline = isWindowsNewline ? windowsNewline : unixNewline;
86
- yield concatBytes(chunk, newline);
87
- };
88
-
89
- const concatString = (firstChunk, secondChunk) => `${firstChunk}${secondChunk}`;
90
-
91
- const linesStringInfo = {
92
- windowsNewline: '\r\n',
93
- unixNewline: '\n',
94
- LF: '\n',
95
- concatBytes: concatString,
96
- };
97
-
98
- const concatUint8Array = (firstChunk, secondChunk) => {
99
- const chunk = new Uint8Array(firstChunk.length + secondChunk.length);
100
- chunk.set(firstChunk, 0);
101
- chunk.set(secondChunk, firstChunk.length);
102
- return chunk;
103
- };
104
-
105
- const linesUint8ArrayInfo = {
106
- windowsNewline: new Uint8Array([0x0D, 0x0A]),
107
- unixNewline: new Uint8Array([0x0A]),
108
- LF: 0x0A,
109
- concatBytes: concatUint8Array,
110
- };
@@ -1,43 +0,0 @@
1
- import {Buffer} from 'node:buffer';
2
- import {isUint8Array} from '../utils/uint-array.js';
3
-
4
- // Validate the type of chunk argument passed to transform generators
5
- export const getValidateTransformInput = (writableObjectMode, optionName) => writableObjectMode
6
- ? undefined
7
- : validateStringTransformInput.bind(undefined, optionName);
8
-
9
- const validateStringTransformInput = function * (optionName, chunk) {
10
- if (typeof chunk !== 'string' && !isUint8Array(chunk) && !Buffer.isBuffer(chunk)) {
11
- throw new TypeError(`The \`${optionName}\` option's transform must use "objectMode: true" to receive as input: ${typeof chunk}.`);
12
- }
13
-
14
- yield chunk;
15
- };
16
-
17
- // Validate the type of the value returned by transform generators
18
- export const getValidateTransformReturn = (readableObjectMode, optionName) => readableObjectMode
19
- ? validateObjectTransformReturn.bind(undefined, optionName)
20
- : validateStringTransformReturn.bind(undefined, optionName);
21
-
22
- const validateObjectTransformReturn = function * (optionName, chunk) {
23
- validateEmptyReturn(optionName, chunk);
24
- yield chunk;
25
- };
26
-
27
- const validateStringTransformReturn = function * (optionName, chunk) {
28
- validateEmptyReturn(optionName, chunk);
29
-
30
- if (typeof chunk !== 'string' && !isUint8Array(chunk)) {
31
- throw new TypeError(`The \`${optionName}\` option's function must yield a string or an Uint8Array, not ${typeof chunk}.`);
32
- }
33
-
34
- yield chunk;
35
- };
36
-
37
- const validateEmptyReturn = (optionName, chunk) => {
38
- if (chunk === null || chunk === undefined) {
39
- throw new TypeError(`The \`${optionName}\` option's function must not call \`yield ${chunk}\`.
40
- Instead, \`yield\` should either be called with a value, or not be called at all. For example:
41
- if (condition) { yield value; }`);
42
- }
43
- };
@@ -1,8 +0,0 @@
1
- import {once} from 'node:events';
2
-
3
- // Combines `util.aborted()` and `events.addAbortListener()`: promise-based and cleaned up with a stop signal
4
- export const onAbortedSignal = async (mainSignal, stopSignal) => {
5
- if (!mainSignal.aborted) {
6
- await once(mainSignal, 'abort', {signal: stopSignal});
7
- }
8
- };
@@ -1,7 +0,0 @@
1
- export const createDeferred = () => {
2
- const methods = {};
3
- const promise = new Promise((resolve, reject) => {
4
- Object.assign(methods, {resolve, reject});
5
- });
6
- return Object.assign(promise, methods);
7
- };
@@ -1,14 +0,0 @@
1
- import {addAbortListener} from 'node:events';
2
-
3
- // Temporarily increase the maximum number of listeners on an eventEmitter
4
- export const incrementMaxListeners = (eventEmitter, maxListenersIncrement, signal) => {
5
- const maxListeners = eventEmitter.getMaxListeners();
6
- if (maxListeners === 0 || maxListeners === Number.POSITIVE_INFINITY) {
7
- return;
8
- }
9
-
10
- eventEmitter.setMaxListeners(maxListeners + maxListenersIncrement);
11
- addAbortListener(signal, () => {
12
- eventEmitter.setMaxListeners(eventEmitter.getMaxListeners() - maxListenersIncrement);
13
- });
14
- };
@@ -1,6 +0,0 @@
1
- import process from 'node:process';
2
-
3
- export const isStandardStream = stream => STANDARD_STREAMS.includes(stream);
4
- export const STANDARD_STREAMS = [process.stdin, process.stdout, process.stderr];
5
- export const STANDARD_STREAMS_ALIASES = ['stdin', 'stdout', 'stderr'];
6
- export const getStreamName = fdNumber => STANDARD_STREAMS_ALIASES[fdNumber] ?? `stdio[${fdNumber}]`;
@@ -1,69 +0,0 @@
1
- import {StringDecoder} from 'node:string_decoder';
2
-
3
- const {toString: objectToString} = Object.prototype;
4
-
5
- export const isArrayBuffer = value => objectToString.call(value) === '[object ArrayBuffer]';
6
-
7
- // Is either Uint8Array or Buffer
8
- export const isUint8Array = value => objectToString.call(value) === '[object Uint8Array]';
9
-
10
- export const bufferToUint8Array = buffer => new Uint8Array(buffer.buffer, buffer.byteOffset, buffer.byteLength);
11
-
12
- const textEncoder = new TextEncoder();
13
- const stringToUint8Array = string => textEncoder.encode(string);
14
-
15
- const textDecoder = new TextDecoder();
16
- export const uint8ArrayToString = uint8Array => textDecoder.decode(uint8Array);
17
-
18
- export const joinToString = (uint8ArraysOrStrings, encoding) => {
19
- const strings = uint8ArraysToStrings(uint8ArraysOrStrings, encoding);
20
- return strings.join('');
21
- };
22
-
23
- const uint8ArraysToStrings = (uint8ArraysOrStrings, encoding) => {
24
- if (encoding === 'utf8' && uint8ArraysOrStrings.every(uint8ArrayOrString => typeof uint8ArrayOrString === 'string')) {
25
- return uint8ArraysOrStrings;
26
- }
27
-
28
- const decoder = new StringDecoder(encoding);
29
- const strings = uint8ArraysOrStrings
30
- .map(uint8ArrayOrString => typeof uint8ArrayOrString === 'string'
31
- ? stringToUint8Array(uint8ArrayOrString)
32
- : uint8ArrayOrString)
33
- .map(uint8Array => decoder.write(uint8Array));
34
- const finalString = decoder.end();
35
- return finalString === '' ? strings : [...strings, finalString];
36
- };
37
-
38
- export const joinToUint8Array = uint8ArraysOrStrings => {
39
- if (uint8ArraysOrStrings.length === 1 && isUint8Array(uint8ArraysOrStrings[0])) {
40
- return uint8ArraysOrStrings[0];
41
- }
42
-
43
- return concatUint8Arrays(stringsToUint8Arrays(uint8ArraysOrStrings));
44
- };
45
-
46
- const stringsToUint8Arrays = uint8ArraysOrStrings => uint8ArraysOrStrings.map(uint8ArrayOrString => typeof uint8ArrayOrString === 'string'
47
- ? stringToUint8Array(uint8ArrayOrString)
48
- : uint8ArrayOrString);
49
-
50
- export const concatUint8Arrays = uint8Arrays => {
51
- const result = new Uint8Array(getJoinLength(uint8Arrays));
52
-
53
- let index = 0;
54
- for (const uint8Array of uint8Arrays) {
55
- result.set(uint8Array, index);
56
- index += uint8Array.length;
57
- }
58
-
59
- return result;
60
- };
61
-
62
- const getJoinLength = uint8Arrays => {
63
- let joinLength = 0;
64
- for (const uint8Array of uint8Arrays) {
65
- joinLength += uint8Array.length;
66
- }
67
-
68
- return joinLength;
69
- };