UNPKG

@klodianimeri/pipejs

Version:

Pipe functions that provide convenient and efficient ways to work with iterators.

1 lines 56.4 kB
{"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/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; }","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 if (result?.done) {\r\n return result;\r\n }\r\n\r\n ++i;\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) ? count : 0;\r\n return () => {\r\n let i: number = -1;\r\n return (result: IteratorResult<any>): IteratorResult<any> => {\r\n if (result?.done) {\r\n return result;\r\n }\r\n\r\n ++i;\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 if (result?.done) {\r\n return [Yield(lastIndex), result];\r\n }\r\n\r\n ++i;\r\n\r\n if (i >= fromIndex && predicate(result.value, i)) {\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 buffer.splice(0, every);\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 lastValue: any;\r\n\r\n return (result: IteratorResult<any>): IteratorResult<any> => {\r\n if (result?.done || !comparator(lastValue, result.value)) {\r\n lastValue = 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 lastValue: any;\r\n return (result: IteratorResult<any>): IteratorResult<any> => {\r\n if (result?.done || !result.value?.hasOwnProperty(key) || !lastValue?.hasOwnProperty(key) || !comparator(lastValue[key], result.value[key])) {\r\n lastValue = 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\r\n if (result?.done) {\r\n return result;\r\n }\r\n\r\n ++i;\r\n\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 if (result?.done) {\r\n return [Yield(true), result];\r\n }\r\n\r\n ++i;\r\n\r\n 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\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 : Infinity;\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\r\n if (result?.done) {\r\n return result;\r\n }\r\n\r\n ++i;\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 if (result?.done) {\r\n return result;\r\n }\r\n\r\n ++i;\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 if (result?.done) {\r\n return result;\r\n }\r\n\r\n ++i;\r\n\r\n 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 if (result?.done) {\r\n return typeof last === 'undefined' ? result : [Yield(last), result];\r\n }\r\n ++i;\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 if (result?.done) {\r\n return [Yield(false), result];\r\n }\r\n\r\n ++i;\r\n\r\n 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 if (result?.done) {\r\n return [Yield(-1), result];\r\n }\r\n\r\n ++i;\r\n\r\n 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 if (result?.done) {\r\n return result;\r\n }\r\n\r\n ++i;\r\n\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 } from \"../util/index.js\";\r\n\r\nexport function max(): Pipe {\r\n return () => {\r\n let max: number = -Infinity;\r\n\r\n return (result: IteratorResult<any>): IteratorResult<any> | Array<IteratorResult<any>> => {\r\n if (result?.done) {\r\n return max === (-Infinity) ? result : [Yield(max), result];\r\n }\r\n\r\n if (typeof result.value === 'number' && !isNaN(result.value) && result.value > max) {\r\n max = 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 min(): Pipe {\r\n return () => {\r\n let min: number = Infinity;\r\n return (result: IteratorResult<any>): IteratorResult<any> | Array<IteratorResult<any>> => {\r\n if (result?.done) {\r\n return min === Infinity ? result : [Yield(min), result];\r\n }\r\n\r\n if (typeof result.value === 'number' && !isNaN(result.value) && 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\r\n if (result?.done) {\r\n return result;\r\n }\r\n\r\n ++i;\r\n\r\n if (i === 0) {\r\n value = initialValue ?? result.value;\r\n }\r\n\r\n result.value = value = accumulator(value, result.value, i);\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\n\r\nexport function skipLast(count: number): Pipe {\r\n count = (typeof count === \"number\" && count > 0) ? count : 0;\r\n return () => {\r\n let items: Array<any> = new Array<any>();\r\n return (result: IteratorResult<any>): IteratorResult<any> => {\r\n if (result?.done) {\r\n return result;\r\n }\r\n\r\n items.push(result);\r\n\r\n 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 let i = -1;\r\n return (result: IteratorResult<any>): any => {\r\n if (result?.done) {\r\n return [Yield(false), result];\r\n }\r\n\r\n i++;\r\n\r\n if (predicate(result.value, i)) {\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' && !isNaN(result.value)) {\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 } from \"../util/index.js\";\r\n\r\nexport function take(count: number): Pipe {\r\n count = (typeof count === \"number\" && count > 0) ? count : Infinity;\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 } from \"../util/index.js\";\r\n\r\nexport function takeLast(count: number): Pipe {\r\n count = (typeof count === \"number\" && count > 0) ? count : 0;\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, index?: 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","at","index","result","drop","count","elementAt","findLastIndex","predicate","fromIndex","lastIndex","skip","sum","every","buffer","_construct","from","isempty","sourceSet","Set","has","add","keyselector","elements","comparator","b","lastValue","key","_result$value","_lastValue","_arguments","start","end","Infinity","last","depth","flat","found","size","element","callbackFn","max","isNaN","min","_x","lastResult","accumulator","initialValue","concat","unshift","items","shift","deleteCount","sent","exists","item","inclusive"],"mappings":"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