ts-data-forge 3.3.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 +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 +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 +1 -0
- package/dist/entry-point.d.mts.map +1 -1
- package/dist/entry-point.mjs +2 -1
- 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/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 +12 -126
- 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/package.json +47 -39
- 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 +1 -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-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 +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/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
|
@@ -5,13 +5,25 @@ const SomeTypeTagName = 'ts-data-forge::Optional.some';
|
|
|
5
5
|
/** @internal String literal tag to identify the 'None' variant of Optional. */
|
|
6
6
|
const NoneTypeTagName = 'ts-data-forge::Optional.none';
|
|
7
7
|
/**
|
|
8
|
-
* Namespace for the {@link Optional} type and related functions.
|
|
9
|
-
*
|
|
8
|
+
* Namespace for the {@link Optional} type and related functions. Provides
|
|
9
|
+
* utilities to handle values that might be absent, similar to Option types in
|
|
10
|
+
* other languages.
|
|
10
11
|
*/
|
|
11
12
|
var Optional;
|
|
12
13
|
(function (Optional) {
|
|
13
14
|
/**
|
|
14
15
|
* Checks if the given value is an {@link Optional}.
|
|
16
|
+
*
|
|
17
|
+
* @example
|
|
18
|
+
*
|
|
19
|
+
* ```ts
|
|
20
|
+
* const maybeOptional = Optional.some('value');
|
|
21
|
+
* const notOptional = { $$tag: 'ts-data-forge::Optional.some' };
|
|
22
|
+
*
|
|
23
|
+
* assert.ok(Optional.isOptional(maybeOptional));
|
|
24
|
+
* assert.notOk(Optional.isOptional(notOptional));
|
|
25
|
+
* ```
|
|
26
|
+
*
|
|
15
27
|
* @param maybeOptional The value to check.
|
|
16
28
|
* @returns `true` if the value is an {@link Optional}, otherwise `false`.
|
|
17
29
|
*/
|
|
@@ -22,81 +34,116 @@ var Optional;
|
|
|
22
34
|
maybeOptional['$$tag'] === NoneTypeTagName);
|
|
23
35
|
/**
|
|
24
36
|
* Creates an {@link Optional.Some} containing the given value.
|
|
37
|
+
*
|
|
38
|
+
* @example
|
|
39
|
+
*
|
|
40
|
+
* ```ts
|
|
41
|
+
* const someValue = Optional.some({ id: 1 });
|
|
42
|
+
* const noneValue = Optional.none;
|
|
43
|
+
*
|
|
44
|
+
* assert.ok(Optional.isSome(someValue));
|
|
45
|
+
* assert.ok(Optional.isNone(noneValue));
|
|
46
|
+
* ```
|
|
47
|
+
*
|
|
25
48
|
* @template S The type of the value.
|
|
26
49
|
* @param value The value to wrap in an {@link Optional.Some}.
|
|
27
50
|
* @returns An {@link Optional.Some}<S> containing the value.
|
|
28
|
-
* @example
|
|
29
|
-
* ```typescript
|
|
30
|
-
* const someValue = Optional.some(42);
|
|
31
|
-
* console.log(Optional.isSome(someValue)); // true
|
|
32
|
-
* console.log(Optional.unwrap(someValue)); // 42
|
|
33
|
-
* ```
|
|
34
51
|
*/
|
|
35
52
|
Optional.some = (value) => ({
|
|
36
53
|
$$tag: SomeTypeTagName,
|
|
37
54
|
value,
|
|
38
55
|
});
|
|
39
56
|
/**
|
|
40
|
-
* The singleton instance representing {@link Optional.None} (an empty
|
|
57
|
+
* The singleton instance representing {@link Optional.None} (an empty
|
|
58
|
+
* Optional).
|
|
59
|
+
*
|
|
41
60
|
* @example
|
|
42
|
-
*
|
|
43
|
-
*
|
|
44
|
-
*
|
|
45
|
-
*
|
|
61
|
+
*
|
|
62
|
+
* ```ts
|
|
63
|
+
* const someValue = Optional.some({ id: 1 });
|
|
64
|
+
* const noneValue = Optional.none;
|
|
65
|
+
*
|
|
66
|
+
* assert.ok(Optional.isSome(someValue));
|
|
67
|
+
* assert.ok(Optional.isNone(noneValue));
|
|
46
68
|
* ```
|
|
47
69
|
*/
|
|
48
70
|
Optional.none = { $$tag: NoneTypeTagName };
|
|
49
71
|
/**
|
|
50
|
-
* Checks if an {@link Optional} is {@link Optional.Some}.
|
|
51
|
-
*
|
|
72
|
+
* Checks if an {@link Optional} is {@link Optional.Some}. Acts as a type guard.
|
|
73
|
+
*
|
|
74
|
+
* @example
|
|
75
|
+
*
|
|
76
|
+
* ```ts
|
|
77
|
+
* const optionalNumber = Optional.some(42);
|
|
78
|
+
*
|
|
79
|
+
* if (Optional.isSome(optionalNumber)) {
|
|
80
|
+
* const value: number = optionalNumber.value;
|
|
81
|
+
* assert(value === 42);
|
|
82
|
+
* }
|
|
83
|
+
* ```
|
|
84
|
+
*
|
|
52
85
|
* @template O The {@link Optional.Base} type to check.
|
|
53
86
|
* @param optional The {@link Optional} to check.
|
|
54
|
-
* @returns `true` if the {@link Optional} is {@link Optional.Some}, `false`
|
|
87
|
+
* @returns `true` if the {@link Optional} is {@link Optional.Some}, `false`
|
|
88
|
+
* otherwise.
|
|
55
89
|
*/
|
|
56
90
|
Optional.isSome = (optional) => optional.$$tag === SomeTypeTagName;
|
|
57
91
|
/**
|
|
58
|
-
* Checks if an {@link Optional} is {@link Optional.None}.
|
|
59
|
-
*
|
|
92
|
+
* Checks if an {@link Optional} is {@link Optional.None}. Acts as a type guard.
|
|
93
|
+
*
|
|
94
|
+
* @example
|
|
95
|
+
*
|
|
96
|
+
* ```ts
|
|
97
|
+
* const optionalValue = Optional.none as Optional<number>;
|
|
98
|
+
*
|
|
99
|
+
* if (Optional.isNone(optionalValue)) {
|
|
100
|
+
* // Type narrowed to None
|
|
101
|
+
* assert.ok(true); // optionalValue is None
|
|
102
|
+
* }
|
|
103
|
+
* ```
|
|
104
|
+
*
|
|
60
105
|
* @template O The {@link Optional.Base} type to check.
|
|
61
106
|
* @param optional The {@link Optional} to check.
|
|
62
|
-
* @returns `true` if the {@link Optional} is {@link Optional.None}, `false`
|
|
107
|
+
* @returns `true` if the {@link Optional} is {@link Optional.None}, `false`
|
|
108
|
+
* otherwise.
|
|
63
109
|
*/
|
|
64
110
|
Optional.isNone = (optional) => optional.$$tag === NoneTypeTagName;
|
|
65
111
|
/**
|
|
66
|
-
* Unwraps an `Optional`, returning the contained value.
|
|
67
|
-
*
|
|
112
|
+
* Unwraps an `Optional`, returning the contained value. Throws an error if
|
|
113
|
+
* the `Optional` is `Optional.None`.
|
|
68
114
|
*
|
|
69
|
-
* This is a safer alternative to direct value access when you know the
|
|
70
|
-
* should contain a value. Use this method when an empty Optional
|
|
71
|
-
* a programming error or unexpected condition.
|
|
115
|
+
* This is a safer alternative to direct value access when you know the
|
|
116
|
+
* Optional should contain a value. Use this method when an empty Optional
|
|
117
|
+
* represents a programming error or unexpected condition.
|
|
118
|
+
*
|
|
119
|
+
* @example
|
|
120
|
+
*
|
|
121
|
+
* ```ts
|
|
122
|
+
* const present = Optional.some('available');
|
|
123
|
+
*
|
|
124
|
+
* assert(Optional.unwrapThrow(present) === 'available');
|
|
125
|
+
* assert.throws(
|
|
126
|
+
* () => Optional.unwrapThrow(Optional.none),
|
|
127
|
+
* /has failed because it is `None`/u,
|
|
128
|
+
* );
|
|
129
|
+
* ```
|
|
72
130
|
*
|
|
73
131
|
* @template O The `Optional.Base` type to unwrap.
|
|
74
132
|
* @param optional The `Optional` to unwrap.
|
|
75
133
|
* @returns The contained value if `Optional.Some`.
|
|
76
|
-
* @throws {Error} Error with message "`unwrapThrow()` has failed because it
|
|
77
|
-
*
|
|
78
|
-
* ```typescript
|
|
79
|
-
* const userInput = Optional.some(42);
|
|
80
|
-
* console.log(Optional.unwrapThrow(userInput)); // 42
|
|
81
|
-
*
|
|
82
|
-
* const empty = Optional.none;
|
|
83
|
-
* try {
|
|
84
|
-
* Optional.unwrapThrow(empty); // throws Error
|
|
85
|
-
* } catch (error) {
|
|
86
|
-
* console.log(error.message); // "`unwrapThrow()` has failed because it is `None`"
|
|
87
|
-
* }
|
|
88
|
-
* ```
|
|
134
|
+
* @throws {Error} Error with message "`unwrapThrow()` has failed because it
|
|
135
|
+
* is `None`" if the `Optional` is `Optional.None`.
|
|
89
136
|
*/
|
|
90
137
|
Optional.unwrapThrow = (optional) => {
|
|
91
138
|
if (Optional.isSome(optional)) {
|
|
92
|
-
// eslint-disable-next-line
|
|
139
|
+
// eslint-disable-next-line total-functions/no-unsafe-type-assertion
|
|
93
140
|
return optional.value;
|
|
94
141
|
}
|
|
95
142
|
throw new Error('`unwrapThrow()` has failed because it is `None`');
|
|
96
143
|
};
|
|
97
144
|
function unwrap(optional) {
|
|
98
145
|
return Optional.isSome(optional)
|
|
99
|
-
? // eslint-disable-next-line
|
|
146
|
+
? // eslint-disable-next-line total-functions/no-unsafe-type-assertion
|
|
100
147
|
optional.value
|
|
101
148
|
: undefined;
|
|
102
149
|
}
|
|
@@ -106,7 +153,7 @@ var Optional;
|
|
|
106
153
|
case 2: {
|
|
107
154
|
const [optional, defaultValue] = args;
|
|
108
155
|
return Optional.isSome(optional)
|
|
109
|
-
? // eslint-disable-next-line
|
|
156
|
+
? // eslint-disable-next-line total-functions/no-unsafe-type-assertion
|
|
110
157
|
optional.value
|
|
111
158
|
: defaultValue;
|
|
112
159
|
}
|
|
@@ -198,21 +245,31 @@ var Optional;
|
|
|
198
245
|
/**
|
|
199
246
|
* Combines two `Optional` values into a single `Optional` containing a tuple.
|
|
200
247
|
* If either `Optional` is `None`, returns `None`.
|
|
248
|
+
*
|
|
249
|
+
* @example
|
|
250
|
+
*
|
|
251
|
+
* ```ts
|
|
252
|
+
* const zipped = Optional.zip(Optional.some('left'), Optional.some(1));
|
|
253
|
+
*
|
|
254
|
+
* assert.ok(Optional.isSome(zipped));
|
|
255
|
+
* if (Optional.isSome(zipped)) {
|
|
256
|
+
* const expected: readonly [string, number] = ['left', 1];
|
|
257
|
+
* assert.deepStrictEqual(zipped.value, expected);
|
|
258
|
+
* }
|
|
259
|
+
*
|
|
260
|
+
* const missing = Optional.zip(
|
|
261
|
+
* Optional.some('value'),
|
|
262
|
+
* Optional.none as Optional<number>,
|
|
263
|
+
* );
|
|
264
|
+
*
|
|
265
|
+
* assert.deepStrictEqual(missing, Optional.none);
|
|
266
|
+
* ```
|
|
267
|
+
*
|
|
201
268
|
* @template A The value type of the first `Optional`.
|
|
202
269
|
* @template B The value type of the second `Optional`.
|
|
203
270
|
* @param optionalA The first `Optional`.
|
|
204
271
|
* @param optionalB The second `Optional`.
|
|
205
272
|
* @returns An `Optional` containing a tuple of both values, or `None`.
|
|
206
|
-
* @example
|
|
207
|
-
* ```typescript
|
|
208
|
-
* const a = Optional.some(1);
|
|
209
|
-
* const b = Optional.some("hello");
|
|
210
|
-
* const zipped = Optional.zip(a, b);
|
|
211
|
-
* console.log(Optional.unwrap(zipped)); // [1, "hello"]
|
|
212
|
-
*
|
|
213
|
-
* const withNone = Optional.zip(a, Optional.none);
|
|
214
|
-
* console.log(Optional.isNone(withNone)); // true
|
|
215
|
-
* ```
|
|
216
273
|
*/
|
|
217
274
|
Optional.zip = (optionalA, optionalB) => Optional.isSome(optionalA) && Optional.isSome(optionalB)
|
|
218
275
|
? Optional.some([optionalA.value, optionalB.value])
|
|
@@ -224,19 +281,20 @@ var Optional;
|
|
|
224
281
|
* the Optional type system. The function treats both `null` and `undefined`
|
|
225
282
|
* as empty values, converting them to `Optional.None`.
|
|
226
283
|
*
|
|
227
|
-
* @template T The type of the nullable value.
|
|
228
|
-
* @param value The nullable value to convert.
|
|
229
|
-
* @returns `Optional.Some<NonNullable<T>>` if the value is not null or undefined, otherwise `Optional.None`.
|
|
230
284
|
* @example
|
|
231
|
-
*
|
|
232
|
-
*
|
|
233
|
-
* const
|
|
234
|
-
*
|
|
235
|
-
*
|
|
236
|
-
*
|
|
237
|
-
*
|
|
238
|
-
* console.log(Optional.isNone(noneOptional)); // true
|
|
285
|
+
*
|
|
286
|
+
* ```ts
|
|
287
|
+
* const present = Optional.fromNullable('hello');
|
|
288
|
+
* const absent = Optional.fromNullable<string | null>(null);
|
|
289
|
+
*
|
|
290
|
+
* assert.deepStrictEqual(present, Optional.some('hello'));
|
|
291
|
+
* assert.deepStrictEqual(absent, Optional.none);
|
|
239
292
|
* ```
|
|
293
|
+
*
|
|
294
|
+
* @template T The type of the nullable value.
|
|
295
|
+
* @param value The nullable value to convert.
|
|
296
|
+
* @returns `Optional.Some<NonNullable<T>>` if the value is not null or
|
|
297
|
+
* undefined, otherwise `Optional.None`.
|
|
240
298
|
*/
|
|
241
299
|
Optional.fromNullable = (value) => (value == null ? Optional.none : Optional.some(value));
|
|
242
300
|
/**
|
|
@@ -246,20 +304,22 @@ var Optional;
|
|
|
246
304
|
* for empty Optionals. This is useful when interfacing with APIs or systems
|
|
247
305
|
* that expect nullable values rather than Optional types.
|
|
248
306
|
*
|
|
249
|
-
* Note: This returns `undefined` (not `null`) for consistency with
|
|
250
|
-
* undefined semantics and TypeScript's optional properties.
|
|
307
|
+
* Note: This returns `undefined` (not `null`) for consistency with
|
|
308
|
+
* JavaScript's undefined semantics and TypeScript's optional properties.
|
|
251
309
|
*
|
|
252
|
-
* @template O The `Optional.Base` type to convert.
|
|
253
|
-
* @param optional The `Optional` to convert.
|
|
254
|
-
* @returns The contained value if `Some`, otherwise `undefined`.
|
|
255
310
|
* @example
|
|
256
|
-
* ```typescript
|
|
257
|
-
* const some = Optional.some(42);
|
|
258
|
-
* console.log(Optional.toNullable(some)); // 42
|
|
259
311
|
*
|
|
260
|
-
*
|
|
261
|
-
*
|
|
312
|
+
* ```ts
|
|
313
|
+
* const someNumber = Optional.some(42);
|
|
314
|
+
* const noneNumber = Optional.none as Optional<number>;
|
|
315
|
+
*
|
|
316
|
+
* assert(Optional.toNullable(someNumber) === 42);
|
|
317
|
+
* assert(Optional.toNullable(noneNumber) === undefined);
|
|
262
318
|
* ```
|
|
319
|
+
*
|
|
320
|
+
* @template O The `Optional.Base` type to convert.
|
|
321
|
+
* @param optional The `Optional` to convert.
|
|
322
|
+
* @returns The contained value if `Some`, otherwise `undefined`.
|
|
263
323
|
*/
|
|
264
324
|
Optional.toNullable = (optional) => (Optional.isSome(optional) ? unwrap(optional) : undefined);
|
|
265
325
|
})(Optional || (Optional = {}));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"optional.mjs","sources":["../../src/functional/optional.mts"],"sourcesContent":[null],"names":[],"mappings":";;AAEA;AACA,MAAM,eAAe,GAAG,8BAA8B;AAEtD;AACA,MAAM,eAAe,GAAG,8BAA8B;
|
|
1
|
+
{"version":3,"file":"optional.mjs","sources":["../../src/functional/optional.mts"],"sourcesContent":[null],"names":[],"mappings":"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"}
|
|
@@ -2,9 +2,11 @@ import { Optional } from './optional.mjs';
|
|
|
2
2
|
/**
|
|
3
3
|
* Creates a new pipe object that allows for chaining operations on a value.
|
|
4
4
|
*
|
|
5
|
-
* This function provides a fluent interface for applying transformations to
|
|
6
|
-
* with intelligent method selection based on the input type:
|
|
7
|
-
*
|
|
5
|
+
* This function provides a fluent interface for applying transformations to
|
|
6
|
+
* values, with intelligent method selection based on the input type:
|
|
7
|
+
*
|
|
8
|
+
* - For `Optional` values: Provides `mapOptional` for safe Optional
|
|
9
|
+
* transformations
|
|
8
10
|
* - For other values: Provides `mapNullable` for null-safe transformations
|
|
9
11
|
* - All types get the basic `map` method for general transformations
|
|
10
12
|
*
|
|
@@ -14,132 +16,58 @@ import { Optional } from './optional.mjs';
|
|
|
14
16
|
* @template A The type of the initial value to wrap in a pipe.
|
|
15
17
|
* @param a The initial value to wrap in a pipe.
|
|
16
18
|
* @returns A pipe object with chaining methods appropriate for the value type.
|
|
17
|
-
*
|
|
18
|
-
* @example
|
|
19
|
-
* Basic value transformation chaining:
|
|
20
|
-
* ```ts
|
|
21
|
-
* // Simple sequential transformations
|
|
22
|
-
* const result = pipe(10)
|
|
23
|
-
* .map(x => x * 2) // 20
|
|
24
|
-
* .map(x => x + 5) // 25
|
|
25
|
-
* .map(x => x.toString()) // '25'
|
|
26
|
-
* .value;
|
|
27
|
-
* assert(result === '25');
|
|
28
|
-
*
|
|
29
|
-
* // String processing pipeline
|
|
30
|
-
* const processed = pipe(" Hello World ")
|
|
31
|
-
* .map(s => s.trim()) // "Hello World"
|
|
32
|
-
* .map(s => s.toLowerCase()) // "hello world"
|
|
33
|
-
* .map(s => s.split(' ')) // ["hello", "world"]
|
|
34
|
-
* .map(arr => arr.join('-')) // "hello-world"
|
|
35
|
-
* .value;
|
|
36
|
-
* assert(processed === "hello-world");
|
|
37
|
-
* ```
|
|
38
|
-
*
|
|
39
|
-
* @example
|
|
40
|
-
* Nullable value handling with automatic null checking:
|
|
41
|
-
* ```ts
|
|
42
|
-
* // Safe operations on potentially nullish values
|
|
43
|
-
* const maybeNumber: number | undefined = 10;
|
|
44
|
-
* const result = pipe(maybeNumber)
|
|
45
|
-
* .mapNullable(x => x * 2) // Only applies if not null
|
|
46
|
-
* .mapNullable(x => `Result: ${x}`) // Only applies if previous step succeeded
|
|
47
|
-
* .value; // 'Result: 20' or undefined
|
|
48
|
-
* assert(result === 'Result: 20');
|
|
49
|
-
*
|
|
50
|
-
* // Handling null values
|
|
51
|
-
* const nullValue: number | null = null;
|
|
52
|
-
* const nullResult = pipe(nullValue)
|
|
53
|
-
* .mapNullable(x => x * 2)
|
|
54
|
-
* .value;
|
|
55
|
-
* assert(nullResult === undefined);
|
|
56
|
-
* ```
|
|
57
|
-
*
|
|
58
|
-
* @example
|
|
59
|
-
* Optional value handling with monadic operations:
|
|
60
|
-
* ```ts
|
|
61
|
-
* // Working with Optional types
|
|
62
|
-
* const optional = Optional.some(42);
|
|
63
|
-
* const result = pipe(optional)
|
|
64
|
-
* .mapOptional(x => x / 2) // Optional.some(21)
|
|
65
|
-
* .mapOptional(x => Math.sqrt(x)) // Optional.some(~4.58)
|
|
66
|
-
* .value; // Optional.some(4.58...)
|
|
67
|
-
* assert(Optional.isSome(result) === true);
|
|
68
|
-
* assert(Math.abs(Optional.unwrap(result)! - Math.sqrt(21)) < 0.01);
|
|
69
|
-
*
|
|
70
|
-
* // Optional with None
|
|
71
|
-
* const noneOptional = Optional.none;
|
|
72
|
-
* const noneResult = pipe(noneOptional)
|
|
73
|
-
* .mapOptional(x => x * 2)
|
|
74
|
-
* .value;
|
|
75
|
-
* assert(Optional.isNone(noneResult) === true);
|
|
76
|
-
* ```
|
|
77
|
-
*
|
|
78
|
-
* @example
|
|
79
|
-
* Mixed type transformations:
|
|
80
|
-
* ```ts
|
|
81
|
-
* // Starting with a string, transforming through different types
|
|
82
|
-
* const complex = pipe('hello')
|
|
83
|
-
* .map(s => s.length) // number: 5
|
|
84
|
-
* .map(n => n > 3 ? n : undefined) // number | undefined: 5
|
|
85
|
-
* .mapNullable(n => n * 10) // number: 50 (or undefined if undefined)
|
|
86
|
-
* .value; // 50 or undefined
|
|
87
|
-
* assert(complex === 50);
|
|
88
|
-
*
|
|
89
|
-
* // Short string case
|
|
90
|
-
* const shortString = pipe('hi')
|
|
91
|
-
* .map(s => s.length) // number: 2
|
|
92
|
-
* .map(n => n > 3 ? n : undefined) // number | undefined: undefined
|
|
93
|
-
* .mapNullable(n => n * 10) // undefined
|
|
94
|
-
* .value;
|
|
95
|
-
* assert(shortString === undefined);
|
|
96
|
-
* ```
|
|
97
|
-
*
|
|
98
|
-
* @example
|
|
99
|
-
* Error-safe computation chains:
|
|
100
|
-
* ```ts
|
|
101
|
-
* // Building complex computations safely
|
|
102
|
-
* const maybeNumber: number | undefined = 25;
|
|
103
|
-
* const result = pipe(maybeNumber)
|
|
104
|
-
* .mapNullable(n => n > 0 ? n : undefined) // Positive numbers only
|
|
105
|
-
* .mapNullable(n => Math.sqrt(n)) // Safe square root
|
|
106
|
-
* .mapNullable(n => n < 100 ? n : undefined) // Limit result
|
|
107
|
-
* .mapNullable(n => Math.round(n * 100) / 100) // Round to 2 decimals
|
|
108
|
-
* .value; // number | undefined
|
|
109
|
-
*
|
|
110
|
-
* assert(result === 5); // sqrt(25) = 5
|
|
111
|
-
*
|
|
112
|
-
* const negativeNumber: number | undefined = -5;
|
|
113
|
-
* const negativeResult = pipe(negativeNumber)
|
|
114
|
-
* .mapNullable(n => n > 0 ? n : undefined)
|
|
115
|
-
* .value;
|
|
116
|
-
* assert(negativeResult === undefined); // negative number
|
|
117
|
-
* ```
|
|
118
|
-
*
|
|
119
19
|
*/
|
|
120
20
|
export declare function pipe<const A extends Optional.Base>(a: A): PipeWithMapOptional<A>;
|
|
121
21
|
export declare function pipe<const A>(a: A): PipeBase<A>;
|
|
122
22
|
type Pipe<A> = A extends Optional.Base ? PipeWithMapOptional<A> : PipeBase<A>;
|
|
123
23
|
/**
|
|
24
|
+
* @template A The type of the current value in the pipe.
|
|
124
25
|
* @internal
|
|
125
26
|
* Base pipe interface providing core functionality.
|
|
126
27
|
* All pipe types extend this interface.
|
|
127
|
-
* @template A The type of the current value in the pipe.
|
|
128
28
|
*/
|
|
129
29
|
type PipeBase<A> = Readonly<{
|
|
130
30
|
/** The current value being piped. */
|
|
131
31
|
value: A;
|
|
132
32
|
/**
|
|
133
33
|
* Maps the current value to a new value using the provided function.
|
|
34
|
+
*
|
|
35
|
+
* @example
|
|
36
|
+
*
|
|
37
|
+
* ```ts
|
|
38
|
+
* const result = pipe(2)
|
|
39
|
+
* .map((value) => value * 3)
|
|
40
|
+
* .map((value) => `value: ${value}`);
|
|
41
|
+
*
|
|
42
|
+
* assert.deepStrictEqual(result.value, 'value: 6');
|
|
43
|
+
* ```
|
|
44
|
+
*
|
|
134
45
|
* @template B The type of the new value.
|
|
135
46
|
* @param fn Function to transform the current value.
|
|
136
47
|
* @returns A new pipe containing the transformed value.
|
|
137
48
|
*/
|
|
138
49
|
map: <B>(fn: (a: A) => B) => Pipe<B>;
|
|
139
50
|
/**
|
|
140
|
-
* Maps the current value only if it's not null or undefined.
|
|
141
|
-
*
|
|
142
|
-
*
|
|
51
|
+
* Maps the current value only if it's not null or undefined. If the current
|
|
52
|
+
* value is null/undefined, the transformation is skipped and undefined is
|
|
53
|
+
* propagated through the pipe.
|
|
54
|
+
*
|
|
55
|
+
* @example
|
|
56
|
+
*
|
|
57
|
+
* ```ts
|
|
58
|
+
* const result = pipe<string | undefined>('hello')
|
|
59
|
+
* .mapNullable((value) => value.toUpperCase())
|
|
60
|
+
* .mapNullable((value) => value.slice(0, 2));
|
|
61
|
+
*
|
|
62
|
+
* assert.deepStrictEqual(result.value, 'HE');
|
|
63
|
+
*
|
|
64
|
+
* const empty = pipe<string | undefined>(undefined).mapNullable((value) =>
|
|
65
|
+
* value.toUpperCase(),
|
|
66
|
+
* );
|
|
67
|
+
*
|
|
68
|
+
* assert(empty.value === undefined);
|
|
69
|
+
* ```
|
|
70
|
+
*
|
|
143
71
|
* @template B The type of the transformed value.
|
|
144
72
|
* @param fn Function to transform the non-null value.
|
|
145
73
|
* @returns A new pipe containing the transformed value or undefined.
|
|
@@ -147,16 +75,34 @@ type PipeBase<A> = Readonly<{
|
|
|
147
75
|
mapNullable: <B>(fn: (a: NonNullable<A>) => B) => Pipe<B | undefined>;
|
|
148
76
|
}>;
|
|
149
77
|
/**
|
|
78
|
+
* @template A The Optional type currently in the pipe.
|
|
150
79
|
* @internal
|
|
151
80
|
* Pipe interface for Optional values, providing Optional-aware mapping.
|
|
152
81
|
* Extends PipeBase with mapOptional functionality for monadic operations.
|
|
153
|
-
* @template A The Optional type currently in the pipe.
|
|
154
82
|
*/
|
|
155
83
|
type PipeWithMapOptional<A extends Optional.Base> = MergeIntersection<PipeBase<A> & Readonly<{
|
|
156
84
|
/**
|
|
157
|
-
* Maps the value inside an Optional using Optional.map semantics.
|
|
158
|
-
*
|
|
159
|
-
* If the Optional is Some, the transformation is applied to the inner
|
|
85
|
+
* Maps the value inside an Optional using Optional.map semantics. If the
|
|
86
|
+
* Optional is None, the transformation is skipped and None is propagated.
|
|
87
|
+
* If the Optional is Some, the transformation is applied to the inner
|
|
88
|
+
* value.
|
|
89
|
+
*
|
|
90
|
+
* @example
|
|
91
|
+
*
|
|
92
|
+
* ```ts
|
|
93
|
+
* const result = pipe(Optional.some(10))
|
|
94
|
+
* .mapOptional((value) => value * 2)
|
|
95
|
+
* .mapOptional((value) => value + 5);
|
|
96
|
+
*
|
|
97
|
+
* assert.deepStrictEqual(result.value, Optional.some(25));
|
|
98
|
+
*
|
|
99
|
+
* const empty = pipe(Optional.none as Optional<number>).mapOptional(
|
|
100
|
+
* (value) => value * 2,
|
|
101
|
+
* );
|
|
102
|
+
*
|
|
103
|
+
* assert.ok(Optional.isNone(empty.value));
|
|
104
|
+
* ```
|
|
105
|
+
*
|
|
160
106
|
* @template B The type of the transformed inner value.
|
|
161
107
|
* @param fn Function to transform the inner value of the Optional.
|
|
162
108
|
* @returns A new pipe containing an Optional with the transformed value.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pipe.d.mts","sourceRoot":"","sources":["../../src/functional/pipe.mts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE1C
|
|
1
|
+
{"version":3,"file":"pipe.d.mts","sourceRoot":"","sources":["../../src/functional/pipe.mts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE1C;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,IAAI,CAAC,KAAK,CAAC,CAAC,SAAS,QAAQ,CAAC,IAAI,EAChD,CAAC,EAAE,CAAC,GACH,mBAAmB,CAAC,CAAC,CAAC,CAAC;AAE1B,wBAAgB,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;AAkBjD,KAAK,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,QAAQ,CAAC,IAAI,GAAG,mBAAmB,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;AAE9E;;;;;GAKG;AACH,KAAK,QAAQ,CAAC,CAAC,IAAI,QAAQ,CAAC;IAC1B,qCAAqC;IACrC,KAAK,EAAE,CAAC,CAAC;IAET;;;;;;;;;;;;;;;;OAgBG;IACH,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC;IAErC;;;;;;;;;;;;;;;;;;;;;;;;OAwBG;IACH,WAAW,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC;CACvE,CAAC,CAAC;AAEH;;;;;GAKG;AACH,KAAK,mBAAmB,CAAC,CAAC,SAAS,QAAQ,CAAC,IAAI,IAAI,iBAAiB,CACnE,QAAQ,CAAC,CAAC,CAAC,GACT,QAAQ,CAAC;IACP;;;;;;;;;;;;;;;;;;;;;;;;;OAyBG;IACH,WAAW,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;CACzE,CAAC,CACL,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pipe.mjs","sources":["../../src/functional/pipe.mts"],"sourcesContent":[null],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"pipe.mjs","sources":["../../src/functional/pipe.mts"],"sourcesContent":[null],"names":[],"mappings":";;AA0BM,SAAU,IAAI,CAAU,CAAI,EAAA;AAChC,IAAA,IAAI,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE;QAC1B,OAAO;AACL,YAAA,KAAK,EAAE,CAAC;AACR,YAAA,GAAG,EAAE,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AACxB,YAAA,WAAW,EAAE,CAAC,EAAE,KAAK,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;SAC/C;IACH;SAAO;QACL,OAAO;AACL,YAAA,KAAK,EAAE,CAAC;AACR,YAAA,GAAG,EAAE,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YACxB,WAAW,EAAE,CAAC,EAAE,KAAK,IAAI,CAAC,CAAC,IAAI,IAAI,GAAG,SAAS,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;SACzD;IACH;AACF;;;;"}
|