@whatwg-node/node-fetch
Version:
Fetch API implementation for Node
79 lines (78 loc) • 2.8 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.PonyfillTransformStream = void 0;
const node_stream_1 = require("node:stream");
const ReadableStream_js_1 = require("./ReadableStream.js");
const WritableStream_js_1 = require("./WritableStream.js");
class PonyfillTransformStream {
transform;
writable;
readable;
constructor(transformer) {
if (transformer instanceof node_stream_1.Transform) {
this.transform = transformer;
}
else if (transformer) {
const controller = {
enqueue(chunk) {
transform.push(chunk);
},
error(reason) {
transform.destroy(reason);
},
terminate() {
transform.end();
},
get desiredSize() {
return transform.writableLength;
},
};
const transform = new node_stream_1.Transform({
read() { },
write(chunk, _encoding, callback) {
try {
const result = transformer.transform?.(chunk, controller);
if (result instanceof Promise) {
result.then(() => {
callback();
}, err => {
callback(err);
});
}
else {
callback();
}
}
catch (err) {
callback(err);
}
},
final(callback) {
try {
const result = transformer.flush?.(controller);
if (result instanceof Promise) {
result.then(() => {
callback();
}, err => {
callback(err);
});
}
else {
callback();
}
}
catch (err) {
callback(err);
}
},
});
this.transform = transform;
}
else {
this.transform = new node_stream_1.Transform();
}
this.writable = new WritableStream_js_1.PonyfillWritableStream(this.transform);
this.readable = new ReadableStream_js_1.PonyfillReadableStream(this.transform);
}
}
exports.PonyfillTransformStream = PonyfillTransformStream;