UNPKG

1.12 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 * as Promise from "bluebird";
9import ReadableStream = NodeJS.ReadableStream;
10
11export const streamPromise = (stream: ReadableStream) =>
12 new Promise((resolve, reject) => {
13 const buffer: Buffer[] = [];
14 stream.on("data", data => {
15 buffer.push(data);
16 });
17 stream.on("end", () => {
18 resolve(Buffer.concat(buffer));
19 });
20 stream.on("error", err => {
21 reject(err);
22 });
23 });
24
25/**
26 * Returns a given resource as a Buffer (promise)
27 *
28 * @param {Stream|Buffer|String} resource
29 *
30 * @returns {Promise}
31 */
32export function getResourceBufferPromise(
33 resource: ReadableStream | Buffer | string
34): Promise<Buffer> {
35 // might be a string
36 if (typeof resource === "string") {
37 return Promise.resolve(new Buffer(resource));
38 }
39
40 // might already be a Buffer
41 if (resource instanceof Buffer) {
42 return Promise.resolve(resource);
43 }
44 // probably a stream
45 // @TODO npe/type check
46 // @ts-ignore
47 return this.streamPromise(resource);
48}