async-iterator-helpers
Advanced tools
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"index.d.ts","names":[],"sources":["../src/index.ts"],"sourcesContent":[],"mappings":";cAQa;EAAA,iBAAa,MAAA;EAAA,QAAA,WAAA,CAAA;EAAA,OAGc,IAAA,CAAA,CAAA,CAAA,CAAA,MAAA,EAAf,cAAe,CAAA,CAAA,CAAA,GAAK,SAAL,CAAe,YAAf,CAA4B,CAA5B,CAAA,CAAA,CAAA,EAAkC,aAAlC,CAAgD,CAAhD,CAAA;EAAC,GAAhB,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,KAAA,EAIL,CAJK,EAAA,GAIC,YAJD,CAIc,CAJd,CAAA,CAAA,EAImB,aAJnB,CAIiC,CAJjC,CAAA;EAAc,MAA6B,CAAA,CAAA,EAAA,CAAA,KAAA,EAQhD,CARgD,EAAA,GAQ1C,YAR0C,CAAA,OAAA,CAAA,CAAA,EAQlB,aARkB,CAQJ,CARI,CAAA;EAAC,IAAd,CAAA,CAAA,EAAA,MAAA,CAAA,EAYpC,aAZoC,CAYtB,CAZsB,CAAA;EAAY,IAAtB,CAAA,CAAA,EAAA,MAAA,CAAA,EAgB1B,aAhB0B,CAgBZ,CAhBY,CAAA;EAAS,QAAkC,CAAA,KAAA,EAAA,MAAA,CAAA,EAoB7D,aApB6D,CAoB/C,CApB+C,CAAA;EAAC,OAAf,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,KAAA,EAwBlD,CAxBkD,EAAA,GAwB5C,cAxB4C,CAwB7B,YAxB6B,CAwBhB,CAxBgB,CAAA,CAAA,GAwBV,YAxBU,CAwBG,CAxBH,CAAA,EAAA,CAAA,EAwBU,aAxBV,CAwBwB,CAxBxB,CAAA;EAAa,OAInE,CAAA,CAAA,EA6BD,OA7BC,CA6BO,CA7BP,EAAA,CAAA;EAAC,IAAkB,CAAA,CAAA,EAAA,CAAA,KAAA,EAqCf,CArCe,EAAA,GAqCT,YArCS,CAAA,OAAA,CAAA,CAAA,EAqCe,OArCf,CAqCuB,CArCvB,GAAA,SAAA,CAAA;EAAC,OAAd,CAAA,CAAA,EAAA,CAAA,KAAA,EA4CC,CA5CD,EAAA,GAAA,IAAA,CAAA,EA4Cc,OA5Cd,CAAA,IAAA,CAAA;EAAY,MAAoB,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,GAAA,EAkD/B,CAlD+B,EAAA,KAAA,EAkDrB,CAlDqB,EAAA,GAkDf,CAlDe,EAAA,OAAA,EAkDH,CAlDG,CAAA,EAkDC,OAlDD,CAkDS,CAlDT,CAAA;EAAC,IAAf,CAAA,CAAA,EAAA,CAAA,KAAA,EA0DpB,CA1DoB,EAAA,GA0Dd,YA1Dc,CAAA,OAAA,CAAA,CAAA,EA0DU,OA1DV,CAAA,OAAA,CAAA;EAAa,KAIrC,CAAA,CAAA,EAAA,CAAA,KAAA,EA6DK,CA7DL,EAAA,GA6DW,YA7DX,CAAA,OAAA,CAAA,CAAA,EA6DmC,OA7DnC,CAAA,OAAA,CAAA;EAAC,CAoElB,MAAA,CAAO,aAAA,GApEgB,EAoEE,cApEF,CAoEiB,CApEjB,CAAA;;KAgIrB,YAhI6C,CAAA,CAAA,CAAA,GAgI3B,CAhI2B,GAgIvB,OAhIuB,CAgIf,CAhIe,CAAA"} | ||
| {"version":3,"file":"index.d.ts","names":[],"sources":["../src/index.ts"],"sourcesContent":[],"mappings":";cAMa;EAAA,iBAAa,MAAA;EAAA,QAAA,WAAA,CAAA;EAAA,OAGc,IAAA,CAAA,CAAA,CAAA,CAAA,MAAA,EAAf,cAAe,CAAA,CAAA,CAAA,GAAK,SAAL,CAAe,YAAf,CAA4B,CAA5B,CAAA,CAAA,CAAA,EAAkC,aAAlC,CAAgD,CAAhD,CAAA;EAAC,GAAhB,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,KAAA,EAIL,CAJK,EAAA,GAIC,YAJD,CAIc,CAJd,CAAA,CAAA,EAImB,aAJnB,CAIiC,CAJjC,CAAA;EAAc,MAA6B,CAAA,CAAA,EAAA,CAAA,KAAA,EAQhD,CARgD,EAAA,GAQ1C,YAR0C,CAAA,OAAA,CAAA,CAAA,EAQlB,aARkB,CAQJ,CARI,CAAA;EAAC,IAAd,CAAA,CAAA,EAAA,MAAA,CAAA,EAYpC,aAZoC,CAYtB,CAZsB,CAAA;EAAY,IAAtB,CAAA,CAAA,EAAA,MAAA,CAAA,EAgB1B,aAhB0B,CAgBZ,CAhBY,CAAA;EAAS,QAAkC,CAAA,KAAA,EAAA,MAAA,CAAA,EAoB7D,aApB6D,CAoB/C,CApB+C,CAAA;EAAC,OAAf,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,KAAA,EAwBlD,CAxBkD,EAAA,GAwB5C,cAxB4C,CAwB7B,YAxB6B,CAwBhB,CAxBgB,CAAA,CAAA,GAwBV,YAxBU,CAwBG,CAxBH,CAAA,EAAA,CAAA,EAwBU,aAxBV,CAwBwB,CAxBxB,CAAA;EAAa,OAInE,CAAA,CAAA,EA6BD,OA7BC,CA6BO,CA7BP,EAAA,CAAA;EAAC,IAAkB,CAAA,CAAA,EAAA,CAAA,KAAA,EAqCf,CArCe,EAAA,GAqCT,YArCS,CAAA,OAAA,CAAA,CAAA,EAqCe,OArCf,CAqCuB,CArCvB,GAAA,SAAA,CAAA;EAAC,OAAd,CAAA,CAAA,EAAA,CAAA,KAAA,EA4CC,CA5CD,EAAA,GAAA,IAAA,CAAA,EA4Cc,OA5Cd,CAAA,IAAA,CAAA;EAAY,MAAoB,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,GAAA,EAkD/B,CAlD+B,EAAA,KAAA,EAkDrB,CAlDqB,EAAA,GAkDf,CAlDe,EAAA,OAAA,EAkDH,CAlDG,CAAA,EAkDC,OAlDD,CAkDS,CAlDT,CAAA;EAAC,IAAf,CAAA,CAAA,EAAA,CAAA,KAAA,EA0DpB,CA1DoB,EAAA,GA0Dd,YA1Dc,CAAA,OAAA,CAAA,CAAA,EA0DU,OA1DV,CAAA,OAAA,CAAA;EAAa,KAIrC,CAAA,CAAA,EAAA,CAAA,KAAA,EA6DK,CA7DL,EAAA,GA6DW,YA7DX,CAAA,OAAA,CAAA,CAAA,EA6DmC,OA7DnC,CAAA,OAAA,CAAA;EAAC,CAoElB,MAAA,CAAO,aAAA,GApEgB,EAoEE,cApEF,CAoEiB,CApEjB,CAAA;;KAgIrB,YAhI6C,CAAA,CAAA,CAAA,GAgI3B,CAhI2B,GAgIvB,OAhIuB,CAgIf,CAhIe,CAAA"} |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"index.js","names":["handle: AsyncIteratorHandle<any, T>","handle: AsyncGenerator<T> | ArrayLike<MaybePromise<T>>","f: (value: T) => MaybePromise<U>","f: (value: T) => MaybePromise<boolean>","n: number","limit: number","f: (value: T) => AsyncGenerator<MaybePromise<U>> | MaybePromise<U>[]","result: T[]","f: (value: T) => void","f: (acc: R, value: T) => R","initial: R","fn: (value: T) => MaybePromise<Option<U>>","begin: number","length: number","parallelLimit: number","f: (value: U) => MaybePromise<V>","f: (value: U) => MaybePromise<boolean>","generatorLike: AsyncGenerator<T> | ArrayLike<MaybePromise<T>>","queue: Promise<Option<T>>[]"],"sources":["../src/index.ts"],"sourcesContent":["import { readSync } from \"fs\";\n\nconst DEFAULT_PARALLEL_LIMIT = (() => {\n const envLimit = 'process' in globalThis ? Number(globalThis.process.env.ASYNC_ITERATOR_HELPERS_PARALLEL_LIMIT) : NaN;\n const hardLimit = 100;\n return Math.min(Number.isFinite(envLimit) ? envLimit : 16, hardLimit);\n})();\n\nexport class AsyncIterator<T> {\n private constructor(private readonly handle: AsyncIteratorHandle<any, T>) { }\n\n static from<T>(handle: AsyncGenerator<T> | ArrayLike<MaybePromise<T>>): AsyncIterator<T> {\n return new AsyncIterator(new AsyncIteratorHandle(handle, (value) => [1, value], 0, Infinity, DEFAULT_PARALLEL_LIMIT));\n }\n\n map<U>(f: (value: T) => MaybePromise<U>): AsyncIterator<U> {\n return new AsyncIterator(this.handle.map(f));\n }\n\n filter(f: (value: T) => MaybePromise<boolean>): AsyncIterator<T> {\n return new AsyncIterator(this.handle.filter(f));\n }\n\n take(n: number): AsyncIterator<T> {\n return new AsyncIterator(this.handle.take(n));\n }\n\n drop(n: number): AsyncIterator<T> {\n return new AsyncIterator(this.handle.drop(n));\n }\n\n parallel(limit: number): AsyncIterator<T> {\n return new AsyncIterator(this.handle.parallel(Math.max(1, limit)));\n }\n\n flatMap<U>(f: (value: T) => AsyncGenerator<MaybePromise<U>> | MaybePromise<U>[]): AsyncIterator<U> {\n const handle = parGen(this.handle.parallelLimit, this.handle[Symbol.asyncIterator]());\n return AsyncIterator.from(async function* () {\n for await (const value of handle) {\n yield* f(value);\n }\n }());\n }\n\n async toArray(): Promise<T[]> {\n const result: T[] = [];\n for await (const value of this.handle) {\n result.push(value);\n }\n return result;\n }\n\n async find(f: (value: T) => MaybePromise<boolean>): Promise<T | undefined> {\n for await (const value of this.handle) {\n if (await f(value)) return value;\n }\n return undefined;\n }\n\n async forEach(f: (value: T) => void): Promise<void> {\n for await (const value of this.handle) {\n f(value);\n }\n }\n\n async reduce<R>(f: (acc: R, value: T) => R, initial: R): Promise<R> {\n let acc = initial;\n for await (const value of this.handle) {\n acc = f(acc, value);\n }\n return acc;\n }\n\n async some(f: (value: T) => MaybePromise<boolean>): Promise<boolean> {\n for await (const value of this.handle) {\n if (await f(value)) return true;\n }\n return false;\n }\n\n async every(f: (value: T) => MaybePromise<boolean>): Promise<boolean> {\n for await (const value of this.handle) {\n if (!(await f(value))) return false;\n }\n return true;\n }\n\n [Symbol.asyncIterator](): AsyncGenerator<T> {\n return this.handle[Symbol.asyncIterator]();\n }\n}\n\nclass AsyncIteratorHandle<T, U> {\n constructor(\n private readonly handle: AsyncGenerator<T> | ArrayLike<MaybePromise<T>>,\n private readonly fn: (value: T) => MaybePromise<Option<U>>,\n private readonly begin: number,\n private readonly length: number,\n readonly parallelLimit: number,\n ) { }\n\n async *[Symbol.asyncIterator](): AsyncGenerator<U> {\n let toSkip = this.begin;\n let toTake = this.length;\n for await (const value of parGen(this.parallelLimit, this.handle)) {\n if (toSkip > 0) {\n toSkip -= 1;\n continue;\n }\n const [id, val] = await this.fn(value);\n if (id === 0) continue;\n if (toTake <= 0) break;\n yield val;\n toTake -= 1;\n }\n }\n\n map<V>(f: (value: U) => MaybePromise<V>): AsyncIteratorHandle<T, V> {\n return new AsyncIteratorHandle(this.handle, async t => {\n const [id, val] = await this.fn(t);\n if (id === 0) return [0, null];\n return [1, await f(val)];\n }, this.begin, this.length, this.parallelLimit);\n }\n\n filter(f: (value: U) => MaybePromise<boolean>): AsyncIteratorHandle<T, U> {\n return new AsyncIteratorHandle(this.handle, async t => {\n const [id, val] = await this.fn(t);\n if (id !== 0 && (await f(val))) return [1, val];\n return [0, null];\n }, this.begin, this.length, this.parallelLimit);\n }\n\n take(n: number): AsyncIteratorHandle<T, U> {\n return new AsyncIteratorHandle(this.handle, this.fn, this.begin, Math.min(n, this.length), this.parallelLimit);\n }\n\n drop(n: number): AsyncIteratorHandle<T, U> {\n const amountToDrop = Math.min(n, this.length);\n return new AsyncIteratorHandle(this.handle, this.fn, this.begin + amountToDrop, this.length - amountToDrop, this.parallelLimit);\n }\n\n parallel(limit: number): AsyncIteratorHandle<T, U> {\n return new AsyncIteratorHandle(this.handle, this.fn, this.begin, this.length, limit);\n }\n}\n\ntype MaybePromise<T> = T | Promise<T>;\ntype Option<T> = [0, null] | [1, T];\n\nasync function* parGen<T>(limit: number, generatorLike: AsyncGenerator<T> | ArrayLike<MaybePromise<T>>): AsyncGenerator<T> {\n const generator = ((): AsyncGenerator<T> => {\n if ('length' in generatorLike) {\n return (async function* () {\n for (const value of Array.from(generatorLike)) {\n yield Promise.resolve(await value);\n }\n })();\n }\n return generatorLike\n })();\n\n const queue: Promise<Option<T>>[] = [];\n while (queue.length < limit) {\n queue.push(generator.next().then((r): Option<T> => r.done ? [0, null] : [1, r.value]));\n }\n\n while (queue.length > 0) {\n const [id, value] = await queue.shift()!;\n if (id === 0) continue;\n yield value;\n queue.push(generator.next().then((r): Option<T> => r.done ? [0, null] : [1, r.value]));\n }\n}\n"],"mappings":"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"} | ||
| {"version":3,"file":"index.js","names":["handle: AsyncIteratorHandle<any, T>","handle: AsyncGenerator<T> | ArrayLike<MaybePromise<T>>","f: (value: T) => MaybePromise<U>","f: (value: T) => MaybePromise<boolean>","n: number","limit: number","f: (value: T) => AsyncGenerator<MaybePromise<U>> | MaybePromise<U>[]","result: T[]","f: (value: T) => void","f: (acc: R, value: T) => R","initial: R","fn: (value: T) => MaybePromise<Option<U>>","begin: number","length: number","parallelLimit: number","f: (value: U) => MaybePromise<V>","f: (value: U) => MaybePromise<boolean>","generatorLike: AsyncGenerator<T> | ArrayLike<MaybePromise<T>>","queue: Promise<Option<T>>[]"],"sources":["../src/index.ts"],"sourcesContent":["const DEFAULT_PARALLEL_LIMIT = (() => {\n const envLimit = 'process' in globalThis ? Number(globalThis.process.env.ASYNC_ITERATOR_HELPERS_PARALLEL_LIMIT) : NaN;\n const hardLimit = 100;\n return Math.min(Number.isFinite(envLimit) ? envLimit : 16, hardLimit);\n})();\n\nexport class AsyncIterator<T> {\n private constructor(private readonly handle: AsyncIteratorHandle<any, T>) { }\n\n static from<T>(handle: AsyncGenerator<T> | ArrayLike<MaybePromise<T>>): AsyncIterator<T> {\n return new AsyncIterator(new AsyncIteratorHandle(handle, (value) => [1, value], 0, Infinity, DEFAULT_PARALLEL_LIMIT));\n }\n\n map<U>(f: (value: T) => MaybePromise<U>): AsyncIterator<U> {\n return new AsyncIterator(this.handle.map(f));\n }\n\n filter(f: (value: T) => MaybePromise<boolean>): AsyncIterator<T> {\n return new AsyncIterator(this.handle.filter(f));\n }\n\n take(n: number): AsyncIterator<T> {\n return new AsyncIterator(this.handle.take(n));\n }\n\n drop(n: number): AsyncIterator<T> {\n return new AsyncIterator(this.handle.drop(n));\n }\n\n parallel(limit: number): AsyncIterator<T> {\n return new AsyncIterator(this.handle.parallel(Math.max(1, limit)));\n }\n\n flatMap<U>(f: (value: T) => AsyncGenerator<MaybePromise<U>> | MaybePromise<U>[]): AsyncIterator<U> {\n const handle = parGen(this.handle.parallelLimit, this.handle[Symbol.asyncIterator]());\n return AsyncIterator.from(async function* () {\n for await (const value of handle) {\n yield* f(value);\n }\n }());\n }\n\n async toArray(): Promise<T[]> {\n const result: T[] = [];\n for await (const value of this.handle) {\n result.push(value);\n }\n return result;\n }\n\n async find(f: (value: T) => MaybePromise<boolean>): Promise<T | undefined> {\n for await (const value of this.handle) {\n if (await f(value)) return value;\n }\n return undefined;\n }\n\n async forEach(f: (value: T) => void): Promise<void> {\n for await (const value of this.handle) {\n f(value);\n }\n }\n\n async reduce<R>(f: (acc: R, value: T) => R, initial: R): Promise<R> {\n let acc = initial;\n for await (const value of this.handle) {\n acc = f(acc, value);\n }\n return acc;\n }\n\n async some(f: (value: T) => MaybePromise<boolean>): Promise<boolean> {\n for await (const value of this.handle) {\n if (await f(value)) return true;\n }\n return false;\n }\n\n async every(f: (value: T) => MaybePromise<boolean>): Promise<boolean> {\n for await (const value of this.handle) {\n if (!(await f(value))) return false;\n }\n return true;\n }\n\n [Symbol.asyncIterator](): AsyncGenerator<T> {\n return this.handle[Symbol.asyncIterator]();\n }\n}\n\nclass AsyncIteratorHandle<T, U> {\n constructor(\n private readonly handle: AsyncGenerator<T> | ArrayLike<MaybePromise<T>>,\n private readonly fn: (value: T) => MaybePromise<Option<U>>,\n private readonly begin: number,\n private readonly length: number,\n readonly parallelLimit: number,\n ) { }\n\n async *[Symbol.asyncIterator](): AsyncGenerator<U> {\n let toSkip = this.begin;\n let toTake = this.length;\n for await (const value of parGen(this.parallelLimit, this.handle)) {\n if (toSkip > 0) {\n toSkip -= 1;\n continue;\n }\n const [id, val] = await this.fn(value);\n if (id === 0) continue;\n if (toTake <= 0) break;\n yield val;\n toTake -= 1;\n }\n }\n\n map<V>(f: (value: U) => MaybePromise<V>): AsyncIteratorHandle<T, V> {\n return new AsyncIteratorHandle(this.handle, async t => {\n const [id, val] = await this.fn(t);\n if (id === 0) return [0, null];\n return [1, await f(val)];\n }, this.begin, this.length, this.parallelLimit);\n }\n\n filter(f: (value: U) => MaybePromise<boolean>): AsyncIteratorHandle<T, U> {\n return new AsyncIteratorHandle(this.handle, async t => {\n const [id, val] = await this.fn(t);\n if (id !== 0 && (await f(val))) return [1, val];\n return [0, null];\n }, this.begin, this.length, this.parallelLimit);\n }\n\n take(n: number): AsyncIteratorHandle<T, U> {\n return new AsyncIteratorHandle(this.handle, this.fn, this.begin, Math.min(n, this.length), this.parallelLimit);\n }\n\n drop(n: number): AsyncIteratorHandle<T, U> {\n const amountToDrop = Math.min(n, this.length);\n return new AsyncIteratorHandle(this.handle, this.fn, this.begin + amountToDrop, this.length - amountToDrop, this.parallelLimit);\n }\n\n parallel(limit: number): AsyncIteratorHandle<T, U> {\n return new AsyncIteratorHandle(this.handle, this.fn, this.begin, this.length, limit);\n }\n}\n\ntype MaybePromise<T> = T | Promise<T>;\ntype Option<T> = [0, null] | [1, T];\n\nasync function* parGen<T>(limit: number, generatorLike: AsyncGenerator<T> | ArrayLike<MaybePromise<T>>): AsyncGenerator<T> {\n const generator = ((): AsyncGenerator<T> => {\n if ('length' in generatorLike) {\n return (async function* () {\n for (const value of Array.from(generatorLike)) {\n yield Promise.resolve(await value);\n }\n })();\n }\n return generatorLike\n })();\n\n const queue: Promise<Option<T>>[] = [];\n while (queue.length < limit) {\n queue.push(generator.next().then((r): Option<T> => r.done ? [0, null] : [1, r.value]));\n }\n\n while (queue.length > 0) {\n const [id, value] = await queue.shift()!;\n if (id === 0) continue;\n yield value;\n queue.push(generator.next().then((r): Option<T> => r.done ? [0, null] : [1, r.value]));\n }\n}\n"],"mappings":"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"} |
+1
-1
| { | ||
| "name": "async-iterator-helpers", | ||
| "version": "1.0.1", | ||
| "version": "1.0.2", | ||
| "description": "Utility functions for working with async iterators", | ||
@@ -5,0 +5,0 @@ "type": "module", |
+0
-2
@@ -1,3 +0,1 @@ | ||
| import { readSync } from "fs"; | ||
| const DEFAULT_PARALLEL_LIMIT = (() => { | ||
@@ -4,0 +2,0 @@ const envLimit = 'process' in globalThis ? Number(globalThis.process.env.ASYNC_ITERATOR_HELPERS_PARALLEL_LIMIT) : NaN; |
Filesystem access
Supply chain riskAccesses the file system, and could potentially read sensitive data.
2
-33.33%24323
-0.28%297
-0.34%