@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
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { isObject as e } from "../typed/isObject.js";
|
|
2
|
+
//#region src/object/proxy.ts
|
|
3
|
+
function t(n, r) {
|
|
4
|
+
let { deep: i = !1, get: a, set: o, watch: s } = r, c = s ? new Set(s) : null;
|
|
5
|
+
return new Proxy(n, {
|
|
6
|
+
get(n, o, s) {
|
|
7
|
+
if (c && !c.has(o)) return Reflect.get(n, o, s);
|
|
8
|
+
let l = Reflect.get(n, o, s);
|
|
9
|
+
return a && (l = a(o, l, n)), i && e(l) ? t(l, r) : l;
|
|
10
|
+
},
|
|
11
|
+
set(n, a, s, l) {
|
|
12
|
+
if (c && !c.has(a)) return Reflect.set(n, a, s, l);
|
|
13
|
+
let u = n[a], d = o ? o(a, s, u, n) : s;
|
|
14
|
+
return i && e(d) ? Reflect.set(n, a, t(d, r), l) : Reflect.set(n, a, d, l);
|
|
15
|
+
}
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
//#endregion
|
|
19
|
+
export { t as proxy };
|
|
20
|
+
|
|
21
|
+
//# sourceMappingURL=proxy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"proxy.js","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":";;AAiCA,SAAgB,EAAqB,GAAS,GAA6B;CACzE,IAAM,EAAE,UAAO,IAAO,QAAK,QAAK,aAAU,GACpC,IAAW,IAAQ,IAAI,IAAiB,EAAuB,GAAG;AAoCxE,QAAO,IAAI,MAAM,GAlCgB;EAC/B,IAAI,GAAQ,GAAM,GAAU;AAC1B,OAAI,KAAY,CAAC,EAAS,IAAI,EAAK,CACjC,QAAO,QAAQ,IAAI,GAAQ,GAAM,EAAS;GAG5C,IAAI,IAAQ,QAAQ,IAAI,GAAQ,GAAM,EAAS;AAU/C,UARI,MACF,IAAQ,EAAI,GAAM,GAAO,EAAO,GAG9B,KAAQ,EAAS,EAAM,GAClB,EAAM,GAAuB,EAAQ,GAGvC;;EAET,IAAI,GAAQ,GAAM,GAAK,GAAU;AAC/B,OAAI,KAAY,CAAC,EAAS,IAAI,EAAK,CACjC,QAAO,QAAQ,IAAI,GAAQ,GAAM,GAAK,EAAS;GAGjD,IAAM,IAAO,EAAO,IACd,IAAQ,IAAM,EAAI,GAAM,GAAK,GAAM,EAAO,GAAG;AAMnD,UAJI,KAAQ,EAAS,EAAM,GAClB,QAAQ,IAAI,GAAQ,GAAM,EAAM,GAAuB,EAAQ,EAAE,EAAS,GAG5E,QAAQ,IAAI,GAAQ,GAAM,GAAO,EAAS;;EAEpD,CAE8B"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
const e=require(`../typed/isArray.cjs`),t=require(`../typed/isString.cjs`),n=require(`../typed/isNil.cjs`),r=require(`../typed/isObject.cjs`),i=require(`../typed/isEmpty.cjs`);function a(o){if(!n.isNil(o)){if(t.isString(o)){let e=o.trim();return e===``?void 0:e}if(e.isArray(o)){let e=o.map(e=>a(e)).filter(e=>!i.isEmpty(e));return e.length===0?void 0:e}if(r.isObject(o)){let e={};for(let[t,n]of Object.entries(o)){let r=a(n);i.isEmpty(r)||(e[t]=r)}return Object.keys(e).length===0?void 0:e}return o}}exports.prune=a;
|
|
2
|
+
//# sourceMappingURL=prune.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prune.cjs","names":[],"sources":["../../src/object/prune.ts"],"sourcesContent":["import { isArray } from '../typed/isArray';\nimport { isEmpty } from '../typed/isEmpty';\nimport { isNil } from '../typed/isNil';\nimport { isObject } from '../typed/isObject';\nimport { isString } from '../typed/isString';\n\n/**\n * Removes all nullable and empty values from strings, arrays, or objects.\n *\n * - For strings: Removes leading/trailing whitespace and returns undefined if empty\n * - For arrays: Recursively removes null, undefined, empty strings, and empty objects/arrays\n * - For objects: Recursively removes properties with null, undefined, empty strings, and empty objects/arrays\n *\n * @example\n * ```ts\n * prune(' hello '); // 'hello'\n * prune(' '); // undefined\n * prune([1, null, '', 2, undefined, 3]); // [1, 2, 3]\n * prune({ a: 1, b: null, c: '', d: 2 }); // { a: 1, d: 2 }\n * prune({ a: { b: null, c: '' }, d: 1 }); // { d: 1 }\n * ```\n *\n * @param value - The value to prune (can be string, array, object, or any other type)\n * @returns The pruned value, or undefined if the result would be empty\n */\nexport function prune<T>(value: T): T | undefined {\n if (isNil(value)) return undefined;\n\n if (isString(value)) {\n const trimmed = value.trim();\n\n return (trimmed === '' ? undefined : trimmed) as T | undefined;\n }\n\n if (isArray(value)) {\n const cleaned = value.map((item) => prune(item)).filter((item) => !isEmpty(item));\n\n return (cleaned.length === 0 ? undefined : cleaned) as T | undefined;\n }\n\n if (isObject(value)) {\n const cleaned: Record<string, unknown> = {};\n\n for (const [key, val] of Object.entries(value)) {\n const cleanedValue = prune(val);\n\n if (!isEmpty(cleanedValue)) {\n cleaned[key] = cleanedValue;\n }\n }\n\n return (Object.keys(cleaned).length === 0 ? undefined : cleaned) as T | undefined;\n }\n\n return value;\n}\n"],"mappings":"gLAyBA,SAAgB,EAAS,EAAyB,CAC5C,MAAA,MAAM,EAAM,CAEhB,IAAI,EAAA,SAAS,EAAM,CAAE,CACnB,IAAM,EAAU,EAAM,MAAM,CAE5B,OAAQ,IAAY,GAAK,IAAA,GAAY,EAGvC,GAAI,EAAA,QAAQ,EAAM,CAAE,CAClB,IAAM,EAAU,EAAM,IAAK,GAAS,EAAM,EAAK,CAAC,CAAC,OAAQ,GAAS,CAAC,EAAA,QAAQ,EAAK,CAAC,CAEjF,OAAQ,EAAQ,SAAW,EAAI,IAAA,GAAY,EAG7C,GAAI,EAAA,SAAS,EAAM,CAAE,CACnB,IAAM,EAAmC,EAAE,CAE3C,IAAK,GAAM,CAAC,EAAK,KAAQ,OAAO,QAAQ,EAAM,CAAE,CAC9C,IAAM,EAAe,EAAM,EAAI,CAE1B,EAAA,QAAQ,EAAa,GACxB,EAAQ,GAAO,GAInB,OAAQ,OAAO,KAAK,EAAQ,CAAC,SAAW,EAAI,IAAA,GAAY,EAG1D,OAAO"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Removes all nullable and empty values from strings, arrays, or objects.
|
|
3
|
+
*
|
|
4
|
+
* - For strings: Removes leading/trailing whitespace and returns undefined if empty
|
|
5
|
+
* - For arrays: Recursively removes null, undefined, empty strings, and empty objects/arrays
|
|
6
|
+
* - For objects: Recursively removes properties with null, undefined, empty strings, and empty objects/arrays
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* ```ts
|
|
10
|
+
* prune(' hello '); // 'hello'
|
|
11
|
+
* prune(' '); // undefined
|
|
12
|
+
* prune([1, null, '', 2, undefined, 3]); // [1, 2, 3]
|
|
13
|
+
* prune({ a: 1, b: null, c: '', d: 2 }); // { a: 1, d: 2 }
|
|
14
|
+
* prune({ a: { b: null, c: '' }, d: 1 }); // { d: 1 }
|
|
15
|
+
* ```
|
|
16
|
+
*
|
|
17
|
+
* @param value - The value to prune (can be string, array, object, or any other type)
|
|
18
|
+
* @returns The pruned value, or undefined if the result would be empty
|
|
19
|
+
*/
|
|
20
|
+
export declare function prune<T>(value: T): T | undefined;
|
|
21
|
+
//# sourceMappingURL=prune.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prune.d.ts","sourceRoot":"","sources":["../../src/object/prune.ts"],"names":[],"mappings":"AAMA;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,KAAK,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,GAAG,SAAS,CA8BhD"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { isArray as e } from "../typed/isArray.js";
|
|
2
|
+
import { isString as t } from "../typed/isString.js";
|
|
3
|
+
import { isNil as n } from "../typed/isNil.js";
|
|
4
|
+
import { isObject as r } from "../typed/isObject.js";
|
|
5
|
+
import { isEmpty as i } from "../typed/isEmpty.js";
|
|
6
|
+
//#region src/object/prune.ts
|
|
7
|
+
function a(o) {
|
|
8
|
+
if (!n(o)) {
|
|
9
|
+
if (t(o)) {
|
|
10
|
+
let e = o.trim();
|
|
11
|
+
return e === "" ? void 0 : e;
|
|
12
|
+
}
|
|
13
|
+
if (e(o)) {
|
|
14
|
+
let e = o.map((e) => a(e)).filter((e) => !i(e));
|
|
15
|
+
return e.length === 0 ? void 0 : e;
|
|
16
|
+
}
|
|
17
|
+
if (r(o)) {
|
|
18
|
+
let e = {};
|
|
19
|
+
for (let [t, n] of Object.entries(o)) {
|
|
20
|
+
let r = a(n);
|
|
21
|
+
i(r) || (e[t] = r);
|
|
22
|
+
}
|
|
23
|
+
return Object.keys(e).length === 0 ? void 0 : e;
|
|
24
|
+
}
|
|
25
|
+
return o;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
//#endregion
|
|
29
|
+
export { a as prune };
|
|
30
|
+
|
|
31
|
+
//# sourceMappingURL=prune.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prune.js","names":[],"sources":["../../src/object/prune.ts"],"sourcesContent":["import { isArray } from '../typed/isArray';\nimport { isEmpty } from '../typed/isEmpty';\nimport { isNil } from '../typed/isNil';\nimport { isObject } from '../typed/isObject';\nimport { isString } from '../typed/isString';\n\n/**\n * Removes all nullable and empty values from strings, arrays, or objects.\n *\n * - For strings: Removes leading/trailing whitespace and returns undefined if empty\n * - For arrays: Recursively removes null, undefined, empty strings, and empty objects/arrays\n * - For objects: Recursively removes properties with null, undefined, empty strings, and empty objects/arrays\n *\n * @example\n * ```ts\n * prune(' hello '); // 'hello'\n * prune(' '); // undefined\n * prune([1, null, '', 2, undefined, 3]); // [1, 2, 3]\n * prune({ a: 1, b: null, c: '', d: 2 }); // { a: 1, d: 2 }\n * prune({ a: { b: null, c: '' }, d: 1 }); // { d: 1 }\n * ```\n *\n * @param value - The value to prune (can be string, array, object, or any other type)\n * @returns The pruned value, or undefined if the result would be empty\n */\nexport function prune<T>(value: T): T | undefined {\n if (isNil(value)) return undefined;\n\n if (isString(value)) {\n const trimmed = value.trim();\n\n return (trimmed === '' ? undefined : trimmed) as T | undefined;\n }\n\n if (isArray(value)) {\n const cleaned = value.map((item) => prune(item)).filter((item) => !isEmpty(item));\n\n return (cleaned.length === 0 ? undefined : cleaned) as T | undefined;\n }\n\n if (isObject(value)) {\n const cleaned: Record<string, unknown> = {};\n\n for (const [key, val] of Object.entries(value)) {\n const cleanedValue = prune(val);\n\n if (!isEmpty(cleanedValue)) {\n cleaned[key] = cleanedValue;\n }\n }\n\n return (Object.keys(cleaned).length === 0 ? undefined : cleaned) as T | undefined;\n }\n\n return value;\n}\n"],"mappings":";;;;;;AAyBA,SAAgB,EAAS,GAAyB;AAC5C,QAAM,EAAM,EAEhB;MAAI,EAAS,EAAM,EAAE;GACnB,IAAM,IAAU,EAAM,MAAM;AAE5B,UAAQ,MAAY,KAAK,KAAA,IAAY;;AAGvC,MAAI,EAAQ,EAAM,EAAE;GAClB,IAAM,IAAU,EAAM,KAAK,MAAS,EAAM,EAAK,CAAC,CAAC,QAAQ,MAAS,CAAC,EAAQ,EAAK,CAAC;AAEjF,UAAQ,EAAQ,WAAW,IAAI,KAAA,IAAY;;AAG7C,MAAI,EAAS,EAAM,EAAE;GACnB,IAAM,IAAmC,EAAE;AAE3C,QAAK,IAAM,CAAC,GAAK,MAAQ,OAAO,QAAQ,EAAM,EAAE;IAC9C,IAAM,IAAe,EAAM,EAAI;AAE/B,IAAK,EAAQ,EAAa,KACxB,EAAQ,KAAO;;AAInB,UAAQ,OAAO,KAAK,EAAQ,CAAC,WAAW,IAAI,KAAA,IAAY;;AAG1D,SAAO"}
|
package/dist/object/seek.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
//# sourceMappingURL=seek.cjs.map
|
|
1
|
+
const e=require(`../function/assert.cjs`),t=require(`../typed/isArray.cjs`),n=require(`../typed/isString.cjs`),r=require(`../string/similarity.cjs`),i=require(`../typed/isNil.cjs`),a=require(`../typed/isNumber.cjs`),o=require(`../typed/isObject.cjs`),s=require(`../typed/isWithin.cjs`);function c(e,s,l){return i.isNil(e)?!1:n.isString(e)||a.isNumber(e)?r.similarity(String(e),s)>=l:t.isArray(e)?e.some(e=>c(e,s,l)):o.isObject(e)?Object.values(e).some(e=>i.isNil(e)?!1:c(e,s,l)):!1}function l(t,n,r=1){return e.assert(s.isWithin(r,0,1),s.IS_WITHIN_ERROR_MSG,{args:{max:1,min:0,tone:r},type:TypeError}),c(t,n,r)}exports.seek=l;
|
|
2
|
+
//# sourceMappingURL=seek.cjs.map
|
package/dist/object/seek.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"seek.cjs","sources":["../../src/object/seek.ts"],"sourcesContent":["import { assert } from '../function/assert';\nimport { similarity } from '../string/similarity';\nimport {
|
|
1
|
+
{"version":3,"file":"seek.cjs","names":[],"sources":["../../src/object/seek.ts"],"sourcesContent":["import { assert } from '../function/assert';\nimport { similarity } from '../string/similarity';\nimport { isArray } from '../typed/isArray';\nimport { isNil } from '../typed/isNil';\nimport { isNumber } from '../typed/isNumber';\nimport { isObject } from '../typed/isObject';\nimport { isString } from '../typed/isString';\nimport { IS_WITHIN_ERROR_MSG, isWithin } from '../typed/isWithin';\n\n/**\n * Recursively checks if an object contains a value similar to the search string.\n *\n * @example\n * ```ts\n * const obj = { a: 'hello', b: { c: 'world' }, d: [1, 2, 3] };\n *\n * seek(obj, 'hello'); // true\n * seek(obj, 'world'); // true\n * seek(obj, 'foo'); // false\n * seek(obj, 'hello', 0.5); // true\n * seek(obj, 'hello', 0.8); // true\n * seek(obj, 'hello', 1); // true\n * seek(obj, 'hello', 1.5); // false\n * seek(obj, 'hello', -1); // false\n * seek(obj, 'hello', 0); // false\n * ```\n *\n * @param item - The object to search within.\n * @param query - The search string.\n * @param [tone=1] - The similarity threshold.\n *\n * @returns Whether the object contains a matching value.\n */\nfunction _seek<T>(item: T, query: string, tone: number): boolean {\n if (isNil(item)) return false;\n\n if (isString(item) || isNumber(item)) {\n return similarity(String(item), query) >= tone;\n }\n\n if (isArray(item)) {\n return (item as unknown[]).some((value) => _seek(value, query, tone));\n }\n\n if (isObject(item)) {\n return Object.values(item as Record<string, unknown>).some((value) =>\n isNil(value) ? false : _seek(value, query, tone),\n );\n }\n\n return false;\n}\n\nexport function seek<T>(item: T, query: string, tone = 1): boolean {\n assert(isWithin(tone, 0, 1), IS_WITHIN_ERROR_MSG, { args: { max: 1, min: 0, tone }, type: TypeError });\n\n return _seek(item, query, tone);\n}\n"],"mappings":"8RAiCA,SAAS,EAAS,EAAS,EAAe,EAAuB,CAiB/D,OAhBI,EAAA,MAAM,EAAK,CAAS,GAEpB,EAAA,SAAS,EAAK,EAAI,EAAA,SAAS,EAAK,CAC3B,EAAA,WAAW,OAAO,EAAK,CAAE,EAAM,EAAI,EAGxC,EAAA,QAAQ,EAAK,CACP,EAAmB,KAAM,GAAU,EAAM,EAAO,EAAO,EAAK,CAAC,CAGnE,EAAA,SAAS,EAAK,CACT,OAAO,OAAO,EAAgC,CAAC,KAAM,GAC1D,EAAA,MAAM,EAAM,CAAG,GAAQ,EAAM,EAAO,EAAO,EAAK,CACjD,CAGI,GAGT,SAAgB,EAAQ,EAAS,EAAe,EAAO,EAAY,CAGjE,OAFA,EAAA,OAAO,EAAA,SAAS,EAAM,EAAG,EAAE,CAAE,EAAA,oBAAqB,CAAE,KAAM,CAAE,IAAK,EAAG,IAAK,EAAG,OAAM,CAAE,KAAM,UAAW,CAAC,CAE/F,EAAM,EAAM,EAAO,EAAK"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"seek.d.ts","sourceRoot":"","sources":["../../src/object/seek.ts"],"names":[],"mappings":"AAqDA,wBAAgB,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,SAAI,GAAG,OAAO,CAIjE"}
|
package/dist/object/seek.js
CHANGED
|
@@ -1,13 +1,26 @@
|
|
|
1
|
-
import { assert as
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
1
|
+
import { assert as e } from "../function/assert.js";
|
|
2
|
+
import { isArray as t } from "../typed/isArray.js";
|
|
3
|
+
import { isString as n } from "../typed/isString.js";
|
|
4
|
+
import { similarity as r } from "../string/similarity.js";
|
|
5
|
+
import { isNil as i } from "../typed/isNil.js";
|
|
6
|
+
import { isNumber as a } from "../typed/isNumber.js";
|
|
7
|
+
import { isObject as o } from "../typed/isObject.js";
|
|
8
|
+
import { IS_WITHIN_ERROR_MSG as s, isWithin as c } from "../typed/isWithin.js";
|
|
9
|
+
//#region src/object/seek.ts
|
|
10
|
+
function l(e, s, c) {
|
|
11
|
+
return i(e) ? !1 : n(e) || a(e) ? r(String(e), s) >= c : t(e) ? e.some((e) => l(e, s, c)) : o(e) ? Object.values(e).some((e) => i(e) ? !1 : l(e, s, c)) : !1;
|
|
9
12
|
}
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
13
|
+
function u(t, n, r = 1) {
|
|
14
|
+
return e(c(r, 0, 1), s, {
|
|
15
|
+
args: {
|
|
16
|
+
max: 1,
|
|
17
|
+
min: 0,
|
|
18
|
+
tone: r
|
|
19
|
+
},
|
|
20
|
+
type: TypeError
|
|
21
|
+
}), l(t, n, r);
|
|
22
|
+
}
|
|
23
|
+
//#endregion
|
|
24
|
+
export { u as seek };
|
|
25
|
+
|
|
26
|
+
//# sourceMappingURL=seek.js.map
|
package/dist/object/seek.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"seek.js","sources":["../../src/object/seek.ts"],"sourcesContent":["import { assert } from '../function/assert';\nimport { similarity } from '../string/similarity';\nimport {
|
|
1
|
+
{"version":3,"file":"seek.js","names":[],"sources":["../../src/object/seek.ts"],"sourcesContent":["import { assert } from '../function/assert';\nimport { similarity } from '../string/similarity';\nimport { isArray } from '../typed/isArray';\nimport { isNil } from '../typed/isNil';\nimport { isNumber } from '../typed/isNumber';\nimport { isObject } from '../typed/isObject';\nimport { isString } from '../typed/isString';\nimport { IS_WITHIN_ERROR_MSG, isWithin } from '../typed/isWithin';\n\n/**\n * Recursively checks if an object contains a value similar to the search string.\n *\n * @example\n * ```ts\n * const obj = { a: 'hello', b: { c: 'world' }, d: [1, 2, 3] };\n *\n * seek(obj, 'hello'); // true\n * seek(obj, 'world'); // true\n * seek(obj, 'foo'); // false\n * seek(obj, 'hello', 0.5); // true\n * seek(obj, 'hello', 0.8); // true\n * seek(obj, 'hello', 1); // true\n * seek(obj, 'hello', 1.5); // false\n * seek(obj, 'hello', -1); // false\n * seek(obj, 'hello', 0); // false\n * ```\n *\n * @param item - The object to search within.\n * @param query - The search string.\n * @param [tone=1] - The similarity threshold.\n *\n * @returns Whether the object contains a matching value.\n */\nfunction _seek<T>(item: T, query: string, tone: number): boolean {\n if (isNil(item)) return false;\n\n if (isString(item) || isNumber(item)) {\n return similarity(String(item), query) >= tone;\n }\n\n if (isArray(item)) {\n return (item as unknown[]).some((value) => _seek(value, query, tone));\n }\n\n if (isObject(item)) {\n return Object.values(item as Record<string, unknown>).some((value) =>\n isNil(value) ? false : _seek(value, query, tone),\n );\n }\n\n return false;\n}\n\nexport function seek<T>(item: T, query: string, tone = 1): boolean {\n assert(isWithin(tone, 0, 1), IS_WITHIN_ERROR_MSG, { args: { max: 1, min: 0, tone }, type: TypeError });\n\n return _seek(item, query, tone);\n}\n"],"mappings":";;;;;;;;;AAiCA,SAAS,EAAS,GAAS,GAAe,GAAuB;AAiB/D,QAhBI,EAAM,EAAK,GAAS,KAEpB,EAAS,EAAK,IAAI,EAAS,EAAK,GAC3B,EAAW,OAAO,EAAK,EAAE,EAAM,IAAI,IAGxC,EAAQ,EAAK,GACP,EAAmB,MAAM,MAAU,EAAM,GAAO,GAAO,EAAK,CAAC,GAGnE,EAAS,EAAK,GACT,OAAO,OAAO,EAAgC,CAAC,MAAM,MAC1D,EAAM,EAAM,GAAG,KAAQ,EAAM,GAAO,GAAO,EAAK,CACjD,GAGI;;AAGT,SAAgB,EAAQ,GAAS,GAAe,IAAO,GAAY;AAGjE,QAFA,EAAO,EAAS,GAAM,GAAG,EAAE,EAAE,GAAqB;EAAE,MAAM;GAAE,KAAK;GAAG,KAAK;GAAG;GAAM;EAAE,MAAM;EAAW,CAAC,EAE/F,EAAM,GAAM,GAAO,EAAK"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
const e=require(`../async/scheduler.cjs`);function t(t){let n=new Map,r=new Map,i=t.scheduler??new e.Scheduler,a=t.hash,o=0;function s(e){r.get(e)?.controller.abort(),r.delete(e)}function c(e){let t=n.has(e);return s(e),n.delete(e),t}function l(e){return n.get(a(e))?.value}function u(e){let t=n.get(a(e));if(t)return{meta:t.meta,value:t.value}}function d(e,t,r){let i=a(e),o=n.get(i);s(i),n.set(i,{key:e,meta:r&&`meta`in r?r.meta:o?.meta,value:t}),r?.ttlMs!==void 0&&_(e,r.ttlMs)}function f(e,t,n){let r=u(e);if(r)return r.value;let i=t();return d(e,i,n),i}function p(e){return c(a(e))}function m(){for(let e of r.values())e.controller.abort();n.clear(),r.clear()}function h(){return n.size}function g(e,a){if(s(e),a===1/0)return;if(!Number.isFinite(a))throw TypeError(`stash.scheduleGc expects a finite number or Infinity`);if(a<=0){c(e);return}if(!n.has(e))return;let l=new AbortController,u=++o;r.set(e,{controller:l,token:u}),i.postTask(()=>{let t=r.get(e);!t||t.token!==u||(r.delete(e),c(e))},{delay:a,priority:`background`,signal:l.signal}).catch(e=>{e instanceof DOMException&&e.name===`AbortError`||t.onError?.(e)})}function _(e,t){g(a(e),t)}function v(e){s(a(e))}function y(e,t){let r=a(e);return n.has(r)?(g(r,t),!0):!1}function*b(){for(let e of n.values())yield[e.key,e.value]}return{cancelGc:v,clear:m,delete:p,entries:b,get:l,getEntry:u,getOrSet:f,scheduleGc:_,set:d,size:h,touch:y}}exports.stash=t;
|
|
2
|
+
//# sourceMappingURL=stash.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stash.cjs","names":[],"sources":["../../src/object/stash.ts"],"sourcesContent":["import { Scheduler, type SchedulerLike } from '../async';\n\ntype CacheKey = readonly unknown[];\n\ntype CacheRecord<K extends CacheKey, T, M> = {\n key: K;\n meta: M | undefined;\n value: T;\n};\n\ntype GcTask = {\n controller: AbortController;\n token: number;\n};\n\nexport type CacheOptions<K extends CacheKey = CacheKey> = {\n hash: (key: K) => string;\n onError?: (error: unknown) => void;\n scheduler?: Pick<SchedulerLike, 'postTask'>;\n};\n\nexport type CacheSetOptions<M> = {\n meta?: M;\n ttlMs?: number;\n};\n\nexport type Stash<T, K extends CacheKey = CacheKey, M = never> = {\n cancelGc: (key: K) => void;\n clear: () => void;\n delete: (key: K) => boolean;\n entries: () => IterableIterator<[K, T]>;\n get: (key: K) => T | undefined;\n getEntry: (key: K) => Readonly<{ meta: M | undefined; value: T }> | undefined;\n getOrSet: (key: K, factory: () => T, options?: CacheSetOptions<M>) => T;\n scheduleGc: (key: K, delayMs: number) => void;\n set: (key: K, value: T, options?: CacheSetOptions<M>) => void;\n size: () => number;\n touch: (key: K, ttlMs: number) => boolean;\n};\n\n/**\n * Creates a generic key-value cache with automatic garbage collection and observer support.\n *\n * @example\n * ```ts\n * const myCache = stash<string>({ hash: (key) => JSON.stringify(key) });\n * myCache.set(['user', 1], 'John Doe');\n * const value = myCache.get(['user', 1]); // 'John Doe'\n * myCache.scheduleGc(['user', 1], 5000); // Auto-delete after 5s\n * ```\n *\n * @template T - The type of values stored in the cache.\n *\n * @returns A cache instance with get, set, delete, clear, and GC methods.\n */\nexport function stash<T, K extends CacheKey = CacheKey, M = never>(options: CacheOptions<K>): Stash<T, K, M> {\n const store = new Map<string, CacheRecord<K, T, M>>();\n const gcTasks = new Map<string, GcTask>();\n const scheduler = options.scheduler ?? new Scheduler();\n const hash = options.hash;\n let gcToken = 0;\n\n function cancelGcByHash(keyHash: string): void {\n gcTasks.get(keyHash)?.controller.abort();\n gcTasks.delete(keyHash);\n }\n\n function deleteByHash(keyHash: string): boolean {\n const existed = store.has(keyHash);\n\n cancelGcByHash(keyHash);\n store.delete(keyHash);\n\n return existed;\n }\n\n function get(key: K): T | undefined {\n return store.get(hash(key))?.value;\n }\n\n function getEntry(key: K): Readonly<{ meta: M | undefined; value: T }> | undefined {\n const entry = store.get(hash(key));\n\n if (!entry) {\n return undefined;\n }\n\n return { meta: entry.meta, value: entry.value };\n }\n\n function set(key: K, value: T, options?: CacheSetOptions<M>): void {\n const keyHash = hash(key);\n const existing = store.get(keyHash);\n\n cancelGcByHash(keyHash);\n store.set(keyHash, {\n key,\n meta: options && 'meta' in options ? options.meta : existing?.meta,\n value,\n });\n\n if (options?.ttlMs !== undefined) {\n scheduleGc(key, options.ttlMs);\n }\n }\n\n function getOrSet(key: K, factory: () => T, options?: CacheSetOptions<M>): T {\n const existing = getEntry(key);\n\n if (existing) {\n return existing.value;\n }\n\n const value = factory();\n\n set(key, value, options);\n\n return value;\n }\n\n function del(key: K): boolean {\n return deleteByHash(hash(key));\n }\n\n function clear(): void {\n for (const task of gcTasks.values()) task.controller.abort();\n store.clear();\n gcTasks.clear();\n }\n\n function size(): number {\n return store.size;\n }\n\n function scheduleGcByHash(keyHash: string, delayMs: number): void {\n cancelGcByHash(keyHash);\n\n if (delayMs === Number.POSITIVE_INFINITY) {\n return;\n }\n\n if (!Number.isFinite(delayMs)) {\n throw new TypeError('stash.scheduleGc expects a finite number or Infinity');\n }\n\n if (delayMs <= 0) {\n deleteByHash(keyHash);\n\n return;\n }\n\n if (!store.has(keyHash)) {\n return;\n }\n\n const controller = new AbortController();\n const token = ++gcToken;\n\n gcTasks.set(keyHash, { controller, token });\n void scheduler\n .postTask(\n () => {\n const current = gcTasks.get(keyHash);\n\n if (!current || current.token !== token) {\n return;\n }\n\n gcTasks.delete(keyHash);\n\n deleteByHash(keyHash);\n },\n {\n delay: delayMs,\n priority: 'background',\n signal: controller.signal,\n },\n )\n .catch((error) => {\n if (error instanceof DOMException && error.name === 'AbortError') {\n return;\n }\n\n options.onError?.(error);\n });\n }\n\n function scheduleGc(key: K, delayMs: number): void {\n scheduleGcByHash(hash(key), delayMs);\n }\n\n function cancelGc(key: K): void {\n cancelGcByHash(hash(key));\n }\n\n function touch(key: K, ttlMs: number): boolean {\n const keyHash = hash(key);\n\n if (!store.has(keyHash)) {\n return false;\n }\n\n scheduleGcByHash(keyHash, ttlMs);\n\n return true;\n }\n\n function* entries(): IterableIterator<[K, T]> {\n for (const record of store.values()) {\n yield [record.key, record.value];\n }\n }\n\n return {\n cancelGc,\n clear,\n delete: del,\n entries,\n get,\n getEntry,\n getOrSet,\n scheduleGc,\n set,\n size,\n touch,\n };\n}\n"],"mappings":"0CAuDA,SAAgB,EAAmD,EAA0C,CAC3G,IAAM,EAAQ,IAAI,IACZ,EAAU,IAAI,IACd,EAAY,EAAQ,WAAa,IAAI,EAAA,UACrC,EAAO,EAAQ,KACjB,EAAU,EAEd,SAAS,EAAe,EAAuB,CAC7C,EAAQ,IAAI,EAAQ,EAAE,WAAW,OAAO,CACxC,EAAQ,OAAO,EAAQ,CAGzB,SAAS,EAAa,EAA0B,CAC9C,IAAM,EAAU,EAAM,IAAI,EAAQ,CAKlC,OAHA,EAAe,EAAQ,CACvB,EAAM,OAAO,EAAQ,CAEd,EAGT,SAAS,EAAI,EAAuB,CAClC,OAAO,EAAM,IAAI,EAAK,EAAI,CAAC,EAAE,MAG/B,SAAS,EAAS,EAAiE,CACjF,IAAM,EAAQ,EAAM,IAAI,EAAK,EAAI,CAAC,CAE7B,KAIL,MAAO,CAAE,KAAM,EAAM,KAAM,MAAO,EAAM,MAAO,CAGjD,SAAS,EAAI,EAAQ,EAAU,EAAoC,CACjE,IAAM,EAAU,EAAK,EAAI,CACnB,EAAW,EAAM,IAAI,EAAQ,CAEnC,EAAe,EAAQ,CACvB,EAAM,IAAI,EAAS,CACjB,MACA,KAAM,GAAW,SAAU,EAAU,EAAQ,KAAO,GAAU,KAC9D,QACD,CAAC,CAEE,GAAS,QAAU,IAAA,IACrB,EAAW,EAAK,EAAQ,MAAM,CAIlC,SAAS,EAAS,EAAQ,EAAkB,EAAiC,CAC3E,IAAM,EAAW,EAAS,EAAI,CAE9B,GAAI,EACF,OAAO,EAAS,MAGlB,IAAM,EAAQ,GAAS,CAIvB,OAFA,EAAI,EAAK,EAAO,EAAQ,CAEjB,EAGT,SAAS,EAAI,EAAiB,CAC5B,OAAO,EAAa,EAAK,EAAI,CAAC,CAGhC,SAAS,GAAc,CACrB,IAAK,IAAM,KAAQ,EAAQ,QAAQ,CAAE,EAAK,WAAW,OAAO,CAC5D,EAAM,OAAO,CACb,EAAQ,OAAO,CAGjB,SAAS,GAAe,CACtB,OAAO,EAAM,KAGf,SAAS,EAAiB,EAAiB,EAAuB,CAGhE,GAFA,EAAe,EAAQ,CAEnB,IAAY,IACd,OAGF,GAAI,CAAC,OAAO,SAAS,EAAQ,CAC3B,MAAU,UAAU,uDAAuD,CAG7E,GAAI,GAAW,EAAG,CAChB,EAAa,EAAQ,CAErB,OAGF,GAAI,CAAC,EAAM,IAAI,EAAQ,CACrB,OAGF,IAAM,EAAa,IAAI,gBACjB,EAAQ,EAAE,EAEhB,EAAQ,IAAI,EAAS,CAAE,aAAY,QAAO,CAAC,CACtC,EACF,aACO,CACJ,IAAM,EAAU,EAAQ,IAAI,EAAQ,CAEhC,CAAC,GAAW,EAAQ,QAAU,IAIlC,EAAQ,OAAO,EAAQ,CAEvB,EAAa,EAAQ,GAEvB,CACE,MAAO,EACP,SAAU,aACV,OAAQ,EAAW,OACpB,CACF,CACA,MAAO,GAAU,CACZ,aAAiB,cAAgB,EAAM,OAAS,cAIpD,EAAQ,UAAU,EAAM,EACxB,CAGN,SAAS,EAAW,EAAQ,EAAuB,CACjD,EAAiB,EAAK,EAAI,CAAE,EAAQ,CAGtC,SAAS,EAAS,EAAc,CAC9B,EAAe,EAAK,EAAI,CAAC,CAG3B,SAAS,EAAM,EAAQ,EAAwB,CAC7C,IAAM,EAAU,EAAK,EAAI,CAQzB,OANK,EAAM,IAAI,EAAQ,EAIvB,EAAiB,EAAS,EAAM,CAEzB,IALE,GAQX,SAAU,GAAoC,CAC5C,IAAK,IAAM,KAAU,EAAM,QAAQ,CACjC,KAAM,CAAC,EAAO,IAAK,EAAO,MAAM,CAIpC,MAAO,CACL,WACA,QACA,OAAQ,EACR,UACA,MACA,WACA,WACA,aACA,MACA,OACA,QACD"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { type SchedulerLike } from '../async';
|
|
2
|
+
type CacheKey = readonly unknown[];
|
|
3
|
+
export type CacheOptions<K extends CacheKey = CacheKey> = {
|
|
4
|
+
hash: (key: K) => string;
|
|
5
|
+
onError?: (error: unknown) => void;
|
|
6
|
+
scheduler?: Pick<SchedulerLike, 'postTask'>;
|
|
7
|
+
};
|
|
8
|
+
export type CacheSetOptions<M> = {
|
|
9
|
+
meta?: M;
|
|
10
|
+
ttlMs?: number;
|
|
11
|
+
};
|
|
12
|
+
export type Stash<T, K extends CacheKey = CacheKey, M = never> = {
|
|
13
|
+
cancelGc: (key: K) => void;
|
|
14
|
+
clear: () => void;
|
|
15
|
+
delete: (key: K) => boolean;
|
|
16
|
+
entries: () => IterableIterator<[K, T]>;
|
|
17
|
+
get: (key: K) => T | undefined;
|
|
18
|
+
getEntry: (key: K) => Readonly<{
|
|
19
|
+
meta: M | undefined;
|
|
20
|
+
value: T;
|
|
21
|
+
}> | undefined;
|
|
22
|
+
getOrSet: (key: K, factory: () => T, options?: CacheSetOptions<M>) => T;
|
|
23
|
+
scheduleGc: (key: K, delayMs: number) => void;
|
|
24
|
+
set: (key: K, value: T, options?: CacheSetOptions<M>) => void;
|
|
25
|
+
size: () => number;
|
|
26
|
+
touch: (key: K, ttlMs: number) => boolean;
|
|
27
|
+
};
|
|
28
|
+
/**
|
|
29
|
+
* Creates a generic key-value cache with automatic garbage collection and observer support.
|
|
30
|
+
*
|
|
31
|
+
* @example
|
|
32
|
+
* ```ts
|
|
33
|
+
* const myCache = stash<string>({ hash: (key) => JSON.stringify(key) });
|
|
34
|
+
* myCache.set(['user', 1], 'John Doe');
|
|
35
|
+
* const value = myCache.get(['user', 1]); // 'John Doe'
|
|
36
|
+
* myCache.scheduleGc(['user', 1], 5000); // Auto-delete after 5s
|
|
37
|
+
* ```
|
|
38
|
+
*
|
|
39
|
+
* @template T - The type of values stored in the cache.
|
|
40
|
+
*
|
|
41
|
+
* @returns A cache instance with get, set, delete, clear, and GC methods.
|
|
42
|
+
*/
|
|
43
|
+
export declare function stash<T, K extends CacheKey = CacheKey, M = never>(options: CacheOptions<K>): Stash<T, K, M>;
|
|
44
|
+
export {};
|
|
45
|
+
//# sourceMappingURL=stash.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stash.d.ts","sourceRoot":"","sources":["../../src/object/stash.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,KAAK,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzD,KAAK,QAAQ,GAAG,SAAS,OAAO,EAAE,CAAC;AAanC,MAAM,MAAM,YAAY,CAAC,CAAC,SAAS,QAAQ,GAAG,QAAQ,IAAI;IACxD,IAAI,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,MAAM,CAAC;IACzB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IACnC,SAAS,CAAC,EAAE,IAAI,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC;CAC7C,CAAC;AAEF,MAAM,MAAM,eAAe,CAAC,CAAC,IAAI;IAC/B,IAAI,CAAC,EAAE,CAAC,CAAC;IACT,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,KAAK,CAAC,CAAC,EAAE,CAAC,SAAS,QAAQ,GAAG,QAAQ,EAAE,CAAC,GAAG,KAAK,IAAI;IAC/D,QAAQ,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,IAAI,CAAC;IAC3B,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,OAAO,CAAC;IAC5B,OAAO,EAAE,MAAM,gBAAgB,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACxC,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,SAAS,CAAC;IAC/B,QAAQ,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,QAAQ,CAAC;QAAE,IAAI,EAAE,CAAC,GAAG,SAAS,CAAC;QAAC,KAAK,EAAE,CAAC,CAAA;KAAE,CAAC,GAAG,SAAS,CAAC;IAC9E,QAAQ,EAAE,CAAC,GAAG,EAAE,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,OAAO,CAAC,EAAE,eAAe,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IACxE,UAAU,EAAE,CAAC,GAAG,EAAE,CAAC,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAC9C,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,CAAC,EAAE,eAAe,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC;IAC9D,IAAI,EAAE,MAAM,MAAM,CAAC;IACnB,KAAK,EAAE,CAAC,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC;CAC3C,CAAC;AAEF;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,KAAK,CAAC,CAAC,EAAE,CAAC,SAAS,QAAQ,GAAG,QAAQ,EAAE,CAAC,GAAG,KAAK,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CA2K3G"}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import { Scheduler as e } from "../async/scheduler.js";
|
|
2
|
+
//#region src/object/stash.ts
|
|
3
|
+
function t(t) {
|
|
4
|
+
let n = /* @__PURE__ */ new Map(), r = /* @__PURE__ */ new Map(), i = t.scheduler ?? new e(), a = t.hash, o = 0;
|
|
5
|
+
function s(e) {
|
|
6
|
+
r.get(e)?.controller.abort(), r.delete(e);
|
|
7
|
+
}
|
|
8
|
+
function c(e) {
|
|
9
|
+
let t = n.has(e);
|
|
10
|
+
return s(e), n.delete(e), t;
|
|
11
|
+
}
|
|
12
|
+
function l(e) {
|
|
13
|
+
return n.get(a(e))?.value;
|
|
14
|
+
}
|
|
15
|
+
function u(e) {
|
|
16
|
+
let t = n.get(a(e));
|
|
17
|
+
if (t) return {
|
|
18
|
+
meta: t.meta,
|
|
19
|
+
value: t.value
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
function d(e, t, r) {
|
|
23
|
+
let i = a(e), o = n.get(i);
|
|
24
|
+
s(i), n.set(i, {
|
|
25
|
+
key: e,
|
|
26
|
+
meta: r && "meta" in r ? r.meta : o?.meta,
|
|
27
|
+
value: t
|
|
28
|
+
}), r?.ttlMs !== void 0 && _(e, r.ttlMs);
|
|
29
|
+
}
|
|
30
|
+
function f(e, t, n) {
|
|
31
|
+
let r = u(e);
|
|
32
|
+
if (r) return r.value;
|
|
33
|
+
let i = t();
|
|
34
|
+
return d(e, i, n), i;
|
|
35
|
+
}
|
|
36
|
+
function p(e) {
|
|
37
|
+
return c(a(e));
|
|
38
|
+
}
|
|
39
|
+
function m() {
|
|
40
|
+
for (let e of r.values()) e.controller.abort();
|
|
41
|
+
n.clear(), r.clear();
|
|
42
|
+
}
|
|
43
|
+
function h() {
|
|
44
|
+
return n.size;
|
|
45
|
+
}
|
|
46
|
+
function g(e, a) {
|
|
47
|
+
if (s(e), a === Infinity) return;
|
|
48
|
+
if (!Number.isFinite(a)) throw TypeError("stash.scheduleGc expects a finite number or Infinity");
|
|
49
|
+
if (a <= 0) {
|
|
50
|
+
c(e);
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
if (!n.has(e)) return;
|
|
54
|
+
let l = new AbortController(), u = ++o;
|
|
55
|
+
r.set(e, {
|
|
56
|
+
controller: l,
|
|
57
|
+
token: u
|
|
58
|
+
}), i.postTask(() => {
|
|
59
|
+
let t = r.get(e);
|
|
60
|
+
!t || t.token !== u || (r.delete(e), c(e));
|
|
61
|
+
}, {
|
|
62
|
+
delay: a,
|
|
63
|
+
priority: "background",
|
|
64
|
+
signal: l.signal
|
|
65
|
+
}).catch((e) => {
|
|
66
|
+
e instanceof DOMException && e.name === "AbortError" || t.onError?.(e);
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
function _(e, t) {
|
|
70
|
+
g(a(e), t);
|
|
71
|
+
}
|
|
72
|
+
function v(e) {
|
|
73
|
+
s(a(e));
|
|
74
|
+
}
|
|
75
|
+
function y(e, t) {
|
|
76
|
+
let r = a(e);
|
|
77
|
+
return n.has(r) ? (g(r, t), !0) : !1;
|
|
78
|
+
}
|
|
79
|
+
function* b() {
|
|
80
|
+
for (let e of n.values()) yield [e.key, e.value];
|
|
81
|
+
}
|
|
82
|
+
return {
|
|
83
|
+
cancelGc: v,
|
|
84
|
+
clear: m,
|
|
85
|
+
delete: p,
|
|
86
|
+
entries: b,
|
|
87
|
+
get: l,
|
|
88
|
+
getEntry: u,
|
|
89
|
+
getOrSet: f,
|
|
90
|
+
scheduleGc: _,
|
|
91
|
+
set: d,
|
|
92
|
+
size: h,
|
|
93
|
+
touch: y
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
//#endregion
|
|
97
|
+
export { t as stash };
|
|
98
|
+
|
|
99
|
+
//# sourceMappingURL=stash.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stash.js","names":[],"sources":["../../src/object/stash.ts"],"sourcesContent":["import { Scheduler, type SchedulerLike } from '../async';\n\ntype CacheKey = readonly unknown[];\n\ntype CacheRecord<K extends CacheKey, T, M> = {\n key: K;\n meta: M | undefined;\n value: T;\n};\n\ntype GcTask = {\n controller: AbortController;\n token: number;\n};\n\nexport type CacheOptions<K extends CacheKey = CacheKey> = {\n hash: (key: K) => string;\n onError?: (error: unknown) => void;\n scheduler?: Pick<SchedulerLike, 'postTask'>;\n};\n\nexport type CacheSetOptions<M> = {\n meta?: M;\n ttlMs?: number;\n};\n\nexport type Stash<T, K extends CacheKey = CacheKey, M = never> = {\n cancelGc: (key: K) => void;\n clear: () => void;\n delete: (key: K) => boolean;\n entries: () => IterableIterator<[K, T]>;\n get: (key: K) => T | undefined;\n getEntry: (key: K) => Readonly<{ meta: M | undefined; value: T }> | undefined;\n getOrSet: (key: K, factory: () => T, options?: CacheSetOptions<M>) => T;\n scheduleGc: (key: K, delayMs: number) => void;\n set: (key: K, value: T, options?: CacheSetOptions<M>) => void;\n size: () => number;\n touch: (key: K, ttlMs: number) => boolean;\n};\n\n/**\n * Creates a generic key-value cache with automatic garbage collection and observer support.\n *\n * @example\n * ```ts\n * const myCache = stash<string>({ hash: (key) => JSON.stringify(key) });\n * myCache.set(['user', 1], 'John Doe');\n * const value = myCache.get(['user', 1]); // 'John Doe'\n * myCache.scheduleGc(['user', 1], 5000); // Auto-delete after 5s\n * ```\n *\n * @template T - The type of values stored in the cache.\n *\n * @returns A cache instance with get, set, delete, clear, and GC methods.\n */\nexport function stash<T, K extends CacheKey = CacheKey, M = never>(options: CacheOptions<K>): Stash<T, K, M> {\n const store = new Map<string, CacheRecord<K, T, M>>();\n const gcTasks = new Map<string, GcTask>();\n const scheduler = options.scheduler ?? new Scheduler();\n const hash = options.hash;\n let gcToken = 0;\n\n function cancelGcByHash(keyHash: string): void {\n gcTasks.get(keyHash)?.controller.abort();\n gcTasks.delete(keyHash);\n }\n\n function deleteByHash(keyHash: string): boolean {\n const existed = store.has(keyHash);\n\n cancelGcByHash(keyHash);\n store.delete(keyHash);\n\n return existed;\n }\n\n function get(key: K): T | undefined {\n return store.get(hash(key))?.value;\n }\n\n function getEntry(key: K): Readonly<{ meta: M | undefined; value: T }> | undefined {\n const entry = store.get(hash(key));\n\n if (!entry) {\n return undefined;\n }\n\n return { meta: entry.meta, value: entry.value };\n }\n\n function set(key: K, value: T, options?: CacheSetOptions<M>): void {\n const keyHash = hash(key);\n const existing = store.get(keyHash);\n\n cancelGcByHash(keyHash);\n store.set(keyHash, {\n key,\n meta: options && 'meta' in options ? options.meta : existing?.meta,\n value,\n });\n\n if (options?.ttlMs !== undefined) {\n scheduleGc(key, options.ttlMs);\n }\n }\n\n function getOrSet(key: K, factory: () => T, options?: CacheSetOptions<M>): T {\n const existing = getEntry(key);\n\n if (existing) {\n return existing.value;\n }\n\n const value = factory();\n\n set(key, value, options);\n\n return value;\n }\n\n function del(key: K): boolean {\n return deleteByHash(hash(key));\n }\n\n function clear(): void {\n for (const task of gcTasks.values()) task.controller.abort();\n store.clear();\n gcTasks.clear();\n }\n\n function size(): number {\n return store.size;\n }\n\n function scheduleGcByHash(keyHash: string, delayMs: number): void {\n cancelGcByHash(keyHash);\n\n if (delayMs === Number.POSITIVE_INFINITY) {\n return;\n }\n\n if (!Number.isFinite(delayMs)) {\n throw new TypeError('stash.scheduleGc expects a finite number or Infinity');\n }\n\n if (delayMs <= 0) {\n deleteByHash(keyHash);\n\n return;\n }\n\n if (!store.has(keyHash)) {\n return;\n }\n\n const controller = new AbortController();\n const token = ++gcToken;\n\n gcTasks.set(keyHash, { controller, token });\n void scheduler\n .postTask(\n () => {\n const current = gcTasks.get(keyHash);\n\n if (!current || current.token !== token) {\n return;\n }\n\n gcTasks.delete(keyHash);\n\n deleteByHash(keyHash);\n },\n {\n delay: delayMs,\n priority: 'background',\n signal: controller.signal,\n },\n )\n .catch((error) => {\n if (error instanceof DOMException && error.name === 'AbortError') {\n return;\n }\n\n options.onError?.(error);\n });\n }\n\n function scheduleGc(key: K, delayMs: number): void {\n scheduleGcByHash(hash(key), delayMs);\n }\n\n function cancelGc(key: K): void {\n cancelGcByHash(hash(key));\n }\n\n function touch(key: K, ttlMs: number): boolean {\n const keyHash = hash(key);\n\n if (!store.has(keyHash)) {\n return false;\n }\n\n scheduleGcByHash(keyHash, ttlMs);\n\n return true;\n }\n\n function* entries(): IterableIterator<[K, T]> {\n for (const record of store.values()) {\n yield [record.key, record.value];\n }\n }\n\n return {\n cancelGc,\n clear,\n delete: del,\n entries,\n get,\n getEntry,\n getOrSet,\n scheduleGc,\n set,\n size,\n touch,\n };\n}\n"],"mappings":";;AAuDA,SAAgB,EAAmD,GAA0C;CAC3G,IAAM,oBAAQ,IAAI,KAAmC,EAC/C,oBAAU,IAAI,KAAqB,EACnC,IAAY,EAAQ,aAAa,IAAI,GAAW,EAChD,IAAO,EAAQ,MACjB,IAAU;CAEd,SAAS,EAAe,GAAuB;AAE7C,EADA,EAAQ,IAAI,EAAQ,EAAE,WAAW,OAAO,EACxC,EAAQ,OAAO,EAAQ;;CAGzB,SAAS,EAAa,GAA0B;EAC9C,IAAM,IAAU,EAAM,IAAI,EAAQ;AAKlC,SAHA,EAAe,EAAQ,EACvB,EAAM,OAAO,EAAQ,EAEd;;CAGT,SAAS,EAAI,GAAuB;AAClC,SAAO,EAAM,IAAI,EAAK,EAAI,CAAC,EAAE;;CAG/B,SAAS,EAAS,GAAiE;EACjF,IAAM,IAAQ,EAAM,IAAI,EAAK,EAAI,CAAC;AAE7B,QAIL,QAAO;GAAE,MAAM,EAAM;GAAM,OAAO,EAAM;GAAO;;CAGjD,SAAS,EAAI,GAAQ,GAAU,GAAoC;EACjE,IAAM,IAAU,EAAK,EAAI,EACnB,IAAW,EAAM,IAAI,EAAQ;AASnC,EAPA,EAAe,EAAQ,EACvB,EAAM,IAAI,GAAS;GACjB;GACA,MAAM,KAAW,UAAU,IAAU,EAAQ,OAAO,GAAU;GAC9D;GACD,CAAC,EAEE,GAAS,UAAU,KAAA,KACrB,EAAW,GAAK,EAAQ,MAAM;;CAIlC,SAAS,EAAS,GAAQ,GAAkB,GAAiC;EAC3E,IAAM,IAAW,EAAS,EAAI;AAE9B,MAAI,EACF,QAAO,EAAS;EAGlB,IAAM,IAAQ,GAAS;AAIvB,SAFA,EAAI,GAAK,GAAO,EAAQ,EAEjB;;CAGT,SAAS,EAAI,GAAiB;AAC5B,SAAO,EAAa,EAAK,EAAI,CAAC;;CAGhC,SAAS,IAAc;AACrB,OAAK,IAAM,KAAQ,EAAQ,QAAQ,CAAE,GAAK,WAAW,OAAO;AAE5D,EADA,EAAM,OAAO,EACb,EAAQ,OAAO;;CAGjB,SAAS,IAAe;AACtB,SAAO,EAAM;;CAGf,SAAS,EAAiB,GAAiB,GAAuB;AAGhE,MAFA,EAAe,EAAQ,EAEnB,MAAY,SACd;AAGF,MAAI,CAAC,OAAO,SAAS,EAAQ,CAC3B,OAAU,UAAU,uDAAuD;AAG7E,MAAI,KAAW,GAAG;AAChB,KAAa,EAAQ;AAErB;;AAGF,MAAI,CAAC,EAAM,IAAI,EAAQ,CACrB;EAGF,IAAM,IAAa,IAAI,iBAAiB,EAClC,IAAQ,EAAE;AAGX,EADL,EAAQ,IAAI,GAAS;GAAE;GAAY;GAAO,CAAC,EACtC,EACF,eACO;GACJ,IAAM,IAAU,EAAQ,IAAI,EAAQ;AAEhC,IAAC,KAAW,EAAQ,UAAU,MAIlC,EAAQ,OAAO,EAAQ,EAEvB,EAAa,EAAQ;KAEvB;GACE,OAAO;GACP,UAAU;GACV,QAAQ,EAAW;GACpB,CACF,CACA,OAAO,MAAU;AACZ,gBAAiB,gBAAgB,EAAM,SAAS,gBAIpD,EAAQ,UAAU,EAAM;IACxB;;CAGN,SAAS,EAAW,GAAQ,GAAuB;AACjD,IAAiB,EAAK,EAAI,EAAE,EAAQ;;CAGtC,SAAS,EAAS,GAAc;AAC9B,IAAe,EAAK,EAAI,CAAC;;CAG3B,SAAS,EAAM,GAAQ,GAAwB;EAC7C,IAAM,IAAU,EAAK,EAAI;AAQzB,SANK,EAAM,IAAI,EAAQ,IAIvB,EAAiB,GAAS,EAAM,EAEzB,MALE;;CAQX,UAAU,IAAoC;AAC5C,OAAK,IAAM,KAAU,EAAM,QAAQ,CACjC,OAAM,CAAC,EAAO,KAAK,EAAO,MAAM;;AAIpC,QAAO;EACL;EACA;EACA,QAAQ;EACR;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACD"}
|
package/dist/random/draw.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
//# sourceMappingURL=draw.cjs.map
|
|
1
|
+
const e=require(`../function/assert.cjs`),t=require(`../typed/isArray.cjs`),n=require(`./random.cjs`);var r=r=>{if(e.assert(t.isArray(r),t.IS_ARRAY_ERROR_MSG,{args:{array:r},type:TypeError}),r.length!==0)return r[n.random(0,r.length-1)]};exports.draw=r;
|
|
2
|
+
//# sourceMappingURL=draw.cjs.map
|
package/dist/random/draw.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"draw.cjs","sources":["../../src/random/draw.ts"],"sourcesContent":["import { assert } from '../function/assert';\nimport { IS_ARRAY_ERROR_MSG, isArray } from '../typed/isArray';\nimport { random } from './random';\n\n/**\n * “Draw” a random item from an array.\n *\n * @example\n * ```ts\n * draw([1, 2, 3]) // 3\n * ```\n *\n * @param array - The array to draw from.\n *\n * @returns A random item from the array or `undefined` if the array is empty.\n *\n * @throws {TypeError} If the provided array is not an array.\n */\nexport const draw = <T>(array: T[]): T | undefined => {\n assert(isArray(array), IS_ARRAY_ERROR_MSG, { args: { array }, type: TypeError });\n\n if (array.length === 0) return undefined;\n\n return array[random(0, array.length - 1)];\n};\n"],"
|
|
1
|
+
{"version":3,"file":"draw.cjs","names":[],"sources":["../../src/random/draw.ts"],"sourcesContent":["import { assert } from '../function/assert';\nimport { IS_ARRAY_ERROR_MSG, isArray } from '../typed/isArray';\nimport { random } from './random';\n\n/**\n * “Draw” a random item from an array.\n *\n * @example\n * ```ts\n * draw([1, 2, 3]) // 3\n * ```\n *\n * @param array - The array to draw from.\n *\n * @returns A random item from the array or `undefined` if the array is empty.\n *\n * @throws {TypeError} If the provided array is not an array.\n */\nexport const draw = <T>(array: T[]): T | undefined => {\n assert(isArray(array), IS_ARRAY_ERROR_MSG, { args: { array }, type: TypeError });\n\n if (array.length === 0) return undefined;\n\n return array[random(0, array.length - 1)];\n};\n"],"mappings":"sGAkBA,IAAa,EAAW,GAA8B,CACpD,KAAA,OAAO,EAAA,QAAQ,EAAM,CAAE,EAAA,mBAAoB,CAAE,KAAM,CAAE,QAAO,CAAE,KAAM,UAAW,CAAC,CAE5E,EAAM,SAAW,EAErB,OAAO,EAAM,EAAA,OAAO,EAAG,EAAM,OAAS,EAAE"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* “Draw” a random item from an array.
|
|
3
|
+
*
|
|
4
|
+
* @example
|
|
5
|
+
* ```ts
|
|
6
|
+
* draw([1, 2, 3]) // 3
|
|
7
|
+
* ```
|
|
8
|
+
*
|
|
9
|
+
* @param array - The array to draw from.
|
|
10
|
+
*
|
|
11
|
+
* @returns A random item from the array or `undefined` if the array is empty.
|
|
12
|
+
*
|
|
13
|
+
* @throws {TypeError} If the provided array is not an array.
|
|
14
|
+
*/
|
|
15
|
+
export declare const draw: <T>(array: T[]) => T | undefined;
|
|
16
|
+
//# sourceMappingURL=draw.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"draw.d.ts","sourceRoot":"","sources":["../../src/random/draw.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,IAAI,GAAI,CAAC,EAAE,OAAO,CAAC,EAAE,KAAG,CAAC,GAAG,SAMxC,CAAC"}
|
package/dist/random/draw.js
CHANGED
|
@@ -1,11 +1,14 @@
|
|
|
1
|
-
import { assert as
|
|
2
|
-
import { IS_ARRAY_ERROR_MSG as t, isArray as
|
|
3
|
-
import { random as
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
1
|
+
import { assert as e } from "../function/assert.js";
|
|
2
|
+
import { IS_ARRAY_ERROR_MSG as t, isArray as n } from "../typed/isArray.js";
|
|
3
|
+
import { random as r } from "./random.js";
|
|
4
|
+
//#region src/random/draw.ts
|
|
5
|
+
var i = (i) => {
|
|
6
|
+
if (e(n(i), t, {
|
|
7
|
+
args: { array: i },
|
|
8
|
+
type: TypeError
|
|
9
|
+
}), i.length !== 0) return i[r(0, i.length - 1)];
|
|
7
10
|
};
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
//# sourceMappingURL=draw.js.map
|
|
11
|
+
//#endregion
|
|
12
|
+
export { i as draw };
|
|
13
|
+
|
|
14
|
+
//# sourceMappingURL=draw.js.map
|
package/dist/random/draw.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"draw.js","sources":["../../src/random/draw.ts"],"sourcesContent":["import { assert } from '../function/assert';\nimport { IS_ARRAY_ERROR_MSG, isArray } from '../typed/isArray';\nimport { random } from './random';\n\n/**\n * “Draw” a random item from an array.\n *\n * @example\n * ```ts\n * draw([1, 2, 3]) // 3\n * ```\n *\n * @param array - The array to draw from.\n *\n * @returns A random item from the array or `undefined` if the array is empty.\n *\n * @throws {TypeError} If the provided array is not an array.\n */\nexport const draw = <T>(array: T[]): T | undefined => {\n assert(isArray(array), IS_ARRAY_ERROR_MSG, { args: { array }, type: TypeError });\n\n if (array.length === 0) return undefined;\n\n return array[random(0, array.length - 1)];\n};\n"],"
|
|
1
|
+
{"version":3,"file":"draw.js","names":[],"sources":["../../src/random/draw.ts"],"sourcesContent":["import { assert } from '../function/assert';\nimport { IS_ARRAY_ERROR_MSG, isArray } from '../typed/isArray';\nimport { random } from './random';\n\n/**\n * “Draw” a random item from an array.\n *\n * @example\n * ```ts\n * draw([1, 2, 3]) // 3\n * ```\n *\n * @param array - The array to draw from.\n *\n * @returns A random item from the array or `undefined` if the array is empty.\n *\n * @throws {TypeError} If the provided array is not an array.\n */\nexport const draw = <T>(array: T[]): T | undefined => {\n assert(isArray(array), IS_ARRAY_ERROR_MSG, { args: { array }, type: TypeError });\n\n if (array.length === 0) return undefined;\n\n return array[random(0, array.length - 1)];\n};\n"],"mappings":";;;;AAkBA,IAAa,KAAW,MAA8B;AACpD,OAAO,EAAQ,EAAM,EAAE,GAAoB;EAAE,MAAM,EAAE,UAAO;EAAE,MAAM;EAAW,CAAC,EAE5E,EAAM,WAAW,EAErB,QAAO,EAAM,EAAO,GAAG,EAAM,SAAS,EAAE"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/random/index.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAC;AACvB,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC;AAC1B,cAAc,QAAQ,CAAC"}
|
package/dist/random/random.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
//# sourceMappingURL=random.cjs.map
|
|
1
|
+
const e=require(`../function/assert.cjs`);function t(t,n){e.assert(t<=n,`Minimum value must be less than maximum value`,{args:{max:n,min:t},type:RangeError});let r=crypto.getRandomValues(new Uint32Array(1))[0]/4294967295;return Math.floor(r*(n-t+1))+t}exports.random=t;
|
|
2
|
+
//# sourceMappingURL=random.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"random.cjs","sources":["../../src/random/random.ts"],"sourcesContent":["import { assert } from '../function/assert';\n\n/**\n * Generates a random integer between two values, inclusive.\n *\n * @example\n * ```ts\n * random(1, 10); // a random integer between 1 and 10\n * ```\n *\n * @param min - The minimum value.\n * @param max - The maximum value.\n * @returns A random integer between min and max.\n */\nexport function random(min: number, max: number): number {\n assert(min <= max, 'Minimum value must be less than maximum value', { args: { max, min }, type: RangeError });\n\n const randomValue = crypto
|
|
1
|
+
{"version":3,"file":"random.cjs","names":[],"sources":["../../src/random/random.ts"],"sourcesContent":["import { assert } from '../function/assert';\n\n/**\n * Generates a random integer between two values, inclusive.\n *\n * @example\n * ```ts\n * random(1, 10); // a random integer between 1 and 10\n * ```\n *\n * @param min - The minimum value.\n * @param max - The maximum value.\n * @returns A random integer between min and max.\n */\nexport function random(min: number, max: number): number {\n assert(min <= max, 'Minimum value must be less than maximum value', { args: { max, min }, type: RangeError });\n\n const randomValue = crypto.getRandomValues(new Uint32Array(1))[0] / 0xffffffff;\n\n return Math.floor(randomValue * (max - min + 1)) + min;\n}\n"],"mappings":"0CAcA,SAAgB,EAAO,EAAa,EAAqB,CACvD,EAAA,OAAO,GAAO,EAAK,gDAAiD,CAAE,KAAM,CAAE,MAAK,MAAK,CAAE,KAAM,WAAY,CAAC,CAE7G,IAAM,EAAc,OAAO,gBAAgB,IAAI,YAAY,EAAE,CAAC,CAAC,GAAK,WAEpE,OAAO,KAAK,MAAM,GAAe,EAAM,EAAM,GAAG,CAAG"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generates a random integer between two values, inclusive.
|
|
3
|
+
*
|
|
4
|
+
* @example
|
|
5
|
+
* ```ts
|
|
6
|
+
* random(1, 10); // a random integer between 1 and 10
|
|
7
|
+
* ```
|
|
8
|
+
*
|
|
9
|
+
* @param min - The minimum value.
|
|
10
|
+
* @param max - The maximum value.
|
|
11
|
+
* @returns A random integer between min and max.
|
|
12
|
+
*/
|
|
13
|
+
export declare function random(min: number, max: number): number;
|
|
14
|
+
//# sourceMappingURL=random.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"random.d.ts","sourceRoot":"","sources":["../../src/random/random.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;GAWG;AACH,wBAAgB,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAMvD"}
|
package/dist/random/random.js
CHANGED
|
@@ -1,10 +1,17 @@
|
|
|
1
|
-
import { assert as
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
1
|
+
import { assert as e } from "../function/assert.js";
|
|
2
|
+
//#region src/random/random.ts
|
|
3
|
+
function t(t, n) {
|
|
4
|
+
e(t <= n, "Minimum value must be less than maximum value", {
|
|
5
|
+
args: {
|
|
6
|
+
max: n,
|
|
7
|
+
min: t
|
|
8
|
+
},
|
|
9
|
+
type: RangeError
|
|
10
|
+
});
|
|
11
|
+
let r = crypto.getRandomValues(new Uint32Array(1))[0] / 4294967295;
|
|
12
|
+
return Math.floor(r * (n - t + 1)) + t;
|
|
6
13
|
}
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
//# sourceMappingURL=random.js.map
|
|
14
|
+
//#endregion
|
|
15
|
+
export { t as random };
|
|
16
|
+
|
|
17
|
+
//# sourceMappingURL=random.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"random.js","sources":["../../src/random/random.ts"],"sourcesContent":["import { assert } from '../function/assert';\n\n/**\n * Generates a random integer between two values, inclusive.\n *\n * @example\n * ```ts\n * random(1, 10); // a random integer between 1 and 10\n * ```\n *\n * @param min - The minimum value.\n * @param max - The maximum value.\n * @returns A random integer between min and max.\n */\nexport function random(min: number, max: number): number {\n assert(min <= max, 'Minimum value must be less than maximum value', { args: { max, min }, type: RangeError });\n\n const randomValue = crypto
|
|
1
|
+
{"version":3,"file":"random.js","names":[],"sources":["../../src/random/random.ts"],"sourcesContent":["import { assert } from '../function/assert';\n\n/**\n * Generates a random integer between two values, inclusive.\n *\n * @example\n * ```ts\n * random(1, 10); // a random integer between 1 and 10\n * ```\n *\n * @param min - The minimum value.\n * @param max - The maximum value.\n * @returns A random integer between min and max.\n */\nexport function random(min: number, max: number): number {\n assert(min <= max, 'Minimum value must be less than maximum value', { args: { max, min }, type: RangeError });\n\n const randomValue = crypto.getRandomValues(new Uint32Array(1))[0] / 0xffffffff;\n\n return Math.floor(randomValue * (max - min + 1)) + min;\n}\n"],"mappings":";;AAcA,SAAgB,EAAO,GAAa,GAAqB;AACvD,GAAO,KAAO,GAAK,iDAAiD;EAAE,MAAM;GAAE;GAAK;GAAK;EAAE,MAAM;EAAY,CAAC;CAE7G,IAAM,IAAc,OAAO,gBAAgB,IAAI,YAAY,EAAE,CAAC,CAAC,KAAK;AAEpE,QAAO,KAAK,MAAM,KAAe,IAAM,IAAM,GAAG,GAAG"}
|
package/dist/random/shuffle.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
//# sourceMappingURL=shuffle.cjs.map
|
|
1
|
+
const e=require(`../function/assert.cjs`),t=require(`../typed/isArray.cjs`);function n(n){e.assert(t.isArray(n),t.IS_ARRAY_ERROR_MSG,{args:{array:n},type:TypeError});let r=[...n];for(let e=r.length-1;e>0;e--){let t=Math.floor(crypto.getRandomValues(new Uint32Array(1))[0]/4294967295*(e+1));[r[e],r[t]]=[r[t],r[e]]}return r}exports.shuffle=n;
|
|
2
|
+
//# sourceMappingURL=shuffle.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shuffle.cjs","sources":["../../src/random/shuffle.ts"],"sourcesContent":["import { assert } from '../function/assert';\nimport { IS_ARRAY_ERROR_MSG, isArray } from '../typed/isArray';\n\n/**\n * Shuffles an array randomly.\n *\n * @example\n * ```ts\n * const arr = [1, 2, 3, 4];\n * shuffle(arr); // a shuffled version of the array\n * ```\n *\n * @param array - The array to shuffle.\n *\n * @returns A new shuffled array.\n *\n * @throws {TypeError} If the provided array is not an array.\n */\nexport function shuffle<T>(array: T[]): T[] {\n assert(isArray(array), IS_ARRAY_ERROR_MSG, { args: { array }, type: TypeError });\n\n const result = [...array];\n\n for (let i = result.length - 1; i > 0; i--) {\n const j = Math.floor(
|
|
1
|
+
{"version":3,"file":"shuffle.cjs","names":[],"sources":["../../src/random/shuffle.ts"],"sourcesContent":["import { assert } from '../function/assert';\nimport { IS_ARRAY_ERROR_MSG, isArray } from '../typed/isArray';\n\n/**\n * Shuffles an array randomly.\n *\n * @example\n * ```ts\n * const arr = [1, 2, 3, 4];\n * shuffle(arr); // a shuffled version of the array\n * ```\n *\n * @param array - The array to shuffle.\n *\n * @returns A new shuffled array.\n *\n * @throws {TypeError} If the provided array is not an array.\n */\nexport function shuffle<T>(array: T[]): T[] {\n assert(isArray(array), IS_ARRAY_ERROR_MSG, { args: { array }, type: TypeError });\n\n const result = [...array];\n\n for (let i = result.length - 1; i > 0; i--) {\n const j = Math.floor((crypto.getRandomValues(new Uint32Array(1))[0] / 0xffffffff) * (i + 1));\n\n [result[i], result[j]] = [result[j], result[i]];\n }\n\n return result;\n}\n"],"mappings":"4EAkBA,SAAgB,EAAW,EAAiB,CAC1C,EAAA,OAAO,EAAA,QAAQ,EAAM,CAAE,EAAA,mBAAoB,CAAE,KAAM,CAAE,QAAO,CAAE,KAAM,UAAW,CAAC,CAEhF,IAAM,EAAS,CAAC,GAAG,EAAM,CAEzB,IAAK,IAAI,EAAI,EAAO,OAAS,EAAG,EAAI,EAAG,IAAK,CAC1C,IAAM,EAAI,KAAK,MAAO,OAAO,gBAAgB,IAAI,YAAY,EAAE,CAAC,CAAC,GAAK,YAAe,EAAI,GAAG,CAE5F,CAAC,EAAO,GAAI,EAAO,IAAM,CAAC,EAAO,GAAI,EAAO,GAAG,CAGjD,OAAO"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shuffles an array randomly.
|
|
3
|
+
*
|
|
4
|
+
* @example
|
|
5
|
+
* ```ts
|
|
6
|
+
* const arr = [1, 2, 3, 4];
|
|
7
|
+
* shuffle(arr); // a shuffled version of the array
|
|
8
|
+
* ```
|
|
9
|
+
*
|
|
10
|
+
* @param array - The array to shuffle.
|
|
11
|
+
*
|
|
12
|
+
* @returns A new shuffled array.
|
|
13
|
+
*
|
|
14
|
+
* @throws {TypeError} If the provided array is not an array.
|
|
15
|
+
*/
|
|
16
|
+
export declare function shuffle<T>(array: T[]): T[];
|
|
17
|
+
//# sourceMappingURL=shuffle.d.ts.map
|