es-toolkit 1.50.0 → 1.51.0-dev.2069
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/CHANGELOG.md +82 -0
- package/NOTICE +39 -0
- package/README.md +2 -2
- package/bigint.d.ts +1 -0
- package/bigint.js +1 -0
- package/dist/_internal/NonPlainObject.d.mts +8 -0
- package/dist/_internal/NonPlainObject.d.ts +8 -0
- package/dist/_internal/bigIntRangeLength.js +19 -0
- package/dist/_internal/bigIntRangeLength.mjs +19 -0
- package/dist/_internal/isMergeableValue.js +17 -0
- package/dist/_internal/isMergeableValue.mjs +17 -0
- package/dist/_internal/isUnsafeProperty.js +7 -4
- package/dist/_internal/isUnsafeProperty.mjs +7 -4
- package/dist/_internal/isUnsafeToWriteProperty.js +22 -0
- package/dist/_internal/isUnsafeToWriteProperty.mjs +22 -0
- package/dist/array/at.d.mts +1 -1
- package/dist/array/at.d.ts +1 -1
- package/dist/array/filterAsync.js +1 -1
- package/dist/array/filterAsync.mjs +1 -1
- package/dist/array/flatMapAsync.js +1 -1
- package/dist/array/flatMapAsync.mjs +1 -1
- package/dist/array/forEachAsync.js +1 -1
- package/dist/array/forEachAsync.mjs +1 -1
- package/dist/array/index.js +1 -1
- package/dist/array/index.mjs +1 -1
- package/dist/array/limitAsync.d.mts +4 -28
- package/dist/array/limitAsync.d.ts +4 -28
- package/dist/array/limitAsync.js +2 -39
- package/dist/array/limitAsync.mjs +3 -39
- package/dist/array/mapAsync.js +1 -1
- package/dist/array/mapAsync.mjs +1 -1
- package/dist/array/orderBy.d.mts +1 -1
- package/dist/array/orderBy.d.ts +1 -1
- package/dist/array/pullAt.d.mts +1 -1
- package/dist/array/pullAt.d.ts +1 -1
- package/dist/array/pullAt.js +1 -1
- package/dist/array/pullAt.mjs +1 -1
- package/dist/array/sortBy.d.mts +1 -1
- package/dist/array/sortBy.d.ts +1 -1
- package/dist/array/unzip.d.mts +3 -0
- package/dist/array/unzip.d.ts +3 -0
- package/dist/array/unzip.js +3 -0
- package/dist/array/unzip.mjs +3 -0
- package/dist/bigint/clamp.d.mts +37 -0
- package/dist/bigint/clamp.d.ts +37 -0
- package/dist/bigint/clamp.js +16 -0
- package/dist/bigint/clamp.mjs +16 -0
- package/dist/bigint/inRange.d.mts +37 -0
- package/dist/bigint/inRange.d.ts +37 -0
- package/dist/bigint/inRange.js +20 -0
- package/dist/bigint/inRange.mjs +20 -0
- package/dist/bigint/index.d.mts +14 -0
- package/dist/bigint/index.d.ts +14 -0
- package/dist/bigint/index.js +27 -0
- package/dist/bigint/index.mjs +14 -0
- package/dist/bigint/max.d.mts +21 -0
- package/dist/bigint/max.d.ts +21 -0
- package/dist/bigint/max.js +26 -0
- package/dist/bigint/max.mjs +26 -0
- package/dist/bigint/maxBy.d.mts +21 -0
- package/dist/bigint/maxBy.d.ts +21 -0
- package/dist/bigint/maxBy.js +34 -0
- package/dist/bigint/maxBy.mjs +34 -0
- package/dist/bigint/median.d.mts +22 -0
- package/dist/bigint/median.d.ts +22 -0
- package/dist/bigint/median.js +28 -0
- package/dist/bigint/median.mjs +28 -0
- package/dist/bigint/medianBy.d.mts +21 -0
- package/dist/bigint/medianBy.d.ts +21 -0
- package/dist/bigint/medianBy.js +24 -0
- package/dist/bigint/medianBy.mjs +24 -0
- package/dist/bigint/min.d.mts +18 -0
- package/dist/bigint/min.d.ts +18 -0
- package/dist/bigint/min.js +23 -0
- package/dist/bigint/min.mjs +23 -0
- package/dist/bigint/minBy.d.mts +21 -0
- package/dist/bigint/minBy.d.ts +21 -0
- package/dist/bigint/minBy.js +34 -0
- package/dist/bigint/minBy.mjs +34 -0
- package/dist/bigint/percentile.d.mts +23 -0
- package/dist/bigint/percentile.d.ts +23 -0
- package/dist/bigint/percentile.js +31 -0
- package/dist/bigint/percentile.mjs +31 -0
- package/dist/bigint/range.d.mts +45 -0
- package/dist/bigint/range.d.ts +45 -0
- package/dist/bigint/range.js +24 -0
- package/dist/bigint/range.mjs +24 -0
- package/dist/bigint/rangeRight.d.mts +43 -0
- package/dist/bigint/rangeRight.d.ts +43 -0
- package/dist/bigint/rangeRight.js +25 -0
- package/dist/bigint/rangeRight.mjs +25 -0
- package/dist/bigint/sum.d.mts +18 -0
- package/dist/bigint/sum.d.ts +18 -0
- package/dist/bigint/sum.js +22 -0
- package/dist/bigint/sum.mjs +22 -0
- package/dist/bigint/sumBy.d.mts +20 -0
- package/dist/bigint/sumBy.d.ts +20 -0
- package/dist/bigint/sumBy.js +24 -0
- package/dist/bigint/sumBy.mjs +24 -0
- package/dist/browser.global.js +6 -3
- package/dist/compat/_internal/normalizeZero.js +13 -0
- package/dist/compat/_internal/normalizeZero.mjs +13 -0
- package/dist/compat/_internal/toKey.js +1 -1
- package/dist/compat/_internal/toKey.mjs +1 -1
- package/dist/compat/_internal/unicodeSize.js +45 -0
- package/dist/compat/_internal/unicodeSize.mjs +45 -0
- package/dist/compat/array/chunk.js +1 -0
- package/dist/compat/array/chunk.mjs +1 -0
- package/dist/compat/array/difference.js +2 -1
- package/dist/compat/array/difference.mjs +2 -1
- package/dist/compat/array/differenceBy.js +3 -2
- package/dist/compat/array/differenceBy.mjs +3 -2
- package/dist/compat/array/drop.d.mts +1 -1
- package/dist/compat/array/drop.d.ts +1 -1
- package/dist/compat/array/dropRight.d.mts +2 -3
- package/dist/compat/array/dropRight.d.ts +2 -3
- package/dist/compat/array/dropRight.js +4 -4
- package/dist/compat/array/dropRight.mjs +4 -4
- package/dist/compat/array/every.js +9 -9
- package/dist/compat/array/every.mjs +9 -9
- package/dist/compat/array/fill.js +8 -2
- package/dist/compat/array/fill.mjs +8 -2
- package/dist/compat/array/find.js +14 -13
- package/dist/compat/array/find.mjs +14 -13
- package/dist/compat/array/findIndex.js +3 -19
- package/dist/compat/array/findIndex.mjs +3 -19
- package/dist/compat/array/findLast.js +3 -3
- package/dist/compat/array/findLast.mjs +3 -3
- package/dist/compat/array/flatMap.js +3 -8
- package/dist/compat/array/flatMap.mjs +3 -7
- package/dist/compat/array/flatMapDepth.js +1 -1
- package/dist/compat/array/flatMapDepth.mjs +1 -1
- package/dist/compat/array/forEach.js +1 -1
- package/dist/compat/array/forEach.mjs +1 -1
- package/dist/compat/array/includes.js +13 -13
- package/dist/compat/array/includes.mjs +13 -13
- package/dist/compat/array/indexOf.js +2 -1
- package/dist/compat/array/indexOf.mjs +2 -1
- package/dist/compat/array/intersection.js +3 -2
- package/dist/compat/array/intersection.mjs +3 -2
- package/dist/compat/array/intersectionBy.js +7 -11
- package/dist/compat/array/intersectionBy.mjs +7 -11
- package/dist/compat/array/intersectionWith.js +6 -18
- package/dist/compat/array/intersectionWith.mjs +6 -18
- package/dist/compat/array/last.js +1 -1
- package/dist/compat/array/last.mjs +1 -1
- package/dist/compat/array/lastIndexOf.js +3 -1
- package/dist/compat/array/lastIndexOf.mjs +3 -1
- package/dist/compat/array/map.js +3 -3
- package/dist/compat/array/map.mjs +3 -3
- package/dist/compat/array/orderBy.js +8 -6
- package/dist/compat/array/orderBy.mjs +8 -6
- package/dist/compat/array/partition.js +6 -6
- package/dist/compat/array/partition.mjs +6 -6
- package/dist/compat/array/pull.js +1 -1
- package/dist/compat/array/pull.mjs +1 -1
- package/dist/compat/array/pullAll.js +2 -0
- package/dist/compat/array/pullAll.mjs +2 -0
- package/dist/compat/array/remove.js +8 -4
- package/dist/compat/array/remove.mjs +8 -4
- package/dist/compat/array/reverse.js +1 -1
- package/dist/compat/array/reverse.mjs +1 -1
- package/dist/compat/array/sampleSize.js +2 -1
- package/dist/compat/array/sampleSize.mjs +2 -1
- package/dist/compat/array/size.js +2 -1
- package/dist/compat/array/size.mjs +2 -1
- package/dist/compat/array/some.js +2 -1
- package/dist/compat/array/some.mjs +2 -1
- package/dist/compat/array/takeRightWhile.js +2 -2
- package/dist/compat/array/takeRightWhile.mjs +2 -2
- package/dist/compat/array/takeWhile.js +2 -2
- package/dist/compat/array/takeWhile.mjs +2 -2
- package/dist/compat/array/unionBy.js +2 -1
- package/dist/compat/array/unionBy.mjs +2 -1
- package/dist/compat/array/uniqBy.js +4 -3
- package/dist/compat/array/uniqBy.mjs +4 -3
- package/dist/compat/array/unzip.d.mts +3 -0
- package/dist/compat/array/unzip.d.ts +3 -0
- package/dist/compat/array/unzip.js +3 -0
- package/dist/compat/array/unzip.mjs +3 -0
- package/dist/compat/array/unzipWith.js +1 -1
- package/dist/compat/array/unzipWith.mjs +1 -1
- package/dist/compat/array/zipObject.js +2 -0
- package/dist/compat/array/zipObject.mjs +2 -0
- package/dist/compat/compat.d.mts +3 -3
- package/dist/compat/compat.d.ts +3 -3
- package/dist/compat/compat.js +8 -4
- package/dist/compat/compat.mjs +8 -4
- package/dist/compat/function/curry.d.mts +1 -1
- package/dist/compat/function/curry.d.ts +1 -1
- package/dist/compat/function/debounce.js +1 -1
- package/dist/compat/function/debounce.mjs +1 -1
- package/dist/compat/function/flowRight.d.mts +1 -1
- package/dist/compat/function/flowRight.d.ts +1 -1
- package/dist/compat/function/partial.d.mts +1 -1
- package/dist/compat/function/partial.d.ts +1 -1
- package/dist/compat/function/rest.d.mts +1 -1
- package/dist/compat/function/rest.d.ts +1 -1
- package/dist/compat/function/rest.js +1 -1
- package/dist/compat/function/rest.mjs +1 -1
- package/dist/compat/index.d.mts +3 -3
- package/dist/compat/index.d.ts +3 -3
- package/dist/compat/index.js +6 -4
- package/dist/compat/index.mjs +5 -5
- package/dist/compat/math/maxBy.js +1 -1
- package/dist/compat/math/maxBy.mjs +1 -1
- package/dist/compat/math/meanBy.d.mts +4 -0
- package/dist/compat/math/meanBy.d.ts +4 -0
- package/dist/compat/math/meanBy.js +8 -3
- package/dist/compat/math/meanBy.mjs +8 -3
- package/dist/compat/math/minBy.js +1 -1
- package/dist/compat/math/minBy.mjs +1 -1
- package/dist/compat/object/cloneDeep.d.mts +5 -5
- package/dist/compat/object/cloneDeep.d.ts +5 -5
- package/dist/compat/object/cloneDeep.js +5 -5
- package/dist/compat/object/cloneDeep.mjs +5 -5
- package/dist/compat/object/cloneDeepWith.js +3 -1
- package/dist/compat/object/cloneDeepWith.mjs +3 -1
- package/dist/compat/object/cloneWith.d.mts +1 -1
- package/dist/compat/object/cloneWith.d.ts +1 -1
- package/dist/compat/object/cloneWith.js +1 -1
- package/dist/compat/object/cloneWith.mjs +1 -1
- package/dist/compat/object/entries.d.mts +1 -0
- package/dist/compat/object/entries.d.ts +1 -0
- package/dist/compat/object/entries.js +1 -0
- package/dist/compat/object/entries.mjs +1 -0
- package/dist/compat/object/entriesIn.d.mts +1 -0
- package/dist/compat/object/entriesIn.d.ts +1 -0
- package/dist/compat/object/entriesIn.js +1 -0
- package/dist/compat/object/entriesIn.mjs +1 -0
- package/dist/compat/object/omit.js +5 -5
- package/dist/compat/object/omit.mjs +5 -5
- package/dist/compat/object/transform.js +1 -1
- package/dist/compat/object/transform.mjs +1 -1
- package/dist/compat/object/updateWith.js +2 -2
- package/dist/compat/object/updateWith.mjs +2 -2
- package/dist/compat/predicate/isMatchWith.js +14 -5
- package/dist/compat/predicate/isMatchWith.mjs +14 -5
- package/dist/compat/string/template.js +2 -1
- package/dist/compat/string/template.mjs +2 -1
- package/dist/compat/string/words.js +17 -13
- package/dist/compat/string/words.mjs +17 -13
- package/dist/compat/util/iteratee.js +1 -3
- package/dist/compat/util/iteratee.mjs +1 -3
- package/dist/compat/util/toArray.d.mts +5 -5
- package/dist/compat/util/toArray.d.ts +5 -5
- package/dist/compat/util/toArray.js +9 -5
- package/dist/compat/util/toArray.mjs +9 -5
- package/dist/compat/util/toPath.js +11 -3
- package/dist/compat/util/toPath.mjs +11 -3
- package/dist/compat/util/toString.js +4 -1
- package/dist/compat/util/toString.mjs +4 -1
- package/dist/fp/array/at.d.mts +1 -1
- package/dist/fp/array/at.d.ts +1 -1
- package/dist/fp/array/orderBy.d.mts +1 -1
- package/dist/fp/array/orderBy.d.ts +1 -1
- package/dist/fp/array/sortBy.d.mts +1 -1
- package/dist/fp/array/sortBy.d.ts +1 -1
- package/dist/fp/array/unzip.d.mts +3 -0
- package/dist/fp/array/unzip.d.ts +3 -0
- package/dist/fp/array/unzip.js +3 -0
- package/dist/fp/array/unzip.mjs +3 -0
- package/dist/fp/iterator/chunk.d.mts +19 -0
- package/dist/fp/iterator/chunk.d.ts +19 -0
- package/dist/fp/iterator/chunk.js +24 -0
- package/dist/fp/iterator/chunk.mjs +24 -0
- package/dist/fp/iterator/count.d.mts +20 -0
- package/dist/fp/iterator/count.d.ts +20 -0
- package/dist/fp/iterator/count.js +25 -0
- package/dist/fp/iterator/count.mjs +25 -0
- package/dist/fp/iterator/drop.d.mts +20 -0
- package/dist/fp/iterator/drop.d.ts +20 -0
- package/dist/fp/iterator/drop.js +24 -0
- package/dist/fp/iterator/drop.mjs +24 -0
- package/dist/fp/iterator/dropWhile.d.mts +18 -0
- package/dist/fp/iterator/dropWhile.d.ts +18 -0
- package/dist/fp/iterator/dropWhile.js +23 -0
- package/dist/fp/iterator/dropWhile.mjs +23 -0
- package/dist/fp/iterator/every.d.mts +20 -0
- package/dist/fp/iterator/every.d.ts +20 -0
- package/dist/fp/iterator/every.js +24 -0
- package/dist/fp/iterator/every.mjs +24 -0
- package/dist/fp/iterator/filter.d.mts +37 -0
- package/dist/fp/iterator/filter.d.ts +37 -0
- package/dist/fp/iterator/filter.js +8 -0
- package/dist/fp/iterator/filter.mjs +8 -0
- package/dist/fp/iterator/find.d.mts +20 -0
- package/dist/fp/iterator/find.d.ts +20 -0
- package/dist/fp/iterator/find.js +24 -0
- package/dist/fp/iterator/find.mjs +24 -0
- package/dist/fp/iterator/flatMap.d.mts +20 -0
- package/dist/fp/iterator/flatMap.d.ts +20 -0
- package/dist/fp/iterator/flatMap.js +24 -0
- package/dist/fp/iterator/flatMap.mjs +24 -0
- package/dist/fp/iterator/forEach.d.mts +22 -0
- package/dist/fp/iterator/forEach.d.ts +22 -0
- package/dist/fp/iterator/forEach.js +26 -0
- package/dist/fp/iterator/forEach.mjs +26 -0
- package/dist/fp/iterator/head.d.mts +19 -0
- package/dist/fp/iterator/head.d.ts +19 -0
- package/dist/fp/iterator/head.js +24 -0
- package/dist/fp/iterator/head.mjs +24 -0
- package/dist/fp/iterator/index.d.mts +21 -0
- package/dist/fp/iterator/index.d.ts +21 -0
- package/dist/fp/iterator/index.js +41 -0
- package/dist/fp/iterator/index.mjs +21 -0
- package/dist/fp/iterator/map.d.mts +20 -0
- package/dist/fp/iterator/map.d.ts +20 -0
- package/dist/fp/iterator/map.js +24 -0
- package/dist/fp/iterator/map.mjs +24 -0
- package/dist/fp/iterator/partition.d.mts +22 -0
- package/dist/fp/iterator/partition.d.ts +22 -0
- package/dist/fp/iterator/partition.js +27 -0
- package/dist/fp/iterator/partition.mjs +27 -0
- package/dist/fp/iterator/reduce.d.mts +24 -0
- package/dist/fp/iterator/reduce.d.ts +24 -0
- package/dist/fp/iterator/reduce.js +28 -0
- package/dist/fp/iterator/reduce.mjs +28 -0
- package/dist/fp/iterator/scan.d.mts +21 -0
- package/dist/fp/iterator/scan.d.ts +21 -0
- package/dist/fp/iterator/scan.js +26 -0
- package/dist/fp/iterator/scan.mjs +26 -0
- package/dist/fp/iterator/some.d.mts +20 -0
- package/dist/fp/iterator/some.d.ts +20 -0
- package/dist/fp/iterator/some.js +24 -0
- package/dist/fp/iterator/some.mjs +24 -0
- package/dist/fp/iterator/take.d.mts +21 -0
- package/dist/fp/iterator/take.d.ts +21 -0
- package/dist/fp/iterator/take.js +25 -0
- package/dist/fp/iterator/take.mjs +25 -0
- package/dist/fp/iterator/takeWhile.d.mts +19 -0
- package/dist/fp/iterator/takeWhile.d.ts +19 -0
- package/dist/fp/iterator/takeWhile.js +24 -0
- package/dist/fp/iterator/takeWhile.mjs +24 -0
- package/dist/fp/iterator/toArray.d.mts +21 -0
- package/dist/fp/iterator/toArray.d.ts +21 -0
- package/dist/fp/iterator/toArray.js +25 -0
- package/dist/fp/iterator/toArray.mjs +25 -0
- package/dist/fp/iterator/uniqBy.d.mts +20 -0
- package/dist/fp/iterator/uniqBy.d.ts +20 -0
- package/dist/fp/iterator/uniqBy.js +25 -0
- package/dist/fp/iterator/uniqBy.mjs +25 -0
- package/dist/fp/iterator/zip.d.mts +20 -0
- package/dist/fp/iterator/zip.d.ts +20 -0
- package/dist/fp/iterator/zip.js +25 -0
- package/dist/fp/iterator/zip.mjs +25 -0
- package/dist/function/memoize.d.mts +3 -2
- package/dist/function/memoize.d.ts +3 -2
- package/dist/function/memoize.js +3 -2
- package/dist/function/memoize.mjs +3 -2
- package/dist/function/partial.d.mts +2 -2
- package/dist/function/partial.d.ts +2 -2
- package/dist/function/partialRight.d.mts +5 -5
- package/dist/function/partialRight.d.ts +5 -5
- package/dist/function/rest.d.mts +1 -1
- package/dist/function/rest.d.ts +1 -1
- package/dist/function/rest.js +1 -1
- package/dist/function/rest.mjs +1 -1
- package/dist/function/retry.d.mts +7 -4
- package/dist/function/retry.d.ts +7 -4
- package/dist/function/retry.js +4 -2
- package/dist/function/retry.mjs +1 -1
- package/dist/index.d.mts +9 -2
- package/dist/index.d.ts +9 -2
- package/dist/index.js +18 -4
- package/dist/index.mjs +12 -5
- package/dist/iterator/_internal/iterator.js +74 -0
- package/dist/iterator/_internal/iterator.mjs +74 -0
- package/dist/iterator/chunk.d.mts +21 -0
- package/dist/iterator/chunk.d.ts +21 -0
- package/dist/iterator/chunk.js +40 -0
- package/dist/iterator/chunk.mjs +40 -0
- package/dist/iterator/count.d.mts +18 -0
- package/dist/iterator/count.d.ts +18 -0
- package/dist/iterator/count.js +26 -0
- package/dist/iterator/count.mjs +26 -0
- package/dist/iterator/dropWhile.d.mts +20 -0
- package/dist/iterator/dropWhile.d.ts +20 -0
- package/dist/iterator/dropWhile.js +52 -0
- package/dist/iterator/dropWhile.mjs +52 -0
- package/dist/iterator/head.d.mts +21 -0
- package/dist/iterator/head.d.ts +21 -0
- package/dist/iterator/head.js +26 -0
- package/dist/iterator/head.mjs +26 -0
- package/dist/iterator/index.d.mts +12 -0
- package/dist/iterator/index.d.ts +12 -0
- package/dist/iterator/index.js +23 -0
- package/dist/iterator/index.mjs +12 -0
- package/dist/iterator/iterate.d.mts +20 -0
- package/dist/iterator/iterate.d.ts +20 -0
- package/dist/iterator/iterate.js +32 -0
- package/dist/iterator/iterate.mjs +32 -0
- package/dist/iterator/partition.d.mts +18 -0
- package/dist/iterator/partition.d.ts +18 -0
- package/dist/iterator/partition.js +36 -0
- package/dist/iterator/partition.mjs +36 -0
- package/dist/iterator/range.d.mts +42 -0
- package/dist/iterator/range.d.ts +42 -0
- package/dist/iterator/range.js +25 -0
- package/dist/iterator/range.mjs +25 -0
- package/dist/iterator/scan.d.mts +23 -0
- package/dist/iterator/scan.d.ts +23 -0
- package/dist/iterator/scan.js +47 -0
- package/dist/iterator/scan.mjs +47 -0
- package/dist/iterator/takeWhile.d.mts +20 -0
- package/dist/iterator/takeWhile.d.ts +20 -0
- package/dist/iterator/takeWhile.js +34 -0
- package/dist/iterator/takeWhile.mjs +34 -0
- package/dist/iterator/uniqBy.d.mts +22 -0
- package/dist/iterator/uniqBy.d.ts +22 -0
- package/dist/iterator/uniqBy.js +43 -0
- package/dist/iterator/uniqBy.mjs +43 -0
- package/dist/iterator/zip.d.mts +23 -0
- package/dist/iterator/zip.d.ts +23 -0
- package/dist/iterator/zip.js +45 -0
- package/dist/iterator/zip.mjs +45 -0
- package/dist/object/cloneDeepWith.d.mts +3 -1
- package/dist/object/cloneDeepWith.d.ts +3 -1
- package/dist/object/cloneDeepWith.js +3 -1
- package/dist/object/cloneDeepWith.mjs +3 -1
- package/dist/object/deepFreeze.d.mts +20 -0
- package/dist/object/deepFreeze.d.ts +20 -0
- package/dist/object/deepFreeze.js +29 -0
- package/dist/object/deepFreeze.mjs +29 -0
- package/dist/object/flattenObject.d.mts +16 -1
- package/dist/object/flattenObject.d.ts +16 -1
- package/dist/object/flattenObject.js +15 -6
- package/dist/object/flattenObject.mjs +15 -6
- package/dist/object/index.d.mts +7 -1
- package/dist/object/index.d.ts +7 -1
- package/dist/object/index.js +12 -0
- package/dist/object/index.mjs +7 -1
- package/dist/object/mapKeysAsync.d.mts +25 -0
- package/dist/object/mapKeysAsync.d.ts +25 -0
- package/dist/object/mapKeysAsync.js +32 -0
- package/dist/object/mapKeysAsync.mjs +32 -0
- package/dist/object/mapValuesAsync.d.mts +26 -0
- package/dist/object/mapValuesAsync.d.ts +26 -0
- package/dist/object/mapValuesAsync.js +32 -0
- package/dist/object/mapValuesAsync.mjs +32 -0
- package/dist/object/merge.js +2 -4
- package/dist/object/merge.mjs +1 -3
- package/dist/object/mergeWith.js +4 -4
- package/dist/object/mergeWith.mjs +4 -4
- package/dist/object/toCamelCaseKeys.d.mts +2 -6
- package/dist/object/toCamelCaseKeys.d.ts +2 -6
- package/dist/object/toConstantCaseKeys.d.mts +52 -0
- package/dist/object/toConstantCaseKeys.d.ts +52 -0
- package/dist/object/toConstantCaseKeys.js +66 -0
- package/dist/object/toConstantCaseKeys.mjs +66 -0
- package/dist/object/toKebabCaseKeys.d.mts +52 -0
- package/dist/object/toKebabCaseKeys.d.ts +52 -0
- package/dist/object/toKebabCaseKeys.js +66 -0
- package/dist/object/toKebabCaseKeys.mjs +66 -0
- package/dist/object/toMerged.js +4 -4
- package/dist/object/toMerged.mjs +4 -4
- package/dist/object/toPascalCaseKeys.d.mts +52 -0
- package/dist/object/toPascalCaseKeys.d.ts +52 -0
- package/dist/object/toPascalCaseKeys.js +66 -0
- package/dist/object/toPascalCaseKeys.mjs +66 -0
- package/dist/object/toSnakeCaseKeys.d.mts +2 -3
- package/dist/object/toSnakeCaseKeys.d.ts +2 -3
- package/dist/promise/index.d.mts +2 -1
- package/dist/promise/index.d.ts +2 -1
- package/dist/promise/index.js +2 -0
- package/dist/promise/index.mjs +2 -1
- package/dist/promise/limitAsync.d.mts +35 -0
- package/dist/promise/limitAsync.d.ts +35 -0
- package/dist/promise/limitAsync.js +46 -0
- package/dist/promise/limitAsync.mjs +46 -0
- package/dist/string/dedent.d.mts +37 -0
- package/dist/string/dedent.d.ts +37 -0
- package/dist/string/dedent.js +38 -0
- package/dist/string/dedent.mjs +38 -0
- package/dist/string/index.d.mts +2 -1
- package/dist/string/index.d.ts +2 -1
- package/dist/string/index.js +5 -3
- package/dist/string/index.mjs +5 -4
- package/dist/types/ToCamelCaseKeys.d.mts +24 -0
- package/dist/types/ToCamelCaseKeys.d.ts +24 -0
- package/dist/types/ToConstantCaseKeys.d.mts +21 -0
- package/dist/types/ToConstantCaseKeys.d.ts +21 -0
- package/dist/types/ToKebabCaseKeys.d.mts +23 -0
- package/dist/types/ToKebabCaseKeys.d.ts +23 -0
- package/dist/types/ToPascalCaseKeys.d.mts +24 -0
- package/dist/types/ToPascalCaseKeys.d.ts +24 -0
- package/dist/types/ToSnakeCaseKeys.d.mts +21 -0
- package/dist/types/ToSnakeCaseKeys.d.ts +21 -0
- package/dist/types/index.d.mts +6 -1
- package/dist/types/index.d.ts +6 -1
- package/fp/iterator.d.ts +1 -0
- package/fp/iterator.js +1 -0
- package/iterator.d.ts +1 -0
- package/iterator.js +1 -0
- package/package.json +70 -2
package/dist/index.mjs
CHANGED
|
@@ -14,7 +14,7 @@ import { dropRightWhile } from "./array/dropRightWhile.mjs";
|
|
|
14
14
|
import { dropWhile } from "./array/dropWhile.mjs";
|
|
15
15
|
import { fill } from "./array/fill.mjs";
|
|
16
16
|
import { Semaphore } from "./promise/semaphore.mjs";
|
|
17
|
-
import { limitAsync } from "./
|
|
17
|
+
import { limitAsync } from "./promise/limitAsync.mjs";
|
|
18
18
|
import { filterAsync } from "./array/filterAsync.mjs";
|
|
19
19
|
import { flatten } from "./array/flatten.mjs";
|
|
20
20
|
import { flatMap } from "./array/flatMap.mjs";
|
|
@@ -116,12 +116,15 @@ import { clone } from "./object/clone.mjs";
|
|
|
116
116
|
import { isBuffer } from "./predicate/isBuffer.mjs";
|
|
117
117
|
import { cloneDeepWith } from "./object/cloneDeepWith.mjs";
|
|
118
118
|
import { cloneDeep } from "./object/cloneDeep.mjs";
|
|
119
|
+
import { deepFreeze } from "./object/deepFreeze.mjs";
|
|
119
120
|
import { findKey } from "./object/findKey.mjs";
|
|
120
121
|
import { isPlainObject } from "./predicate/isPlainObject.mjs";
|
|
121
122
|
import { flattenObject } from "./object/flattenObject.mjs";
|
|
122
123
|
import { invert } from "./object/invert.mjs";
|
|
123
124
|
import { mapKeys } from "./object/mapKeys.mjs";
|
|
125
|
+
import { mapKeysAsync } from "./object/mapKeysAsync.mjs";
|
|
124
126
|
import { mapValues } from "./object/mapValues.mjs";
|
|
127
|
+
import { mapValuesAsync } from "./object/mapValuesAsync.mjs";
|
|
125
128
|
import { merge } from "./object/merge.mjs";
|
|
126
129
|
import { mergeWith } from "./object/mergeWith.mjs";
|
|
127
130
|
import { omit } from "./object/omit.mjs";
|
|
@@ -133,7 +136,13 @@ import { capitalize } from "./string/capitalize.mjs";
|
|
|
133
136
|
import { words } from "./string/words.mjs";
|
|
134
137
|
import { camelCase } from "./string/camelCase.mjs";
|
|
135
138
|
import { toCamelCaseKeys } from "./object/toCamelCaseKeys.mjs";
|
|
139
|
+
import { constantCase } from "./string/constantCase.mjs";
|
|
140
|
+
import { toConstantCaseKeys } from "./object/toConstantCaseKeys.mjs";
|
|
141
|
+
import { kebabCase } from "./string/kebabCase.mjs";
|
|
142
|
+
import { toKebabCaseKeys } from "./object/toKebabCaseKeys.mjs";
|
|
136
143
|
import { toMerged } from "./object/toMerged.mjs";
|
|
144
|
+
import { pascalCase } from "./string/pascalCase.mjs";
|
|
145
|
+
import { toPascalCaseKeys } from "./object/toPascalCaseKeys.mjs";
|
|
137
146
|
import { snakeCase } from "./string/snakeCase.mjs";
|
|
138
147
|
import { toSnakeCaseKeys } from "./object/toSnakeCaseKeys.mjs";
|
|
139
148
|
import "./object/index.mjs";
|
|
@@ -172,15 +181,13 @@ import { Mutex } from "./promise/mutex.mjs";
|
|
|
172
181
|
import { timeout } from "./promise/timeout.mjs";
|
|
173
182
|
import { withTimeout } from "./promise/withTimeout.mjs";
|
|
174
183
|
import "./promise/index.mjs";
|
|
175
|
-
import { constantCase } from "./string/constantCase.mjs";
|
|
176
184
|
import { deburr } from "./string/deburr.mjs";
|
|
185
|
+
import { dedent } from "./string/dedent.mjs";
|
|
177
186
|
import { escape } from "./string/escape.mjs";
|
|
178
187
|
import { escapeRegExp } from "./string/escapeRegExp.mjs";
|
|
179
|
-
import { kebabCase } from "./string/kebabCase.mjs";
|
|
180
188
|
import { lowerCase } from "./string/lowerCase.mjs";
|
|
181
189
|
import { lowerFirst } from "./string/lowerFirst.mjs";
|
|
182
190
|
import { pad } from "./string/pad.mjs";
|
|
183
|
-
import { pascalCase } from "./string/pascalCase.mjs";
|
|
184
191
|
import { reverseString } from "./string/reverseString.mjs";
|
|
185
192
|
import { startCase } from "./string/startCase.mjs";
|
|
186
193
|
import { trimEnd } from "./string/trimEnd.mjs";
|
|
@@ -194,4 +201,4 @@ import { attempt } from "./util/attempt.mjs";
|
|
|
194
201
|
import { attemptAsync } from "./util/attemptAsync.mjs";
|
|
195
202
|
import { invariant } from "./util/invariant.mjs";
|
|
196
203
|
import "./util/index.mjs";
|
|
197
|
-
export { AbortError, Mutex, Semaphore, TimeoutError, after, allKeyed, ary, invariant as assert, asyncNoop, at, attempt, attemptAsync, before, camelCase, capitalize, cartesianProduct, chunk, chunkBy, clamp, clone, cloneDeep, cloneDeepWith, combinations, compact, constantCase, countBy, curry, curryRight, debounce, deburr, delay, difference, differenceBy, differenceWith, drop, dropRight, dropRightWhile, dropWhile, escape, escapeRegExp, fill, filterAsync, findKey, flatMap, flatMapAsync, flatMapDeep, flatten, flattenDeep, flattenObject, flow, flowRight, forEachAsync, forEachRight, groupBy, head, identity, inRange, initial, intersection, intersectionBy, intersectionWith, invariant, invert, isArrayBuffer, isBlob, isBoolean, isBrowser, isBuffer, isDate, isEmptyObject, isEqual, isEqualWith, isError, isFile, isFunction, isIterable, isJSON, isJSONArray, isJSONObject, isJSONValue, isLength, isMap, isNil, isNode, isNotNil, isNull, isNumber, isPlainObject, isPrimitive, isPromise, isRegExp, isSet, isString, isSubset, isSubsetWith, isSymbol, isTypedArray, isUndefined, isWeakMap, isWeakSet, kebabCase, keyBy, last, limitAsync, lowerCase, lowerFirst, mapAsync, mapKeys, mapValues, maxBy, mean, meanBy, median, medianBy, memoize, merge, mergeWith, minBy, negate, noop, omit, omitBy, once, orderBy, pad, partial, partialRight, partition, pascalCase, percentile, pick, pickBy, pull, pullAt, random, randomInt, range, rangeRight, reduceAsync, remove, rest, retry, reverseString, round, sample, sampleSize, shuffle, snakeCase, sortBy, sortKeys, spread, startCase, sum, sumBy, tail, take, takeRight, takeRightWhile, takeWhile, throttle, timeout, toCamelCaseKeys, toFilled, toMerged, toSnakeCaseKeys, trim, trimEnd, trimStart, unary, unescape, union, unionBy, unionWith, uniq, uniqBy, uniqWith, unzip, unzipWith, upperCase, upperFirst, windowed, withTimeout, without, words, xor, xorBy, xorWith, zip, zipObject, zipWith };
|
|
204
|
+
export { AbortError, Mutex, Semaphore, TimeoutError, after, allKeyed, ary, invariant as assert, asyncNoop, at, attempt, attemptAsync, before, camelCase, capitalize, cartesianProduct, chunk, chunkBy, clamp, clone, cloneDeep, cloneDeepWith, combinations, compact, constantCase, countBy, curry, curryRight, debounce, deburr, dedent, deepFreeze, delay, difference, differenceBy, differenceWith, drop, dropRight, dropRightWhile, dropWhile, escape, escapeRegExp, fill, filterAsync, findKey, flatMap, flatMapAsync, flatMapDeep, flatten, flattenDeep, flattenObject, flow, flowRight, forEachAsync, forEachRight, groupBy, head, identity, inRange, initial, intersection, intersectionBy, intersectionWith, invariant, invert, isArrayBuffer, isBlob, isBoolean, isBrowser, isBuffer, isDate, isEmptyObject, isEqual, isEqualWith, isError, isFile, isFunction, isIterable, isJSON, isJSONArray, isJSONObject, isJSONValue, isLength, isMap, isNil, isNode, isNotNil, isNull, isNumber, isPlainObject, isPrimitive, isPromise, isRegExp, isSet, isString, isSubset, isSubsetWith, isSymbol, isTypedArray, isUndefined, isWeakMap, isWeakSet, kebabCase, keyBy, last, limitAsync, lowerCase, lowerFirst, mapAsync, mapKeys, mapKeysAsync, mapValues, mapValuesAsync, maxBy, mean, meanBy, median, medianBy, memoize, merge, mergeWith, minBy, negate, noop, omit, omitBy, once, orderBy, pad, partial, partialRight, partition, pascalCase, percentile, pick, pickBy, pull, pullAt, random, randomInt, range, rangeRight, reduceAsync, remove, rest, retry, reverseString, round, sample, sampleSize, shuffle, snakeCase, sortBy, sortKeys, spread, startCase, sum, sumBy, tail, take, takeRight, takeRightWhile, takeWhile, throttle, timeout, toCamelCaseKeys, toConstantCaseKeys, toFilled, toKebabCaseKeys, toMerged, toPascalCaseKeys, toSnakeCaseKeys, trim, trimEnd, trimStart, unary, unescape, union, unionBy, unionWith, uniq, uniqBy, uniqWith, unzip, unzipWith, upperCase, upperFirst, windowed, withTimeout, without, words, xor, xorBy, xorWith, zip, zipObject, zipWith };
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
//#region src/iterator/_internal/iterator.ts
|
|
2
|
+
/**
|
|
3
|
+
* Wraps a `next` function into a lazy {@link IteratorObject} whose prototype is
|
|
4
|
+
* the native `Iterator.prototype`. The result therefore behaves exactly like a
|
|
5
|
+
* value returned by a built-in iterator helper (e.g. `array.values().map(...)`):
|
|
6
|
+
* it is single-shot, it is iterable via `Symbol.iterator` (returning itself),
|
|
7
|
+
* and it carries every native helper method (`map`, `filter`, `take`, `drop`,
|
|
8
|
+
* `flatMap`, `reduce`, `toArray`, ...) so results can be chained with them.
|
|
9
|
+
*
|
|
10
|
+
* The result also follows the IteratorClose protocol of the native helpers, so
|
|
11
|
+
* upstream resources (e.g. `try/finally` blocks in generator sources) are
|
|
12
|
+
* released. `onClose` runs exactly once, at whichever of these happens first:
|
|
13
|
+
* the consumer terminates early (`return()`, e.g. from `take` or a `for...of`
|
|
14
|
+
* `break`), `next` throws, or `next` reports done. After the iterator is
|
|
15
|
+
* closed, `next` is never called again and every subsequent step is done.
|
|
16
|
+
*
|
|
17
|
+
* Using a hand-rolled `next` rather than a generator function is a deliberate
|
|
18
|
+
* performance choice — driving the iterator protocol directly measured roughly
|
|
19
|
+
* twice as fast as `yield`-based generators for the same transforms, while
|
|
20
|
+
* `Object.create(Iterator.prototype)` adds no measurable overhead over a plain
|
|
21
|
+
* object literal.
|
|
22
|
+
*
|
|
23
|
+
* @template T - The type of values produced by the iterator.
|
|
24
|
+
* @param next - Called to produce each step; return `{ done: true, value: undefined }` to finish.
|
|
25
|
+
* @param onClose - Called once when the iterator closes; use it to close upstream iterators.
|
|
26
|
+
* @returns A lazy {@link IteratorObject} that yields the values produced by `next`.
|
|
27
|
+
*
|
|
28
|
+
* @example
|
|
29
|
+
* function repeat<T>(value: T, times: number): IteratorObject<T, undefined> {
|
|
30
|
+
* let remaining = times;
|
|
31
|
+
* return iterator(function () {
|
|
32
|
+
* if (remaining <= 0) {
|
|
33
|
+
* return { value: undefined, done: true };
|
|
34
|
+
* }
|
|
35
|
+
* remaining--;
|
|
36
|
+
* return { value, done: false };
|
|
37
|
+
* });
|
|
38
|
+
* }
|
|
39
|
+
*/
|
|
40
|
+
function iterator(next, onClose) {
|
|
41
|
+
let closed = false;
|
|
42
|
+
const close = () => {
|
|
43
|
+
if (!closed) {
|
|
44
|
+
closed = true;
|
|
45
|
+
onClose?.();
|
|
46
|
+
}
|
|
47
|
+
};
|
|
48
|
+
const result = Object.create(Iterator.prototype);
|
|
49
|
+
result.next = function() {
|
|
50
|
+
if (closed) return {
|
|
51
|
+
value: void 0,
|
|
52
|
+
done: true
|
|
53
|
+
};
|
|
54
|
+
let step;
|
|
55
|
+
try {
|
|
56
|
+
step = next();
|
|
57
|
+
} catch (error) {
|
|
58
|
+
close();
|
|
59
|
+
throw error;
|
|
60
|
+
}
|
|
61
|
+
if (step.done) close();
|
|
62
|
+
return step;
|
|
63
|
+
};
|
|
64
|
+
result.return = function() {
|
|
65
|
+
close();
|
|
66
|
+
return {
|
|
67
|
+
value: void 0,
|
|
68
|
+
done: true
|
|
69
|
+
};
|
|
70
|
+
};
|
|
71
|
+
return result;
|
|
72
|
+
}
|
|
73
|
+
//#endregion
|
|
74
|
+
exports.iterator = iterator;
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
//#region src/iterator/_internal/iterator.ts
|
|
2
|
+
/**
|
|
3
|
+
* Wraps a `next` function into a lazy {@link IteratorObject} whose prototype is
|
|
4
|
+
* the native `Iterator.prototype`. The result therefore behaves exactly like a
|
|
5
|
+
* value returned by a built-in iterator helper (e.g. `array.values().map(...)`):
|
|
6
|
+
* it is single-shot, it is iterable via `Symbol.iterator` (returning itself),
|
|
7
|
+
* and it carries every native helper method (`map`, `filter`, `take`, `drop`,
|
|
8
|
+
* `flatMap`, `reduce`, `toArray`, ...) so results can be chained with them.
|
|
9
|
+
*
|
|
10
|
+
* The result also follows the IteratorClose protocol of the native helpers, so
|
|
11
|
+
* upstream resources (e.g. `try/finally` blocks in generator sources) are
|
|
12
|
+
* released. `onClose` runs exactly once, at whichever of these happens first:
|
|
13
|
+
* the consumer terminates early (`return()`, e.g. from `take` or a `for...of`
|
|
14
|
+
* `break`), `next` throws, or `next` reports done. After the iterator is
|
|
15
|
+
* closed, `next` is never called again and every subsequent step is done.
|
|
16
|
+
*
|
|
17
|
+
* Using a hand-rolled `next` rather than a generator function is a deliberate
|
|
18
|
+
* performance choice — driving the iterator protocol directly measured roughly
|
|
19
|
+
* twice as fast as `yield`-based generators for the same transforms, while
|
|
20
|
+
* `Object.create(Iterator.prototype)` adds no measurable overhead over a plain
|
|
21
|
+
* object literal.
|
|
22
|
+
*
|
|
23
|
+
* @template T - The type of values produced by the iterator.
|
|
24
|
+
* @param next - Called to produce each step; return `{ done: true, value: undefined }` to finish.
|
|
25
|
+
* @param onClose - Called once when the iterator closes; use it to close upstream iterators.
|
|
26
|
+
* @returns A lazy {@link IteratorObject} that yields the values produced by `next`.
|
|
27
|
+
*
|
|
28
|
+
* @example
|
|
29
|
+
* function repeat<T>(value: T, times: number): IteratorObject<T, undefined> {
|
|
30
|
+
* let remaining = times;
|
|
31
|
+
* return iterator(function () {
|
|
32
|
+
* if (remaining <= 0) {
|
|
33
|
+
* return { value: undefined, done: true };
|
|
34
|
+
* }
|
|
35
|
+
* remaining--;
|
|
36
|
+
* return { value, done: false };
|
|
37
|
+
* });
|
|
38
|
+
* }
|
|
39
|
+
*/
|
|
40
|
+
function iterator(next, onClose) {
|
|
41
|
+
let closed = false;
|
|
42
|
+
const close = () => {
|
|
43
|
+
if (!closed) {
|
|
44
|
+
closed = true;
|
|
45
|
+
onClose?.();
|
|
46
|
+
}
|
|
47
|
+
};
|
|
48
|
+
const result = Object.create(Iterator.prototype);
|
|
49
|
+
result.next = function() {
|
|
50
|
+
if (closed) return {
|
|
51
|
+
value: void 0,
|
|
52
|
+
done: true
|
|
53
|
+
};
|
|
54
|
+
let step;
|
|
55
|
+
try {
|
|
56
|
+
step = next();
|
|
57
|
+
} catch (error) {
|
|
58
|
+
close();
|
|
59
|
+
throw error;
|
|
60
|
+
}
|
|
61
|
+
if (step.done) close();
|
|
62
|
+
return step;
|
|
63
|
+
};
|
|
64
|
+
result.return = function() {
|
|
65
|
+
close();
|
|
66
|
+
return {
|
|
67
|
+
value: void 0,
|
|
68
|
+
done: true
|
|
69
|
+
};
|
|
70
|
+
};
|
|
71
|
+
return result;
|
|
72
|
+
}
|
|
73
|
+
//#endregion
|
|
74
|
+
export { iterator };
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
//#region src/iterator/chunk.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* Lazily groups the elements of `source` into arrays of length `size`. The final
|
|
4
|
+
* chunk holds the remaining elements when the source length is not an exact
|
|
5
|
+
* multiple of `size`, so it may be shorter.
|
|
6
|
+
*
|
|
7
|
+
* Each chunk is produced only when requested, so this works with infinite
|
|
8
|
+
* iterators when bounded by a short-circuiting helper.
|
|
9
|
+
*
|
|
10
|
+
* @template T - The type of elements produced by the iterator.
|
|
11
|
+
* @param source - The iterator to split into chunks.
|
|
12
|
+
* @param size - The length of each chunk; must be an integer greater than zero.
|
|
13
|
+
* @returns A lazy iterator over arrays of up to `size` elements.
|
|
14
|
+
* @throws {Error} Throws an error if `size` is not an integer greater than zero.
|
|
15
|
+
*
|
|
16
|
+
* @example
|
|
17
|
+
* chunk([1, 2, 3, 4, 5].values(), 2).toArray(); // => [[1, 2], [3, 4], [5]]
|
|
18
|
+
*/
|
|
19
|
+
declare function chunk<T>(source: Iterator<T>, size: number): IteratorObject<T[], undefined>;
|
|
20
|
+
//#endregion
|
|
21
|
+
export { chunk };
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
//#region src/iterator/chunk.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* Lazily groups the elements of `source` into arrays of length `size`. The final
|
|
4
|
+
* chunk holds the remaining elements when the source length is not an exact
|
|
5
|
+
* multiple of `size`, so it may be shorter.
|
|
6
|
+
*
|
|
7
|
+
* Each chunk is produced only when requested, so this works with infinite
|
|
8
|
+
* iterators when bounded by a short-circuiting helper.
|
|
9
|
+
*
|
|
10
|
+
* @template T - The type of elements produced by the iterator.
|
|
11
|
+
* @param source - The iterator to split into chunks.
|
|
12
|
+
* @param size - The length of each chunk; must be an integer greater than zero.
|
|
13
|
+
* @returns A lazy iterator over arrays of up to `size` elements.
|
|
14
|
+
* @throws {Error} Throws an error if `size` is not an integer greater than zero.
|
|
15
|
+
*
|
|
16
|
+
* @example
|
|
17
|
+
* chunk([1, 2, 3, 4, 5].values(), 2).toArray(); // => [[1, 2], [3, 4], [5]]
|
|
18
|
+
*/
|
|
19
|
+
declare function chunk<T>(source: Iterator<T>, size: number): IteratorObject<T[], undefined>;
|
|
20
|
+
//#endregion
|
|
21
|
+
export { chunk };
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
const require_iterator = require("./_internal/iterator.js");
|
|
2
|
+
//#region src/iterator/chunk.ts
|
|
3
|
+
/**
|
|
4
|
+
* Lazily groups the elements of `source` into arrays of length `size`. The final
|
|
5
|
+
* chunk holds the remaining elements when the source length is not an exact
|
|
6
|
+
* multiple of `size`, so it may be shorter.
|
|
7
|
+
*
|
|
8
|
+
* Each chunk is produced only when requested, so this works with infinite
|
|
9
|
+
* iterators when bounded by a short-circuiting helper.
|
|
10
|
+
*
|
|
11
|
+
* @template T - The type of elements produced by the iterator.
|
|
12
|
+
* @param source - The iterator to split into chunks.
|
|
13
|
+
* @param size - The length of each chunk; must be an integer greater than zero.
|
|
14
|
+
* @returns A lazy iterator over arrays of up to `size` elements.
|
|
15
|
+
* @throws {Error} Throws an error if `size` is not an integer greater than zero.
|
|
16
|
+
*
|
|
17
|
+
* @example
|
|
18
|
+
* chunk([1, 2, 3, 4, 5].values(), 2).toArray(); // => [[1, 2], [3, 4], [5]]
|
|
19
|
+
*/
|
|
20
|
+
function chunk(source, size) {
|
|
21
|
+
if (!Number.isInteger(size) || size <= 0) throw new Error("Size must be an integer greater than zero.");
|
|
22
|
+
return require_iterator.iterator(function() {
|
|
23
|
+
const buffer = [];
|
|
24
|
+
while (buffer.length < size) {
|
|
25
|
+
const result = source.next();
|
|
26
|
+
if (result.done) break;
|
|
27
|
+
buffer.push(result.value);
|
|
28
|
+
}
|
|
29
|
+
if (buffer.length === 0) return {
|
|
30
|
+
value: void 0,
|
|
31
|
+
done: true
|
|
32
|
+
};
|
|
33
|
+
return {
|
|
34
|
+
value: buffer,
|
|
35
|
+
done: false
|
|
36
|
+
};
|
|
37
|
+
}, () => void source.return?.());
|
|
38
|
+
}
|
|
39
|
+
//#endregion
|
|
40
|
+
exports.chunk = chunk;
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { iterator } from "./_internal/iterator.mjs";
|
|
2
|
+
//#region src/iterator/chunk.ts
|
|
3
|
+
/**
|
|
4
|
+
* Lazily groups the elements of `source` into arrays of length `size`. The final
|
|
5
|
+
* chunk holds the remaining elements when the source length is not an exact
|
|
6
|
+
* multiple of `size`, so it may be shorter.
|
|
7
|
+
*
|
|
8
|
+
* Each chunk is produced only when requested, so this works with infinite
|
|
9
|
+
* iterators when bounded by a short-circuiting helper.
|
|
10
|
+
*
|
|
11
|
+
* @template T - The type of elements produced by the iterator.
|
|
12
|
+
* @param source - The iterator to split into chunks.
|
|
13
|
+
* @param size - The length of each chunk; must be an integer greater than zero.
|
|
14
|
+
* @returns A lazy iterator over arrays of up to `size` elements.
|
|
15
|
+
* @throws {Error} Throws an error if `size` is not an integer greater than zero.
|
|
16
|
+
*
|
|
17
|
+
* @example
|
|
18
|
+
* chunk([1, 2, 3, 4, 5].values(), 2).toArray(); // => [[1, 2], [3, 4], [5]]
|
|
19
|
+
*/
|
|
20
|
+
function chunk(source, size) {
|
|
21
|
+
if (!Number.isInteger(size) || size <= 0) throw new Error("Size must be an integer greater than zero.");
|
|
22
|
+
return iterator(function() {
|
|
23
|
+
const buffer = [];
|
|
24
|
+
while (buffer.length < size) {
|
|
25
|
+
const result = source.next();
|
|
26
|
+
if (result.done) break;
|
|
27
|
+
buffer.push(result.value);
|
|
28
|
+
}
|
|
29
|
+
if (buffer.length === 0) return {
|
|
30
|
+
value: void 0,
|
|
31
|
+
done: true
|
|
32
|
+
};
|
|
33
|
+
return {
|
|
34
|
+
value: buffer,
|
|
35
|
+
done: false
|
|
36
|
+
};
|
|
37
|
+
}, () => void source.return?.());
|
|
38
|
+
}
|
|
39
|
+
//#endregion
|
|
40
|
+
export { chunk };
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
//#region src/iterator/count.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* Consumes `source` and returns the number of elements it produces. This is a
|
|
4
|
+
* terminal operation: it pulls every element, so it must not be used on an
|
|
5
|
+
* infinite iterator.
|
|
6
|
+
*
|
|
7
|
+
* Unlike `source.toArray().length`, this counts without allocating an array.
|
|
8
|
+
*
|
|
9
|
+
* @template T - The type of elements produced by the iterator.
|
|
10
|
+
* @param source - The iterator to count.
|
|
11
|
+
* @returns The number of elements produced by `source`.
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* count([1, 2, 3].values()); // => 3
|
|
15
|
+
*/
|
|
16
|
+
declare function count<T>(source: Iterator<T>): number;
|
|
17
|
+
//#endregion
|
|
18
|
+
export { count };
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
//#region src/iterator/count.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* Consumes `source` and returns the number of elements it produces. This is a
|
|
4
|
+
* terminal operation: it pulls every element, so it must not be used on an
|
|
5
|
+
* infinite iterator.
|
|
6
|
+
*
|
|
7
|
+
* Unlike `source.toArray().length`, this counts without allocating an array.
|
|
8
|
+
*
|
|
9
|
+
* @template T - The type of elements produced by the iterator.
|
|
10
|
+
* @param source - The iterator to count.
|
|
11
|
+
* @returns The number of elements produced by `source`.
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* count([1, 2, 3].values()); // => 3
|
|
15
|
+
*/
|
|
16
|
+
declare function count<T>(source: Iterator<T>): number;
|
|
17
|
+
//#endregion
|
|
18
|
+
export { count };
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
//#region src/iterator/count.ts
|
|
2
|
+
/**
|
|
3
|
+
* Consumes `source` and returns the number of elements it produces. This is a
|
|
4
|
+
* terminal operation: it pulls every element, so it must not be used on an
|
|
5
|
+
* infinite iterator.
|
|
6
|
+
*
|
|
7
|
+
* Unlike `source.toArray().length`, this counts without allocating an array.
|
|
8
|
+
*
|
|
9
|
+
* @template T - The type of elements produced by the iterator.
|
|
10
|
+
* @param source - The iterator to count.
|
|
11
|
+
* @returns The number of elements produced by `source`.
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* count([1, 2, 3].values()); // => 3
|
|
15
|
+
*/
|
|
16
|
+
function count(source) {
|
|
17
|
+
let total = 0;
|
|
18
|
+
let next = source.next();
|
|
19
|
+
while (!next.done) {
|
|
20
|
+
total++;
|
|
21
|
+
next = source.next();
|
|
22
|
+
}
|
|
23
|
+
return total;
|
|
24
|
+
}
|
|
25
|
+
//#endregion
|
|
26
|
+
exports.count = count;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
//#region src/iterator/count.ts
|
|
2
|
+
/**
|
|
3
|
+
* Consumes `source` and returns the number of elements it produces. This is a
|
|
4
|
+
* terminal operation: it pulls every element, so it must not be used on an
|
|
5
|
+
* infinite iterator.
|
|
6
|
+
*
|
|
7
|
+
* Unlike `source.toArray().length`, this counts without allocating an array.
|
|
8
|
+
*
|
|
9
|
+
* @template T - The type of elements produced by the iterator.
|
|
10
|
+
* @param source - The iterator to count.
|
|
11
|
+
* @returns The number of elements produced by `source`.
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* count([1, 2, 3].values()); // => 3
|
|
15
|
+
*/
|
|
16
|
+
function count(source) {
|
|
17
|
+
let total = 0;
|
|
18
|
+
let next = source.next();
|
|
19
|
+
while (!next.done) {
|
|
20
|
+
total++;
|
|
21
|
+
next = source.next();
|
|
22
|
+
}
|
|
23
|
+
return total;
|
|
24
|
+
}
|
|
25
|
+
//#endregion
|
|
26
|
+
export { count };
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
//#region src/iterator/dropWhile.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* Lazily skips elements from `source` as long as `shouldDrop` returns a truthy
|
|
4
|
+
* value, then yields every remaining element (including the one that first
|
|
5
|
+
* failed the predicate).
|
|
6
|
+
*
|
|
7
|
+
* The native iterator helpers offer `drop` (by count) but not a predicate-based
|
|
8
|
+
* `dropWhile`, which is why this is provided.
|
|
9
|
+
*
|
|
10
|
+
* @template T - The type of elements produced by the iterator.
|
|
11
|
+
* @param source - The iterator to drop elements from.
|
|
12
|
+
* @param shouldDrop - Called with `(value, index)`; elements are skipped while it returns truthy.
|
|
13
|
+
* @returns A lazy iterator over the elements after the dropped leading run.
|
|
14
|
+
*
|
|
15
|
+
* @example
|
|
16
|
+
* dropWhile([1, 2, 3, 1].values(), x => x < 3).toArray(); // => [3, 1]
|
|
17
|
+
*/
|
|
18
|
+
declare function dropWhile<T>(source: Iterator<T>, shouldDrop: (value: T, index: number) => boolean): IteratorObject<T, undefined>;
|
|
19
|
+
//#endregion
|
|
20
|
+
export { dropWhile };
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
//#region src/iterator/dropWhile.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* Lazily skips elements from `source` as long as `shouldDrop` returns a truthy
|
|
4
|
+
* value, then yields every remaining element (including the one that first
|
|
5
|
+
* failed the predicate).
|
|
6
|
+
*
|
|
7
|
+
* The native iterator helpers offer `drop` (by count) but not a predicate-based
|
|
8
|
+
* `dropWhile`, which is why this is provided.
|
|
9
|
+
*
|
|
10
|
+
* @template T - The type of elements produced by the iterator.
|
|
11
|
+
* @param source - The iterator to drop elements from.
|
|
12
|
+
* @param shouldDrop - Called with `(value, index)`; elements are skipped while it returns truthy.
|
|
13
|
+
* @returns A lazy iterator over the elements after the dropped leading run.
|
|
14
|
+
*
|
|
15
|
+
* @example
|
|
16
|
+
* dropWhile([1, 2, 3, 1].values(), x => x < 3).toArray(); // => [3, 1]
|
|
17
|
+
*/
|
|
18
|
+
declare function dropWhile<T>(source: Iterator<T>, shouldDrop: (value: T, index: number) => boolean): IteratorObject<T, undefined>;
|
|
19
|
+
//#endregion
|
|
20
|
+
export { dropWhile };
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
const require_iterator = require("./_internal/iterator.js");
|
|
2
|
+
//#region src/iterator/dropWhile.ts
|
|
3
|
+
/**
|
|
4
|
+
* Lazily skips elements from `source` as long as `shouldDrop` returns a truthy
|
|
5
|
+
* value, then yields every remaining element (including the one that first
|
|
6
|
+
* failed the predicate).
|
|
7
|
+
*
|
|
8
|
+
* The native iterator helpers offer `drop` (by count) but not a predicate-based
|
|
9
|
+
* `dropWhile`, which is why this is provided.
|
|
10
|
+
*
|
|
11
|
+
* @template T - The type of elements produced by the iterator.
|
|
12
|
+
* @param source - The iterator to drop elements from.
|
|
13
|
+
* @param shouldDrop - Called with `(value, index)`; elements are skipped while it returns truthy.
|
|
14
|
+
* @returns A lazy iterator over the elements after the dropped leading run.
|
|
15
|
+
*
|
|
16
|
+
* @example
|
|
17
|
+
* dropWhile([1, 2, 3, 1].values(), x => x < 3).toArray(); // => [3, 1]
|
|
18
|
+
*/
|
|
19
|
+
function dropWhile(source, shouldDrop) {
|
|
20
|
+
let index = 0;
|
|
21
|
+
let dropping = true;
|
|
22
|
+
return require_iterator.iterator(function() {
|
|
23
|
+
while (dropping) {
|
|
24
|
+
const result = source.next();
|
|
25
|
+
if (result.done) {
|
|
26
|
+
dropping = false;
|
|
27
|
+
return {
|
|
28
|
+
value: void 0,
|
|
29
|
+
done: true
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
if (!shouldDrop(result.value, index++)) {
|
|
33
|
+
dropping = false;
|
|
34
|
+
return {
|
|
35
|
+
value: result.value,
|
|
36
|
+
done: false
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
const result = source.next();
|
|
41
|
+
if (result.done) return {
|
|
42
|
+
value: void 0,
|
|
43
|
+
done: true
|
|
44
|
+
};
|
|
45
|
+
return {
|
|
46
|
+
value: result.value,
|
|
47
|
+
done: false
|
|
48
|
+
};
|
|
49
|
+
}, () => void source.return?.());
|
|
50
|
+
}
|
|
51
|
+
//#endregion
|
|
52
|
+
exports.dropWhile = dropWhile;
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { iterator } from "./_internal/iterator.mjs";
|
|
2
|
+
//#region src/iterator/dropWhile.ts
|
|
3
|
+
/**
|
|
4
|
+
* Lazily skips elements from `source` as long as `shouldDrop` returns a truthy
|
|
5
|
+
* value, then yields every remaining element (including the one that first
|
|
6
|
+
* failed the predicate).
|
|
7
|
+
*
|
|
8
|
+
* The native iterator helpers offer `drop` (by count) but not a predicate-based
|
|
9
|
+
* `dropWhile`, which is why this is provided.
|
|
10
|
+
*
|
|
11
|
+
* @template T - The type of elements produced by the iterator.
|
|
12
|
+
* @param source - The iterator to drop elements from.
|
|
13
|
+
* @param shouldDrop - Called with `(value, index)`; elements are skipped while it returns truthy.
|
|
14
|
+
* @returns A lazy iterator over the elements after the dropped leading run.
|
|
15
|
+
*
|
|
16
|
+
* @example
|
|
17
|
+
* dropWhile([1, 2, 3, 1].values(), x => x < 3).toArray(); // => [3, 1]
|
|
18
|
+
*/
|
|
19
|
+
function dropWhile(source, shouldDrop) {
|
|
20
|
+
let index = 0;
|
|
21
|
+
let dropping = true;
|
|
22
|
+
return iterator(function() {
|
|
23
|
+
while (dropping) {
|
|
24
|
+
const result = source.next();
|
|
25
|
+
if (result.done) {
|
|
26
|
+
dropping = false;
|
|
27
|
+
return {
|
|
28
|
+
value: void 0,
|
|
29
|
+
done: true
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
if (!shouldDrop(result.value, index++)) {
|
|
33
|
+
dropping = false;
|
|
34
|
+
return {
|
|
35
|
+
value: result.value,
|
|
36
|
+
done: false
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
const result = source.next();
|
|
41
|
+
if (result.done) return {
|
|
42
|
+
value: void 0,
|
|
43
|
+
done: true
|
|
44
|
+
};
|
|
45
|
+
return {
|
|
46
|
+
value: result.value,
|
|
47
|
+
done: false
|
|
48
|
+
};
|
|
49
|
+
}, () => void source.return?.());
|
|
50
|
+
}
|
|
51
|
+
//#endregion
|
|
52
|
+
export { dropWhile };
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
//#region src/iterator/head.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* Returns the first element produced by `source`, or `undefined` if it is empty.
|
|
4
|
+
* This pulls a single element and then stops, so it is safe to use on an
|
|
5
|
+
* infinite iterator.
|
|
6
|
+
*
|
|
7
|
+
* This consumes the iterator rather than peeking at it: after reading the first
|
|
8
|
+
* element, `source` is closed via its `return` method (matching the native
|
|
9
|
+
* `Iterator.prototype.find`), so it cannot be iterated further.
|
|
10
|
+
*
|
|
11
|
+
* @template T - The type of elements produced by the iterator.
|
|
12
|
+
* @param source - The iterator to read the first element from.
|
|
13
|
+
* @returns The first element, or `undefined` when the iterator yields nothing.
|
|
14
|
+
*
|
|
15
|
+
* @example
|
|
16
|
+
* head([1, 2, 3].values()); // => 1
|
|
17
|
+
* head([].values()); // => undefined
|
|
18
|
+
*/
|
|
19
|
+
declare function head<T>(source: Iterator<T>): T | undefined;
|
|
20
|
+
//#endregion
|
|
21
|
+
export { head };
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
//#region src/iterator/head.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* Returns the first element produced by `source`, or `undefined` if it is empty.
|
|
4
|
+
* This pulls a single element and then stops, so it is safe to use on an
|
|
5
|
+
* infinite iterator.
|
|
6
|
+
*
|
|
7
|
+
* This consumes the iterator rather than peeking at it: after reading the first
|
|
8
|
+
* element, `source` is closed via its `return` method (matching the native
|
|
9
|
+
* `Iterator.prototype.find`), so it cannot be iterated further.
|
|
10
|
+
*
|
|
11
|
+
* @template T - The type of elements produced by the iterator.
|
|
12
|
+
* @param source - The iterator to read the first element from.
|
|
13
|
+
* @returns The first element, or `undefined` when the iterator yields nothing.
|
|
14
|
+
*
|
|
15
|
+
* @example
|
|
16
|
+
* head([1, 2, 3].values()); // => 1
|
|
17
|
+
* head([].values()); // => undefined
|
|
18
|
+
*/
|
|
19
|
+
declare function head<T>(source: Iterator<T>): T | undefined;
|
|
20
|
+
//#endregion
|
|
21
|
+
export { head };
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
//#region src/iterator/head.ts
|
|
2
|
+
/**
|
|
3
|
+
* Returns the first element produced by `source`, or `undefined` if it is empty.
|
|
4
|
+
* This pulls a single element and then stops, so it is safe to use on an
|
|
5
|
+
* infinite iterator.
|
|
6
|
+
*
|
|
7
|
+
* This consumes the iterator rather than peeking at it: after reading the first
|
|
8
|
+
* element, `source` is closed via its `return` method (matching the native
|
|
9
|
+
* `Iterator.prototype.find`), so it cannot be iterated further.
|
|
10
|
+
*
|
|
11
|
+
* @template T - The type of elements produced by the iterator.
|
|
12
|
+
* @param source - The iterator to read the first element from.
|
|
13
|
+
* @returns The first element, or `undefined` when the iterator yields nothing.
|
|
14
|
+
*
|
|
15
|
+
* @example
|
|
16
|
+
* head([1, 2, 3].values()); // => 1
|
|
17
|
+
* head([].values()); // => undefined
|
|
18
|
+
*/
|
|
19
|
+
function head(source) {
|
|
20
|
+
const result = source.next();
|
|
21
|
+
if (result.done) return;
|
|
22
|
+
source.return?.();
|
|
23
|
+
return result.value;
|
|
24
|
+
}
|
|
25
|
+
//#endregion
|
|
26
|
+
exports.head = head;
|