tahamajs/CPS / Files /ComputerAssignments /CA2 /node_modules /readable-stream /lib /internal /streams /pipeline.js
| // Ported from https://github.com/mafintosh/pump with | |
| // permission from the author, Mathias Buus (@mafintosh). | |
| ; | |
| var eos; | |
| function once(callback) { | |
| var called = false; | |
| return function () { | |
| if (called) return; | |
| called = true; | |
| callback.apply(void 0, arguments); | |
| }; | |
| } | |
| var _require$codes = require('../../../errors').codes, | |
| ERR_MISSING_ARGS = _require$codes.ERR_MISSING_ARGS, | |
| ERR_STREAM_DESTROYED = _require$codes.ERR_STREAM_DESTROYED; | |
| function noop(err) { | |
| // Rethrow the error if it exists to avoid swallowing it | |
| if (err) throw err; | |
| } | |
| function isRequest(stream) { | |
| return stream.setHeader && typeof stream.abort === 'function'; | |
| } | |
| function destroyer(stream, reading, writing, callback) { | |
| callback = once(callback); | |
| var closed = false; | |
| stream.on('close', function () { | |
| closed = true; | |
| }); | |
| if (eos === undefined) eos = require('./end-of-stream'); | |
| eos(stream, { | |
| readable: reading, | |
| writable: writing | |
| }, function (err) { | |
| if (err) return callback(err); | |
| closed = true; | |
| callback(); | |
| }); | |
| var destroyed = false; | |
| return function (err) { | |
| if (closed) return; | |
| if (destroyed) return; | |
| destroyed = true; | |
| // request.destroy just do .end - .abort is what we want | |
| if (isRequest(stream)) return stream.abort(); | |
| if (typeof stream.destroy === 'function') return stream.destroy(); | |
| callback(err || new ERR_STREAM_DESTROYED('pipe')); | |
| }; | |
| } | |
| function call(fn) { | |
| fn(); | |
| } | |
| function pipe(from, to) { | |
| return from.pipe(to); | |
| } | |
| function popCallback(streams) { | |
| if (!streams.length) return noop; | |
| if (typeof streams[streams.length - 1] !== 'function') return noop; | |
| return streams.pop(); | |
| } | |
| function pipeline() { | |
| for (var _len = arguments.length, streams = new Array(_len), _key = 0; _key < _len; _key++) { | |
| streams[_key] = arguments[_key]; | |
| } | |
| var callback = popCallback(streams); | |
| if (Array.isArray(streams[0])) streams = streams[0]; | |
| if (streams.length < 2) { | |
| throw new ERR_MISSING_ARGS('streams'); | |
| } | |
| var error; | |
| var destroys = streams.map(function (stream, i) { | |
| var reading = i < streams.length - 1; | |
| var writing = i > 0; | |
| return destroyer(stream, reading, writing, function (err) { | |
| if (!error) error = err; | |
| if (err) destroys.forEach(call); | |
| if (reading) return; | |
| destroys.forEach(call); | |
| callback(error); | |
| }); | |
| }); | |
| return streams.reduce(pipe); | |
| } | |
| module.exports = pipeline; |
Xet Storage Details
- Size:
- 2.42 kB
- Xet hash:
- ad7ea5e87869f310708a2e98b45542606076f5e9142575dfefd7e33bf43a1bdd
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.