@kubb/agent 4.28.1 → 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.
- package/.output/nitro.json +1 -1
- package/.output/server/chunks/nitro/nitro.mjs +378 -642
- package/.output/server/chunks/nitro/nitro.mjs.map +1 -1
- package/.output/server/chunks/routes/api/health.get.mjs +4 -6
- package/.output/server/chunks/routes/api/health.get.mjs.map +1 -1
- package/.output/server/index.mjs +4 -6
- package/.output/server/index.mjs.map +1 -1
- package/.output/server/node_modules/@kubb/fabric-core/dist/{defaultParser-BD_N68Bo.js → defaultParser-C1atU7yU.js} +2 -3
- package/.output/server/node_modules/@kubb/fabric-core/dist/{getRelativePath-C4Au07ON.js → getRelativePath-BcieQL5M.js} +1 -2
- package/.output/server/node_modules/@kubb/fabric-core/dist/index.js +8 -9
- package/.output/server/node_modules/@kubb/fabric-core/dist/{Root-BQX3eHqb.js → onProcessExit-CF200hsz.js} +109 -190
- package/.output/server/node_modules/@kubb/fabric-core/dist/parsers/typescript.js +3 -4
- package/.output/server/node_modules/@kubb/fabric-core/dist/parsers.js +2 -3
- package/.output/server/node_modules/@kubb/fabric-core/dist/plugins.js +58 -298
- package/.output/server/node_modules/@kubb/fabric-core/package.json +8 -18
- package/.output/server/node_modules/@kubb/react-fabric/dist/{chunk-DbZtQ4qb.js → chunk-Cnw5r_-A.js} +1 -5
- package/.output/server/node_modules/@kubb/react-fabric/dist/index.js +39 -41
- package/.output/server/node_modules/@kubb/react-fabric/dist/{jsx-runtime-CQFBnRKx.js → jsx-runtime-Dm7PKVbc.js} +6 -24
- package/.output/server/node_modules/@kubb/react-fabric/dist/jsx-runtime.js +5 -4
- package/.output/server/node_modules/@kubb/react-fabric/dist/plugins.js +3 -3
- package/.output/server/node_modules/@kubb/react-fabric/dist/{react--draJ5Pm.js → react-D652OKii.js} +31 -91
- package/.output/server/node_modules/@kubb/react-fabric/dist/{reactPlugin-DqJsInTf.js → reactPlugin-BkDkx1cs.js} +410 -1650
- package/.output/server/node_modules/@kubb/react-fabric/package.json +8 -11
- package/.output/server/node_modules/empathic/access.js +39 -0
- package/.output/server/node_modules/empathic/access.mjs +34 -0
- package/.output/server/node_modules/empathic/find.js +81 -0
- package/.output/server/node_modules/empathic/find.mjs +76 -0
- package/.output/server/node_modules/empathic/package.json +49 -0
- package/.output/server/node_modules/empathic/package.mjs +52 -0
- package/.output/server/node_modules/empathic/resolve.js +31 -0
- package/.output/server/node_modules/empathic/resolve.mjs +27 -0
- package/.output/server/node_modules/empathic/walk.js +22 -0
- package/.output/server/node_modules/empathic/walk.mjs +20 -0
- package/.output/server/node_modules/tinyexec/dist/main.js +633 -0
- package/.output/server/node_modules/tinyexec/package.json +61 -0
- package/.output/server/package.json +6 -44
- package/package.json +19 -21
- package/.output/server/node_modules/.nitro/path-key@3.1.1/index.js +0 -16
- package/.output/server/node_modules/.nitro/path-key@3.1.1/package.json +0 -39
- package/.output/server/node_modules/.nitro/path-key@4.0.0/index.js +0 -12
- package/.output/server/node_modules/.nitro/path-key@4.0.0/package.json +0 -41
- package/.output/server/node_modules/.nitro/path-to-regexp@3.3.0/index.js +0 -421
- package/.output/server/node_modules/.nitro/path-to-regexp@3.3.0/package.json +0 -46
- package/.output/server/node_modules/@kubb/fabric-core/dist/chunk-BVHe6Par.js +0 -22
- package/.output/server/node_modules/@sec-ant/readable-stream/dist/ponyfill/asyncIterator.js +0 -89
- package/.output/server/node_modules/@sec-ant/readable-stream/dist/ponyfill/fromAnyIterable.js +0 -34
- package/.output/server/node_modules/@sec-ant/readable-stream/dist/ponyfill/index.js +0 -6
- package/.output/server/node_modules/@sec-ant/readable-stream/package.json +0 -98
- package/.output/server/node_modules/@sindresorhus/merge-streams/index.js +0 -265
- package/.output/server/node_modules/@sindresorhus/merge-streams/package.json +0 -49
- package/.output/server/node_modules/balanced-match/index.js +0 -62
- package/.output/server/node_modules/balanced-match/package.json +0 -48
- package/.output/server/node_modules/brace-expansion/index.js +0 -201
- package/.output/server/node_modules/brace-expansion/package.json +0 -50
- package/.output/server/node_modules/bytes/index.js +0 -159
- package/.output/server/node_modules/bytes/package.json +0 -39
- package/.output/server/node_modules/concat-map/index.js +0 -13
- package/.output/server/node_modules/concat-map/package.json +0 -59
- package/.output/server/node_modules/content-disposition/index.js +0 -445
- package/.output/server/node_modules/content-disposition/package.json +0 -39
- package/.output/server/node_modules/cross-spawn/index.js +0 -39
- package/.output/server/node_modules/cross-spawn/lib/enoent.js +0 -59
- package/.output/server/node_modules/cross-spawn/lib/parse.js +0 -91
- package/.output/server/node_modules/cross-spawn/lib/util/escape.js +0 -47
- package/.output/server/node_modules/cross-spawn/lib/util/readShebang.js +0 -23
- package/.output/server/node_modules/cross-spawn/lib/util/resolveCommand.js +0 -52
- package/.output/server/node_modules/cross-spawn/package.json +0 -73
- package/.output/server/node_modules/execa/index.js +0 -28
- package/.output/server/node_modules/execa/lib/arguments/command.js +0 -20
- package/.output/server/node_modules/execa/lib/arguments/cwd.js +0 -39
- package/.output/server/node_modules/execa/lib/arguments/encoding-option.js +0 -50
- package/.output/server/node_modules/execa/lib/arguments/escape.js +0 -88
- package/.output/server/node_modules/execa/lib/arguments/fd-options.js +0 -108
- package/.output/server/node_modules/execa/lib/arguments/file-url.js +0 -25
- package/.output/server/node_modules/execa/lib/arguments/options.js +0 -96
- package/.output/server/node_modules/execa/lib/arguments/shell.js +0 -11
- package/.output/server/node_modules/execa/lib/arguments/specific.js +0 -111
- package/.output/server/node_modules/execa/lib/convert/add.js +0 -15
- package/.output/server/node_modules/execa/lib/convert/concurrent.js +0 -33
- package/.output/server/node_modules/execa/lib/convert/duplex.js +0 -69
- package/.output/server/node_modules/execa/lib/convert/iterable.js +0 -34
- package/.output/server/node_modules/execa/lib/convert/readable.js +0 -113
- package/.output/server/node_modules/execa/lib/convert/shared.js +0 -46
- package/.output/server/node_modules/execa/lib/convert/writable.js +0 -90
- package/.output/server/node_modules/execa/lib/io/contents.js +0 -116
- package/.output/server/node_modules/execa/lib/io/input-sync.js +0 -44
- package/.output/server/node_modules/execa/lib/io/iterate.js +0 -110
- package/.output/server/node_modules/execa/lib/io/max-buffer.js +0 -89
- package/.output/server/node_modules/execa/lib/io/output-async.js +0 -80
- package/.output/server/node_modules/execa/lib/io/output-sync.js +0 -135
- package/.output/server/node_modules/execa/lib/io/pipeline.js +0 -48
- package/.output/server/node_modules/execa/lib/io/strip-newline.js +0 -12
- package/.output/server/node_modules/execa/lib/ipc/array.js +0 -4
- package/.output/server/node_modules/execa/lib/ipc/buffer-messages.js +0 -47
- package/.output/server/node_modules/execa/lib/ipc/forward.js +0 -56
- package/.output/server/node_modules/execa/lib/ipc/get-each.js +0 -89
- package/.output/server/node_modules/execa/lib/ipc/get-one.js +0 -69
- package/.output/server/node_modules/execa/lib/ipc/graceful.js +0 -72
- package/.output/server/node_modules/execa/lib/ipc/incoming.js +0 -79
- package/.output/server/node_modules/execa/lib/ipc/ipc-input.js +0 -44
- package/.output/server/node_modules/execa/lib/ipc/methods.js +0 -49
- package/.output/server/node_modules/execa/lib/ipc/outgoing.js +0 -47
- package/.output/server/node_modules/execa/lib/ipc/reference.js +0 -44
- package/.output/server/node_modules/execa/lib/ipc/send.js +0 -91
- package/.output/server/node_modules/execa/lib/ipc/strict.js +0 -113
- package/.output/server/node_modules/execa/lib/ipc/validation.js +0 -111
- package/.output/server/node_modules/execa/lib/methods/bind.js +0 -23
- package/.output/server/node_modules/execa/lib/methods/command.js +0 -43
- package/.output/server/node_modules/execa/lib/methods/create.js +0 -65
- package/.output/server/node_modules/execa/lib/methods/main-async.js +0 -194
- package/.output/server/node_modules/execa/lib/methods/main-sync.js +0 -163
- package/.output/server/node_modules/execa/lib/methods/node.js +0 -51
- package/.output/server/node_modules/execa/lib/methods/parameters.js +0 -31
- package/.output/server/node_modules/execa/lib/methods/promise.js +0 -15
- package/.output/server/node_modules/execa/lib/methods/script.js +0 -22
- package/.output/server/node_modules/execa/lib/methods/template.js +0 -153
- package/.output/server/node_modules/execa/lib/pipe/abort.js +0 -20
- package/.output/server/node_modules/execa/lib/pipe/pipe-arguments.js +0 -91
- package/.output/server/node_modules/execa/lib/pipe/sequence.js +0 -24
- package/.output/server/node_modules/execa/lib/pipe/setup.js +0 -72
- package/.output/server/node_modules/execa/lib/pipe/streaming.js +0 -51
- package/.output/server/node_modules/execa/lib/pipe/throw.js +0 -58
- package/.output/server/node_modules/execa/lib/resolve/all-async.js +0 -46
- package/.output/server/node_modules/execa/lib/resolve/all-sync.js +0 -33
- package/.output/server/node_modules/execa/lib/resolve/exit-async.js +0 -54
- package/.output/server/node_modules/execa/lib/resolve/exit-sync.js +0 -25
- package/.output/server/node_modules/execa/lib/resolve/stdio.js +0 -47
- package/.output/server/node_modules/execa/lib/resolve/wait-stream.js +0 -96
- package/.output/server/node_modules/execa/lib/resolve/wait-subprocess.js +0 -146
- package/.output/server/node_modules/execa/lib/return/duration.js +0 -8
- package/.output/server/node_modules/execa/lib/return/early-error.js +0 -60
- package/.output/server/node_modules/execa/lib/return/final-error.js +0 -40
- package/.output/server/node_modules/execa/lib/return/message.js +0 -157
- package/.output/server/node_modules/execa/lib/return/reject.js +0 -13
- package/.output/server/node_modules/execa/lib/return/result.js +0 -186
- package/.output/server/node_modules/execa/lib/stdio/direction.js +0 -76
- package/.output/server/node_modules/execa/lib/stdio/duplicate.js +0 -116
- package/.output/server/node_modules/execa/lib/stdio/handle-async.js +0 -52
- package/.output/server/node_modules/execa/lib/stdio/handle-sync.js +0 -57
- package/.output/server/node_modules/execa/lib/stdio/handle.js +0 -214
- package/.output/server/node_modules/execa/lib/stdio/input-option.js +0 -50
- package/.output/server/node_modules/execa/lib/stdio/native.js +0 -106
- package/.output/server/node_modules/execa/lib/stdio/stdio-option.js +0 -60
- package/.output/server/node_modules/execa/lib/stdio/type.js +0 -173
- package/.output/server/node_modules/execa/lib/terminate/cancel.js +0 -20
- package/.output/server/node_modules/execa/lib/terminate/cleanup.js +0 -16
- package/.output/server/node_modules/execa/lib/terminate/graceful.js +0 -71
- package/.output/server/node_modules/execa/lib/terminate/kill.js +0 -93
- package/.output/server/node_modules/execa/lib/terminate/signal.js +0 -70
- package/.output/server/node_modules/execa/lib/terminate/timeout.js +0 -21
- package/.output/server/node_modules/execa/lib/transform/encoding-transform.js +0 -51
- package/.output/server/node_modules/execa/lib/transform/generator.js +0 -107
- package/.output/server/node_modules/execa/lib/transform/normalize.js +0 -111
- package/.output/server/node_modules/execa/lib/transform/object-mode.js +0 -41
- package/.output/server/node_modules/execa/lib/transform/run-async.js +0 -60
- package/.output/server/node_modules/execa/lib/transform/run-sync.js +0 -50
- package/.output/server/node_modules/execa/lib/transform/split.js +0 -110
- package/.output/server/node_modules/execa/lib/transform/validate.js +0 -43
- package/.output/server/node_modules/execa/lib/utils/abort-signal.js +0 -8
- package/.output/server/node_modules/execa/lib/utils/deferred.js +0 -7
- package/.output/server/node_modules/execa/lib/utils/max-listeners.js +0 -14
- package/.output/server/node_modules/execa/lib/utils/standard-stream.js +0 -6
- package/.output/server/node_modules/execa/lib/utils/uint-array.js +0 -69
- package/.output/server/node_modules/execa/lib/verbose/complete.js +0 -24
- package/.output/server/node_modules/execa/lib/verbose/custom.js +0 -26
- package/.output/server/node_modules/execa/lib/verbose/default.js +0 -54
- package/.output/server/node_modules/execa/lib/verbose/error.js +0 -13
- package/.output/server/node_modules/execa/lib/verbose/info.js +0 -39
- package/.output/server/node_modules/execa/lib/verbose/ipc.js +0 -15
- package/.output/server/node_modules/execa/lib/verbose/log.js +0 -54
- package/.output/server/node_modules/execa/lib/verbose/output.js +0 -60
- package/.output/server/node_modules/execa/lib/verbose/start.js +0 -15
- package/.output/server/node_modules/execa/lib/verbose/values.js +0 -33
- package/.output/server/node_modules/execa/package.json +0 -105
- package/.output/server/node_modules/figures/index.js +0 -292
- package/.output/server/node_modules/figures/package.json +0 -49
- package/.output/server/node_modules/fs-extra/lib/copy/copy-sync.js +0 -176
- package/.output/server/node_modules/fs-extra/lib/copy/copy.js +0 -180
- package/.output/server/node_modules/fs-extra/lib/copy/index.js +0 -7
- package/.output/server/node_modules/fs-extra/lib/empty/index.js +0 -39
- package/.output/server/node_modules/fs-extra/lib/ensure/file.js +0 -66
- package/.output/server/node_modules/fs-extra/lib/ensure/index.js +0 -23
- package/.output/server/node_modules/fs-extra/lib/ensure/link.js +0 -64
- package/.output/server/node_modules/fs-extra/lib/ensure/symlink-paths.js +0 -101
- package/.output/server/node_modules/fs-extra/lib/ensure/symlink-type.js +0 -34
- package/.output/server/node_modules/fs-extra/lib/ensure/symlink.js +0 -67
- package/.output/server/node_modules/fs-extra/lib/fs/index.js +0 -146
- package/.output/server/node_modules/fs-extra/lib/index.js +0 -16
- package/.output/server/node_modules/fs-extra/lib/json/index.js +0 -16
- package/.output/server/node_modules/fs-extra/lib/json/jsonfile.js +0 -11
- package/.output/server/node_modules/fs-extra/lib/json/output-json-sync.js +0 -12
- package/.output/server/node_modules/fs-extra/lib/json/output-json.js +0 -12
- package/.output/server/node_modules/fs-extra/lib/mkdirs/index.js +0 -14
- package/.output/server/node_modules/fs-extra/lib/mkdirs/make-dir.js +0 -27
- package/.output/server/node_modules/fs-extra/lib/mkdirs/utils.js +0 -21
- package/.output/server/node_modules/fs-extra/lib/move/index.js +0 -7
- package/.output/server/node_modules/fs-extra/lib/move/move-sync.js +0 -55
- package/.output/server/node_modules/fs-extra/lib/move/move.js +0 -59
- package/.output/server/node_modules/fs-extra/lib/output-file/index.js +0 -31
- package/.output/server/node_modules/fs-extra/lib/path-exists/index.js +0 -12
- package/.output/server/node_modules/fs-extra/lib/remove/index.js +0 -17
- package/.output/server/node_modules/fs-extra/lib/util/async.js +0 -29
- package/.output/server/node_modules/fs-extra/lib/util/stat.js +0 -159
- package/.output/server/node_modules/fs-extra/lib/util/utimes.js +0 -36
- package/.output/server/node_modules/fs-extra/package.json +0 -71
- package/.output/server/node_modules/get-stream/package.json +0 -60
- package/.output/server/node_modules/get-stream/source/array-buffer.js +0 -84
- package/.output/server/node_modules/get-stream/source/array.js +0 -32
- package/.output/server/node_modules/get-stream/source/buffer.js +0 -19
- package/.output/server/node_modules/get-stream/source/contents.js +0 -121
- package/.output/server/node_modules/get-stream/source/exports.js +0 -5
- package/.output/server/node_modules/get-stream/source/index.js +0 -13
- package/.output/server/node_modules/get-stream/source/stream.js +0 -65
- package/.output/server/node_modules/get-stream/source/string.js +0 -41
- package/.output/server/node_modules/get-stream/source/utils.js +0 -11
- package/.output/server/node_modules/graceful-fs/clone.js +0 -23
- package/.output/server/node_modules/graceful-fs/graceful-fs.js +0 -448
- package/.output/server/node_modules/graceful-fs/legacy-streams.js +0 -118
- package/.output/server/node_modules/graceful-fs/package.json +0 -53
- package/.output/server/node_modules/graceful-fs/polyfills.js +0 -355
- package/.output/server/node_modules/human-signals/build/src/core.js +0 -273
- package/.output/server/node_modules/human-signals/build/src/main.js +0 -70
- package/.output/server/node_modules/human-signals/build/src/realtime.js +0 -16
- package/.output/server/node_modules/human-signals/build/src/signals.js +0 -34
- package/.output/server/node_modules/human-signals/package.json +0 -66
- package/.output/server/node_modules/is-plain-obj/index.js +0 -8
- package/.output/server/node_modules/is-plain-obj/package.json +0 -41
- package/.output/server/node_modules/is-stream/index.js +0 -37
- package/.output/server/node_modules/is-stream/package.json +0 -48
- package/.output/server/node_modules/is-unicode-supported/index.js +0 -21
- package/.output/server/node_modules/is-unicode-supported/package.json +0 -47
- package/.output/server/node_modules/isexe/index.js +0 -57
- package/.output/server/node_modules/isexe/mode.js +0 -41
- package/.output/server/node_modules/isexe/package.json +0 -31
- package/.output/server/node_modules/isexe/windows.js +0 -42
- package/.output/server/node_modules/js-runtime/dist/index.js +0 -5
- package/.output/server/node_modules/js-runtime/package.json +0 -72
- package/.output/server/node_modules/jsonfile/index.js +0 -88
- package/.output/server/node_modules/jsonfile/package.json +0 -40
- package/.output/server/node_modules/jsonfile/utils.js +0 -14
- package/.output/server/node_modules/mime-db/db.json +0 -7088
- package/.output/server/node_modules/mime-db/index.js +0 -11
- package/.output/server/node_modules/mime-db/package.json +0 -57
- package/.output/server/node_modules/mime-types/index.js +0 -188
- package/.output/server/node_modules/mime-types/package.json +0 -43
- package/.output/server/node_modules/minimatch/minimatch.js +0 -947
- package/.output/server/node_modules/minimatch/package.json +0 -33
- package/.output/server/node_modules/natural-orderby/dist/main.js +0 -19
- package/.output/server/node_modules/natural-orderby/dist/umd/natural-orderby.development.js +0 -420
- package/.output/server/node_modules/natural-orderby/dist/umd/natural-orderby.production.min.js +0 -11
- package/.output/server/node_modules/natural-orderby/package.json +0 -119
- package/.output/server/node_modules/npm-run-path/index.js +0 -55
- package/.output/server/node_modules/npm-run-path/package.json +0 -52
- package/.output/server/node_modules/parse-ms/index.js +0 -45
- package/.output/server/node_modules/parse-ms/package.json +0 -47
- package/.output/server/node_modules/path-is-inside/lib/path-is-inside.js +0 -28
- package/.output/server/node_modules/path-is-inside/package.json +0 -27
- package/.output/server/node_modules/pretty-ms/index.js +0 -149
- package/.output/server/node_modules/pretty-ms/package.json +0 -55
- package/.output/server/node_modules/range-parser/index.js +0 -158
- package/.output/server/node_modules/range-parser/package.json +0 -40
- package/.output/server/node_modules/serve-handler/package.json +0 -68
- package/.output/server/node_modules/serve-handler/src/directory.js +0 -16
- package/.output/server/node_modules/serve-handler/src/error.js +0 -10
- package/.output/server/node_modules/serve-handler/src/glob-slash.js +0 -9
- package/.output/server/node_modules/serve-handler/src/index.js +0 -769
- package/.output/server/node_modules/shebang-command/index.js +0 -19
- package/.output/server/node_modules/shebang-command/package.json +0 -34
- package/.output/server/node_modules/shebang-regex/index.js +0 -2
- package/.output/server/node_modules/shebang-regex/package.json +0 -35
- package/.output/server/node_modules/signal-exit/dist/mjs/index.js +0 -275
- package/.output/server/node_modules/signal-exit/dist/mjs/package.json +0 -3
- package/.output/server/node_modules/signal-exit/dist/mjs/signals.js +0 -39
- package/.output/server/node_modules/signal-exit/package.json +0 -106
- package/.output/server/node_modules/string-argv/index.js +0 -41
- package/.output/server/node_modules/string-argv/package.json +0 -51
- package/.output/server/node_modules/strip-final-newline/index.js +0 -26
- package/.output/server/node_modules/strip-final-newline/package.json +0 -49
- package/.output/server/node_modules/unicorn-magic/default.js +0 -14
- package/.output/server/node_modules/unicorn-magic/node.js +0 -49
- package/.output/server/node_modules/unicorn-magic/package.json +0 -62
- package/.output/server/node_modules/universalify/index.js +0 -24
- package/.output/server/node_modules/universalify/package.json +0 -34
- package/.output/server/node_modules/which/package.json +0 -43
- package/.output/server/node_modules/which/which.js +0 -125
- package/.output/server/node_modules/yoctocolors/base.js +0 -94
- package/.output/server/node_modules/yoctocolors/index.js +0 -2
- package/.output/server/node_modules/yoctocolors/package.json +0 -69
- /package/.output/server/node_modules/{.nitro/path-to-regexp@8.3.0 → path-to-regexp}/dist/index.js +0 -0
- /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,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
|
-
};
|