ts-data-forge 3.2.0 → 3.3.1
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 +45 -21
- 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 +61 -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 +214 -0
- package/dist/array/impl/array-utils-reducing-value.d.mts.map +1 -0
- package/dist/array/impl/array-utils-reducing-value.mjs +160 -0
- package/dist/array/impl/array-utils-reducing-value.mjs.map +1 -0
- package/dist/array/impl/array-utils-search.d.mts +179 -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 +331 -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 -253
- package/dist/collections/imap-mapped.d.mts.map +1 -1
- package/dist/collections/imap-mapped.mjs +33 -164
- package/dist/collections/imap-mapped.mjs.map +1 -1
- package/dist/collections/imap.d.mts +436 -163
- package/dist/collections/imap.d.mts.map +1 -1
- package/dist/collections/imap.mjs +74 -94
- 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 -135
- package/dist/collections/queue.d.mts.map +1 -1
- package/dist/collections/queue.mjs +55 -156
- package/dist/collections/queue.mjs.map +1 -1
- package/dist/collections/stack.d.mts +154 -154
- package/dist/collections/stack.d.mts.map +1 -1
- package/dist/collections/stack.mjs +54 -203
- package/dist/collections/stack.mjs.map +1 -1
- package/dist/entry-point.d.mts +3 -0
- package/dist/entry-point.d.mts.map +1 -0
- package/dist/entry-point.mjs +62 -0
- package/dist/entry-point.mjs.map +1 -0
- 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/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.d.mts +282 -160
- package/dist/functional/optional.d.mts.map +1 -1
- package/dist/functional/optional.mjs +131 -71
- package/dist/functional/optional.mjs.map +1 -1
- package/dist/functional/pipe.d.mts +59 -113
- package/dist/functional/pipe.d.mts.map +1 -1
- package/dist/functional/pipe.mjs.map +1 -1
- package/dist/functional/result.d.mts +433 -332
- package/dist/functional/result.d.mts.map +1 -1
- package/dist/functional/result.mjs +233 -239
- package/dist/functional/result.mjs.map +1 -1
- package/dist/globals.d.mts +12 -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 -1
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +0 -1
- 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 -121
- package/dist/json/json.d.mts.map +1 -1
- package/dist/json/json.mjs +238 -136
- 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 +27 -159
- 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 +122 -120
- 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 +22 -30
- 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 +22 -31
- 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 +31 -39
- 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 +24 -34
- 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 +26 -35
- 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 +25 -40
- 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 +15 -30
- 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 +27 -35
- 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 +29 -36
- 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 +39 -40
- 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 +24 -35
- 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 +24 -35
- 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 +29 -43
- 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 +133 -123
- 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 +24 -35
- 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 +24 -35
- 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 +160 -34
- 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 +24 -35
- 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 +26 -36
- 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 +142 -101
- 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 +25 -34
- 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 +121 -30
- 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 +26 -34
- 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 +26 -68
- 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 +39 -170
- 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 +46 -155
- 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 -20
- 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 +14 -127
- package/dist/others/unknown-to-string.mjs.map +1 -1
- package/dist/promise/promise.d.mts +33 -20
- package/dist/promise/promise.d.mts.map +1 -1
- package/dist/promise/promise.mjs +34 -21
- package/dist/promise/promise.mjs.map +1 -1
- package/dist/types.d.mts +1 -1
- package/package.json +54 -50
- 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 +551 -0
- package/src/array/{array-utils-reducing-value.test.mts → impl/array-utils-reducing-value.test.mts} +45 -50
- 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} +12 -12
- 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/match.mts +35 -145
- package/src/functional/optional.mts +285 -163
- package/src/functional/optional.test.mts +4 -1
- package/src/functional/pipe.mts +60 -113
- package/src/functional/result.mts +452 -351
- package/src/functional/result.test.mts +9 -2
- package/src/globals.d.mts +12 -5
- package/src/guard/has-key.mts +23 -74
- package/src/guard/is-non-empty-string.mts +20 -87
- package/src/guard/is-non-null-object.mts +14 -84
- package/src/guard/is-non-null-object.test.mts +1 -1
- package/src/guard/is-primitive.mts +13 -126
- package/src/guard/is-primitive.test.mts +1 -1
- package/src/guard/is-record.mts +21 -132
- package/src/guard/is-record.test.mts +0 -1
- package/src/guard/is-type.mts +201 -238
- package/src/guard/is-type.test.mts +7 -7
- package/src/guard/key-is-in.mts +22 -139
- package/src/index.mts +0 -1
- 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 +27 -159
- package/src/number/branded-types/int.mts +122 -120
- package/src/number/branded-types/int16.mts +22 -30
- package/src/number/branded-types/int16.test.mts +24 -24
- package/src/number/branded-types/int32.mts +22 -31
- package/src/number/branded-types/int32.test.mts +39 -39
- package/src/number/branded-types/non-negative-finite-number.mts +31 -39
- package/src/number/branded-types/non-negative-int16.mts +24 -34
- package/src/number/branded-types/non-negative-int16.test.mts +16 -16
- package/src/number/branded-types/non-negative-int32.mts +26 -35
- package/src/number/branded-types/non-negative-int32.test.mts +30 -30
- package/src/number/branded-types/non-zero-finite-number.mts +25 -40
- package/src/number/branded-types/non-zero-int.mts +15 -30
- package/src/number/branded-types/non-zero-int16.mts +27 -35
- package/src/number/branded-types/non-zero-int16.test.mts +26 -26
- package/src/number/branded-types/non-zero-int32.mts +29 -36
- package/src/number/branded-types/non-zero-int32.test.mts +45 -42
- package/src/number/branded-types/non-zero-safe-int.mts +39 -40
- package/src/number/branded-types/non-zero-uint16.mts +24 -35
- package/src/number/branded-types/non-zero-uint16.test.mts +16 -16
- package/src/number/branded-types/non-zero-uint32.mts +24 -35
- package/src/number/branded-types/non-zero-uint32.test.mts +28 -28
- package/src/number/branded-types/positive-finite-number.mts +29 -43
- package/src/number/branded-types/positive-int.mts +134 -124
- package/src/number/branded-types/positive-int16.mts +24 -35
- package/src/number/branded-types/positive-int16.test.mts +14 -14
- package/src/number/branded-types/positive-int32.mts +24 -35
- package/src/number/branded-types/positive-int32.test.mts +26 -26
- package/src/number/branded-types/positive-safe-int.mts +160 -34
- package/src/number/branded-types/positive-uint16.mts +24 -35
- package/src/number/branded-types/positive-uint16.test.mts +16 -16
- package/src/number/branded-types/positive-uint32.mts +26 -36
- package/src/number/branded-types/positive-uint32.test.mts +31 -28
- package/src/number/branded-types/safe-int.mts +142 -101
- package/src/number/branded-types/safe-uint.mts +25 -34
- package/src/number/branded-types/uint.mts +121 -30
- package/src/number/branded-types/uint16.mts +26 -34
- package/src/number/branded-types/uint16.test.mts +16 -16
- package/src/number/branded-types/uint32.mts +26 -68
- package/src/number/branded-types/uint32.test.mts +28 -28
- package/src/number/enum/int8.mts +39 -170
- package/src/number/enum/uint8.mts +46 -155
- 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 +15 -127
- package/src/others/unknown-to-string.test.mts +14 -2
- 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/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
|
@@ -7,13 +7,26 @@ const OkTypeTagName = 'ts-data-forge::Result.ok';
|
|
|
7
7
|
/** @internal String literal tag to identify the 'Err' variant of Result. */
|
|
8
8
|
const ErrTypeTagName = 'ts-data-forge::Result.err';
|
|
9
9
|
/**
|
|
10
|
-
* Namespace for the `Result` type and related functions.
|
|
11
|
-
*
|
|
10
|
+
* Namespace for the `Result` type and related functions. Provides utilities to
|
|
11
|
+
* handle operations that can succeed or fail.
|
|
12
12
|
*/
|
|
13
13
|
var Result;
|
|
14
14
|
(function (Result) {
|
|
15
15
|
/**
|
|
16
16
|
* Checks if the given value is a `Result`.
|
|
17
|
+
*
|
|
18
|
+
* @example
|
|
19
|
+
*
|
|
20
|
+
* ```ts
|
|
21
|
+
* const okValue = Result.ok('success');
|
|
22
|
+
* const errValue = Result.err(new Error('failure'));
|
|
23
|
+
* const notResult = { $$tag: 'ts-data-forge::Result.ok' };
|
|
24
|
+
*
|
|
25
|
+
* assert.ok(Result.isResult(okValue));
|
|
26
|
+
* assert.ok(Result.isResult(errValue));
|
|
27
|
+
* assert.notOk(Result.isResult(notResult));
|
|
28
|
+
* ```
|
|
29
|
+
*
|
|
17
30
|
* @param maybeOptional The value to check.
|
|
18
31
|
* @returns `true` if the value is a `Result`, otherwise `false`.
|
|
19
32
|
*/
|
|
@@ -25,30 +38,25 @@ var Result;
|
|
|
25
38
|
/**
|
|
26
39
|
* Creates a `Result.Ok` containing the given success value.
|
|
27
40
|
*
|
|
28
|
-
* Use this constructor when an operation succeeds and you want to wrap
|
|
29
|
-
*
|
|
41
|
+
* Use this constructor when an operation succeeds and you want to wrap the
|
|
42
|
+
* successful result in a Result type for consistent error handling.
|
|
30
43
|
*
|
|
31
|
-
* @template S The type of the success value.
|
|
32
|
-
* @param value The success value.
|
|
33
|
-
* @returns A `Result.Ok<S>` containing the value.
|
|
34
44
|
* @example
|
|
35
|
-
* ```typescript
|
|
36
|
-
* // Basic success case
|
|
37
|
-
* const success = Result.ok(42);
|
|
38
|
-
* console.log(Result.isOk(success)); // true
|
|
39
|
-
* console.log(Result.unwrapOk(success)); // 42
|
|
40
|
-
*
|
|
41
|
-
* // Function that returns a Result
|
|
42
|
-
* function divide(a: number, b: number): Result<number, string> {
|
|
43
|
-
* if (b === 0) {
|
|
44
|
-
* return Result.err("Division by zero");
|
|
45
|
-
* }
|
|
46
|
-
* return Result.ok(a / b);
|
|
47
|
-
* }
|
|
48
45
|
*
|
|
49
|
-
*
|
|
50
|
-
*
|
|
46
|
+
* ```ts
|
|
47
|
+
* const success = Result.ok({ id: 1 });
|
|
48
|
+
* const failure = Result.err(new Error('missing data'));
|
|
49
|
+
*
|
|
50
|
+
* assert.deepStrictEqual(success, {
|
|
51
|
+
* $$tag: 'ts-data-forge::Result.ok',
|
|
52
|
+
* value: { id: 1 },
|
|
53
|
+
* });
|
|
54
|
+
* assert.ok(Result.isErr(failure));
|
|
51
55
|
* ```
|
|
56
|
+
*
|
|
57
|
+
* @template S The type of the success value.
|
|
58
|
+
* @param value The success value.
|
|
59
|
+
* @returns A `Result.Ok<S>` containing the value.
|
|
52
60
|
*/
|
|
53
61
|
Result.ok = (value) => ({
|
|
54
62
|
$$tag: OkTypeTagName,
|
|
@@ -57,42 +65,25 @@ var Result;
|
|
|
57
65
|
/**
|
|
58
66
|
* Creates a `Result.Err` containing the given error value.
|
|
59
67
|
*
|
|
60
|
-
* Use this constructor when an operation fails and you want to wrap
|
|
61
|
-
*
|
|
68
|
+
* Use this constructor when an operation fails and you want to wrap the error
|
|
69
|
+
* information in a Result type for consistent error handling.
|
|
62
70
|
*
|
|
63
|
-
* @template E The type of the error value.
|
|
64
|
-
* @param value The error value.
|
|
65
|
-
* @returns A `Result.Err<E>` containing the value.
|
|
66
71
|
* @example
|
|
67
|
-
* ```typescript
|
|
68
|
-
* // Basic error case
|
|
69
|
-
* const failure = Result.err("Something went wrong");
|
|
70
|
-
* console.log(Result.isErr(failure)); // true
|
|
71
|
-
* console.log(Result.unwrapErr(failure)); // "Something went wrong"
|
|
72
|
-
*
|
|
73
|
-
* // Function that can fail
|
|
74
|
-
* function parseInteger(input: string): Result<number, string> {
|
|
75
|
-
* const num = parseInt(input, 10);
|
|
76
|
-
* if (isNaN(num)) {
|
|
77
|
-
* return Result.err(`Invalid number format: ${input}`);
|
|
78
|
-
* }
|
|
79
|
-
* return Result.ok(num);
|
|
80
|
-
* }
|
|
81
72
|
*
|
|
82
|
-
*
|
|
83
|
-
*
|
|
73
|
+
* ```ts
|
|
74
|
+
* const success = Result.ok({ id: 1 });
|
|
75
|
+
* const failure = Result.err(new Error('missing data'));
|
|
84
76
|
*
|
|
85
|
-
*
|
|
86
|
-
*
|
|
87
|
-
*
|
|
88
|
-
* message: string;
|
|
89
|
-
* }
|
|
90
|
-
*
|
|
91
|
-
* const validationError = Result.err<ValidationError>({
|
|
92
|
-
* field: "email",
|
|
93
|
-
* message: "Invalid email format"
|
|
77
|
+
* assert.deepStrictEqual(success, {
|
|
78
|
+
* $$tag: 'ts-data-forge::Result.ok',
|
|
79
|
+
* value: { id: 1 },
|
|
94
80
|
* });
|
|
81
|
+
* assert.ok(Result.isErr(failure));
|
|
95
82
|
* ```
|
|
83
|
+
*
|
|
84
|
+
* @template E The type of the error value.
|
|
85
|
+
* @param value The error value.
|
|
86
|
+
* @returns A `Result.Err<E>` containing the value.
|
|
96
87
|
*/
|
|
97
88
|
Result.err = (value) => ({
|
|
98
89
|
$$tag: ErrTypeTagName,
|
|
@@ -104,128 +95,98 @@ var Result;
|
|
|
104
95
|
*/
|
|
105
96
|
const toStr_ = String;
|
|
106
97
|
/**
|
|
107
|
-
* Checks if a `Result` is `Result.Ok`.
|
|
108
|
-
*
|
|
98
|
+
* Checks if a `Result` is `Result.Ok`. Acts as a type guard, narrowing the
|
|
99
|
+
* type to the success variant.
|
|
109
100
|
*
|
|
110
101
|
* This function is essential for type-safe Result handling, allowing
|
|
111
|
-
* TypeScript to understand that subsequent operations will work with
|
|
112
|
-
*
|
|
102
|
+
* TypeScript to understand that subsequent operations will work with the
|
|
103
|
+
* success value rather than the error value.
|
|
113
104
|
*
|
|
114
|
-
* @template R The `Result.Base` type to check.
|
|
115
|
-
* @param result The `Result` to check.
|
|
116
|
-
* @returns `true` if the `Result` is `Result.Ok`, otherwise `false`.
|
|
117
105
|
* @example
|
|
118
|
-
*
|
|
119
|
-
*
|
|
120
|
-
* const
|
|
121
|
-
*
|
|
122
|
-
*
|
|
123
|
-
*
|
|
124
|
-
*
|
|
125
|
-
*
|
|
126
|
-
* } else {
|
|
127
|
-
* // TypeScript knows result is Result.Err<string>
|
|
128
|
-
* console.log(result.value); // Error message
|
|
106
|
+
*
|
|
107
|
+
* ```ts
|
|
108
|
+
* const operation = Result.ok(3);
|
|
109
|
+
* const failure = Result.err('error');
|
|
110
|
+
*
|
|
111
|
+
* if (Result.isOk(operation)) {
|
|
112
|
+
* const value: number = operation.value;
|
|
113
|
+
* assert(value === 3);
|
|
129
114
|
* }
|
|
130
115
|
*
|
|
131
|
-
*
|
|
132
|
-
* const processResult = (r: Result<string, Error>) => {
|
|
133
|
-
* return Result.isOk(r)
|
|
134
|
-
* ? r.value.toUpperCase() // Safe string operations
|
|
135
|
-
* : "Error occurred";
|
|
136
|
-
* };
|
|
137
|
-
*
|
|
138
|
-
* // Filtering arrays of Results
|
|
139
|
-
* const results: Result<number, string>[] = [
|
|
140
|
-
* Result.ok(1),
|
|
141
|
-
* Result.err("error"),
|
|
142
|
-
* Result.ok(2)
|
|
143
|
-
* ];
|
|
144
|
-
* const successes = results.filter(Result.isOk);
|
|
145
|
-
* // successes is Result.Ok<number>[]
|
|
116
|
+
* assert.ok(Result.isErr(failure));
|
|
146
117
|
* ```
|
|
118
|
+
*
|
|
119
|
+
* @template R The `Result.Base` type to check.
|
|
120
|
+
* @param result The `Result` to check.
|
|
121
|
+
* @returns `true` if the `Result` is `Result.Ok`, otherwise `false`.
|
|
147
122
|
*/
|
|
148
123
|
Result.isOk = (result) => result.$$tag === OkTypeTagName;
|
|
149
124
|
/**
|
|
150
|
-
* Checks if a `Result` is `Result.Err`.
|
|
151
|
-
*
|
|
125
|
+
* Checks if a `Result` is `Result.Err`. Acts as a type guard, narrowing the
|
|
126
|
+
* type to the error variant.
|
|
152
127
|
*
|
|
153
128
|
* This function is essential for type-safe Result handling, allowing
|
|
154
|
-
* TypeScript to understand that subsequent operations will work with
|
|
155
|
-
*
|
|
129
|
+
* TypeScript to understand that subsequent operations will work with the
|
|
130
|
+
* error value rather than the success value.
|
|
156
131
|
*
|
|
157
|
-
* @template R The `Result.Base` type to check.
|
|
158
|
-
* @param result The `Result` to check.
|
|
159
|
-
* @returns `true` if the `Result` is `Result.Err`, otherwise `false`.
|
|
160
132
|
* @example
|
|
161
|
-
*
|
|
162
|
-
*
|
|
163
|
-
* const
|
|
164
|
-
*
|
|
165
|
-
*
|
|
166
|
-
*
|
|
167
|
-
*
|
|
168
|
-
*
|
|
169
|
-
* } else {
|
|
170
|
-
* // TypeScript knows result is Result.Ok<number>
|
|
171
|
-
* console.log(result.value); // Success value
|
|
133
|
+
*
|
|
134
|
+
* ```ts
|
|
135
|
+
* const operation = Result.ok(3);
|
|
136
|
+
* const failure = Result.err('error');
|
|
137
|
+
*
|
|
138
|
+
* if (Result.isOk(operation)) {
|
|
139
|
+
* const value: number = operation.value;
|
|
140
|
+
* assert(value === 3);
|
|
172
141
|
* }
|
|
173
142
|
*
|
|
174
|
-
*
|
|
175
|
-
* const handleResult = (r: Result<Data, ApiError>) => {
|
|
176
|
-
* if (Result.isErr(r)) {
|
|
177
|
-
* logError(r.value); // Safe error operations
|
|
178
|
-
* return null;
|
|
179
|
-
* }
|
|
180
|
-
* return processData(r.value);
|
|
181
|
-
* };
|
|
182
|
-
*
|
|
183
|
-
* // Collecting errors from multiple Results
|
|
184
|
-
* const results: Result<string, ValidationError>[] = validateForm();
|
|
185
|
-
* const errors = results
|
|
186
|
-
* .filter(Result.isErr)
|
|
187
|
-
* .map(err => err.value); // ValidationError[]
|
|
143
|
+
* assert.ok(Result.isErr(failure));
|
|
188
144
|
* ```
|
|
145
|
+
*
|
|
146
|
+
* @template R The `Result.Base` type to check.
|
|
147
|
+
* @param result The `Result` to check.
|
|
148
|
+
* @returns `true` if the `Result` is `Result.Err`, otherwise `false`.
|
|
189
149
|
*/
|
|
190
150
|
Result.isErr = (result) => result.$$tag === ErrTypeTagName;
|
|
191
151
|
/**
|
|
192
|
-
* Unwraps a `Result`, returning the success value.
|
|
193
|
-
*
|
|
152
|
+
* Unwraps a `Result`, returning the success value. Throws an error if the
|
|
153
|
+
* `Result` is `Result.Err`.
|
|
194
154
|
*
|
|
195
|
-
* This is useful when you're confident that a Result should contain a success
|
|
196
|
-
* and want to treat errors as exceptional conditions. The error message
|
|
197
|
-
* constructed from the error value using the provided string
|
|
155
|
+
* This is useful when you're confident that a Result should contain a success
|
|
156
|
+
* value and want to treat errors as exceptional conditions. The error message
|
|
157
|
+
* will be constructed from the error value using the provided string
|
|
158
|
+
* conversion function.
|
|
159
|
+
*
|
|
160
|
+
* @example
|
|
161
|
+
*
|
|
162
|
+
* ```ts
|
|
163
|
+
* const okResult = Result.ok('data');
|
|
164
|
+
* const errResult = Result.err(new Error('fail'));
|
|
165
|
+
*
|
|
166
|
+
* assert(Result.unwrapThrow(okResult) === 'data');
|
|
167
|
+
* assert.throws(() => Result.unwrapThrow(errResult), /fail/u);
|
|
168
|
+
* ```
|
|
198
169
|
*
|
|
199
170
|
* @template R The `Result.Base` type to unwrap.
|
|
200
171
|
* @param result The `Result` to unwrap.
|
|
201
|
-
* @param toStr An optional function to convert the error value to a string
|
|
172
|
+
* @param toStr An optional function to convert the error value to a string
|
|
173
|
+
* for the error message. Defaults to `String`.
|
|
202
174
|
* @returns The success value if `Result.Ok`.
|
|
203
|
-
* @throws {Error} Error with the stringified error value if the `Result` is
|
|
204
|
-
*
|
|
205
|
-
* ```typescript
|
|
206
|
-
* const success = Result.ok(42);
|
|
207
|
-
* console.log(Result.unwrapThrow(success)); // 42
|
|
208
|
-
*
|
|
209
|
-
* const failure = Result.err("Network error");
|
|
210
|
-
* try {
|
|
211
|
-
* Result.unwrapThrow(failure); // throws Error: "Network error"
|
|
212
|
-
* } catch (error) {
|
|
213
|
-
* console.log(error.message); // "Network error"
|
|
214
|
-
* }
|
|
215
|
-
* ```
|
|
175
|
+
* @throws {Error} Error with the stringified error value if the `Result` is
|
|
176
|
+
* `Result.Err`.
|
|
216
177
|
*/
|
|
217
178
|
Result.unwrapThrow = (result, toStr = toStr_) => {
|
|
218
179
|
if (Result.isErr(result)) {
|
|
219
|
-
// eslint-disable-next-line
|
|
180
|
+
// eslint-disable-next-line total-functions/no-unsafe-type-assertion
|
|
220
181
|
throw new Error(toStr(result.value));
|
|
221
182
|
}
|
|
222
|
-
// eslint-disable-next-line
|
|
183
|
+
// eslint-disable-next-line total-functions/no-unsafe-type-assertion
|
|
223
184
|
return result.value;
|
|
224
185
|
};
|
|
225
186
|
function unwrapOk(result) {
|
|
226
187
|
return Result.isErr(result)
|
|
227
188
|
? undefined
|
|
228
|
-
: // eslint-disable-next-line
|
|
189
|
+
: // eslint-disable-next-line total-functions/no-unsafe-type-assertion
|
|
229
190
|
result.value;
|
|
230
191
|
}
|
|
231
192
|
Result.unwrapOk = unwrapOk;
|
|
@@ -234,7 +195,7 @@ var Result;
|
|
|
234
195
|
case 2: {
|
|
235
196
|
// Direct version: first argument is result
|
|
236
197
|
const [result, defaultValue] = args;
|
|
237
|
-
// eslint-disable-next-line
|
|
198
|
+
// eslint-disable-next-line total-functions/no-unsafe-type-assertion
|
|
238
199
|
return Result.isErr(result) ? defaultValue : result.value;
|
|
239
200
|
}
|
|
240
201
|
case 1: {
|
|
@@ -246,68 +207,77 @@ var Result;
|
|
|
246
207
|
}
|
|
247
208
|
Result.unwrapOkOr = unwrapOkOr;
|
|
248
209
|
/**
|
|
249
|
-
* Unwraps a `Result`, returning the error value.
|
|
250
|
-
*
|
|
210
|
+
* Unwraps a `Result`, returning the error value. Throws an error if the
|
|
211
|
+
* `Result` is `Result.Ok`.
|
|
251
212
|
*
|
|
252
213
|
* This function is used when you expect a Result to be an error and want to
|
|
253
|
-
* extract the error value. If the Result is unexpectedly Ok, it will throw
|
|
254
|
-
*
|
|
214
|
+
* extract the error value. If the Result is unexpectedly Ok, it will throw an
|
|
215
|
+
* error with information about the unexpected success value.
|
|
216
|
+
*
|
|
217
|
+
* @example
|
|
218
|
+
*
|
|
219
|
+
* ```ts
|
|
220
|
+
* const errResult = Result.err(new Error('broken'));
|
|
221
|
+
* const okResult = Result.ok('value');
|
|
222
|
+
*
|
|
223
|
+
* assert(Result.unwrapErrThrow(errResult).message === 'broken');
|
|
224
|
+
* assert.throws(() => Result.unwrapErrThrow(okResult), /Expected Err/u);
|
|
225
|
+
* ```
|
|
255
226
|
*
|
|
256
227
|
* @template R The `Result.Base` type to unwrap.
|
|
257
228
|
* @param result The `Result` to unwrap.
|
|
258
|
-
* @param toStr An optional function to convert the success value to a string
|
|
229
|
+
* @param toStr An optional function to convert the success value to a string
|
|
230
|
+
* for the error message when the Result is unexpectedly Ok. Defaults to
|
|
231
|
+
* `String`.
|
|
259
232
|
* @returns The error value if `Result.Err`.
|
|
260
|
-
* @throws {Error} Error with message "Expected Err but got Ok: {value}" if
|
|
261
|
-
*
|
|
262
|
-
* ```typescript
|
|
263
|
-
* const failure = Result.err("Network timeout");
|
|
264
|
-
* console.log(Result.unwrapErrThrow(failure)); // "Network timeout"
|
|
265
|
-
*
|
|
266
|
-
* const success = Result.ok(42);
|
|
267
|
-
* try {
|
|
268
|
-
* Result.unwrapErrThrow(success); // throws Error: "Expected Err but got Ok: 42"
|
|
269
|
-
* } catch (error) {
|
|
270
|
-
* console.log(error.message); // "Expected Err but got Ok: 42"
|
|
271
|
-
* }
|
|
272
|
-
* ```
|
|
233
|
+
* @throws {Error} Error with message "Expected Err but got Ok: {value}" if
|
|
234
|
+
* the `Result` is `Result.Ok`.
|
|
273
235
|
*/
|
|
274
236
|
Result.unwrapErrThrow = (result, toStr = toStr_) => {
|
|
275
237
|
if (Result.isOk(result)) {
|
|
276
238
|
throw new Error(
|
|
277
|
-
// eslint-disable-next-line
|
|
239
|
+
// eslint-disable-next-line total-functions/no-unsafe-type-assertion
|
|
278
240
|
`Expected Err but got Ok: ${toStr(result.value)}`);
|
|
279
241
|
}
|
|
280
|
-
// eslint-disable-next-line
|
|
242
|
+
// eslint-disable-next-line total-functions/no-unsafe-type-assertion
|
|
281
243
|
return result.value;
|
|
282
244
|
};
|
|
283
245
|
/**
|
|
284
|
-
* Unwraps a `Result`, returning the error value or `undefined` if it is
|
|
246
|
+
* Unwraps a `Result`, returning the error value or `undefined` if it is
|
|
247
|
+
* `Result.Ok`.
|
|
285
248
|
*
|
|
286
|
-
* This provides a safe way to extract error values from Results without
|
|
287
|
-
* exceptions. Useful for error handling patterns where you want to
|
|
288
|
-
* specific error conditions.
|
|
249
|
+
* This provides a safe way to extract error values from Results without
|
|
250
|
+
* throwing exceptions. Useful for error handling patterns where you want to
|
|
251
|
+
* check for specific error conditions.
|
|
289
252
|
*
|
|
290
|
-
* @template R The `Result.Base` type to unwrap.
|
|
291
|
-
* @param result The `Result` to unwrap.
|
|
292
|
-
* @returns The error value if `Result.Err`, otherwise `undefined`.
|
|
293
253
|
* @example
|
|
294
|
-
* ```typescript
|
|
295
|
-
* const failure = Result.err("Connection failed");
|
|
296
|
-
* console.log(Result.unwrapErr(failure)); // "Connection failed"
|
|
297
254
|
*
|
|
298
|
-
*
|
|
299
|
-
*
|
|
255
|
+
* ```ts
|
|
256
|
+
* const okResult = Result.ok('data');
|
|
257
|
+
* const errResult = Result.err('problem');
|
|
258
|
+
*
|
|
259
|
+
* // Result.unwrapErr returns undefined for Ok results
|
|
260
|
+
* // eslint-disable-next-line @typescript-eslint/no-confusing-void-expression
|
|
261
|
+
* assert(Result.unwrapErr(okResult) === undefined);
|
|
262
|
+
*
|
|
263
|
+
* // Result.unwrapErr returns the error value for Err results
|
|
264
|
+
*
|
|
265
|
+
* assert(Result.unwrapErr(errResult) === 'problem');
|
|
300
266
|
* ```
|
|
267
|
+
*
|
|
268
|
+
* @template R The `Result.Base` type to unwrap.
|
|
269
|
+
* @param result The `Result` to unwrap.
|
|
270
|
+
* @returns The error value if `Result.Err`, otherwise `undefined`.
|
|
301
271
|
*/
|
|
302
272
|
Result.unwrapErr = (result) =>
|
|
303
|
-
// eslint-disable-next-line
|
|
273
|
+
// eslint-disable-next-line total-functions/no-unsafe-type-assertion
|
|
304
274
|
Result.isErr(result) ? result.value : undefined;
|
|
305
275
|
function unwrapErrOr(...args) {
|
|
306
276
|
switch (args.length) {
|
|
307
277
|
case 2: {
|
|
308
278
|
// Direct version: first argument is result
|
|
309
279
|
const [result, defaultValue] = args;
|
|
310
|
-
// eslint-disable-next-line
|
|
280
|
+
// eslint-disable-next-line total-functions/no-unsafe-type-assertion
|
|
311
281
|
return Result.isErr(result) ? result.value : defaultValue;
|
|
312
282
|
}
|
|
313
283
|
case 1: {
|
|
@@ -323,9 +293,9 @@ var Result;
|
|
|
323
293
|
case 2: {
|
|
324
294
|
const [result, mapFn] = args;
|
|
325
295
|
return Result.isErr(result)
|
|
326
|
-
? // eslint-disable-next-line
|
|
296
|
+
? // eslint-disable-next-line total-functions/no-unsafe-type-assertion
|
|
327
297
|
result
|
|
328
|
-
: // eslint-disable-next-line
|
|
298
|
+
: // eslint-disable-next-line total-functions/no-unsafe-type-assertion
|
|
329
299
|
Result.ok(mapFn(result.value));
|
|
330
300
|
}
|
|
331
301
|
case 1: {
|
|
@@ -341,9 +311,9 @@ var Result;
|
|
|
341
311
|
case 2: {
|
|
342
312
|
const [result, mapFn] = args;
|
|
343
313
|
return Result.isOk(result)
|
|
344
|
-
? // eslint-disable-next-line
|
|
314
|
+
? // eslint-disable-next-line total-functions/no-unsafe-type-assertion
|
|
345
315
|
result
|
|
346
|
-
: // eslint-disable-next-line
|
|
316
|
+
: // eslint-disable-next-line total-functions/no-unsafe-type-assertion
|
|
347
317
|
Result.err(mapFn(result.value));
|
|
348
318
|
}
|
|
349
319
|
case 1: {
|
|
@@ -359,9 +329,9 @@ var Result;
|
|
|
359
329
|
case 3: {
|
|
360
330
|
const [result, mapFn, mapErrFn] = args;
|
|
361
331
|
return Result.isOk(result)
|
|
362
|
-
? // eslint-disable-next-line
|
|
332
|
+
? // eslint-disable-next-line total-functions/no-unsafe-type-assertion
|
|
363
333
|
Result.ok(mapFn(result.value))
|
|
364
|
-
: // eslint-disable-next-line
|
|
334
|
+
: // eslint-disable-next-line total-functions/no-unsafe-type-assertion
|
|
365
335
|
Result.err(mapErrFn(result.value));
|
|
366
336
|
}
|
|
367
337
|
case 2: {
|
|
@@ -376,9 +346,9 @@ var Result;
|
|
|
376
346
|
case 2: {
|
|
377
347
|
const [result, flatMapFn] = args;
|
|
378
348
|
return Result.isErr(result)
|
|
379
|
-
? // eslint-disable-next-line
|
|
349
|
+
? // eslint-disable-next-line total-functions/no-unsafe-type-assertion
|
|
380
350
|
result
|
|
381
|
-
: // eslint-disable-next-line
|
|
351
|
+
: // eslint-disable-next-line total-functions/no-unsafe-type-assertion
|
|
382
352
|
flatMapFn(result.value);
|
|
383
353
|
}
|
|
384
354
|
case 1: {
|
|
@@ -407,48 +377,64 @@ var Result;
|
|
|
407
377
|
}
|
|
408
378
|
Result.expectToBe = expectToBe;
|
|
409
379
|
/**
|
|
410
|
-
* Converts a Promise into a Promise that resolves to a `Result`.
|
|
411
|
-
*
|
|
412
|
-
*
|
|
380
|
+
* Converts a Promise into a Promise that resolves to a `Result`. If the input
|
|
381
|
+
* Promise resolves, the `Result` will be `Ok` with the resolved value. If the
|
|
382
|
+
* input Promise rejects, the `Result` will be `Err` with the rejection
|
|
383
|
+
* reason.
|
|
384
|
+
*
|
|
385
|
+
* @example
|
|
386
|
+
*
|
|
387
|
+
* ```ts
|
|
388
|
+
* const successPromise = Result.fromPromise(Promise.resolve('ok'));
|
|
389
|
+
* const failurePromise = Result.fromPromise(Promise.reject(new Error('fail')));
|
|
390
|
+
*
|
|
391
|
+
* const resolved = await successPromise;
|
|
392
|
+
* const rejected = await failurePromise;
|
|
393
|
+
*
|
|
394
|
+
* assert.deepStrictEqual(resolved, Result.ok('ok'));
|
|
395
|
+
* assert.ok(Result.isErr(rejected));
|
|
396
|
+
* ```
|
|
397
|
+
*
|
|
413
398
|
* @template P The type of the input Promise.
|
|
414
399
|
* @param promise The Promise to convert.
|
|
415
400
|
* @returns A Promise that resolves to `Result<UnwrapPromise<P>, unknown>`.
|
|
416
401
|
*/
|
|
417
402
|
Result.fromPromise = (promise) =>
|
|
418
|
-
// eslint-disable-next-line
|
|
403
|
+
// eslint-disable-next-line total-functions/no-unsafe-type-assertion
|
|
419
404
|
promise.then((v) => Result.ok(v)).catch(Result.err);
|
|
420
405
|
/**
|
|
421
406
|
* Wraps a function that may throw an exception in a `Result`.
|
|
422
407
|
*
|
|
423
|
-
* This is a fundamental utility for converting traditional exception-based
|
|
424
|
-
* handling into Result-based error handling. Any thrown value is
|
|
425
|
-
* Error object for consistent error handling.
|
|
408
|
+
* This is a fundamental utility for converting traditional exception-based
|
|
409
|
+
* error handling into Result-based error handling. Any thrown value is
|
|
410
|
+
* converted to an Error object for consistent error handling.
|
|
426
411
|
*
|
|
427
412
|
* If the function executes successfully, returns `Result.Ok` with the result.
|
|
428
413
|
* If the function throws, returns `Result.Err` with the caught error.
|
|
429
414
|
*
|
|
430
|
-
* @template T The return type of the function.
|
|
431
|
-
* @param fn The function to execute that may throw.
|
|
432
|
-
* @returns A `Result<T, Error>` containing either the successful result or the caught error.
|
|
433
415
|
* @example
|
|
434
|
-
* ```typescript
|
|
435
|
-
* // Wrapping JSON.parse which can throw
|
|
436
|
-
* const parseJson = <T>(text: string): Result<T, Error> =>
|
|
437
|
-
* Result.fromThrowable(() => JSON.parse(text) as T);
|
|
438
|
-
*
|
|
439
|
-
* const validJson = parseJson<{valid: boolean}>('{"valid": true}');
|
|
440
|
-
* if (Result.isOk(validJson)) {
|
|
441
|
-
* console.log(validJson.value.valid); // true
|
|
442
|
-
* }
|
|
443
416
|
*
|
|
417
|
+
* ```ts
|
|
418
|
+
* const success = Result.fromThrowable(() => 1 + 1);
|
|
419
|
+
* const failure = Result.fromThrowable(() => {
|
|
420
|
+
* throw new Error('boom');
|
|
421
|
+
* });
|
|
422
|
+
*
|
|
423
|
+
* assert.deepStrictEqual(success, Result.ok(2));
|
|
424
|
+
* assert.ok(Result.isErr(failure));
|
|
444
425
|
* ```
|
|
426
|
+
*
|
|
427
|
+
* @template T The return type of the function.
|
|
428
|
+
* @param fn The function to execute that may throw.
|
|
429
|
+
* @returns A `Result<T, Error>` containing either the successful result or
|
|
430
|
+
* the caught error.
|
|
445
431
|
*/
|
|
446
432
|
Result.fromThrowable = (fn) => {
|
|
447
433
|
try {
|
|
448
434
|
return Result.ok(fn());
|
|
449
435
|
}
|
|
450
436
|
catch (error) {
|
|
451
|
-
if (error
|
|
437
|
+
if (Error.isError(error)) {
|
|
452
438
|
return Result.err(error);
|
|
453
439
|
}
|
|
454
440
|
const msg = unknownToString(error);
|
|
@@ -457,46 +443,48 @@ var Result;
|
|
|
457
443
|
};
|
|
458
444
|
/**
|
|
459
445
|
* Swaps the success and error values of a `Result`.
|
|
446
|
+
*
|
|
447
|
+
* @example
|
|
448
|
+
*
|
|
449
|
+
* ```ts
|
|
450
|
+
* const okValue = Result.ok('value');
|
|
451
|
+
* const errValue = Result.err('error');
|
|
452
|
+
*
|
|
453
|
+
* assert.deepStrictEqual(Result.swap(okValue), Result.err('value'));
|
|
454
|
+
* assert.deepStrictEqual(Result.swap(errValue), Result.ok('error'));
|
|
455
|
+
* ```
|
|
456
|
+
*
|
|
460
457
|
* @template R The input `Result.Base` type.
|
|
461
458
|
* @param result The `Result` to swap.
|
|
462
459
|
* @returns A new `Result` with success and error swapped.
|
|
463
|
-
* @example
|
|
464
|
-
* ```typescript
|
|
465
|
-
* const okResult = Result.ok(42);
|
|
466
|
-
* const swapped = Result.swap(okResult);
|
|
467
|
-
* console.log(Result.isErr(swapped)); // true
|
|
468
|
-
* console.log(Result.unwrapErr(swapped)); // 42
|
|
469
|
-
* ```
|
|
470
460
|
*/
|
|
471
461
|
Result.swap = (result) =>
|
|
472
|
-
// eslint-disable-next-line
|
|
462
|
+
// eslint-disable-next-line total-functions/no-unsafe-type-assertion
|
|
473
463
|
Result.isOk(result) ? Result.err(unwrapOk(result)) : Result.ok(result.value);
|
|
474
464
|
/**
|
|
475
465
|
* Converts a `Result` to an `Optional`.
|
|
476
466
|
*
|
|
477
|
-
* This conversion is useful when you want to discard error information and
|
|
478
|
-
* care about whether an operation succeeded. The error information is
|
|
479
|
-
* this conversion, so use it when error details are not needed.
|
|
467
|
+
* This conversion is useful when you want to discard error information and
|
|
468
|
+
* only care about whether an operation succeeded. The error information is
|
|
469
|
+
* lost in this conversion, so use it when error details are not needed.
|
|
480
470
|
*
|
|
481
|
-
* If the `Result` is `Ok`, returns `Some` with the value.
|
|
482
|
-
*
|
|
471
|
+
* If the `Result` is `Ok`, returns `Some` with the value. If the `Result` is
|
|
472
|
+
* `Err`, returns `None`.
|
|
483
473
|
*
|
|
484
|
-
* @template R The input `Result.Base` type.
|
|
485
|
-
* @param result The `Result` to convert.
|
|
486
|
-
* @returns An `Optional<UnwrapOk<R>>` containing the success value or representing `None`.
|
|
487
474
|
* @example
|
|
488
|
-
* ```typescript
|
|
489
|
-
* // Basic conversion
|
|
490
|
-
* const okResult = Result.ok(42);
|
|
491
|
-
* const optional = Result.toOptional(okResult);
|
|
492
|
-
* console.log(Optional.isSome(optional)); // true
|
|
493
|
-
* console.log(Optional.unwrap(optional)); // 42
|
|
494
475
|
*
|
|
495
|
-
*
|
|
496
|
-
* const
|
|
497
|
-
*
|
|
476
|
+
* ```ts
|
|
477
|
+
* const okValue = Result.ok(7);
|
|
478
|
+
* const errValue = Result.err('fail');
|
|
498
479
|
*
|
|
480
|
+
* assert.deepStrictEqual(Result.toOptional(okValue), Optional.some(7));
|
|
481
|
+
* assert.deepStrictEqual(Result.toOptional(errValue), Optional.none);
|
|
499
482
|
* ```
|
|
483
|
+
*
|
|
484
|
+
* @template R The input `Result.Base` type.
|
|
485
|
+
* @param result The `Result` to convert.
|
|
486
|
+
* @returns An `Optional<UnwrapOk<R>>` containing the success value or
|
|
487
|
+
* representing `None`.
|
|
500
488
|
*/
|
|
501
489
|
Result.toOptional = (result) => Result.isOk(result) ? Optional.some(unwrapOk(result)) : Optional.none;
|
|
502
490
|
function orElse(...args) {
|
|
@@ -514,8 +502,24 @@ var Result;
|
|
|
514
502
|
}
|
|
515
503
|
Result.orElse = orElse;
|
|
516
504
|
/**
|
|
517
|
-
* Combines two `Result` values into a single `Result` containing a tuple.
|
|
518
|
-
*
|
|
505
|
+
* Combines two `Result` values into a single `Result` containing a tuple. If
|
|
506
|
+
* either `Result` is `Err`, returns the first `Err` encountered.
|
|
507
|
+
*
|
|
508
|
+
* @example
|
|
509
|
+
*
|
|
510
|
+
* ```ts
|
|
511
|
+
* const first = Result.ok('left');
|
|
512
|
+
* const second = Result.ok(1);
|
|
513
|
+
*
|
|
514
|
+
* const expected: readonly [string, number] = ['left', 1];
|
|
515
|
+
*
|
|
516
|
+
* assert.deepStrictEqual(Result.zip(first, second), Result.ok(expected));
|
|
517
|
+
* assert.deepStrictEqual(
|
|
518
|
+
* Result.zip(first, Result.err('error')),
|
|
519
|
+
* Result.err('error'),
|
|
520
|
+
* );
|
|
521
|
+
* ```
|
|
522
|
+
*
|
|
519
523
|
* @template S1 The success type of the first `Result`.
|
|
520
524
|
* @template E1 The error type of the first `Result`.
|
|
521
525
|
* @template S2 The success type of the second `Result`.
|
|
@@ -523,16 +527,6 @@ var Result;
|
|
|
523
527
|
* @param resultA The first `Result`.
|
|
524
528
|
* @param resultB The second `Result`.
|
|
525
529
|
* @returns A `Result` containing a tuple of both values, or the first `Err`.
|
|
526
|
-
* @example
|
|
527
|
-
* ```typescript
|
|
528
|
-
* const a = Result.ok(1);
|
|
529
|
-
* const b = Result.ok("hello");
|
|
530
|
-
* const zipped = Result.zip(a, b);
|
|
531
|
-
* console.log(Result.unwrapOk(zipped)); // [1, "hello"]
|
|
532
|
-
*
|
|
533
|
-
* const withErr = Result.zip(a, Result.err("error"));
|
|
534
|
-
* console.log(Result.unwrapErr(withErr)); // "error"
|
|
535
|
-
* ```
|
|
536
530
|
*/
|
|
537
531
|
Result.zip = (resultA, resultB) => Result.isOk(resultA)
|
|
538
532
|
? Result.isOk(resultB)
|