stream-wormhole
Version:
Pipe ReadStream to a wormhole
57 lines • 4.09 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.sendToWormhole = void 0;
const READABLE_STATE_KEY = '_readableState';
function sendToWormhole(stream, throwError = false) {
return new Promise((resolve, reject) => {
if (typeof stream.resume !== 'function') {
return resolve();
}
// unpipe it
stream.unpipe && stream.unpipe();
// enable resume first
stream.resume();
if (stream.listenerCount && stream.listenerCount('readable') > 0) {
// https://npm.taobao.org/mirrors/node/latest/docs/api/stream.html#stream_readable_resume
// node 10.0.0: The resume() has no effect if there is a 'readable' event listening.
stream.removeAllListeners('readable');
// call resume again in nextTick
process.nextTick(() => stream.resume());
}
if (!stream.readable || stream.destroyed) {
return resolve();
}
if (stream.closed || stream.readableEnded) {
return resolve();
}
const readableState = Reflect.get(stream, READABLE_STATE_KEY);
if (readableState?.ended) {
return resolve();
}
function cleanup() {
stream.removeListener('end', onEnd);
stream.removeListener('close', onEnd);
stream.removeListener('error', onError);
}
function onEnd() {
cleanup();
resolve();
}
function onError(err) {
cleanup();
// don't throw error by default
if (throwError) {
reject(err);
}
else {
resolve();
}
}
stream.on('end', onEnd);
stream.on('close', onEnd);
stream.on('error', onError);
});
}
exports.sendToWormhole = sendToWormhole;
exports.default = sendToWormhole;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBRUEsTUFBTSxrQkFBa0IsR0FBRyxnQkFBZ0IsQ0FBQztBQUU1QyxTQUFnQixjQUFjLENBQUMsTUFBZ0IsRUFBRSxVQUFVLEdBQUcsS0FBSztJQUNqRSxPQUFPLElBQUksT0FBTyxDQUFPLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO1FBQzNDLElBQUksT0FBTyxNQUFNLENBQUMsTUFBTSxLQUFLLFVBQVUsRUFBRTtZQUN2QyxPQUFPLE9BQU8sRUFBRSxDQUFDO1NBQ2xCO1FBRUQsWUFBWTtRQUNaLE1BQU0sQ0FBQyxNQUFNLElBQUksTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ2pDLHNCQUFzQjtRQUN0QixNQUFNLENBQUMsTUFBTSxFQUFFLENBQUM7UUFFaEIsSUFBSSxNQUFNLENBQUMsYUFBYSxJQUFJLE1BQU0sQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ2hFLHlGQUF5RjtZQUN6RixvRkFBb0Y7WUFDcEYsTUFBTSxDQUFDLGtCQUFrQixDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ3RDLGdDQUFnQztZQUNoQyxPQUFPLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO1NBQ3pDO1FBRUQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLElBQUksTUFBTSxDQUFDLFNBQVMsRUFBRTtZQUN4QyxPQUFPLE9BQU8sRUFBRSxDQUFDO1NBQ2xCO1FBQ0QsSUFBSSxNQUFNLENBQUMsTUFBTSxJQUFJLE1BQU0sQ0FBQyxhQUFhLEVBQUU7WUFDekMsT0FBTyxPQUFPLEVBQUUsQ0FBQztTQUNsQjtRQUVELE1BQU0sYUFBYSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLGtCQUFrQixDQUFDLENBQUM7UUFDOUQsSUFBSSxhQUFhLEVBQUUsS0FBSyxFQUFFO1lBQ3hCLE9BQU8sT0FBTyxFQUFFLENBQUM7U0FDbEI7UUFFRCxTQUFTLE9BQU87WUFDZCxNQUFNLENBQUMsY0FBYyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztZQUNwQyxNQUFNLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQztZQUN0QyxNQUFNLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztRQUMxQyxDQUFDO1FBRUQsU0FBUyxLQUFLO1lBQ1osT0FBTyxFQUFFLENBQUM7WUFDVixPQUFPLEVBQUUsQ0FBQztRQUNaLENBQUM7UUFFRCxTQUFTLE9BQU8sQ0FBQyxHQUFVO1lBQ3pCLE9BQU8sRUFBRSxDQUFDO1lBQ1YsK0JBQStCO1lBQy9CLElBQUksVUFBVSxFQUFFO2dCQUNkLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQzthQUNiO2lCQUFNO2dCQUNMLE9BQU8sRUFBRSxDQUFDO2FBQ1g7UUFDSCxDQUFDO1FBRUQsTUFBTSxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDeEIsTUFBTSxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDMUIsTUFBTSxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDOUIsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDO0FBeERELHdDQXdEQztBQUVELGtCQUFlLGNBQWMsQ0FBQyJ9