27 lines
917 B
TypeScript
27 lines
917 B
TypeScript
import { Transform, TransformOptions } from "stream";
|
|
import { StringDecoder } from "string_decoder";
|
|
import { WithEncoding } from "./baseDefinitions";
|
|
|
|
export function join(
|
|
separator: string,
|
|
options: WithEncoding & TransformOptions = { encoding: "utf8" },
|
|
): Transform {
|
|
let isFirstChunk = true;
|
|
const decoder = new StringDecoder(options.encoding);
|
|
return new Transform({
|
|
readableObjectMode: true,
|
|
async transform(chunk: Buffer, encoding, callback) {
|
|
const asString = decoder.write(chunk);
|
|
// Take care not to break up multi-byte characters spanning multiple chunks
|
|
if (asString !== "" || chunk.length === 0) {
|
|
if (!isFirstChunk) {
|
|
this.push(separator);
|
|
}
|
|
this.push(asString);
|
|
isFirstChunk = false;
|
|
}
|
|
callback();
|
|
},
|
|
});
|
|
}
|