es-toolkit 1.48.1-dev.1889 → 1.48.1-dev.1894
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/array/chunkBy.d.mts +32 -0
- package/dist/array/chunkBy.d.ts +32 -0
- package/dist/array/chunkBy.js +42 -0
- package/dist/array/chunkBy.mjs +42 -0
- package/dist/array/index.d.mts +2 -1
- package/dist/array/index.d.ts +2 -1
- package/dist/array/index.js +2 -0
- package/dist/array/index.mjs +2 -1
- package/dist/array/take.d.mts +1 -7
- package/dist/array/take.d.ts +1 -7
- package/dist/array/take.js +1 -9
- package/dist/array/take.mjs +1 -9
- package/dist/array/takeRight.d.mts +2 -2
- package/dist/array/takeRight.d.ts +2 -2
- package/dist/array/takeRight.js +2 -4
- package/dist/array/takeRight.mjs +2 -4
- package/dist/array/windowed.d.mts +1 -1
- package/dist/array/windowed.d.ts +1 -1
- package/dist/browser.global.js +3 -3
- package/dist/compat/array/drop.js +1 -1
- package/dist/compat/array/drop.mjs +1 -1
- package/dist/compat/array/dropRight.js +1 -1
- package/dist/compat/array/dropRight.mjs +1 -1
- package/dist/compat/array/findLast.js +1 -1
- package/dist/compat/array/findLast.mjs +1 -1
- package/dist/compat/array/includes.js +1 -1
- package/dist/compat/array/includes.mjs +1 -1
- package/dist/compat/array/nth.js +1 -1
- package/dist/compat/array/nth.mjs +1 -1
- package/dist/compat/array/slice.js +1 -1
- package/dist/compat/array/slice.mjs +1 -1
- package/dist/compat/array/sortedIndexBy.js +1 -1
- package/dist/compat/array/sortedIndexBy.mjs +1 -1
- package/dist/compat/array/take.js +2 -2
- package/dist/compat/array/take.mjs +2 -2
- package/dist/compat/array/takeRight.js +1 -1
- package/dist/compat/array/takeRight.mjs +1 -1
- package/dist/compat/compat.js +4 -4
- package/dist/compat/compat.mjs +4 -4
- package/dist/compat/index.js +4 -4
- package/dist/compat/index.mjs +4 -4
- package/dist/compat/math/add.js +1 -1
- package/dist/compat/math/add.mjs +1 -1
- package/dist/compat/math/divide.js +1 -1
- package/dist/compat/math/divide.mjs +1 -1
- package/dist/compat/math/multiply.js +1 -1
- package/dist/compat/math/multiply.mjs +1 -1
- package/dist/compat/math/subtract.js +1 -1
- package/dist/compat/math/subtract.mjs +1 -1
- package/dist/compat/object/omitBy.js +1 -1
- package/dist/compat/object/omitBy.mjs +1 -1
- package/dist/compat/object/pickBy.js +1 -1
- package/dist/compat/object/pickBy.mjs +1 -1
- package/dist/compat/string/repeat.js +1 -1
- package/dist/compat/string/repeat.mjs +1 -1
- package/dist/fp/_internal/lazy.js +58 -0
- package/dist/fp/_internal/lazy.mjs +57 -0
- package/dist/fp/array/at.d.mts +20 -0
- package/dist/fp/array/at.d.ts +20 -0
- package/dist/fp/array/at.js +25 -0
- package/dist/fp/array/at.mjs +25 -0
- package/dist/fp/array/cartesianProduct.d.mts +61 -0
- package/dist/fp/array/cartesianProduct.d.ts +61 -0
- package/dist/fp/array/cartesianProduct.js +9 -0
- package/dist/fp/array/cartesianProduct.mjs +9 -0
- package/dist/fp/array/chunk.d.mts +19 -0
- package/dist/fp/array/chunk.d.ts +19 -0
- package/dist/fp/array/chunk.js +24 -0
- package/dist/fp/array/chunk.mjs +24 -0
- package/dist/fp/array/chunkBy.d.mts +20 -0
- package/dist/fp/array/chunkBy.d.ts +20 -0
- package/dist/fp/array/chunkBy.js +25 -0
- package/dist/fp/array/chunkBy.mjs +25 -0
- package/dist/fp/array/combinations.d.mts +21 -0
- package/dist/fp/array/combinations.d.ts +21 -0
- package/dist/fp/array/combinations.js +26 -0
- package/dist/fp/array/combinations.mjs +26 -0
- package/dist/fp/array/compact.d.mts +22 -0
- package/dist/fp/array/compact.d.ts +22 -0
- package/dist/fp/array/compact.js +31 -0
- package/dist/fp/array/compact.mjs +30 -0
- package/dist/fp/array/countBy.d.mts +21 -0
- package/dist/fp/array/countBy.d.ts +21 -0
- package/dist/fp/array/countBy.js +26 -0
- package/dist/fp/array/countBy.mjs +26 -0
- package/dist/fp/array/difference.d.mts +21 -0
- package/dist/fp/array/difference.d.ts +21 -0
- package/dist/fp/array/difference.js +32 -0
- package/dist/fp/array/difference.mjs +31 -0
- package/dist/fp/array/differenceBy.d.mts +22 -0
- package/dist/fp/array/differenceBy.d.ts +22 -0
- package/dist/fp/array/differenceBy.js +33 -0
- package/dist/fp/array/differenceBy.mjs +32 -0
- package/dist/fp/array/differenceWith.d.mts +22 -0
- package/dist/fp/array/differenceWith.d.ts +22 -0
- package/dist/fp/array/differenceWith.js +32 -0
- package/dist/fp/array/differenceWith.mjs +31 -0
- package/dist/fp/array/drop.d.mts +20 -0
- package/dist/fp/array/drop.d.ts +20 -0
- package/dist/fp/array/drop.js +31 -0
- package/dist/fp/array/drop.mjs +30 -0
- package/dist/fp/array/dropRight.d.mts +20 -0
- package/dist/fp/array/dropRight.d.ts +20 -0
- package/dist/fp/array/dropRight.js +25 -0
- package/dist/fp/array/dropRight.mjs +25 -0
- package/dist/fp/array/dropRightWhile.d.mts +20 -0
- package/dist/fp/array/dropRightWhile.d.ts +20 -0
- package/dist/fp/array/dropRightWhile.js +25 -0
- package/dist/fp/array/dropRightWhile.mjs +25 -0
- package/dist/fp/array/dropWhile.d.mts +20 -0
- package/dist/fp/array/dropWhile.d.ts +20 -0
- package/dist/fp/array/dropWhile.js +36 -0
- package/dist/fp/array/dropWhile.mjs +36 -0
- package/dist/fp/array/filter.d.mts +45 -0
- package/dist/fp/array/filter.d.ts +45 -0
- package/dist/fp/array/filter.js +13 -0
- package/dist/fp/array/filter.mjs +12 -0
- package/dist/fp/array/find.d.mts +39 -0
- package/dist/fp/array/find.d.ts +39 -0
- package/dist/fp/array/find.js +8 -0
- package/dist/fp/array/find.mjs +8 -0
- package/dist/fp/array/findIndex.d.mts +20 -0
- package/dist/fp/array/findIndex.d.ts +20 -0
- package/dist/fp/array/findIndex.js +24 -0
- package/dist/fp/array/findIndex.mjs +24 -0
- package/dist/fp/array/findLast.d.mts +39 -0
- package/dist/fp/array/findLast.d.ts +39 -0
- package/dist/fp/array/findLast.js +11 -0
- package/dist/fp/array/findLast.mjs +11 -0
- package/dist/fp/array/findLastIndex.d.mts +20 -0
- package/dist/fp/array/findLastIndex.d.ts +20 -0
- package/dist/fp/array/findLastIndex.js +25 -0
- package/dist/fp/array/findLastIndex.mjs +25 -0
- package/dist/fp/array/flatMap.d.mts +28 -0
- package/dist/fp/array/flatMap.d.ts +28 -0
- package/dist/fp/array/flatMap.js +39 -0
- package/dist/fp/array/flatMap.mjs +38 -0
- package/dist/fp/array/flatMapDeep.d.mts +23 -0
- package/dist/fp/array/flatMapDeep.d.ts +23 -0
- package/dist/fp/array/flatMapDeep.js +38 -0
- package/dist/fp/array/flatMapDeep.mjs +37 -0
- package/dist/fp/array/flatten.d.mts +21 -0
- package/dist/fp/array/flatten.d.ts +21 -0
- package/dist/fp/array/flatten.js +39 -0
- package/dist/fp/array/flatten.mjs +38 -0
- package/dist/fp/array/flattenDeep.d.mts +21 -0
- package/dist/fp/array/flattenDeep.d.ts +21 -0
- package/dist/fp/array/flattenDeep.js +36 -0
- package/dist/fp/array/flattenDeep.mjs +35 -0
- package/dist/fp/array/forEach.d.mts +22 -0
- package/dist/fp/array/forEach.d.ts +22 -0
- package/dist/fp/array/forEach.js +33 -0
- package/dist/fp/array/forEach.mjs +32 -0
- package/dist/fp/array/groupBy.d.mts +21 -0
- package/dist/fp/array/groupBy.d.ts +21 -0
- package/dist/fp/array/groupBy.js +26 -0
- package/dist/fp/array/groupBy.mjs +26 -0
- package/dist/fp/array/head.d.mts +35 -0
- package/dist/fp/array/head.d.ts +35 -0
- package/dist/fp/array/head.js +9 -0
- package/dist/fp/array/head.mjs +9 -0
- package/dist/fp/array/index.d.mts +69 -0
- package/dist/fp/array/index.d.ts +69 -0
- package/dist/fp/array/index.js +68 -0
- package/dist/fp/array/index.mjs +68 -0
- package/dist/fp/array/initial.d.mts +19 -0
- package/dist/fp/array/initial.d.ts +19 -0
- package/dist/fp/array/initial.js +24 -0
- package/dist/fp/array/initial.mjs +24 -0
- package/dist/fp/array/intersection.d.mts +21 -0
- package/dist/fp/array/intersection.d.ts +21 -0
- package/dist/fp/array/intersection.js +32 -0
- package/dist/fp/array/intersection.mjs +31 -0
- package/dist/fp/array/intersectionBy.d.mts +22 -0
- package/dist/fp/array/intersectionBy.d.ts +22 -0
- package/dist/fp/array/intersectionBy.js +33 -0
- package/dist/fp/array/intersectionBy.mjs +32 -0
- package/dist/fp/array/intersectionWith.d.mts +22 -0
- package/dist/fp/array/intersectionWith.d.ts +22 -0
- package/dist/fp/array/intersectionWith.js +32 -0
- package/dist/fp/array/intersectionWith.mjs +31 -0
- package/dist/fp/array/isSubset.d.mts +20 -0
- package/dist/fp/array/isSubset.d.ts +20 -0
- package/dist/fp/array/isSubset.js +25 -0
- package/dist/fp/array/isSubset.mjs +25 -0
- package/dist/fp/array/isSubsetWith.d.mts +21 -0
- package/dist/fp/array/isSubsetWith.d.ts +21 -0
- package/dist/fp/array/isSubsetWith.js +26 -0
- package/dist/fp/array/isSubsetWith.mjs +26 -0
- package/dist/fp/array/join.d.mts +20 -0
- package/dist/fp/array/join.d.ts +20 -0
- package/dist/fp/array/join.js +24 -0
- package/dist/fp/array/join.mjs +24 -0
- package/dist/fp/array/keyBy.d.mts +21 -0
- package/dist/fp/array/keyBy.d.ts +21 -0
- package/dist/fp/array/keyBy.js +26 -0
- package/dist/fp/array/keyBy.mjs +26 -0
- package/dist/fp/array/last.d.mts +35 -0
- package/dist/fp/array/last.d.ts +35 -0
- package/dist/fp/array/last.js +9 -0
- package/dist/fp/array/last.mjs +9 -0
- package/dist/fp/array/length.d.mts +18 -0
- package/dist/fp/array/length.d.ts +18 -0
- package/dist/fp/array/length.js +22 -0
- package/dist/fp/array/length.mjs +22 -0
- package/dist/fp/array/map.d.mts +27 -0
- package/dist/fp/array/map.d.ts +27 -0
- package/dist/fp/array/map.js +36 -0
- package/dist/fp/array/map.mjs +35 -0
- package/dist/fp/array/maxBy.d.mts +37 -0
- package/dist/fp/array/maxBy.d.ts +37 -0
- package/dist/fp/array/maxBy.js +9 -0
- package/dist/fp/array/maxBy.mjs +9 -0
- package/dist/fp/array/minBy.d.mts +37 -0
- package/dist/fp/array/minBy.d.ts +37 -0
- package/dist/fp/array/minBy.js +9 -0
- package/dist/fp/array/minBy.mjs +9 -0
- package/dist/fp/array/orderBy.d.mts +21 -0
- package/dist/fp/array/orderBy.d.ts +21 -0
- package/dist/fp/array/orderBy.js +26 -0
- package/dist/fp/array/orderBy.mjs +26 -0
- package/dist/fp/array/partition.d.mts +39 -0
- package/dist/fp/array/partition.d.ts +39 -0
- package/dist/fp/array/partition.js +9 -0
- package/dist/fp/array/partition.mjs +9 -0
- package/dist/fp/array/reverse.d.mts +19 -0
- package/dist/fp/array/reverse.d.ts +19 -0
- package/dist/fp/array/reverse.js +23 -0
- package/dist/fp/array/reverse.mjs +23 -0
- package/dist/fp/array/sample.d.mts +18 -0
- package/dist/fp/array/sample.d.ts +18 -0
- package/dist/fp/array/sample.js +23 -0
- package/dist/fp/array/sample.mjs +23 -0
- package/dist/fp/array/sampleSize.d.mts +20 -0
- package/dist/fp/array/sampleSize.d.ts +20 -0
- package/dist/fp/array/sampleSize.js +25 -0
- package/dist/fp/array/sampleSize.mjs +25 -0
- package/dist/fp/array/shuffle.d.mts +19 -0
- package/dist/fp/array/shuffle.d.ts +19 -0
- package/dist/fp/array/shuffle.js +24 -0
- package/dist/fp/array/shuffle.mjs +24 -0
- package/dist/fp/array/sortBy.d.mts +26 -0
- package/dist/fp/array/sortBy.d.ts +26 -0
- package/dist/fp/array/sortBy.js +31 -0
- package/dist/fp/array/sortBy.mjs +31 -0
- package/dist/fp/array/tail.d.mts +19 -0
- package/dist/fp/array/tail.d.ts +19 -0
- package/dist/fp/array/tail.js +24 -0
- package/dist/fp/array/tail.mjs +24 -0
- package/dist/fp/array/take.d.mts +26 -0
- package/dist/fp/array/take.d.ts +26 -0
- package/dist/fp/array/take.js +39 -0
- package/dist/fp/array/take.mjs +38 -0
- package/dist/fp/array/takeRight.d.mts +20 -0
- package/dist/fp/array/takeRight.d.ts +20 -0
- package/dist/fp/array/takeRight.js +25 -0
- package/dist/fp/array/takeRight.mjs +25 -0
- package/dist/fp/array/takeRightWhile.d.mts +20 -0
- package/dist/fp/array/takeRightWhile.d.ts +20 -0
- package/dist/fp/array/takeRightWhile.js +25 -0
- package/dist/fp/array/takeRightWhile.mjs +25 -0
- package/dist/fp/array/takeWhile.d.mts +21 -0
- package/dist/fp/array/takeWhile.d.ts +21 -0
- package/dist/fp/array/takeWhile.js +32 -0
- package/dist/fp/array/takeWhile.mjs +31 -0
- package/dist/fp/array/toFilled.d.mts +23 -0
- package/dist/fp/array/toFilled.d.ts +23 -0
- package/dist/fp/array/toFilled.js +30 -0
- package/dist/fp/array/toFilled.mjs +30 -0
- package/dist/fp/array/union.d.mts +20 -0
- package/dist/fp/array/union.d.ts +20 -0
- package/dist/fp/array/union.js +25 -0
- package/dist/fp/array/union.mjs +25 -0
- package/dist/fp/array/unionBy.d.mts +22 -0
- package/dist/fp/array/unionBy.d.ts +22 -0
- package/dist/fp/array/unionBy.js +27 -0
- package/dist/fp/array/unionBy.mjs +27 -0
- package/dist/fp/array/unionWith.d.mts +21 -0
- package/dist/fp/array/unionWith.d.ts +21 -0
- package/dist/fp/array/unionWith.js +26 -0
- package/dist/fp/array/unionWith.mjs +26 -0
- package/dist/fp/array/uniq.d.mts +21 -0
- package/dist/fp/array/uniq.d.ts +21 -0
- package/dist/fp/array/uniq.js +36 -0
- package/dist/fp/array/uniq.mjs +36 -0
- package/dist/fp/array/uniqBy.d.mts +21 -0
- package/dist/fp/array/uniqBy.d.ts +21 -0
- package/dist/fp/array/uniqBy.js +38 -0
- package/dist/fp/array/uniqBy.mjs +38 -0
- package/dist/fp/array/uniqWith.d.mts +20 -0
- package/dist/fp/array/uniqWith.d.ts +20 -0
- package/dist/fp/array/uniqWith.js +35 -0
- package/dist/fp/array/uniqWith.mjs +35 -0
- package/dist/fp/array/unzip.d.mts +20 -0
- package/dist/fp/array/unzip.d.ts +20 -0
- package/dist/fp/array/unzip.js +24 -0
- package/dist/fp/array/unzip.mjs +24 -0
- package/dist/fp/array/unzipWith.d.mts +21 -0
- package/dist/fp/array/unzipWith.d.ts +21 -0
- package/dist/fp/array/unzipWith.js +26 -0
- package/dist/fp/array/unzipWith.mjs +26 -0
- package/dist/fp/array/windowed.d.mts +25 -0
- package/dist/fp/array/windowed.d.ts +25 -0
- package/dist/fp/array/windowed.js +50 -0
- package/dist/fp/array/windowed.mjs +50 -0
- package/dist/fp/array/without.d.mts +19 -0
- package/dist/fp/array/without.d.ts +19 -0
- package/dist/fp/array/without.js +30 -0
- package/dist/fp/array/without.mjs +29 -0
- package/dist/fp/array/xor.d.mts +20 -0
- package/dist/fp/array/xor.d.ts +20 -0
- package/dist/fp/array/xor.js +25 -0
- package/dist/fp/array/xor.mjs +25 -0
- package/dist/fp/array/xorBy.d.mts +22 -0
- package/dist/fp/array/xorBy.d.ts +22 -0
- package/dist/fp/array/xorBy.js +27 -0
- package/dist/fp/array/xorBy.mjs +27 -0
- package/dist/fp/array/xorWith.d.mts +21 -0
- package/dist/fp/array/xorWith.d.ts +21 -0
- package/dist/fp/array/xorWith.js +26 -0
- package/dist/fp/array/xorWith.mjs +26 -0
- package/dist/fp/array/zip.d.mts +61 -0
- package/dist/fp/array/zip.d.ts +61 -0
- package/dist/fp/array/zip.js +9 -0
- package/dist/fp/array/zip.mjs +9 -0
- package/dist/fp/array/zipObject.d.mts +21 -0
- package/dist/fp/array/zipObject.d.ts +21 -0
- package/dist/fp/array/zipObject.js +26 -0
- package/dist/fp/array/zipObject.mjs +26 -0
- package/dist/fp/array/zipWith.d.mts +57 -0
- package/dist/fp/array/zipWith.d.ts +57 -0
- package/dist/fp/array/zipWith.js +9 -0
- package/dist/fp/array/zipWith.mjs +9 -0
- package/dist/fp/index.d.mts +75 -0
- package/dist/fp/index.d.ts +75 -0
- package/dist/fp/index.js +150 -0
- package/dist/fp/index.mjs +77 -0
- package/dist/fp/math/add.d.mts +17 -0
- package/dist/fp/math/add.d.ts +17 -0
- package/dist/fp/math/add.js +21 -0
- package/dist/fp/math/add.mjs +21 -0
- package/dist/fp/math/index.d.mts +2 -0
- package/dist/fp/math/index.d.ts +2 -0
- package/dist/fp/math/index.js +2 -0
- package/dist/fp/math/index.mjs +2 -0
- package/dist/fp/math/multiply.d.mts +17 -0
- package/dist/fp/math/multiply.d.ts +17 -0
- package/dist/fp/math/multiply.js +21 -0
- package/dist/fp/math/multiply.mjs +21 -0
- package/dist/fp/object/index.d.mts +2 -0
- package/dist/fp/object/index.d.ts +2 -0
- package/dist/fp/object/index.js +2 -0
- package/dist/fp/object/index.mjs +2 -0
- package/dist/fp/object/omit.d.mts +18 -0
- package/dist/fp/object/omit.d.ts +18 -0
- package/dist/fp/object/omit.js +23 -0
- package/dist/fp/object/omit.mjs +23 -0
- package/dist/fp/object/pick.d.mts +19 -0
- package/dist/fp/object/pick.d.ts +19 -0
- package/dist/fp/object/pick.js +24 -0
- package/dist/fp/object/pick.mjs +24 -0
- package/dist/fp/pipe.d.mts +235 -0
- package/dist/fp/pipe.d.ts +235 -0
- package/dist/fp/pipe.js +116 -0
- package/dist/fp/pipe.mjs +116 -0
- package/dist/index.d.mts +3 -1
- package/dist/index.d.ts +3 -1
- package/dist/index.js +4 -0
- package/dist/index.mjs +3 -1
- package/dist/predicate/index.d.mts +2 -1
- package/dist/predicate/index.d.ts +2 -1
- package/dist/predicate/index.js +2 -0
- package/dist/predicate/index.mjs +2 -1
- package/dist/predicate/isIterable.d.mts +26 -0
- package/dist/predicate/isIterable.d.ts +26 -0
- package/dist/predicate/isIterable.js +28 -0
- package/dist/predicate/isIterable.mjs +28 -0
- package/fp.d.ts +1 -0
- package/fp.js +1 -0
- package/package.json +22 -1
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
const require_uniqBy = require("../../array/uniqBy.js");
|
|
2
|
+
const require_lazy = require("../_internal/lazy.js");
|
|
3
|
+
//#region src/fp/array/uniqBy.ts
|
|
4
|
+
/**
|
|
5
|
+
* Creates a function that removes duplicate values by mapped identity.
|
|
6
|
+
*
|
|
7
|
+
* The first value for each mapped key is preserved. The returned function is
|
|
8
|
+
* lazy-capable inside {@link pipe}.
|
|
9
|
+
*
|
|
10
|
+
* @template T - The type of elements in the array.
|
|
11
|
+
* @template U - The type of comparison keys returned by the mapper.
|
|
12
|
+
* @param mapper - Called with each value and index to produce a comparison key.
|
|
13
|
+
* @returns A function that maps the piped array to unique values.
|
|
14
|
+
*
|
|
15
|
+
* @example
|
|
16
|
+
* import { pipe, uniqBy } from 'es-toolkit/fp';
|
|
17
|
+
*
|
|
18
|
+
* pipe([{ id: 1 }, { id: 1 }, { id: 2 }], uniqBy(item => item.id));
|
|
19
|
+
* // => [{ id: 1 }, { id: 2 }]
|
|
20
|
+
*/
|
|
21
|
+
function uniqBy(mapper) {
|
|
22
|
+
function uniqByEager(array) {
|
|
23
|
+
return require_uniqBy.uniqBy(array, (item, index) => mapper(item, index));
|
|
24
|
+
}
|
|
25
|
+
const uniqByLazy = (emit) => {
|
|
26
|
+
const seen = /* @__PURE__ */ new Set();
|
|
27
|
+
let index = 0;
|
|
28
|
+
return (value) => {
|
|
29
|
+
const key = mapper(value, index++);
|
|
30
|
+
if (seen.has(key)) return true;
|
|
31
|
+
seen.add(key);
|
|
32
|
+
return emit(value);
|
|
33
|
+
};
|
|
34
|
+
};
|
|
35
|
+
return require_lazy.combineEagerAndLazyFunctions(uniqByEager, uniqByLazy);
|
|
36
|
+
}
|
|
37
|
+
//#endregion
|
|
38
|
+
exports.uniqBy = uniqBy;
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { uniqBy as uniqBy$1 } from "../../array/uniqBy.mjs";
|
|
2
|
+
import { combineEagerAndLazyFunctions } from "../_internal/lazy.mjs";
|
|
3
|
+
//#region src/fp/array/uniqBy.ts
|
|
4
|
+
/**
|
|
5
|
+
* Creates a function that removes duplicate values by mapped identity.
|
|
6
|
+
*
|
|
7
|
+
* The first value for each mapped key is preserved. The returned function is
|
|
8
|
+
* lazy-capable inside {@link pipe}.
|
|
9
|
+
*
|
|
10
|
+
* @template T - The type of elements in the array.
|
|
11
|
+
* @template U - The type of comparison keys returned by the mapper.
|
|
12
|
+
* @param mapper - Called with each value and index to produce a comparison key.
|
|
13
|
+
* @returns A function that maps the piped array to unique values.
|
|
14
|
+
*
|
|
15
|
+
* @example
|
|
16
|
+
* import { pipe, uniqBy } from 'es-toolkit/fp';
|
|
17
|
+
*
|
|
18
|
+
* pipe([{ id: 1 }, { id: 1 }, { id: 2 }], uniqBy(item => item.id));
|
|
19
|
+
* // => [{ id: 1 }, { id: 2 }]
|
|
20
|
+
*/
|
|
21
|
+
function uniqBy(mapper) {
|
|
22
|
+
function uniqByEager(array) {
|
|
23
|
+
return uniqBy$1(array, (item, index) => mapper(item, index));
|
|
24
|
+
}
|
|
25
|
+
const uniqByLazy = (emit) => {
|
|
26
|
+
const seen = /* @__PURE__ */ new Set();
|
|
27
|
+
let index = 0;
|
|
28
|
+
return (value) => {
|
|
29
|
+
const key = mapper(value, index++);
|
|
30
|
+
if (seen.has(key)) return true;
|
|
31
|
+
seen.add(key);
|
|
32
|
+
return emit(value);
|
|
33
|
+
};
|
|
34
|
+
};
|
|
35
|
+
return combineEagerAndLazyFunctions(uniqByEager, uniqByLazy);
|
|
36
|
+
}
|
|
37
|
+
//#endregion
|
|
38
|
+
export { uniqBy };
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
//#region src/fp/array/uniqWith.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* Creates a function that removes duplicate values using a custom equality function.
|
|
4
|
+
*
|
|
5
|
+
* The first value in each equality group is preserved. The returned function is
|
|
6
|
+
* lazy-capable inside {@link pipe}.
|
|
7
|
+
*
|
|
8
|
+
* @template T - The type of elements in the array.
|
|
9
|
+
* @param areItemsEqual - Returns true when two values should be treated as equal.
|
|
10
|
+
* @returns A function that maps the piped array to unique values.
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* import { pipe, uniqWith } from 'es-toolkit/fp';
|
|
14
|
+
*
|
|
15
|
+
* pipe([{ id: 1 }, { id: 1 }, { id: 2 }], uniqWith((a, b) => a.id === b.id));
|
|
16
|
+
* // => [{ id: 1 }, { id: 2 }]
|
|
17
|
+
*/
|
|
18
|
+
declare function uniqWith<T>(areItemsEqual: (item: T, other: T) => boolean): (array: readonly T[]) => T[];
|
|
19
|
+
//#endregion
|
|
20
|
+
export { uniqWith };
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
//#region src/fp/array/uniqWith.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* Creates a function that removes duplicate values using a custom equality function.
|
|
4
|
+
*
|
|
5
|
+
* The first value in each equality group is preserved. The returned function is
|
|
6
|
+
* lazy-capable inside {@link pipe}.
|
|
7
|
+
*
|
|
8
|
+
* @template T - The type of elements in the array.
|
|
9
|
+
* @param areItemsEqual - Returns true when two values should be treated as equal.
|
|
10
|
+
* @returns A function that maps the piped array to unique values.
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* import { pipe, uniqWith } from 'es-toolkit/fp';
|
|
14
|
+
*
|
|
15
|
+
* pipe([{ id: 1 }, { id: 1 }, { id: 2 }], uniqWith((a, b) => a.id === b.id));
|
|
16
|
+
* // => [{ id: 1 }, { id: 2 }]
|
|
17
|
+
*/
|
|
18
|
+
declare function uniqWith<T>(areItemsEqual: (item: T, other: T) => boolean): (array: readonly T[]) => T[];
|
|
19
|
+
//#endregion
|
|
20
|
+
export { uniqWith };
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
const require_uniqWith = require("../../array/uniqWith.js");
|
|
2
|
+
const require_lazy = require("../_internal/lazy.js");
|
|
3
|
+
//#region src/fp/array/uniqWith.ts
|
|
4
|
+
/**
|
|
5
|
+
* Creates a function that removes duplicate values using a custom equality function.
|
|
6
|
+
*
|
|
7
|
+
* The first value in each equality group is preserved. The returned function is
|
|
8
|
+
* lazy-capable inside {@link pipe}.
|
|
9
|
+
*
|
|
10
|
+
* @template T - The type of elements in the array.
|
|
11
|
+
* @param areItemsEqual - Returns true when two values should be treated as equal.
|
|
12
|
+
* @returns A function that maps the piped array to unique values.
|
|
13
|
+
*
|
|
14
|
+
* @example
|
|
15
|
+
* import { pipe, uniqWith } from 'es-toolkit/fp';
|
|
16
|
+
*
|
|
17
|
+
* pipe([{ id: 1 }, { id: 1 }, { id: 2 }], uniqWith((a, b) => a.id === b.id));
|
|
18
|
+
* // => [{ id: 1 }, { id: 2 }]
|
|
19
|
+
*/
|
|
20
|
+
function uniqWith(areItemsEqual) {
|
|
21
|
+
function uniqWithEager(array) {
|
|
22
|
+
return require_uniqWith.uniqWith(array, areItemsEqual);
|
|
23
|
+
}
|
|
24
|
+
const uniqWithLazy = (emit) => {
|
|
25
|
+
const seen = [];
|
|
26
|
+
return (value) => {
|
|
27
|
+
if (seen.some((item) => areItemsEqual(item, value))) return true;
|
|
28
|
+
seen.push(value);
|
|
29
|
+
return emit(value);
|
|
30
|
+
};
|
|
31
|
+
};
|
|
32
|
+
return require_lazy.combineEagerAndLazyFunctions(uniqWithEager, uniqWithLazy);
|
|
33
|
+
}
|
|
34
|
+
//#endregion
|
|
35
|
+
exports.uniqWith = uniqWith;
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { uniqWith as uniqWith$1 } from "../../array/uniqWith.mjs";
|
|
2
|
+
import { combineEagerAndLazyFunctions } from "../_internal/lazy.mjs";
|
|
3
|
+
//#region src/fp/array/uniqWith.ts
|
|
4
|
+
/**
|
|
5
|
+
* Creates a function that removes duplicate values using a custom equality function.
|
|
6
|
+
*
|
|
7
|
+
* The first value in each equality group is preserved. The returned function is
|
|
8
|
+
* lazy-capable inside {@link pipe}.
|
|
9
|
+
*
|
|
10
|
+
* @template T - The type of elements in the array.
|
|
11
|
+
* @param areItemsEqual - Returns true when two values should be treated as equal.
|
|
12
|
+
* @returns A function that maps the piped array to unique values.
|
|
13
|
+
*
|
|
14
|
+
* @example
|
|
15
|
+
* import { pipe, uniqWith } from 'es-toolkit/fp';
|
|
16
|
+
*
|
|
17
|
+
* pipe([{ id: 1 }, { id: 1 }, { id: 2 }], uniqWith((a, b) => a.id === b.id));
|
|
18
|
+
* // => [{ id: 1 }, { id: 2 }]
|
|
19
|
+
*/
|
|
20
|
+
function uniqWith(areItemsEqual) {
|
|
21
|
+
function uniqWithEager(array) {
|
|
22
|
+
return uniqWith$1(array, areItemsEqual);
|
|
23
|
+
}
|
|
24
|
+
const uniqWithLazy = (emit) => {
|
|
25
|
+
const seen = [];
|
|
26
|
+
return (value) => {
|
|
27
|
+
if (seen.some((item) => areItemsEqual(item, value))) return true;
|
|
28
|
+
seen.push(value);
|
|
29
|
+
return emit(value);
|
|
30
|
+
};
|
|
31
|
+
};
|
|
32
|
+
return combineEagerAndLazyFunctions(uniqWithEager, uniqWithLazy);
|
|
33
|
+
}
|
|
34
|
+
//#endregion
|
|
35
|
+
export { uniqWith };
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
//#region src/fp/array/unzip.d.ts
|
|
2
|
+
type Unzip<K extends unknown[]> = { [I in keyof K]: Array<K[I]> };
|
|
3
|
+
/**
|
|
4
|
+
* Creates a function that unzips grouped tuples into arrays by position.
|
|
5
|
+
*
|
|
6
|
+
* The returned function is the data-last form of the main {@link unzip} utility.
|
|
7
|
+
* Use it with {@link pipe}.
|
|
8
|
+
*
|
|
9
|
+
* @template T - The tuple type inside the zipped array.
|
|
10
|
+
* @returns A function that maps zipped tuples to arrays grouped by tuple position.
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* import { pipe, unzip } from 'es-toolkit/fp';
|
|
14
|
+
*
|
|
15
|
+
* pipe([[1, 'a'], [2, 'b']] as Array<[number, string]>, unzip());
|
|
16
|
+
* // => [[1, 2], ['a', 'b']]
|
|
17
|
+
*/
|
|
18
|
+
declare function unzip<T extends unknown[]>(): (zipped: ReadonlyArray<[...T]>) => Unzip<T>;
|
|
19
|
+
//#endregion
|
|
20
|
+
export { unzip };
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
//#region src/fp/array/unzip.d.ts
|
|
2
|
+
type Unzip<K extends unknown[]> = { [I in keyof K]: Array<K[I]> };
|
|
3
|
+
/**
|
|
4
|
+
* Creates a function that unzips grouped tuples into arrays by position.
|
|
5
|
+
*
|
|
6
|
+
* The returned function is the data-last form of the main {@link unzip} utility.
|
|
7
|
+
* Use it with {@link pipe}.
|
|
8
|
+
*
|
|
9
|
+
* @template T - The tuple type inside the zipped array.
|
|
10
|
+
* @returns A function that maps zipped tuples to arrays grouped by tuple position.
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* import { pipe, unzip } from 'es-toolkit/fp';
|
|
14
|
+
*
|
|
15
|
+
* pipe([[1, 'a'], [2, 'b']] as Array<[number, string]>, unzip());
|
|
16
|
+
* // => [[1, 2], ['a', 'b']]
|
|
17
|
+
*/
|
|
18
|
+
declare function unzip<T extends unknown[]>(): (zipped: ReadonlyArray<[...T]>) => Unzip<T>;
|
|
19
|
+
//#endregion
|
|
20
|
+
export { unzip };
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
const require_unzip = require("../../array/unzip.js");
|
|
2
|
+
//#region src/fp/array/unzip.ts
|
|
3
|
+
/**
|
|
4
|
+
* Creates a function that unzips grouped tuples into arrays by position.
|
|
5
|
+
*
|
|
6
|
+
* The returned function is the data-last form of the main {@link unzip} utility.
|
|
7
|
+
* Use it with {@link pipe}.
|
|
8
|
+
*
|
|
9
|
+
* @template T - The tuple type inside the zipped array.
|
|
10
|
+
* @returns A function that maps zipped tuples to arrays grouped by tuple position.
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* import { pipe, unzip } from 'es-toolkit/fp';
|
|
14
|
+
*
|
|
15
|
+
* pipe([[1, 'a'], [2, 'b']] as Array<[number, string]>, unzip());
|
|
16
|
+
* // => [[1, 2], ['a', 'b']]
|
|
17
|
+
*/
|
|
18
|
+
function unzip() {
|
|
19
|
+
return function(zipped) {
|
|
20
|
+
return require_unzip.unzip(zipped);
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
//#endregion
|
|
24
|
+
exports.unzip = unzip;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { unzip as unzip$1 } from "../../array/unzip.mjs";
|
|
2
|
+
//#region src/fp/array/unzip.ts
|
|
3
|
+
/**
|
|
4
|
+
* Creates a function that unzips grouped tuples into arrays by position.
|
|
5
|
+
*
|
|
6
|
+
* The returned function is the data-last form of the main {@link unzip} utility.
|
|
7
|
+
* Use it with {@link pipe}.
|
|
8
|
+
*
|
|
9
|
+
* @template T - The tuple type inside the zipped array.
|
|
10
|
+
* @returns A function that maps zipped tuples to arrays grouped by tuple position.
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* import { pipe, unzip } from 'es-toolkit/fp';
|
|
14
|
+
*
|
|
15
|
+
* pipe([[1, 'a'], [2, 'b']] as Array<[number, string]>, unzip());
|
|
16
|
+
* // => [[1, 2], ['a', 'b']]
|
|
17
|
+
*/
|
|
18
|
+
function unzip() {
|
|
19
|
+
return function(zipped) {
|
|
20
|
+
return unzip$1(zipped);
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
//#endregion
|
|
24
|
+
export { unzip };
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
//#region src/fp/array/unzipWith.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* Creates a function that unzips grouped arrays and combines values by position.
|
|
4
|
+
*
|
|
5
|
+
* Values at the same position are passed to iteratee, and its return values form the
|
|
6
|
+
* resulting array.
|
|
7
|
+
*
|
|
8
|
+
* @template T - The element type inside each grouped array.
|
|
9
|
+
* @template R - The value returned by the iteratee.
|
|
10
|
+
* @param iteratee - Called with the values at each position.
|
|
11
|
+
* @returns A function that maps grouped arrays to combined values.
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* import { pipe, unzipWith } from 'es-toolkit/fp';
|
|
15
|
+
*
|
|
16
|
+
* pipe([[1, 10], [2, 20]], unzipWith((a, b) => a + b));
|
|
17
|
+
* // => [3, 30]
|
|
18
|
+
*/
|
|
19
|
+
declare function unzipWith<T, R>(iteratee: (...args: T[]) => R): (target: readonly T[][]) => R[];
|
|
20
|
+
//#endregion
|
|
21
|
+
export { unzipWith };
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
//#region src/fp/array/unzipWith.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* Creates a function that unzips grouped arrays and combines values by position.
|
|
4
|
+
*
|
|
5
|
+
* Values at the same position are passed to iteratee, and its return values form the
|
|
6
|
+
* resulting array.
|
|
7
|
+
*
|
|
8
|
+
* @template T - The element type inside each grouped array.
|
|
9
|
+
* @template R - The value returned by the iteratee.
|
|
10
|
+
* @param iteratee - Called with the values at each position.
|
|
11
|
+
* @returns A function that maps grouped arrays to combined values.
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* import { pipe, unzipWith } from 'es-toolkit/fp';
|
|
15
|
+
*
|
|
16
|
+
* pipe([[1, 10], [2, 20]], unzipWith((a, b) => a + b));
|
|
17
|
+
* // => [3, 30]
|
|
18
|
+
*/
|
|
19
|
+
declare function unzipWith<T, R>(iteratee: (...args: T[]) => R): (target: readonly T[][]) => R[];
|
|
20
|
+
//#endregion
|
|
21
|
+
export { unzipWith };
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
const require_unzipWith = require("../../array/unzipWith.js");
|
|
2
|
+
//#region src/fp/array/unzipWith.ts
|
|
3
|
+
/**
|
|
4
|
+
* Creates a function that unzips grouped arrays and combines values by position.
|
|
5
|
+
*
|
|
6
|
+
* Values at the same position are passed to iteratee, and its return values form the
|
|
7
|
+
* resulting array.
|
|
8
|
+
*
|
|
9
|
+
* @template T - The element type inside each grouped array.
|
|
10
|
+
* @template R - The value returned by the iteratee.
|
|
11
|
+
* @param iteratee - Called with the values at each position.
|
|
12
|
+
* @returns A function that maps grouped arrays to combined values.
|
|
13
|
+
*
|
|
14
|
+
* @example
|
|
15
|
+
* import { pipe, unzipWith } from 'es-toolkit/fp';
|
|
16
|
+
*
|
|
17
|
+
* pipe([[1, 10], [2, 20]], unzipWith((a, b) => a + b));
|
|
18
|
+
* // => [3, 30]
|
|
19
|
+
*/
|
|
20
|
+
function unzipWith(iteratee) {
|
|
21
|
+
return function(target) {
|
|
22
|
+
return require_unzipWith.unzipWith(target, iteratee);
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
//#endregion
|
|
26
|
+
exports.unzipWith = unzipWith;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { unzipWith as unzipWith$1 } from "../../array/unzipWith.mjs";
|
|
2
|
+
//#region src/fp/array/unzipWith.ts
|
|
3
|
+
/**
|
|
4
|
+
* Creates a function that unzips grouped arrays and combines values by position.
|
|
5
|
+
*
|
|
6
|
+
* Values at the same position are passed to iteratee, and its return values form the
|
|
7
|
+
* resulting array.
|
|
8
|
+
*
|
|
9
|
+
* @template T - The element type inside each grouped array.
|
|
10
|
+
* @template R - The value returned by the iteratee.
|
|
11
|
+
* @param iteratee - Called with the values at each position.
|
|
12
|
+
* @returns A function that maps grouped arrays to combined values.
|
|
13
|
+
*
|
|
14
|
+
* @example
|
|
15
|
+
* import { pipe, unzipWith } from 'es-toolkit/fp';
|
|
16
|
+
*
|
|
17
|
+
* pipe([[1, 10], [2, 20]], unzipWith((a, b) => a + b));
|
|
18
|
+
* // => [3, 30]
|
|
19
|
+
*/
|
|
20
|
+
function unzipWith(iteratee) {
|
|
21
|
+
return function(target) {
|
|
22
|
+
return unzipWith$1(target, iteratee);
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
//#endregion
|
|
26
|
+
export { unzipWith };
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { WindowedOptions } from "../../array/windowed.mjs";
|
|
2
|
+
|
|
3
|
+
//#region src/fp/array/windowed.d.ts
|
|
4
|
+
/**
|
|
5
|
+
* Creates a function that returns sliding windows from an array.
|
|
6
|
+
*
|
|
7
|
+
* By default only full windows are returned. Pass partialWindows: true to include shorter
|
|
8
|
+
* trailing windows. The full-window form is lazy-capable inside {@link pipe}.
|
|
9
|
+
*
|
|
10
|
+
* @template T - The type of elements in the array.
|
|
11
|
+
* @param size - The size of each window. Must be a positive integer.
|
|
12
|
+
* @param step - The step between window starts. Defaults to 1.
|
|
13
|
+
* @param options - Window options.
|
|
14
|
+
* @returns A function that maps a readonly array to sliding windows.
|
|
15
|
+
* @throws {Error} When size or step is not a positive integer.
|
|
16
|
+
*
|
|
17
|
+
* @example
|
|
18
|
+
* import { pipe, windowed } from 'es-toolkit/fp';
|
|
19
|
+
*
|
|
20
|
+
* pipe([1, 2, 3, 4], windowed(2));
|
|
21
|
+
* // => [[1, 2], [2, 3], [3, 4]]
|
|
22
|
+
*/
|
|
23
|
+
declare function windowed<T>(size: number, step?: number, options?: WindowedOptions): (array: readonly T[]) => T[][];
|
|
24
|
+
//#endregion
|
|
25
|
+
export { windowed };
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { WindowedOptions } from "../../array/windowed.js";
|
|
2
|
+
|
|
3
|
+
//#region src/fp/array/windowed.d.ts
|
|
4
|
+
/**
|
|
5
|
+
* Creates a function that returns sliding windows from an array.
|
|
6
|
+
*
|
|
7
|
+
* By default only full windows are returned. Pass partialWindows: true to include shorter
|
|
8
|
+
* trailing windows. The full-window form is lazy-capable inside {@link pipe}.
|
|
9
|
+
*
|
|
10
|
+
* @template T - The type of elements in the array.
|
|
11
|
+
* @param size - The size of each window. Must be a positive integer.
|
|
12
|
+
* @param step - The step between window starts. Defaults to 1.
|
|
13
|
+
* @param options - Window options.
|
|
14
|
+
* @returns A function that maps a readonly array to sliding windows.
|
|
15
|
+
* @throws {Error} When size or step is not a positive integer.
|
|
16
|
+
*
|
|
17
|
+
* @example
|
|
18
|
+
* import { pipe, windowed } from 'es-toolkit/fp';
|
|
19
|
+
*
|
|
20
|
+
* pipe([1, 2, 3, 4], windowed(2));
|
|
21
|
+
* // => [[1, 2], [2, 3], [3, 4]]
|
|
22
|
+
*/
|
|
23
|
+
declare function windowed<T>(size: number, step?: number, options?: WindowedOptions): (array: readonly T[]) => T[][];
|
|
24
|
+
//#endregion
|
|
25
|
+
export { windowed };
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
const require_windowed = require("../../array/windowed.js");
|
|
2
|
+
const require_lazy = require("../_internal/lazy.js");
|
|
3
|
+
//#region src/fp/array/windowed.ts
|
|
4
|
+
/**
|
|
5
|
+
* Creates a function that returns sliding windows from an array.
|
|
6
|
+
*
|
|
7
|
+
* By default only full windows are returned. Pass partialWindows: true to include shorter
|
|
8
|
+
* trailing windows. The full-window form is lazy-capable inside {@link pipe}.
|
|
9
|
+
*
|
|
10
|
+
* @template T - The type of elements in the array.
|
|
11
|
+
* @param size - The size of each window. Must be a positive integer.
|
|
12
|
+
* @param step - The step between window starts. Defaults to 1.
|
|
13
|
+
* @param options - Window options.
|
|
14
|
+
* @returns A function that maps a readonly array to sliding windows.
|
|
15
|
+
* @throws {Error} When size or step is not a positive integer.
|
|
16
|
+
*
|
|
17
|
+
* @example
|
|
18
|
+
* import { pipe, windowed } from 'es-toolkit/fp';
|
|
19
|
+
*
|
|
20
|
+
* pipe([1, 2, 3, 4], windowed(2));
|
|
21
|
+
* // => [[1, 2], [2, 3], [3, 4]]
|
|
22
|
+
*/
|
|
23
|
+
function windowed(size, step, options) {
|
|
24
|
+
const resolvedStep = step ?? 1;
|
|
25
|
+
const partialWindows = options?.partialWindows ?? false;
|
|
26
|
+
function windowedEager(array) {
|
|
27
|
+
return require_windowed.windowed(array, size, step, options);
|
|
28
|
+
}
|
|
29
|
+
if (partialWindows || !Number.isInteger(size) || size <= 0 || !Number.isInteger(resolvedStep) || resolvedStep <= 0) return windowedEager;
|
|
30
|
+
const windowedLazy = (emit) => {
|
|
31
|
+
const buffer = [];
|
|
32
|
+
let index = 0;
|
|
33
|
+
return (value) => {
|
|
34
|
+
buffer.push(value);
|
|
35
|
+
if (buffer.length > size) buffer.shift();
|
|
36
|
+
if (buffer.length === size) {
|
|
37
|
+
if ((index - size + 1) % resolvedStep === 0) {
|
|
38
|
+
const shouldContinue = emit(buffer.slice());
|
|
39
|
+
index++;
|
|
40
|
+
return shouldContinue;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
index++;
|
|
44
|
+
return true;
|
|
45
|
+
};
|
|
46
|
+
};
|
|
47
|
+
return require_lazy.combineEagerAndLazyFunctions(windowedEager, windowedLazy);
|
|
48
|
+
}
|
|
49
|
+
//#endregion
|
|
50
|
+
exports.windowed = windowed;
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { windowed as windowed$1 } from "../../array/windowed.mjs";
|
|
2
|
+
import { combineEagerAndLazyFunctions } from "../_internal/lazy.mjs";
|
|
3
|
+
//#region src/fp/array/windowed.ts
|
|
4
|
+
/**
|
|
5
|
+
* Creates a function that returns sliding windows from an array.
|
|
6
|
+
*
|
|
7
|
+
* By default only full windows are returned. Pass partialWindows: true to include shorter
|
|
8
|
+
* trailing windows. The full-window form is lazy-capable inside {@link pipe}.
|
|
9
|
+
*
|
|
10
|
+
* @template T - The type of elements in the array.
|
|
11
|
+
* @param size - The size of each window. Must be a positive integer.
|
|
12
|
+
* @param step - The step between window starts. Defaults to 1.
|
|
13
|
+
* @param options - Window options.
|
|
14
|
+
* @returns A function that maps a readonly array to sliding windows.
|
|
15
|
+
* @throws {Error} When size or step is not a positive integer.
|
|
16
|
+
*
|
|
17
|
+
* @example
|
|
18
|
+
* import { pipe, windowed } from 'es-toolkit/fp';
|
|
19
|
+
*
|
|
20
|
+
* pipe([1, 2, 3, 4], windowed(2));
|
|
21
|
+
* // => [[1, 2], [2, 3], [3, 4]]
|
|
22
|
+
*/
|
|
23
|
+
function windowed(size, step, options) {
|
|
24
|
+
const resolvedStep = step ?? 1;
|
|
25
|
+
const partialWindows = options?.partialWindows ?? false;
|
|
26
|
+
function windowedEager(array) {
|
|
27
|
+
return windowed$1(array, size, step, options);
|
|
28
|
+
}
|
|
29
|
+
if (partialWindows || !Number.isInteger(size) || size <= 0 || !Number.isInteger(resolvedStep) || resolvedStep <= 0) return windowedEager;
|
|
30
|
+
const windowedLazy = (emit) => {
|
|
31
|
+
const buffer = [];
|
|
32
|
+
let index = 0;
|
|
33
|
+
return (value) => {
|
|
34
|
+
buffer.push(value);
|
|
35
|
+
if (buffer.length > size) buffer.shift();
|
|
36
|
+
if (buffer.length === size) {
|
|
37
|
+
if ((index - size + 1) % resolvedStep === 0) {
|
|
38
|
+
const shouldContinue = emit(buffer.slice());
|
|
39
|
+
index++;
|
|
40
|
+
return shouldContinue;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
index++;
|
|
44
|
+
return true;
|
|
45
|
+
};
|
|
46
|
+
};
|
|
47
|
+
return combineEagerAndLazyFunctions(windowedEager, windowedLazy);
|
|
48
|
+
}
|
|
49
|
+
//#endregion
|
|
50
|
+
export { windowed };
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
//#region src/fp/array/without.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* Creates a function that removes the configured values from an array.
|
|
4
|
+
*
|
|
5
|
+
* The returned function is lazy-capable inside {@link pipe}.
|
|
6
|
+
*
|
|
7
|
+
* @template T - The type of elements in the array.
|
|
8
|
+
* @param values - Values to remove from the piped array.
|
|
9
|
+
* @returns A function that maps the piped array to the remaining values.
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* import { pipe, without } from 'es-toolkit/fp';
|
|
13
|
+
*
|
|
14
|
+
* pipe([1, 2, 3, 2], without(2));
|
|
15
|
+
* // => [1, 3]
|
|
16
|
+
*/
|
|
17
|
+
declare function without<T>(...values: T[]): (array: readonly T[]) => T[];
|
|
18
|
+
//#endregion
|
|
19
|
+
export { without };
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
//#region src/fp/array/without.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* Creates a function that removes the configured values from an array.
|
|
4
|
+
*
|
|
5
|
+
* The returned function is lazy-capable inside {@link pipe}.
|
|
6
|
+
*
|
|
7
|
+
* @template T - The type of elements in the array.
|
|
8
|
+
* @param values - Values to remove from the piped array.
|
|
9
|
+
* @returns A function that maps the piped array to the remaining values.
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* import { pipe, without } from 'es-toolkit/fp';
|
|
13
|
+
*
|
|
14
|
+
* pipe([1, 2, 3, 2], without(2));
|
|
15
|
+
* // => [1, 3]
|
|
16
|
+
*/
|
|
17
|
+
declare function without<T>(...values: T[]): (array: readonly T[]) => T[];
|
|
18
|
+
//#endregion
|
|
19
|
+
export { without };
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
const require_without = require("../../array/without.js");
|
|
2
|
+
const require_lazy = require("../_internal/lazy.js");
|
|
3
|
+
//#region src/fp/array/without.ts
|
|
4
|
+
/**
|
|
5
|
+
* Creates a function that removes the configured values from an array.
|
|
6
|
+
*
|
|
7
|
+
* The returned function is lazy-capable inside {@link pipe}.
|
|
8
|
+
*
|
|
9
|
+
* @template T - The type of elements in the array.
|
|
10
|
+
* @param values - Values to remove from the piped array.
|
|
11
|
+
* @returns A function that maps the piped array to the remaining values.
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* import { pipe, without } from 'es-toolkit/fp';
|
|
15
|
+
*
|
|
16
|
+
* pipe([1, 2, 3, 2], without(2));
|
|
17
|
+
* // => [1, 3]
|
|
18
|
+
*/
|
|
19
|
+
function without(...values) {
|
|
20
|
+
const valueSet = new Set(values);
|
|
21
|
+
function withoutEager(array) {
|
|
22
|
+
return require_without.without(array, ...values);
|
|
23
|
+
}
|
|
24
|
+
const withoutLazy = require_lazy.createLazyFunction((value, _index, emit) => {
|
|
25
|
+
if (!valueSet.has(value)) emit(value);
|
|
26
|
+
});
|
|
27
|
+
return require_lazy.combineEagerAndLazyFunctions(withoutEager, withoutLazy);
|
|
28
|
+
}
|
|
29
|
+
//#endregion
|
|
30
|
+
exports.without = without;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { without as without$1 } from "../../array/without.mjs";
|
|
2
|
+
import { combineEagerAndLazyFunctions, createLazyFunction } from "../_internal/lazy.mjs";
|
|
3
|
+
//#region src/fp/array/without.ts
|
|
4
|
+
/**
|
|
5
|
+
* Creates a function that removes the configured values from an array.
|
|
6
|
+
*
|
|
7
|
+
* The returned function is lazy-capable inside {@link pipe}.
|
|
8
|
+
*
|
|
9
|
+
* @template T - The type of elements in the array.
|
|
10
|
+
* @param values - Values to remove from the piped array.
|
|
11
|
+
* @returns A function that maps the piped array to the remaining values.
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* import { pipe, without } from 'es-toolkit/fp';
|
|
15
|
+
*
|
|
16
|
+
* pipe([1, 2, 3, 2], without(2));
|
|
17
|
+
* // => [1, 3]
|
|
18
|
+
*/
|
|
19
|
+
function without(...values) {
|
|
20
|
+
const valueSet = new Set(values);
|
|
21
|
+
function withoutEager(array) {
|
|
22
|
+
return without$1(array, ...values);
|
|
23
|
+
}
|
|
24
|
+
return combineEagerAndLazyFunctions(withoutEager, createLazyFunction((value, _index, emit) => {
|
|
25
|
+
if (!valueSet.has(value)) emit(value);
|
|
26
|
+
}));
|
|
27
|
+
}
|
|
28
|
+
//#endregion
|
|
29
|
+
export { without };
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
//#region src/fp/array/xor.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* Creates a function that returns the symmetric difference with secondArray.
|
|
4
|
+
*
|
|
5
|
+
* The result contains values that appear in exactly one of the arrays, matching the main
|
|
6
|
+
* {@link xor} behavior.
|
|
7
|
+
*
|
|
8
|
+
* @template T - The type of elements in the arrays.
|
|
9
|
+
* @param secondArray - Values to compare with the piped array.
|
|
10
|
+
* @returns A function that maps a readonly array to its symmetric difference.
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* import { pipe, xor } from 'es-toolkit/fp';
|
|
14
|
+
*
|
|
15
|
+
* pipe([1, 2], xor([2, 3]));
|
|
16
|
+
* // => [1, 3]
|
|
17
|
+
*/
|
|
18
|
+
declare function xor<T>(secondArray: readonly T[]): (array: readonly T[]) => T[];
|
|
19
|
+
//#endregion
|
|
20
|
+
export { xor };
|