UNPKG

1.82 kBJavaScriptView Raw
1"use strict";
2
3Object.defineProperty(exports, "__esModule", {
4 value: true
5});
6exports.measureStreamLength = measureStreamLength;
7exports.readableFromStringOrBuffer = readableFromStringOrBuffer;
8exports.bufferStream = bufferStream;
9exports.blobToStream = blobToStream;
10exports.streamFromPromise = streamFromPromise;
11exports.fallbackStream = fallbackStream;
12
13var _stream = require("stream");
14
15function measureStreamLength(stream) {
16 return new Promise((resolve, reject) => {
17 let length = 0;
18 stream.on('data', chunk => {
19 length += chunk;
20 });
21 stream.on('end', () => resolve(length));
22 stream.on('error', reject);
23 });
24}
25
26function readableFromStringOrBuffer(str) {
27 // https://stackoverflow.com/questions/12755997/how-to-create-streams-from-string-in-node-js
28 const stream = new _stream.Readable();
29 stream.push(str);
30 stream.push(null);
31 return stream;
32}
33
34function bufferStream(stream) {
35 return new Promise((resolve, reject) => {
36 let buf = Buffer.from([]);
37 stream.on('data', data => {
38 buf = Buffer.concat([buf, data]);
39 });
40 stream.on('end', () => {
41 resolve(buf);
42 });
43 stream.on('error', reject);
44 });
45}
46
47function blobToStream(blob) {
48 if (blob instanceof _stream.Readable) {
49 return blob;
50 }
51
52 return readableFromStringOrBuffer(blob);
53}
54
55function streamFromPromise(promise) {
56 const stream = new _stream.PassThrough();
57 promise.then(blob => {
58 if (blob instanceof _stream.Readable) {
59 blob.pipe(stream);
60 } else {
61 stream.end(blob);
62 }
63 });
64 return stream;
65}
66
67function fallbackStream(stream, fallback) {
68 const res = new _stream.PassThrough();
69 stream.on('error', err => {
70 if (err.code === 'ENOENT') {
71 fallback().pipe(res);
72 } else {
73 res.emit('error', err);
74 }
75 });
76 stream.pipe(res);
77 return res;
78}
\No newline at end of file