@vielzeug/toolkit 1.1.2 → 2.0.0
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/README.md +419 -0
- package/dist/array/chunk.cjs +2 -2
- package/dist/array/chunk.cjs.map +1 -1
- package/dist/array/chunk.d.ts +29 -0
- package/dist/array/chunk.d.ts.map +1 -0
- package/dist/array/chunk.js +22 -24
- package/dist/array/chunk.js.map +1 -1
- package/dist/array/contains.cjs +2 -2
- package/dist/array/contains.cjs.map +1 -1
- package/dist/array/contains.d.ts +19 -0
- package/dist/array/contains.d.ts.map +1 -0
- package/dist/array/contains.js +12 -9
- package/dist/array/contains.js.map +1 -1
- package/dist/array/fold.cjs +2 -0
- package/dist/array/fold.cjs.map +1 -0
- package/dist/array/fold.d.ts +21 -0
- package/dist/array/fold.d.ts.map +1 -0
- package/dist/array/fold.js +19 -0
- package/dist/array/fold.js.map +1 -0
- package/dist/array/group.cjs +2 -2
- package/dist/array/group.cjs.map +1 -1
- package/dist/array/group.d.ts +19 -0
- package/dist/array/group.d.ts.map +1 -0
- package/dist/array/group.js +18 -15
- package/dist/array/group.js.map +1 -1
- package/dist/array/index.d.ts +16 -0
- package/dist/array/index.d.ts.map +1 -0
- package/dist/array/keyBy.cjs +2 -0
- package/dist/array/keyBy.cjs.map +1 -0
- package/dist/array/keyBy.d.ts +20 -0
- package/dist/array/keyBy.d.ts.map +1 -0
- package/dist/array/keyBy.js +19 -0
- package/dist/array/keyBy.js.map +1 -0
- package/dist/array/list.cjs +2 -2
- package/dist/array/list.cjs.map +1 -1
- package/dist/array/list.d.ts +58 -0
- package/dist/array/list.d.ts.map +1 -0
- package/dist/array/list.js +103 -106
- package/dist/array/list.js.map +1 -1
- package/dist/array/pick.cjs +2 -2
- package/dist/array/pick.cjs.map +1 -1
- package/dist/array/pick.d.ts +19 -0
- package/dist/array/pick.d.ts.map +1 -0
- package/dist/array/pick.js +15 -14
- package/dist/array/pick.js.map +1 -1
- package/dist/array/remoteList.cjs +2 -2
- package/dist/array/remoteList.cjs.map +1 -1
- package/dist/array/remoteList.d.ts +64 -0
- package/dist/array/remoteList.d.ts.map +1 -0
- package/dist/array/remoteList.js +121 -122
- package/dist/array/remoteList.js.map +1 -1
- package/dist/array/replace.cjs +2 -0
- package/dist/array/replace.cjs.map +1 -0
- package/dist/array/replace.d.ts +20 -0
- package/dist/array/replace.d.ts.map +1 -0
- package/dist/array/replace.js +19 -0
- package/dist/array/replace.js.map +1 -0
- package/dist/array/rotate.cjs +2 -0
- package/dist/array/rotate.cjs.map +1 -0
- package/dist/array/rotate.d.ts +22 -0
- package/dist/array/rotate.d.ts.map +1 -0
- package/dist/array/rotate.js +19 -0
- package/dist/array/rotate.js.map +1 -0
- package/dist/array/search.cjs +2 -2
- package/dist/array/search.cjs.map +1 -1
- package/dist/array/search.d.ts +19 -0
- package/dist/array/search.d.ts.map +1 -0
- package/dist/array/search.js +23 -13
- package/dist/array/search.js.map +1 -1
- package/dist/array/select.cjs +2 -2
- package/dist/array/select.cjs.map +1 -1
- package/dist/array/select.d.ts +21 -0
- package/dist/array/select.d.ts.map +1 -0
- package/dist/array/select.js +16 -15
- package/dist/array/select.js.map +1 -1
- package/dist/array/sort.cjs +2 -2
- package/dist/array/sort.cjs.map +1 -1
- package/dist/array/sort.d.ts +26 -0
- package/dist/array/sort.d.ts.map +1 -0
- package/dist/array/sort.js +18 -12
- package/dist/array/sort.js.map +1 -1
- package/dist/array/toggle.cjs +2 -0
- package/dist/array/toggle.cjs.map +1 -0
- package/dist/array/toggle.d.ts +29 -0
- package/dist/array/toggle.d.ts.map +1 -0
- package/dist/array/toggle.js +9 -0
- package/dist/array/toggle.js.map +1 -0
- package/dist/array/uniq.cjs +2 -2
- package/dist/array/uniq.cjs.map +1 -1
- package/dist/array/uniq.d.ts +21 -0
- package/dist/array/uniq.d.ts.map +1 -0
- package/dist/array/uniq.js +15 -17
- package/dist/array/uniq.js.map +1 -1
- package/dist/async/attempt.cjs +2 -2
- package/dist/async/attempt.cjs.map +1 -1
- package/dist/async/attempt.d.ts +40 -0
- package/dist/async/attempt.d.ts.map +1 -0
- package/dist/async/attempt.js +19 -14
- package/dist/async/attempt.js.map +1 -1
- package/dist/async/defer.cjs +2 -2
- package/dist/async/defer.cjs.map +1 -1
- package/dist/async/defer.d.ts +23 -0
- package/dist/async/defer.d.ts.map +1 -0
- package/dist/async/defer.js +12 -9
- package/dist/async/defer.js.map +1 -1
- package/dist/async/index.d.ts +12 -0
- package/dist/async/index.d.ts.map +1 -0
- package/dist/async/parallel.cjs +2 -2
- package/dist/async/parallel.cjs.map +1 -1
- package/dist/async/parallel.d.ts +31 -0
- package/dist/async/parallel.d.ts.map +1 -0
- package/dist/async/parallel.js +26 -27
- package/dist/async/parallel.js.map +1 -1
- package/dist/async/pool.cjs +2 -2
- package/dist/async/pool.cjs.map +1 -1
- package/dist/async/pool.d.ts +21 -0
- package/dist/async/pool.d.ts.map +1 -0
- package/dist/async/pool.js +23 -21
- package/dist/async/pool.js.map +1 -1
- package/dist/async/predict.cjs +2 -2
- package/dist/async/predict.cjs.map +1 -1
- package/dist/async/predict.d.ts +24 -0
- package/dist/async/predict.d.ts.map +1 -0
- package/dist/async/predict.js +10 -12
- package/dist/async/predict.js.map +1 -1
- package/dist/async/queue.cjs +2 -2
- package/dist/async/queue.cjs.map +1 -1
- package/dist/async/queue.d.ts +43 -0
- package/dist/async/queue.d.ts.map +1 -0
- package/dist/async/queue.js +52 -56
- package/dist/async/queue.js.map +1 -1
- package/dist/async/race.cjs +2 -2
- package/dist/async/race.cjs.map +1 -1
- package/dist/async/race.d.ts +16 -0
- package/dist/async/race.d.ts.map +1 -0
- package/dist/async/race.js +8 -7
- package/dist/async/race.js.map +1 -1
- package/dist/async/retry.cjs +2 -2
- package/dist/async/retry.cjs.map +1 -1
- package/dist/async/retry.d.ts +32 -0
- package/dist/async/retry.d.ts.map +1 -0
- package/dist/async/retry.js +19 -24
- package/dist/async/retry.js.map +1 -1
- package/dist/async/scheduler.cjs +2 -0
- package/dist/async/scheduler.cjs.map +1 -0
- package/dist/async/scheduler.d.ts +51 -0
- package/dist/async/scheduler.d.ts.map +1 -0
- package/dist/async/scheduler.js +43 -0
- package/dist/async/scheduler.js.map +1 -0
- package/dist/async/sleep.cjs +2 -2
- package/dist/async/sleep.cjs.map +1 -1
- package/dist/async/sleep.d.ts +16 -0
- package/dist/async/sleep.d.ts.map +1 -0
- package/dist/async/sleep.js +11 -11
- package/dist/async/sleep.js.map +1 -1
- package/dist/async/waitFor.cjs +2 -2
- package/dist/async/waitFor.cjs.map +1 -1
- package/dist/async/waitFor.d.ts +33 -0
- package/dist/async/waitFor.d.ts.map +1 -0
- package/dist/async/waitFor.js +29 -36
- package/dist/async/waitFor.js.map +1 -1
- package/dist/date/expires.cjs +2 -2
- package/dist/date/expires.cjs.map +1 -1
- package/dist/date/expires.d.ts +15 -0
- package/dist/date/expires.d.ts.map +1 -0
- package/dist/date/expires.js +11 -10
- package/dist/date/expires.js.map +1 -1
- package/dist/date/index.d.ts +4 -0
- package/dist/date/index.d.ts.map +1 -0
- package/dist/date/interval.cjs +2 -2
- package/dist/date/interval.cjs.map +1 -1
- package/dist/date/interval.d.ts +25 -0
- package/dist/date/interval.d.ts.map +1 -0
- package/dist/date/interval.js +31 -37
- package/dist/date/interval.js.map +1 -1
- package/dist/date/timeDiff.cjs +2 -2
- package/dist/date/timeDiff.cjs.map +1 -1
- package/dist/date/timeDiff.d.ts +24 -0
- package/dist/date/timeDiff.d.ts.map +1 -0
- package/dist/date/timeDiff.js +58 -25
- package/dist/date/timeDiff.js.map +1 -1
- package/dist/function/assert.cjs +2 -3
- package/dist/function/assert.cjs.map +1 -1
- package/dist/function/assert.d.ts +38 -0
- package/dist/function/assert.d.ts.map +1 -0
- package/dist/function/assert.js +13 -11
- package/dist/function/assert.js.map +1 -1
- package/dist/function/assertParams.cjs +2 -2
- package/dist/function/assertParams.cjs.map +1 -1
- package/dist/function/assertParams.d.ts +24 -0
- package/dist/function/assertParams.d.ts.map +1 -0
- package/dist/function/assertParams.js +13 -12
- package/dist/function/assertParams.js.map +1 -1
- package/dist/function/compare.cjs +2 -2
- package/dist/function/compare.cjs.map +1 -1
- package/dist/function/compare.d.ts +23 -0
- package/dist/function/compare.d.ts.map +1 -0
- package/dist/function/compare.js +22 -21
- package/dist/function/compare.js.map +1 -1
- package/dist/function/compareBy.cjs +2 -2
- package/dist/function/compareBy.cjs.map +1 -1
- package/dist/function/compareBy.d.ts +24 -0
- package/dist/function/compareBy.d.ts.map +1 -0
- package/dist/function/compareBy.js +15 -14
- package/dist/function/compareBy.js.map +1 -1
- package/dist/function/compose.cjs +2 -2
- package/dist/function/compose.cjs.map +1 -1
- package/dist/function/compose.d.ts +22 -0
- package/dist/function/compose.d.ts.map +1 -0
- package/dist/function/compose.js +10 -13
- package/dist/function/compose.js.map +1 -1
- package/dist/function/curry.cjs +2 -2
- package/dist/function/curry.cjs.map +1 -1
- package/dist/function/curry.d.ts +21 -0
- package/dist/function/curry.d.ts.map +1 -0
- package/dist/function/curry.js +8 -7
- package/dist/function/curry.js.map +1 -1
- package/dist/function/debounce.cjs +2 -2
- package/dist/function/debounce.cjs.map +1 -1
- package/dist/function/debounce.d.ts +12 -0
- package/dist/function/debounce.d.ts.map +1 -0
- package/dist/function/debounce.js +34 -26
- package/dist/function/debounce.js.map +1 -1
- package/dist/function/fp.cjs +2 -2
- package/dist/function/fp.cjs.map +1 -1
- package/dist/function/fp.d.ts +24 -0
- package/dist/function/fp.d.ts.map +1 -0
- package/dist/function/fp.js +6 -10
- package/dist/function/fp.js.map +1 -1
- package/dist/function/index.d.ts +13 -0
- package/dist/function/index.d.ts.map +1 -0
- package/dist/function/memo.cjs +2 -2
- package/dist/function/memo.cjs.map +1 -1
- package/dist/function/memo.d.ts +30 -0
- package/dist/function/memo.d.ts.map +1 -0
- package/dist/function/memo.js +16 -24
- package/dist/function/memo.js.map +1 -1
- package/dist/function/once.cjs +2 -2
- package/dist/function/once.cjs.map +1 -1
- package/dist/function/once.d.ts +24 -0
- package/dist/function/once.d.ts.map +1 -0
- package/dist/function/once.js +10 -10
- package/dist/function/once.js.map +1 -1
- package/dist/function/pipe.cjs +2 -2
- package/dist/function/pipe.cjs.map +1 -1
- package/dist/function/pipe.d.ts +23 -0
- package/dist/function/pipe.d.ts.map +1 -0
- package/dist/function/pipe.js +10 -10
- package/dist/function/pipe.js.map +1 -1
- package/dist/function/throttle.cjs +2 -2
- package/dist/function/throttle.cjs.map +1 -1
- package/dist/function/throttle.d.ts +21 -0
- package/dist/function/throttle.d.ts.map +1 -0
- package/dist/function/throttle.js +45 -37
- package/dist/function/throttle.js.map +1 -1
- package/dist/index.cjs +1 -2
- package/dist/index.d.ts +77 -2813
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +75 -253
- package/dist/math/abs.cjs +2 -2
- package/dist/math/abs.cjs.map +1 -1
- package/dist/math/abs.d.ts +17 -0
- package/dist/math/abs.d.ts.map +1 -0
- package/dist/math/abs.js +7 -6
- package/dist/math/abs.js.map +1 -1
- package/dist/math/allocate.cjs +2 -2
- package/dist/math/allocate.cjs.map +1 -1
- package/dist/math/allocate.d.ts +24 -0
- package/dist/math/allocate.d.ts.map +1 -0
- package/dist/math/allocate.js +20 -28
- package/dist/math/allocate.js.map +1 -1
- package/dist/math/average.cjs +2 -2
- package/dist/math/average.cjs.map +1 -1
- package/dist/math/average.d.ts +16 -0
- package/dist/math/average.d.ts.map +1 -0
- package/dist/math/average.js +13 -24
- package/dist/math/average.js.map +1 -1
- package/dist/math/clamp.cjs +2 -2
- package/dist/math/clamp.cjs.map +1 -1
- package/dist/math/clamp.d.ts +18 -0
- package/dist/math/clamp.d.ts.map +1 -0
- package/dist/math/clamp.js +7 -6
- package/dist/math/clamp.js.map +1 -1
- package/dist/math/distribute.cjs +2 -2
- package/dist/math/distribute.cjs.map +1 -1
- package/dist/math/distribute.d.ts +24 -0
- package/dist/math/distribute.d.ts.map +1 -0
- package/dist/math/distribute.js +14 -17
- package/dist/math/distribute.js.map +1 -1
- package/dist/math/index.d.ts +14 -0
- package/dist/math/index.d.ts.map +1 -0
- package/dist/math/linspace.cjs +2 -0
- package/dist/math/linspace.cjs.map +1 -0
- package/dist/math/linspace.d.ts +19 -0
- package/dist/math/linspace.d.ts.map +1 -0
- package/dist/math/linspace.js +11 -0
- package/dist/math/linspace.js.map +1 -0
- package/dist/math/max.cjs +2 -2
- package/dist/math/max.cjs.map +1 -1
- package/dist/math/max.d.ts +23 -0
- package/dist/math/max.d.ts.map +1 -0
- package/dist/math/max.js +10 -11
- package/dist/math/max.js.map +1 -1
- package/dist/math/median.cjs +2 -2
- package/dist/math/median.cjs.map +1 -1
- package/dist/math/median.d.ts +17 -0
- package/dist/math/median.d.ts.map +1 -0
- package/dist/math/median.js +11 -10
- package/dist/math/median.js.map +1 -1
- package/dist/math/min.cjs +2 -2
- package/dist/math/min.cjs.map +1 -1
- package/dist/math/min.d.ts +23 -0
- package/dist/math/min.d.ts.map +1 -0
- package/dist/math/min.js +10 -11
- package/dist/math/min.js.map +1 -1
- package/dist/math/percent.cjs +2 -0
- package/dist/math/percent.cjs.map +1 -0
- package/dist/math/percent.d.ts +19 -0
- package/dist/math/percent.d.ts.map +1 -0
- package/dist/math/percent.js +8 -0
- package/dist/math/percent.js.map +1 -0
- package/dist/math/range.cjs +2 -2
- package/dist/math/range.cjs.map +1 -1
- package/dist/math/range.d.ts +23 -0
- package/dist/math/range.d.ts.map +1 -0
- package/dist/math/range.js +28 -17
- package/dist/math/range.js.map +1 -1
- package/dist/math/round.cjs +2 -2
- package/dist/math/round.cjs.map +1 -1
- package/dist/math/round.d.ts +21 -0
- package/dist/math/round.d.ts.map +1 -0
- package/dist/math/round.js +9 -8
- package/dist/math/round.js.map +1 -1
- package/dist/math/sum.cjs +2 -2
- package/dist/math/sum.cjs.map +1 -1
- package/dist/math/sum.d.ts +17 -0
- package/dist/math/sum.d.ts.map +1 -0
- package/dist/math/sum.js +11 -14
- package/dist/math/sum.js.map +1 -1
- package/dist/money/currency.cjs +2 -2
- package/dist/money/currency.cjs.map +1 -1
- package/dist/money/currency.d.ts +30 -0
- package/dist/money/currency.d.ts.map +1 -0
- package/dist/money/currency.js +19 -47
- package/dist/money/currency.js.map +1 -1
- package/dist/money/exchange.cjs +2 -2
- package/dist/money/exchange.cjs.map +1 -1
- package/dist/money/exchange.d.ts +29 -0
- package/dist/money/exchange.d.ts.map +1 -0
- package/dist/money/exchange.js +12 -12
- package/dist/money/exchange.js.map +1 -1
- package/dist/money/index.d.ts +4 -0
- package/dist/money/index.d.ts.map +1 -0
- package/dist/money/types.d.ts +9 -0
- package/dist/money/types.d.ts.map +1 -0
- package/dist/object/diff.cjs +2 -2
- package/dist/object/diff.cjs.map +1 -1
- package/dist/object/diff.d.ts +26 -0
- package/dist/object/diff.d.ts.map +1 -0
- package/dist/object/diff.js +19 -17
- package/dist/object/diff.js.map +1 -1
- package/dist/object/index.d.ts +9 -0
- package/dist/object/index.d.ts.map +1 -0
- package/dist/object/merge.cjs +2 -2
- package/dist/object/merge.cjs.map +1 -1
- package/dist/object/merge.d.ts +44 -0
- package/dist/object/merge.d.ts.map +1 -0
- package/dist/object/merge.js +27 -21
- package/dist/object/merge.js.map +1 -1
- package/dist/object/parseJSON.cjs +2 -2
- package/dist/object/parseJSON.cjs.map +1 -1
- package/dist/object/parseJSON.d.ts +32 -0
- package/dist/object/parseJSON.d.ts.map +1 -0
- package/dist/object/parseJSON.js +17 -18
- package/dist/object/parseJSON.js.map +1 -1
- package/dist/object/path.cjs +2 -2
- package/dist/object/path.cjs.map +1 -1
- package/dist/object/path.d.ts +32 -0
- package/dist/object/path.d.ts.map +1 -0
- package/dist/object/path.js +25 -23
- package/dist/object/path.js.map +1 -1
- package/dist/object/proxy.cjs +2 -0
- package/dist/object/proxy.cjs.map +1 -0
- package/dist/object/proxy.d.ts +30 -0
- package/dist/object/proxy.d.ts.map +1 -0
- package/dist/object/proxy.js +21 -0
- package/dist/object/proxy.js.map +1 -0
- package/dist/object/prune.cjs +2 -0
- package/dist/object/prune.cjs.map +1 -0
- package/dist/object/prune.d.ts +21 -0
- package/dist/object/prune.d.ts.map +1 -0
- package/dist/object/prune.js +31 -0
- package/dist/object/prune.js.map +1 -0
- package/dist/object/seek.cjs +2 -2
- package/dist/object/seek.cjs.map +1 -1
- package/dist/object/seek.d.ts +2 -0
- package/dist/object/seek.d.ts.map +1 -0
- package/dist/object/seek.js +25 -12
- package/dist/object/seek.js.map +1 -1
- package/dist/object/stash.cjs +2 -0
- package/dist/object/stash.cjs.map +1 -0
- package/dist/object/stash.d.ts +45 -0
- package/dist/object/stash.d.ts.map +1 -0
- package/dist/object/stash.js +99 -0
- package/dist/object/stash.js.map +1 -0
- package/dist/random/draw.cjs +2 -2
- package/dist/random/draw.cjs.map +1 -1
- package/dist/random/draw.d.ts +16 -0
- package/dist/random/draw.d.ts.map +1 -0
- package/dist/random/draw.js +13 -10
- package/dist/random/draw.js.map +1 -1
- package/dist/random/index.d.ts +5 -0
- package/dist/random/index.d.ts.map +1 -0
- package/dist/random/random.cjs +2 -2
- package/dist/random/random.cjs.map +1 -1
- package/dist/random/random.d.ts +14 -0
- package/dist/random/random.d.ts.map +1 -0
- package/dist/random/random.js +16 -9
- package/dist/random/random.js.map +1 -1
- package/dist/random/shuffle.cjs +2 -2
- package/dist/random/shuffle.cjs.map +1 -1
- package/dist/random/shuffle.d.ts +17 -0
- package/dist/random/shuffle.d.ts.map +1 -0
- package/dist/random/shuffle.js +18 -14
- package/dist/random/shuffle.js.map +1 -1
- package/dist/random/uuid.cjs +2 -2
- package/dist/random/uuid.cjs.map +1 -1
- package/dist/random/uuid.d.ts +12 -0
- package/dist/random/uuid.d.ts.map +1 -0
- package/dist/random/uuid.js +7 -9
- package/dist/random/uuid.js.map +1 -1
- package/dist/string/_caseUtils.cjs +2 -2
- package/dist/string/_caseUtils.cjs.map +1 -1
- package/dist/string/_caseUtils.d.ts +13 -0
- package/dist/string/_caseUtils.d.ts.map +1 -0
- package/dist/string/_caseUtils.js +8 -8
- package/dist/string/_caseUtils.js.map +1 -1
- package/dist/string/camelCase.cjs +2 -2
- package/dist/string/camelCase.cjs.map +1 -1
- package/dist/string/camelCase.d.ts +14 -0
- package/dist/string/camelCase.d.ts.map +1 -0
- package/dist/string/camelCase.js +8 -7
- package/dist/string/camelCase.js.map +1 -1
- package/dist/string/index.d.ts +7 -0
- package/dist/string/index.d.ts.map +1 -0
- package/dist/string/kebabCase.cjs +2 -2
- package/dist/string/kebabCase.cjs.map +1 -1
- package/dist/string/kebabCase.d.ts +15 -0
- package/dist/string/kebabCase.d.ts.map +1 -0
- package/dist/string/kebabCase.js +8 -7
- package/dist/string/kebabCase.js.map +1 -1
- package/dist/string/pascalCase.cjs +2 -2
- package/dist/string/pascalCase.cjs.map +1 -1
- package/dist/string/pascalCase.d.ts +15 -0
- package/dist/string/pascalCase.d.ts.map +1 -0
- package/dist/string/pascalCase.js +8 -7
- package/dist/string/pascalCase.js.map +1 -1
- package/dist/string/similarity.cjs +2 -2
- package/dist/string/similarity.cjs.map +1 -1
- package/dist/string/similarity.d.ts +20 -0
- package/dist/string/similarity.d.ts.map +1 -0
- package/dist/string/similarity.js +20 -36
- package/dist/string/similarity.js.map +1 -1
- package/dist/string/snakeCase.cjs +2 -2
- package/dist/string/snakeCase.cjs.map +1 -1
- package/dist/string/snakeCase.d.ts +15 -0
- package/dist/string/snakeCase.d.ts.map +1 -0
- package/dist/string/snakeCase.js +8 -7
- package/dist/string/snakeCase.js.map +1 -1
- package/dist/string/truncate.cjs +2 -2
- package/dist/string/truncate.cjs.map +1 -1
- package/dist/string/truncate.d.ts +28 -0
- package/dist/string/truncate.d.ts.map +1 -0
- package/dist/string/truncate.js +20 -17
- package/dist/string/truncate.js.map +1 -1
- package/dist/toolkit.cjs +2 -0
- package/dist/toolkit.cjs.map +1 -0
- package/dist/toolkit.js +1523 -0
- package/dist/toolkit.js.map +1 -0
- package/dist/typed/index.d.ts +24 -0
- package/dist/typed/index.d.ts.map +1 -0
- package/dist/typed/is.cjs +2 -2
- package/dist/typed/is.cjs.map +1 -1
- package/dist/typed/is.d.ts +95 -0
- package/dist/typed/is.d.ts.map +1 -0
- package/dist/typed/is.js +54 -42
- package/dist/typed/is.js.map +1 -1
- package/dist/typed/isArray.cjs +2 -2
- package/dist/typed/isArray.cjs.map +1 -1
- package/dist/typed/isArray.d.ts +16 -0
- package/dist/typed/isArray.d.ts.map +1 -0
- package/dist/typed/isArray.js +8 -8
- package/dist/typed/isArray.js.map +1 -1
- package/dist/typed/isBoolean.cjs +2 -2
- package/dist/typed/isBoolean.cjs.map +1 -1
- package/dist/typed/isBoolean.d.ts +23 -0
- package/dist/typed/isBoolean.d.ts.map +1 -0
- package/dist/typed/isBoolean.js +7 -6
- package/dist/typed/isBoolean.js.map +1 -1
- package/dist/typed/isDate.cjs +2 -2
- package/dist/typed/isDate.cjs.map +1 -1
- package/dist/typed/isDate.d.ts +16 -0
- package/dist/typed/isDate.d.ts.map +1 -0
- package/dist/typed/isDate.js +7 -8
- package/dist/typed/isDate.js.map +1 -1
- package/dist/typed/isDefined.cjs +2 -2
- package/dist/typed/isDefined.cjs.map +1 -1
- package/dist/typed/isDefined.d.ts +19 -0
- package/dist/typed/isDefined.d.ts.map +1 -0
- package/dist/typed/isDefined.js +7 -6
- package/dist/typed/isDefined.js.map +1 -1
- package/dist/typed/isEmpty.cjs +2 -2
- package/dist/typed/isEmpty.cjs.map +1 -1
- package/dist/typed/isEmpty.d.ts +24 -0
- package/dist/typed/isEmpty.d.ts.map +1 -0
- package/dist/typed/isEmpty.js +8 -9
- package/dist/typed/isEmpty.js.map +1 -1
- package/dist/typed/isEqual.cjs +2 -2
- package/dist/typed/isEqual.cjs.map +1 -1
- package/dist/typed/isEqual.d.ts +24 -0
- package/dist/typed/isEqual.d.ts.map +1 -0
- package/dist/typed/isEqual.js +27 -28
- package/dist/typed/isEqual.js.map +1 -1
- package/dist/typed/isEven.cjs +2 -2
- package/dist/typed/isEven.cjs.map +1 -1
- package/dist/typed/isEven.d.ts +9 -0
- package/dist/typed/isEven.d.ts.map +1 -0
- package/dist/typed/isEven.js +7 -6
- package/dist/typed/isEven.js.map +1 -1
- package/dist/typed/isFunction.cjs +2 -2
- package/dist/typed/isFunction.cjs.map +1 -1
- package/dist/typed/isFunction.d.ts +16 -0
- package/dist/typed/isFunction.d.ts.map +1 -0
- package/dist/typed/isFunction.js +7 -8
- package/dist/typed/isFunction.js.map +1 -1
- package/dist/typed/isMatch.cjs +2 -2
- package/dist/typed/isMatch.cjs.map +1 -1
- package/dist/typed/isMatch.d.ts +23 -0
- package/dist/typed/isMatch.d.ts.map +1 -0
- package/dist/typed/isMatch.js +16 -18
- package/dist/typed/isMatch.js.map +1 -1
- package/dist/typed/isNegative.cjs +2 -2
- package/dist/typed/isNegative.cjs.map +1 -1
- package/dist/typed/isNegative.d.ts +26 -0
- package/dist/typed/isNegative.d.ts.map +1 -0
- package/dist/typed/isNegative.js +7 -6
- package/dist/typed/isNegative.js.map +1 -1
- package/dist/typed/isNil.cjs +2 -2
- package/dist/typed/isNil.cjs.map +1 -1
- package/dist/typed/isNil.d.ts +17 -0
- package/dist/typed/isNil.d.ts.map +1 -0
- package/dist/typed/isNil.js +7 -8
- package/dist/typed/isNil.js.map +1 -1
- package/dist/typed/isNumber.cjs +2 -2
- package/dist/typed/isNumber.cjs.map +1 -1
- package/dist/typed/isNumber.d.ts +16 -0
- package/dist/typed/isNumber.d.ts.map +1 -0
- package/dist/typed/isNumber.js +8 -8
- package/dist/typed/isNumber.js.map +1 -1
- package/dist/typed/isObject.cjs +2 -2
- package/dist/typed/isObject.cjs.map +1 -1
- package/dist/typed/isObject.d.ts +19 -0
- package/dist/typed/isObject.d.ts.map +1 -0
- package/dist/typed/isObject.js +8 -8
- package/dist/typed/isObject.js.map +1 -1
- package/dist/typed/isOdd.cjs +2 -2
- package/dist/typed/isOdd.cjs.map +1 -1
- package/dist/typed/isOdd.d.ts +9 -0
- package/dist/typed/isOdd.d.ts.map +1 -0
- package/dist/typed/isOdd.js +7 -6
- package/dist/typed/isOdd.js.map +1 -1
- package/dist/typed/isPositive.cjs +2 -2
- package/dist/typed/isPositive.cjs.map +1 -1
- package/dist/typed/isPositive.d.ts +26 -0
- package/dist/typed/isPositive.d.ts.map +1 -0
- package/dist/typed/isPositive.js +7 -6
- package/dist/typed/isPositive.js.map +1 -1
- package/dist/typed/isPrimitive.cjs +2 -2
- package/dist/typed/isPrimitive.cjs.map +1 -1
- package/dist/typed/isPrimitive.d.ts +18 -0
- package/dist/typed/isPrimitive.d.ts.map +1 -0
- package/dist/typed/isPrimitive.js +8 -9
- package/dist/typed/isPrimitive.js.map +1 -1
- package/dist/typed/isPromise.cjs +2 -2
- package/dist/typed/isPromise.cjs.map +1 -1
- package/dist/typed/isPromise.d.ts +17 -0
- package/dist/typed/isPromise.d.ts.map +1 -0
- package/dist/typed/isPromise.js +7 -9
- package/dist/typed/isPromise.js.map +1 -1
- package/dist/typed/isRegex.cjs +2 -2
- package/dist/typed/isRegex.cjs.map +1 -1
- package/dist/typed/isRegex.d.ts +21 -0
- package/dist/typed/isRegex.d.ts.map +1 -0
- package/dist/typed/isRegex.js +7 -6
- package/dist/typed/isRegex.js.map +1 -1
- package/dist/typed/isString.cjs +2 -2
- package/dist/typed/isString.cjs.map +1 -1
- package/dist/typed/isString.d.ts +16 -0
- package/dist/typed/isString.d.ts.map +1 -0
- package/dist/typed/isString.js +8 -8
- package/dist/typed/isString.js.map +1 -1
- package/dist/typed/isWithin.cjs +2 -2
- package/dist/typed/isWithin.cjs.map +1 -1
- package/dist/typed/isWithin.d.ts +20 -0
- package/dist/typed/isWithin.d.ts.map +1 -0
- package/dist/typed/isWithin.js +9 -9
- package/dist/typed/isWithin.js.map +1 -1
- package/dist/typed/isZero.cjs +2 -2
- package/dist/typed/isZero.cjs.map +1 -1
- package/dist/typed/isZero.d.ts +25 -0
- package/dist/typed/isZero.d.ts.map +1 -0
- package/dist/typed/isZero.js +7 -6
- package/dist/typed/isZero.js.map +1 -1
- package/dist/typed/typeOf.cjs +2 -2
- package/dist/typed/typeOf.cjs.map +1 -1
- package/dist/typed/typeOf.d.ts +30 -0
- package/dist/typed/typeOf.d.ts.map +1 -0
- package/dist/typed/typeOf.js +11 -13
- package/dist/typed/typeOf.js.map +1 -1
- package/dist/types.d.ts +9 -0
- package/dist/types.d.ts.map +1 -0
- package/package.json +77 -12
- package/dist/array/aggregate.cjs +0 -2
- package/dist/array/aggregate.cjs.map +0 -1
- package/dist/array/aggregate.js +0 -16
- package/dist/array/aggregate.js.map +0 -1
- package/dist/array/alternate.cjs +0 -2
- package/dist/array/alternate.cjs.map +0 -1
- package/dist/array/alternate.js +0 -9
- package/dist/array/alternate.js.map +0 -1
- package/dist/array/arrange.cjs +0 -2
- package/dist/array/arrange.cjs.map +0 -1
- package/dist/array/arrange.js +0 -6
- package/dist/array/arrange.js.map +0 -1
- package/dist/array/compact.cjs +0 -2
- package/dist/array/compact.cjs.map +0 -1
- package/dist/array/compact.js +0 -9
- package/dist/array/compact.js.map +0 -1
- package/dist/array/every.cjs +0 -2
- package/dist/array/every.cjs.map +0 -1
- package/dist/array/every.js +0 -14
- package/dist/array/every.js.map +0 -1
- package/dist/array/filter.cjs +0 -2
- package/dist/array/filter.cjs.map +0 -1
- package/dist/array/filter.js +0 -14
- package/dist/array/filter.js.map +0 -1
- package/dist/array/find.cjs +0 -2
- package/dist/array/find.cjs.map +0 -1
- package/dist/array/find.js +0 -14
- package/dist/array/find.js.map +0 -1
- package/dist/array/findIndex.cjs +0 -2
- package/dist/array/findIndex.cjs.map +0 -1
- package/dist/array/findIndex.js +0 -14
- package/dist/array/findIndex.js.map +0 -1
- package/dist/array/findLast.cjs +0 -2
- package/dist/array/findLast.cjs.map +0 -1
- package/dist/array/findLast.js +0 -14
- package/dist/array/findLast.js.map +0 -1
- package/dist/array/flatten.cjs +0 -2
- package/dist/array/flatten.cjs.map +0 -1
- package/dist/array/flatten.js +0 -7
- package/dist/array/flatten.js.map +0 -1
- package/dist/array/map.cjs +0 -2
- package/dist/array/map.cjs.map +0 -1
- package/dist/array/map.js +0 -18
- package/dist/array/map.js.map +0 -1
- package/dist/array/reduce.cjs +0 -2
- package/dist/array/reduce.cjs.map +0 -1
- package/dist/array/reduce.js +0 -16
- package/dist/array/reduce.js.map +0 -1
- package/dist/array/shift.cjs +0 -2
- package/dist/array/shift.cjs.map +0 -1
- package/dist/array/shift.js +0 -13
- package/dist/array/shift.js.map +0 -1
- package/dist/array/some.cjs +0 -2
- package/dist/array/some.cjs.map +0 -1
- package/dist/array/some.js +0 -14
- package/dist/array/some.js.map +0 -1
- package/dist/array/substitute.cjs +0 -2
- package/dist/array/substitute.cjs.map +0 -1
- package/dist/array/substitute.js +0 -13
- package/dist/array/substitute.js.map +0 -1
- package/dist/async/delay.cjs +0 -2
- package/dist/async/delay.cjs.map +0 -1
- package/dist/async/delay.js +0 -8
- package/dist/async/delay.js.map +0 -1
- package/dist/function/proxy.cjs +0 -2
- package/dist/function/proxy.cjs.map +0 -1
- package/dist/function/proxy.js +0 -22
- package/dist/function/proxy.js.map +0 -1
- package/dist/function/prune.cjs +0 -2
- package/dist/function/prune.cjs.map +0 -1
- package/dist/function/prune.js +0 -30
- package/dist/function/prune.js.map +0 -1
- package/dist/function/worker.cjs +0 -14
- package/dist/function/worker.cjs.map +0 -1
- package/dist/function/worker.js +0 -29
- package/dist/function/worker.js.map +0 -1
- package/dist/index.cjs.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/logit/dist/logit.cjs +0 -2
- package/dist/logit/dist/logit.cjs.map +0 -1
- package/dist/logit/dist/logit.js +0 -263
- package/dist/logit/dist/logit.js.map +0 -1
- package/dist/math/add.cjs +0 -2
- package/dist/math/add.cjs.map +0 -1
- package/dist/math/add.js +0 -9
- package/dist/math/add.js.map +0 -1
- package/dist/math/boil.cjs +0 -2
- package/dist/math/boil.cjs.map +0 -1
- package/dist/math/boil.js +0 -17
- package/dist/math/boil.js.map +0 -1
- package/dist/math/divide.cjs +0 -2
- package/dist/math/divide.cjs.map +0 -1
- package/dist/math/divide.js +0 -11
- package/dist/math/divide.js.map +0 -1
- package/dist/math/multiply.cjs +0 -2
- package/dist/math/multiply.cjs.map +0 -1
- package/dist/math/multiply.js +0 -9
- package/dist/math/multiply.js.map +0 -1
- package/dist/math/rate.cjs +0 -2
- package/dist/math/rate.cjs.map +0 -1
- package/dist/math/rate.js +0 -9
- package/dist/math/rate.js.map +0 -1
- package/dist/math/subtract.cjs +0 -2
- package/dist/math/subtract.cjs.map +0 -1
- package/dist/math/subtract.js +0 -9
- package/dist/math/subtract.js.map +0 -1
- package/dist/object/cache.cjs +0 -2
- package/dist/object/cache.cjs.map +0 -1
- package/dist/object/cache.js +0 -63
- package/dist/object/cache.js.map +0 -1
- package/dist/object/clone.cjs +0 -2
- package/dist/object/clone.cjs.map +0 -1
- package/dist/object/clone.js +0 -17
- package/dist/object/clone.js.map +0 -1
- package/dist/object/entries.cjs +0 -2
- package/dist/object/entries.cjs.map +0 -1
- package/dist/object/entries.js +0 -9
- package/dist/object/entries.js.map +0 -1
- package/dist/object/keys.cjs +0 -2
- package/dist/object/keys.cjs.map +0 -1
- package/dist/object/keys.js +0 -9
- package/dist/object/keys.js.map +0 -1
- package/dist/object/values.cjs +0 -2
- package/dist/object/values.cjs.map +0 -1
- package/dist/object/values.js +0 -9
- package/dist/object/values.js.map +0 -1
- package/dist/typed/ge.cjs +0 -2
- package/dist/typed/ge.cjs.map +0 -1
- package/dist/typed/ge.js +0 -7
- package/dist/typed/ge.js.map +0 -1
- package/dist/typed/gt.cjs +0 -2
- package/dist/typed/gt.cjs.map +0 -1
- package/dist/typed/gt.js +0 -7
- package/dist/typed/gt.js.map +0 -1
- package/dist/typed/le.cjs +0 -2
- package/dist/typed/le.cjs.map +0 -1
- package/dist/typed/le.js +0 -7
- package/dist/typed/le.js.map +0 -1
- package/dist/typed/lt.cjs +0 -2
- package/dist/typed/lt.cjs.map +0 -1
- package/dist/typed/lt.js +0 -7
- package/dist/typed/lt.js.map +0 -1
package/dist/object/diff.js
CHANGED
|
@@ -1,18 +1,20 @@
|
|
|
1
|
-
import { isEqual as
|
|
2
|
-
import { isObject as
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
1
|
+
import { isEqual as e } from "../typed/isEqual.js";
|
|
2
|
+
import { isObject as t } from "../typed/isObject.js";
|
|
3
|
+
//#region src/object/diff.ts
|
|
4
|
+
var n = Symbol("deleted");
|
|
5
|
+
function r(i, a, o = e) {
|
|
6
|
+
if (!i && !a) return {};
|
|
7
|
+
let s = {};
|
|
8
|
+
for (let e of new Set([...Object.keys(i ?? {}), ...Object.keys(a ?? {})])) {
|
|
9
|
+
let c = i?.[e], l = a?.[e];
|
|
10
|
+
if (t(c) && t(l)) {
|
|
11
|
+
let t = r(c, l, o);
|
|
12
|
+
Object.keys(t).length > 0 && (s[e] = t);
|
|
13
|
+
} else o(c, l) || (s[e] = a != null && e in a && (i == null || !(e in i)) ? n : c);
|
|
14
|
+
}
|
|
15
|
+
return s;
|
|
14
16
|
}
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
//# sourceMappingURL=diff.js.map
|
|
17
|
+
//#endregion
|
|
18
|
+
export { n as DELETED, r as diff };
|
|
19
|
+
|
|
20
|
+
//# sourceMappingURL=diff.js.map
|
package/dist/object/diff.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"diff.js","sources":["../../src/object/diff.ts"],"sourcesContent":["import { isEqual } from '../typed/isEqual';\nimport { isObject } from '../typed/isObject';\
|
|
1
|
+
{"version":3,"file":"diff.js","names":[],"sources":["../../src/object/diff.ts"],"sourcesContent":["import type { Obj } from '../types';\n\nimport { isEqual } from '../typed/isEqual';\nimport { isObject } from '../typed/isObject';\n\n/** Sentinel value returned by `diff` when a key exists in `prev` but not in `curr`. */\nexport const DELETED: unique symbol = Symbol('deleted');\n\nexport type DiffResult<T extends Obj> = { [K in keyof T]?: T[K] | typeof DELETED };\n\n/**\n * Computes the difference between two objects.\n *\n * Keys present in `prev` but absent in `curr` are marked with the `DELETED` sentinel.\n *\n * @example\n * ```ts\n * import { diff, DELETED } from '@vielzeug/toolkit';\n *\n * diff({ a: 1, b: 2 }, { a: 1, b: 2, c: 3 }); // { c: DELETED }\n * diff({ a: 1, b: 99 }, { a: 1, b: 2 }); // { b: 99 }\n * ```\n *\n * @param curr - The current object.\n * @param prev - The previous object.\n * @param [compareFn] - A custom function to compare values.\n * @returns An object containing new/modified/deleted properties.\n */\nexport function diff<T extends Obj>(\n curr?: T,\n prev?: T,\n compareFn: (a: unknown, b: unknown) => boolean = isEqual,\n): DiffResult<T> {\n if (!curr && !prev) return {};\n\n const result: Record<string, unknown> = {};\n\n for (const key of new Set([...Object.keys(curr ?? {}), ...Object.keys(prev ?? {})])) {\n const _curr = curr?.[key];\n const _prev = prev?.[key];\n\n if (isObject(_curr) && isObject(_prev)) {\n const nestedDiff = diff(_curr as Obj, _prev as Obj, compareFn);\n\n if (Object.keys(nestedDiff).length > 0) {\n result[key] = nestedDiff;\n }\n } else if (!compareFn(_curr, _prev)) {\n const wasDeleted = prev != null && key in prev && (curr == null || !(key in curr));\n\n result[key] = wasDeleted ? DELETED : _curr;\n }\n }\n\n return result as DiffResult<T>;\n}\n"],"mappings":";;;AAMA,IAAa,IAAyB,OAAO,UAAU;AAsBvD,SAAgB,EACd,GACA,GACA,IAAiD,GAClC;AACf,KAAI,CAAC,KAAQ,CAAC,EAAM,QAAO,EAAE;CAE7B,IAAM,IAAkC,EAAE;AAE1C,MAAK,IAAM,KAAO,IAAI,IAAI,CAAC,GAAG,OAAO,KAAK,KAAQ,EAAE,CAAC,EAAE,GAAG,OAAO,KAAK,KAAQ,EAAE,CAAC,CAAC,CAAC,EAAE;EACnF,IAAM,IAAQ,IAAO,IACf,IAAQ,IAAO;AAErB,MAAI,EAAS,EAAM,IAAI,EAAS,EAAM,EAAE;GACtC,IAAM,IAAa,EAAK,GAAc,GAAc,EAAU;AAE9D,GAAI,OAAO,KAAK,EAAW,CAAC,SAAS,MACnC,EAAO,KAAO;SAEN,EAAU,GAAO,EAAM,KAGjC,EAAO,KAFY,KAAQ,QAAQ,KAAO,MAAS,KAAQ,QAAQ,EAAE,KAAO,MAEjD,IAAU;;AAIzC,QAAO"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/object/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,QAAQ,CAAC;AACvB,cAAc,SAAS,CAAC;AACxB,cAAc,aAAa,CAAC;AAC5B,cAAc,QAAQ,CAAC;AACvB,cAAc,SAAS,CAAC;AACxB,cAAc,SAAS,CAAC;AACxB,cAAc,QAAQ,CAAC"}
|
package/dist/object/merge.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
//# sourceMappingURL=merge.cjs.map
|
|
1
|
+
const e=require(`../typed/isArray.cjs`),t=require(`../typed/isObject.cjs`);function n(e=`deep`,...t){return t.length===0?{}:e===`shallow`?Object.assign({},...t):t.reduce((t,n)=>a(t,n,e),{})}function r(...e){return n(`deep`,...e)}function i(...e){return n(`shallow`,...e)}function a(n,r,i){if(!t.isObject(r))return r;let c={...n};for(let n of Object.keys(r)){let l=r[n],u=c[n];c[n]=e.isArray(l)&&e.isArray(u)?o(u,l,i):t.isObject(l)&&t.isObject(u)?a(u,l,i):s(u,l,i)}return c}function o(e,t,n){return e?n===`arrayConcat`?e.concat(t):n===`arrayReplace`?t:[...e,...t]:t}function s(e,t,n){return typeof n==`function`?n(e,t):n===`lastWins`||t!==void 0?t:e}exports.deepMerge=r,exports.merge=n,exports.shallowMerge=i;
|
|
2
|
+
//# sourceMappingURL=merge.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"merge.cjs","sources":["../../src/object/merge.ts"],"sourcesContent":["import {
|
|
1
|
+
{"version":3,"file":"merge.cjs","names":[],"sources":["../../src/object/merge.ts"],"sourcesContent":["import type { Obj } from '../types';\n\nimport { isArray } from '../typed/isArray';\nimport { isObject } from '../typed/isObject';\n\n// #region MergeStrategy\ntype MergeStrategy =\n | 'deep'\n | 'shallow'\n | 'lastWins'\n | 'arrayConcat'\n | 'arrayReplace'\n | ((target: any, source: any) => any);\n// #endregion MergeStrategy\n\ntype DeepMerge<T, U> = T extends Obj\n ? U extends Obj\n ? {\n [K in keyof T | keyof U]: K extends keyof T\n ? K extends keyof U\n ? DeepMerge<T[K], U[K]>\n : T[K]\n : K extends keyof U\n ? U[K]\n : never;\n }\n : U\n : U;\n\ntype Merge<T extends Obj[]> = T extends [infer First, ...infer Rest]\n ? First extends Obj\n ? Rest extends Obj[]\n ? DeepMerge<First, Merge<Rest>>\n : First\n : Obj\n : Obj;\n\n/**\n * Merges multiple objects based on a specified merge strategy.\n *\n * @example\n * ```ts\n * const obj1 = { a: 1, b: { x: 10, y: \"hello\" }, c: [1] };\n * const obj2 = { b: { y: 20, z: true }, c: [2] };\n * const obj3 = { d: false, c: [3] };\n *\n * merge(\"deep\", obj1, obj2, obj3); // { a: 1, b: { x: 10, y: 20, z: true }, c: [1, 2, 3], d: false }\n * merge(\"shallow\", obj1, obj2, obj3); // { a: 1, b: { y: 20, z: true }, c: [3], d: false }\n * ```\n *\n * @param [strategy='deep'] - The merging strategy to use.\n * @param items - The objects to merge.\n * @returns A new merged object.\n */\nexport function merge<T extends Obj[]>(strategy: MergeStrategy = 'deep', ...items: [...T]): Merge<T> {\n if (items.length === 0) return {} as Merge<T>;\n\n if (strategy === 'shallow') {\n return Object.assign({}, ...items) as Merge<T>;\n }\n\n return items.reduce((acc, obj) => mergeObjects(acc, obj, strategy) as unknown as Merge<T>, {} as Merge<T>);\n}\n\n/**\n * Merges objects deeply. Shorthand for `merge('deep', ...items)`.\n *\n * @example\n * ```ts\n * deepMerge({ a: { x: 1 } }, { a: { y: 2 } }); // { a: { x: 1, y: 2 } }\n * ```\n */\nexport function deepMerge<T extends Obj[]>(...items: [...T]): Merge<T> {\n return merge('deep', ...items) as Merge<T>;\n}\n\n/**\n * Merges objects shallowly. Shorthand for `merge('shallow', ...items)`.\n *\n * @example\n * ```ts\n * shallowMerge({ a: 1, b: { x: 1 } }, { b: { y: 2 } }); // { a: 1, b: { y: 2 } }\n * ```\n */\nexport function shallowMerge<T extends Obj[]>(...items: [...T]): Merge<T> {\n return merge('shallow', ...items) as Merge<T>;\n}\n\n/**\n * Deeply merges two objects based on the provided strategy.\n *\n * - Uses **direct property access** for performance.\n * - **Avoids redundant deep merging** where unnecessary.\n * - Optimized **array merging strategies**.\n *\n * @param target - The target object.\n * @param source - The source object.\n * @param strategy - The merge strategy.\n * @returns A new merged object.\n */\nfunction mergeObjects<T extends Obj, U extends Obj>(target: T, source: U, strategy: MergeStrategy): DeepMerge<T, U> {\n if (!isObject(source)) return source as DeepMerge<T, U>;\n\n const result = { ...target } as DeepMerge<T, U>;\n\n for (const key of Object.keys(source)) {\n const sourceValue = source[key];\n const targetValue = result[key];\n\n (result as any)[key] =\n isArray(sourceValue) && isArray(targetValue)\n ? handleArrayMerge(targetValue, sourceValue, strategy)\n : isObject(sourceValue) && isObject(targetValue)\n ? mergeObjects(targetValue as Obj, sourceValue as Obj, strategy)\n : applyMergeStrategy(targetValue, sourceValue, strategy);\n }\n\n return result;\n}\n\n/**\n * Optimized array merge based on strategy.\n *\n * - `\"arrayConcat\"` → Concatenates arrays.\n * - `\"arrayReplace\"` → Replaces the existing array.\n * - Default: Concatenates arrays (same as `\"arrayConcat\"`).\n */\nfunction handleArrayMerge<T, U>(targetArray: T[] | undefined, sourceArray: U[], strategy: MergeStrategy): (T | U)[] {\n if (!targetArray) return sourceArray;\n\n if (strategy === 'arrayConcat') return targetArray.concat(sourceArray as any);\n\n if (strategy === 'arrayReplace') return sourceArray;\n\n return [...targetArray, ...sourceArray];\n}\n\n/**\n * Determines the appropriate value to assign based on the merge strategy.\n *\n * - `\"lastWins\"` → Overwrites with the latest value.\n * - Custom functions → Allows user-defined behavior.\n */\nfunction applyMergeStrategy<T, U>(target: T, source: U, strategy: MergeStrategy): T | U {\n if (typeof strategy === 'function') return strategy(target, source);\n\n return strategy === 'lastWins' || source !== undefined ? source : target;\n}\n"],"mappings":"2EAsDA,SAAgB,EAAuB,EAA0B,OAAQ,GAAG,EAAyB,CAOnG,OANI,EAAM,SAAW,EAAU,EAAE,CAE7B,IAAa,UACR,OAAO,OAAO,EAAE,CAAE,GAAG,EAAM,CAG7B,EAAM,QAAQ,EAAK,IAAQ,EAAa,EAAK,EAAK,EAAS,CAAyB,EAAE,CAAa,CAW5G,SAAgB,EAA2B,GAAG,EAAyB,CACrE,OAAO,EAAM,OAAQ,GAAG,EAAM,CAWhC,SAAgB,EAA8B,GAAG,EAAyB,CACxE,OAAO,EAAM,UAAW,GAAG,EAAM,CAenC,SAAS,EAA2C,EAAW,EAAW,EAA0C,CAClH,GAAI,CAAC,EAAA,SAAS,EAAO,CAAE,OAAO,EAE9B,IAAM,EAAS,CAAE,GAAG,EAAQ,CAE5B,IAAK,IAAM,KAAO,OAAO,KAAK,EAAO,CAAE,CACrC,IAAM,EAAc,EAAO,GACrB,EAAc,EAAO,GAE1B,EAAe,GACd,EAAA,QAAQ,EAAY,EAAI,EAAA,QAAQ,EAAY,CACxC,EAAiB,EAAa,EAAa,EAAS,CACpD,EAAA,SAAS,EAAY,EAAI,EAAA,SAAS,EAAY,CAC5C,EAAa,EAAoB,EAAoB,EAAS,CAC9D,EAAmB,EAAa,EAAa,EAAS,CAGhE,OAAO,EAUT,SAAS,EAAuB,EAA8B,EAAkB,EAAoC,CAOlH,OANK,EAED,IAAa,cAAsB,EAAY,OAAO,EAAmB,CAEzE,IAAa,eAAuB,EAEjC,CAAC,GAAG,EAAa,GAAG,EAAY,CANd,EAe3B,SAAS,EAAyB,EAAW,EAAW,EAAgC,CAGtF,OAFI,OAAO,GAAa,WAAmB,EAAS,EAAQ,EAAO,CAE5D,IAAa,YAAc,IAAW,IAAA,GAAY,EAAS"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import type { Obj } from '../types';
|
|
2
|
+
type MergeStrategy = 'deep' | 'shallow' | 'lastWins' | 'arrayConcat' | 'arrayReplace' | ((target: any, source: any) => any);
|
|
3
|
+
type DeepMerge<T, U> = T extends Obj ? U extends Obj ? {
|
|
4
|
+
[K in keyof T | keyof U]: K extends keyof T ? K extends keyof U ? DeepMerge<T[K], U[K]> : T[K] : K extends keyof U ? U[K] : never;
|
|
5
|
+
} : U : U;
|
|
6
|
+
type Merge<T extends Obj[]> = T extends [infer First, ...infer Rest] ? First extends Obj ? Rest extends Obj[] ? DeepMerge<First, Merge<Rest>> : First : Obj : Obj;
|
|
7
|
+
/**
|
|
8
|
+
* Merges multiple objects based on a specified merge strategy.
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* ```ts
|
|
12
|
+
* const obj1 = { a: 1, b: { x: 10, y: "hello" }, c: [1] };
|
|
13
|
+
* const obj2 = { b: { y: 20, z: true }, c: [2] };
|
|
14
|
+
* const obj3 = { d: false, c: [3] };
|
|
15
|
+
*
|
|
16
|
+
* merge("deep", obj1, obj2, obj3); // { a: 1, b: { x: 10, y: 20, z: true }, c: [1, 2, 3], d: false }
|
|
17
|
+
* merge("shallow", obj1, obj2, obj3); // { a: 1, b: { y: 20, z: true }, c: [3], d: false }
|
|
18
|
+
* ```
|
|
19
|
+
*
|
|
20
|
+
* @param [strategy='deep'] - The merging strategy to use.
|
|
21
|
+
* @param items - The objects to merge.
|
|
22
|
+
* @returns A new merged object.
|
|
23
|
+
*/
|
|
24
|
+
export declare function merge<T extends Obj[]>(strategy?: MergeStrategy, ...items: [...T]): Merge<T>;
|
|
25
|
+
/**
|
|
26
|
+
* Merges objects deeply. Shorthand for `merge('deep', ...items)`.
|
|
27
|
+
*
|
|
28
|
+
* @example
|
|
29
|
+
* ```ts
|
|
30
|
+
* deepMerge({ a: { x: 1 } }, { a: { y: 2 } }); // { a: { x: 1, y: 2 } }
|
|
31
|
+
* ```
|
|
32
|
+
*/
|
|
33
|
+
export declare function deepMerge<T extends Obj[]>(...items: [...T]): Merge<T>;
|
|
34
|
+
/**
|
|
35
|
+
* Merges objects shallowly. Shorthand for `merge('shallow', ...items)`.
|
|
36
|
+
*
|
|
37
|
+
* @example
|
|
38
|
+
* ```ts
|
|
39
|
+
* shallowMerge({ a: 1, b: { x: 1 } }, { b: { y: 2 } }); // { a: 1, b: { y: 2 } }
|
|
40
|
+
* ```
|
|
41
|
+
*/
|
|
42
|
+
export declare function shallowMerge<T extends Obj[]>(...items: [...T]): Merge<T>;
|
|
43
|
+
export {};
|
|
44
|
+
//# sourceMappingURL=merge.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"merge.d.ts","sourceRoot":"","sources":["../../src/object/merge.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAMpC,KAAK,aAAa,GACd,MAAM,GACN,SAAS,GACT,UAAU,GACV,aAAa,GACb,cAAc,GACd,CAAC,CAAC,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,KAAK,GAAG,CAAC,CAAC;AAGxC,KAAK,SAAS,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,SAAS,GAAG,GAChC,CAAC,SAAS,GAAG,GACX;KACG,CAAC,IAAI,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,SAAS,MAAM,CAAC,GACvC,CAAC,SAAS,MAAM,CAAC,GACf,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GACrB,CAAC,CAAC,CAAC,CAAC,GACN,CAAC,SAAS,MAAM,CAAC,GACf,CAAC,CAAC,CAAC,CAAC,GACJ,KAAK;CACZ,GACD,CAAC,GACH,CAAC,CAAC;AAEN,KAAK,KAAK,CAAC,CAAC,SAAS,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,GAChE,KAAK,SAAS,GAAG,GACf,IAAI,SAAS,GAAG,EAAE,GAChB,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,GAC7B,KAAK,GACP,GAAG,GACL,GAAG,CAAC;AAER;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,KAAK,CAAC,CAAC,SAAS,GAAG,EAAE,EAAE,QAAQ,GAAE,aAAsB,EAAE,GAAG,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAQnG;AAED;;;;;;;GAOG;AACH,wBAAgB,SAAS,CAAC,CAAC,SAAS,GAAG,EAAE,EAAE,GAAG,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAErE;AAED;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,CAAC,SAAS,GAAG,EAAE,EAAE,GAAG,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAExE"}
|
package/dist/object/merge.js
CHANGED
|
@@ -1,25 +1,31 @@
|
|
|
1
|
-
import { isArray as
|
|
2
|
-
import { isObject as
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
import { isArray as e } from "../typed/isArray.js";
|
|
2
|
+
import { isObject as t } from "../typed/isObject.js";
|
|
3
|
+
//#region src/object/merge.ts
|
|
4
|
+
function n(e = "deep", ...t) {
|
|
5
|
+
return t.length === 0 ? {} : e === "shallow" ? Object.assign({}, ...t) : t.reduce((t, n) => a(t, n, e), {});
|
|
5
6
|
}
|
|
6
|
-
function
|
|
7
|
-
|
|
8
|
-
const r = { ...i };
|
|
9
|
-
for (const o in n) {
|
|
10
|
-
if (!Object.hasOwn(n, o)) continue;
|
|
11
|
-
const f = n[o], t = r[o];
|
|
12
|
-
r[o] = c(f) && c(t) ? p(t, f, e) : u(f) && u(t) ? l(t, f, e) : a(t, f, e);
|
|
13
|
-
}
|
|
14
|
-
return r;
|
|
7
|
+
function r(...e) {
|
|
8
|
+
return n("deep", ...e);
|
|
15
9
|
}
|
|
16
|
-
function
|
|
17
|
-
|
|
10
|
+
function i(...e) {
|
|
11
|
+
return n("shallow", ...e);
|
|
18
12
|
}
|
|
19
|
-
function a(
|
|
20
|
-
|
|
13
|
+
function a(n, r, i) {
|
|
14
|
+
if (!t(r)) return r;
|
|
15
|
+
let c = { ...n };
|
|
16
|
+
for (let n of Object.keys(r)) {
|
|
17
|
+
let l = r[n], u = c[n];
|
|
18
|
+
c[n] = e(l) && e(u) ? o(u, l, i) : t(l) && t(u) ? a(u, l, i) : s(u, l, i);
|
|
19
|
+
}
|
|
20
|
+
return c;
|
|
21
21
|
}
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
}
|
|
25
|
-
|
|
22
|
+
function o(e, t, n) {
|
|
23
|
+
return e ? n === "arrayConcat" ? e.concat(t) : n === "arrayReplace" ? t : [...e, ...t] : t;
|
|
24
|
+
}
|
|
25
|
+
function s(e, t, n) {
|
|
26
|
+
return typeof n == "function" ? n(e, t) : n === "lastWins" || t !== void 0 ? t : e;
|
|
27
|
+
}
|
|
28
|
+
//#endregion
|
|
29
|
+
export { r as deepMerge, n as merge, i as shallowMerge };
|
|
30
|
+
|
|
31
|
+
//# sourceMappingURL=merge.js.map
|
package/dist/object/merge.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"merge.js","sources":["../../src/object/merge.ts"],"sourcesContent":["import {
|
|
1
|
+
{"version":3,"file":"merge.js","names":[],"sources":["../../src/object/merge.ts"],"sourcesContent":["import type { Obj } from '../types';\n\nimport { isArray } from '../typed/isArray';\nimport { isObject } from '../typed/isObject';\n\n// #region MergeStrategy\ntype MergeStrategy =\n | 'deep'\n | 'shallow'\n | 'lastWins'\n | 'arrayConcat'\n | 'arrayReplace'\n | ((target: any, source: any) => any);\n// #endregion MergeStrategy\n\ntype DeepMerge<T, U> = T extends Obj\n ? U extends Obj\n ? {\n [K in keyof T | keyof U]: K extends keyof T\n ? K extends keyof U\n ? DeepMerge<T[K], U[K]>\n : T[K]\n : K extends keyof U\n ? U[K]\n : never;\n }\n : U\n : U;\n\ntype Merge<T extends Obj[]> = T extends [infer First, ...infer Rest]\n ? First extends Obj\n ? Rest extends Obj[]\n ? DeepMerge<First, Merge<Rest>>\n : First\n : Obj\n : Obj;\n\n/**\n * Merges multiple objects based on a specified merge strategy.\n *\n * @example\n * ```ts\n * const obj1 = { a: 1, b: { x: 10, y: \"hello\" }, c: [1] };\n * const obj2 = { b: { y: 20, z: true }, c: [2] };\n * const obj3 = { d: false, c: [3] };\n *\n * merge(\"deep\", obj1, obj2, obj3); // { a: 1, b: { x: 10, y: 20, z: true }, c: [1, 2, 3], d: false }\n * merge(\"shallow\", obj1, obj2, obj3); // { a: 1, b: { y: 20, z: true }, c: [3], d: false }\n * ```\n *\n * @param [strategy='deep'] - The merging strategy to use.\n * @param items - The objects to merge.\n * @returns A new merged object.\n */\nexport function merge<T extends Obj[]>(strategy: MergeStrategy = 'deep', ...items: [...T]): Merge<T> {\n if (items.length === 0) return {} as Merge<T>;\n\n if (strategy === 'shallow') {\n return Object.assign({}, ...items) as Merge<T>;\n }\n\n return items.reduce((acc, obj) => mergeObjects(acc, obj, strategy) as unknown as Merge<T>, {} as Merge<T>);\n}\n\n/**\n * Merges objects deeply. Shorthand for `merge('deep', ...items)`.\n *\n * @example\n * ```ts\n * deepMerge({ a: { x: 1 } }, { a: { y: 2 } }); // { a: { x: 1, y: 2 } }\n * ```\n */\nexport function deepMerge<T extends Obj[]>(...items: [...T]): Merge<T> {\n return merge('deep', ...items) as Merge<T>;\n}\n\n/**\n * Merges objects shallowly. Shorthand for `merge('shallow', ...items)`.\n *\n * @example\n * ```ts\n * shallowMerge({ a: 1, b: { x: 1 } }, { b: { y: 2 } }); // { a: 1, b: { y: 2 } }\n * ```\n */\nexport function shallowMerge<T extends Obj[]>(...items: [...T]): Merge<T> {\n return merge('shallow', ...items) as Merge<T>;\n}\n\n/**\n * Deeply merges two objects based on the provided strategy.\n *\n * - Uses **direct property access** for performance.\n * - **Avoids redundant deep merging** where unnecessary.\n * - Optimized **array merging strategies**.\n *\n * @param target - The target object.\n * @param source - The source object.\n * @param strategy - The merge strategy.\n * @returns A new merged object.\n */\nfunction mergeObjects<T extends Obj, U extends Obj>(target: T, source: U, strategy: MergeStrategy): DeepMerge<T, U> {\n if (!isObject(source)) return source as DeepMerge<T, U>;\n\n const result = { ...target } as DeepMerge<T, U>;\n\n for (const key of Object.keys(source)) {\n const sourceValue = source[key];\n const targetValue = result[key];\n\n (result as any)[key] =\n isArray(sourceValue) && isArray(targetValue)\n ? handleArrayMerge(targetValue, sourceValue, strategy)\n : isObject(sourceValue) && isObject(targetValue)\n ? mergeObjects(targetValue as Obj, sourceValue as Obj, strategy)\n : applyMergeStrategy(targetValue, sourceValue, strategy);\n }\n\n return result;\n}\n\n/**\n * Optimized array merge based on strategy.\n *\n * - `\"arrayConcat\"` → Concatenates arrays.\n * - `\"arrayReplace\"` → Replaces the existing array.\n * - Default: Concatenates arrays (same as `\"arrayConcat\"`).\n */\nfunction handleArrayMerge<T, U>(targetArray: T[] | undefined, sourceArray: U[], strategy: MergeStrategy): (T | U)[] {\n if (!targetArray) return sourceArray;\n\n if (strategy === 'arrayConcat') return targetArray.concat(sourceArray as any);\n\n if (strategy === 'arrayReplace') return sourceArray;\n\n return [...targetArray, ...sourceArray];\n}\n\n/**\n * Determines the appropriate value to assign based on the merge strategy.\n *\n * - `\"lastWins\"` → Overwrites with the latest value.\n * - Custom functions → Allows user-defined behavior.\n */\nfunction applyMergeStrategy<T, U>(target: T, source: U, strategy: MergeStrategy): T | U {\n if (typeof strategy === 'function') return strategy(target, source);\n\n return strategy === 'lastWins' || source !== undefined ? source : target;\n}\n"],"mappings":";;;AAsDA,SAAgB,EAAuB,IAA0B,QAAQ,GAAG,GAAyB;AAOnG,QANI,EAAM,WAAW,IAAU,EAAE,GAE7B,MAAa,YACR,OAAO,OAAO,EAAE,EAAE,GAAG,EAAM,GAG7B,EAAM,QAAQ,GAAK,MAAQ,EAAa,GAAK,GAAK,EAAS,EAAyB,EAAE,CAAa;;AAW5G,SAAgB,EAA2B,GAAG,GAAyB;AACrE,QAAO,EAAM,QAAQ,GAAG,EAAM;;AAWhC,SAAgB,EAA8B,GAAG,GAAyB;AACxE,QAAO,EAAM,WAAW,GAAG,EAAM;;AAenC,SAAS,EAA2C,GAAW,GAAW,GAA0C;AAClH,KAAI,CAAC,EAAS,EAAO,CAAE,QAAO;CAE9B,IAAM,IAAS,EAAE,GAAG,GAAQ;AAE5B,MAAK,IAAM,KAAO,OAAO,KAAK,EAAO,EAAE;EACrC,IAAM,IAAc,EAAO,IACrB,IAAc,EAAO;AAE1B,IAAe,KACd,EAAQ,EAAY,IAAI,EAAQ,EAAY,GACxC,EAAiB,GAAa,GAAa,EAAS,GACpD,EAAS,EAAY,IAAI,EAAS,EAAY,GAC5C,EAAa,GAAoB,GAAoB,EAAS,GAC9D,EAAmB,GAAa,GAAa,EAAS;;AAGhE,QAAO;;AAUT,SAAS,EAAuB,GAA8B,GAAkB,GAAoC;AAOlH,QANK,IAED,MAAa,gBAAsB,EAAY,OAAO,EAAmB,GAEzE,MAAa,iBAAuB,IAEjC,CAAC,GAAG,GAAa,GAAG,EAAY,GANd;;AAe3B,SAAS,EAAyB,GAAW,GAAW,GAAgC;AAGtF,QAFI,OAAO,KAAa,aAAmB,EAAS,GAAQ,EAAO,GAE5D,MAAa,cAAc,MAAW,KAAA,IAAY,IAAS"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
//# sourceMappingURL=parseJSON.cjs.map
|
|
1
|
+
const e=require(`../typed/isString.cjs`),t=require(`../typed/isNil.cjs`);function n(n,r={}){let{defaultValue:i,onError:a,reviver:o,validator:s}=r;if(!e.isString(n))return t.isNil(n)?i:n;try{let e=JSON.parse(n,o);if(s&&!s(e))throw TypeError(`Parsed JSON does not match the expected structure`);return e??i}catch(e){return a?.(e),i}}exports.parseJSON=n;
|
|
2
|
+
//# sourceMappingURL=parseJSON.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parseJSON.cjs","sources":["../../src/object/parseJSON.ts"],"sourcesContent":["import {
|
|
1
|
+
{"version":3,"file":"parseJSON.cjs","names":[],"sources":["../../src/object/parseJSON.ts"],"sourcesContent":["import { isNil } from '../typed/isNil';\nimport { isString } from '../typed/isString';\n\ntype JSONValue = string | number | boolean | null | JSONValue[] | { [key: string]: JSONValue };\n\n// #region ParseJSONOptions\ntype ParseJSONOptions<T> = {\n defaultValue?: T;\n onError?: (err: unknown) => void;\n reviver?: (key: string, value: any) => any;\n validator?: (value: any) => boolean;\n};\n// #endregion ParseJSONOptions\n\n/**\n * Parses a JSON string and returns the resulting object.\n *\n * @example\n * ```ts\n * const json = '{\"a\":1,\"b\":2,\"c\":3}';\n * const result = parseJSON<Record<string, number>>(json, {\n * defaultValue: { a: 0, b: 0, c: 0 },\n * validator: (value) => Object.values(value).every(v => typeof v === 'number'),\n * onError: (err) => console.warn('Parsing failed:', err),\n * });\n * console.log(result); // { a: 1, b: 2, c: 3 }\n * ```\n *\n * @template T - The expected type of the parsed JSON.\n * @param json - The JSON string to parse. If not a string, it is returned as is.\n * @param options - Configuration options for parsing.\n *\n * @returns The parsed object if successful, otherwise the default value.\n */\nexport function parseJSON<T extends JSONValue>(json: unknown, options: ParseJSONOptions<T> = {}): T | undefined {\n const { defaultValue, onError, reviver, validator } = options;\n\n if (!isString(json)) return isNil(json) ? defaultValue : (json as T);\n\n try {\n const parsed = JSON.parse(json as string, reviver);\n\n if (validator && !validator(parsed)) {\n throw new TypeError('Parsed JSON does not match the expected structure');\n }\n\n return parsed ?? defaultValue;\n } catch (err) {\n onError?.(err);\n\n return defaultValue;\n }\n}\n"],"mappings":"yEAkCA,SAAgB,EAA+B,EAAe,EAA+B,EAAE,CAAiB,CAC9G,GAAM,CAAE,eAAc,UAAS,UAAS,aAAc,EAEtD,GAAI,CAAC,EAAA,SAAS,EAAK,CAAE,OAAO,EAAA,MAAM,EAAK,CAAG,EAAgB,EAE1D,GAAI,CACF,IAAM,EAAS,KAAK,MAAM,EAAgB,EAAQ,CAElD,GAAI,GAAa,CAAC,EAAU,EAAO,CACjC,MAAU,UAAU,oDAAoD,CAG1E,OAAO,GAAU,QACV,EAAK,CAGZ,OAFA,IAAU,EAAI,CAEP"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
type JSONValue = string | number | boolean | null | JSONValue[] | {
|
|
2
|
+
[key: string]: JSONValue;
|
|
3
|
+
};
|
|
4
|
+
type ParseJSONOptions<T> = {
|
|
5
|
+
defaultValue?: T;
|
|
6
|
+
onError?: (err: unknown) => void;
|
|
7
|
+
reviver?: (key: string, value: any) => any;
|
|
8
|
+
validator?: (value: any) => boolean;
|
|
9
|
+
};
|
|
10
|
+
/**
|
|
11
|
+
* Parses a JSON string and returns the resulting object.
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* ```ts
|
|
15
|
+
* const json = '{"a":1,"b":2,"c":3}';
|
|
16
|
+
* const result = parseJSON<Record<string, number>>(json, {
|
|
17
|
+
* defaultValue: { a: 0, b: 0, c: 0 },
|
|
18
|
+
* validator: (value) => Object.values(value).every(v => typeof v === 'number'),
|
|
19
|
+
* onError: (err) => console.warn('Parsing failed:', err),
|
|
20
|
+
* });
|
|
21
|
+
* console.log(result); // { a: 1, b: 2, c: 3 }
|
|
22
|
+
* ```
|
|
23
|
+
*
|
|
24
|
+
* @template T - The expected type of the parsed JSON.
|
|
25
|
+
* @param json - The JSON string to parse. If not a string, it is returned as is.
|
|
26
|
+
* @param options - Configuration options for parsing.
|
|
27
|
+
*
|
|
28
|
+
* @returns The parsed object if successful, otherwise the default value.
|
|
29
|
+
*/
|
|
30
|
+
export declare function parseJSON<T extends JSONValue>(json: unknown, options?: ParseJSONOptions<T>): T | undefined;
|
|
31
|
+
export {};
|
|
32
|
+
//# sourceMappingURL=parseJSON.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parseJSON.d.ts","sourceRoot":"","sources":["../../src/object/parseJSON.ts"],"names":[],"mappings":"AAGA,KAAK,SAAS,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,SAAS,EAAE,GAAG;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,CAAC;AAG/F,KAAK,gBAAgB,CAAC,CAAC,IAAI;IACzB,YAAY,CAAC,EAAE,CAAC,CAAC;IACjB,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,IAAI,CAAC;IACjC,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,KAAK,GAAG,CAAC;IAC3C,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,OAAO,CAAC;CACrC,CAAC;AAGF;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,SAAS,CAAC,CAAC,SAAS,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,GAAE,gBAAgB,CAAC,CAAC,CAAM,GAAG,CAAC,GAAG,SAAS,CAkB9G"}
|
package/dist/object/parseJSON.js
CHANGED
|
@@ -1,19 +1,18 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { isNil as
|
|
3
|
-
|
|
4
|
-
function
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
}
|
|
1
|
+
import { isString as e } from "../typed/isString.js";
|
|
2
|
+
import { isNil as t } from "../typed/isNil.js";
|
|
3
|
+
//#region src/object/parseJSON.ts
|
|
4
|
+
function n(n, r = {}) {
|
|
5
|
+
let { defaultValue: i, onError: a, reviver: o, validator: s } = r;
|
|
6
|
+
if (!e(n)) return t(n) ? i : n;
|
|
7
|
+
try {
|
|
8
|
+
let e = JSON.parse(n, o);
|
|
9
|
+
if (s && !s(e)) throw TypeError("Parsed JSON does not match the expected structure");
|
|
10
|
+
return e ?? i;
|
|
11
|
+
} catch (e) {
|
|
12
|
+
return a?.(e), i;
|
|
13
|
+
}
|
|
15
14
|
}
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
//# sourceMappingURL=parseJSON.js.map
|
|
15
|
+
//#endregion
|
|
16
|
+
export { n as parseJSON };
|
|
17
|
+
|
|
18
|
+
//# sourceMappingURL=parseJSON.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parseJSON.js","sources":["../../src/object/parseJSON.ts"],"sourcesContent":["import {
|
|
1
|
+
{"version":3,"file":"parseJSON.js","names":[],"sources":["../../src/object/parseJSON.ts"],"sourcesContent":["import { isNil } from '../typed/isNil';\nimport { isString } from '../typed/isString';\n\ntype JSONValue = string | number | boolean | null | JSONValue[] | { [key: string]: JSONValue };\n\n// #region ParseJSONOptions\ntype ParseJSONOptions<T> = {\n defaultValue?: T;\n onError?: (err: unknown) => void;\n reviver?: (key: string, value: any) => any;\n validator?: (value: any) => boolean;\n};\n// #endregion ParseJSONOptions\n\n/**\n * Parses a JSON string and returns the resulting object.\n *\n * @example\n * ```ts\n * const json = '{\"a\":1,\"b\":2,\"c\":3}';\n * const result = parseJSON<Record<string, number>>(json, {\n * defaultValue: { a: 0, b: 0, c: 0 },\n * validator: (value) => Object.values(value).every(v => typeof v === 'number'),\n * onError: (err) => console.warn('Parsing failed:', err),\n * });\n * console.log(result); // { a: 1, b: 2, c: 3 }\n * ```\n *\n * @template T - The expected type of the parsed JSON.\n * @param json - The JSON string to parse. If not a string, it is returned as is.\n * @param options - Configuration options for parsing.\n *\n * @returns The parsed object if successful, otherwise the default value.\n */\nexport function parseJSON<T extends JSONValue>(json: unknown, options: ParseJSONOptions<T> = {}): T | undefined {\n const { defaultValue, onError, reviver, validator } = options;\n\n if (!isString(json)) return isNil(json) ? defaultValue : (json as T);\n\n try {\n const parsed = JSON.parse(json as string, reviver);\n\n if (validator && !validator(parsed)) {\n throw new TypeError('Parsed JSON does not match the expected structure');\n }\n\n return parsed ?? defaultValue;\n } catch (err) {\n onError?.(err);\n\n return defaultValue;\n }\n}\n"],"mappings":";;;AAkCA,SAAgB,EAA+B,GAAe,IAA+B,EAAE,EAAiB;CAC9G,IAAM,EAAE,iBAAc,YAAS,YAAS,iBAAc;AAEtD,KAAI,CAAC,EAAS,EAAK,CAAE,QAAO,EAAM,EAAK,GAAG,IAAgB;AAE1D,KAAI;EACF,IAAM,IAAS,KAAK,MAAM,GAAgB,EAAQ;AAElD,MAAI,KAAa,CAAC,EAAU,EAAO,CACjC,OAAU,UAAU,oDAAoD;AAG1E,SAAO,KAAU;UACV,GAAK;AAGZ,SAFA,IAAU,EAAI,EAEP"}
|
package/dist/object/path.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
//# sourceMappingURL=path.cjs.map
|
|
1
|
+
const e=require(`../function/assert.cjs`),t=require(`../typed/isNil.cjs`),n=require(`../typed/isObject.cjs`);function r(r,i,a,o={}){e.assert(n.isObject(r),n.IS_OBJECT_ERROR_MSG,{args:{item:r},type:TypeError});let{throwOnMissing:s=!1}=o,c=i.split(/[.[\]]+/).filter(Boolean),l=r;for(let e of c){if(t.isNil(l)||typeof l!=`object`){if(s)throw Error(`Cannot read property '${e}' of ${l}`);return a}if(l=l[e],l===void 0){if(s)throw Error(`Property '${e}' does not exist`);return a}}return l}exports.get=r;
|
|
2
|
+
//# sourceMappingURL=path.cjs.map
|
package/dist/object/path.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"path.cjs","sources":["../../src/object/path.ts"],"sourcesContent":["import {
|
|
1
|
+
{"version":3,"file":"path.cjs","names":[],"sources":["../../src/object/path.ts"],"sourcesContent":["import type { Obj } from '../types';\n\nimport { assert } from '../function/assert';\nimport { isNil } from '../typed/isNil';\nimport { IS_OBJECT_ERROR_MSG, isObject } from '../typed/isObject';\n\ntype PathValue<T, P extends string> = P extends `${infer Key}.${infer Rest}`\n ? Key extends keyof T\n ? PathValue<T[Key], Rest>\n : undefined\n : P extends keyof T\n ? T[P]\n : undefined;\n\n// #region PathOptions\ntype PathOptions = {\n throwOnMissing?: boolean;\n};\n// #endregion PathOptions\n\n/**\n * Retrieves the value at a given path of the object. If the value is undefined, the default value is returned.\n *\n * @example\n * ```ts\n * const obj = { a: { b: { c: 3 } }, d: [1, 2, 3] };\n *\n * getValue(obj, 'a.b.c'); // 3\n * getValue(obj, 'a.b.d', 'default'); // 'default'\n * getValue(obj, 'd[1]'); // 2\n * getValue(obj, 'e.f.g', 'default', { throwOnMissing: true }); // throws Error\n * ```\n *\n * @template T - The type of the object to query.\n * @template P - The type of the path string.\n * @param item - The object to query.\n * @param path - The dot-separated path of the property to get.\n * @param [defaultValue] - The value returned for undefined resolved values.\n * @param [options] - Additional options for value retrieval.\n *\n * @returns The resolved value.\n *\n * @throws If throwOnMissing is true and the path doesn't exist.\n */\nexport function get<T extends Obj, P extends string>(\n item: T,\n path: P,\n defaultValue?: unknown,\n options: PathOptions = {},\n): PathValue<T, P> | undefined {\n assert(isObject(item), IS_OBJECT_ERROR_MSG, { args: { item }, type: TypeError });\n\n const { throwOnMissing = false } = options;\n\n const fragments = path.split(/[.[\\]]+/).filter(Boolean);\n let current: any = item;\n\n for (const fragment of fragments) {\n if (isNil(current) || typeof current !== 'object') {\n if (throwOnMissing) throw new Error(`Cannot read property '${fragment}' of ${current}`);\n\n return defaultValue as PathValue<T, P>;\n }\n\n current = current[fragment];\n\n if (current === undefined) {\n if (throwOnMissing) throw new Error(`Property '${fragment}' does not exist`);\n\n return defaultValue as PathValue<T, P>;\n }\n }\n\n return current as PathValue<T, P>;\n}\n"],"mappings":"6GA4CA,SAAgB,EACd,EACA,EACA,EACA,EAAuB,EAAE,CACI,CAC7B,EAAA,OAAO,EAAA,SAAS,EAAK,CAAE,EAAA,oBAAqB,CAAE,KAAM,CAAE,OAAM,CAAE,KAAM,UAAW,CAAC,CAEhF,GAAM,CAAE,iBAAiB,IAAU,EAE7B,EAAY,EAAK,MAAM,UAAU,CAAC,OAAO,QAAQ,CACnD,EAAe,EAEnB,IAAK,IAAM,KAAY,EAAW,CAChC,GAAI,EAAA,MAAM,EAAQ,EAAI,OAAO,GAAY,SAAU,CACjD,GAAI,EAAgB,MAAU,MAAM,yBAAyB,EAAS,OAAO,IAAU,CAEvF,OAAO,EAKT,GAFA,EAAU,EAAQ,GAEd,IAAY,IAAA,GAAW,CACzB,GAAI,EAAgB,MAAU,MAAM,aAAa,EAAS,kBAAkB,CAE5E,OAAO,GAIX,OAAO"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import type { Obj } from '../types';
|
|
2
|
+
type PathValue<T, P extends string> = P extends `${infer Key}.${infer Rest}` ? Key extends keyof T ? PathValue<T[Key], Rest> : undefined : P extends keyof T ? T[P] : undefined;
|
|
3
|
+
type PathOptions = {
|
|
4
|
+
throwOnMissing?: boolean;
|
|
5
|
+
};
|
|
6
|
+
/**
|
|
7
|
+
* Retrieves the value at a given path of the object. If the value is undefined, the default value is returned.
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* ```ts
|
|
11
|
+
* const obj = { a: { b: { c: 3 } }, d: [1, 2, 3] };
|
|
12
|
+
*
|
|
13
|
+
* getValue(obj, 'a.b.c'); // 3
|
|
14
|
+
* getValue(obj, 'a.b.d', 'default'); // 'default'
|
|
15
|
+
* getValue(obj, 'd[1]'); // 2
|
|
16
|
+
* getValue(obj, 'e.f.g', 'default', { throwOnMissing: true }); // throws Error
|
|
17
|
+
* ```
|
|
18
|
+
*
|
|
19
|
+
* @template T - The type of the object to query.
|
|
20
|
+
* @template P - The type of the path string.
|
|
21
|
+
* @param item - The object to query.
|
|
22
|
+
* @param path - The dot-separated path of the property to get.
|
|
23
|
+
* @param [defaultValue] - The value returned for undefined resolved values.
|
|
24
|
+
* @param [options] - Additional options for value retrieval.
|
|
25
|
+
*
|
|
26
|
+
* @returns The resolved value.
|
|
27
|
+
*
|
|
28
|
+
* @throws If throwOnMissing is true and the path doesn't exist.
|
|
29
|
+
*/
|
|
30
|
+
export declare function get<T extends Obj, P extends string>(item: T, path: P, defaultValue?: unknown, options?: PathOptions): PathValue<T, P> | undefined;
|
|
31
|
+
export {};
|
|
32
|
+
//# sourceMappingURL=path.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"path.d.ts","sourceRoot":"","sources":["../../src/object/path.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAMpC,KAAK,SAAS,CAAC,CAAC,EAAE,CAAC,SAAS,MAAM,IAAI,CAAC,SAAS,GAAG,MAAM,GAAG,IAAI,MAAM,IAAI,EAAE,GACxE,GAAG,SAAS,MAAM,CAAC,GACjB,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,GACvB,SAAS,GACX,CAAC,SAAS,MAAM,CAAC,GACf,CAAC,CAAC,CAAC,CAAC,GACJ,SAAS,CAAC;AAGhB,KAAK,WAAW,GAAG;IACjB,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B,CAAC;AAGF;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,GAAG,CAAC,CAAC,SAAS,GAAG,EAAE,CAAC,SAAS,MAAM,EACjD,IAAI,EAAE,CAAC,EACP,IAAI,EAAE,CAAC,EACP,YAAY,CAAC,EAAE,OAAO,EACtB,OAAO,GAAE,WAAgB,GACxB,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,SAAS,CAyB7B"}
|
package/dist/object/path.js
CHANGED
|
@@ -1,24 +1,26 @@
|
|
|
1
|
-
import { assert as
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
|
|
5
|
-
function
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
1
|
+
import { assert as e } from "../function/assert.js";
|
|
2
|
+
import { isNil as t } from "../typed/isNil.js";
|
|
3
|
+
import { IS_OBJECT_ERROR_MSG as n, isObject as r } from "../typed/isObject.js";
|
|
4
|
+
//#region src/object/path.ts
|
|
5
|
+
function i(i, a, o, s = {}) {
|
|
6
|
+
e(r(i), n, {
|
|
7
|
+
args: { item: i },
|
|
8
|
+
type: TypeError
|
|
9
|
+
});
|
|
10
|
+
let { throwOnMissing: c = !1 } = s, l = a.split(/[.[\]]+/).filter(Boolean), u = i;
|
|
11
|
+
for (let e of l) {
|
|
12
|
+
if (t(u) || typeof u != "object") {
|
|
13
|
+
if (c) throw Error(`Cannot read property '${e}' of ${u}`);
|
|
14
|
+
return o;
|
|
15
|
+
}
|
|
16
|
+
if (u = u[e], u === void 0) {
|
|
17
|
+
if (c) throw Error(`Property '${e}' does not exist`);
|
|
18
|
+
return o;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
return u;
|
|
16
22
|
}
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
export {
|
|
22
|
-
w as path
|
|
23
|
-
};
|
|
24
|
-
//# sourceMappingURL=path.js.map
|
|
23
|
+
//#endregion
|
|
24
|
+
export { i as get };
|
|
25
|
+
|
|
26
|
+
//# sourceMappingURL=path.js.map
|
package/dist/object/path.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"path.js","sources":["../../src/object/path.ts"],"sourcesContent":["import {
|
|
1
|
+
{"version":3,"file":"path.js","names":[],"sources":["../../src/object/path.ts"],"sourcesContent":["import type { Obj } from '../types';\n\nimport { assert } from '../function/assert';\nimport { isNil } from '../typed/isNil';\nimport { IS_OBJECT_ERROR_MSG, isObject } from '../typed/isObject';\n\ntype PathValue<T, P extends string> = P extends `${infer Key}.${infer Rest}`\n ? Key extends keyof T\n ? PathValue<T[Key], Rest>\n : undefined\n : P extends keyof T\n ? T[P]\n : undefined;\n\n// #region PathOptions\ntype PathOptions = {\n throwOnMissing?: boolean;\n};\n// #endregion PathOptions\n\n/**\n * Retrieves the value at a given path of the object. If the value is undefined, the default value is returned.\n *\n * @example\n * ```ts\n * const obj = { a: { b: { c: 3 } }, d: [1, 2, 3] };\n *\n * getValue(obj, 'a.b.c'); // 3\n * getValue(obj, 'a.b.d', 'default'); // 'default'\n * getValue(obj, 'd[1]'); // 2\n * getValue(obj, 'e.f.g', 'default', { throwOnMissing: true }); // throws Error\n * ```\n *\n * @template T - The type of the object to query.\n * @template P - The type of the path string.\n * @param item - The object to query.\n * @param path - The dot-separated path of the property to get.\n * @param [defaultValue] - The value returned for undefined resolved values.\n * @param [options] - Additional options for value retrieval.\n *\n * @returns The resolved value.\n *\n * @throws If throwOnMissing is true and the path doesn't exist.\n */\nexport function get<T extends Obj, P extends string>(\n item: T,\n path: P,\n defaultValue?: unknown,\n options: PathOptions = {},\n): PathValue<T, P> | undefined {\n assert(isObject(item), IS_OBJECT_ERROR_MSG, { args: { item }, type: TypeError });\n\n const { throwOnMissing = false } = options;\n\n const fragments = path.split(/[.[\\]]+/).filter(Boolean);\n let current: any = item;\n\n for (const fragment of fragments) {\n if (isNil(current) || typeof current !== 'object') {\n if (throwOnMissing) throw new Error(`Cannot read property '${fragment}' of ${current}`);\n\n return defaultValue as PathValue<T, P>;\n }\n\n current = current[fragment];\n\n if (current === undefined) {\n if (throwOnMissing) throw new Error(`Property '${fragment}' does not exist`);\n\n return defaultValue as PathValue<T, P>;\n }\n }\n\n return current as PathValue<T, P>;\n}\n"],"mappings":";;;;AA4CA,SAAgB,EACd,GACA,GACA,GACA,IAAuB,EAAE,EACI;AAC7B,GAAO,EAAS,EAAK,EAAE,GAAqB;EAAE,MAAM,EAAE,SAAM;EAAE,MAAM;EAAW,CAAC;CAEhF,IAAM,EAAE,oBAAiB,OAAU,GAE7B,IAAY,EAAK,MAAM,UAAU,CAAC,OAAO,QAAQ,EACnD,IAAe;AAEnB,MAAK,IAAM,KAAY,GAAW;AAChC,MAAI,EAAM,EAAQ,IAAI,OAAO,KAAY,UAAU;AACjD,OAAI,EAAgB,OAAU,MAAM,yBAAyB,EAAS,OAAO,IAAU;AAEvF,UAAO;;AAKT,MAFA,IAAU,EAAQ,IAEd,MAAY,KAAA,GAAW;AACzB,OAAI,EAAgB,OAAU,MAAM,aAAa,EAAS,kBAAkB;AAE5E,UAAO;;;AAIX,QAAO"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
const e=require(`../typed/isObject.cjs`);function t(n,r){let{deep:i=!1,get:a,set:o,watch:s}=r,c=s?new Set(s):null;return new Proxy(n,{get(n,o,s){if(c&&!c.has(o))return Reflect.get(n,o,s);let l=Reflect.get(n,o,s);return a&&(l=a(o,l,n)),i&&e.isObject(l)?t(l,r):l},set(n,a,s,l){if(c&&!c.has(a))return Reflect.set(n,a,s,l);let u=n[a],d=o?o(a,s,u,n):s;return i&&e.isObject(d)?Reflect.set(n,a,t(d,r),l):Reflect.set(n,a,d,l)}})}exports.proxy=t;
|
|
2
|
+
//# sourceMappingURL=proxy.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"proxy.cjs","names":[],"sources":["../../src/object/proxy.ts"],"sourcesContent":["import type { Obj } from '../types';\n\nimport { isObject } from '../typed/isObject';\n\n// #region ProxyOptions\ntype ProxyOptions<T> = {\n deep?: boolean;\n get?: <K extends PropertyKey>(prop: K, val: unknown, target: T) => unknown;\n set?: <K extends PropertyKey>(prop: K, curr: unknown, prev: unknown, target: T) => unknown;\n watch?: (keyof T)[];\n};\n// #endregion ProxyOptions\n\n/**\n * Creates a new Proxy for the given object that invokes functions when properties are accessed or modified.\n *\n * @example\n * ```ts\n * const obj = { a: 1, b: 2 };\n * const log = (prop, curr, prev, target) => console.log(`Property '${prop}' changed from ${prev} to ${curr}`);\n * const proxyObj = proxy(obj, { set: log });\n * proxyObj.a = 3; // logs 'Property 'a' changed from 1 to 3'\n * ```\n *\n * @param item - The object to observe.\n * @param options - Configuration options for the proxy.\n * @param [options.set] - A function to call when a property is set.\n * @param [options.get] - A function to call when a property is accessed.\n * @param [options.deep] - If true, the proxy will also apply to nested objects.\n * @param [options.watch] - An array of property names to watch.\n *\n * @returns A new Proxy for the given object.\n */\nexport function proxy<T extends Obj>(item: T, options: ProxyOptions<T>): T {\n const { deep = false, get, set, watch } = options;\n const watchSet = watch ? new Set<PropertyKey>(watch as PropertyKey[]) : null;\n\n const handler: ProxyHandler<T> = {\n get(target, prop, receiver) {\n if (watchSet && !watchSet.has(prop)) {\n return Reflect.get(target, prop, receiver);\n }\n\n let value = Reflect.get(target, prop, receiver);\n\n if (get) {\n value = get(prop, value, target) as any;\n }\n\n if (deep && isObject(value)) {\n return proxy(value as unknown as T, options);\n }\n\n return value;\n },\n set(target, prop, val, receiver) {\n if (watchSet && !watchSet.has(prop)) {\n return Reflect.set(target, prop, val, receiver);\n }\n\n const prev = target[prop as keyof T];\n const value = set ? set(prop, val, prev, target) : val;\n\n if (deep && isObject(value)) {\n return Reflect.set(target, prop, proxy(value as unknown as T, options), receiver);\n }\n\n return Reflect.set(target, prop, value, receiver);\n },\n };\n\n return new Proxy(item, handler);\n}\n"],"mappings":"yCAiCA,SAAgB,EAAqB,EAAS,EAA6B,CACzE,GAAM,CAAE,OAAO,GAAO,MAAK,MAAK,SAAU,EACpC,EAAW,EAAQ,IAAI,IAAiB,EAAuB,CAAG,KAoCxE,OAAO,IAAI,MAAM,EAlCgB,CAC/B,IAAI,EAAQ,EAAM,EAAU,CAC1B,GAAI,GAAY,CAAC,EAAS,IAAI,EAAK,CACjC,OAAO,QAAQ,IAAI,EAAQ,EAAM,EAAS,CAG5C,IAAI,EAAQ,QAAQ,IAAI,EAAQ,EAAM,EAAS,CAU/C,OARI,IACF,EAAQ,EAAI,EAAM,EAAO,EAAO,EAG9B,GAAQ,EAAA,SAAS,EAAM,CAClB,EAAM,EAAuB,EAAQ,CAGvC,GAET,IAAI,EAAQ,EAAM,EAAK,EAAU,CAC/B,GAAI,GAAY,CAAC,EAAS,IAAI,EAAK,CACjC,OAAO,QAAQ,IAAI,EAAQ,EAAM,EAAK,EAAS,CAGjD,IAAM,EAAO,EAAO,GACd,EAAQ,EAAM,EAAI,EAAM,EAAK,EAAM,EAAO,CAAG,EAMnD,OAJI,GAAQ,EAAA,SAAS,EAAM,CAClB,QAAQ,IAAI,EAAQ,EAAM,EAAM,EAAuB,EAAQ,CAAE,EAAS,CAG5E,QAAQ,IAAI,EAAQ,EAAM,EAAO,EAAS,EAEpD,CAE8B"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { Obj } from '../types';
|
|
2
|
+
type ProxyOptions<T> = {
|
|
3
|
+
deep?: boolean;
|
|
4
|
+
get?: <K extends PropertyKey>(prop: K, val: unknown, target: T) => unknown;
|
|
5
|
+
set?: <K extends PropertyKey>(prop: K, curr: unknown, prev: unknown, target: T) => unknown;
|
|
6
|
+
watch?: (keyof T)[];
|
|
7
|
+
};
|
|
8
|
+
/**
|
|
9
|
+
* Creates a new Proxy for the given object that invokes functions when properties are accessed or modified.
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* ```ts
|
|
13
|
+
* const obj = { a: 1, b: 2 };
|
|
14
|
+
* const log = (prop, curr, prev, target) => console.log(`Property '${prop}' changed from ${prev} to ${curr}`);
|
|
15
|
+
* const proxyObj = proxy(obj, { set: log });
|
|
16
|
+
* proxyObj.a = 3; // logs 'Property 'a' changed from 1 to 3'
|
|
17
|
+
* ```
|
|
18
|
+
*
|
|
19
|
+
* @param item - The object to observe.
|
|
20
|
+
* @param options - Configuration options for the proxy.
|
|
21
|
+
* @param [options.set] - A function to call when a property is set.
|
|
22
|
+
* @param [options.get] - A function to call when a property is accessed.
|
|
23
|
+
* @param [options.deep] - If true, the proxy will also apply to nested objects.
|
|
24
|
+
* @param [options.watch] - An array of property names to watch.
|
|
25
|
+
*
|
|
26
|
+
* @returns A new Proxy for the given object.
|
|
27
|
+
*/
|
|
28
|
+
export declare function proxy<T extends Obj>(item: T, options: ProxyOptions<T>): T;
|
|
29
|
+
export {};
|
|
30
|
+
//# sourceMappingURL=proxy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"proxy.d.ts","sourceRoot":"","sources":["../../src/object/proxy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAKpC,KAAK,YAAY,CAAC,CAAC,IAAI;IACrB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,GAAG,CAAC,EAAE,CAAC,CAAC,SAAS,WAAW,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,KAAK,OAAO,CAAC;IAC3E,GAAG,CAAC,EAAE,CAAC,CAAC,SAAS,WAAW,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,KAAK,OAAO,CAAC;IAC3F,KAAK,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC;CACrB,CAAC;AAGF;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,KAAK,CAAC,CAAC,SAAS,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,CAuCzE"}
|