1 | "use strict";
|
2 |
|
3 | Object.defineProperty(exports, "__esModule", {
|
4 | value: true
|
5 | });
|
6 | exports.measureStreamLength = measureStreamLength;
|
7 | exports.readableFromStringOrBuffer = readableFromStringOrBuffer;
|
8 | exports.bufferStream = bufferStream;
|
9 | exports.blobToStream = blobToStream;
|
10 | exports.streamFromPromise = streamFromPromise;
|
11 | exports.fallbackStream = fallbackStream;
|
12 |
|
13 | var _stream = require("stream");
|
14 |
|
15 | function 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 |
|
26 | function readableFromStringOrBuffer(str) {
|
27 |
|
28 | const stream = new _stream.Readable();
|
29 | stream.push(str);
|
30 | stream.push(null);
|
31 | return stream;
|
32 | }
|
33 |
|
34 | function 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 |
|
47 | function blobToStream(blob) {
|
48 | if (blob instanceof _stream.Readable) {
|
49 | return blob;
|
50 | }
|
51 |
|
52 | return readableFromStringOrBuffer(blob);
|
53 | }
|
54 |
|
55 | function 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 |
|
67 | function 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 |