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
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
const require_iterator = require("./_internal/iterator.js");
|
|
2
|
+
//#region src/iterator/takeWhile.ts
|
|
3
|
+
/**
|
|
4
|
+
* Lazily yields elements from `source` as long as `shouldContinue` returns a
|
|
5
|
+
* truthy value, stopping at (and excluding) the first element for which it
|
|
6
|
+
* returns a falsy value. The remaining elements are never pulled from `source`.
|
|
7
|
+
*
|
|
8
|
+
* The native iterator helpers offer `take` (by count) but not a predicate-based
|
|
9
|
+
* `takeWhile`, which is why this is provided.
|
|
10
|
+
*
|
|
11
|
+
* @template T - The type of elements produced by the iterator.
|
|
12
|
+
* @param source - The iterator to take elements from.
|
|
13
|
+
* @param shouldContinue - Called with `(value, index)`; iteration stops once it returns falsy.
|
|
14
|
+
* @returns A lazy iterator over the leading run of matching elements.
|
|
15
|
+
*
|
|
16
|
+
* @example
|
|
17
|
+
* takeWhile([1, 2, 3, 4, 1].values(), x => x < 3).toArray(); // => [1, 2]
|
|
18
|
+
*/
|
|
19
|
+
function takeWhile(source, shouldContinue) {
|
|
20
|
+
let index = 0;
|
|
21
|
+
return require_iterator.iterator(function() {
|
|
22
|
+
const result = source.next();
|
|
23
|
+
if (result.done || !shouldContinue(result.value, index++)) return {
|
|
24
|
+
value: void 0,
|
|
25
|
+
done: true
|
|
26
|
+
};
|
|
27
|
+
return {
|
|
28
|
+
value: result.value,
|
|
29
|
+
done: false
|
|
30
|
+
};
|
|
31
|
+
}, () => void source.return?.());
|
|
32
|
+
}
|
|
33
|
+
//#endregion
|
|
34
|
+
exports.takeWhile = takeWhile;
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { iterator } from "./_internal/iterator.mjs";
|
|
2
|
+
//#region src/iterator/takeWhile.ts
|
|
3
|
+
/**
|
|
4
|
+
* Lazily yields elements from `source` as long as `shouldContinue` returns a
|
|
5
|
+
* truthy value, stopping at (and excluding) the first element for which it
|
|
6
|
+
* returns a falsy value. The remaining elements are never pulled from `source`.
|
|
7
|
+
*
|
|
8
|
+
* The native iterator helpers offer `take` (by count) but not a predicate-based
|
|
9
|
+
* `takeWhile`, which is why this is provided.
|
|
10
|
+
*
|
|
11
|
+
* @template T - The type of elements produced by the iterator.
|
|
12
|
+
* @param source - The iterator to take elements from.
|
|
13
|
+
* @param shouldContinue - Called with `(value, index)`; iteration stops once it returns falsy.
|
|
14
|
+
* @returns A lazy iterator over the leading run of matching elements.
|
|
15
|
+
*
|
|
16
|
+
* @example
|
|
17
|
+
* takeWhile([1, 2, 3, 4, 1].values(), x => x < 3).toArray(); // => [1, 2]
|
|
18
|
+
*/
|
|
19
|
+
function takeWhile(source, shouldContinue) {
|
|
20
|
+
let index = 0;
|
|
21
|
+
return iterator(function() {
|
|
22
|
+
const result = source.next();
|
|
23
|
+
if (result.done || !shouldContinue(result.value, index++)) return {
|
|
24
|
+
value: void 0,
|
|
25
|
+
done: true
|
|
26
|
+
};
|
|
27
|
+
return {
|
|
28
|
+
value: result.value,
|
|
29
|
+
done: false
|
|
30
|
+
};
|
|
31
|
+
}, () => void source.return?.());
|
|
32
|
+
}
|
|
33
|
+
//#endregion
|
|
34
|
+
export { takeWhile };
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
//#region src/iterator/uniqBy.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* Lazily yields the elements of `source` whose mapped key has not been seen
|
|
4
|
+
* before, preserving the order of first occurrence. Keys are compared with
|
|
5
|
+
* SameValueZero semantics (matching `Set`).
|
|
6
|
+
*
|
|
7
|
+
* Deduplication is streaming: each element is emitted as soon as it is found to
|
|
8
|
+
* be unique, so this works with infinite iterators when bounded by a
|
|
9
|
+
* short-circuiting helper.
|
|
10
|
+
*
|
|
11
|
+
* @template T - The type of elements produced by the iterator.
|
|
12
|
+
* @template K - The type of the key used for comparison.
|
|
13
|
+
* @param source - The iterator to deduplicate.
|
|
14
|
+
* @param getKey - Maps an element to the key used to detect duplicates.
|
|
15
|
+
* @returns A lazy iterator over the elements with duplicate keys removed.
|
|
16
|
+
*
|
|
17
|
+
* @example
|
|
18
|
+
* uniqBy([1.1, 1.2, 2.3, 2.4].values(), Math.floor).toArray(); // => [1.1, 2.3]
|
|
19
|
+
*/
|
|
20
|
+
declare function uniqBy<T, K>(source: Iterator<T>, getKey: (value: T) => K): IteratorObject<T, undefined>;
|
|
21
|
+
//#endregion
|
|
22
|
+
export { uniqBy };
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
//#region src/iterator/uniqBy.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* Lazily yields the elements of `source` whose mapped key has not been seen
|
|
4
|
+
* before, preserving the order of first occurrence. Keys are compared with
|
|
5
|
+
* SameValueZero semantics (matching `Set`).
|
|
6
|
+
*
|
|
7
|
+
* Deduplication is streaming: each element is emitted as soon as it is found to
|
|
8
|
+
* be unique, so this works with infinite iterators when bounded by a
|
|
9
|
+
* short-circuiting helper.
|
|
10
|
+
*
|
|
11
|
+
* @template T - The type of elements produced by the iterator.
|
|
12
|
+
* @template K - The type of the key used for comparison.
|
|
13
|
+
* @param source - The iterator to deduplicate.
|
|
14
|
+
* @param getKey - Maps an element to the key used to detect duplicates.
|
|
15
|
+
* @returns A lazy iterator over the elements with duplicate keys removed.
|
|
16
|
+
*
|
|
17
|
+
* @example
|
|
18
|
+
* uniqBy([1.1, 1.2, 2.3, 2.4].values(), Math.floor).toArray(); // => [1.1, 2.3]
|
|
19
|
+
*/
|
|
20
|
+
declare function uniqBy<T, K>(source: Iterator<T>, getKey: (value: T) => K): IteratorObject<T, undefined>;
|
|
21
|
+
//#endregion
|
|
22
|
+
export { uniqBy };
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
const require_iterator = require("./_internal/iterator.js");
|
|
2
|
+
//#region src/iterator/uniqBy.ts
|
|
3
|
+
/**
|
|
4
|
+
* Lazily yields the elements of `source` whose mapped key has not been seen
|
|
5
|
+
* before, preserving the order of first occurrence. Keys are compared with
|
|
6
|
+
* SameValueZero semantics (matching `Set`).
|
|
7
|
+
*
|
|
8
|
+
* Deduplication is streaming: each element is emitted as soon as it is found to
|
|
9
|
+
* be unique, so this works with infinite iterators when bounded by a
|
|
10
|
+
* short-circuiting helper.
|
|
11
|
+
*
|
|
12
|
+
* @template T - The type of elements produced by the iterator.
|
|
13
|
+
* @template K - The type of the key used for comparison.
|
|
14
|
+
* @param source - The iterator to deduplicate.
|
|
15
|
+
* @param getKey - Maps an element to the key used to detect duplicates.
|
|
16
|
+
* @returns A lazy iterator over the elements with duplicate keys removed.
|
|
17
|
+
*
|
|
18
|
+
* @example
|
|
19
|
+
* uniqBy([1.1, 1.2, 2.3, 2.4].values(), Math.floor).toArray(); // => [1.1, 2.3]
|
|
20
|
+
*/
|
|
21
|
+
function uniqBy(source, getKey) {
|
|
22
|
+
const seen = /* @__PURE__ */ new Set();
|
|
23
|
+
return require_iterator.iterator(function() {
|
|
24
|
+
let result = source.next();
|
|
25
|
+
while (!result.done) {
|
|
26
|
+
const key = getKey(result.value);
|
|
27
|
+
if (!seen.has(key)) {
|
|
28
|
+
seen.add(key);
|
|
29
|
+
return {
|
|
30
|
+
value: result.value,
|
|
31
|
+
done: false
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
result = source.next();
|
|
35
|
+
}
|
|
36
|
+
return {
|
|
37
|
+
value: void 0,
|
|
38
|
+
done: true
|
|
39
|
+
};
|
|
40
|
+
}, () => void source.return?.());
|
|
41
|
+
}
|
|
42
|
+
//#endregion
|
|
43
|
+
exports.uniqBy = uniqBy;
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { iterator } from "./_internal/iterator.mjs";
|
|
2
|
+
//#region src/iterator/uniqBy.ts
|
|
3
|
+
/**
|
|
4
|
+
* Lazily yields the elements of `source` whose mapped key has not been seen
|
|
5
|
+
* before, preserving the order of first occurrence. Keys are compared with
|
|
6
|
+
* SameValueZero semantics (matching `Set`).
|
|
7
|
+
*
|
|
8
|
+
* Deduplication is streaming: each element is emitted as soon as it is found to
|
|
9
|
+
* be unique, so this works with infinite iterators when bounded by a
|
|
10
|
+
* short-circuiting helper.
|
|
11
|
+
*
|
|
12
|
+
* @template T - The type of elements produced by the iterator.
|
|
13
|
+
* @template K - The type of the key used for comparison.
|
|
14
|
+
* @param source - The iterator to deduplicate.
|
|
15
|
+
* @param getKey - Maps an element to the key used to detect duplicates.
|
|
16
|
+
* @returns A lazy iterator over the elements with duplicate keys removed.
|
|
17
|
+
*
|
|
18
|
+
* @example
|
|
19
|
+
* uniqBy([1.1, 1.2, 2.3, 2.4].values(), Math.floor).toArray(); // => [1.1, 2.3]
|
|
20
|
+
*/
|
|
21
|
+
function uniqBy(source, getKey) {
|
|
22
|
+
const seen = /* @__PURE__ */ new Set();
|
|
23
|
+
return iterator(function() {
|
|
24
|
+
let result = source.next();
|
|
25
|
+
while (!result.done) {
|
|
26
|
+
const key = getKey(result.value);
|
|
27
|
+
if (!seen.has(key)) {
|
|
28
|
+
seen.add(key);
|
|
29
|
+
return {
|
|
30
|
+
value: result.value,
|
|
31
|
+
done: false
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
result = source.next();
|
|
35
|
+
}
|
|
36
|
+
return {
|
|
37
|
+
value: void 0,
|
|
38
|
+
done: true
|
|
39
|
+
};
|
|
40
|
+
}, () => void source.return?.());
|
|
41
|
+
}
|
|
42
|
+
//#endregion
|
|
43
|
+
export { uniqBy };
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
//#region src/iterator/zip.d.ts
|
|
2
|
+
type IteratorValue<T> = T extends Iterator<infer V> ? V : never;
|
|
3
|
+
/**
|
|
4
|
+
* Lazily combines several iterators into a single iterator of tuples, pairing
|
|
5
|
+
* the elements at matching positions. Iteration stops as soon as the **shortest**
|
|
6
|
+
* source is exhausted.
|
|
7
|
+
*
|
|
8
|
+
* Stopping at the shortest source (rather than padding to the longest, as the
|
|
9
|
+
* array `zip` does) is what makes this safe to use with infinite iterators:
|
|
10
|
+
* `zip(range(0, Infinity), names.values())` ends with `names`. When iteration
|
|
11
|
+
* ends — because a source ran out or the consumer terminated early — every
|
|
12
|
+
* source is closed via its `return` method.
|
|
13
|
+
*
|
|
14
|
+
* @template T - A tuple of the source iterator types.
|
|
15
|
+
* @param sources - The iterators to zip together.
|
|
16
|
+
* @returns A lazy iterator over tuples of the paired elements.
|
|
17
|
+
*
|
|
18
|
+
* @example
|
|
19
|
+
* zip([1, 2, 3].values(), ['a', 'b'].values()).toArray(); // => [[1, 'a'], [2, 'b']]
|
|
20
|
+
*/
|
|
21
|
+
declare function zip<T extends Array<Iterator<unknown>>>(...sources: T): IteratorObject<{ [K in keyof T]: IteratorValue<T[K]> }, undefined>;
|
|
22
|
+
//#endregion
|
|
23
|
+
export { zip };
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
//#region src/iterator/zip.d.ts
|
|
2
|
+
type IteratorValue<T> = T extends Iterator<infer V> ? V : never;
|
|
3
|
+
/**
|
|
4
|
+
* Lazily combines several iterators into a single iterator of tuples, pairing
|
|
5
|
+
* the elements at matching positions. Iteration stops as soon as the **shortest**
|
|
6
|
+
* source is exhausted.
|
|
7
|
+
*
|
|
8
|
+
* Stopping at the shortest source (rather than padding to the longest, as the
|
|
9
|
+
* array `zip` does) is what makes this safe to use with infinite iterators:
|
|
10
|
+
* `zip(range(0, Infinity), names.values())` ends with `names`. When iteration
|
|
11
|
+
* ends — because a source ran out or the consumer terminated early — every
|
|
12
|
+
* source is closed via its `return` method.
|
|
13
|
+
*
|
|
14
|
+
* @template T - A tuple of the source iterator types.
|
|
15
|
+
* @param sources - The iterators to zip together.
|
|
16
|
+
* @returns A lazy iterator over tuples of the paired elements.
|
|
17
|
+
*
|
|
18
|
+
* @example
|
|
19
|
+
* zip([1, 2, 3].values(), ['a', 'b'].values()).toArray(); // => [[1, 'a'], [2, 'b']]
|
|
20
|
+
*/
|
|
21
|
+
declare function zip<T extends Array<Iterator<unknown>>>(...sources: T): IteratorObject<{ [K in keyof T]: IteratorValue<T[K]> }, undefined>;
|
|
22
|
+
//#endregion
|
|
23
|
+
export { zip };
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
const require_iterator = require("./_internal/iterator.js");
|
|
2
|
+
//#region src/iterator/zip.ts
|
|
3
|
+
/**
|
|
4
|
+
* Lazily combines several iterators into a single iterator of tuples, pairing
|
|
5
|
+
* the elements at matching positions. Iteration stops as soon as the **shortest**
|
|
6
|
+
* source is exhausted.
|
|
7
|
+
*
|
|
8
|
+
* Stopping at the shortest source (rather than padding to the longest, as the
|
|
9
|
+
* array `zip` does) is what makes this safe to use with infinite iterators:
|
|
10
|
+
* `zip(range(0, Infinity), names.values())` ends with `names`. When iteration
|
|
11
|
+
* ends — because a source ran out or the consumer terminated early — every
|
|
12
|
+
* source is closed via its `return` method.
|
|
13
|
+
*
|
|
14
|
+
* @template T - A tuple of the source iterator types.
|
|
15
|
+
* @param sources - The iterators to zip together.
|
|
16
|
+
* @returns A lazy iterator over tuples of the paired elements.
|
|
17
|
+
*
|
|
18
|
+
* @example
|
|
19
|
+
* zip([1, 2, 3].values(), ['a', 'b'].values()).toArray(); // => [[1, 'a'], [2, 'b']]
|
|
20
|
+
*/
|
|
21
|
+
function zip(...sources) {
|
|
22
|
+
return require_iterator.iterator(function() {
|
|
23
|
+
if (sources.length === 0) return {
|
|
24
|
+
value: void 0,
|
|
25
|
+
done: true
|
|
26
|
+
};
|
|
27
|
+
const tuple = new Array(sources.length);
|
|
28
|
+
for (let index = 0; index < sources.length; index++) {
|
|
29
|
+
const result = sources[index].next();
|
|
30
|
+
if (result.done) return {
|
|
31
|
+
value: void 0,
|
|
32
|
+
done: true
|
|
33
|
+
};
|
|
34
|
+
tuple[index] = result.value;
|
|
35
|
+
}
|
|
36
|
+
return {
|
|
37
|
+
value: tuple,
|
|
38
|
+
done: false
|
|
39
|
+
};
|
|
40
|
+
}, () => {
|
|
41
|
+
for (const source of sources) source.return?.();
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
//#endregion
|
|
45
|
+
exports.zip = zip;
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { iterator } from "./_internal/iterator.mjs";
|
|
2
|
+
//#region src/iterator/zip.ts
|
|
3
|
+
/**
|
|
4
|
+
* Lazily combines several iterators into a single iterator of tuples, pairing
|
|
5
|
+
* the elements at matching positions. Iteration stops as soon as the **shortest**
|
|
6
|
+
* source is exhausted.
|
|
7
|
+
*
|
|
8
|
+
* Stopping at the shortest source (rather than padding to the longest, as the
|
|
9
|
+
* array `zip` does) is what makes this safe to use with infinite iterators:
|
|
10
|
+
* `zip(range(0, Infinity), names.values())` ends with `names`. When iteration
|
|
11
|
+
* ends — because a source ran out or the consumer terminated early — every
|
|
12
|
+
* source is closed via its `return` method.
|
|
13
|
+
*
|
|
14
|
+
* @template T - A tuple of the source iterator types.
|
|
15
|
+
* @param sources - The iterators to zip together.
|
|
16
|
+
* @returns A lazy iterator over tuples of the paired elements.
|
|
17
|
+
*
|
|
18
|
+
* @example
|
|
19
|
+
* zip([1, 2, 3].values(), ['a', 'b'].values()).toArray(); // => [[1, 'a'], [2, 'b']]
|
|
20
|
+
*/
|
|
21
|
+
function zip(...sources) {
|
|
22
|
+
return iterator(function() {
|
|
23
|
+
if (sources.length === 0) return {
|
|
24
|
+
value: void 0,
|
|
25
|
+
done: true
|
|
26
|
+
};
|
|
27
|
+
const tuple = new Array(sources.length);
|
|
28
|
+
for (let index = 0; index < sources.length; index++) {
|
|
29
|
+
const result = sources[index].next();
|
|
30
|
+
if (result.done) return {
|
|
31
|
+
value: void 0,
|
|
32
|
+
done: true
|
|
33
|
+
};
|
|
34
|
+
tuple[index] = result.value;
|
|
35
|
+
}
|
|
36
|
+
return {
|
|
37
|
+
value: tuple,
|
|
38
|
+
done: false
|
|
39
|
+
};
|
|
40
|
+
}, () => {
|
|
41
|
+
for (const source of sources) source.return?.();
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
//#endregion
|
|
45
|
+
export { zip };
|
|
@@ -34,7 +34,9 @@
|
|
|
34
34
|
* // Clone an array with a customizer
|
|
35
35
|
* const arr = [1, 2, 3];
|
|
36
36
|
* const clonedArr = cloneDeepWith(arr, (value) => {
|
|
37
|
-
*
|
|
37
|
+
* if (typeof value === 'number') {
|
|
38
|
+
* return value + 1; // Increment each number
|
|
39
|
+
* }
|
|
38
40
|
* });
|
|
39
41
|
* console.log(clonedArr); // [2, 3, 4]
|
|
40
42
|
* console.log(clonedArr === arr); // false
|
|
@@ -34,7 +34,9 @@
|
|
|
34
34
|
* // Clone an array with a customizer
|
|
35
35
|
* const arr = [1, 2, 3];
|
|
36
36
|
* const clonedArr = cloneDeepWith(arr, (value) => {
|
|
37
|
-
*
|
|
37
|
+
* if (typeof value === 'number') {
|
|
38
|
+
* return value + 1; // Increment each number
|
|
39
|
+
* }
|
|
38
40
|
* });
|
|
39
41
|
* console.log(clonedArr); // [2, 3, 4]
|
|
40
42
|
* console.log(clonedArr === arr); // false
|
|
@@ -40,7 +40,9 @@ const require_isBuffer = require("../predicate/isBuffer.js");
|
|
|
40
40
|
* // Clone an array with a customizer
|
|
41
41
|
* const arr = [1, 2, 3];
|
|
42
42
|
* const clonedArr = cloneDeepWith(arr, (value) => {
|
|
43
|
-
*
|
|
43
|
+
* if (typeof value === 'number') {
|
|
44
|
+
* return value + 1; // Increment each number
|
|
45
|
+
* }
|
|
44
46
|
* });
|
|
45
47
|
* console.log(clonedArr); // [2, 3, 4]
|
|
46
48
|
* console.log(clonedArr === arr); // false
|
|
@@ -40,7 +40,9 @@ import { isBuffer } from "../predicate/isBuffer.mjs";
|
|
|
40
40
|
* // Clone an array with a customizer
|
|
41
41
|
* const arr = [1, 2, 3];
|
|
42
42
|
* const clonedArr = cloneDeepWith(arr, (value) => {
|
|
43
|
-
*
|
|
43
|
+
* if (typeof value === 'number') {
|
|
44
|
+
* return value + 1; // Increment each number
|
|
45
|
+
* }
|
|
44
46
|
* });
|
|
45
47
|
* console.log(clonedArr); // [2, 3, 4]
|
|
46
48
|
* console.log(clonedArr === arr); // false
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
//#region src/object/deepFreeze.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* Deeply freezes an object, making it and all nested objects immutable.
|
|
4
|
+
*
|
|
5
|
+
* Unlike `Object.freeze`, which only freezes the immediate properties of an object,
|
|
6
|
+
* `deepFreeze` recursively freezes all nested objects and arrays.
|
|
7
|
+
*
|
|
8
|
+
* @template T - The type of the object.
|
|
9
|
+
* @param {T} obj - The object to deeply freeze.
|
|
10
|
+
* @returns {T} The deeply frozen object.
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* const frozen = deepFreeze({ user: { name: "Alex", age: 20 } });
|
|
14
|
+
*
|
|
15
|
+
* frozen.user = {}; // TypeError in strict mode
|
|
16
|
+
* frozen.user.age = 22; // TypeError in strict mode
|
|
17
|
+
*/
|
|
18
|
+
declare function deepFreeze<T>(obj: T): T;
|
|
19
|
+
//#endregion
|
|
20
|
+
export { deepFreeze };
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
//#region src/object/deepFreeze.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* Deeply freezes an object, making it and all nested objects immutable.
|
|
4
|
+
*
|
|
5
|
+
* Unlike `Object.freeze`, which only freezes the immediate properties of an object,
|
|
6
|
+
* `deepFreeze` recursively freezes all nested objects and arrays.
|
|
7
|
+
*
|
|
8
|
+
* @template T - The type of the object.
|
|
9
|
+
* @param {T} obj - The object to deeply freeze.
|
|
10
|
+
* @returns {T} The deeply frozen object.
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* const frozen = deepFreeze({ user: { name: "Alex", age: 20 } });
|
|
14
|
+
*
|
|
15
|
+
* frozen.user = {}; // TypeError in strict mode
|
|
16
|
+
* frozen.user.age = 22; // TypeError in strict mode
|
|
17
|
+
*/
|
|
18
|
+
declare function deepFreeze<T>(obj: T): T;
|
|
19
|
+
//#endregion
|
|
20
|
+
export { deepFreeze };
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
//#region src/object/deepFreeze.ts
|
|
2
|
+
/**
|
|
3
|
+
* Deeply freezes an object, making it and all nested objects immutable.
|
|
4
|
+
*
|
|
5
|
+
* Unlike `Object.freeze`, which only freezes the immediate properties of an object,
|
|
6
|
+
* `deepFreeze` recursively freezes all nested objects and arrays.
|
|
7
|
+
*
|
|
8
|
+
* @template T - The type of the object.
|
|
9
|
+
* @param {T} obj - The object to deeply freeze.
|
|
10
|
+
* @returns {T} The deeply frozen object.
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* const frozen = deepFreeze({ user: { name: "Alex", age: 20 } });
|
|
14
|
+
*
|
|
15
|
+
* frozen.user = {}; // TypeError in strict mode
|
|
16
|
+
* frozen.user.age = 22; // TypeError in strict mode
|
|
17
|
+
*/
|
|
18
|
+
function deepFreeze(obj) {
|
|
19
|
+
if (obj === null || typeof obj !== "object") return obj;
|
|
20
|
+
Object.freeze(obj);
|
|
21
|
+
const keys = Object.keys(obj);
|
|
22
|
+
for (let i = 0; i < keys.length; i++) {
|
|
23
|
+
const value = obj[keys[i]];
|
|
24
|
+
if (value !== null && typeof value === "object" && !Object.isFrozen(value)) deepFreeze(value);
|
|
25
|
+
}
|
|
26
|
+
return obj;
|
|
27
|
+
}
|
|
28
|
+
//#endregion
|
|
29
|
+
exports.deepFreeze = deepFreeze;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
//#region src/object/deepFreeze.ts
|
|
2
|
+
/**
|
|
3
|
+
* Deeply freezes an object, making it and all nested objects immutable.
|
|
4
|
+
*
|
|
5
|
+
* Unlike `Object.freeze`, which only freezes the immediate properties of an object,
|
|
6
|
+
* `deepFreeze` recursively freezes all nested objects and arrays.
|
|
7
|
+
*
|
|
8
|
+
* @template T - The type of the object.
|
|
9
|
+
* @param {T} obj - The object to deeply freeze.
|
|
10
|
+
* @returns {T} The deeply frozen object.
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* const frozen = deepFreeze({ user: { name: "Alex", age: 20 } });
|
|
14
|
+
*
|
|
15
|
+
* frozen.user = {}; // TypeError in strict mode
|
|
16
|
+
* frozen.user.age = 22; // TypeError in strict mode
|
|
17
|
+
*/
|
|
18
|
+
function deepFreeze(obj) {
|
|
19
|
+
if (obj === null || typeof obj !== "object") return obj;
|
|
20
|
+
Object.freeze(obj);
|
|
21
|
+
const keys = Object.keys(obj);
|
|
22
|
+
for (let i = 0; i < keys.length; i++) {
|
|
23
|
+
const value = obj[keys[i]];
|
|
24
|
+
if (value !== null && typeof value === "object" && !Object.isFrozen(value)) deepFreeze(value);
|
|
25
|
+
}
|
|
26
|
+
return obj;
|
|
27
|
+
}
|
|
28
|
+
//#endregion
|
|
29
|
+
export { deepFreeze };
|
|
@@ -5,12 +5,18 @@ interface FlattenObjectOptions {
|
|
|
5
5
|
* @default '.'
|
|
6
6
|
*/
|
|
7
7
|
delimiter?: string;
|
|
8
|
+
/**
|
|
9
|
+
* If true, arrays are kept as values instead of being flattened.
|
|
10
|
+
* @default false
|
|
11
|
+
*/
|
|
12
|
+
preserveArrays?: boolean;
|
|
8
13
|
}
|
|
9
14
|
/**
|
|
10
15
|
* Flattens a nested object into a single level object with delimiter-separated keys.
|
|
11
16
|
*
|
|
12
17
|
* @param object - The object to flatten.
|
|
13
18
|
* @param [options.delimiter='.'] - The delimiter to use between nested keys.
|
|
19
|
+
* @param [options.preserveArrays=false] - If true, arrays are kept as values instead of being flattened.
|
|
14
20
|
* @returns The flattened object.
|
|
15
21
|
*
|
|
16
22
|
* @example
|
|
@@ -31,9 +37,18 @@ interface FlattenObjectOptions {
|
|
|
31
37
|
* // 'd.0': 2,
|
|
32
38
|
* // 'd.1': 3
|
|
33
39
|
* // }
|
|
40
|
+
*
|
|
41
|
+
* const preserved = flattenObject(nestedObject, { preserveArrays: true });
|
|
42
|
+
* console.log(preserved);
|
|
43
|
+
* // Output:
|
|
44
|
+
* // {
|
|
45
|
+
* // 'a.b.c': 1,
|
|
46
|
+
* // 'd': [2, 3]
|
|
47
|
+
* // }
|
|
34
48
|
*/
|
|
35
49
|
declare function flattenObject(object: object, {
|
|
36
|
-
delimiter
|
|
50
|
+
delimiter,
|
|
51
|
+
preserveArrays
|
|
37
52
|
}?: FlattenObjectOptions): Record<string, any>;
|
|
38
53
|
//#endregion
|
|
39
54
|
export { flattenObject };
|
|
@@ -5,12 +5,18 @@ interface FlattenObjectOptions {
|
|
|
5
5
|
* @default '.'
|
|
6
6
|
*/
|
|
7
7
|
delimiter?: string;
|
|
8
|
+
/**
|
|
9
|
+
* If true, arrays are kept as values instead of being flattened.
|
|
10
|
+
* @default false
|
|
11
|
+
*/
|
|
12
|
+
preserveArrays?: boolean;
|
|
8
13
|
}
|
|
9
14
|
/**
|
|
10
15
|
* Flattens a nested object into a single level object with delimiter-separated keys.
|
|
11
16
|
*
|
|
12
17
|
* @param object - The object to flatten.
|
|
13
18
|
* @param [options.delimiter='.'] - The delimiter to use between nested keys.
|
|
19
|
+
* @param [options.preserveArrays=false] - If true, arrays are kept as values instead of being flattened.
|
|
14
20
|
* @returns The flattened object.
|
|
15
21
|
*
|
|
16
22
|
* @example
|
|
@@ -31,9 +37,18 @@ interface FlattenObjectOptions {
|
|
|
31
37
|
* // 'd.0': 2,
|
|
32
38
|
* // 'd.1': 3
|
|
33
39
|
* // }
|
|
40
|
+
*
|
|
41
|
+
* const preserved = flattenObject(nestedObject, { preserveArrays: true });
|
|
42
|
+
* console.log(preserved);
|
|
43
|
+
* // Output:
|
|
44
|
+
* // {
|
|
45
|
+
* // 'a.b.c': 1,
|
|
46
|
+
* // 'd': [2, 3]
|
|
47
|
+
* // }
|
|
34
48
|
*/
|
|
35
49
|
declare function flattenObject(object: object, {
|
|
36
|
-
delimiter
|
|
50
|
+
delimiter,
|
|
51
|
+
preserveArrays
|
|
37
52
|
}?: FlattenObjectOptions): Record<string, any>;
|
|
38
53
|
//#endregion
|
|
39
54
|
export { flattenObject };
|
|
@@ -5,6 +5,7 @@ const require_isPlainObject = require("../predicate/isPlainObject.js");
|
|
|
5
5
|
*
|
|
6
6
|
* @param object - The object to flatten.
|
|
7
7
|
* @param [options.delimiter='.'] - The delimiter to use between nested keys.
|
|
8
|
+
* @param [options.preserveArrays=false] - If true, arrays are kept as values instead of being flattened.
|
|
8
9
|
* @returns The flattened object.
|
|
9
10
|
*
|
|
10
11
|
* @example
|
|
@@ -25,11 +26,19 @@ const require_isPlainObject = require("../predicate/isPlainObject.js");
|
|
|
25
26
|
* // 'd.0': 2,
|
|
26
27
|
* // 'd.1': 3
|
|
27
28
|
* // }
|
|
29
|
+
*
|
|
30
|
+
* const preserved = flattenObject(nestedObject, { preserveArrays: true });
|
|
31
|
+
* console.log(preserved);
|
|
32
|
+
* // Output:
|
|
33
|
+
* // {
|
|
34
|
+
* // 'a.b.c': 1,
|
|
35
|
+
* // 'd': [2, 3]
|
|
36
|
+
* // }
|
|
28
37
|
*/
|
|
29
|
-
function flattenObject(object, { delimiter = "." } = {}) {
|
|
30
|
-
return flattenObjectImpl(object, "", delimiter);
|
|
38
|
+
function flattenObject(object, { delimiter = ".", preserveArrays = false } = {}) {
|
|
39
|
+
return flattenObjectImpl(object, "", delimiter, preserveArrays);
|
|
31
40
|
}
|
|
32
|
-
function flattenObjectImpl(object, prefix, delimiter) {
|
|
41
|
+
function flattenObjectImpl(object, prefix, delimiter, preserveArrays) {
|
|
33
42
|
const result = {};
|
|
34
43
|
const keys = Object.keys(object);
|
|
35
44
|
for (let i = 0; i < keys.length; i++) {
|
|
@@ -37,11 +46,11 @@ function flattenObjectImpl(object, prefix, delimiter) {
|
|
|
37
46
|
const value = object[key];
|
|
38
47
|
const prefixedKey = prefix ? `${prefix}${delimiter}${key}` : key;
|
|
39
48
|
if (require_isPlainObject.isPlainObject(value) && Object.keys(value).length > 0) {
|
|
40
|
-
Object.assign(result, flattenObjectImpl(value, prefixedKey, delimiter));
|
|
49
|
+
Object.assign(result, flattenObjectImpl(value, prefixedKey, delimiter, preserveArrays));
|
|
41
50
|
continue;
|
|
42
51
|
}
|
|
43
|
-
if (Array.isArray(value) && value.length > 0) {
|
|
44
|
-
Object.assign(result, flattenObjectImpl(value, prefixedKey, delimiter));
|
|
52
|
+
if (Array.isArray(value) && !preserveArrays && value.length > 0) {
|
|
53
|
+
Object.assign(result, flattenObjectImpl(value, prefixedKey, delimiter, preserveArrays));
|
|
45
54
|
continue;
|
|
46
55
|
}
|
|
47
56
|
result[prefixedKey] = value;
|
|
@@ -5,6 +5,7 @@ import { isPlainObject } from "../predicate/isPlainObject.mjs";
|
|
|
5
5
|
*
|
|
6
6
|
* @param object - The object to flatten.
|
|
7
7
|
* @param [options.delimiter='.'] - The delimiter to use between nested keys.
|
|
8
|
+
* @param [options.preserveArrays=false] - If true, arrays are kept as values instead of being flattened.
|
|
8
9
|
* @returns The flattened object.
|
|
9
10
|
*
|
|
10
11
|
* @example
|
|
@@ -25,11 +26,19 @@ import { isPlainObject } from "../predicate/isPlainObject.mjs";
|
|
|
25
26
|
* // 'd.0': 2,
|
|
26
27
|
* // 'd.1': 3
|
|
27
28
|
* // }
|
|
29
|
+
*
|
|
30
|
+
* const preserved = flattenObject(nestedObject, { preserveArrays: true });
|
|
31
|
+
* console.log(preserved);
|
|
32
|
+
* // Output:
|
|
33
|
+
* // {
|
|
34
|
+
* // 'a.b.c': 1,
|
|
35
|
+
* // 'd': [2, 3]
|
|
36
|
+
* // }
|
|
28
37
|
*/
|
|
29
|
-
function flattenObject(object, { delimiter = "." } = {}) {
|
|
30
|
-
return flattenObjectImpl(object, "", delimiter);
|
|
38
|
+
function flattenObject(object, { delimiter = ".", preserveArrays = false } = {}) {
|
|
39
|
+
return flattenObjectImpl(object, "", delimiter, preserveArrays);
|
|
31
40
|
}
|
|
32
|
-
function flattenObjectImpl(object, prefix, delimiter) {
|
|
41
|
+
function flattenObjectImpl(object, prefix, delimiter, preserveArrays) {
|
|
33
42
|
const result = {};
|
|
34
43
|
const keys = Object.keys(object);
|
|
35
44
|
for (let i = 0; i < keys.length; i++) {
|
|
@@ -37,11 +46,11 @@ function flattenObjectImpl(object, prefix, delimiter) {
|
|
|
37
46
|
const value = object[key];
|
|
38
47
|
const prefixedKey = prefix ? `${prefix}${delimiter}${key}` : key;
|
|
39
48
|
if (isPlainObject(value) && Object.keys(value).length > 0) {
|
|
40
|
-
Object.assign(result, flattenObjectImpl(value, prefixedKey, delimiter));
|
|
49
|
+
Object.assign(result, flattenObjectImpl(value, prefixedKey, delimiter, preserveArrays));
|
|
41
50
|
continue;
|
|
42
51
|
}
|
|
43
|
-
if (Array.isArray(value) && value.length > 0) {
|
|
44
|
-
Object.assign(result, flattenObjectImpl(value, prefixedKey, delimiter));
|
|
52
|
+
if (Array.isArray(value) && !preserveArrays && value.length > 0) {
|
|
53
|
+
Object.assign(result, flattenObjectImpl(value, prefixedKey, delimiter, preserveArrays));
|
|
45
54
|
continue;
|
|
46
55
|
}
|
|
47
56
|
result[prefixedKey] = value;
|