UNPKG

1.07 kBPlain TextView Raw
1/**
2 * Returns a stream {Promise} which returns a {Buffer} of the stream contents
3 *
4 * @param stream
5 *
6 * @returns {Promise}
7 */
8import ReadableStream = NodeJS.ReadableStream;
9import * as Promise from 'bluebird';
10
11export const streamPromise = (stream:ReadableStream) => new Promise((resolve, reject) => {
12 const buffer:Buffer[] = [];
13 stream.on('data', (data) => {
14 buffer.push(data);
15 });
16 stream.on('end', () => {
17 resolve(Buffer.concat(buffer));
18 });
19 stream.on('error', (err) => {
20 reject(err);
21 });
22});
23
24/**
25 * Returns a given resource as a Buffer (promise)
26 *
27 * @param {Stream|Buffer|String} resource
28 *
29 * @returns {Promise}
30 */
31export function getResourceBufferPromise(resource:ReadableStream|Buffer|string):Promise<Buffer> {
32 // might be a string
33 if (typeof resource === 'string') {
34 return Promise.resolve(new Buffer(resource));
35 }
36
37 // might already be a Buffer
38 if (resource instanceof Buffer) {
39 return Promise.resolve(resource);
40 }
41 // probably a stream
42 // TODO npe/type check
43 return this.streamPromise(resource);
44}