Files
dify/cli/src/sys/io/streams.ts
Stephen ZhouGitHubautofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
a84c2d36a3 style: format with vp fmt (#38803)
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
2026-07-12 15:57:46 +00:00

57 lines
1.4 KiB
TypeScript

import { Buffer } from 'node:buffer'
import { PassThrough, Readable, Writable } from 'node:stream'
import { io } from '@/sys'
export type IOStreams = {
out: NodeJS.WritableStream
err: NodeJS.WritableStream
in: NodeJS.ReadableStream
isOutTTY: boolean
isErrTTY: boolean
outputFormat: string
}
export function nullStreams(): IOStreams {
return bufferStreams()
}
export function realStreams(outputFormat = ''): IOStreams {
return {
outputFormat,
...io(),
}
}
export type BufferStreams = IOStreams & {
outBuf: () => string
errBuf: () => string
}
export function bufferStreams(stdin = ''): BufferStreams {
const outChunks: Buffer[] = []
const errChunks: Buffer[] = []
const out = new Writable({
write(chunk, _enc, cb) {
outChunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(String(chunk)))
cb()
},
}) as unknown as NodeJS.WritableStream
const err = new Writable({
write(chunk, _enc, cb) {
errChunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(String(chunk)))
cb()
},
}) as unknown as NodeJS.WritableStream
const inStream: NodeJS.ReadableStream = stdin === '' ? new PassThrough() : Readable.from([stdin])
return {
out,
err,
in: inStream,
isOutTTY: false,
isErrTTY: false,
outputFormat: '',
outBuf: () => Buffer.concat(outChunks).toString('utf8'),
errBuf: () => Buffer.concat(errChunks).toString('utf8'),
}
}