ts-data-forge 14.6.0 → 14.6.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/array/impl/array-utils-creation.mjs +126 -26
- package/dist/array/impl/array-utils-creation.mjs.map +1 -1
- package/dist/array/impl/array-utils-element-access.mjs +63 -30
- package/dist/array/impl/array-utils-element-access.mjs.map +1 -1
- package/dist/array/impl/array-utils-iterators.mjs +69 -53
- package/dist/array/impl/array-utils-iterators.mjs.map +1 -1
- package/dist/array/impl/array-utils-length-bounded-array-cast.mjs +109 -73
- package/dist/array/impl/array-utils-length-bounded-array-cast.mjs.map +1 -1
- package/dist/array/impl/array-utils-length-bounded-array-guard.mjs +71 -33
- package/dist/array/impl/array-utils-length-bounded-array-guard.mjs.map +1 -1
- package/dist/array/impl/array-utils-length-bounded-tuple-cast.mjs +102 -73
- package/dist/array/impl/array-utils-length-bounded-tuple-cast.mjs.map +1 -1
- package/dist/array/impl/array-utils-length-bounded-tuple-guard.mjs +77 -33
- package/dist/array/impl/array-utils-length-bounded-tuple-guard.mjs.map +1 -1
- package/dist/array/impl/array-utils-modification.mjs +75 -122
- package/dist/array/impl/array-utils-modification.mjs.map +1 -1
- package/dist/array/impl/array-utils-reducing-value.mjs +100 -150
- package/dist/array/impl/array-utils-reducing-value.mjs.map +1 -1
- package/dist/array/impl/array-utils-search.mjs +110 -134
- package/dist/array/impl/array-utils-search.mjs.map +1 -1
- package/dist/array/impl/array-utils-set-op.mjs +146 -38
- package/dist/array/impl/array-utils-set-op.mjs.map +1 -1
- package/dist/array/impl/array-utils-size.mjs +10 -8
- package/dist/array/impl/array-utils-size.mjs.map +1 -1
- package/dist/array/impl/array-utils-slice-clamped.mjs +13 -50
- package/dist/array/impl/array-utils-slice-clamped.mjs.map +1 -1
- package/dist/array/impl/array-utils-slicing.mjs +94 -78
- package/dist/array/impl/array-utils-slicing.mjs.map +1 -1
- package/dist/array/impl/array-utils-transformation.mjs +291 -199
- package/dist/array/impl/array-utils-transformation.mjs.map +1 -1
- package/dist/array/impl/array-utils-validation.mjs +54 -56
- package/dist/array/impl/array-utils-validation.mjs.map +1 -1
- package/dist/array/impl/index.mjs +17 -17
- package/dist/array/impl/index.mjs.map +1 -1
- package/dist/array/index.mjs +2 -3
- package/dist/array/index.mjs.map +1 -1
- package/dist/collections/imap-mapped.mjs +335 -291
- package/dist/collections/imap-mapped.mjs.map +1 -1
- package/dist/collections/imap.mjs +280 -239
- package/dist/collections/imap.mjs.map +1 -1
- package/dist/collections/index.mjs +7 -7
- package/dist/collections/index.mjs.map +1 -1
- package/dist/collections/iset-mapped.d.mts.map +1 -1
- package/dist/collections/iset-mapped.mjs +448 -263
- package/dist/collections/iset-mapped.mjs.map +1 -1
- package/dist/collections/iset.mjs +328 -201
- package/dist/collections/iset.mjs.map +1 -1
- package/dist/collections/queue.mjs +183 -151
- package/dist/collections/queue.mjs.map +1 -1
- package/dist/collections/stack.mjs +169 -140
- package/dist/collections/stack.mjs.map +1 -1
- package/dist/entry-point.mjs +4 -77
- package/dist/entry-point.mjs.map +1 -1
- package/dist/expect-type.mjs +70 -4
- package/dist/expect-type.mjs.map +1 -1
- package/dist/functional/async-result/async-result.mjs +2 -3
- package/dist/functional/async-result/async-result.mjs.map +1 -1
- package/dist/functional/async-result/impl/async-result-flat-map.mjs +19 -21
- package/dist/functional/async-result/impl/async-result-flat-map.mjs.map +1 -1
- package/dist/functional/async-result/impl/async-result-from-promise.mjs +9 -10
- package/dist/functional/async-result/impl/async-result-from-promise.mjs.map +1 -1
- package/dist/functional/async-result/impl/async-result-from-throwable.mjs +12 -14
- package/dist/functional/async-result/impl/async-result-from-throwable.mjs.map +1 -1
- package/dist/functional/async-result/impl/async-result-map-err.mjs +16 -19
- package/dist/functional/async-result/impl/async-result-map-err.mjs.map +1 -1
- package/dist/functional/async-result/impl/async-result-map.mjs +16 -19
- package/dist/functional/async-result/impl/async-result-map.mjs.map +1 -1
- package/dist/functional/async-result/impl/async-result-unwrap-or.mjs +36 -9
- package/dist/functional/async-result/impl/async-result-unwrap-or.mjs.map +1 -1
- package/dist/functional/async-result/impl/index.mjs +8 -7
- package/dist/functional/async-result/impl/index.mjs.map +1 -1
- package/dist/functional/async-result/impl/types.mjs +2 -2
- package/dist/functional/async-result/impl/types.mjs.map +1 -1
- package/dist/functional/async-result/index.mjs +2 -3
- package/dist/functional/async-result/index.mjs.map +1 -1
- package/dist/functional/index.mjs +7 -11
- package/dist/functional/index.mjs.map +1 -1
- package/dist/functional/match.mjs +27 -13
- package/dist/functional/match.mjs.map +1 -1
- package/dist/functional/optional/impl/index.mjs +19 -18
- package/dist/functional/optional/impl/index.mjs.map +1 -1
- package/dist/functional/optional/impl/optional-expect-to-be.mjs +16 -18
- package/dist/functional/optional/impl/optional-expect-to-be.mjs.map +1 -1
- package/dist/functional/optional/impl/optional-filter.mjs +17 -19
- package/dist/functional/optional/impl/optional-filter.mjs.map +1 -1
- package/dist/functional/optional/impl/optional-flat-map.mjs +13 -15
- package/dist/functional/optional/impl/optional-flat-map.mjs.map +1 -1
- package/dist/functional/optional/impl/optional-from-nullable.mjs +26 -5
- package/dist/functional/optional/impl/optional-from-nullable.mjs.map +1 -1
- package/dist/functional/optional/impl/optional-is-none.mjs +21 -5
- package/dist/functional/optional/impl/optional-is-none.mjs.map +1 -1
- package/dist/functional/optional/impl/optional-is-optional.mjs +26 -8
- package/dist/functional/optional/impl/optional-is-optional.mjs.map +1 -1
- package/dist/functional/optional/impl/optional-is-some.mjs +22 -5
- package/dist/functional/optional/impl/optional-is-some.mjs.map +1 -1
- package/dist/functional/optional/impl/optional-map.mjs +16 -18
- package/dist/functional/optional/impl/optional-map.mjs.map +1 -1
- package/dist/functional/optional/impl/optional-match.mjs +16 -18
- package/dist/functional/optional/impl/optional-match.mjs.map +1 -1
- package/dist/functional/optional/impl/optional-none.mjs +18 -5
- package/dist/functional/optional/impl/optional-none.mjs.map +1 -1
- package/dist/functional/optional/impl/optional-or-else.mjs +13 -15
- package/dist/functional/optional/impl/optional-or-else.mjs.map +1 -1
- package/dist/functional/optional/impl/optional-some.mjs +23 -7
- package/dist/functional/optional/impl/optional-some.mjs.map +1 -1
- package/dist/functional/optional/impl/optional-to-nullable.mjs +28 -5
- package/dist/functional/optional/impl/optional-to-nullable.mjs.map +1 -1
- package/dist/functional/optional/impl/optional-unwrap-or.mjs +12 -14
- package/dist/functional/optional/impl/optional-unwrap-or.mjs.map +1 -1
- package/dist/functional/optional/impl/optional-unwrap-throw.mjs +34 -9
- package/dist/functional/optional/impl/optional-unwrap-throw.mjs.map +1 -1
- package/dist/functional/optional/impl/optional-unwrap.mjs +6 -9
- package/dist/functional/optional/impl/optional-unwrap.mjs.map +1 -1
- package/dist/functional/optional/impl/optional-zip.mjs +36 -5
- package/dist/functional/optional/impl/optional-zip.mjs.map +1 -1
- package/dist/functional/optional/impl/tag.mjs +4 -5
- package/dist/functional/optional/impl/tag.mjs.map +1 -1
- package/dist/functional/optional/impl/types.mjs +2 -2
- package/dist/functional/optional/impl/types.mjs.map +1 -1
- package/dist/functional/optional/index.mjs +2 -3
- package/dist/functional/optional/index.mjs.map +1 -1
- package/dist/functional/optional/optional.mjs +2 -3
- package/dist/functional/optional/optional.mjs.map +1 -1
- package/dist/functional/pipe.mjs +42 -14
- package/dist/functional/pipe.mjs.map +1 -1
- package/dist/functional/result/impl/index.mjs +28 -27
- package/dist/functional/result/impl/index.mjs.map +1 -1
- package/dist/functional/result/impl/result-err.mjs +29 -7
- package/dist/functional/result/impl/result-err.mjs.map +1 -1
- package/dist/functional/result/impl/result-expect-to-be.mjs +17 -18
- package/dist/functional/result/impl/result-expect-to-be.mjs.map +1 -1
- package/dist/functional/result/impl/result-flat-map.mjs +18 -21
- package/dist/functional/result/impl/result-flat-map.mjs.map +1 -1
- package/dist/functional/result/impl/result-fold.mjs +18 -21
- package/dist/functional/result/impl/result-fold.mjs.map +1 -1
- package/dist/functional/result/impl/result-from-optional.mjs +17 -20
- package/dist/functional/result/impl/result-from-optional.mjs.map +1 -1
- package/dist/functional/result/impl/result-from-promise.mjs +37 -8
- package/dist/functional/result/impl/result-from-promise.mjs.map +1 -1
- package/dist/functional/result/impl/result-from-throwable.mjs +41 -14
- package/dist/functional/result/impl/result-from-throwable.mjs.map +1 -1
- package/dist/functional/result/impl/result-is-err.mjs +21 -5
- package/dist/functional/result/impl/result-is-err.mjs.map +1 -1
- package/dist/functional/result/impl/result-is-ok.mjs +21 -5
- package/dist/functional/result/impl/result-is-ok.mjs.map +1 -1
- package/dist/functional/result/impl/result-is-result.mjs +25 -7
- package/dist/functional/result/impl/result-is-result.mjs.map +1 -1
- package/dist/functional/result/impl/result-map-err.mjs +18 -21
- package/dist/functional/result/impl/result-map-err.mjs.map +1 -1
- package/dist/functional/result/impl/result-map.mjs +18 -21
- package/dist/functional/result/impl/result-map.mjs.map +1 -1
- package/dist/functional/result/impl/result-match.mjs +17 -21
- package/dist/functional/result/impl/result-match.mjs.map +1 -1
- package/dist/functional/result/impl/result-ok.mjs +29 -7
- package/dist/functional/result/impl/result-ok.mjs.map +1 -1
- package/dist/functional/result/impl/result-or-else.mjs +14 -15
- package/dist/functional/result/impl/result-or-else.mjs.map +1 -1
- package/dist/functional/result/impl/result-safe-try.mjs +32 -21
- package/dist/functional/result/impl/result-safe-try.mjs.map +1 -1
- package/dist/functional/result/impl/result-safe-unwrap.mjs +40 -12
- package/dist/functional/result/impl/result-safe-unwrap.mjs.map +1 -1
- package/dist/functional/result/impl/result-swap.mjs +23 -8
- package/dist/functional/result/impl/result-swap.mjs.map +1 -1
- package/dist/functional/result/impl/result-to-optional.mjs +30 -7
- package/dist/functional/result/impl/result-to-optional.mjs.map +1 -1
- package/dist/functional/result/impl/result-unwrap-err-or.mjs +13 -14
- package/dist/functional/result/impl/result-unwrap-err-or.mjs.map +1 -1
- package/dist/functional/result/impl/result-unwrap-err-throw.mjs +43 -20
- package/dist/functional/result/impl/result-unwrap-err-throw.mjs.map +1 -1
- package/dist/functional/result/impl/result-unwrap-err.mjs +33 -8
- package/dist/functional/result/impl/result-unwrap-err.mjs.map +1 -1
- package/dist/functional/result/impl/result-unwrap-ok-or.mjs +13 -14
- package/dist/functional/result/impl/result-unwrap-ok-or.mjs.map +1 -1
- package/dist/functional/result/impl/result-unwrap-ok.mjs +6 -9
- package/dist/functional/result/impl/result-unwrap-ok.mjs.map +1 -1
- package/dist/functional/result/impl/result-unwrap-throw.mjs +38 -11
- package/dist/functional/result/impl/result-unwrap-throw.mjs.map +1 -1
- package/dist/functional/result/impl/result-zip.mjs +35 -5
- package/dist/functional/result/impl/result-zip.mjs.map +1 -1
- package/dist/functional/result/impl/tag.mjs +4 -5
- package/dist/functional/result/impl/tag.mjs.map +1 -1
- package/dist/functional/result/impl/types.mjs +2 -2
- package/dist/functional/result/impl/types.mjs.map +1 -1
- package/dist/functional/result/index.mjs +2 -3
- package/dist/functional/result/index.mjs.map +1 -1
- package/dist/functional/result/result.mjs +2 -3
- package/dist/functional/result/result.mjs.map +1 -1
- package/dist/functional/ternary-result/impl/index.mjs +29 -28
- package/dist/functional/ternary-result/impl/index.mjs.map +1 -1
- package/dist/functional/ternary-result/impl/tag.mjs +6 -6
- package/dist/functional/ternary-result/impl/tag.mjs.map +1 -1
- package/dist/functional/ternary-result/impl/ternary-result-err.mjs +17 -7
- package/dist/functional/ternary-result/impl/ternary-result-err.mjs.map +1 -1
- package/dist/functional/ternary-result/impl/ternary-result-expect-to-be.mjs +15 -18
- package/dist/functional/ternary-result/impl/ternary-result-expect-to-be.mjs.map +1 -1
- package/dist/functional/ternary-result/impl/ternary-result-flat-map.mjs +28 -32
- package/dist/functional/ternary-result/impl/ternary-result-flat-map.mjs.map +1 -1
- package/dist/functional/ternary-result/impl/ternary-result-fold.mjs +24 -26
- package/dist/functional/ternary-result/impl/ternary-result-fold.mjs.map +1 -1
- package/dist/functional/ternary-result/impl/ternary-result-from-promise.mjs +21 -8
- package/dist/functional/ternary-result/impl/ternary-result-from-promise.mjs.map +1 -1
- package/dist/functional/ternary-result/impl/ternary-result-from-throwable.mjs +28 -13
- package/dist/functional/ternary-result/impl/ternary-result-from-throwable.mjs.map +1 -1
- package/dist/functional/ternary-result/impl/ternary-result-is-err.mjs +19 -5
- package/dist/functional/ternary-result/impl/ternary-result-is-err.mjs.map +1 -1
- package/dist/functional/ternary-result/impl/ternary-result-is-ok.mjs +21 -5
- package/dist/functional/ternary-result/impl/ternary-result-is-ok.mjs.map +1 -1
- package/dist/functional/ternary-result/impl/ternary-result-is-ternary-result.mjs +28 -8
- package/dist/functional/ternary-result/impl/ternary-result-is-ternary-result.mjs.map +1 -1
- package/dist/functional/ternary-result/impl/ternary-result-is-warn.mjs +20 -5
- package/dist/functional/ternary-result/impl/ternary-result-is-warn.mjs.map +1 -1
- package/dist/functional/ternary-result/impl/ternary-result-map-err.mjs +17 -18
- package/dist/functional/ternary-result/impl/ternary-result-map-err.mjs.map +1 -1
- package/dist/functional/ternary-result/impl/ternary-result-map-warn.mjs +20 -23
- package/dist/functional/ternary-result/impl/ternary-result-map-warn.mjs.map +1 -1
- package/dist/functional/ternary-result/impl/ternary-result-map.mjs +24 -26
- package/dist/functional/ternary-result/impl/ternary-result-map.mjs.map +1 -1
- package/dist/functional/ternary-result/impl/ternary-result-ok.mjs +18 -7
- package/dist/functional/ternary-result/impl/ternary-result-ok.mjs.map +1 -1
- package/dist/functional/ternary-result/impl/ternary-result-or-else.mjs +11 -14
- package/dist/functional/ternary-result/impl/ternary-result-or-else.mjs.map +1 -1
- package/dist/functional/ternary-result/impl/ternary-result-to-optional.mjs +24 -10
- package/dist/functional/ternary-result/impl/ternary-result-to-optional.mjs.map +1 -1
- package/dist/functional/ternary-result/impl/ternary-result-unwrap-err-or.mjs +11 -14
- package/dist/functional/ternary-result/impl/ternary-result-unwrap-err-or.mjs.map +1 -1
- package/dist/functional/ternary-result/impl/ternary-result-unwrap-err-throw.mjs +30 -19
- package/dist/functional/ternary-result/impl/ternary-result-unwrap-err-throw.mjs.map +1 -1
- package/dist/functional/ternary-result/impl/ternary-result-unwrap-err.mjs +20 -8
- package/dist/functional/ternary-result/impl/ternary-result-unwrap-err.mjs.map +1 -1
- package/dist/functional/ternary-result/impl/ternary-result-unwrap-ok-or.mjs +11 -14
- package/dist/functional/ternary-result/impl/ternary-result-unwrap-ok-or.mjs.map +1 -1
- package/dist/functional/ternary-result/impl/ternary-result-unwrap-ok.mjs +7 -9
- package/dist/functional/ternary-result/impl/ternary-result-unwrap-ok.mjs.map +1 -1
- package/dist/functional/ternary-result/impl/ternary-result-unwrap-throw.mjs +30 -22
- package/dist/functional/ternary-result/impl/ternary-result-unwrap-throw.mjs.map +1 -1
- package/dist/functional/ternary-result/impl/ternary-result-unwrap-warn-or.mjs +11 -14
- package/dist/functional/ternary-result/impl/ternary-result-unwrap-warn-or.mjs.map +1 -1
- package/dist/functional/ternary-result/impl/ternary-result-unwrap-warn-throw.mjs +27 -17
- package/dist/functional/ternary-result/impl/ternary-result-unwrap-warn-throw.mjs.map +1 -1
- package/dist/functional/ternary-result/impl/ternary-result-unwrap-warn.mjs +20 -8
- package/dist/functional/ternary-result/impl/ternary-result-unwrap-warn.mjs.map +1 -1
- package/dist/functional/ternary-result/impl/ternary-result-warn.mjs +21 -8
- package/dist/functional/ternary-result/impl/ternary-result-warn.mjs.map +1 -1
- package/dist/functional/ternary-result/impl/ternary-result-zip.mjs +47 -19
- package/dist/functional/ternary-result/impl/ternary-result-zip.mjs.map +1 -1
- package/dist/functional/ternary-result/impl/types.mjs +2 -2
- package/dist/functional/ternary-result/impl/types.mjs.map +1 -1
- package/dist/functional/ternary-result/impl/variant-name.mjs +12 -14
- package/dist/functional/ternary-result/impl/variant-name.mjs.map +1 -1
- package/dist/functional/ternary-result/index.mjs +2 -3
- package/dist/functional/ternary-result/index.mjs.map +1 -1
- package/dist/functional/ternary-result/ternary-result.mjs +2 -3
- package/dist/functional/ternary-result/ternary-result.mjs.map +1 -1
- package/dist/guard/has-key.mjs +43 -4
- package/dist/guard/has-key.mjs.map +1 -1
- package/dist/guard/index.mjs +8 -8
- package/dist/guard/index.mjs.map +1 -1
- package/dist/guard/is-non-empty-string.mjs +39 -4
- package/dist/guard/is-non-empty-string.mjs.map +1 -1
- package/dist/guard/is-non-null-object.mjs +36 -4
- package/dist/guard/is-non-null-object.mjs.map +1 -1
- package/dist/guard/is-primitive.mjs +46 -15
- package/dist/guard/is-primitive.mjs.map +1 -1
- package/dist/guard/is-record.mjs +89 -6
- package/dist/guard/is-record.mjs.map +1 -1
- package/dist/guard/is-type.mjs +404 -19
- package/dist/guard/is-type.mjs.map +1 -1
- package/dist/guard/key-is-in.mjs +42 -4
- package/dist/guard/key-is-in.mjs.map +1 -1
- package/dist/index.mjs +12 -65
- package/dist/index.mjs.map +1 -1
- package/dist/iterator/index.mjs +2 -2
- package/dist/iterator/index.mjs.map +1 -1
- package/dist/iterator/range.mjs +19 -57
- package/dist/iterator/range.mjs.map +1 -1
- package/dist/json/index.mjs +2 -2
- package/dist/json/index.mjs.map +1 -1
- package/dist/json/json.mjs +346 -105
- package/dist/json/json.mjs.map +1 -1
- package/dist/number/branded-types/finite-number.mjs +148 -137
- package/dist/number/branded-types/finite-number.mjs.map +1 -1
- package/dist/number/branded-types/index.mjs +33 -33
- package/dist/number/branded-types/index.mjs.map +1 -1
- package/dist/number/branded-types/int.mjs +245 -209
- package/dist/number/branded-types/int.mjs.map +1 -1
- package/dist/number/branded-types/int16.mjs +141 -131
- package/dist/number/branded-types/int16.mjs.map +1 -1
- package/dist/number/branded-types/int32.mjs +141 -131
- package/dist/number/branded-types/int32.mjs.map +1 -1
- package/dist/number/branded-types/negative-finite-number.mjs +155 -149
- package/dist/number/branded-types/negative-finite-number.mjs.map +1 -1
- package/dist/number/branded-types/negative-int.mjs +125 -110
- package/dist/number/branded-types/negative-int.mjs.map +1 -1
- package/dist/number/branded-types/negative-safe-int.mjs +126 -115
- package/dist/number/branded-types/negative-safe-int.mjs.map +1 -1
- package/dist/number/branded-types/non-negative-finite-number.mjs +164 -154
- package/dist/number/branded-types/non-negative-finite-number.mjs.map +1 -1
- package/dist/number/branded-types/non-negative-int16.mjs +137 -125
- package/dist/number/branded-types/non-negative-int16.mjs.map +1 -1
- package/dist/number/branded-types/non-negative-int32.mjs +137 -125
- package/dist/number/branded-types/non-negative-int32.mjs.map +1 -1
- package/dist/number/branded-types/non-positive-finite-number.mjs +143 -139
- package/dist/number/branded-types/non-positive-finite-number.mjs.map +1 -1
- package/dist/number/branded-types/non-positive-int.mjs +116 -99
- package/dist/number/branded-types/non-positive-int.mjs.map +1 -1
- package/dist/number/branded-types/non-positive-safe-int.mjs +118 -107
- package/dist/number/branded-types/non-positive-safe-int.mjs.map +1 -1
- package/dist/number/branded-types/non-zero-finite-number.mjs +144 -129
- package/dist/number/branded-types/non-zero-finite-number.mjs.map +1 -1
- package/dist/number/branded-types/non-zero-int.mjs +102 -82
- package/dist/number/branded-types/non-zero-int.mjs.map +1 -1
- package/dist/number/branded-types/non-zero-int16.mjs +118 -105
- package/dist/number/branded-types/non-zero-int16.mjs.map +1 -1
- package/dist/number/branded-types/non-zero-int32.mjs +118 -105
- package/dist/number/branded-types/non-zero-int32.mjs.map +1 -1
- package/dist/number/branded-types/non-zero-safe-int.mjs +122 -108
- package/dist/number/branded-types/non-zero-safe-int.mjs.map +1 -1
- package/dist/number/branded-types/non-zero-uint16.mjs +118 -104
- package/dist/number/branded-types/non-zero-uint16.mjs.map +1 -1
- package/dist/number/branded-types/non-zero-uint32.mjs +118 -104
- package/dist/number/branded-types/non-zero-uint32.mjs.map +1 -1
- package/dist/number/branded-types/positive-finite-number.mjs +167 -160
- package/dist/number/branded-types/positive-finite-number.mjs.map +1 -1
- package/dist/number/branded-types/positive-int.mjs +260 -224
- package/dist/number/branded-types/positive-int.mjs.map +1 -1
- package/dist/number/branded-types/positive-int16.mjs +134 -122
- package/dist/number/branded-types/positive-int16.mjs.map +1 -1
- package/dist/number/branded-types/positive-int32.mjs +134 -122
- package/dist/number/branded-types/positive-int32.mjs.map +1 -1
- package/dist/number/branded-types/positive-safe-int.mjs +292 -258
- package/dist/number/branded-types/positive-safe-int.mjs.map +1 -1
- package/dist/number/branded-types/positive-uint16.mjs +134 -122
- package/dist/number/branded-types/positive-uint16.mjs.map +1 -1
- package/dist/number/branded-types/positive-uint32.mjs +134 -122
- package/dist/number/branded-types/positive-uint32.mjs.map +1 -1
- package/dist/number/branded-types/safe-int.mjs +284 -255
- package/dist/number/branded-types/safe-int.mjs.map +1 -1
- package/dist/number/branded-types/safe-uint.mjs +135 -124
- package/dist/number/branded-types/safe-uint.mjs.map +1 -1
- package/dist/number/branded-types/uint.mjs +248 -211
- package/dist/number/branded-types/uint.mjs.map +1 -1
- package/dist/number/branded-types/uint16.mjs +132 -121
- package/dist/number/branded-types/uint16.mjs.map +1 -1
- package/dist/number/branded-types/uint32.mjs +132 -121
- package/dist/number/branded-types/uint32.mjs.map +1 -1
- package/dist/number/enum/index.mjs +3 -3
- package/dist/number/enum/index.mjs.map +1 -1
- package/dist/number/enum/int8.mjs +146 -131
- package/dist/number/enum/int8.mjs.map +1 -1
- package/dist/number/enum/uint8.mjs +133 -119
- package/dist/number/enum/uint8.mjs.map +1 -1
- package/dist/number/index.mjs +6 -37
- package/dist/number/index.mjs.map +1 -1
- package/dist/number/num-arithmetic-types.mjs +42 -1
- package/dist/number/num-arithmetic-types.mjs.map +1 -1
- package/dist/number/num.mjs +541 -83
- package/dist/number/num.mjs.map +1 -1
- package/dist/number/refined-number-utils.mjs +294 -133
- package/dist/number/refined-number-utils.mjs.map +1 -1
- package/dist/object/index.mjs +2 -2
- package/dist/object/index.mjs.map +1 -1
- package/dist/object/object.mjs +355 -202
- package/dist/object/object.mjs.map +1 -1
- package/dist/others/cast-mutable.mjs +38 -11
- package/dist/others/cast-mutable.mjs.map +1 -1
- package/dist/others/cast-readonly.mjs +37 -11
- package/dist/others/cast-readonly.mjs.map +1 -1
- package/dist/others/debounce-function.mjs +22 -11
- package/dist/others/debounce-function.mjs.map +1 -1
- package/dist/others/fast-deep-equal.mjs +70 -51
- package/dist/others/fast-deep-equal.mjs.map +1 -1
- package/dist/others/if-then.mjs +32 -5
- package/dist/others/if-then.mjs.map +1 -1
- package/dist/others/index.mjs +10 -10
- package/dist/others/index.mjs.map +1 -1
- package/dist/others/map-nullable.mjs +11 -13
- package/dist/others/map-nullable.mjs.map +1 -1
- package/dist/others/memoize-function.mjs +14 -16
- package/dist/others/memoize-function.mjs.map +1 -1
- package/dist/others/tuple.mjs +52 -4
- package/dist/others/tuple.mjs.map +1 -1
- package/dist/others/unknown-to-string.mjs +91 -47
- package/dist/others/unknown-to-string.mjs.map +1 -1
- package/dist/promise/index.mjs +2 -2
- package/dist/promise/index.mjs.map +1 -1
- package/dist/promise/promise.mjs +51 -10
- package/dist/promise/promise.mjs.map +1 -1
- package/dist/string/index.mjs +2 -2
- package/dist/string/index.mjs.map +1 -1
- package/dist/string/str.mjs +250 -83
- package/dist/string/str.mjs.map +1 -1
- package/dist/types.mjs +3 -2
- package/dist/types.mjs.map +1 -1
- package/package.json +5 -6
- package/src/array/impl/array-utils-length-constraint-preservation.test.mts +2 -2
- package/src/collections/imap-mapped.mts +4 -4
- package/src/collections/imap.mts +1 -1
- package/src/collections/imap.test.mts +1 -1
- package/src/collections/iset-mapped.mts +2 -1
- package/src/collections/iset.mts +1 -1
- package/src/functional/async-result.test.mts +3 -2
- package/src/functional/optional.test.mts +2 -1
- package/src/functional/result.test.mts +0 -2
- package/src/guard/is-non-empty-string.test.mts +2 -2
- package/src/guard/is-non-null-object.test.mts +3 -3
- package/src/guard/is-primitive.test.mts +3 -3
- package/src/guard/is-type.test.mts +3 -3
- package/src/json/json.test.mts +1 -1
- package/src/number/enum/int8.mts +1 -1
|
@@ -1,307 +1,351 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
1
|
+
import { Optional, pipe } from '../functional/index.mjs';
|
|
2
|
+
import { asUint32 } from '../number/index.mjs';
|
|
3
|
+
import { tp, unknownToString } from '../others/index.mjs';
|
|
4
|
+
/** Provides utility functions for IMapMapped. */
|
|
5
|
+
export var IMapMapped;
|
|
6
|
+
(function (IMapMapped) {
|
|
7
|
+
/**
|
|
8
|
+
* Creates a new IMapMapped instance with custom key transformation functions.
|
|
9
|
+
*
|
|
10
|
+
* This factory function creates an immutable map that can use complex objects
|
|
11
|
+
* as keys by providing bidirectional transformation functions. The `toKey`
|
|
12
|
+
* function converts your custom key type to a primitive type that can be
|
|
13
|
+
* efficiently stored, while `fromKey` reconstructs the original key type for
|
|
14
|
+
* iteration and access.
|
|
15
|
+
*
|
|
16
|
+
* **Performance:** O(n) where n is the number of entries in the iterable.
|
|
17
|
+
*
|
|
18
|
+
* @template K The type of the custom keys.
|
|
19
|
+
* @template V The type of the values.
|
|
20
|
+
* @template KM The type of the mapped primitive keys.
|
|
21
|
+
* @example
|
|
22
|
+
*
|
|
23
|
+
* ```ts
|
|
24
|
+
* type Point = Readonly<{ x: number; y: number }>;
|
|
25
|
+
*
|
|
26
|
+
* const toKey = (p: Point) => JSON.stringify(p);
|
|
27
|
+
*
|
|
28
|
+
* // eslint-disable-next-line total-functions/no-unsafe-type-assertion
|
|
29
|
+
* const fromKey = (key: string) => JSON.parse(key) as Point;
|
|
30
|
+
*
|
|
31
|
+
* const map = IMapMapped.create<Point, string, string>(
|
|
32
|
+
* [
|
|
33
|
+
* [{ x: 0, y: 0 }, 'origin'],
|
|
34
|
+
* [{ x: 1, y: 0 }, 'right'],
|
|
35
|
+
* ],
|
|
36
|
+
* toKey,
|
|
37
|
+
* fromKey,
|
|
38
|
+
* );
|
|
39
|
+
*
|
|
40
|
+
* assert.isTrue(map.size === 2);
|
|
41
|
+
*
|
|
42
|
+
* assert.deepStrictEqual(map.get({ x: 0, y: 0 }), Optional.some('origin'));
|
|
43
|
+
* ```
|
|
44
|
+
*
|
|
45
|
+
* @param iterable An iterable of key-value pairs using the custom key type.
|
|
46
|
+
* @param toKey A function that converts a custom key `K` to a primitive key
|
|
47
|
+
* `KM`. This function must be deterministic and produce unique values for
|
|
48
|
+
* unique keys.
|
|
49
|
+
* @param fromKey A function that converts a primitive key `KM` back to the
|
|
50
|
+
* custom key `K`. This should be the inverse of `toKey`.
|
|
51
|
+
* @returns A new IMapMapped instance containing all entries from the
|
|
52
|
+
* iterable.
|
|
53
|
+
*/
|
|
54
|
+
IMapMapped.create = (iterable, toKey, fromKey) => new IMapMappedClass(iterable, toKey, fromKey);
|
|
55
|
+
/**
|
|
56
|
+
* Checks if two IMapMapped instances are structurally equal.
|
|
57
|
+
*
|
|
58
|
+
* Two IMapMapped instances are considered equal if they have the same size
|
|
59
|
+
* and contain exactly the same key-value pairs. The comparison is performed
|
|
60
|
+
* on the underlying mapped keys and values, so the transformation functions
|
|
61
|
+
* themselves don't need to be identical. Values are compared using
|
|
62
|
+
* JavaScript's `===` operator.
|
|
63
|
+
*
|
|
64
|
+
* **Performance:** O(n) where n is the size of the smaller map.
|
|
65
|
+
*
|
|
66
|
+
* @template K The type of the custom keys.
|
|
67
|
+
* @template V The type of the values.
|
|
68
|
+
* @template KM The type of the mapped primitive keys.
|
|
69
|
+
* @example
|
|
70
|
+
*
|
|
71
|
+
* ```ts
|
|
72
|
+
* type Point = Readonly<{ x: number; y: number }>;
|
|
73
|
+
*
|
|
74
|
+
* const toKey = (p: Point) => JSON.stringify(p);
|
|
75
|
+
*
|
|
76
|
+
* // eslint-disable-next-line total-functions/no-unsafe-type-assertion
|
|
77
|
+
* const fromKey = (key: string) => JSON.parse(key) as Point;
|
|
78
|
+
*
|
|
79
|
+
* const first = IMapMapped.create<Point, string, string>(
|
|
80
|
+
* [
|
|
81
|
+
* [{ x: 0, y: 0 }, 'origin'],
|
|
82
|
+
* [{ x: 1, y: 0 }, 'right'],
|
|
83
|
+
* ],
|
|
84
|
+
* toKey,
|
|
85
|
+
* fromKey,
|
|
86
|
+
* );
|
|
87
|
+
*
|
|
88
|
+
* const second = IMapMapped.create<Point, string, string>(
|
|
89
|
+
* [
|
|
90
|
+
* [{ x: 1, y: 0 }, 'right'],
|
|
91
|
+
* [{ x: 0, y: 0 }, 'origin'],
|
|
92
|
+
* ],
|
|
93
|
+
* toKey,
|
|
94
|
+
* fromKey,
|
|
95
|
+
* );
|
|
96
|
+
*
|
|
97
|
+
* const third = IMapMapped.create<Point, string, string>(
|
|
98
|
+
* [[{ x: 0, y: 0 }, 'different']],
|
|
99
|
+
* toKey,
|
|
100
|
+
* fromKey,
|
|
101
|
+
* );
|
|
102
|
+
*
|
|
103
|
+
* assert.isTrue(IMapMapped.equal(first, second));
|
|
104
|
+
*
|
|
105
|
+
* assert.isFalse(IMapMapped.equal(first, third));
|
|
106
|
+
* ```
|
|
107
|
+
*
|
|
108
|
+
* @param a The first IMapMapped instance to compare.
|
|
109
|
+
* @param b The second IMapMapped instance to compare.
|
|
110
|
+
* @returns `true` if the maps contain exactly the same key-value pairs,
|
|
111
|
+
* `false` otherwise.
|
|
112
|
+
*/
|
|
113
|
+
IMapMapped.equal = (a, b) => a.size === b.size &&
|
|
114
|
+
a.every((v, k) => pipe(b.get(k)).map((bv) => Optional.isSome(bv) && bv.value === v).value);
|
|
51
115
|
})(IMapMapped || (IMapMapped = {}));
|
|
116
|
+
/**
|
|
117
|
+
* Internal class implementation for IMapMapped providing immutable map
|
|
118
|
+
* operations with key transformation.
|
|
119
|
+
*
|
|
120
|
+
* This class implements the IMapMapped interface by maintaining a JavaScript
|
|
121
|
+
* Map with primitive keys internally while exposing an API that works with
|
|
122
|
+
* custom key types. The transformation between custom and primitive keys is
|
|
123
|
+
* handled transparently through the provided `toKey` and `fromKey` functions.
|
|
124
|
+
*
|
|
125
|
+
* **Implementation Details:**
|
|
126
|
+
*
|
|
127
|
+
* - Uses ReadonlyMap<KM, V> internally where KM is the primitive key type
|
|
128
|
+
* - Stores transformation functions for bidirectional key conversion
|
|
129
|
+
* - Implements copy-on-write semantics for efficiency
|
|
130
|
+
* - Provides optional debug messaging for development
|
|
131
|
+
*
|
|
132
|
+
* @template K The type of the custom keys.
|
|
133
|
+
* @template V The type of the values.
|
|
134
|
+
* @template KM The type of the mapped primitive keys.
|
|
135
|
+
* @implements IMapMapped
|
|
136
|
+
* @implements Iterable
|
|
137
|
+
* @internal This class should not be used directly. Use IMapMapped.create() instead.
|
|
138
|
+
*/
|
|
52
139
|
class IMapMappedClass {
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
}
|
|
76
|
-
/** @inheritdoc */
|
|
77
|
-
get size() {
|
|
78
|
-
return asUint32(this.#map.size);
|
|
79
|
-
}
|
|
80
|
-
/** @inheritdoc */
|
|
81
|
-
has(key) {
|
|
82
|
-
return this.#map.has(this.#toKey(key));
|
|
83
|
-
}
|
|
84
|
-
/** @inheritdoc */
|
|
85
|
-
get(key) {
|
|
86
|
-
if (!this.has(key)) return none;
|
|
87
|
-
return some(this.#map.get(this.#toKey(key)));
|
|
88
|
-
}
|
|
89
|
-
/** @inheritdoc */
|
|
90
|
-
every(predicate) {
|
|
91
|
-
for (const [k, v] of this.entries()) {
|
|
92
|
-
if (!predicate(v, k)) return false;
|
|
140
|
+
#map;
|
|
141
|
+
#toKey;
|
|
142
|
+
#fromKey;
|
|
143
|
+
#showNotFoundMessage;
|
|
144
|
+
/**
|
|
145
|
+
* Constructs an IMapMappedClass instance with custom key transformation.
|
|
146
|
+
*
|
|
147
|
+
* @param iterable An iterable of key-value pairs using the custom key type K.
|
|
148
|
+
* @param toKey A function that converts a custom key K to a primitive key KM.
|
|
149
|
+
* Must be deterministic and produce unique values for unique keys.
|
|
150
|
+
* @param fromKey A function that converts a primitive key KM back to the
|
|
151
|
+
* custom key K. Should be the inverse of the toKey function.
|
|
152
|
+
* @param showNotFoundMessage Whether to log warning messages when operations
|
|
153
|
+
* are performed on non-existent keys. Useful for debugging. Defaults to
|
|
154
|
+
* false for production use.
|
|
155
|
+
* @internal Use IMapMapped.create() instead of calling this constructor directly.
|
|
156
|
+
*/
|
|
157
|
+
constructor(iterable, toKey, fromKey, showNotFoundMessage = false) {
|
|
158
|
+
this.#map = new Map(Array.from(iterable, ([k, v]) => [toKey(k), v]));
|
|
159
|
+
this.#toKey = toKey;
|
|
160
|
+
this.#fromKey = fromKey;
|
|
161
|
+
this.#showNotFoundMessage = showNotFoundMessage;
|
|
93
162
|
}
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
some(predicate) {
|
|
98
|
-
for (const [k, v] of this.entries()) {
|
|
99
|
-
if (predicate(v, k)) return true;
|
|
163
|
+
/** @inheritdoc */
|
|
164
|
+
get size() {
|
|
165
|
+
return asUint32(this.#map.size);
|
|
100
166
|
}
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
if (!this.has(key)) {
|
|
106
|
-
if (this.#showNotFoundMessage) {
|
|
107
|
-
console.warn(
|
|
108
|
-
`IMapMapped.delete: key not found: ${String(this.#toKey(key))}`
|
|
109
|
-
);
|
|
110
|
-
}
|
|
111
|
-
return this;
|
|
167
|
+
/** @inheritdoc */
|
|
168
|
+
has(key) {
|
|
169
|
+
// eslint-disable-next-line total-functions/no-unsafe-type-assertion
|
|
170
|
+
return this.#map.has(this.#toKey(key));
|
|
112
171
|
}
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
}
|
|
120
|
-
/** @inheritdoc */
|
|
121
|
-
set(key, value) {
|
|
122
|
-
const curr = this.get(key);
|
|
123
|
-
if (isSome(curr) && value === curr.value) return this;
|
|
124
|
-
const keyMapped = this.#toKey(key);
|
|
125
|
-
if (!this.has(key)) {
|
|
126
|
-
return IMapMapped.create(
|
|
127
|
-
[...this.#map, tp(keyMapped, value)].map(
|
|
128
|
-
([km, v]) => tp(this.#fromKey(km), v)
|
|
129
|
-
),
|
|
130
|
-
this.#toKey,
|
|
131
|
-
this.#fromKey
|
|
132
|
-
);
|
|
172
|
+
/** @inheritdoc */
|
|
173
|
+
get(key) {
|
|
174
|
+
if (!this.has(key))
|
|
175
|
+
return Optional.none;
|
|
176
|
+
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion, total-functions/no-unsafe-type-assertion
|
|
177
|
+
return Optional.some(this.#map.get(this.#toKey(key)));
|
|
133
178
|
}
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
this
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
`IMapMapped.update: key not found: ${String(this.#toKey(key))}`
|
|
150
|
-
);
|
|
151
|
-
}
|
|
152
|
-
return this;
|
|
179
|
+
/** @inheritdoc */
|
|
180
|
+
every(predicate) {
|
|
181
|
+
for (const [k, v] of this.entries()) {
|
|
182
|
+
if (!predicate(v, k))
|
|
183
|
+
return false;
|
|
184
|
+
}
|
|
185
|
+
return true;
|
|
186
|
+
}
|
|
187
|
+
/** @inheritdoc */
|
|
188
|
+
some(predicate) {
|
|
189
|
+
for (const [k, v] of this.entries()) {
|
|
190
|
+
if (predicate(v, k))
|
|
191
|
+
return true;
|
|
192
|
+
}
|
|
193
|
+
return false;
|
|
153
194
|
}
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
this.#map,
|
|
158
|
-
([km, v]) => tp(
|
|
159
|
-
this.#fromKey(km),
|
|
160
|
-
Object.is(km, keyMapped) ? updater(curr.value) : v
|
|
161
|
-
)
|
|
162
|
-
),
|
|
163
|
-
this.#toKey,
|
|
164
|
-
this.#fromKey
|
|
165
|
-
);
|
|
166
|
-
}
|
|
167
|
-
/** @inheritdoc */
|
|
168
|
-
withMutations(actions) {
|
|
169
|
-
const mut_result = new Map(this.#map);
|
|
170
|
-
const updateFn = (action) => {
|
|
171
|
-
const key = this.#toKey(action.key);
|
|
172
|
-
switch (action.type) {
|
|
173
|
-
case "delete":
|
|
174
|
-
mut_result.delete(key);
|
|
175
|
-
break;
|
|
176
|
-
case "set":
|
|
177
|
-
mut_result.set(key, action.value);
|
|
178
|
-
break;
|
|
179
|
-
case "update": {
|
|
180
|
-
const curr = mut_result.get(key);
|
|
181
|
-
if (curr === void 0 || !mut_result.has(key)) {
|
|
195
|
+
/** @inheritdoc */
|
|
196
|
+
delete(key) {
|
|
197
|
+
if (!this.has(key)) {
|
|
182
198
|
if (this.#showNotFoundMessage) {
|
|
183
|
-
|
|
184
|
-
`IMapMapped.withMutations::update: key not found: ${String(key)}`
|
|
185
|
-
);
|
|
199
|
+
console.warn(`IMapMapped.delete: key not found: ${unknownToString(this.#toKey(key))}`);
|
|
186
200
|
}
|
|
187
|
-
|
|
188
|
-
}
|
|
189
|
-
mut_result.set(key, action.updater(curr));
|
|
190
|
-
break;
|
|
201
|
+
return this;
|
|
191
202
|
}
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
203
|
+
const keyMapped = this.#toKey(key);
|
|
204
|
+
return IMapMapped.create(Array.from(this.#map)
|
|
205
|
+
.filter(([km]) => !Object.is(km, keyMapped))
|
|
206
|
+
.map(([km, v]) => tp(this.#fromKey(km), v)), this.#toKey, this.#fromKey);
|
|
207
|
+
}
|
|
208
|
+
/** @inheritdoc */
|
|
209
|
+
set(key, value) {
|
|
210
|
+
const curr = this.get(key);
|
|
211
|
+
if (Optional.isSome(curr) && value === curr.value)
|
|
212
|
+
return this;
|
|
213
|
+
const keyMapped = this.#toKey(key);
|
|
214
|
+
if (!this.has(key)) {
|
|
215
|
+
return IMapMapped.create([...this.#map, tp(keyMapped, value)].map(([km, v]) => tp(this.#fromKey(km), v)), this.#toKey, this.#fromKey);
|
|
216
|
+
}
|
|
217
|
+
return IMapMapped.create(Array.from(this.#map, ([km, v]) => tp(this.#fromKey(km), Object.is(km, keyMapped) ? value : v)), this.#toKey, this.#fromKey);
|
|
218
|
+
}
|
|
219
|
+
/** @inheritdoc */
|
|
220
|
+
update(key, updater) {
|
|
221
|
+
const curr = this.get(key);
|
|
222
|
+
if (Optional.isNone(curr)) {
|
|
223
|
+
if (this.#showNotFoundMessage) {
|
|
224
|
+
console.warn(`IMapMapped.update: key not found: ${unknownToString(this.#toKey(key))}`);
|
|
225
|
+
}
|
|
226
|
+
return this;
|
|
227
|
+
}
|
|
228
|
+
const keyMapped = this.#toKey(key);
|
|
229
|
+
return IMapMapped.create(Array.from(this.#map, ([km, v]) => tp(this.#fromKey(km), Object.is(km, keyMapped) ? updater(curr.value) : v)), this.#toKey, this.#fromKey);
|
|
230
|
+
}
|
|
231
|
+
/** @inheritdoc */
|
|
232
|
+
withMutations(actions) {
|
|
233
|
+
const mut_result = new Map(this.#map);
|
|
234
|
+
const updateFn = (action) => {
|
|
235
|
+
const key = this.#toKey(action.key);
|
|
236
|
+
switch (action.type) {
|
|
237
|
+
case 'delete':
|
|
238
|
+
mut_result.delete(key);
|
|
239
|
+
break;
|
|
240
|
+
case 'set':
|
|
241
|
+
mut_result.set(key, action.value);
|
|
242
|
+
break;
|
|
243
|
+
case 'update': {
|
|
244
|
+
const curr = mut_result.get(key);
|
|
245
|
+
if (curr === undefined || !mut_result.has(key)) {
|
|
246
|
+
if (this.#showNotFoundMessage) {
|
|
247
|
+
console.warn(`IMapMapped.withMutations::update: key not found: ${unknownToString(key)}`);
|
|
248
|
+
}
|
|
249
|
+
break;
|
|
250
|
+
}
|
|
251
|
+
mut_result.set(key, action.updater(curr));
|
|
252
|
+
break;
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
};
|
|
256
|
+
for (const action of actions) {
|
|
257
|
+
updateFn(action);
|
|
258
|
+
}
|
|
259
|
+
return IMapMapped.create(Array.from(mut_result, ([k, v]) => [this.#fromKey(k), v]), this.#toKey, this.#fromKey);
|
|
260
|
+
}
|
|
261
|
+
/** @inheritdoc */
|
|
262
|
+
map(mapFn) {
|
|
263
|
+
return IMapMapped.create(this.toArray().map(([k, v]) => tp(k, mapFn(v, k))), this.#toKey, this.#fromKey);
|
|
264
|
+
}
|
|
265
|
+
/** @inheritdoc */
|
|
266
|
+
mapKeys(mapFn) {
|
|
267
|
+
return IMapMapped.create(this.toArray().map(([k, v]) => tp(mapFn(k), v)), this.#toKey, this.#fromKey);
|
|
268
|
+
}
|
|
269
|
+
/** @inheritdoc */
|
|
270
|
+
mapEntries(mapFn) {
|
|
271
|
+
return IMapMapped.create(this.toArray().map(mapFn), this.#toKey, this.#fromKey);
|
|
272
|
+
}
|
|
273
|
+
/** @inheritdoc */
|
|
274
|
+
forEach(callbackfn) {
|
|
275
|
+
for (const [km, value] of this.#map) {
|
|
276
|
+
callbackfn(value, this.#fromKey(km));
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
/**
|
|
280
|
+
* @example
|
|
281
|
+
*
|
|
282
|
+
* ```ts
|
|
283
|
+
* type Point = Readonly<{ x: number; y: number }>;
|
|
284
|
+
*
|
|
285
|
+
* const toKey = (p: Point) => JSON.stringify(p);
|
|
286
|
+
*
|
|
287
|
+
* // eslint-disable-next-line total-functions/no-unsafe-type-assertion
|
|
288
|
+
* const fromKey = (key: string) => JSON.parse(key) as Point;
|
|
289
|
+
*
|
|
290
|
+
* const map = IMapMapped.create<Point, string, string>(
|
|
291
|
+
* [
|
|
292
|
+
* [{ x: 0, y: 0 }, 'origin'],
|
|
293
|
+
* [{ x: 1, y: 0 }, 'right'],
|
|
294
|
+
* ],
|
|
295
|
+
* toKey,
|
|
296
|
+
* fromKey,
|
|
297
|
+
* );
|
|
298
|
+
*
|
|
299
|
+
* const collected = Array.from(map);
|
|
300
|
+
*
|
|
301
|
+
* assert.deepStrictEqual(collected, [
|
|
302
|
+
* [{ x: 0, y: 0 }, 'origin'],
|
|
303
|
+
* [{ x: 1, y: 0 }, 'right'],
|
|
304
|
+
* ]);
|
|
305
|
+
* ```
|
|
306
|
+
*
|
|
307
|
+
* @inheritdoc
|
|
308
|
+
*/
|
|
309
|
+
*[Symbol.iterator]() {
|
|
310
|
+
for (const e of this.entries()) {
|
|
311
|
+
yield e;
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
/** @inheritdoc */
|
|
315
|
+
*keys() {
|
|
316
|
+
for (const km of this.#map.keys()) {
|
|
317
|
+
yield this.#fromKey(km);
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
/** @inheritdoc */
|
|
321
|
+
values() {
|
|
322
|
+
return this.#map.values();
|
|
323
|
+
}
|
|
324
|
+
/** @inheritdoc */
|
|
325
|
+
*entries() {
|
|
326
|
+
for (const [km, v] of this.#map) {
|
|
327
|
+
yield [this.#fromKey(km), v];
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
/** @inheritdoc */
|
|
331
|
+
toKeysArray() {
|
|
332
|
+
return Array.from(this.keys());
|
|
196
333
|
}
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
this.#fromKey
|
|
201
|
-
);
|
|
202
|
-
}
|
|
203
|
-
/** @inheritdoc */
|
|
204
|
-
map(mapFn) {
|
|
205
|
-
return IMapMapped.create(
|
|
206
|
-
this.toArray().map(([k, v]) => tp(k, mapFn(v, k))),
|
|
207
|
-
this.#toKey,
|
|
208
|
-
this.#fromKey
|
|
209
|
-
);
|
|
210
|
-
}
|
|
211
|
-
/** @inheritdoc */
|
|
212
|
-
mapKeys(mapFn) {
|
|
213
|
-
return IMapMapped.create(
|
|
214
|
-
this.toArray().map(([k, v]) => tp(mapFn(k), v)),
|
|
215
|
-
this.#toKey,
|
|
216
|
-
this.#fromKey
|
|
217
|
-
);
|
|
218
|
-
}
|
|
219
|
-
/** @inheritdoc */
|
|
220
|
-
mapEntries(mapFn) {
|
|
221
|
-
return IMapMapped.create(
|
|
222
|
-
this.toArray().map(mapFn),
|
|
223
|
-
this.#toKey,
|
|
224
|
-
this.#fromKey
|
|
225
|
-
);
|
|
226
|
-
}
|
|
227
|
-
/** @inheritdoc */
|
|
228
|
-
forEach(callbackfn) {
|
|
229
|
-
for (const [km, value] of this.#map) {
|
|
230
|
-
callbackfn(value, this.#fromKey(km));
|
|
334
|
+
/** @inheritdoc */
|
|
335
|
+
toValuesArray() {
|
|
336
|
+
return Array.from(this.values());
|
|
231
337
|
}
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
*
|
|
236
|
-
* ```ts
|
|
237
|
-
* type Point = Readonly<{ x: number; y: number }>;
|
|
238
|
-
*
|
|
239
|
-
* const toKey = (p: Point) => JSON.stringify(p);
|
|
240
|
-
*
|
|
241
|
-
* // eslint-disable-next-line total-functions/no-unsafe-type-assertion
|
|
242
|
-
* const fromKey = (key: string) => JSON.parse(key) as Point;
|
|
243
|
-
*
|
|
244
|
-
* const map = IMapMapped.create<Point, string, string>(
|
|
245
|
-
* [
|
|
246
|
-
* [{ x: 0, y: 0 }, 'origin'],
|
|
247
|
-
* [{ x: 1, y: 0 }, 'right'],
|
|
248
|
-
* ],
|
|
249
|
-
* toKey,
|
|
250
|
-
* fromKey,
|
|
251
|
-
* );
|
|
252
|
-
*
|
|
253
|
-
* const collected = Array.from(map);
|
|
254
|
-
*
|
|
255
|
-
* assert.deepStrictEqual(collected, [
|
|
256
|
-
* [{ x: 0, y: 0 }, 'origin'],
|
|
257
|
-
* [{ x: 1, y: 0 }, 'right'],
|
|
258
|
-
* ]);
|
|
259
|
-
* ```
|
|
260
|
-
*
|
|
261
|
-
* @inheritdoc
|
|
262
|
-
*/
|
|
263
|
-
*[Symbol.iterator]() {
|
|
264
|
-
for (const e of this.entries()) {
|
|
265
|
-
yield e;
|
|
338
|
+
/** @inheritdoc */
|
|
339
|
+
toEntriesArray() {
|
|
340
|
+
return Array.from(this.entries());
|
|
266
341
|
}
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
for (const km of this.#map.keys()) {
|
|
271
|
-
yield this.#fromKey(km);
|
|
342
|
+
/** @inheritdoc */
|
|
343
|
+
toArray() {
|
|
344
|
+
return Array.from(this.entries());
|
|
272
345
|
}
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
return this.#map.values();
|
|
277
|
-
}
|
|
278
|
-
/** @inheritdoc */
|
|
279
|
-
*entries() {
|
|
280
|
-
for (const [km, v] of this.#map) {
|
|
281
|
-
yield [this.#fromKey(km), v];
|
|
346
|
+
/** @inheritdoc */
|
|
347
|
+
toRawMap() {
|
|
348
|
+
return this.#map;
|
|
282
349
|
}
|
|
283
|
-
}
|
|
284
|
-
/** @inheritdoc */
|
|
285
|
-
toKeysArray() {
|
|
286
|
-
return Array.from(this.keys());
|
|
287
|
-
}
|
|
288
|
-
/** @inheritdoc */
|
|
289
|
-
toValuesArray() {
|
|
290
|
-
return Array.from(this.values());
|
|
291
|
-
}
|
|
292
|
-
/** @inheritdoc */
|
|
293
|
-
toEntriesArray() {
|
|
294
|
-
return Array.from(this.entries());
|
|
295
|
-
}
|
|
296
|
-
/** @inheritdoc */
|
|
297
|
-
toArray() {
|
|
298
|
-
return Array.from(this.entries());
|
|
299
|
-
}
|
|
300
|
-
/** @inheritdoc */
|
|
301
|
-
toRawMap() {
|
|
302
|
-
return this.#map;
|
|
303
|
-
}
|
|
304
350
|
}
|
|
305
|
-
|
|
306
|
-
export { IMapMapped };
|
|
307
|
-
//# sourceMappingURL=imap-mapped.mjs.map
|
|
351
|
+
//# sourceMappingURL=imap-mapped.mjs.map
|