From 162ce047de29d615e55ab079768bfdbea9dbfab4 Mon Sep 17 00:00:00 2001 From: Francis Gulotta Date: Sun, 13 May 2018 00:05:13 -0400 Subject: [PATCH] fix: buffer can now take any iterableish --- lib/buffer-test.ts | 19 ++++++++++++------- lib/buffer.ts | 14 ++++++++++---- 2 files changed, 22 insertions(+), 11 deletions(-) diff --git a/lib/buffer-test.ts b/lib/buffer-test.ts index 7e23fa2f..120ca625 100644 --- a/lib/buffer-test.ts +++ b/lib/buffer-test.ts @@ -1,11 +1,7 @@ import { assert } from 'chai' -import { buffer } from '../lib/buffer' +import { buffer } from './' -if ((Symbol as any).asyncIterator === undefined) { - ((Symbol as any).asyncIterator) = Symbol.for('asyncIterator') -} - -function promiseImmediate (data?) { +function promiseImmediate (data?: T): Promise { return new Promise(resolve => setImmediate(() => resolve(data))) } @@ -19,7 +15,6 @@ describe('buffer', () => { } const itr = buffer(5, numbers()) await promiseImmediate() - await promiseImmediate() assert.equal(num, 0) const { value } = await itr.next() assert.equal(value, 1) @@ -30,6 +25,7 @@ describe('buffer', () => { await promiseImmediate() assert.equal(num, 6) }) + it('buffers sync data', async () => { let num = 0 function* numbers () { @@ -43,4 +39,13 @@ describe('buffer', () => { assert.equal(value, 1) assert.equal(num, 6) }) + it('buffers sync iterables', async () => { + const itr = buffer(2, [1, 2, 3, 4, 5, 6]) + assert.equal(1, (await itr.next()).value) + assert.equal(2, (await itr.next()).value) + assert.equal(3, (await itr.next()).value) + assert.equal(4, (await itr.next()).value) + assert.equal(5, (await itr.next()).value) + assert.equal(6, (await itr.next()).value) + }) }) diff --git a/lib/buffer.ts b/lib/buffer.ts index ecd0a87b..ff7f7887 100644 --- a/lib/buffer.ts +++ b/lib/buffer.ts @@ -1,7 +1,11 @@ -async function* _buffer (size: number, iterable: Iterator) { +import { fromIterable } from './from-iterable' +import { Iterableish } from './types' + +async function* _buffer (size: number, iterable: Iterableish): AsyncIterableIterator { + const iterator = fromIterable(iterable as Iterable) const buff = [] for (let i = 0; i <= size; i++) { - buff.push(iterable.next()) + buff.push(iterator.next()) } while (true) { const { value, end } = await buff.shift() @@ -10,11 +14,13 @@ async function* _buffer (size: number, iterable: Iterator) { } else { return } - buff.push(iterable.next()) + buff.push(iterator.next()) } } -export function buffer (size: number, iterable?: Iterator) { +export function buffer (size: number): (iterable: Iterableish) => AsyncIterableIterator +export function buffer (size: number, iterable: Iterableish): AsyncIterableIterator +export function buffer (size, iterable?) { if (iterable === undefined) { return curriedIterable => _buffer(size, curriedIterable) }