eStream(head)) { d._write = function(chunk, encoding, callback) { if (head.write(chunk, encoding)) { callback(); } else { ondrain = callback; } }; d._final = function(callback) { head.end(); onfinish = callback; }; head.on('drain', function() { if (ondrain) { const cb = ondrain; ondrain = null; cb(); } }); } else if (isWebStream(head)) { const writable = isTransformStream(head) ? head.writable : head; const writer = writable.getWriter(); d._write = async function(chunk, encoding, callback) { try { await writer.ready; writer.write(chunk).catch(() => {}); callback(); } catch (err) { callback(err); } }; d._final = async function(callback) { try { await writer.ready; writer.close().catch(() => {}); onfinish = callback; } catch (err) { callback(err); } }; } const toRead = isTransformStream(tail) ? tail.readable : tail; eos(toRead, () => { if (onfinish) { const cb = onfinish; onfinish = null; cb(); } }); } if (readable) { if (isNodeStream(tail)) { tail.on('readable', function() { if (onreadable) { const cb = onreadable; onreadable = null; cb(); } }); tail.on('end', function() { d.push(null); }); d._read = function() { while (true) { const buf = tail.read(); if (buf === null) { onreadable = d._read; return; } if (!d.push(buf)) { return; } } }; } else if (isWebStream(tail)) { const readable = isTransformStream(tail) ? tail.readable : tail; const reader = readable.getReader(); d._read = async function() { while (true) { try { const { value, done } = await reader.read(); if (!d.push(value)) { return; } if (done) { d.push(null); return; } } catch { return; } } }; } } d._destroy = function(err, callback) { if (!err && onclose !== null) { err = new AbortError(); } onreadable = null; ondrain = null; onfinish = null; if (isNodeStream(tail)) { destroyer(tail, err); } if (onclose === null) { callback(err); } else { onclose = callback; } }; return d; };