Skip to content

Commit ec6ef5c

Browse files
Rob Macsindresorhus
Rob Mac
authored andcommitted
Add support for TypedArray and ArrayBuffer (#8)
1 parent 05b9ac0 commit ec6ef5c

File tree

3 files changed

+25
-1
lines changed

3 files changed

+25
-1
lines changed

index.js

+6
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,12 @@ module.exports = input => {
1414

1515
function prepare(value) {
1616
input = value;
17+
if (
18+
input instanceof ArrayBuffer ||
19+
(ArrayBuffer.isView(input) && !Buffer.isBuffer(input))
20+
) {
21+
input = Buffer.from(input);
22+
}
1723
promise = pIsPromise(input) ? input : null;
1824
// We don't iterate on strings and buffers since slicing them is ~7x faster
1925
const shouldIterate = !promise && input[Symbol.iterator] && typeof input !== 'string' && !Buffer.isBuffer(input);

readme.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ intoStream('unicorn').pipe(process.stdout);
2626

2727
### intoStream(input)
2828

29-
Type: `Buffer` `string` `Iterable<Buffer|string>` `Promise`<br>
29+
Type: `Buffer` `TypedArray` `ArrayBuffer` `string` `Iterable<Buffer|string>` `Promise`<br>
3030
Returns: [Readable stream](https://nodejs.org/api/stream.html#stream_class_stream_readable)
3131

3232
Adheres to the requested chunk size, except for `array` where each element will be a chunk.

test.js

+18
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,24 @@ test('buffer', async t => {
2424
t.true((await getStream.buffer(m(f))).equals(f));
2525
});
2626

27+
test('ArrayBuffer', async t => {
28+
const f = Buffer.from(fixture);
29+
const view = new Uint8Array(f.length);
30+
for (let i = 0; i < f.length; i++) {
31+
view[i] = f[i];
32+
}
33+
t.true((await getStream.buffer(m(view.buffer))).equals(f));
34+
});
35+
36+
test('ArrayBuffer view', async t => {
37+
const f = Buffer.from(fixture);
38+
const view = new Uint8Array(f.length);
39+
for (let i = 0; i < f.length; i++) {
40+
view[i] = f[i];
41+
}
42+
t.true((await getStream.buffer(m(view))).equals(f));
43+
});
44+
2745
test('array', async t => {
2846
t.is(await getStream(m(fixture.split(''))), fixture);
2947
});

0 commit comments

Comments
 (0)