@klodianimeri/pipejs
Version:
Pipe functions that provide convenient and efficient ways to work with iterators.
1 lines • 56.5 kB
Source Map (JSON)
{"version":3,"file":"index.cjs","sources":["../src/sync/pipe-sync.ts","../src/async/pipe-async.ts","../src/util/yield.ts","../src/util/yields.ts","../src/util/done.ts","../src/util/assert-sync.ts","../src/util/push.ts","../src/util/infinity.ts","../src/pipes/at.ts","../src/pipes/drop.ts","../src/pipes/element-at.ts","../src/pipes/find-last-index.ts","../src/pipes/skip.ts","../src/pipes/average.ts","../src/pipes/buffer-count.ts","../src/pipes/concat.ts","../src/pipes/count.ts","../src/pipes/default-if-empty.ts","../src/pipes/difference.ts","../src/pipes/distinct.ts","../src/pipes/distinct-until-changed.ts","../src/pipes/distinct-until-key-changed.ts","../src/pipes/end-with.ts","../src/pipes/entries.ts","../src/pipes/every.ts","../src/pipes/fill.ts","../src/pipes/filter.ts","../src/pipes/find.ts","../src/pipes/find-index.ts","../src/pipes/find-last.ts","../src/pipes/first.ts","../src/pipes/flat.ts","../src/pipes/ignore-elements.ts","../src/pipes/includes.ts","../src/pipes/index-of.ts","../src/pipes/intersection.ts","../src/pipes/is-disjoint-from.ts","../src/pipes/is-empty.ts","../src/pipes/is-subset-of.ts","../src/pipes/is-superset-of.ts","../src/pipes/keys.ts","../src/pipes/last.ts","../src/pipes/last-index-of.ts","../src/pipes/map.ts","../src/pipes/map-to.ts","../src/pipes/max.ts","../src/pipes/min.ts","../src/pipes/pop.ts","../src/pipes/reduce.ts","../src/pipes/reverse.ts","../src/pipes/scan.ts","../src/pipes/size.ts","../src/pipes/skip-last.ts","../src/pipes/slice.ts","../src/pipes/some.ts","../src/pipes/splice.ts","../src/pipes/start-with.ts","../src/pipes/sum.ts","../src/pipes/symmetric-difference.ts","../src/pipes/take.ts","../src/pipes/take-last.ts","../src/pipes/take-while.ts","../src/pipes/to-array.ts","../src/pipes/to-set.ts","../src/pipes/union.ts","../src/pipes/values.ts"],"sourcesContent":["import { Pipe, PipeIterator, PipeIteratorResult } from \"../pipe.js\";\r\n\r\nexport function* pipeSync(source: Iterable<any, any, unknown>, ...pipes: Array<Pipe>): Iterable<any, any, unknown> {\r\n if (!source || typeof source[Symbol.iterator] !== 'function') {\r\n throw new Error(`Source ${source} not a sync iterator!`);\r\n }\r\n\r\n if (!Array.isArray(pipes) || (pipes = pipes.filter(p => typeof p === 'function')).length === 0) {\r\n yield* source;\r\n return;\r\n }\r\n\r\n let pipeIterators: Array<PipeIterator> = new Array<PipeIterator>();\r\n\r\n for (const pipe of pipes) {\r\n pipeIterators.push(pipe());\r\n }\r\n\r\n let iterator = source[Symbol.iterator]();\r\n\r\n let iteratorResult: IteratorResult<any> = iterator.next();\r\n\r\n while (true) {\r\n\r\n let done: boolean | undefined = iteratorResult.done;\r\n\r\n let results: Array<IteratorResult<any>> = new Array<IteratorResult<any>>(iteratorResult);\r\n\r\n for (let i = 0; i < pipeIterators.length; i++) {\r\n let allpipeResults: Array<IteratorResult<any>> = new Array<IteratorResult<any>>();\r\n\r\n for (let j = 0; j < results.length; j++) {\r\n\r\n let piperesult: PipeIteratorResult = pipeIterators[i](results[j]);\r\n\r\n piperesult = Array.isArray(piperesult) ? piperesult : [piperesult];\r\n\r\n for (let e = 0; e < piperesult.length; e++) {\r\n if (typeof piperesult[e] === 'undefined') continue;\r\n\r\n if (i < (pipes.length - 1)) {\r\n allpipeResults.push(piperesult[e]);\r\n continue;\r\n }\r\n\r\n if ((piperesult[e] as IteratorResult<any, any>)?.done) return;\r\n\r\n if (piperesult[e]?.hasOwnProperty('value')) yield (piperesult[e]).value;\r\n }\r\n }\r\n\r\n results = allpipeResults;\r\n }\r\n\r\n if (done) break;\r\n\r\n iteratorResult = iterator.next();\r\n }\r\n}","import { Pipe, PipeIterator, PipeIteratorResult } from \"../pipe.js\";\r\n\r\nexport async function* pipeAsync(source: AsyncIterable<any, any, unknown>, ...pipes: Array<Pipe>): AsyncIterable<any, any, unknown> {\r\n if (!source || typeof source[Symbol.asyncIterator] !== 'function') {\r\n throw new Error(`Source ${source} not an async iterator!`);\r\n }\r\n\r\n if (!Array.isArray(pipes) || pipes.length === 0) {\r\n yield* source;\r\n return;\r\n }\r\n\r\n let pipeIterators: Array<PipeIterator> = new Array<PipeIterator>();\r\n\r\n for (const pipe of pipes) {\r\n pipeIterators.push(pipe());\r\n }\r\n\r\n let iterator = source[Symbol.asyncIterator]();\r\n\r\n let iteratorResult: IteratorResult<any> = await iterator.next();\r\n\r\n while (true) {\r\n\r\n let done: boolean | undefined = iteratorResult.done;\r\n\r\n let results: Array<IteratorResult<any>> = new Array<IteratorResult<any>>(iteratorResult);\r\n\r\n for (let i = 0; i < pipeIterators.length; i++) {\r\n let allpipeResults: Array<IteratorResult<any>> = new Array<IteratorResult<any>>();\r\n\r\n for (let j = 0; j < results.length; j++) {\r\n\r\n let piperesult: PipeIteratorResult = pipeIterators[i](results[j]);\r\n\r\n piperesult = Array.isArray(piperesult) ? piperesult : [piperesult];\r\n\r\n for (let e = 0; e < piperesult.length; e++) {\r\n\r\n if (typeof piperesult[e] === 'undefined') continue;\r\n\r\n if (i < (pipes.length - 1)) {\r\n allpipeResults.push(piperesult[e] as IteratorResult<any, any>);\r\n continue;\r\n }\r\n\r\n if ((piperesult[e] as IteratorResult<any, any>)?.done) return;\r\n\r\n if ('value' in piperesult[e]) yield (piperesult[e] as IteratorResult<any, any>).value;\r\n }\r\n }\r\n\r\n results = allpipeResults;\r\n }\r\n\r\n if (done) break;\r\n\r\n iteratorResult = await iterator.next();\r\n }\r\n}\r\n","export const Yield = (value: any): IteratorYieldResult<any> => { return { value: value, done: false } };","export const Yields = (values: Array<any>): Array<IteratorYieldResult<any>> => {\r\n let yields: Array<IteratorYieldResult<any>> = new Array<IteratorYieldResult<any>>();\r\n for (let i = 0; i < values.length; i++) {\r\n yields[i] = { value: values[i], done: false };\r\n }\r\n return yields;\r\n}","export const Done = (value?: any) => Object({ value: value, done: true });","export const assertSync = (value?: Iterable<any, any, unknown>) => {\r\n if (!value || typeof value[Symbol.iterator] !== 'function') {\r\n throw new Error(`Value not a sync iterator: ${value}`);\r\n }\r\n};","export const push = (array: Array<any>, value: any) => { array.splice(array.length, 0, value); return array; }","export const positiveInfinity = () => Number.POSITIVE_INFINITY;\r\nexport const negativeInfinity = () => Number.NEGATIVE_INFINITY;","import { Pipe } from \"../pipe.js\";\r\nimport { Done } from \"../util/index.js\";\r\n\r\nexport function at(index: number): Pipe {\r\n return () => {\r\n let i: number = -1;\r\n\r\n return (result: IteratorResult<any>): IteratorResult<any> | Array<IteratorResult<any>> => {\r\n ++i;\r\n\r\n if (result?.done) {\r\n return result;\r\n }\r\n\r\n if (i === index) {\r\n return [result, Done()];\r\n }\r\n };\r\n }\r\n}","import { Pipe } from \"../pipe.js\";\r\n\r\nexport function drop(count: number): Pipe {\r\n count = typeof count === 'number' ? count : 0;\r\n return () => {\r\n let i: number = -1;\r\n return (result: IteratorResult<any>): IteratorResult<any> => {\r\n ++i;\r\n if (result?.done) return result;\r\n\r\n if (i >= count) {\r\n return result;\r\n }\r\n };\r\n }\r\n}","import { at } from \"./at.js\";\r\n\r\nexport const elementAt = at;","import { Pipe } from \"../pipe.js\";\r\nimport { Yield } from \"../util/index.js\";\r\n\r\nexport function findLastIndex(predicate: (element: any, index?: number) => boolean, fromIndex?: number): Pipe {\r\n fromIndex = typeof fromIndex === 'number' ? fromIndex : 0;\r\n return () => {\r\n let i: number = -1;\r\n let lastIndex: number = -1;\r\n return (result: IteratorResult<any>): IteratorResult<any> | Array<IteratorResult<any>> => {\r\n ++i;\r\n if (result?.done) {\r\n return [Yield(lastIndex), result];\r\n }\r\n else if (predicate(result.value)) {\r\n lastIndex = i;\r\n }\r\n };\r\n }\r\n}\r\n","import { drop } from \"./drop.js\";\r\n\r\nexport const skip = drop;","import { Pipe } from \"../pipe.js\";\r\nimport { Yield } from \"../util/index.js\";\r\n\r\nexport function average(): Pipe {\r\n return () => {\r\n let count: number = 0;\r\n let sum: number = 0;\r\n return (result: IteratorResult<any>): IteratorResult<any> | Array<IteratorResult<any>> => {\r\n if (result?.done) {\r\n return count === 0 ? result : [Yield(sum / count), result];\r\n }\r\n\r\n if (typeof result.value === 'number') {\r\n ++count;\r\n sum += result.value;\r\n }\r\n };\r\n }\r\n}","import { Pipe } from \"../pipe.js\";\r\nimport { Yield } from \"../util/index.js\";\r\n\r\nexport function bufferCount(count: number, every?: number): Pipe {\r\n return () => {\r\n let buffer: Array<any> = new Array<any>();\r\n count = (typeof count === 'number' && count > 1) ? count : 1;\r\n every = (typeof every === 'number' && every > 1) ? every : count;\r\n\r\n return (result: IteratorResult<any>): IteratorResult<any> | Array<IteratorResult<any>> => {\r\n if (result?.done) {\r\n return buffer.length > 0 ? [Yield(buffer), result] : result;\r\n }\r\n buffer.push(result.value);\r\n if (buffer.length === count) {\r\n result.value = new Array<any>(...buffer);\r\n for (let i = 0; i < every; i++) {\r\n buffer.shift();\r\n }\r\n return result;\r\n }\r\n };\r\n }\r\n}","import { Pipe } from \"../pipe.js\";\r\nimport { assertSync, push, Yields } from \"../util/index.js\";\r\n\r\nexport function concat(source: Iterable<any, any, unknown>): Pipe {\r\n assertSync(source);\r\n\r\n return () => {\r\n return (result: IteratorResult<any>): IteratorResult<any> | Array<IteratorResult<any>> => {\r\n if (result?.done) {\r\n return push(Yields(Array.from(source)), result);\r\n }\r\n\r\n return result;\r\n };\r\n }\r\n}","import { Pipe } from \"../pipe.js\";\r\nimport { Yield } from \"../util/index.js\";\r\n\r\nexport function count(): Pipe {\r\n return () => {\r\n let i: number = -1;\r\n return (result: IteratorResult<any>): Array<IteratorResult<any>> => {\r\n ++i;\r\n if (result?.done) {\r\n return [Yield(i), result];\r\n }\r\n };\r\n }\r\n}","import { Pipe } from \"../pipe.js\";\r\nimport { Yield } from \"../util/index.js\";\r\n\r\nexport function defaultIfEmpty(value: any): Pipe {\r\n return () => {\r\n let isempty: boolean = true;\r\n return (result: IteratorResult<any>): IteratorResult<any> | Array<IteratorResult<any>> => {\r\n if (result?.done) {\r\n if (isempty) {\r\n return [Yield(value), result];\r\n }\r\n } else {\r\n isempty = false;\r\n }\r\n return result;\r\n };\r\n }\r\n}","import { Pipe } from \"../pipe.js\";\r\nimport { assertSync } from \"../util/index.js\";\r\n\r\nexport function difference(source: Iterable<any, any, unknown>): Pipe {\r\n assertSync(source);\r\n\r\n return () => {\r\n let sourceSet: Set<any> = source instanceof Set ? source : new Set<any>(source);\r\n\r\n return (result: IteratorResult<any>): IteratorResult<any> => {\r\n if (result?.done) {\r\n return result;\r\n }\r\n\r\n if (!sourceSet.has(result.value)) {\r\n sourceSet.add(result.value);\r\n return result;\r\n }\r\n };\r\n }\r\n}","import { Pipe } from \"../pipe.js\";\r\n\r\nexport function distinct(keyselector?: (element: any) => any): Pipe {\r\n keyselector = typeof keyselector === 'function' ? keyselector : (e) => e;\r\n\r\n return () => {\r\n let elements: Set<any> = new Set<any>();\r\n\r\n return (result: IteratorResult<any>): IteratorResult<any> => {\r\n if (result?.done) {\r\n return result;\r\n }\r\n\r\n if (!elements.has(keyselector(result.value))) {\r\n elements.add(keyselector(result.value));\r\n return result;\r\n }\r\n };\r\n }\r\n}","import { Pipe } from \"../pipe.js\";\r\n\r\nexport function distinctUntilChanged(comparator?: (previous: any, current: any) => boolean): Pipe {\r\n comparator = typeof comparator === 'function' ? comparator : (a, b) => a === b;\r\n\r\n return () => {\r\n let last: any;\r\n\r\n return (result: IteratorResult<any>): IteratorResult<any> => {\r\n if (result?.done || !comparator(result.value, last)) {\r\n last = result.value;\r\n return result;\r\n }\r\n };\r\n }\r\n}","import { Pipe } from \"../pipe.js\";\r\n\r\nexport function distinctUntilKeyChanged(key: string, comparator?: (previous: any, current: any) => boolean): Pipe {\r\n comparator = typeof comparator === 'function' ? comparator : (a, b) => a === b;\r\n\r\n return () => {\r\n let last: any;\r\n return (result: IteratorResult<any>): IteratorResult<any> => {\r\n if (result?.done || !result.value?.hasOwnProperty(key) || !last?.hasOwnProperty(key) || !comparator(result.value[key], last[key])) {\r\n last = result.value;\r\n return result;\r\n }\r\n };\r\n }\r\n}","import { Pipe } from \"../pipe.js\";\r\nimport { Yields, push } from \"../util/index.js\";\r\n\r\nexport function endWith(...elements: Array<any>): Pipe {\r\n return () => {\r\n return (result: IteratorResult<any>): IteratorResult<any> | Array<IteratorResult<any>> => {\r\n if (result.done) {\r\n return push(Yields(elements), result);\r\n } else {\r\n return result;\r\n }\r\n };\r\n }\r\n}","import { Pipe } from \"../pipe.js\";\r\n\r\nexport function entries(): Pipe {\r\n return () => {\r\n let i: number = -1;\r\n\r\n return (result: IteratorResult<any>): IteratorResult<any> => {\r\n ++i;\r\n if (!result.done && !Array.isArray(result.value)) {\r\n result.value = [i, result.value];\r\n }\r\n return result;\r\n };\r\n }\r\n}","import { Pipe } from \"../pipe.js\";\r\nimport { Yield, Done } from \"../util/index.js\";\r\n\r\nexport function every(predicate: (element: any, index?: number) => boolean): Pipe {\r\n return () => {\r\n let i: number = -1;\r\n\r\n return (result: IteratorResult<any>): Array<IteratorResult<any>> => {\r\n ++i;\r\n if (result?.done) {\r\n return [Yield(true), result];\r\n } else if (!predicate(result.value, i)) {\r\n return [Yield(false), Done()];\r\n }\r\n };\r\n }\r\n}","import { Pipe } from \"../pipe.js\";\r\nimport { positiveInfinity } from \"../util/index.js\";\r\n\r\nexport function fill(value: any, start?: number, end?: number): Pipe {\r\n start = typeof start === 'number' ? start : 0;\r\n end = typeof end === 'number' ? end : positiveInfinity();\r\n return () => {\r\n let i = -1;\r\n return (result: IteratorResult<any>): IteratorResult<any> => {\r\n ++i;\r\n if (!result?.done && i >= start && i < end) {\r\n result.value = value;\r\n }\r\n return result;\r\n };\r\n }\r\n}","import { Pipe } from \"../pipe.js\";\r\n\r\nexport function filter(predicate: (element: any, index?: number) => boolean): Pipe {\r\n return () => {\r\n let i: number = -1;\r\n return (result: IteratorResult<any>): IteratorResult<any> => {\r\n ++i;\r\n\r\n if (result?.done) {\r\n return result;\r\n }\r\n\r\n if (!predicate(result.value, i)) return;\r\n\r\n return result;\r\n };\r\n }\r\n}","import { Pipe } from \"../pipe.js\";\r\nimport { Done } from \"../util/index.js\";\r\n\r\nexport function find(predicate: (element: any, index?: number) => boolean): Pipe {\r\n return () => {\r\n let i: number = -1;\r\n return (result: IteratorResult<any>): IteratorResult<any> | Array<IteratorResult<any>> => {\r\n ++i;\r\n if (result?.done) {\r\n return result;\r\n }\r\n\r\n if (predicate(result.value, i)) {\r\n return [result, Done()];\r\n }\r\n };\r\n }\r\n}","import { Pipe } from \"../pipe.js\";\r\nimport { Yield, Done } from \"../util/index.js\";\r\n\r\nexport function findIndex(predicate: (element: any, index?: number) => boolean, fromIndex?: number): Pipe {\r\n fromIndex = typeof fromIndex === 'number' ? fromIndex : 0;\r\n return () => {\r\n let i: number = -1;\r\n return (result: IteratorResult<any>): IteratorResult<any> | Array<IteratorResult<any>> => {\r\n ++i;\r\n if (result?.done) {\r\n return result;\r\n } else if (i >= fromIndex && predicate(result.value, i)) {\r\n return [Yield(i), Done()];\r\n }\r\n };\r\n }\r\n}","import { Pipe } from \"../pipe.js\";\r\nimport { Yield } from \"../util/index.js\";\r\n\r\nexport function findLast(predicate: (element: any, index?: number) => boolean): Pipe {\r\n return () => {\r\n let i: number = -1;\r\n let last: any;\r\n return (result: IteratorResult<any>): IteratorResult<any> | Array<IteratorResult<any>> => {\r\n ++i;\r\n if (result?.done) {\r\n return typeof last === 'undefined' ? result : [Yield(last), result];\r\n }\r\n if (predicate(result.value, i)) {\r\n last = result.value;\r\n }\r\n };\r\n }\r\n}","import { Pipe } from \"../pipe.js\";\r\nimport { Done } from \"../util/index.js\";\r\n\r\nexport function first(): Pipe {\r\n return () => {\r\n return (result: IteratorResult<any>): IteratorResult<any> | Array<IteratorResult<any>> => {\r\n if (result?.done) {\r\n return result;\r\n }\r\n\r\n return [result, Done()];\r\n };\r\n }\r\n}","import { Pipe } from \"../pipe.js\";\r\nimport { Yields } from \"../util/index.js\";\r\n\r\nexport function flat(depth?: number): Pipe {\r\n depth = (typeof depth === 'number' && depth >= 1) ? depth : 1;\r\n return () => {\r\n return (result: IteratorResult<any>): IteratorResult<any> | Array<IteratorResult<any>> => {\r\n if (result?.done || typeof result.value[Symbol.iterator] !== 'function') {\r\n return result;\r\n }\r\n\r\n return Yields(Array.from(result.value).flat(depth));\r\n };\r\n }\r\n}","import { Pipe } from \"../pipe.js\";\r\n\r\nexport function ignoreElements(): Pipe {\r\n return () => {\r\n return (result: IteratorResult<any>): IteratorResult<any> => {\r\n if (result?.done) {\r\n return result;\r\n }\r\n };\r\n }\r\n}","import { Yield, Done } from \"../util/index.js\";\r\nimport { Pipe } from \"../pipe.js\";\r\n\r\nexport function includes(value: any, fromIndex?: number): Pipe {\r\n fromIndex = typeof fromIndex === 'number' ? fromIndex : 0;\r\n return () => {\r\n let i: number = -1;\r\n\r\n return (result: IteratorResult<any>): Array<IteratorResult<any>> => {\r\n ++i;\r\n if (result?.done) {\r\n return [Yield(false), result];\r\n }\r\n else if (i >= fromIndex && result.value === value) {\r\n return [Yield(true), Done()];\r\n }\r\n };\r\n }\r\n}","import { Pipe } from \"../pipe.js\";\r\nimport { Done, Yield } from \"../util/index.js\";\r\n\r\nexport function indexOf(value: any, fromIndex?: number): Pipe {\r\n fromIndex = typeof fromIndex === 'number' ? fromIndex : 0;\r\n return () => {\r\n let i: number = -1;\r\n return (result: IteratorResult<any>): IteratorResult<any> | Array<IteratorResult<any>> => {\r\n ++i;\r\n if (result?.done) {\r\n return [Yield(-1), result];\r\n }\r\n else if (i >= fromIndex && value === result.value) {\r\n return [Yield(i), Done()];\r\n }\r\n };\r\n }\r\n}","import { Pipe } from \"../pipe.js\";\r\nimport { assertSync } from \"../util/index.js\";\r\n\r\nexport function intersection(source: Iterable<any, any, unknown>): Pipe {\r\n assertSync(source);\r\n\r\n return () => {\r\n let sourceSet: Set<any> = source instanceof Set ? source : new Set<any>(source);\r\n\r\n return (result: IteratorResult<any>): IteratorResult<any> => {\r\n if (result?.done) {\r\n return result;\r\n }\r\n\r\n if (sourceSet.has(result.value)) {\r\n sourceSet.delete(result.value);\r\n return result;\r\n }\r\n };\r\n }\r\n}","import { Pipe } from \"../pipe.js\";\r\nimport { assertSync, Done, Yield } from \"../util/index.js\";\r\n\r\nexport function isDisjointFrom(source: Iterable<any, any, unknown>): Pipe {\r\n assertSync(source);\r\n\r\n return () => {\r\n\r\n let sourceSet: Set<any> = source instanceof Set ? source : new Set<any>(source);\r\n\r\n return (result: IteratorResult<any>): Array<IteratorResult<any>> => {\r\n if (result?.done) {\r\n return [Yield(true), result];\r\n }\r\n\r\n if (sourceSet.has(result.value)) {\r\n return [Yield(false), Done()];\r\n }\r\n };\r\n }\r\n}","import { Pipe } from \"../pipe.js\";\r\nimport { Done, Yield } from \"../util/index.js\";\r\n\r\nexport function isEmpty(): Pipe {\r\n return () => {\r\n return (result: IteratorResult<any>): Array<IteratorResult<any>> => {\r\n return result?.done ? [Yield(true), result] : [Yield(false), Done()];\r\n };\r\n }\r\n}","import { Pipe } from \"../pipe.js\";\r\nimport { assertSync, Done, Yield } from \"../util/index.js\";\r\n\r\nexport function isSubsetOf(source: Iterable<any, any, unknown>): Pipe {\r\n assertSync(source);\r\n\r\n return () => {\r\n let sourceSet: Set<any> = source instanceof Set ? source : new Set<any>(source);\r\n return (result: IteratorResult<any>): Array<IteratorResult<any>> => {\r\n if (result?.done) {\r\n return [Yield(true), result];\r\n }\r\n\r\n if (!sourceSet.has(result.value)) return [Yield(false), Done()];\r\n };\r\n }\r\n}","import { Pipe } from \"../pipe.js\";\r\nimport { assertSync, Yield } from \"../util/index.js\";\r\n\r\nexport function isSupersetOf(source: Iterable<any, any, unknown>): Pipe {\r\n assertSync(source);\r\n\r\n return () => {\r\n let sourceSet: Set<any> = source instanceof Set ? source : new Set<any>(source);\r\n\r\n let found: number = 0;\r\n\r\n return (result: IteratorResult<any>): Array<IteratorResult<any>> => {\r\n if (result?.done) {\r\n return found === sourceSet.size ? [Yield(true), result] : [Yield(false), result];\r\n }\r\n\r\n if (sourceSet.has(result.value)) {\r\n ++found;\r\n }\r\n };\r\n }\r\n}","import { Pipe } from \"../pipe.js\";\r\n\r\nexport function keys(): Pipe {\r\n return () => {\r\n let i: number = -1;\r\n return (result: IteratorResult<any>): IteratorResult<any> => {\r\n ++i;\r\n if (!result?.done) {\r\n if (Array.isArray(result.value) && result.value.length == 2) {\r\n result.value = result.value[0];\r\n } else {\r\n result.value = i;\r\n }\r\n }\r\n return result;\r\n };\r\n }\r\n}","import { Pipe } from \"../pipe.js\";\r\nimport { Yield } from \"../util/index.js\";\r\n\r\nexport function last(): Pipe {\r\n return () => {\r\n let i: number = -1;\r\n let last: any;\r\n return (result: IteratorResult<any>): IteratorResult<any> | Array<IteratorResult<any>> => {\r\n ++i;\r\n if (result?.done) {\r\n return i === 0 ? result : [Yield(last), result];\r\n }\r\n last = result.value;\r\n };\r\n }\r\n}","import { findLastIndex } from \"./find-last-index.js\";\r\n\r\nexport const lastIndexOf = (value: any, fromIndex?: number) => findLastIndex((element) => element === value, fromIndex);","import { Pipe } from \"../pipe.js\";\r\n\r\nexport function map(callbackFn: (element: any, index?: number) => any): Pipe {\r\n callbackFn = typeof callbackFn === 'function' ? callbackFn : (e) => e;\r\n\r\n return () => {\r\n let i: number = -1;\r\n return (result: IteratorResult<any>): IteratorResult<any> => {\r\n ++i;\r\n if (result?.done) {\r\n return result;\r\n }\r\n\r\n result.value = callbackFn(result.value, i);\r\n return result;\r\n };\r\n }\r\n}","import { Pipe } from \"../pipe.js\";\r\n\r\nexport function mapTo(value: any): Pipe {\r\n return () => {\r\n return (result: IteratorResult<any>): IteratorResult<any> => {\r\n result.value = value;\r\n return result;\r\n };\r\n }\r\n}","import { Pipe } from \"../pipe.js\";\r\nimport { Yield, negativeInfinity } from \"../util/index.js\";\r\n\r\nexport function max(): Pipe {\r\n return () => {\r\n let max: number = negativeInfinity();\r\n\r\n return (result: IteratorResult<any>): IteratorResult<any> | Array<IteratorResult<any>> => {\r\n if (result?.done) {\r\n return max === negativeInfinity() ? result : [Yield(max), result];\r\n } else if (typeof result.value === 'number' && result.value > max) {\r\n max = result.value;\r\n }\r\n };\r\n }\r\n}","import { Pipe } from \"../pipe.js\";\r\nimport { Yield, positiveInfinity } from \"../util/index.js\";\r\n\r\nexport function min(): Pipe {\r\n return () => {\r\n let min: number = positiveInfinity();\r\n return (result: IteratorResult<any>): IteratorResult<any> | Array<IteratorResult<any>> => {\r\n if (result?.done) {\r\n return min === positiveInfinity() ? result : [Yield(min), result];\r\n } else if (typeof result.value === 'number' && result.value < min) {\r\n min = result.value;\r\n }\r\n };\r\n }\r\n}","import { Pipe } from \"../pipe.js\";\r\n\r\nexport function pop(): Pipe {\r\n return () => {\r\n let last: any;\r\n return (result: IteratorResult<any>): IteratorResult<any> => {\r\n if (result?.done) {\r\n return result;\r\n }\r\n let lastResult = last;\r\n last = result;\r\n if (typeof last !== \"undefined\") {\r\n return lastResult;\r\n }\r\n };\r\n }\r\n}","import { Pipe } from \"../pipe.js\";\r\nimport { Yield } from \"../util/index.js\";\r\n\r\nexport function reduce(accumulator: (accumulator: any, currentValue: any, index?: number) => any, initialValue?: any): Pipe {\r\n return () => {\r\n let i: number = -1;\r\n let value: any;\r\n return (result: IteratorResult<any>): Array<IteratorResult<any>> => {\r\n ++i;\r\n if (i === 0) {\r\n value = initialValue ?? result.value;\r\n }\r\n if (result?.done) {\r\n return [Yield(value), result];\r\n }\r\n\r\n value = accumulator(value, result.value, i);\r\n };\r\n }\r\n}","import { Pipe } from \"../pipe.js\";\r\n\r\nexport function reverse(): Pipe {\r\n return () => {\r\n let buffer: Array<any> = new Array<any>();\r\n return (result: IteratorResult<any>): Array<IteratorResult<any>> => {\r\n if (result?.done) {\r\n return [...buffer, result];\r\n }\r\n buffer.unshift(result);\r\n };\r\n }\r\n}","import { Pipe } from \"../pipe.js\";\r\n\r\nexport function scan(accumulator: (accumulator: any, currentValue: any, index?: number) => any, initialValue?: any): Pipe {\r\n return () => {\r\n let i: number = -1;\r\n let value: any;\r\n return (result: IteratorResult<any>): IteratorResult<any> => {\r\n ++i;\r\n if (i === 0) {\r\n value = initialValue ?? result.value;\r\n }\r\n\r\n if (!result?.done) {\r\n result.value = value = accumulator(value, result.value, i);\r\n }\r\n\r\n return result;\r\n };\r\n }\r\n}","import { Pipe } from \"../pipe.js\";\r\nimport { Yield } from \"../util/yield.js\";\r\n\r\nexport function size(): Pipe {\r\n return () => {\r\n let i: number = -1;\r\n\r\n return (result: IteratorResult<any>): Array<IteratorResult<any>> => {\r\n ++i;\r\n if (result?.done) {\r\n return [Yield(i), result];\r\n }\r\n };\r\n }\r\n}","import { Pipe } from \"../pipe.js\";\r\nimport { negativeInfinity } from \"../util/index.js\";\r\n\r\nexport function skipLast(count: number): Pipe {\r\n count = (typeof count === \"number\" && count > 0) ? count : negativeInfinity();\r\n return () => {\r\n let items: Array<any> = new Array<any>();\r\n return (result: IteratorResult<any>): IteratorResult<any> => {\r\n items.push(result);\r\n\r\n if (result.done) {\r\n return result;\r\n } else if (items.length > count) {\r\n return items.shift();\r\n }\r\n };\r\n }\r\n}","import { Pipe } from \"../pipe.js\";\r\nimport { Done } from \"../util/done.js\";\r\n\r\nexport function slice(start: number, end?: number): Pipe {\r\n start = (typeof start === 'number' && start >= 0) ? start : 0;\r\n end = (typeof end === 'number' && end > start) ? end : Infinity;\r\n return () => {\r\n let i: number = -1;\r\n return (result: IteratorResult<any>): IteratorResult<any> => {\r\n ++i;\r\n if (result?.done) {\r\n return result;\r\n }\r\n\r\n if (i >= start && i < end) {\r\n return result;\r\n } else if (i === end) {\r\n return Done();\r\n }\r\n };\r\n }\r\n}","import { Pipe } from \"../pipe.js\";\r\nimport { Yield, Done } from \"../util/index.js\";\r\n\r\nexport function some(predicate: (element: any, index?: number) => boolean): Pipe {\r\n return () => {\r\n return (result: IteratorResult<any>): Array<IteratorResult<any>> => {\r\n if (result?.done) {\r\n return [Yield(false), result];\r\n } else if (predicate(result.value)) {\r\n return [Yield(true), Done()];\r\n }\r\n };\r\n }\r\n}","import { Pipe } from \"../pipe.js\";\r\nimport { Yields } from \"../util/yields.js\";\r\n\r\nexport function splice(start: number, deleteCount: number, ...elements: Array<any>): Pipe {\r\n start = (typeof start === 'number' && start >= 0) ? start : 0;\r\n deleteCount = (typeof deleteCount === 'number' && deleteCount >= 0) ? deleteCount : 0;\r\n return () => {\r\n let i: number = -1;\r\n return (result: IteratorResult<any>): IteratorResult<any> | Array<IteratorResult<any>> => {\r\n ++i;\r\n if (i < start || i >= (start + deleteCount)) {\r\n return result;\r\n } else if (i === start && Array.isArray(elements)) {\r\n return Yields(elements);\r\n }\r\n };\r\n }\r\n}","import { Pipe } from \"../pipe.js\";\r\nimport { Yields, push } from \"../util/index.js\";\r\n\r\nexport function startWith(...elements: Array<any>): Pipe {\r\n return () => {\r\n let sent: boolean = false;\r\n return (result: IteratorResult<any>): IteratorResult<any> | Array<IteratorResult<any>> => {\r\n if (!sent) {\r\n sent = true;\r\n return push(Yields(elements), result);\r\n }\r\n\r\n return result;\r\n };\r\n }\r\n}","import { Pipe } from \"../pipe.js\";\r\nimport { Yield } from \"../util/index.js\";\r\n\r\nexport function sum(): Pipe {\r\n return () => {\r\n let sum: number = 0;\r\n return (result: IteratorResult<any>): Array<IteratorResult<any>> => {\r\n if (result?.done) {\r\n return [Yield(sum), result];\r\n }\r\n if (typeof result.value === 'number') {\r\n sum += result.value;\r\n }\r\n };\r\n }\r\n}","import { Pipe } from \"../pipe.js\";\r\nimport { assertSync, Yields, push } from \"../util/index.js\";\r\n\r\nexport function symmetricDifference(source: Iterable<any, any, unknown>): Pipe {\r\n assertSync(source);\r\n\r\n let exists: Set<any> = new Set<any>();\r\n\r\n return () => (result: IteratorResult<any>): IteratorResult<any> | Array<IteratorResult<any>> => {\r\n if (result?.done) {\r\n let results: Array<any> = new Array<any>();\r\n for (const item of source) {\r\n if (!exists.has(item)) {\r\n exists.add(item);\r\n results.push(item);\r\n }\r\n }\r\n return push(Yields(results), result);\r\n }\r\n\r\n if (!exists.has(result.value)) {\r\n exists.add(result.value);\r\n return result;\r\n }\r\n };\r\n}","import { Pipe } from \"../pipe.js\";\r\nimport { Done, positiveInfinity } from \"../util/index.js\";\r\n\r\nexport function take(count: number): Pipe {\r\n count = (typeof count === \"number\" && count > 0) ? count : positiveInfinity();\r\n return () => {\r\n var i: number = -1;\r\n return (result: IteratorResult<any>): IteratorResult<any> => {\r\n ++i;\r\n if (i >= count) {\r\n return Done();\r\n }\r\n return result;\r\n };\r\n }\r\n}","import { Pipe } from \"../pipe.js\";\r\nimport { Yields, push, positiveInfinity } from \"../util/index.js\";\r\n\r\nexport function takeLast(count: number): Pipe {\r\n count = (typeof count === \"number\" && count > 0) ? count : positiveInfinity();\r\n\r\n return () => {\r\n let last: Array<any> = new Array<any>();\r\n return (result: IteratorResult<any>): IteratorResult<any> | Array<IteratorResult<any>> => {\r\n if (result?.done) {\r\n return push(Yields(last), result);\r\n }\r\n\r\n if (last.length === count) {\r\n last.shift();\r\n }\r\n\r\n last.push(result.value);\r\n };\r\n }\r\n}","import { Pipe } from \"../pipe.js\";\r\nimport { Done } from \"../util/index.js\";\r\n\r\nexport function takeWhile(predicate: (element: any, inclusive?: number) => boolean, inclusive?: boolean): Pipe {\r\n inclusive = typeof inclusive === 'boolean' ? inclusive : false;\r\n\r\n return () => {\r\n var i: number = -1;\r\n return (result: IteratorResult<any>): IteratorResult<any> | Array<IteratorResult<any>> => {\r\n ++i;\r\n\r\n if (result?.done) {\r\n return result;\r\n }\r\n\r\n if (!predicate(result.value, i)) {\r\n if (inclusive) {\r\n return [result, Done()]\r\n }\r\n\r\n return Done();\r\n }\r\n\r\n return result;\r\n };\r\n }\r\n}","import { Pipe } from \"../pipe.js\";\r\nimport { Yield } from \"../util/index.js\";\r\n\r\nexport function toArray(): Pipe {\r\n return () => {\r\n let buffer: Array<any> = new Array<any>();\r\n var i: number = -1;\r\n\r\n return (result: IteratorResult<any>): IteratorResult<any> | Array<IteratorResult<any>> => {\r\n ++i;\r\n if (result?.done) {\r\n return [Yield(buffer), result];\r\n }\r\n\r\n buffer.push(result.value);\r\n };\r\n }\r\n}","import { Pipe } from \"../pipe.js\";\r\nimport { Yield } from \"../util/index.js\";\r\n\r\nexport function toSet(): Pipe {\r\n return () => {\r\n let buffer: Set<any> = new Set<any>();\r\n return (result: IteratorResult<any>): IteratorResult<any> | Array<IteratorResult<any>> => {\r\n if (result?.done) {\r\n return [Yield(buffer), result];\r\n }\r\n\r\n buffer.add(result.value);\r\n };\r\n }\r\n}","import { Pipe } from \"../pipe.js\";\r\nimport { assertSync, push, Yields } from \"../util/index.js\";\r\n\r\nexport function union(source: Iterable<any, any, unknown>): Pipe {\r\n assertSync(source);\r\n\r\n return () => {\r\n let exists: Set<any> = new Set<any>();\r\n return (result: IteratorResult<any>): IteratorResult<any> | Array<IteratorResult<any>> => {\r\n if (result?.done) {\r\n let results: Array<any> = new Array<any>();\r\n\r\n for (const item of source) {\r\n if (!exists.has(item)) {\r\n exists.add(item);\r\n results.push(item);\r\n }\r\n }\r\n\r\n return push(Yields(results), result);\r\n }\r\n\r\n if (!exists.has(result.value)) {\r\n exists.add(result.value);\r\n return result;\r\n }\r\n };\r\n }\r\n}","import { Pipe } from \"../pipe.js\";\r\n\r\nexport function values(): Pipe {\r\n return () => {\r\n return (result: IteratorResult<any>): IteratorResult<any> => {\r\n if (!result.done) {\r\n if (Array.isArray(result.value) && result.value.length == 2)\r\n result.value = result.value[1];\r\n }\r\n return result;\r\n };\r\n }\r\n}"],"names":["pipeSync","source","pipes","pipeIterators","_iterator","_step","iterator","iteratorResult","done","results","i","allpipeResults","j","piperesult","e","_piperesult$e","_piperesult$e2","_args","arguments","_regenerator","w","_context","n","slice","call","Symbol","Error","Array","isArray","filter","p","length","d","_regeneratorValues","a","_createForOfIteratorHelperLoose","push","pipe","value","next","hasOwnProperty","_marked","_pipeAsync","m","_callee","asyncIterator","_asyncGeneratorDelegate","_asyncIterator","_awaitAsyncGenerator","v","apply","this","Yield","Yields","values","yields","Done","Object","assertSync","array","splice","positiveInfinity","Number","POSITIVE_INFINITY","negativeInfinity","NEGATIVE_INFINITY","at","index","result","drop","count","elementAt","findLastIndex","predicate","fromIndex","lastIndex","skip","sum","every","buffer","_construct","shift","from","isempty","sourceSet","Set","has","add","keyselector","elements","comparator","b","last","key","_result$value","_last","_arguments","start","end","depth","flat","found","size","element","callbackFn","max","min","_x","lastResult","accumulator","initialValue","concat","unshift","items","Infinity","deleteCount","sent","exists","item","inclusive"],"mappings":"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