@sapphire/iterator-utilities 2.0.2-next.44fccf00 → 2.1.0-next.014a7928
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/index.cjs +7 -0
- package/dist/cjs/index.d.cts +1 -0
- package/dist/cjs/lib/compact.cjs +1 -1
- package/dist/cjs/lib/compact.cjs.map +1 -1
- package/dist/cjs/lib/compareBy.cjs.map +1 -1
- package/dist/cjs/lib/empty.cjs +1 -1
- package/dist/cjs/lib/empty.cjs.map +1 -1
- package/dist/cjs/lib/findIndex.cjs.map +1 -1
- package/dist/cjs/lib/fuse.cjs +1 -1
- package/dist/cjs/lib/fuse.cjs.map +1 -1
- package/dist/cjs/lib/indexOf.cjs.map +1 -1
- package/dist/cjs/lib/intersperse.cjs +1 -1
- package/dist/cjs/lib/intersperse.cjs.map +1 -1
- package/dist/cjs/lib/peekable.cjs +1 -1
- package/dist/cjs/lib/peekable.cjs.map +1 -1
- package/dist/cjs/lib/range.cjs +1 -1
- package/dist/cjs/lib/range.cjs.map +1 -1
- package/dist/cjs/lib/repeat.cjs +1 -1
- package/dist/cjs/lib/repeat.cjs.map +1 -1
- package/dist/cjs/lib/shared/_compare.cjs.map +1 -1
- package/dist/cjs/lib/slice.cjs +1 -1
- package/dist/cjs/lib/slice.cjs.map +1 -1
- package/dist/cjs/lib/stepBy.cjs +1 -1
- package/dist/cjs/lib/stepBy.cjs.map +1 -1
- package/dist/cjs/lib/take.cjs +1 -1
- package/dist/cjs/lib/take.cjs.map +1 -1
- package/dist/cjs/lib/takeLast.cjs +1 -1
- package/dist/cjs/lib/takeLast.cjs.map +1 -1
- package/dist/cjs/lib/tee.cjs +1 -1
- package/dist/cjs/lib/tee.cjs.map +1 -1
- package/dist/cjs/lib/windows.cjs +29 -0
- package/dist/cjs/lib/windows.cjs.map +1 -0
- package/dist/cjs/lib/windows.d.cts +21 -0
- package/dist/esm/index.d.mts +1 -0
- package/dist/esm/index.mjs +1 -0
- package/dist/esm/lib/compact.mjs +1 -1
- package/dist/esm/lib/compact.mjs.map +1 -1
- package/dist/esm/lib/compareBy.mjs.map +1 -1
- package/dist/esm/lib/empty.mjs +1 -1
- package/dist/esm/lib/empty.mjs.map +1 -1
- package/dist/esm/lib/findIndex.mjs.map +1 -1
- package/dist/esm/lib/fuse.mjs +1 -1
- package/dist/esm/lib/fuse.mjs.map +1 -1
- package/dist/esm/lib/indexOf.mjs.map +1 -1
- package/dist/esm/lib/intersperse.mjs +1 -1
- package/dist/esm/lib/intersperse.mjs.map +1 -1
- package/dist/esm/lib/peekable.mjs +1 -1
- package/dist/esm/lib/peekable.mjs.map +1 -1
- package/dist/esm/lib/range.mjs +1 -1
- package/dist/esm/lib/range.mjs.map +1 -1
- package/dist/esm/lib/repeat.mjs +1 -1
- package/dist/esm/lib/repeat.mjs.map +1 -1
- package/dist/esm/lib/shared/_compare.mjs.map +1 -1
- package/dist/esm/lib/slice.mjs +1 -1
- package/dist/esm/lib/slice.mjs.map +1 -1
- package/dist/esm/lib/stepBy.mjs +1 -1
- package/dist/esm/lib/stepBy.mjs.map +1 -1
- package/dist/esm/lib/take.mjs +1 -1
- package/dist/esm/lib/take.mjs.map +1 -1
- package/dist/esm/lib/takeLast.mjs +1 -1
- package/dist/esm/lib/takeLast.mjs.map +1 -1
- package/dist/esm/lib/tee.mjs +1 -1
- package/dist/esm/lib/tee.mjs.map +1 -1
- package/dist/esm/lib/windows.d.mts +21 -0
- package/dist/esm/lib/windows.mjs +26 -0
- package/dist/esm/lib/windows.mjs.map +1 -0
- package/dist/iife/index.global.js +31 -12
- package/dist/iife/index.global.js.map +1 -1
- package/package.json +16 -6
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/lib/intersperse.ts"],"names":[],"mappings":";;;;AA4BO,SAAS,WAAA,CAA+B,UAA2C,SAAuD,EAAA;AAChJ,EAAA,IAAI,OAAU,GAAA,KAAA;AACd,EAAI,IAAA,QAAA;AACJ,EAAA,IAAI,aAAgB,GAAA,KAAA;AAEpB,EAAM,MAAA,QAAA,GAAW,KAAK,QAAQ,CAAA;AAC9B,EAAA,OAAO,qBAAkC,MAAM;AAC9C,IAAA,IAAI,OAAS,EAAA;AACZ,MAAA,IAAI,aAAe,EAAA;AAClB,QAAgB,aAAA,GAAA,KAAA;AAChB,QAAA,OAAO,EAAE,IAAA,EAAM,KAAO,EAAA,KAAA,EAAO,QAAS,EAAA;AAAA;AAGvC,MAAM,MAAA,MAAA,GAAS,SAAS,IAAK,EAAA;AAC7B,MAAA,IAAI,OAAO,IAAM,EAAA;AAChB,QAAA,OAAO,EAAE,IAAA,EAAM,IAAM,EAAA,KAAA,EAAO,
|
|
1
|
+
{"version":3,"sources":["../../../src/lib/intersperse.ts"],"names":[],"mappings":";;;;AA4BO,SAAS,WAAA,CAA+B,UAA2C,SAAuD,EAAA;AAChJ,EAAA,IAAI,OAAU,GAAA,KAAA;AACd,EAAI,IAAA,QAAA;AACJ,EAAA,IAAI,aAAgB,GAAA,KAAA;AAEpB,EAAM,MAAA,QAAA,GAAW,KAAK,QAAQ,CAAA;AAC9B,EAAA,OAAO,qBAAkC,MAAM;AAC9C,IAAA,IAAI,OAAS,EAAA;AACZ,MAAA,IAAI,aAAe,EAAA;AAClB,QAAgB,aAAA,GAAA,KAAA;AAChB,QAAA,OAAO,EAAE,IAAA,EAAM,KAAO,EAAA,KAAA,EAAO,QAAS,EAAA;AAAA;AAGvC,MAAM,MAAA,MAAA,GAAS,SAAS,IAAK,EAAA;AAC7B,MAAA,IAAI,OAAO,IAAM,EAAA;AAChB,QAAA,OAAO,EAAE,IAAA,EAAM,IAAM,EAAA,KAAA,EAAO,SAAU,EAAA;AAAA;AAGvC,MAAA,QAAA,GAAW,MAAO,CAAA,KAAA;AAClB,MAAgB,aAAA,GAAA,IAAA;AAChB,MAAA,OAAO,EAAE,IAAA,EAAM,KAAO,EAAA,KAAA,EAAO,SAAU,EAAA;AAAA;AAGxC,IAAU,OAAA,GAAA,IAAA;AACV,IAAA,OAAO,SAAS,IAAK,EAAA;AAAA,GACrB,CAAA;AACF;AA1BgB,MAAA,CAAA,WAAA,EAAA,aAAA,CAAA","file":"intersperse.mjs","sourcesContent":["import { from, type IterableResolvable } from './from';\nimport { makeIterableIterator } from './shared/_makeIterableIterator';\n\n/**\n * Creates a new iterator which places `separator` between adjacent items of the original iterator.\n *\n * @param iterable An iterator to map over.\n * @param separator The separator to place between adjacent items.\n *\n * @example\n * ```typescript\n * import { intersperse } from '@sapphire/iterator-utilities';\n *\n * const iterable = [0, 1, 2];\n * console.log([...intersperse(iterable, 100)]);\n * // Output: [0, 100, 1, 100, 2]\n * ```\n *\n * @example\n * `intersperse` can be very useful to join an iterator's items using a common element:\n * ```typescript\n * import { intersperse } from '@sapphire/iterator-utilities';\n *\n * const iterable = ['Hello', 'World', '!'];\n * console.log([...intersperse(iterable, ', ')].join(''));\n * // Output: 'Hello, World, !'\n * ```\n */\nexport function intersperse<const ElementType>(iterable: IterableResolvable<ElementType>, separator: ElementType): IterableIterator<ElementType> {\n\tlet started = false;\n\tlet nextItem: ElementType;\n\tlet nextItemTaken = false;\n\n\tconst iterator = from(iterable);\n\treturn makeIterableIterator<ElementType>(() => {\n\t\tif (started) {\n\t\t\tif (nextItemTaken) {\n\t\t\t\tnextItemTaken = false;\n\t\t\t\treturn { done: false, value: nextItem };\n\t\t\t}\n\n\t\t\tconst result = iterator.next();\n\t\t\tif (result.done) {\n\t\t\t\treturn { done: true, value: undefined };\n\t\t\t}\n\n\t\t\tnextItem = result.value;\n\t\t\tnextItemTaken = true;\n\t\t\treturn { done: false, value: separator };\n\t\t}\n\n\t\tstarted = true;\n\t\treturn iterator.next();\n\t});\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/lib/peekable.ts"],"names":[],"mappings":";;;AA6BO,SAAS,SAA4B,QAAkE,EAAA;AAC7G,EAAM,MAAA,gBAAA,GAAmB,KAAK,QAAQ,CAAA;AACtC,EAAI,IAAA,MAAA;AACJ,EAAO,OAAA;AAAA,IACN,IAAO,GAAA;AACN,MAAA,IAAI,MAAQ,EAAA;AACX,QAAA,MAAM,KAAQ,GAAA,MAAA;AACd,QAAS,MAAA,GAAA,
|
|
1
|
+
{"version":3,"sources":["../../../src/lib/peekable.ts"],"names":[],"mappings":";;;AA6BO,SAAS,SAA4B,QAAkE,EAAA;AAC7G,EAAM,MAAA,gBAAA,GAAmB,KAAK,QAAQ,CAAA;AACtC,EAAI,IAAA,MAAA;AACJ,EAAO,OAAA;AAAA,IACN,IAAO,GAAA;AACN,MAAA,IAAI,MAAQ,EAAA;AACX,QAAA,MAAM,KAAQ,GAAA,MAAA;AACd,QAAS,MAAA,GAAA,SAAA;AACT,QAAO,OAAA,KAAA;AAAA;AAGR,MAAA,OAAO,iBAAiB,IAAK,EAAA;AAAA,KAC9B;AAAA,IACA,IAAO,GAAA;AACN,MAAQ,OAAA,MAAA,KAAW,iBAAiB,IAAK,EAAA;AAAA,KAC1C;AAAA,IACA,CAAC,MAAO,CAAA,QAAQ,CAAI,GAAA;AACnB,MAAO,OAAA,IAAA;AAAA;AACR,GACD;AACD;AApBgB,MAAA,CAAA,QAAA,EAAA,UAAA,CAAA","file":"peekable.mjs","sourcesContent":["import { from, type IterableResolvable } from './from';\n\n/**\n * Creates an iterator that allows you to peek at the next element without advancing the iterator.\n *\n * @template ElementType The type of elements in the iterable.\n * @param iterable The iterable to create a peekable iterator from.\n * @returns A new peekable iterator.\n *\n * @example\n * ```typescript\n * import { peekable } from '@sapphire/iterator-utilities';\n *\n * const iterable = [1, 2, 3, 4, 5];\n * const peekableIterator = peekable(iterable);\n *\n * console.log(peekableIterator.next());\n * // Output: { value: 1, done: false }\n *\n * console.log(peekableIterator.peek());\n * // Output: { value: 2, done: false }\n *\n * console.log(peekableIterator.next());\n * // Output: { value: 2, done: false }\n *\n * console.log(peekableIterator.next());\n * // Output: { value: 3, done: false }\n * ```\n */\nexport function peekable<const ElementType>(iterable: IterableResolvable<ElementType>): Peekable<ElementType> {\n\tconst resolvedIterable = from(iterable);\n\tlet peeked: IteratorResult<ElementType> | undefined;\n\treturn {\n\t\tnext() {\n\t\t\tif (peeked) {\n\t\t\t\tconst value = peeked;\n\t\t\t\tpeeked = undefined;\n\t\t\t\treturn value;\n\t\t\t}\n\n\t\t\treturn resolvedIterable.next();\n\t\t},\n\t\tpeek() {\n\t\t\treturn (peeked ??= resolvedIterable.next());\n\t\t},\n\t\t[Symbol.iterator]() {\n\t\t\treturn this as IterableIterator<ElementType>;\n\t\t}\n\t};\n}\n\nexport interface Peekable<T> extends IterableIterator<T> {\n\tpeek(): IteratorResult<T>;\n}\n"]}
|
package/dist/esm/lib/range.mjs
CHANGED
|
@@ -4,7 +4,7 @@ import { toNumberOrThrow } from './shared/_toNumberOrThrow.mjs';
|
|
|
4
4
|
function* range(start, end, step) {
|
|
5
5
|
start = toNumberOrThrow(start);
|
|
6
6
|
end = toNumberOrThrow(end);
|
|
7
|
-
if (step ===
|
|
7
|
+
if (step === undefined) {
|
|
8
8
|
step = start < end ? 1 : -1;
|
|
9
9
|
} else {
|
|
10
10
|
step = toNumberOrThrow(step);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/lib/range.ts"],"names":[],"mappings":";;;AAgCO,UAAU,KAAA,CAAM,KAAe,EAAA,GAAA,EAAa,IAAqD,EAAA;AACvG,EAAA,KAAA,GAAQ,gBAAgB,KAAK,CAAA;AAC7B,EAAA,GAAA,GAAM,gBAAgB,GAAG,CAAA;AAEzB,EAAA,IAAI,SAAS,
|
|
1
|
+
{"version":3,"sources":["../../../src/lib/range.ts"],"names":[],"mappings":";;;AAgCO,UAAU,KAAA,CAAM,KAAe,EAAA,GAAA,EAAa,IAAqD,EAAA;AACvG,EAAA,KAAA,GAAQ,gBAAgB,KAAK,CAAA;AAC7B,EAAA,GAAA,GAAM,gBAAgB,GAAG,CAAA;AAEzB,EAAA,IAAI,SAAS,SAAW,EAAA;AACvB,IAAO,IAAA,GAAA,KAAA,GAAQ,MAAM,CAAI,GAAA,EAAA;AAAA,GACnB,MAAA;AACN,IAAA,IAAA,GAAO,gBAAgB,IAAI,CAAA;AAG3B,IAAA,IAAI,SAAS,CAAG,EAAA;AACf,MAAM,MAAA,IAAI,WAAW,qBAAqB,CAAA;AAAA;AAI3C,IAAI,IAAA,IAAA,GAAO,CAAK,IAAA,KAAA,GAAQ,GAAK,EAAA;AAC5B,MAAM,MAAA,IAAI,WAAW,mDAAmD,CAAA;AAAA,KAC9D,MAAA,IAAA,IAAA,GAAO,CAAK,IAAA,KAAA,GAAQ,GAAK,EAAA;AACnC,MAAM,MAAA,IAAI,WAAW,sDAAsD,CAAA;AAAA;AAC5E;AAGD,EAAA,IAAI,QAAQ,GAAK,EAAA;AAChB,IAAA,KAAA,IAAS,CAAI,GAAA,KAAA,EAAO,CAAI,GAAA,GAAA,EAAK,KAAK,IAAM,EAAA;AACvC,MAAM,MAAA,CAAA;AAAA;AACP,GACM,MAAA;AACN,IAAA,KAAA,IAAS,CAAI,GAAA,KAAA,EAAO,CAAI,GAAA,GAAA,EAAK,KAAK,IAAM,EAAA;AACvC,MAAM,MAAA,CAAA;AAAA;AACP;AAEF;AA/BiB,MAAA,CAAA,KAAA,EAAA,OAAA,CAAA","file":"range.mjs","sourcesContent":["import { toNumberOrThrow } from './shared/_toNumberOrThrow';\n\n/**\n * Creates an iterable with the numbers from `start` to `stop` (exclusive) with an optional step.\n *\n * @param start The value of the first number in the range.\n * @param end The end value of the range.\n * @param step The amount to increment the range by.\n *\n * @example\n * ```typescript\n * import { range } from '@sapphire/iterator-utilities';\n *\n * const iterable = range(0, 5);\n * console.log([...iterable]);\n * // Output: [0, 1, 2, 3, 4]\n * ```\n *\n * @example\n * ```typescript\n * const iterable = range(5, 0);\n * console.log([...iterable]);\n * // Output: [5, 4, 3, 2, 1]\n * ```\n *\n * @example\n * ```typescript\n * const iterable = range(0, 5, 2);\n * console.log([...iterable]);\n * // Output: [0, 2, 4]\n * ```\n */\nexport function* range(start: number, end: number, step?: number | undefined): IterableIterator<number> {\n\tstart = toNumberOrThrow(start);\n\tend = toNumberOrThrow(end);\n\n\tif (step === undefined) {\n\t\tstep = start < end ? 1 : -1;\n\t} else {\n\t\tstep = toNumberOrThrow(step);\n\n\t\t// Prevent infinite loops.\n\t\tif (step === 0) {\n\t\t\tthrow new RangeError('Step cannot be zero');\n\t\t}\n\n\t\t// If the step is positive, the start must be less than the end.\n\t\tif (step > 0 && start > end) {\n\t\t\tthrow new RangeError('Start must be less than end when step is positive');\n\t\t} else if (step < 0 && start < end) {\n\t\t\tthrow new RangeError('Start must be greater than end when step is negative');\n\t\t}\n\t}\n\n\tif (start < end) {\n\t\tfor (let i = start; i < end; i += step) {\n\t\t\tyield i;\n\t\t}\n\t} else {\n\t\tfor (let i = start; i > end; i += step) {\n\t\t\tyield i;\n\t\t}\n\t}\n}\n"]}
|
package/dist/esm/lib/repeat.mjs
CHANGED
|
@@ -7,7 +7,7 @@ function repeat(value, count) {
|
|
|
7
7
|
count = assertNotNegative(toNumberOrThrow(count), count);
|
|
8
8
|
let i = 0;
|
|
9
9
|
return makeIterableIterator(
|
|
10
|
-
() => i >= count ? { done: true, value:
|
|
10
|
+
() => i >= count ? { done: true, value: undefined } : (i++, { done: false, value })
|
|
11
11
|
);
|
|
12
12
|
}
|
|
13
13
|
__name(repeat, "repeat");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/lib/repeat.ts"],"names":[],"mappings":";;;;;AAqBO,SAAS,MAAA,CAA0B,OAAoB,KAA8C,EAAA;AAC3G,EAAA,KAAA,GAAQ,iBAAkB,CAAA,eAAA,CAAgB,KAAK,CAAA,EAAG,KAAK,CAAA;AAEvD,EAAA,IAAI,CAAI,GAAA,CAAA;AACR,EAAO,OAAA,oBAAA;AAAA,IAAkC,MACxC,CAAA,IAAK,KACF,GAAA,EAAE,IAAM,EAAA,IAAA,EAAM,KAAO,EAAA,
|
|
1
|
+
{"version":3,"sources":["../../../src/lib/repeat.ts"],"names":[],"mappings":";;;;;AAqBO,SAAS,MAAA,CAA0B,OAAoB,KAA8C,EAAA;AAC3G,EAAA,KAAA,GAAQ,iBAAkB,CAAA,eAAA,CAAgB,KAAK,CAAA,EAAG,KAAK,CAAA;AAEvD,EAAA,IAAI,CAAI,GAAA,CAAA;AACR,EAAO,OAAA,oBAAA;AAAA,IAAkC,MACxC,CAAA,IAAK,KACF,GAAA,EAAE,IAAM,EAAA,IAAA,EAAM,KAAO,EAAA,SAAA,EACpB,IAAA,CAAA,EAAA,EAAK,EAAE,IAAA,EAAM,OAAO,KAAM,EAAA;AAAA,GAC/B;AACD;AATgB,MAAA,CAAA,MAAA,EAAA,QAAA,CAAA","file":"repeat.mjs","sourcesContent":["import { assertNotNegative } from './shared/_assertNotNegative';\nimport { makeIterableIterator } from './shared/_makeIterableIterator';\nimport { toNumberOrThrow } from './shared/_toNumberOrThrow';\n\n/**\n * Creates an iterable that repeats the input iterable `count` times.\n *\n * @param value The value to be repeated.\n * @param count The number of times to repeat the value.\n *\n * @example\n * ```typescript\n * import { repeat } from '@sapphire/iterator-utilities';\n *\n * const iterator = repeat('Hello, world!', 3);\n * console.log([...iterator]);\n * // Output: ['Hello, world!', 'Hello, world!', 'Hello, world!']\n * ```\n *\n * @remarks This function does not clone `value`, it will be repeated as a reference.\n */\nexport function repeat<const ElementType>(value: ElementType, count: number): IterableIterator<ElementType> {\n\tcount = assertNotNegative(toNumberOrThrow(count), count);\n\n\tlet i = 0;\n\treturn makeIterableIterator<ElementType>(() =>\n\t\ti >= count //\n\t\t\t? { done: true, value: undefined }\n\t\t\t: (i++, { done: false, value })\n\t);\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/lib/shared/_compare.ts"],"names":[],"mappings":";;;AAgBO,SAAS,uBAAA,CACf,CACA,EAAA,CAAA,EACA,UACS,EAAA;AAET,EAAI,IAAA,OAAO,MAAM,WAAa,EAAA;AAE7B,IAAI,IAAA,OAAO,CAAM,KAAA,WAAA,EAAoB,OAAA,CAAA;AAErC,IAAO,OAAA,CAAA;AAAA;AAGR,EAAI,IAAA,OAAO,MAAM,WAAa,EAAA;AAE7B,IAAO,OAAA,
|
|
1
|
+
{"version":3,"sources":["../../../../src/lib/shared/_compare.ts"],"names":[],"mappings":";;;AAgBO,SAAS,uBAAA,CACf,CACA,EAAA,CAAA,EACA,UACS,EAAA;AAET,EAAI,IAAA,OAAO,MAAM,WAAa,EAAA;AAE7B,IAAI,IAAA,OAAO,CAAM,KAAA,WAAA,EAAoB,OAAA,CAAA;AAErC,IAAO,OAAA,CAAA;AAAA;AAGR,EAAI,IAAA,OAAO,MAAM,WAAa,EAAA;AAE7B,IAAO,OAAA,EAAA;AAAA;AAGR,EAAO,OAAA,UAAA,CAAW,GAAsC,CAAoC,CAAA;AAC7F;AAnBgB,MAAA,CAAA,uBAAA,EAAA,yBAAA,CAAA;AAqBT,SAAS,eAAe,QAAkB,EAAA;AAChD,EAAA,OAAO,QAAW,GAAA,CAAA;AACnB;AAFgB,MAAA,CAAA,cAAA,EAAA,gBAAA,CAAA;AAIT,SAAS,gBAAgB,QAAkB,EAAA;AACjD,EAAA,OAAO,QAAa,KAAA,CAAA;AACrB;AAFgB,MAAA,CAAA,eAAA,EAAA,iBAAA,CAAA;AAIT,SAAS,kBAAkB,QAAkB,EAAA;AACnD,EAAA,OAAO,QAAW,GAAA,CAAA;AACnB;AAFgB,MAAA,CAAA,iBAAA,EAAA,mBAAA,CAAA","file":"_compare.mjs","sourcesContent":["/**\n * Represents the result of a lexicographic comparison.\n *\n * The operations are as follows:\n *\n * - Two iterators are compared element by element.\n * - The first pair of unequal elements determines the result.\n * - If one sequence is a prefix of the other, the shorter sequence is lexicographically less than the other.\n * - If two sequences have the same elements in the same order, they are lexicographically equal.\n * - An empty sequence is lexicographically less than any non-empty sequence.\n * - Two empty sequences are lexicographically equal.\n */\nexport type LexicographicComparison = -1 | 0 | 1;\n\nexport type CompareByComparator<ElementType> = (x: Exclude<ElementType, undefined>, y: Exclude<ElementType, undefined>) => number;\n\nexport function compareIteratorElements<const ElementType>(\n\tx: ElementType | undefined,\n\ty: ElementType | undefined,\n\tcomparator: CompareByComparator<ElementType>\n): number {\n\t// 23.1.3.30.2 CompareArrayElements (https://tc39.es/ecma262/#sec-comparearrayelements)\n\tif (typeof x === 'undefined') {\n\t\t// 1. If x and y are both `undefined`, return +0.\n\t\tif (typeof y === 'undefined') return 0;\n\t\t// 2. If x is `undefined`, return +1.\n\t\treturn 1;\n\t}\n\n\tif (typeof y === 'undefined') {\n\t\t// 3. If y is `undefined`, return -1.\n\t\treturn -1;\n\t}\n\n\treturn comparator(x as Exclude<ElementType, undefined>, y as Exclude<ElementType, undefined>);\n}\n\nexport function orderingIsLess(ordering: number) {\n\treturn ordering < 0;\n}\n\nexport function orderingIsEqual(ordering: number) {\n\treturn ordering === 0;\n}\n\nexport function orderingIsGreater(ordering: number) {\n\treturn ordering > 0;\n}\n"]}
|
package/dist/esm/lib/slice.mjs
CHANGED
|
@@ -11,7 +11,7 @@ function slice(iterable, start, end) {
|
|
|
11
11
|
if (start === Number.NEGATIVE_INFINITY) {
|
|
12
12
|
start = 0;
|
|
13
13
|
}
|
|
14
|
-
if (end ===
|
|
14
|
+
if (end === undefined) {
|
|
15
15
|
return start >= 0 ? drop(iterable, start) : takeLast(iterable, -start);
|
|
16
16
|
}
|
|
17
17
|
end = toIntegerOrInfinityOrThrow(end);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/lib/slice.ts"],"names":[],"mappings":";;;;;;;;AAiEO,SAAS,KAAA,CAAyB,QAA2C,EAAA,KAAA,EAAgB,GAA6C,EAAA;AAEhJ,EAAQ,KAAA,GAAA,0BAAA,CAA2B,SAAS,CAAC,CAAA;AAC7C,EAAI,IAAA,KAAA,KAAU,OAAO,iBAAmB,EAAA;AACvC,IAAQ,KAAA,GAAA,CAAA;AAAA;AAKT,EAAA,IAAI,QAAQ,
|
|
1
|
+
{"version":3,"sources":["../../../src/lib/slice.ts"],"names":[],"mappings":";;;;;;;;AAiEO,SAAS,KAAA,CAAyB,QAA2C,EAAA,KAAA,EAAgB,GAA6C,EAAA;AAEhJ,EAAQ,KAAA,GAAA,0BAAA,CAA2B,SAAS,CAAC,CAAA;AAC7C,EAAI,IAAA,KAAA,KAAU,OAAO,iBAAmB,EAAA;AACvC,IAAQ,KAAA,GAAA,CAAA;AAAA;AAKT,EAAA,IAAI,QAAQ,SAAW,EAAA;AACtB,IAAO,OAAA,KAAA,IAAS,IACb,IAAK,CAAA,QAAA,EAAU,KAAK,CACpB,GAAA,QAAA,CAAS,QAAU,EAAA,CAAC,KAAK,CAAA;AAAA;AAG7B,EAAA,GAAA,GAAM,2BAA2B,GAAG,CAAA;AAEpC,EAAA,IAAI,MAAM,CAAG,EAAA;AAGZ,IAAI,IAAA,GAAA,KAAQ,OAAO,iBAAmB,EAAA;AACrC,MAAA,OAAO,KAAM,EAAA;AAAA;AAId,IAAA,IAAI,UAAU,CAAG,EAAA;AAChB,MAAO,OAAA,QAAA,CAAS,QAAU,EAAA,CAAC,GAAG,CAAA;AAAA;AAK/B,IAAA,IAAI,SAAS,CAAG,EAAA;AACf,MAAA,OAAO,SAAS,IAAK,CAAA,QAAA,EAAU,KAAK,CAAA,EAAG,CAAC,GAAG,CAAA;AAAA;AAK5C,IAAA,IAAI,SAAS,GAAK,EAAA;AACjB,MAAA,OAAO,KAAM,EAAA;AAAA;AAKd,IAAA,OAAO,KAAK,QAAS,CAAA,QAAA,EAAU,CAAC,KAAK,CAAA,EAAG,MAAM,KAAK,CAAA;AAAA;AAIpD,EAAI,IAAA,KAAA,IAAS,GAAK,EAAA,OAAO,KAAM,EAAA;AAG/B,EAAA,OAAO,GAAQ,KAAA,MAAA,CAAO,iBACnB,GAAA,IAAA,CAAK,QAAU,EAAA,KAAK,CACpB,GAAA,IAAA,CAAK,IAAK,CAAA,QAAA,EAAU,KAAK,CAAA,EAAG,MAAM,KAAK,CAAA;AAC3C;AArDgB,MAAA,CAAA,KAAA,EAAA,OAAA,CAAA","file":"slice.mjs","sourcesContent":["import { drop } from './drop';\nimport { dropLast } from './dropLast';\nimport { empty } from './empty';\nimport type { IterableResolvable } from './from';\nimport { toIntegerOrInfinityOrThrow } from './shared/_toIntegerOrInfinityOrThrow';\nimport { take } from './take';\nimport { takeLast } from './takeLast';\n\n/**\n * Produces an iterable with the elements from the `start` index to the `end` index (exclusive).\n *\n * @param iterable The iterator to slice.\n * @param start The index at which to begin extraction.\n * @param end The index at which to end extraction.\n * @returns An iterator that contains the elements of the provided iterator from `start` to `end`.\n *\n * @example\n * ```typescript\n * import { slice } from '@sapphire/iterator-utilities';\n *\n * const iterable = [1, 2, 3, 4, 5];\n * console.log([...slice(, 1, 3)]);\n * // Output: [2, 3]\n * ```\n *\n * @example\n * ```typescript\n * const iterable = [1, 2, 3, 4, 5];\n * console.log([...slice(iterable, -2)]);\n * // Output: [4, 5]\n * ```\n *\n * @example\n * ```typescript\n * const iterable = [1, 2, 3, 4, 5];\n * console.log([...slice(iterable, 2)]);\n * // Output: [3, 4, 5]\n * ```\n *\n * @example\n * ```typescript\n * const iterable = [1, 2, 3, 4, 5];\n * console.log([...slice(iterable, 2, -1)]);\n * // Output: [3, 4]\n * ```\n *\n * @example\n * ```typescript\n * const iterable = [1, 2, 3, 4, 5];\n * console.log([...slice(iterable, -2, -1)]);\n * // Output: [4]\n * ```\n *\n * @example\n * ```typescript\n * const iterable = [1, 2, 3, 4, 5];\n * console.log([...slice(iterable, 2, 1)]);\n * // Output: []\n * ```\n *\n * @remarks\n *\n * This function consumes the input iterator based on the `start` and `end` values, therefore, you should not use the\n * original iterator after calling this function.\n */\nexport function slice<const ElementType>(iterable: IterableResolvable<ElementType>, start?: number, end?: number): IterableIterator<ElementType> {\n\t// https://tc39.es/ecma262/#sec-array.prototype.slice\n\tstart = toIntegerOrInfinityOrThrow(start ?? 0);\n\tif (start === Number.NEGATIVE_INFINITY) {\n\t\tstart = 0;\n\t}\n\n\t// 1. If end is not provided, `slice` behaves like `drop` or `takeLast`,\n\t// depending on the sign of `start`:\n\tif (end === undefined) {\n\t\treturn start >= 0 //\n\t\t\t? drop(iterable, start)\n\t\t\t: takeLast(iterable, -start);\n\t}\n\n\tend = toIntegerOrInfinityOrThrow(end);\n\t// 2. If end is negative:\n\tif (end < 0) {\n\t\t// 2.1. If `end` is `-Infinity`, end would be `0`, which will always\n\t\t// result on an empty iterator:\n\t\tif (end === Number.NEGATIVE_INFINITY) {\n\t\t\treturn empty();\n\t\t}\n\n\t\t// 2.2. If start is positive, drop the last n elements:\n\t\tif (start === 0) {\n\t\t\treturn dropLast(iterable, -end);\n\t\t}\n\n\t\t// 2.3. If the start is positive, drop the first n elements and take the\n\t\t// last m elements:\n\t\tif (start >= 0) {\n\t\t\treturn dropLast(drop(iterable, start), -end);\n\t\t}\n\n\t\t// 2.4. If the start is the same or greater than the end, return an\n\t\t// empty iterator:\n\t\tif (start >= end) {\n\t\t\treturn empty();\n\t\t}\n\n\t\t// 2.5. `start` and `end` are negative, take the elements between the\n\t\t// start and end:\n\t\treturn take(takeLast(iterable, -start), end - start);\n\t}\n\n\t// 3.0. If `start` is greater than or equal to `end`, return an empty iterator:\n\tif (start >= end) return empty();\n\n\t// 4.0. Otherwise, take the elements between `start` and `end`:\n\treturn end === Number.POSITIVE_INFINITY //\n\t\t? drop(iterable, start)\n\t\t: take(drop(iterable, start), end - start);\n}\n"]}
|
package/dist/esm/lib/stepBy.mjs
CHANGED
|
@@ -10,7 +10,7 @@ function stepBy(iterable, step) {
|
|
|
10
10
|
return makeIterableIterator(() => {
|
|
11
11
|
const result = iterator.next();
|
|
12
12
|
if (result.done) {
|
|
13
|
-
return { done: true, value:
|
|
13
|
+
return { done: true, value: undefined };
|
|
14
14
|
}
|
|
15
15
|
for (let i = 0; i < step - 1; i++) {
|
|
16
16
|
const result2 = iterator.next();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/lib/stepBy.ts"],"names":["result"],"mappings":";;;;;;AAwBO,SAAS,MAAA,CAA0B,UAA2C,IAA6C,EAAA;AACjI,EAAA,IAAA,GAAO,cAAe,CAAA,0BAAA,CAA2B,IAAI,CAAA,EAAG,IAAI,CAAA;AAE5D,EAAM,MAAA,QAAA,GAAW,KAAK,QAAQ,CAAA;AAC9B,EAAA,OAAO,qBAAkC,MAAM;AAC9C,IAAM,MAAA,MAAA,GAAS,SAAS,IAAK,EAAA;AAC7B,IAAA,IAAI,OAAO,IAAM,EAAA;AAChB,MAAA,OAAO,EAAE,IAAA,EAAM,IAAM,EAAA,KAAA,EAAO,
|
|
1
|
+
{"version":3,"sources":["../../../src/lib/stepBy.ts"],"names":["result"],"mappings":";;;;;;AAwBO,SAAS,MAAA,CAA0B,UAA2C,IAA6C,EAAA;AACjI,EAAA,IAAA,GAAO,cAAe,CAAA,0BAAA,CAA2B,IAAI,CAAA,EAAG,IAAI,CAAA;AAE5D,EAAM,MAAA,QAAA,GAAW,KAAK,QAAQ,CAAA;AAC9B,EAAA,OAAO,qBAAkC,MAAM;AAC9C,IAAM,MAAA,MAAA,GAAS,SAAS,IAAK,EAAA;AAC7B,IAAA,IAAI,OAAO,IAAM,EAAA;AAChB,MAAA,OAAO,EAAE,IAAA,EAAM,IAAM,EAAA,KAAA,EAAO,SAAU,EAAA;AAAA;AAGvC,IAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,IAAA,GAAO,GAAG,CAAK,EAAA,EAAA;AAClC,MAAMA,MAAAA,OAAAA,GAAS,SAAS,IAAK,EAAA;AAC7B,MAAA,IAAIA,QAAO,IAAM,EAAA;AAAA;AAGlB,IAAA,OAAO,EAAE,IAAA,EAAM,KAAO,EAAA,KAAA,EAAO,OAAO,KAAM,EAAA;AAAA,GAC1C,CAAA;AACF;AAjBgB,MAAA,CAAA,MAAA,EAAA,QAAA,CAAA","file":"stepBy.mjs","sourcesContent":["import { from, type IterableResolvable } from './from';\nimport { assertPositive } from './shared/_assertPositive';\nimport { makeIterableIterator } from './shared/_makeIterableIterator';\nimport { toIntegerOrInfinityOrThrow } from './shared/_toIntegerOrInfinityOrThrow';\n\n/**\n * Creates an iterator starting at the same point, but stepping by the given amount at each iteration.\n *\n * @param iterable An iterator to map over.\n * @param step A positive integer representing the step to take at each iteration.\n *\n * @example\n * ```typescript\n * import { stepBy } from '@sapphire/iterator-utilities';\n *\n * const iterable = [0, 1, 2, 3, 4, 5];\n * console.log([...stepBy(iterable, 2)]);\n * // Output: [0, 2, 4]\n * ```\n *\n * @remarks\n *\n * The first element of the iterator will always be returned, regardless of the step given.\n */\nexport function stepBy<const ElementType>(iterable: IterableResolvable<ElementType>, step: number): IterableIterator<ElementType> {\n\tstep = assertPositive(toIntegerOrInfinityOrThrow(step), step);\n\n\tconst iterator = from(iterable);\n\treturn makeIterableIterator<ElementType>(() => {\n\t\tconst result = iterator.next();\n\t\tif (result.done) {\n\t\t\treturn { done: true, value: undefined };\n\t\t}\n\n\t\tfor (let i = 0; i < step - 1; i++) {\n\t\t\tconst result = iterator.next();\n\t\t\tif (result.done) break;\n\t\t}\n\n\t\treturn { done: false, value: result.value };\n\t});\n}\n"]}
|
package/dist/esm/lib/take.mjs
CHANGED
|
@@ -11,7 +11,7 @@ function take(iterable, count) {
|
|
|
11
11
|
let i = 0;
|
|
12
12
|
const resolvedIterable = from(iterable);
|
|
13
13
|
return makeIterableIterator(
|
|
14
|
-
() => i >= count ? { done: true, value:
|
|
14
|
+
() => i >= count ? { done: true, value: undefined } : (i++, resolvedIterable.next())
|
|
15
15
|
);
|
|
16
16
|
}
|
|
17
17
|
__name(take, "take");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/lib/take.ts"],"names":[],"mappings":";;;;;;;AAsBO,SAAS,IAAA,CAAwB,UAA2C,KAA8C,EAAA;AAChI,EAAA,KAAA,GAAQ,iBAAkB,CAAA,0BAAA,CAA2B,KAAK,CAAA,EAAG,KAAK,CAAA;AAClE,EAAI,IAAA,KAAA,KAAU,CAAG,EAAA,OAAO,KAAM,EAAA;AAE9B,EAAA,IAAI,CAAI,GAAA,CAAA;AACR,EAAM,MAAA,gBAAA,GAAmB,KAAK,QAAQ,CAAA;AACtC,EAAO,OAAA,oBAAA;AAAA,IAAkC,MACxC,CAAK,IAAA,KAAA,GACF,EAAE,IAAA,EAAM,IAAM,EAAA,KAAA,EAAO,
|
|
1
|
+
{"version":3,"sources":["../../../src/lib/take.ts"],"names":[],"mappings":";;;;;;;AAsBO,SAAS,IAAA,CAAwB,UAA2C,KAA8C,EAAA;AAChI,EAAA,KAAA,GAAQ,iBAAkB,CAAA,0BAAA,CAA2B,KAAK,CAAA,EAAG,KAAK,CAAA;AAClE,EAAI,IAAA,KAAA,KAAU,CAAG,EAAA,OAAO,KAAM,EAAA;AAE9B,EAAA,IAAI,CAAI,GAAA,CAAA;AACR,EAAM,MAAA,gBAAA,GAAmB,KAAK,QAAQ,CAAA;AACtC,EAAO,OAAA,oBAAA;AAAA,IAAkC,MACxC,CAAK,IAAA,KAAA,GACF,EAAE,IAAA,EAAM,IAAM,EAAA,KAAA,EAAO,SAAU,EAAA,IAC9B,CAAK,EAAA,EAAA,gBAAA,CAAiB,IAAK,EAAA;AAAA,GAChC;AACD;AAXgB,MAAA,CAAA,IAAA,EAAA,MAAA,CAAA","file":"take.mjs","sourcesContent":["import { empty } from './empty';\nimport { from, type IterableResolvable } from './from';\nimport { assertNotNegative } from './shared/_assertNotNegative';\nimport { makeIterableIterator } from './shared/_makeIterableIterator';\nimport { toIntegerOrInfinityOrThrow } from './shared/_toIntegerOrInfinityOrThrow';\n\n/**\n * Creates an iterable with the first `count` elements.\n *\n * @param iterable The iterator to take values from.\n * @param count The maximum number of values to take from the iterator.\n * @returns An iterator that yields at most `count` values from the provided iterator.\n *\n * @example\n * ```typescript\n * import { take } from '@sapphire/iterator-utilities';\n *\n * const iterable = [1, 2, 3, 4, 5];\n * console.log([...take(iterable, 2)]);\n * // Output: [1, 2]\n * ```\n */\nexport function take<const ElementType>(iterable: IterableResolvable<ElementType>, count: number): IterableIterator<ElementType> {\n\tcount = assertNotNegative(toIntegerOrInfinityOrThrow(count), count);\n\tif (count === 0) return empty();\n\n\tlet i = 0;\n\tconst resolvedIterable = from(iterable);\n\treturn makeIterableIterator<ElementType>(() =>\n\t\ti >= count //\n\t\t\t? { done: true, value: undefined }\n\t\t\t: (i++, resolvedIterable.next())\n\t);\n}\n"]}
|
|
@@ -14,7 +14,7 @@ function takeLast(iterable, count) {
|
|
|
14
14
|
let i = Math.max(0, array.length - count);
|
|
15
15
|
return makeIterableIterator(() => {
|
|
16
16
|
if (i >= array.length) {
|
|
17
|
-
return { done: true, value:
|
|
17
|
+
return { done: true, value: undefined };
|
|
18
18
|
}
|
|
19
19
|
return { done: false, value: array[i++] };
|
|
20
20
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/lib/takeLast.ts"],"names":[],"mappings":";;;;;;;;AA4BO,SAAS,QAAA,CAA4B,UAA2C,KAA8C,EAAA;AACpI,EAAA,KAAA,GAAQ,iBAAkB,CAAA,0BAAA,CAA2B,KAAK,CAAA,EAAG,KAAK,CAAA;AAClE,EAAI,IAAA,KAAA,KAAU,CAAG,EAAA,OAAO,KAAM,EAAA;AAC9B,EAAA,IAAI,KAAU,KAAA,MAAA,CAAO,iBAAmB,EAAA,OAAO,mBAAmB,QAAQ,CAAA;AAE1E,EAAM,MAAA,KAAA,GAAQ,QAAQ,QAAQ,CAAA;AAC9B,EAAA,IAAI,IAAI,IAAK,CAAA,GAAA,CAAI,CAAG,EAAA,KAAA,CAAM,SAAS,KAAK,CAAA;AACxC,EAAA,OAAO,qBAAkC,MAAM;AAC9C,IAAI,IAAA,CAAA,IAAK,MAAM,MAAQ,EAAA;AACtB,MAAA,OAAO,EAAE,IAAA,EAAM,IAAM,EAAA,KAAA,EAAO,
|
|
1
|
+
{"version":3,"sources":["../../../src/lib/takeLast.ts"],"names":[],"mappings":";;;;;;;;AA4BO,SAAS,QAAA,CAA4B,UAA2C,KAA8C,EAAA;AACpI,EAAA,KAAA,GAAQ,iBAAkB,CAAA,0BAAA,CAA2B,KAAK,CAAA,EAAG,KAAK,CAAA;AAClE,EAAI,IAAA,KAAA,KAAU,CAAG,EAAA,OAAO,KAAM,EAAA;AAC9B,EAAA,IAAI,KAAU,KAAA,MAAA,CAAO,iBAAmB,EAAA,OAAO,mBAAmB,QAAQ,CAAA;AAE1E,EAAM,MAAA,KAAA,GAAQ,QAAQ,QAAQ,CAAA;AAC9B,EAAA,IAAI,IAAI,IAAK,CAAA,GAAA,CAAI,CAAG,EAAA,KAAA,CAAM,SAAS,KAAK,CAAA;AACxC,EAAA,OAAO,qBAAkC,MAAM;AAC9C,IAAI,IAAA,CAAA,IAAK,MAAM,MAAQ,EAAA;AACtB,MAAA,OAAO,EAAE,IAAA,EAAM,IAAM,EAAA,KAAA,EAAO,SAAU,EAAA;AAAA;AAGvC,IAAA,OAAO,EAAE,IAAM,EAAA,KAAA,EAAO,KAAO,EAAA,KAAA,CAAM,GAAG,CAAE,EAAA;AAAA,GACxC,CAAA;AACF;AAdgB,MAAA,CAAA,QAAA,EAAA,UAAA,CAAA","file":"takeLast.mjs","sourcesContent":["import { empty } from './empty';\nimport type { IterableResolvable } from './from';\nimport { assertNotNegative } from './shared/_assertNotNegative';\nimport { makeIterableIterator } from './shared/_makeIterableIterator';\nimport { toIntegerOrInfinityOrThrow } from './shared/_toIntegerOrInfinityOrThrow';\nimport { toArray } from './toArray';\nimport { toIterableIterator } from './toIterableIterator';\n\n/**\n * Consumes the iterable and returns a new iterable with the last `count` elements.\n *\n * @param iterable An iterator to take values from.\n * @param count The number of values to take from the end of the iterator.\n * @returns An iterator that contains the last `count` elements of the provided iterator.\n *\n * @example\n * ```typescript\n * import { takeLast } from '@sapphire/iterator-utilities';\n *\n * const iterable = [1, 2, 3, 4, 5];\n * console.log([...takeLast(iterable, 2)]);\n * // Output: [4, 5]\n * ```\n *\n * @remarks\n *\n * This function consumes the entire iterator.\n */\nexport function takeLast<const ElementType>(iterable: IterableResolvable<ElementType>, count: number): IterableIterator<ElementType> {\n\tcount = assertNotNegative(toIntegerOrInfinityOrThrow(count), count);\n\tif (count === 0) return empty();\n\tif (count === Number.POSITIVE_INFINITY) return toIterableIterator(iterable);\n\n\tconst array = toArray(iterable);\n\tlet i = Math.max(0, array.length - count);\n\treturn makeIterableIterator<ElementType>(() => {\n\t\tif (i >= array.length) {\n\t\t\treturn { done: true, value: undefined };\n\t\t}\n\n\t\treturn { done: false, value: array[i++] };\n\t});\n}\n"]}
|
package/dist/esm/lib/tee.mjs
CHANGED
|
@@ -18,7 +18,7 @@ function tee(iterable, count) {
|
|
|
18
18
|
if (indexes[i] >= entries.length) {
|
|
19
19
|
const result = resolvedIterable.next();
|
|
20
20
|
if (result.done) {
|
|
21
|
-
return { done: true, value:
|
|
21
|
+
return { done: true, value: undefined };
|
|
22
22
|
}
|
|
23
23
|
entries.push(result.value);
|
|
24
24
|
}
|
package/dist/esm/lib/tee.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/lib/tee.ts"],"names":["iterable"],"mappings":";;;;;;;;AA2BO,SAAS,GAAA,CAAuB,UAA2C,KAAgD,EAAA;AACjI,EAAA,KAAA,GAAQ,iBAAkB,CAAA,gBAAA,CAAiB,KAAK,CAAA,EAAG,KAAK,CAAA;AACxD,EAAI,IAAA,KAAA,KAAU,CAAG,EAAA,OAAO,EAAC;AAEzB,EAAA,MAAM,UAAU,EAAC;AACjB,EAAA,MAAM,OAAU,GAAA,OAAA,CAAQ,MAAO,CAAA,CAAA,EAAG,KAAK,CAAC,CAAA;AACxC,EAAM,MAAA,gBAAA,GAAmB,KAAK,QAAQ,CAAA;AAEtC,EAAA,MAAM,YAAY,EAAC;AACnB,EAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,KAAA,EAAO,CAAK,EAAA,EAAA;AAC/B,IAAMA,MAAAA,SAAAA,GAAW,qBAAkC,MAAM;AACxD,MAAA,IAAI,OAAQ,CAAA,CAAC,CAAK,IAAA,OAAA,CAAQ,MAAQ,EAAA;AACjC,QAAM,MAAA,MAAA,GAAS,iBAAiB,IAAK,EAAA;AACrC,QAAA,IAAI,OAAO,IAAM,EAAA;AAChB,UAAA,OAAO,EAAE,IAAA,EAAM,IAAM,EAAA,KAAA,EAAO,
|
|
1
|
+
{"version":3,"sources":["../../../src/lib/tee.ts"],"names":["iterable"],"mappings":";;;;;;;;AA2BO,SAAS,GAAA,CAAuB,UAA2C,KAAgD,EAAA;AACjI,EAAA,KAAA,GAAQ,iBAAkB,CAAA,gBAAA,CAAiB,KAAK,CAAA,EAAG,KAAK,CAAA;AACxD,EAAI,IAAA,KAAA,KAAU,CAAG,EAAA,OAAO,EAAC;AAEzB,EAAA,MAAM,UAAU,EAAC;AACjB,EAAA,MAAM,OAAU,GAAA,OAAA,CAAQ,MAAO,CAAA,CAAA,EAAG,KAAK,CAAC,CAAA;AACxC,EAAM,MAAA,gBAAA,GAAmB,KAAK,QAAQ,CAAA;AAEtC,EAAA,MAAM,YAAY,EAAC;AACnB,EAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,KAAA,EAAO,CAAK,EAAA,EAAA;AAC/B,IAAMA,MAAAA,SAAAA,GAAW,qBAAkC,MAAM;AACxD,MAAA,IAAI,OAAQ,CAAA,CAAC,CAAK,IAAA,OAAA,CAAQ,MAAQ,EAAA;AACjC,QAAM,MAAA,MAAA,GAAS,iBAAiB,IAAK,EAAA;AACrC,QAAA,IAAI,OAAO,IAAM,EAAA;AAChB,UAAA,OAAO,EAAE,IAAA,EAAM,IAAM,EAAA,KAAA,EAAO,SAAU,EAAA;AAAA;AAGvC,QAAQ,OAAA,CAAA,IAAA,CAAK,OAAO,KAAK,CAAA;AAAA;AAG1B,MAAO,OAAA,EAAE,MAAM,KAAO,EAAA,KAAA,EAAO,QAAQ,OAAQ,CAAA,CAAC,GAAG,CAAE,EAAA;AAAA,KACnD,CAAA;AAED,IAAA,SAAA,CAAU,KAAKA,SAAQ,CAAA;AAAA;AAGxB,EAAO,OAAA,SAAA;AACR;AA3BgB,MAAA,CAAA,GAAA,EAAA,KAAA,CAAA","file":"tee.mjs","sourcesContent":["import { from, type IterableResolvable } from './from';\nimport { repeat } from './repeat';\nimport { assertNotNegative } from './shared/_assertNotNegative';\nimport { makeIterableIterator } from './shared/_makeIterableIterator';\nimport { toIntegerOrThrow } from './shared/_toIntegerOrThrow';\nimport { toArray } from './toArray';\n\n/**\n * Creates `count` independent iterators from the input iterable.\n *\n * @param iterable An iterator to tee.\n * @param count The number of iterators to create.\n * @returns An array of `count` iterators that each yield the same values as the input iterator.\n *\n * @example\n * ```typescript\n * import { tee } from '@sapphire/iterator-utilities';\n *\n * const iterable = [1, 2, 3, 4, 5];\n * const [iter1, iter2] = tee(iterable, 2);\n * console.log([...iter1]);\n * // Output: [1, 2, 3, 4, 5]\n *\n * console.log([...iter2]);\n * // Output: [1, 2, 3, 4, 5]\n * ```\n */\nexport function tee<const ElementType>(iterable: IterableResolvable<ElementType>, count: number): IterableIterator<ElementType>[] {\n\tcount = assertNotNegative(toIntegerOrThrow(count), count);\n\tif (count === 0) return [];\n\n\tconst entries = [] as ElementType[];\n\tconst indexes = toArray(repeat(0, count));\n\tconst resolvedIterable = from(iterable);\n\n\tconst iterables = [] as IterableIterator<ElementType>[];\n\tfor (let i = 0; i < count; i++) {\n\t\tconst iterable = makeIterableIterator<ElementType>(() => {\n\t\t\tif (indexes[i] >= entries.length) {\n\t\t\t\tconst result = resolvedIterable.next();\n\t\t\t\tif (result.done) {\n\t\t\t\t\treturn { done: true, value: undefined };\n\t\t\t\t}\n\n\t\t\t\tentries.push(result.value);\n\t\t\t}\n\n\t\t\treturn { done: false, value: entries[indexes[i]++] };\n\t\t});\n\n\t\titerables.push(iterable);\n\t}\n\n\treturn iterables;\n}\n"]}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { IterableResolvable } from './from.mjs';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Creates an iterable with arrays of `count` elements representing a sliding window.
|
|
5
|
+
*
|
|
6
|
+
* @param iterable The iterator to take values from.
|
|
7
|
+
* @param count The maximum number of values in the window.
|
|
8
|
+
* @returns An iterator that yields windows with `count` values from the provided iterator.
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* ```typescript
|
|
12
|
+
* import { windows } from '@sapphire/iterator-utilities';
|
|
13
|
+
*
|
|
14
|
+
* const iterable = [1, 2, 3, 4, 5];
|
|
15
|
+
* console.log([...windows(iterable, 2)]);
|
|
16
|
+
* // Output: [[1, 2], [2, 3], [3, 4], [4, 5]]
|
|
17
|
+
* ```
|
|
18
|
+
*/
|
|
19
|
+
declare function windows<const ElementType>(iterable: IterableResolvable<ElementType>, count: number): IterableIterator<ElementType[]>;
|
|
20
|
+
|
|
21
|
+
export { windows };
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { __name } from '../chunk-PAWJFY3S.mjs';
|
|
2
|
+
import { from } from './from.mjs';
|
|
3
|
+
import { assertPositive } from './shared/_assertPositive.mjs';
|
|
4
|
+
import { makeIterableIterator } from './shared/_makeIterableIterator.mjs';
|
|
5
|
+
import { toIntegerOrInfinityOrThrow } from './shared/_toIntegerOrInfinityOrThrow.mjs';
|
|
6
|
+
|
|
7
|
+
function windows(iterable, count) {
|
|
8
|
+
count = assertPositive(toIntegerOrInfinityOrThrow(count), count);
|
|
9
|
+
const buffer = [];
|
|
10
|
+
const resolvedIterable = from(iterable);
|
|
11
|
+
return makeIterableIterator(() => {
|
|
12
|
+
while (buffer.length !== count) {
|
|
13
|
+
const result = resolvedIterable.next();
|
|
14
|
+
if (result.done) return { done: true, value: undefined };
|
|
15
|
+
buffer.push(result.value);
|
|
16
|
+
}
|
|
17
|
+
const value = buffer.slice();
|
|
18
|
+
buffer.shift();
|
|
19
|
+
return { done: false, value };
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
__name(windows, "windows");
|
|
23
|
+
|
|
24
|
+
export { windows };
|
|
25
|
+
//# sourceMappingURL=windows.mjs.map
|
|
26
|
+
//# sourceMappingURL=windows.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/lib/windows.ts"],"names":[],"mappings":";;;;;;AAqBO,SAAS,OAAA,CAA2B,UAA2C,KAAgD,EAAA;AACrI,EAAA,KAAA,GAAQ,cAAe,CAAA,0BAAA,CAA2B,KAAK,CAAA,EAAG,KAAK,CAAA;AAE/D,EAAA,MAAM,SAAS,EAAC;AAChB,EAAM,MAAA,gBAAA,GAAmB,KAAK,QAAQ,CAAA;AACtC,EAAA,OAAO,qBAAoC,MAAM;AAChD,IAAO,OAAA,MAAA,CAAO,WAAW,KAAO,EAAA;AAC/B,MAAM,MAAA,MAAA,GAAS,iBAAiB,IAAK,EAAA;AACrC,MAAA,IAAI,OAAO,IAAM,EAAA,OAAO,EAAE,IAAM,EAAA,IAAA,EAAM,OAAO,SAAU,EAAA;AAEvD,MAAO,MAAA,CAAA,IAAA,CAAK,OAAO,KAAK,CAAA;AAAA;AAGzB,IAAM,MAAA,KAAA,GAAQ,OAAO,KAAM,EAAA;AAC3B,IAAA,MAAA,CAAO,KAAM,EAAA;AACb,IAAO,OAAA,EAAE,IAAM,EAAA,KAAA,EAAO,KAAM,EAAA;AAAA,GAC5B,CAAA;AACF;AAjBgB,MAAA,CAAA,OAAA,EAAA,SAAA,CAAA","file":"windows.mjs","sourcesContent":["import { from, type IterableResolvable } from './from';\nimport { assertPositive } from './shared/_assertPositive';\nimport { makeIterableIterator } from './shared/_makeIterableIterator';\nimport { toIntegerOrInfinityOrThrow } from './shared/_toIntegerOrInfinityOrThrow';\n\n/**\n * Creates an iterable with arrays of `count` elements representing a sliding window.\n *\n * @param iterable The iterator to take values from.\n * @param count The maximum number of values in the window.\n * @returns An iterator that yields windows with `count` values from the provided iterator.\n *\n * @example\n * ```typescript\n * import { windows } from '@sapphire/iterator-utilities';\n *\n * const iterable = [1, 2, 3, 4, 5];\n * console.log([...windows(iterable, 2)]);\n * // Output: [[1, 2], [2, 3], [3, 4], [4, 5]]\n * ```\n */\nexport function windows<const ElementType>(iterable: IterableResolvable<ElementType>, count: number): IterableIterator<ElementType[]> {\n\tcount = assertPositive(toIntegerOrInfinityOrThrow(count), count);\n\n\tconst buffer = [] as ElementType[];\n\tconst resolvedIterable = from(iterable);\n\treturn makeIterableIterator<ElementType[]>(() => {\n\t\twhile (buffer.length !== count) {\n\t\t\tconst result = resolvedIterable.next();\n\t\t\tif (result.done) return { done: true, value: undefined };\n\n\t\t\tbuffer.push(result.value);\n\t\t}\n\n\t\tconst value = buffer.slice();\n\t\tbuffer.shift();\n\t\treturn { done: false, value };\n\t});\n}\n"]}
|
|
@@ -91,7 +91,7 @@ var SapphireIteratorUtilities = (function (exports) {
|
|
|
91
91
|
|
|
92
92
|
// src/lib/empty.ts
|
|
93
93
|
function empty() {
|
|
94
|
-
return makeIterableIterator(() => ({ done: true, value:
|
|
94
|
+
return makeIterableIterator(() => ({ done: true, value: undefined }));
|
|
95
95
|
}
|
|
96
96
|
__name(empty, "empty");
|
|
97
97
|
|
|
@@ -251,7 +251,7 @@ var SapphireIteratorUtilities = (function (exports) {
|
|
|
251
251
|
|
|
252
252
|
// src/lib/compact.ts
|
|
253
253
|
function compact(iterable) {
|
|
254
|
-
return filter(iterable, (value) => value !== null && value !==
|
|
254
|
+
return filter(iterable, (value) => value !== null && value !== undefined);
|
|
255
255
|
}
|
|
256
256
|
__name(compact, "compact");
|
|
257
257
|
|
|
@@ -382,7 +382,7 @@ var SapphireIteratorUtilities = (function (exports) {
|
|
|
382
382
|
let i = 0;
|
|
383
383
|
const resolvedIterable = from(iterable);
|
|
384
384
|
return makeIterableIterator(
|
|
385
|
-
() => i >= count2 ? { done: true, value:
|
|
385
|
+
() => i >= count2 ? { done: true, value: undefined } : (i++, resolvedIterable.next())
|
|
386
386
|
);
|
|
387
387
|
}
|
|
388
388
|
__name(take, "take");
|
|
@@ -489,7 +489,7 @@ var SapphireIteratorUtilities = (function (exports) {
|
|
|
489
489
|
const iterator = toIterableIterator(iterable);
|
|
490
490
|
return makeIterableIterator(() => {
|
|
491
491
|
if (ended) {
|
|
492
|
-
return { done: true, value:
|
|
492
|
+
return { done: true, value: undefined };
|
|
493
493
|
}
|
|
494
494
|
const result = iterator.next();
|
|
495
495
|
if (result.done) {
|
|
@@ -563,7 +563,7 @@ var SapphireIteratorUtilities = (function (exports) {
|
|
|
563
563
|
}
|
|
564
564
|
const result = iterator.next();
|
|
565
565
|
if (result.done) {
|
|
566
|
-
return { done: true, value:
|
|
566
|
+
return { done: true, value: undefined };
|
|
567
567
|
}
|
|
568
568
|
nextItem = result.value;
|
|
569
569
|
nextItemTaken = true;
|
|
@@ -764,7 +764,7 @@ var SapphireIteratorUtilities = (function (exports) {
|
|
|
764
764
|
next() {
|
|
765
765
|
if (peeked) {
|
|
766
766
|
const value = peeked;
|
|
767
|
-
peeked =
|
|
767
|
+
peeked = undefined;
|
|
768
768
|
return value;
|
|
769
769
|
}
|
|
770
770
|
return resolvedIterable.next();
|
|
@@ -802,7 +802,7 @@ var SapphireIteratorUtilities = (function (exports) {
|
|
|
802
802
|
function* range(start, end, step) {
|
|
803
803
|
start = toNumberOrThrow(start);
|
|
804
804
|
end = toNumberOrThrow(end);
|
|
805
|
-
if (step ===
|
|
805
|
+
if (step === undefined) {
|
|
806
806
|
step = start < end ? 1 : -1;
|
|
807
807
|
} else {
|
|
808
808
|
step = toNumberOrThrow(step);
|
|
@@ -854,7 +854,7 @@ var SapphireIteratorUtilities = (function (exports) {
|
|
|
854
854
|
count2 = assertNotNegative(toNumberOrThrow(count2), count2);
|
|
855
855
|
let i = 0;
|
|
856
856
|
return makeIterableIterator(
|
|
857
|
-
() => i >= count2 ? { done: true, value:
|
|
857
|
+
() => i >= count2 ? { done: true, value: undefined } : (i++, { done: false, value })
|
|
858
858
|
);
|
|
859
859
|
}
|
|
860
860
|
__name(repeat, "repeat");
|
|
@@ -877,7 +877,7 @@ var SapphireIteratorUtilities = (function (exports) {
|
|
|
877
877
|
let i = Math.max(0, array.length - count2);
|
|
878
878
|
return makeIterableIterator(() => {
|
|
879
879
|
if (i >= array.length) {
|
|
880
|
-
return { done: true, value:
|
|
880
|
+
return { done: true, value: undefined };
|
|
881
881
|
}
|
|
882
882
|
return { done: false, value: array[i++] };
|
|
883
883
|
});
|
|
@@ -890,7 +890,7 @@ var SapphireIteratorUtilities = (function (exports) {
|
|
|
890
890
|
if (start === Number.NEGATIVE_INFINITY) {
|
|
891
891
|
start = 0;
|
|
892
892
|
}
|
|
893
|
-
if (end ===
|
|
893
|
+
if (end === undefined) {
|
|
894
894
|
return start >= 0 ? drop(iterable, start) : takeLast(iterable, -start);
|
|
895
895
|
}
|
|
896
896
|
end = toIntegerOrInfinityOrThrow(end);
|
|
@@ -936,7 +936,7 @@ var SapphireIteratorUtilities = (function (exports) {
|
|
|
936
936
|
return makeIterableIterator(() => {
|
|
937
937
|
const result = iterator.next();
|
|
938
938
|
if (result.done) {
|
|
939
|
-
return { done: true, value:
|
|
939
|
+
return { done: true, value: undefined };
|
|
940
940
|
}
|
|
941
941
|
for (let i = 0; i < step - 1; i++) {
|
|
942
942
|
const result2 = iterator.next();
|
|
@@ -970,7 +970,7 @@ var SapphireIteratorUtilities = (function (exports) {
|
|
|
970
970
|
if (indexes[i] >= entries.length) {
|
|
971
971
|
const result = resolvedIterable.next();
|
|
972
972
|
if (result.done) {
|
|
973
|
-
return { done: true, value:
|
|
973
|
+
return { done: true, value: undefined };
|
|
974
974
|
}
|
|
975
975
|
entries.push(result.value);
|
|
976
976
|
}
|
|
@@ -1030,6 +1030,24 @@ var SapphireIteratorUtilities = (function (exports) {
|
|
|
1030
1030
|
}
|
|
1031
1031
|
__name(unzip, "unzip");
|
|
1032
1032
|
|
|
1033
|
+
// src/lib/windows.ts
|
|
1034
|
+
function windows(iterable, count2) {
|
|
1035
|
+
count2 = assertPositive(toIntegerOrInfinityOrThrow(count2), count2);
|
|
1036
|
+
const buffer = [];
|
|
1037
|
+
const resolvedIterable = from(iterable);
|
|
1038
|
+
return makeIterableIterator(() => {
|
|
1039
|
+
while (buffer.length !== count2) {
|
|
1040
|
+
const result = resolvedIterable.next();
|
|
1041
|
+
if (result.done) return { done: true, value: undefined };
|
|
1042
|
+
buffer.push(result.value);
|
|
1043
|
+
}
|
|
1044
|
+
const value = buffer.slice();
|
|
1045
|
+
buffer.shift();
|
|
1046
|
+
return { done: false, value };
|
|
1047
|
+
});
|
|
1048
|
+
}
|
|
1049
|
+
__name(windows, "windows");
|
|
1050
|
+
|
|
1033
1051
|
// src/lib/zip.ts
|
|
1034
1052
|
function* zip(...iterables) {
|
|
1035
1053
|
const resolvedIterables = iterables.map((iterable) => from(iterable));
|
|
@@ -1143,6 +1161,7 @@ var SapphireIteratorUtilities = (function (exports) {
|
|
|
1143
1161
|
exports.union = union;
|
|
1144
1162
|
exports.unique = unique;
|
|
1145
1163
|
exports.unzip = unzip;
|
|
1164
|
+
exports.windows = windows;
|
|
1146
1165
|
exports.zip = zip;
|
|
1147
1166
|
|
|
1148
1167
|
return exports;
|