ts-data-forge 3.3.0 → 4.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 +37 -13
- package/dist/array/impl/array-utils-creation.d.mts +116 -0
- package/dist/array/impl/array-utils-creation.d.mts.map +1 -0
- package/dist/array/impl/array-utils-creation.mjs +110 -0
- package/dist/array/impl/array-utils-creation.mjs.map +1 -0
- package/dist/array/impl/array-utils-element-access.d.mts +60 -0
- package/dist/array/impl/array-utils-element-access.d.mts.map +1 -0
- package/dist/array/impl/array-utils-element-access.mjs +66 -0
- package/dist/array/impl/array-utils-element-access.mjs.map +1 -0
- package/dist/array/impl/array-utils-iterators.d.mts +59 -0
- package/dist/array/impl/array-utils-iterators.d.mts.map +1 -0
- package/dist/array/impl/array-utils-iterators.mjs +104 -0
- package/dist/array/impl/array-utils-iterators.mjs.map +1 -0
- package/dist/array/impl/array-utils-modification.d.mts +154 -0
- package/dist/array/impl/array-utils-modification.d.mts.map +1 -0
- package/dist/array/impl/array-utils-modification.mjs +139 -0
- package/dist/array/impl/array-utils-modification.mjs.map +1 -0
- package/dist/array/impl/array-utils-reducing-value.d.mts +213 -0
- package/dist/array/impl/array-utils-reducing-value.d.mts.map +1 -0
- package/dist/array/impl/array-utils-reducing-value.mjs +162 -0
- package/dist/array/impl/array-utils-reducing-value.mjs.map +1 -0
- package/dist/array/impl/array-utils-search.d.mts +178 -0
- package/dist/array/impl/array-utils-search.d.mts.map +1 -0
- package/dist/array/impl/array-utils-search.mjs +153 -0
- package/dist/array/impl/array-utils-search.mjs.map +1 -0
- package/dist/array/impl/array-utils-set-op.d.mts +100 -0
- package/dist/array/impl/array-utils-set-op.d.mts.map +1 -0
- package/dist/array/impl/array-utils-set-op.mjs +137 -0
- package/dist/array/impl/array-utils-set-op.mjs.map +1 -0
- package/dist/array/impl/array-utils-size.d.mts +24 -0
- package/dist/array/impl/array-utils-size.d.mts.map +1 -0
- package/dist/array/impl/array-utils-size.mjs +28 -0
- package/dist/array/impl/array-utils-size.mjs.map +1 -0
- package/dist/array/impl/array-utils-slice-clamped.d.mts +18 -0
- package/dist/array/impl/array-utils-slice-clamped.d.mts.map +1 -0
- package/dist/array/impl/array-utils-slice-clamped.mjs +49 -0
- package/dist/array/impl/array-utils-slice-clamped.mjs.map +1 -0
- package/dist/array/impl/array-utils-slicing.d.mts +120 -0
- package/dist/array/impl/array-utils-slicing.d.mts.map +1 -0
- package/dist/array/impl/array-utils-slicing.mjs +140 -0
- package/dist/array/impl/array-utils-slicing.mjs.map +1 -0
- package/dist/array/impl/array-utils-transformation.d.mts +348 -0
- package/dist/array/impl/array-utils-transformation.d.mts.map +1 -0
- package/dist/array/impl/array-utils-transformation.mjs +329 -0
- package/dist/array/impl/array-utils-transformation.mjs.map +1 -0
- package/dist/array/impl/array-utils-validation.d.mts +149 -0
- package/dist/array/impl/array-utils-validation.d.mts.map +1 -0
- package/dist/array/impl/array-utils-validation.mjs +166 -0
- package/dist/array/impl/array-utils-validation.mjs.map +1 -0
- package/dist/array/impl/index.d.mts +13 -0
- package/dist/array/impl/index.d.mts.map +1 -0
- package/dist/array/impl/index.mjs +13 -0
- package/dist/array/impl/index.mjs.map +1 -0
- package/dist/array/index.d.mts +1 -1
- package/dist/array/index.d.mts.map +1 -1
- package/dist/array/index.mjs +2 -1
- package/dist/array/index.mjs.map +1 -1
- package/dist/collections/imap-mapped.d.mts +83 -254
- package/dist/collections/imap-mapped.d.mts.map +1 -1
- package/dist/collections/imap-mapped.mjs +40 -170
- package/dist/collections/imap-mapped.mjs.map +1 -1
- package/dist/collections/imap.d.mts +436 -164
- package/dist/collections/imap.d.mts.map +1 -1
- package/dist/collections/imap.mjs +83 -101
- package/dist/collections/imap.mjs.map +1 -1
- package/dist/collections/iset-mapped.d.mts +828 -345
- package/dist/collections/iset-mapped.d.mts.map +1 -1
- package/dist/collections/iset-mapped.mjs +200 -242
- package/dist/collections/iset-mapped.mjs.map +1 -1
- package/dist/collections/iset.d.mts +397 -205
- package/dist/collections/iset.d.mts.map +1 -1
- package/dist/collections/iset.mjs +102 -184
- package/dist/collections/iset.mjs.map +1 -1
- package/dist/collections/queue.d.mts +155 -136
- package/dist/collections/queue.d.mts.map +1 -1
- package/dist/collections/queue.mjs +59 -160
- package/dist/collections/queue.mjs.map +1 -1
- package/dist/collections/stack.d.mts +154 -155
- package/dist/collections/stack.d.mts.map +1 -1
- package/dist/collections/stack.mjs +58 -207
- package/dist/collections/stack.mjs.map +1 -1
- package/dist/entry-point.d.mts +2 -0
- package/dist/entry-point.d.mts.map +1 -1
- package/dist/entry-point.mjs +8 -5
- package/dist/entry-point.mjs.map +1 -1
- package/dist/expect-type.d.mts +43 -172
- package/dist/expect-type.d.mts.map +1 -1
- package/dist/expect-type.mjs +43 -172
- package/dist/expect-type.mjs.map +1 -1
- package/dist/functional/index.d.mts +2 -2
- package/dist/functional/index.d.mts.map +1 -1
- package/dist/functional/index.mjs +4 -2
- package/dist/functional/index.mjs.map +1 -1
- package/dist/functional/match.d.mts +35 -140
- package/dist/functional/match.d.mts.map +1 -1
- package/dist/functional/match.mjs.map +1 -1
- package/dist/functional/optional/impl/index.d.mts +18 -0
- package/dist/functional/optional/impl/index.d.mts.map +1 -0
- package/dist/functional/optional/impl/index.mjs +17 -0
- package/dist/functional/optional/impl/index.mjs.map +1 -0
- package/dist/functional/optional/impl/optional-expect-to-be.d.mts +29 -0
- package/dist/functional/optional/impl/optional-expect-to-be.d.mts.map +1 -0
- package/dist/functional/optional/impl/optional-expect-to-be.mjs +25 -0
- package/dist/functional/optional/impl/optional-expect-to-be.mjs.map +1 -0
- package/dist/functional/optional/impl/optional-filter.d.mts +29 -0
- package/dist/functional/optional/impl/optional-filter.d.mts.map +1 -0
- package/dist/functional/optional/impl/optional-filter.mjs +28 -0
- package/dist/functional/optional/impl/optional-filter.mjs.map +1 -0
- package/dist/functional/optional/impl/optional-flat-map.d.mts +33 -0
- package/dist/functional/optional/impl/optional-flat-map.d.mts.map +1 -0
- package/dist/functional/optional/impl/optional-flat-map.mjs +21 -0
- package/dist/functional/optional/impl/optional-flat-map.mjs.map +1 -0
- package/dist/functional/optional/impl/optional-from-nullable.d.mts +24 -0
- package/dist/functional/optional/impl/optional-from-nullable.d.mts.map +1 -0
- package/dist/functional/optional/impl/optional-from-nullable.mjs +29 -0
- package/dist/functional/optional/impl/optional-from-nullable.mjs.map +1 -0
- package/dist/functional/optional/impl/optional-is-none.d.mts +22 -0
- package/dist/functional/optional/impl/optional-is-none.d.mts.map +1 -0
- package/dist/functional/optional/impl/optional-is-none.mjs +25 -0
- package/dist/functional/optional/impl/optional-is-none.mjs.map +1 -0
- package/dist/functional/optional/impl/optional-is-optional.d.mts +18 -0
- package/dist/functional/optional/impl/optional-is-optional.d.mts.map +1 -0
- package/dist/functional/optional/impl/optional-is-optional.mjs +27 -0
- package/dist/functional/optional/impl/optional-is-optional.mjs.map +1 -0
- package/dist/functional/optional/impl/optional-is-some.d.mts +22 -0
- package/dist/functional/optional/impl/optional-is-some.d.mts.map +1 -0
- package/dist/functional/optional/impl/optional-is-some.mjs +25 -0
- package/dist/functional/optional/impl/optional-is-some.mjs.map +1 -0
- package/dist/functional/optional/impl/optional-map.d.mts +31 -0
- package/dist/functional/optional/impl/optional-map.d.mts.map +1 -0
- package/dist/functional/optional/impl/optional-map.mjs +25 -0
- package/dist/functional/optional/impl/optional-map.mjs.map +1 -0
- package/dist/functional/optional/impl/optional-none.d.mts +16 -0
- package/dist/functional/optional/impl/optional-none.d.mts.map +1 -0
- package/dist/functional/optional/impl/optional-none.mjs +20 -0
- package/dist/functional/optional/impl/optional-none.mjs.map +1 -0
- package/dist/functional/optional/impl/optional-or-else.d.mts +35 -0
- package/dist/functional/optional/impl/optional-or-else.d.mts.map +1 -0
- package/dist/functional/optional/impl/optional-or-else.mjs +19 -0
- package/dist/functional/optional/impl/optional-or-else.mjs.map +1 -0
- package/dist/functional/optional/impl/optional-some.d.mts +19 -0
- package/dist/functional/optional/impl/optional-some.d.mts.map +1 -0
- package/dist/functional/optional/impl/optional-some.mjs +26 -0
- package/dist/functional/optional/impl/optional-some.mjs.map +1 -0
- package/dist/functional/optional/impl/optional-to-nullable.d.mts +27 -0
- package/dist/functional/optional/impl/optional-to-nullable.d.mts.map +1 -0
- package/dist/functional/optional/impl/optional-to-nullable.mjs +31 -0
- package/dist/functional/optional/impl/optional-to-nullable.mjs.map +1 -0
- package/dist/functional/optional/impl/optional-unwrap-or.d.mts +33 -0
- package/dist/functional/optional/impl/optional-unwrap-or.d.mts.map +1 -0
- package/dist/functional/optional/impl/optional-unwrap-or.mjs +19 -0
- package/dist/functional/optional/impl/optional-unwrap-or.mjs.map +1 -0
- package/dist/functional/optional/impl/optional-unwrap-throw.d.mts +29 -0
- package/dist/functional/optional/impl/optional-unwrap-throw.d.mts.map +1 -0
- package/dist/functional/optional/impl/optional-unwrap-throw.mjs +38 -0
- package/dist/functional/optional/impl/optional-unwrap-throw.mjs.map +1 -0
- package/dist/functional/optional/impl/optional-unwrap.d.mts +28 -0
- package/dist/functional/optional/impl/optional-unwrap.d.mts.map +1 -0
- package/dist/functional/optional/impl/optional-unwrap.mjs +11 -0
- package/dist/functional/optional/impl/optional-unwrap.mjs.map +1 -0
- package/dist/functional/optional/impl/optional-zip.d.mts +31 -0
- package/dist/functional/optional/impl/optional-zip.d.mts.map +1 -0
- package/dist/functional/optional/impl/optional-zip.mjs +39 -0
- package/dist/functional/optional/impl/optional-zip.mjs.map +1 -0
- package/dist/functional/optional/impl/tag.d.mts +5 -0
- package/dist/functional/optional/impl/tag.d.mts.map +1 -0
- package/dist/functional/optional/impl/tag.mjs +7 -0
- package/dist/functional/optional/impl/tag.mjs.map +1 -0
- package/dist/functional/optional/impl/types.d.mts +22 -0
- package/dist/functional/optional/impl/types.d.mts.map +1 -0
- package/dist/functional/optional/impl/types.mjs +2 -0
- package/dist/functional/optional/impl/types.mjs.map +1 -0
- package/dist/functional/optional/index.d.mts +2 -0
- package/dist/functional/optional/index.d.mts.map +1 -0
- package/dist/functional/optional/index.mjs +3 -0
- package/dist/functional/optional/index.mjs.map +1 -0
- package/dist/functional/pipe.d.mts +63 -117
- package/dist/functional/pipe.d.mts.map +1 -1
- package/dist/functional/pipe.mjs +4 -3
- package/dist/functional/pipe.mjs.map +1 -1
- package/dist/functional/result/impl/index.d.mts +24 -0
- package/dist/functional/result/impl/index.d.mts.map +1 -0
- package/dist/functional/result/impl/index.mjs +23 -0
- package/dist/functional/result/impl/index.mjs.map +1 -0
- package/dist/functional/result/impl/result-err.d.mts +25 -0
- package/dist/functional/result/impl/result-err.d.mts.map +1 -0
- package/dist/functional/result/impl/result-err.mjs +32 -0
- package/dist/functional/result/impl/result-err.mjs.map +1 -0
- package/dist/functional/result/impl/result-expect-to-be.d.mts +27 -0
- package/dist/functional/result/impl/result-expect-to-be.d.mts.map +1 -0
- package/dist/functional/result/impl/result-expect-to-be.mjs +26 -0
- package/dist/functional/result/impl/result-expect-to-be.mjs.map +1 -0
- package/dist/functional/result/impl/result-flat-map.d.mts +39 -0
- package/dist/functional/result/impl/result-flat-map.d.mts.map +1 -0
- package/dist/functional/result/impl/result-flat-map.mjs +24 -0
- package/dist/functional/result/impl/result-flat-map.mjs.map +1 -0
- package/dist/functional/result/impl/result-fold.d.mts +45 -0
- package/dist/functional/result/impl/result-fold.d.mts.map +1 -0
- package/dist/functional/result/impl/result-fold.mjs +26 -0
- package/dist/functional/result/impl/result-fold.mjs.map +1 -0
- package/dist/functional/result/impl/result-from-promise.d.mts +32 -0
- package/dist/functional/result/impl/result-from-promise.d.mts.map +1 -0
- package/dist/functional/result/impl/result-from-promise.mjs +32 -0
- package/dist/functional/result/impl/result-from-promise.mjs.map +1 -0
- package/dist/functional/result/impl/result-from-throwable.d.mts +29 -0
- package/dist/functional/result/impl/result-from-throwable.d.mts.map +1 -0
- package/dist/functional/result/impl/result-from-throwable.mjs +46 -0
- package/dist/functional/result/impl/result-from-throwable.mjs.map +1 -0
- package/dist/functional/result/impl/result-is-err.d.mts +20 -0
- package/dist/functional/result/impl/result-is-err.d.mts.map +1 -0
- package/dist/functional/result/impl/result-is-err.mjs +23 -0
- package/dist/functional/result/impl/result-is-err.mjs.map +1 -0
- package/dist/functional/result/impl/result-is-ok.d.mts +20 -0
- package/dist/functional/result/impl/result-is-ok.d.mts.map +1 -0
- package/dist/functional/result/impl/result-is-ok.mjs +23 -0
- package/dist/functional/result/impl/result-is-ok.mjs.map +1 -0
- package/dist/functional/result/impl/result-is-result.d.mts +17 -0
- package/dist/functional/result/impl/result-is-result.d.mts.map +1 -0
- package/dist/functional/result/impl/result-is-result.mjs +26 -0
- package/dist/functional/result/impl/result-is-result.mjs.map +1 -0
- package/dist/functional/result/impl/result-map-err.d.mts +33 -0
- package/dist/functional/result/impl/result-map-err.d.mts.map +1 -0
- package/dist/functional/result/impl/result-map-err.mjs +25 -0
- package/dist/functional/result/impl/result-map-err.mjs.map +1 -0
- package/dist/functional/result/impl/result-map.d.mts +34 -0
- package/dist/functional/result/impl/result-map.d.mts.map +1 -0
- package/dist/functional/result/impl/result-map.mjs +25 -0
- package/dist/functional/result/impl/result-map.mjs.map +1 -0
- package/dist/functional/result/impl/result-ok.d.mts +25 -0
- package/dist/functional/result/impl/result-ok.d.mts.map +1 -0
- package/dist/functional/result/impl/result-ok.mjs +32 -0
- package/dist/functional/result/impl/result-ok.mjs.map +1 -0
- package/dist/functional/result/impl/result-or-else.d.mts +32 -0
- package/dist/functional/result/impl/result-or-else.d.mts.map +1 -0
- package/dist/functional/result/impl/result-or-else.mjs +20 -0
- package/dist/functional/result/impl/result-or-else.mjs.map +1 -0
- package/dist/functional/result/impl/result-swap.d.mts +20 -0
- package/dist/functional/result/impl/result-swap.d.mts.map +1 -0
- package/dist/functional/result/impl/result-swap.mjs +28 -0
- package/dist/functional/result/impl/result-swap.mjs.map +1 -0
- package/dist/functional/result/impl/result-to-optional.d.mts +28 -0
- package/dist/functional/result/impl/result-to-optional.d.mts.map +1 -0
- package/dist/functional/result/impl/result-to-optional.mjs +34 -0
- package/dist/functional/result/impl/result-to-optional.mjs.map +1 -0
- package/dist/functional/result/impl/result-unwrap-err-or.d.mts +29 -0
- package/dist/functional/result/impl/result-unwrap-err-or.d.mts.map +1 -0
- package/dist/functional/result/impl/result-unwrap-err-or.mjs +20 -0
- package/dist/functional/result/impl/result-unwrap-err-or.mjs.map +1 -0
- package/dist/functional/result/impl/result-unwrap-err-throw.d.mts +30 -0
- package/dist/functional/result/impl/result-unwrap-err-throw.d.mts.map +1 -0
- package/dist/functional/result/impl/result-unwrap-err-throw.mjs +47 -0
- package/dist/functional/result/impl/result-unwrap-err-throw.mjs.map +1 -0
- package/dist/functional/result/impl/result-unwrap-err.d.mts +31 -0
- package/dist/functional/result/impl/result-unwrap-err.d.mts.map +1 -0
- package/dist/functional/result/impl/result-unwrap-err.mjs +36 -0
- package/dist/functional/result/impl/result-unwrap-err.mjs.map +1 -0
- package/dist/functional/result/impl/result-unwrap-ok-or.d.mts +29 -0
- package/dist/functional/result/impl/result-unwrap-ok-or.d.mts.map +1 -0
- package/dist/functional/result/impl/result-unwrap-ok-or.mjs +20 -0
- package/dist/functional/result/impl/result-unwrap-ok-or.mjs.map +1 -0
- package/dist/functional/result/impl/result-unwrap-ok.d.mts +23 -0
- package/dist/functional/result/impl/result-unwrap-ok.d.mts.map +1 -0
- package/dist/functional/result/impl/result-unwrap-ok.mjs +11 -0
- package/dist/functional/result/impl/result-unwrap-ok.mjs.map +1 -0
- package/dist/functional/result/impl/result-unwrap-throw.d.mts +30 -0
- package/dist/functional/result/impl/result-unwrap-throw.d.mts.map +1 -0
- package/dist/functional/result/impl/result-unwrap-throw.mjs +41 -0
- package/dist/functional/result/impl/result-unwrap-throw.mjs.map +1 -0
- package/dist/functional/result/impl/result-zip.d.mts +29 -0
- package/dist/functional/result/impl/result-zip.d.mts.map +1 -0
- package/dist/functional/result/impl/result-zip.mjs +38 -0
- package/dist/functional/result/impl/result-zip.mjs.map +1 -0
- package/dist/functional/result/impl/tag.d.mts +5 -0
- package/dist/functional/result/impl/tag.d.mts.map +1 -0
- package/dist/functional/result/impl/tag.mjs +7 -0
- package/dist/functional/result/impl/tag.mjs.map +1 -0
- package/dist/functional/result/impl/types.d.mts +29 -0
- package/dist/functional/result/impl/types.d.mts.map +1 -0
- package/dist/functional/result/impl/types.mjs +2 -0
- package/dist/functional/result/impl/types.mjs.map +1 -0
- package/dist/functional/result/index.d.mts +2 -0
- package/dist/functional/result/index.d.mts.map +1 -0
- package/dist/functional/result/index.mjs +3 -0
- package/dist/functional/result/index.mjs.map +1 -0
- package/dist/globals.d.mts +95 -5
- package/dist/guard/has-key.d.mts +23 -74
- package/dist/guard/has-key.d.mts.map +1 -1
- package/dist/guard/has-key.mjs +23 -74
- package/dist/guard/has-key.mjs.map +1 -1
- package/dist/guard/is-non-empty-string.d.mts +20 -87
- package/dist/guard/is-non-empty-string.d.mts.map +1 -1
- package/dist/guard/is-non-empty-string.mjs +20 -87
- package/dist/guard/is-non-empty-string.mjs.map +1 -1
- package/dist/guard/is-non-null-object.d.mts +14 -84
- package/dist/guard/is-non-null-object.d.mts.map +1 -1
- package/dist/guard/is-non-null-object.mjs +14 -84
- package/dist/guard/is-non-null-object.mjs.map +1 -1
- package/dist/guard/is-primitive.d.mts +13 -126
- package/dist/guard/is-primitive.d.mts.map +1 -1
- package/dist/guard/is-primitive.mjs +13 -126
- package/dist/guard/is-primitive.mjs.map +1 -1
- package/dist/guard/is-record.d.mts +21 -132
- package/dist/guard/is-record.d.mts.map +1 -1
- package/dist/guard/is-record.mjs +21 -132
- package/dist/guard/is-record.mjs.map +1 -1
- package/dist/guard/is-type.d.mts +201 -238
- package/dist/guard/is-type.d.mts.map +1 -1
- package/dist/guard/is-type.mjs +201 -238
- package/dist/guard/is-type.mjs.map +1 -1
- package/dist/guard/key-is-in.d.mts +22 -139
- package/dist/guard/key-is-in.d.mts.map +1 -1
- package/dist/guard/key-is-in.mjs +22 -139
- package/dist/guard/key-is-in.mjs.map +1 -1
- package/dist/index.d.mts +0 -2
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +0 -5
- package/dist/index.mjs.map +1 -1
- package/dist/iterator/range.d.mts +29 -62
- package/dist/iterator/range.d.mts.map +1 -1
- package/dist/iterator/range.mjs.map +1 -1
- package/dist/json/json.d.mts +191 -122
- package/dist/json/json.d.mts.map +1 -1
- package/dist/json/json.mjs +246 -144
- package/dist/json/json.mjs.map +1 -1
- package/dist/number/branded-types/finite-number.d.mts +24 -156
- package/dist/number/branded-types/finite-number.d.mts.map +1 -1
- package/dist/number/branded-types/finite-number.mjs +28 -160
- package/dist/number/branded-types/finite-number.mjs.map +1 -1
- package/dist/number/branded-types/int.d.mts +122 -120
- package/dist/number/branded-types/int.d.mts.map +1 -1
- package/dist/number/branded-types/int.mjs +123 -121
- package/dist/number/branded-types/int.mjs.map +1 -1
- package/dist/number/branded-types/int16.d.mts +22 -30
- package/dist/number/branded-types/int16.d.mts.map +1 -1
- package/dist/number/branded-types/int16.mjs +23 -31
- package/dist/number/branded-types/int16.mjs.map +1 -1
- package/dist/number/branded-types/int32.d.mts +22 -31
- package/dist/number/branded-types/int32.d.mts.map +1 -1
- package/dist/number/branded-types/int32.mjs +23 -32
- package/dist/number/branded-types/int32.mjs.map +1 -1
- package/dist/number/branded-types/non-negative-finite-number.d.mts +28 -36
- package/dist/number/branded-types/non-negative-finite-number.d.mts.map +1 -1
- package/dist/number/branded-types/non-negative-finite-number.mjs +32 -40
- package/dist/number/branded-types/non-negative-finite-number.mjs.map +1 -1
- package/dist/number/branded-types/non-negative-int16.d.mts +24 -34
- package/dist/number/branded-types/non-negative-int16.d.mts.map +1 -1
- package/dist/number/branded-types/non-negative-int16.mjs +25 -35
- package/dist/number/branded-types/non-negative-int16.mjs.map +1 -1
- package/dist/number/branded-types/non-negative-int32.d.mts +26 -35
- package/dist/number/branded-types/non-negative-int32.d.mts.map +1 -1
- package/dist/number/branded-types/non-negative-int32.mjs +27 -36
- package/dist/number/branded-types/non-negative-int32.mjs.map +1 -1
- package/dist/number/branded-types/non-zero-finite-number.d.mts +22 -37
- package/dist/number/branded-types/non-zero-finite-number.d.mts.map +1 -1
- package/dist/number/branded-types/non-zero-finite-number.mjs +26 -41
- package/dist/number/branded-types/non-zero-finite-number.mjs.map +1 -1
- package/dist/number/branded-types/non-zero-int.d.mts +15 -30
- package/dist/number/branded-types/non-zero-int.d.mts.map +1 -1
- package/dist/number/branded-types/non-zero-int.mjs +16 -31
- package/dist/number/branded-types/non-zero-int.mjs.map +1 -1
- package/dist/number/branded-types/non-zero-int16.d.mts +27 -35
- package/dist/number/branded-types/non-zero-int16.d.mts.map +1 -1
- package/dist/number/branded-types/non-zero-int16.mjs +28 -36
- package/dist/number/branded-types/non-zero-int16.mjs.map +1 -1
- package/dist/number/branded-types/non-zero-int32.d.mts +29 -36
- package/dist/number/branded-types/non-zero-int32.d.mts.map +1 -1
- package/dist/number/branded-types/non-zero-int32.mjs +30 -37
- package/dist/number/branded-types/non-zero-int32.mjs.map +1 -1
- package/dist/number/branded-types/non-zero-safe-int.d.mts +37 -38
- package/dist/number/branded-types/non-zero-safe-int.d.mts.map +1 -1
- package/dist/number/branded-types/non-zero-safe-int.mjs +40 -41
- package/dist/number/branded-types/non-zero-safe-int.mjs.map +1 -1
- package/dist/number/branded-types/non-zero-uint16.d.mts +24 -35
- package/dist/number/branded-types/non-zero-uint16.d.mts.map +1 -1
- package/dist/number/branded-types/non-zero-uint16.mjs +25 -36
- package/dist/number/branded-types/non-zero-uint16.mjs.map +1 -1
- package/dist/number/branded-types/non-zero-uint32.d.mts +24 -35
- package/dist/number/branded-types/non-zero-uint32.d.mts.map +1 -1
- package/dist/number/branded-types/non-zero-uint32.mjs +25 -36
- package/dist/number/branded-types/non-zero-uint32.mjs.map +1 -1
- package/dist/number/branded-types/positive-finite-number.d.mts +26 -40
- package/dist/number/branded-types/positive-finite-number.d.mts.map +1 -1
- package/dist/number/branded-types/positive-finite-number.mjs +30 -44
- package/dist/number/branded-types/positive-finite-number.mjs.map +1 -1
- package/dist/number/branded-types/positive-int.d.mts +133 -123
- package/dist/number/branded-types/positive-int.d.mts.map +1 -1
- package/dist/number/branded-types/positive-int.mjs +134 -124
- package/dist/number/branded-types/positive-int.mjs.map +1 -1
- package/dist/number/branded-types/positive-int16.d.mts +24 -35
- package/dist/number/branded-types/positive-int16.d.mts.map +1 -1
- package/dist/number/branded-types/positive-int16.mjs +25 -36
- package/dist/number/branded-types/positive-int16.mjs.map +1 -1
- package/dist/number/branded-types/positive-int32.d.mts +24 -35
- package/dist/number/branded-types/positive-int32.d.mts.map +1 -1
- package/dist/number/branded-types/positive-int32.mjs +25 -36
- package/dist/number/branded-types/positive-int32.mjs.map +1 -1
- package/dist/number/branded-types/positive-safe-int.d.mts +159 -33
- package/dist/number/branded-types/positive-safe-int.d.mts.map +1 -1
- package/dist/number/branded-types/positive-safe-int.mjs +161 -35
- package/dist/number/branded-types/positive-safe-int.mjs.map +1 -1
- package/dist/number/branded-types/positive-uint16.d.mts +24 -35
- package/dist/number/branded-types/positive-uint16.d.mts.map +1 -1
- package/dist/number/branded-types/positive-uint16.mjs +25 -36
- package/dist/number/branded-types/positive-uint16.mjs.map +1 -1
- package/dist/number/branded-types/positive-uint32.d.mts +26 -36
- package/dist/number/branded-types/positive-uint32.d.mts.map +1 -1
- package/dist/number/branded-types/positive-uint32.mjs +27 -37
- package/dist/number/branded-types/positive-uint32.mjs.map +1 -1
- package/dist/number/branded-types/safe-int.d.mts +140 -99
- package/dist/number/branded-types/safe-int.d.mts.map +1 -1
- package/dist/number/branded-types/safe-int.mjs +143 -102
- package/dist/number/branded-types/safe-int.mjs.map +1 -1
- package/dist/number/branded-types/safe-uint.d.mts +24 -33
- package/dist/number/branded-types/safe-uint.d.mts.map +1 -1
- package/dist/number/branded-types/safe-uint.mjs +26 -35
- package/dist/number/branded-types/safe-uint.mjs.map +1 -1
- package/dist/number/branded-types/uint.d.mts +121 -30
- package/dist/number/branded-types/uint.d.mts.map +1 -1
- package/dist/number/branded-types/uint.mjs +122 -31
- package/dist/number/branded-types/uint.mjs.map +1 -1
- package/dist/number/branded-types/uint16.d.mts +26 -34
- package/dist/number/branded-types/uint16.d.mts.map +1 -1
- package/dist/number/branded-types/uint16.mjs +27 -35
- package/dist/number/branded-types/uint16.mjs.map +1 -1
- package/dist/number/branded-types/uint32.d.mts +26 -68
- package/dist/number/branded-types/uint32.d.mts.map +1 -1
- package/dist/number/branded-types/uint32.mjs +27 -69
- package/dist/number/branded-types/uint32.mjs.map +1 -1
- package/dist/number/enum/int8.d.mts +37 -101
- package/dist/number/enum/int8.d.mts.map +1 -1
- package/dist/number/enum/int8.mjs +40 -171
- package/dist/number/enum/int8.mjs.map +1 -1
- package/dist/number/enum/uint8.d.mts +45 -55
- package/dist/number/enum/uint8.d.mts.map +1 -1
- package/dist/number/enum/uint8.mjs +47 -156
- package/dist/number/enum/uint8.mjs.map +1 -1
- package/dist/number/num.d.mts +145 -206
- package/dist/number/num.d.mts.map +1 -1
- package/dist/number/num.mjs +143 -199
- package/dist/number/num.mjs.map +1 -1
- package/dist/number/refined-number-utils.d.mts +97 -21
- package/dist/number/refined-number-utils.d.mts.map +1 -1
- package/dist/number/refined-number-utils.mjs +91 -22
- package/dist/number/refined-number-utils.mjs.map +1 -1
- package/dist/object/object.d.mts +126 -208
- package/dist/object/object.d.mts.map +1 -1
- package/dist/object/object.mjs +68 -102
- package/dist/object/object.mjs.map +1 -1
- package/dist/others/cast-mutable.d.mts +12 -88
- package/dist/others/cast-mutable.d.mts.map +1 -1
- package/dist/others/cast-mutable.mjs +13 -89
- package/dist/others/cast-mutable.mjs.map +1 -1
- package/dist/others/cast-readonly.d.mts +12 -168
- package/dist/others/cast-readonly.d.mts.map +1 -1
- package/dist/others/cast-readonly.mjs +13 -169
- package/dist/others/cast-readonly.mjs.map +1 -1
- package/dist/others/if-then.d.mts +6 -83
- package/dist/others/if-then.d.mts.map +1 -1
- package/dist/others/if-then.mjs +6 -83
- package/dist/others/if-then.mjs.map +1 -1
- package/dist/others/map-nullable.d.mts +12 -136
- package/dist/others/map-nullable.d.mts.map +1 -1
- package/dist/others/map-nullable.mjs.map +1 -1
- package/dist/others/memoize-function.d.mts +14 -157
- package/dist/others/memoize-function.d.mts.map +1 -1
- package/dist/others/memoize-function.mjs +14 -157
- package/dist/others/memoize-function.mjs.map +1 -1
- package/dist/others/tuple.d.mts +33 -151
- package/dist/others/tuple.d.mts.map +1 -1
- package/dist/others/tuple.mjs +33 -151
- package/dist/others/tuple.mjs.map +1 -1
- package/dist/others/unknown-to-string.d.mts +11 -125
- package/dist/others/unknown-to-string.d.mts.map +1 -1
- package/dist/others/unknown-to-string.mjs +12 -126
- package/dist/others/unknown-to-string.mjs.map +1 -1
- package/dist/promise/promise.d.mts +33 -21
- package/dist/promise/promise.d.mts.map +1 -1
- package/dist/promise/promise.mjs +36 -24
- package/dist/promise/promise.mjs.map +1 -1
- package/package.json +58 -44
- package/src/array/impl/array-utils-creation.mts +192 -0
- package/src/array/{array-utils-creation.test.mts → impl/array-utils-creation.test.mts} +121 -72
- package/src/array/impl/array-utils-element-access.mts +115 -0
- package/src/array/impl/array-utils-element-access.test.mts +151 -0
- package/src/array/impl/array-utils-iterators.mts +79 -0
- package/src/array/impl/array-utils-iterators.test.mts +98 -0
- package/src/array/impl/array-utils-modification.mts +434 -0
- package/src/array/{array-utils-modification.test.mts → impl/array-utils-modification.test.mts} +41 -28
- package/src/array/{array-utils-overload-type-error.test.mts → impl/array-utils-overload-type-error.test.mts} +33 -33
- package/src/array/impl/array-utils-reducing-value.mts +535 -0
- package/src/array/{array-utils-reducing-value.test.mts → impl/array-utils-reducing-value.test.mts} +53 -58
- package/src/array/impl/array-utils-search.mts +509 -0
- package/src/array/impl/array-utils-search.test.mts +346 -0
- package/src/array/impl/array-utils-set-op.mts +166 -0
- package/src/array/{array-utils-set-op.test.mts → impl/array-utils-set-op.test.mts} +42 -35
- package/src/array/impl/array-utils-size.mts +30 -0
- package/src/array/impl/array-utils-size.test.mts +9 -0
- package/src/array/impl/array-utils-slice-clamped.mts +51 -0
- package/src/array/{array-utils-slice-clamped.test.mts → impl/array-utils-slice-clamped.test.mts} +13 -13
- package/src/array/impl/array-utils-slicing.mts +275 -0
- package/src/array/impl/array-utils-slicing.test.mts +158 -0
- package/src/array/impl/array-utils-transformation.mts +746 -0
- package/src/array/{array-utils-transformation.test.mts → impl/array-utils-transformation.test.mts} +662 -889
- package/src/array/impl/array-utils-validation.mts +241 -0
- package/src/array/{array-utils-validation.test.mts → impl/array-utils-validation.test.mts} +194 -107
- package/src/array/{array.test.mts → impl/array.test.mts} +2 -2
- package/src/array/impl/index.mts +12 -0
- package/src/array/index.mts +1 -1
- package/src/collections/imap-mapped.mts +99 -265
- package/src/collections/imap.mts +477 -174
- package/src/collections/imap.test.mts +12 -19
- package/src/collections/iset-mapped.mts +892 -358
- package/src/collections/iset.mts +429 -213
- package/src/collections/queue.mts +174 -200
- package/src/collections/stack.mts +172 -245
- package/src/collections/stack.test.mts +9 -1
- package/src/entry-point.mts +2 -0
- package/src/expect-type.mts +43 -172
- package/src/functional/index.mts +2 -2
- package/src/functional/match.mts +35 -145
- package/src/functional/optional/impl/index.mts +17 -0
- package/src/functional/optional/impl/optional-expect-to-be.mts +65 -0
- package/src/functional/optional/impl/optional-filter.mts +71 -0
- package/src/functional/optional/impl/optional-flat-map.mts +67 -0
- package/src/functional/optional/impl/optional-from-nullable.mts +28 -0
- package/src/functional/optional/impl/optional-is-none.mts +25 -0
- package/src/functional/optional/impl/optional-is-optional.mts +27 -0
- package/src/functional/optional/impl/optional-is-some.mts +25 -0
- package/src/functional/optional/impl/optional-map.mts +69 -0
- package/src/functional/optional/impl/optional-none.mts +17 -0
- package/src/functional/optional/impl/optional-or-else.mts +73 -0
- package/src/functional/optional/impl/optional-some.mts +23 -0
- package/src/functional/optional/impl/optional-to-nullable.mts +31 -0
- package/src/functional/optional/impl/optional-unwrap-or.mts +64 -0
- package/src/functional/optional/impl/optional-unwrap-throw.mts +39 -0
- package/src/functional/optional/impl/optional-unwrap.mts +41 -0
- package/src/functional/optional/impl/optional-zip.mts +40 -0
- package/src/functional/optional/impl/tag.mts +6 -0
- package/src/functional/optional/impl/types.mts +28 -0
- package/src/functional/optional/index.mts +1 -0
- package/src/functional/optional.test.mts +11 -9
- package/src/functional/pipe.mts +65 -118
- package/src/functional/pipe.test.mts +1 -1
- package/src/functional/result/impl/index.mts +23 -0
- package/src/functional/result/impl/result-err.mts +29 -0
- package/src/functional/result/impl/result-expect-to-be.mts +63 -0
- package/src/functional/result/impl/result-flat-map.mts +79 -0
- package/src/functional/result/impl/result-fold.mts +95 -0
- package/src/functional/result/impl/result-from-promise.mts +39 -0
- package/src/functional/result/impl/result-from-throwable.mts +42 -0
- package/src/functional/result/impl/result-is-err.mts +23 -0
- package/src/functional/result/impl/result-is-ok.mts +23 -0
- package/src/functional/result/impl/result-is-result.mts +23 -0
- package/src/functional/result/impl/result-map-err.mts +72 -0
- package/src/functional/result/impl/result-map.mts +73 -0
- package/src/functional/result/impl/result-ok.mts +29 -0
- package/src/functional/result/impl/result-or-else.mts +63 -0
- package/src/functional/result/impl/result-swap.mts +28 -0
- package/src/functional/result/impl/result-to-optional.mts +34 -0
- package/src/functional/result/impl/result-unwrap-err-or.mts +60 -0
- package/src/functional/result/impl/result-unwrap-err-throw.mts +53 -0
- package/src/functional/result/impl/result-unwrap-err.mts +36 -0
- package/src/functional/result/impl/result-unwrap-ok-or.mts +60 -0
- package/src/functional/result/impl/result-unwrap-ok.mts +35 -0
- package/src/functional/result/impl/result-unwrap-throw.mts +43 -0
- package/src/functional/result/impl/result-zip.mts +39 -0
- package/src/functional/result/impl/tag.mts +6 -0
- package/src/functional/result/impl/types.mts +35 -0
- package/src/functional/result/index.mts +1 -0
- package/src/functional/result.test.mts +14 -6
- package/src/globals.d.mts +95 -5
- package/src/guard/has-key.mts +23 -74
- package/src/guard/is-non-empty-string.mts +20 -87
- package/src/guard/is-non-empty-string.test.mts +1 -1
- package/src/guard/is-non-null-object.mts +14 -84
- package/src/guard/is-non-null-object.test.mts +4 -4
- package/src/guard/is-primitive.mts +13 -126
- package/src/guard/is-primitive.test.mts +4 -4
- package/src/guard/is-record.mts +21 -132
- package/src/guard/is-type.mts +201 -238
- package/src/guard/is-type.test.mts +10 -10
- package/src/guard/key-is-in.mts +22 -139
- package/src/index.mts +0 -2
- package/src/iterator/range.mts +29 -62
- package/src/json/json.mts +202 -134
- package/src/json/json.test.mts +1 -3
- package/src/number/branded-types/finite-number.mts +34 -166
- package/src/number/branded-types/int.mts +129 -127
- package/src/number/branded-types/int16.mts +31 -39
- package/src/number/branded-types/int16.test.mts +24 -24
- package/src/number/branded-types/int32.mts +31 -40
- package/src/number/branded-types/int32.test.mts +39 -39
- package/src/number/branded-types/non-negative-finite-number.mts +39 -47
- package/src/number/branded-types/non-negative-int16.mts +33 -43
- package/src/number/branded-types/non-negative-int16.test.mts +16 -16
- package/src/number/branded-types/non-negative-int32.mts +35 -44
- package/src/number/branded-types/non-negative-int32.test.mts +30 -30
- package/src/number/branded-types/non-zero-finite-number.mts +32 -47
- package/src/number/branded-types/non-zero-int.mts +22 -37
- package/src/number/branded-types/non-zero-int16.mts +36 -44
- package/src/number/branded-types/non-zero-int16.test.mts +26 -26
- package/src/number/branded-types/non-zero-int32.mts +38 -45
- package/src/number/branded-types/non-zero-int32.test.mts +45 -42
- package/src/number/branded-types/non-zero-safe-int.mts +48 -49
- package/src/number/branded-types/non-zero-uint16.mts +33 -44
- package/src/number/branded-types/non-zero-uint16.test.mts +16 -16
- package/src/number/branded-types/non-zero-uint32.mts +33 -44
- package/src/number/branded-types/non-zero-uint32.test.mts +28 -28
- package/src/number/branded-types/positive-finite-number.mts +37 -51
- package/src/number/branded-types/positive-int.mts +142 -132
- package/src/number/branded-types/positive-int16.mts +33 -44
- package/src/number/branded-types/positive-int16.test.mts +14 -14
- package/src/number/branded-types/positive-int32.mts +33 -44
- package/src/number/branded-types/positive-int32.test.mts +26 -26
- package/src/number/branded-types/positive-safe-int.mts +169 -43
- package/src/number/branded-types/positive-uint16.mts +33 -44
- package/src/number/branded-types/positive-uint16.test.mts +16 -16
- package/src/number/branded-types/positive-uint32.mts +35 -45
- package/src/number/branded-types/positive-uint32.test.mts +31 -28
- package/src/number/branded-types/safe-int.mts +151 -110
- package/src/number/branded-types/safe-uint.mts +34 -43
- package/src/number/branded-types/uint.mts +129 -38
- package/src/number/branded-types/uint16.mts +35 -43
- package/src/number/branded-types/uint16.test.mts +16 -16
- package/src/number/branded-types/uint32.mts +35 -77
- package/src/number/branded-types/uint32.test.mts +28 -28
- package/src/number/enum/int8.mts +42 -173
- package/src/number/enum/int8.test.mts +9 -9
- package/src/number/enum/uint8.mts +49 -158
- package/src/number/enum/uint8.test.mts +8 -8
- package/src/number/num.mts +157 -212
- package/src/number/num.test.mts +4 -4
- package/src/number/refined-number-utils.mts +109 -26
- package/src/object/object.mts +130 -212
- package/src/object/object.test.mts +29 -0
- package/src/others/cast-mutable.mts +13 -89
- package/src/others/cast-mutable.test.mts +80 -0
- package/src/others/cast-readonly.mts +13 -169
- package/src/others/if-then.mts +6 -83
- package/src/others/map-nullable.mts +12 -136
- package/src/others/map-nullable.test.mts +6 -6
- package/src/others/memoize-function.mts +14 -157
- package/src/others/tuple.mts +33 -151
- package/src/others/unknown-to-string.mts +12 -126
- package/src/others/unknown-to-string.test.mts +13 -1
- package/src/promise/promise.mts +34 -21
- package/src/promise/promise.test.mts +43 -0
- package/dist/array/array-utils.d.mts +0 -2956
- package/dist/array/array-utils.d.mts.map +0 -1
- package/dist/array/array-utils.mjs +0 -1838
- package/dist/array/array-utils.mjs.map +0 -1
- package/dist/functional/optional.d.mts +0 -360
- package/dist/functional/optional.d.mts.map +0 -1
- package/dist/functional/optional.mjs +0 -268
- package/dist/functional/optional.mjs.map +0 -1
- package/dist/functional/result.d.mts +0 -611
- package/dist/functional/result.d.mts.map +0 -1
- package/dist/functional/result.mjs +0 -545
- package/dist/functional/result.mjs.map +0 -1
- package/src/array/array-utils-search.test.mts +0 -169
- package/src/array/array-utils-slicing.test.mts +0 -274
- package/src/array/array-utils.mts +0 -4834
- package/src/functional/optional.mts +0 -591
- package/src/functional/result.mts +0 -986
|
@@ -1,68 +1,111 @@
|
|
|
1
|
-
import { Optional } from '../functional/index.mjs';
|
|
2
1
|
/**
|
|
3
|
-
* Interface for an immutable map with
|
|
2
|
+
* Interface for an immutable map with lookup operations and functional
|
|
3
|
+
* programming patterns.
|
|
4
4
|
*
|
|
5
|
-
* This interface defines all methods and properties available on IMap
|
|
6
|
-
* that modify the map return new IMap instances,
|
|
7
|
-
*
|
|
5
|
+
* This interface defines all methods and properties available on IMap
|
|
6
|
+
* instances. All operations that modify the map return new IMap instances,
|
|
7
|
+
* preserving immutability. The underlying implementation uses JavaScript's
|
|
8
|
+
* native Map but creates copies on mutations to maintain immutability.
|
|
8
9
|
*
|
|
9
10
|
* **Immutability Guarantees:**
|
|
11
|
+
*
|
|
10
12
|
* - All mutation operations (set, delete, update) return new IMap instances
|
|
11
13
|
* - Original IMap instances are never modified
|
|
12
14
|
* - Safe for concurrent access and functional programming patterns
|
|
13
15
|
*
|
|
14
16
|
* **Performance Characteristics:**
|
|
15
|
-
*
|
|
16
|
-
* -
|
|
17
|
+
*
|
|
18
|
+
* - get/has: O(1) average case
|
|
19
|
+
* - set/delete: O(n) due to copying for immutability
|
|
17
20
|
* - map/filter operations: O(n)
|
|
18
|
-
* -
|
|
21
|
+
* - iteration: O(n)
|
|
19
22
|
*
|
|
20
|
-
* @template K The type of the keys in the map. Must extend MapSetKeyType
|
|
23
|
+
* @template K The type of the keys in the map. Must extend MapSetKeyType
|
|
24
|
+
* (string, number, boolean, etc.)
|
|
21
25
|
* @template V The type of the values in the map.
|
|
22
|
-
*
|
|
23
|
-
* @example
|
|
24
|
-
* ```typescript
|
|
25
|
-
* // This is a type alias describing an interface, so it's not directly instantiated.
|
|
26
|
-
* // See IMap.create for examples of creating IMap instances that conform to this interface.
|
|
27
|
-
*
|
|
28
|
-
* // Example of how you might use a variable that implements this structure:
|
|
29
|
-
* declare const userMap: IMap<string, User>;
|
|
30
|
-
*
|
|
31
|
-
* // Immutable operations - original map is never modified
|
|
32
|
-
* const hasUser = userMap.has("alice"); // O(1)
|
|
33
|
-
* const user = userMap.get("alice").unwrapOr(defaultUser); // O(1)
|
|
34
|
-
* const newMap = userMap.set("bob", newUser); // O(1) - returns new IMap
|
|
35
|
-
* const updated = userMap.update("alice", u => ({ ...u, active: true })); // O(1)
|
|
36
|
-
*
|
|
37
|
-
* // Functional transformations
|
|
38
|
-
* const activeUsers = userMap.map((user, id) => ({ ...user, lastSeen: Date.now() })); // O(n)
|
|
39
|
-
* ```
|
|
40
26
|
*/
|
|
41
27
|
type IMapInterface<K extends MapSetKeyType, V> = Readonly<{
|
|
42
|
-
/**
|
|
28
|
+
/**
|
|
29
|
+
* The number of elements in the map.
|
|
30
|
+
*
|
|
31
|
+
* @example
|
|
32
|
+
*
|
|
33
|
+
* ```ts
|
|
34
|
+
* const entries = [
|
|
35
|
+
* ['a', 1],
|
|
36
|
+
* ['b', 2],
|
|
37
|
+
* ] satisfies readonly (readonly [string, number])[];
|
|
38
|
+
*
|
|
39
|
+
* const map = IMap.create(entries);
|
|
40
|
+
*
|
|
41
|
+
* assert(map.size === 2);
|
|
42
|
+
* ```
|
|
43
|
+
*/
|
|
43
44
|
size: SizeType.Arr;
|
|
44
45
|
/**
|
|
45
|
-
* Checks if a key exists in the map.
|
|
46
|
-
*
|
|
46
|
+
* Checks if a key exists in the map. Allows for wider literal types for keys
|
|
47
|
+
* during checking.
|
|
48
|
+
*
|
|
49
|
+
* @example
|
|
50
|
+
*
|
|
51
|
+
* ```ts
|
|
52
|
+
* const map = IMap.create<'id' | 'enabled', number | boolean>([
|
|
53
|
+
* ['id', 42],
|
|
54
|
+
* ['enabled', true],
|
|
55
|
+
* ]);
|
|
56
|
+
*
|
|
57
|
+
* assert.ok(map.has('id'));
|
|
58
|
+
* assert.notOk(map.has('missing'));
|
|
59
|
+
* ```
|
|
60
|
+
*
|
|
47
61
|
* @param key The key to check.
|
|
48
62
|
* @returns `true` if the key exists, `false` otherwise.
|
|
49
63
|
*/
|
|
50
64
|
has: (key: K | (WidenLiteral<K> & {})) => boolean;
|
|
51
65
|
/**
|
|
52
66
|
* Retrieves the value associated with a key.
|
|
67
|
+
*
|
|
68
|
+
* @example
|
|
69
|
+
*
|
|
70
|
+
* ```ts
|
|
71
|
+
* const map = IMap.create([['user', { id: 1 }]]);
|
|
72
|
+
*
|
|
73
|
+
* assert.deepStrictEqual(map.get('user'), Optional.some({ id: 1 }));
|
|
74
|
+
* assert.deepStrictEqual(map.get('missing'), Optional.none);
|
|
75
|
+
* ```
|
|
76
|
+
*
|
|
53
77
|
* @param key The key to retrieve.
|
|
54
|
-
* @returns The value associated with the key wrapped with Optional.some, or
|
|
78
|
+
* @returns The value associated with the key wrapped with Optional.some, or
|
|
79
|
+
* `Optional.none` if the key does not exist.
|
|
55
80
|
*/
|
|
56
81
|
get: (key: K | (WidenLiteral<K> & {})) => Optional<V>;
|
|
57
82
|
/**
|
|
58
83
|
* Checks if all elements in the map satisfy a predicate.
|
|
84
|
+
*
|
|
85
|
+
* @example
|
|
86
|
+
*
|
|
87
|
+
* ```ts
|
|
88
|
+
* const map = IMap.create([
|
|
89
|
+
* ['a', 2],
|
|
90
|
+
* ['b', 4],
|
|
91
|
+
* ]);
|
|
92
|
+
*
|
|
93
|
+
* const allEven = map.every((value) => value % 2 === 0);
|
|
94
|
+
* const isNarrowed = map.every((value): value is 2 | 4 => value % 2 === 0);
|
|
95
|
+
*
|
|
96
|
+
* assert.ok(allEven);
|
|
97
|
+
* assert.ok(isNarrowed);
|
|
98
|
+
* ```
|
|
99
|
+
*
|
|
59
100
|
* @param predicate A function to test each key-value pair.
|
|
60
101
|
* @returns `true` if all elements satisfy the predicate, `false` otherwise.
|
|
61
102
|
*/
|
|
62
103
|
every: ((predicate: (value: V, key: K) => boolean) => boolean) &
|
|
63
104
|
/**
|
|
64
|
-
* Checks if all elements in the map satisfy a type predicate.
|
|
65
|
-
*
|
|
105
|
+
* Checks if all elements in the map satisfy a type predicate. Narrows the
|
|
106
|
+
* type of values in the map if the predicate returns true for all
|
|
107
|
+
* elements.
|
|
108
|
+
*
|
|
66
109
|
* @template W The narrowed type of the values.
|
|
67
110
|
* @param predicate A type predicate function.
|
|
68
111
|
* @returns `true` if all elements satisfy the predicate, `false` otherwise.
|
|
@@ -70,18 +113,70 @@ type IMapInterface<K extends MapSetKeyType, V> = Readonly<{
|
|
|
70
113
|
(<W extends V>(predicate: (value: V, key: K) => value is W) => this is IMap<K, W>);
|
|
71
114
|
/**
|
|
72
115
|
* Checks if at least one element in the map satisfies a predicate.
|
|
116
|
+
*
|
|
117
|
+
* @example
|
|
118
|
+
*
|
|
119
|
+
* ```ts
|
|
120
|
+
* const entries = [
|
|
121
|
+
* ['alice', 3],
|
|
122
|
+
* ['bob', 5],
|
|
123
|
+
* ] satisfies readonly (readonly [string, number])[];
|
|
124
|
+
*
|
|
125
|
+
* const map = IMap.create(entries);
|
|
126
|
+
*
|
|
127
|
+
* assert.ok(map.some((value) => value > 4));
|
|
128
|
+
* assert.notOk(map.some((value) => value > 10));
|
|
129
|
+
* ```
|
|
130
|
+
*
|
|
73
131
|
* @param predicate A function to test each key-value pair.
|
|
74
|
-
* @returns `true` if at least one element satisfies the predicate, `false`
|
|
132
|
+
* @returns `true` if at least one element satisfies the predicate, `false`
|
|
133
|
+
* otherwise.
|
|
75
134
|
*/
|
|
76
135
|
some: (predicate: (value: V, key: K) => boolean) => boolean;
|
|
77
136
|
/**
|
|
78
137
|
* Deletes a key-value pair from the map.
|
|
138
|
+
*
|
|
139
|
+
* @example
|
|
140
|
+
*
|
|
141
|
+
* ```ts
|
|
142
|
+
* const original = IMap.create([
|
|
143
|
+
* ['a', 1],
|
|
144
|
+
* ['b', 2],
|
|
145
|
+
* ]);
|
|
146
|
+
*
|
|
147
|
+
* const withoutB = original.delete('b');
|
|
148
|
+
*
|
|
149
|
+
* assert.deepStrictEqual(original.get('b'), Optional.some(2));
|
|
150
|
+
* assert.deepStrictEqual(withoutB.get('b'), Optional.none);
|
|
151
|
+
* assert(original.size === 2);
|
|
152
|
+
* assert(withoutB.size === 1);
|
|
153
|
+
* ```
|
|
154
|
+
*
|
|
79
155
|
* @param key The key to delete.
|
|
80
156
|
* @returns A new IMap instance without the specified key.
|
|
81
157
|
*/
|
|
82
158
|
delete: (key: K) => IMap<K, V>;
|
|
83
159
|
/**
|
|
84
160
|
* Sets a key-value pair in the map.
|
|
161
|
+
*
|
|
162
|
+
* @example
|
|
163
|
+
*
|
|
164
|
+
* ```ts
|
|
165
|
+
* const entries = [['count', 1]] satisfies readonly (readonly [
|
|
166
|
+
* 'count' | 'status',
|
|
167
|
+
* number | string,
|
|
168
|
+
* ])[];
|
|
169
|
+
*
|
|
170
|
+
* const base = IMap.create<'count' | 'status', number | string>(entries);
|
|
171
|
+
*
|
|
172
|
+
* const updated = base.set('count', 2);
|
|
173
|
+
* const extended = base.set('status', 'ok');
|
|
174
|
+
*
|
|
175
|
+
* assert.deepStrictEqual(base.get('count'), Optional.some(1));
|
|
176
|
+
* assert.deepStrictEqual(updated.get('count'), Optional.some(2));
|
|
177
|
+
* assert.deepStrictEqual(extended.get('status'), Optional.some('ok'));
|
|
178
|
+
* ```
|
|
179
|
+
*
|
|
85
180
|
* @param key The key to set.
|
|
86
181
|
* @param value The value to associate with the key.
|
|
87
182
|
* @returns A new IMap instance with the specified key-value pair.
|
|
@@ -89,13 +184,62 @@ type IMapInterface<K extends MapSetKeyType, V> = Readonly<{
|
|
|
89
184
|
set: (key: K, value: V) => IMap<K, V>;
|
|
90
185
|
/**
|
|
91
186
|
* Updates the value associated with a key using an updater function.
|
|
187
|
+
*
|
|
188
|
+
* @example
|
|
189
|
+
*
|
|
190
|
+
* ```ts
|
|
191
|
+
* const entries = [
|
|
192
|
+
* ['alice', 10],
|
|
193
|
+
* ['bob', 8],
|
|
194
|
+
* ] satisfies readonly (readonly ['alice' | 'bob' | 'charlie', number])[];
|
|
195
|
+
*
|
|
196
|
+
* const scores = IMap.create<'alice' | 'bob' | 'charlie', number>(entries);
|
|
197
|
+
*
|
|
198
|
+
* const boosted = scores.update('alice', (value) => value + 5);
|
|
199
|
+
* const unchanged = scores.update('charlie', (value) => value + 1);
|
|
200
|
+
*
|
|
201
|
+
* assert.deepStrictEqual(boosted.get('alice'), Optional.some(15));
|
|
202
|
+
* assert.deepStrictEqual(scores.get('alice'), Optional.some(10));
|
|
203
|
+
* assert(unchanged === scores);
|
|
204
|
+
* ```
|
|
205
|
+
*
|
|
92
206
|
* @param key The key whose value to update.
|
|
93
|
-
* @param updater A function that takes the current value and returns the new
|
|
207
|
+
* @param updater A function that takes the current value and returns the new
|
|
208
|
+
* value.
|
|
94
209
|
* @returns A new IMap instance with the updated value.
|
|
95
210
|
*/
|
|
96
211
|
update: (key: K, updater: (value: V) => V) => IMap<K, V>;
|
|
97
212
|
/**
|
|
98
213
|
* Applies a series of mutations to the map.
|
|
214
|
+
*
|
|
215
|
+
* @example
|
|
216
|
+
*
|
|
217
|
+
* ```ts
|
|
218
|
+
* const entries = [
|
|
219
|
+
* ['a', 1],
|
|
220
|
+
* ['b', 2],
|
|
221
|
+
* ] satisfies readonly (readonly ['a' | 'b' | 'c', number])[];
|
|
222
|
+
*
|
|
223
|
+
* const base = IMap.create<'a' | 'b' | 'c', number>(entries);
|
|
224
|
+
*
|
|
225
|
+
* const actions: readonly Readonly<
|
|
226
|
+
* | { type: 'set'; key: 'c'; value: number }
|
|
227
|
+
* | { type: 'update'; key: 'b'; updater: (value: number) => number }
|
|
228
|
+
* | { type: 'delete'; key: 'a' }
|
|
229
|
+
* >[] = [
|
|
230
|
+
* { type: 'set', key: 'c', value: 3 },
|
|
231
|
+
* { type: 'update', key: 'b', updater: (value) => value * 10 },
|
|
232
|
+
* { type: 'delete', key: 'a' },
|
|
233
|
+
* ];
|
|
234
|
+
*
|
|
235
|
+
* const mutated = base.withMutations(actions);
|
|
236
|
+
*
|
|
237
|
+
* assert.deepStrictEqual(mutated.get('c'), Optional.some(3));
|
|
238
|
+
* assert.deepStrictEqual(mutated.get('b'), Optional.some(20));
|
|
239
|
+
* assert.deepStrictEqual(mutated.get('a'), Optional.none);
|
|
240
|
+
* assert.deepStrictEqual(base.get('b'), Optional.some(2));
|
|
241
|
+
* ```
|
|
242
|
+
*
|
|
99
243
|
* @param actions An array of mutation actions (delete, set, or update).
|
|
100
244
|
* @returns A new IMap instance with all mutations applied.
|
|
101
245
|
*/
|
|
@@ -113,6 +257,25 @@ type IMapInterface<K extends MapSetKeyType, V> = Readonly<{
|
|
|
113
257
|
}>[]) => IMap<K, V>;
|
|
114
258
|
/**
|
|
115
259
|
* Maps the values of the map to new values.
|
|
260
|
+
*
|
|
261
|
+
* @example
|
|
262
|
+
*
|
|
263
|
+
* ```ts
|
|
264
|
+
* const entries = [
|
|
265
|
+
* ['a', 1],
|
|
266
|
+
* ['b', 2],
|
|
267
|
+
* ] satisfies readonly (readonly [string, number])[];
|
|
268
|
+
*
|
|
269
|
+
* const map = IMap.create(entries);
|
|
270
|
+
*
|
|
271
|
+
* const doubled = map.map((value) => value * 2);
|
|
272
|
+
*
|
|
273
|
+
* assert.deepStrictEqual(Array.from(doubled), [
|
|
274
|
+
* ['a', 2],
|
|
275
|
+
* ['b', 4],
|
|
276
|
+
* ]);
|
|
277
|
+
* ```
|
|
278
|
+
*
|
|
116
279
|
* @template V2 The type of the new values.
|
|
117
280
|
* @param mapFn A function that maps a value and key to a new value.
|
|
118
281
|
* @returns A new IMap instance with mapped values.
|
|
@@ -120,6 +283,25 @@ type IMapInterface<K extends MapSetKeyType, V> = Readonly<{
|
|
|
120
283
|
map: <V2>(mapFn: (value: V, key: K) => V2) => IMap<K, V2>;
|
|
121
284
|
/**
|
|
122
285
|
* Maps the keys of the map to new keys.
|
|
286
|
+
*
|
|
287
|
+
* @example
|
|
288
|
+
*
|
|
289
|
+
* ```ts
|
|
290
|
+
* const entries = [
|
|
291
|
+
* ['first', 1],
|
|
292
|
+
* ['second', 2],
|
|
293
|
+
* ] satisfies readonly (readonly [string, number])[];
|
|
294
|
+
*
|
|
295
|
+
* const map = IMap.create(entries);
|
|
296
|
+
*
|
|
297
|
+
* const upperKeys = map.mapKeys((key) => key.toUpperCase());
|
|
298
|
+
*
|
|
299
|
+
* assert.deepStrictEqual(Array.from(upperKeys), [
|
|
300
|
+
* ['FIRST', 1],
|
|
301
|
+
* ['SECOND', 2],
|
|
302
|
+
* ]);
|
|
303
|
+
* ```
|
|
304
|
+
*
|
|
123
305
|
* @template K2 The type of the new keys.
|
|
124
306
|
* @param mapFn A function that maps a key to a new key.
|
|
125
307
|
* @returns A new IMap instance with mapped keys and original values.
|
|
@@ -127,6 +309,27 @@ type IMapInterface<K extends MapSetKeyType, V> = Readonly<{
|
|
|
127
309
|
mapKeys: <K2 extends MapSetKeyType>(mapFn: (key: K) => K2) => IMap<K2, V>;
|
|
128
310
|
/**
|
|
129
311
|
* Maps the entries (key-value pairs) of the map to new entries.
|
|
312
|
+
*
|
|
313
|
+
* @example
|
|
314
|
+
*
|
|
315
|
+
* ```ts
|
|
316
|
+
* const entries = [
|
|
317
|
+
* ['a', 1],
|
|
318
|
+
* ['b', 2],
|
|
319
|
+
* ] satisfies readonly (readonly [string, number])[];
|
|
320
|
+
*
|
|
321
|
+
* const map = IMap.create(entries);
|
|
322
|
+
*
|
|
323
|
+
* const swapped = map.mapEntries(
|
|
324
|
+
* ([key, value]) => [value, key] satisfies readonly [number, string],
|
|
325
|
+
* );
|
|
326
|
+
*
|
|
327
|
+
* assert.deepStrictEqual(Array.from(swapped), [
|
|
328
|
+
* [1, 'a'],
|
|
329
|
+
* [2, 'b'],
|
|
330
|
+
* ]);
|
|
331
|
+
* ```
|
|
332
|
+
*
|
|
130
333
|
* @template K2 The type of the new keys in the entries.
|
|
131
334
|
* @template V2 The type of the new values in the entries.
|
|
132
335
|
* @param mapFn A function that maps an entry to a new entry.
|
|
@@ -135,66 +338,215 @@ type IMapInterface<K extends MapSetKeyType, V> = Readonly<{
|
|
|
135
338
|
mapEntries: <K2 extends MapSetKeyType, V2>(mapFn: (entry: readonly [K, V]) => readonly [K2, V2]) => IMap<K2, V2>;
|
|
136
339
|
/**
|
|
137
340
|
* Executes a callback function for each key-value pair in the map.
|
|
341
|
+
*
|
|
342
|
+
* @example
|
|
343
|
+
*
|
|
344
|
+
* ```ts
|
|
345
|
+
* const map = IMap.create([
|
|
346
|
+
* ['a', 1],
|
|
347
|
+
* ['b', 2],
|
|
348
|
+
* ]);
|
|
349
|
+
*
|
|
350
|
+
* const entries: (readonly [string, number])[] = [];
|
|
351
|
+
*
|
|
352
|
+
* for (const [key, value] of map.entries()) {
|
|
353
|
+
* entries.push([key, value]);
|
|
354
|
+
* }
|
|
355
|
+
*
|
|
356
|
+
* assert.deepStrictEqual(entries, [
|
|
357
|
+
* ['a', 1],
|
|
358
|
+
* ['b', 2],
|
|
359
|
+
* ]);
|
|
360
|
+
* ```
|
|
361
|
+
*
|
|
138
362
|
* @param callbackfn A function to execute for each element.
|
|
139
363
|
*/
|
|
140
364
|
forEach: (callbackfn: (value: V, key: K) => void) => void;
|
|
141
365
|
/**
|
|
142
366
|
* Returns an iterator for the keys in the map.
|
|
367
|
+
*
|
|
368
|
+
* @example
|
|
369
|
+
*
|
|
370
|
+
* ```ts
|
|
371
|
+
* const entries = [
|
|
372
|
+
* ['a', 1],
|
|
373
|
+
* ['b', 2],
|
|
374
|
+
* ] satisfies readonly (readonly [string, number])[];
|
|
375
|
+
*
|
|
376
|
+
* const map = IMap.create(entries);
|
|
377
|
+
*
|
|
378
|
+
* const keys = Array.from(map.keys());
|
|
379
|
+
*
|
|
380
|
+
* assert.deepStrictEqual(keys, ['a', 'b']);
|
|
381
|
+
* ```
|
|
382
|
+
*
|
|
143
383
|
* @returns An iterable iterator of keys.
|
|
144
384
|
*/
|
|
145
385
|
keys: () => IterableIterator<K>;
|
|
146
386
|
/**
|
|
147
387
|
* Returns an iterator for the values in the map.
|
|
388
|
+
*
|
|
389
|
+
* @example
|
|
390
|
+
*
|
|
391
|
+
* ```ts
|
|
392
|
+
* const entries = [
|
|
393
|
+
* ['a', 1],
|
|
394
|
+
* ['b', 2],
|
|
395
|
+
* ] satisfies readonly (readonly [string, number])[];
|
|
396
|
+
*
|
|
397
|
+
* const map = IMap.create(entries);
|
|
398
|
+
*
|
|
399
|
+
* const values = Array.from(map.values());
|
|
400
|
+
*
|
|
401
|
+
* assert.deepStrictEqual(values, [1, 2]);
|
|
402
|
+
* ```
|
|
403
|
+
*
|
|
148
404
|
* @returns An iterable iterator of values.
|
|
149
405
|
*/
|
|
150
406
|
values: () => IterableIterator<V>;
|
|
151
407
|
/**
|
|
152
408
|
* Returns an iterator for the entries (key-value pairs) in the map.
|
|
409
|
+
*
|
|
410
|
+
* @example
|
|
411
|
+
*
|
|
412
|
+
* ```ts
|
|
413
|
+
* const map = IMap.create([
|
|
414
|
+
* ['a', 1],
|
|
415
|
+
* ['b', 2],
|
|
416
|
+
* ]);
|
|
417
|
+
*
|
|
418
|
+
* const entries = Array.from(map.entries());
|
|
419
|
+
*
|
|
420
|
+
* assert.deepStrictEqual(entries, [
|
|
421
|
+
* ['a', 1],
|
|
422
|
+
* ['b', 2],
|
|
423
|
+
* ]);
|
|
424
|
+
* ```
|
|
425
|
+
*
|
|
153
426
|
* @returns An iterable iterator of entries.
|
|
154
427
|
*/
|
|
155
428
|
entries: () => IterableIterator<readonly [K, V]>;
|
|
156
429
|
/**
|
|
157
430
|
* Converts the keys of the map to an array.
|
|
431
|
+
*
|
|
432
|
+
* @example
|
|
433
|
+
*
|
|
434
|
+
* ```ts
|
|
435
|
+
* const entries = [
|
|
436
|
+
* ['x', 10],
|
|
437
|
+
* ['y', 20],
|
|
438
|
+
* ] satisfies readonly (readonly [string, number])[];
|
|
439
|
+
*
|
|
440
|
+
* const map = IMap.create(entries);
|
|
441
|
+
*
|
|
442
|
+
* assert.deepStrictEqual(map.toKeysArray(), ['x', 'y']);
|
|
443
|
+
* ```
|
|
444
|
+
*
|
|
158
445
|
* @returns A readonly array of keys.
|
|
159
446
|
*/
|
|
160
447
|
toKeysArray: () => readonly K[];
|
|
161
448
|
/**
|
|
162
449
|
* Converts the values of the map to an array.
|
|
450
|
+
*
|
|
451
|
+
* @example
|
|
452
|
+
*
|
|
453
|
+
* ```ts
|
|
454
|
+
* const entries = [
|
|
455
|
+
* ['x', 10],
|
|
456
|
+
* ['y', 20],
|
|
457
|
+
* ] satisfies readonly (readonly [string, number])[];
|
|
458
|
+
*
|
|
459
|
+
* const map = IMap.create(entries);
|
|
460
|
+
*
|
|
461
|
+
* assert.deepStrictEqual(map.toValuesArray(), [10, 20]);
|
|
462
|
+
* ```
|
|
463
|
+
*
|
|
163
464
|
* @returns A readonly array of values.
|
|
164
465
|
*/
|
|
165
466
|
toValuesArray: () => readonly V[];
|
|
166
467
|
/**
|
|
167
468
|
* Converts the entries (key-value pairs) of the map to an array.
|
|
469
|
+
*
|
|
470
|
+
* @example
|
|
471
|
+
*
|
|
472
|
+
* ```ts
|
|
473
|
+
* const entries = [
|
|
474
|
+
* ['a', 1],
|
|
475
|
+
* ['b', 2],
|
|
476
|
+
* ] satisfies readonly (readonly [string, number])[];
|
|
477
|
+
*
|
|
478
|
+
* const map = IMap.create(entries);
|
|
479
|
+
*
|
|
480
|
+
* assert.deepStrictEqual(map.toEntriesArray(), [
|
|
481
|
+
* ['a', 1],
|
|
482
|
+
* ['b', 2],
|
|
483
|
+
* ]);
|
|
484
|
+
* ```
|
|
485
|
+
*
|
|
168
486
|
* @returns A readonly array of entries.
|
|
169
487
|
*/
|
|
170
488
|
toEntriesArray: () => readonly (readonly [K, V])[];
|
|
171
489
|
/**
|
|
172
|
-
* Converts the map to an array of entries (key-value pairs).
|
|
173
|
-
*
|
|
490
|
+
* Converts the map to an array of entries (key-value pairs). Alias for
|
|
491
|
+
* `toEntriesArray`.
|
|
492
|
+
*
|
|
493
|
+
* @example
|
|
494
|
+
*
|
|
495
|
+
* ```ts
|
|
496
|
+
* const entries = [
|
|
497
|
+
* ['k1', 'v1'],
|
|
498
|
+
* ['k2', 'v2'],
|
|
499
|
+
* ] satisfies readonly (readonly [string, string])[];
|
|
500
|
+
*
|
|
501
|
+
* const map = IMap.create(entries);
|
|
502
|
+
*
|
|
503
|
+
* assert.deepStrictEqual(map.toArray(), [
|
|
504
|
+
* ['k1', 'v1'],
|
|
505
|
+
* ['k2', 'v2'],
|
|
506
|
+
* ]);
|
|
507
|
+
* ```
|
|
508
|
+
*
|
|
174
509
|
* @returns A readonly array of entries.
|
|
175
510
|
*/
|
|
176
511
|
toArray: () => readonly (readonly [K, V])[];
|
|
177
512
|
/**
|
|
178
513
|
* Returns the underlying readonly JavaScript Map.
|
|
514
|
+
*
|
|
515
|
+
* @example
|
|
516
|
+
*
|
|
517
|
+
* ```ts
|
|
518
|
+
* const entries = [['key', 1]] satisfies readonly (readonly [string, number])[];
|
|
519
|
+
*
|
|
520
|
+
* const map = IMap.create(entries);
|
|
521
|
+
*
|
|
522
|
+
* const raw = map.toRawMap();
|
|
523
|
+
*
|
|
524
|
+
* assert.ok(is.map(raw));
|
|
525
|
+
* assert(raw.get('key') === 1);
|
|
526
|
+
* ```
|
|
527
|
+
*
|
|
179
528
|
* @returns The raw ReadonlyMap instance.
|
|
180
529
|
*/
|
|
181
530
|
toRawMap: () => ReadonlyMap<K, V>;
|
|
182
531
|
}>;
|
|
183
532
|
/**
|
|
184
|
-
* Represents an immutable map with high-performance operations and functional
|
|
533
|
+
* Represents an immutable map with high-performance operations and functional
|
|
534
|
+
* programming support.
|
|
185
535
|
*
|
|
186
|
-
* IMap is a persistent data structure that provides all the functionality of
|
|
187
|
-
* while maintaining immutability. All operations that would
|
|
188
|
-
* return new IMap instances, making it safe for
|
|
536
|
+
* IMap is a persistent data structure that provides all the functionality of
|
|
537
|
+
* JavaScript's Map while maintaining immutability. All operations that would
|
|
538
|
+
* normally mutate the map instead return new IMap instances, making it safe for
|
|
539
|
+
* functional programming and concurrent access.
|
|
189
540
|
*
|
|
190
541
|
* **Key Features:**
|
|
542
|
+
*
|
|
191
543
|
* - **Immutable**: All mutation operations return new instances
|
|
192
|
-
* - **High Performance**: O(1) average-case for get/set/has/delete operations
|
|
193
544
|
* - **Type Safe**: Full TypeScript support with generic key/value types
|
|
194
545
|
* - **Iterable**: Implements standard JavaScript iteration protocols
|
|
195
546
|
* - **Functional**: Rich API for map, filter, reduce-style operations
|
|
196
547
|
*
|
|
197
548
|
* **When to Use:**
|
|
549
|
+
*
|
|
198
550
|
* - State management in functional applications
|
|
199
551
|
* - Caching with immutable guarantees
|
|
200
552
|
* - Data structures that need to be shared across components
|
|
@@ -202,156 +554,76 @@ type IMapInterface<K extends MapSetKeyType, V> = Readonly<{
|
|
|
202
554
|
*
|
|
203
555
|
* @template K The type of the keys in the map. Must extend MapSetKeyType.
|
|
204
556
|
* @template V The type of the values in the map.
|
|
205
|
-
*
|
|
206
|
-
* @example
|
|
207
|
-
* ```typescript
|
|
208
|
-
* // Create an immutable map with initial data
|
|
209
|
-
* let userPreferences = IMap.create<string, UserPreference>([
|
|
210
|
-
* ["theme", { value: "dark", lastModified: Date.now() }],
|
|
211
|
-
* ["language", { value: "en", lastModified: Date.now() }]
|
|
212
|
-
* ]);
|
|
213
|
-
*
|
|
214
|
-
* console.log(userPreferences.get("theme").unwrapOr(defaultPreference));
|
|
215
|
-
* console.log(userPreferences.size); // Output: 2
|
|
216
|
-
*
|
|
217
|
-
* // All operations return new instances - original is unchanged
|
|
218
|
-
* const updated = userPreferences
|
|
219
|
-
* .set("notifications", { value: true, lastModified: Date.now() })
|
|
220
|
-
* .update("theme", pref => ({ ...pref, value: "light" }));
|
|
221
|
-
*
|
|
222
|
-
* console.log(userPreferences.has("notifications")); // false (original unchanged)
|
|
223
|
-
* console.log(updated.has("notifications")); // true (new instance)
|
|
224
|
-
*
|
|
225
|
-
* // Efficient iteration and transformation
|
|
226
|
-
* for (const [key, preference] of updated) {
|
|
227
|
-
* console.log(`${key}: ${preference.value}`);
|
|
228
|
-
* }
|
|
229
|
-
*
|
|
230
|
-
* // Functional transformations
|
|
231
|
-
* const withTimestamps = updated.map((pref, key) => ({
|
|
232
|
-
* ...pref,
|
|
233
|
-
* accessedAt: Date.now()
|
|
234
|
-
* }));
|
|
235
|
-
*
|
|
236
|
-
* // Type-safe operations with narrowing
|
|
237
|
-
* const stringKeys = IMap.create<number | string, any>([[1, "a"], ["b", 2]]);
|
|
238
|
-
* const onlyStringKeys = stringKeys.mapKeys(key =>
|
|
239
|
-
* typeof key === "string" ? key : key.toString()
|
|
240
|
-
* );
|
|
241
|
-
* ```
|
|
242
557
|
*/
|
|
243
558
|
export type IMap<K extends MapSetKeyType, V> = Iterable<readonly [K, V]> & IMapInterface<K, V>;
|
|
244
|
-
/**
|
|
245
|
-
* Provides utility functions for IMap.
|
|
246
|
-
*/
|
|
559
|
+
/** Provides utility functions for IMap. */
|
|
247
560
|
export declare namespace IMap {
|
|
248
561
|
/**
|
|
249
562
|
* Creates a new IMap instance from an iterable of key-value pairs.
|
|
250
563
|
*
|
|
251
|
-
* This factory function accepts any iterable of [key, value] tuples,
|
|
252
|
-
* JavaScript Maps, other IMaps, or custom iterables. The
|
|
253
|
-
* all the entries from the input iterable.
|
|
564
|
+
* This factory function accepts any iterable of [key, value] tuples,
|
|
565
|
+
* including arrays, JavaScript Maps, other IMaps, or custom iterables. The
|
|
566
|
+
* resulting IMap will contain all the entries from the input iterable.
|
|
254
567
|
*
|
|
255
568
|
* **Performance:** O(n) where n is the number of entries in the iterable.
|
|
256
569
|
*
|
|
257
|
-
* @template K The type of the keys. Must extend MapSetKeyType.
|
|
258
|
-
* @template V The type of the values.
|
|
259
|
-
* @param iterable An iterable of key-value pairs (e.g., Array, Map, IMap, etc.)
|
|
260
|
-
* @returns A new IMap instance containing all entries from the iterable.
|
|
261
|
-
*
|
|
262
570
|
* @example
|
|
263
|
-
*
|
|
264
|
-
*
|
|
265
|
-
* const
|
|
266
|
-
* [
|
|
267
|
-
* [
|
|
268
|
-
* ["charlie", 92]
|
|
571
|
+
*
|
|
572
|
+
* ```ts
|
|
573
|
+
* const map = IMap.create<string, number | string>([
|
|
574
|
+
* ['id', 1],
|
|
575
|
+
* ['status', 'active'],
|
|
269
576
|
* ]);
|
|
270
|
-
*
|
|
271
|
-
*
|
|
272
|
-
*
|
|
273
|
-
* const jsMap = new Map([["config", { debug: true }], ["env", "production"]]);
|
|
274
|
-
* const config = IMap.create(jsMap);
|
|
275
|
-
* console.log(config.get("env").unwrap()); // Output: "production"
|
|
276
|
-
*
|
|
277
|
-
* // From another IMap (creates a copy)
|
|
278
|
-
* const originalMap = IMap.create<string, boolean>([["enabled", true]]);
|
|
279
|
-
* const copiedMap = IMap.create(originalMap);
|
|
280
|
-
* console.log(copiedMap.get("enabled").unwrap()); // Output: true
|
|
281
|
-
*
|
|
282
|
-
* // Empty map
|
|
283
|
-
* const emptyMap = IMap.create<string, number>([]);
|
|
284
|
-
* console.log(emptyMap.size); // Output: 0
|
|
285
|
-
*
|
|
286
|
-
* // From custom iterable
|
|
287
|
-
* function* generateEntries(): Generator<[string, number]> {
|
|
288
|
-
* for (const i of range(3)) {
|
|
289
|
-
* yield [`item${i}`, i * 10];
|
|
290
|
-
* }
|
|
291
|
-
* }
|
|
292
|
-
* const generatedMap = IMap.create(generateEntries());
|
|
293
|
-
* console.log(generatedMap.size); // Output: 3
|
|
577
|
+
*
|
|
578
|
+
* assert(map.size === 2);
|
|
579
|
+
* assert.deepStrictEqual(map.get('status'), Optional.some('active'));
|
|
294
580
|
* ```
|
|
581
|
+
*
|
|
582
|
+
* @template K The type of the keys. Must extend MapSetKeyType.
|
|
583
|
+
* @template V The type of the values.
|
|
584
|
+
* @param iterable An iterable of key-value pairs (e.g., Array, Map, IMap,
|
|
585
|
+
* etc.)
|
|
586
|
+
* @returns A new IMap instance containing all entries from the iterable.
|
|
295
587
|
*/
|
|
296
588
|
const create: <K extends MapSetKeyType, V>(iterable: Iterable<readonly [K, V]>) => IMap<K, V>;
|
|
297
589
|
/**
|
|
298
590
|
* Checks if two IMap instances are structurally equal.
|
|
299
591
|
*
|
|
300
|
-
* Two IMaps are considered equal if they have the same size and contain
|
|
301
|
-
* key-value pairs. The order of entries does not matter for
|
|
302
|
-
* Values are compared using JavaScript's `===`
|
|
592
|
+
* Two IMaps are considered equal if they have the same size and contain
|
|
593
|
+
* exactly the same key-value pairs. The order of entries does not matter for
|
|
594
|
+
* equality comparison. Values are compared using JavaScript's `===`
|
|
595
|
+
* operator.
|
|
303
596
|
*
|
|
304
597
|
* **Performance:** O(n) where n is the size of the smaller map.
|
|
305
598
|
*
|
|
306
|
-
* @template K The type of the keys.
|
|
307
|
-
* @template V The type of the values.
|
|
308
|
-
* @param a The first IMap instance to compare.
|
|
309
|
-
* @param b The second IMap instance to compare.
|
|
310
|
-
* @returns `true` if the maps contain exactly the same key-value pairs, `false` otherwise.
|
|
311
|
-
*
|
|
312
599
|
* @example
|
|
313
|
-
* ```typescript
|
|
314
|
-
* // Basic equality comparison
|
|
315
|
-
* const preferences1 = IMap.create<string, boolean>([
|
|
316
|
-
* ["darkMode", true],
|
|
317
|
-
* ["notifications", false]
|
|
318
|
-
* ]);
|
|
319
|
-
* const preferences2 = IMap.create<string, boolean>([
|
|
320
|
-
* ["darkMode", true],
|
|
321
|
-
* ["notifications", false]
|
|
322
|
-
* ]);
|
|
323
|
-
* const preferences3 = IMap.create<string, boolean>([
|
|
324
|
-
* ["notifications", false],
|
|
325
|
-
* ["darkMode", true] // Order doesn't matter
|
|
326
|
-
* ]);
|
|
327
|
-
*
|
|
328
|
-
* console.log(IMap.equal(preferences1, preferences2)); // true
|
|
329
|
-
* console.log(IMap.equal(preferences1, preferences3)); // true (order doesn't matter)
|
|
330
600
|
*
|
|
331
|
-
*
|
|
332
|
-
* const
|
|
333
|
-
* [
|
|
334
|
-
* [
|
|
601
|
+
* ```ts
|
|
602
|
+
* const first = IMap.create<'a' | 'b', number>([
|
|
603
|
+
* ['a', 1],
|
|
604
|
+
* ['b', 2],
|
|
335
605
|
* ]);
|
|
336
|
-
* console.log(IMap.equal(preferences1, preferences4)); // false
|
|
337
606
|
*
|
|
338
|
-
*
|
|
339
|
-
*
|
|
340
|
-
* [
|
|
341
|
-
* ["sounds", false] // Different key
|
|
607
|
+
* const second = IMap.create<'a' | 'b', number>([
|
|
608
|
+
* ['b', 2],
|
|
609
|
+
* ['a', 1],
|
|
342
610
|
* ]);
|
|
343
|
-
* console.log(IMap.equal(preferences1, preferences5)); // false
|
|
344
611
|
*
|
|
345
|
-
*
|
|
346
|
-
*
|
|
347
|
-
*
|
|
348
|
-
*
|
|
612
|
+
* const third = IMap.create<'a' | 'b', number>([
|
|
613
|
+
* ['a', 1],
|
|
614
|
+
* ['b', 3],
|
|
615
|
+
* ]);
|
|
349
616
|
*
|
|
350
|
-
*
|
|
351
|
-
*
|
|
352
|
-
* const users2 = IMap.create<string, User>([["1", { name: "Alice" }]]);
|
|
353
|
-
* console.log(IMap.equal(users1, users2)); // false (different object references)
|
|
617
|
+
* assert.ok(IMap.equal(first, second));
|
|
618
|
+
* assert.notOk(IMap.equal(first, third));
|
|
354
619
|
* ```
|
|
620
|
+
*
|
|
621
|
+
* @template K The type of the keys.
|
|
622
|
+
* @template V The type of the values.
|
|
623
|
+
* @param a The first IMap instance to compare.
|
|
624
|
+
* @param b The second IMap instance to compare.
|
|
625
|
+
* @returns `true` if the maps contain exactly the same key-value pairs,
|
|
626
|
+
* `false` otherwise.
|
|
355
627
|
*/
|
|
356
628
|
const equal: <K extends MapSetKeyType, V>(a: IMap<K, V>, b: IMap<K, V>) => boolean;
|
|
357
629
|
}
|