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
package/dist/others/tuple.d.mts
CHANGED
|
@@ -1,158 +1,40 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Creates a readonly tuple from the given arguments with precise literal type
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
2
|
+
* Creates a readonly tuple from the given arguments with precise literal type
|
|
3
|
+
* inference. It is a convenient shorthand for `[...args] as const`.
|
|
4
|
+
*
|
|
5
|
+
* @example
|
|
6
|
+
*
|
|
7
|
+
* ```ts
|
|
8
|
+
* // Create a tuple with literal types preserved
|
|
9
|
+
* const coordinates = tp(10, 20, 30);
|
|
10
|
+
* expectType<typeof coordinates, readonly [10, 20, 30]>('=');
|
|
11
|
+
* expectType<typeof coordinates, readonly number[]>('!=');
|
|
12
|
+
* assert.deepStrictEqual(coordinates, [10, 20, 30]);
|
|
13
|
+
*
|
|
14
|
+
* // The following two are equivalent
|
|
15
|
+
* const a = tp(1, 2);
|
|
16
|
+
* const b = [1, 2] as const;
|
|
17
|
+
* expectType<typeof a, typeof b>('=');
|
|
18
|
+
* assert.deepStrictEqual(a, b);
|
|
19
|
+
*
|
|
20
|
+
* // Without tp, type would be number[]
|
|
21
|
+
* const point = tp('x', 42, true);
|
|
22
|
+
* expectType<typeof point, readonly ['x', 42, true]>('=');
|
|
23
|
+
* assert.deepStrictEqual(point, ['x', 42, true]);
|
|
24
|
+
*
|
|
25
|
+
* // Useful for creating const tuples
|
|
26
|
+
* const rgb = tp(255, 128, 0);
|
|
27
|
+
* expectType<typeof rgb, readonly [255, 128, 0]>('=');
|
|
28
|
+
*
|
|
29
|
+
* assert(rgb[0] === 255);
|
|
30
|
+
* assert(rgb[1] === 128);
|
|
31
|
+
* assert(rgb[2] === 0);
|
|
32
|
+
* ```
|
|
13
33
|
*
|
|
14
34
|
* @template T - A tuple type with literal types inferred from the arguments
|
|
15
35
|
* @param args - The elements to include in the tuple (variadic)
|
|
16
|
-
* @returns A readonly tuple containing the provided arguments with preserved
|
|
17
|
-
*
|
|
18
|
-
* @example Basic tuple creation with literal types
|
|
19
|
-
* ```typescript
|
|
20
|
-
* // Without tp: types are widened
|
|
21
|
-
* const arr = [1, 'hello', true]; // (string | number | boolean)[]
|
|
22
|
-
*
|
|
23
|
-
* // With tp: exact literal types preserved
|
|
24
|
-
* const tuple = tp(1, 'hello', true); // readonly [1, 'hello', true]
|
|
25
|
-
* const coords = tp(10, 20); // readonly [10, 20]
|
|
26
|
-
* const single = tp('only'); // readonly ['only']
|
|
27
|
-
* const empty = tp(); // readonly []
|
|
28
|
-
*
|
|
29
|
-
* // TypeScript knows exact values at compile time
|
|
30
|
-
* type First = typeof tuple[0]; // 1 (literal type)
|
|
31
|
-
* type Second = typeof tuple[1]; // 'hello' (literal type)
|
|
32
|
-
* ```
|
|
33
|
-
*
|
|
34
|
-
* @example Creating type-safe coordinate systems
|
|
35
|
-
* ```typescript
|
|
36
|
-
* // 2D coordinates
|
|
37
|
-
* const point2D = tp(10, 20);
|
|
38
|
-
* const [x, y] = point2D; // x: 10, y: 20
|
|
39
|
-
*
|
|
40
|
-
* // 3D coordinates
|
|
41
|
-
* const point3D = tp(10, 20, 30);
|
|
42
|
-
* const [x3, y3, z3] = point3D; // Exact types preserved
|
|
43
|
-
*
|
|
44
|
-
* // Named coordinate system
|
|
45
|
-
* const namedPoint = tp('x', 100, 'y', 200);
|
|
46
|
-
* // Type: readonly ['x', 100, 'y', 200]
|
|
47
|
-
* ```
|
|
48
|
-
*
|
|
49
|
-
* @example Building type-safe data structures
|
|
50
|
-
* ```typescript
|
|
51
|
-
* // Creating a type-safe map structure
|
|
52
|
-
* const colorMap = [
|
|
53
|
-
* tp('red', '#FF0000'),
|
|
54
|
-
* tp('green', '#00FF00'),
|
|
55
|
-
* tp('blue', '#0000FF')
|
|
56
|
-
* ] as const;
|
|
57
|
-
* // Type: readonly [readonly ['red', '#FF0000'], ...]
|
|
58
|
-
*
|
|
59
|
-
* // Type-safe event system
|
|
60
|
-
* type EventTuple = readonly ['click', MouseEvent] | readonly ['change', Event];
|
|
61
|
-
* const event = tp('click', new MouseEvent('click')) as EventTuple;
|
|
62
|
-
* ```
|
|
63
|
-
*
|
|
64
|
-
* @example Function argument patterns
|
|
65
|
-
* ```typescript
|
|
66
|
-
* // Functions expecting exact tuple types
|
|
67
|
-
* function processCoordinate(coord: readonly [number, number]): void {
|
|
68
|
-
* const [x, y] = coord;
|
|
69
|
-
* console.log(`Processing point at (${x}, ${y})`);
|
|
70
|
-
* }
|
|
71
|
-
*
|
|
72
|
-
* processCoordinate(tp(10, 20)); // ✅ Type-safe
|
|
73
|
-
* processCoordinate([10, 20]); // ❌ Error: number[] not assignable
|
|
74
|
-
*
|
|
75
|
-
* // Pattern matching with tuples
|
|
76
|
-
* function handleMessage(msg: readonly ['error', string] | readonly ['success', any]) {
|
|
77
|
-
* if (msg[0] === 'error') {
|
|
78
|
-
* console.error(msg[1]); // TypeScript knows msg[1] is string
|
|
79
|
-
* } else {
|
|
80
|
-
* console.log('Success:', msg[1]);
|
|
81
|
-
* }
|
|
82
|
-
* }
|
|
83
|
-
*
|
|
84
|
-
* handleMessage(tp('error', 'Failed to load'));
|
|
85
|
-
* handleMessage(tp('success', { id: 123 }));
|
|
86
|
-
* ```
|
|
87
|
-
*
|
|
88
|
-
* @example Advanced type inference
|
|
89
|
-
* ```typescript
|
|
90
|
-
* // Const assertions comparison
|
|
91
|
-
* const tuple1 = [1, 2, 3]; // number[]
|
|
92
|
-
* const tuple2 = [1, 2, 3] as const; // readonly [1, 2, 3]
|
|
93
|
-
* const tuple3 = tp(1, 2, 3); // readonly [1, 2, 3]
|
|
94
|
-
*
|
|
95
|
-
* // Building complex types
|
|
96
|
-
* const config = tp(
|
|
97
|
-
* tp('host', 'localhost'),
|
|
98
|
-
* tp('port', 3000),
|
|
99
|
-
* tp('secure', true)
|
|
100
|
-
* );
|
|
101
|
-
* // Type: readonly [
|
|
102
|
-
* // readonly ['host', 'localhost'],
|
|
103
|
-
* // readonly ['port', 3000],
|
|
104
|
-
* // readonly ['secure', true]
|
|
105
|
-
* // ]
|
|
106
|
-
*
|
|
107
|
-
* // Type-safe destructuring
|
|
108
|
-
* const [[, host], [, port], [, secure]] = config;
|
|
109
|
-
* // host: 'localhost', port: 3000, secure: true
|
|
110
|
-
* ```
|
|
111
|
-
*
|
|
112
|
-
* @example Integration with other utilities
|
|
113
|
-
* ```typescript
|
|
114
|
-
* import { pipe } from '../functional/pipe';
|
|
115
|
-
* import { Result } from '../functional/result';
|
|
116
|
-
*
|
|
117
|
-
* // Type-safe error handling
|
|
118
|
-
* function divide(a: number, b: number): Result<number, string> {
|
|
119
|
-
* if (b === 0) return Result.err('Division by zero');
|
|
120
|
-
* return Result.ok(a / b);
|
|
121
|
-
* }
|
|
122
|
-
*
|
|
123
|
-
* const calculation = tp(10, 2);
|
|
124
|
-
* const result = divide(...calculation); // Spread tuple as arguments
|
|
125
|
-
*
|
|
126
|
-
* // Building pipelines with tuples
|
|
127
|
-
* const pipeline = pipe(tp(5, 10))
|
|
128
|
-
* .map(([a, b]) => tp(a + b, a * b))
|
|
129
|
-
* .map(([sum, product]) => tp('sum', sum, 'product', product))
|
|
130
|
-
* .value;
|
|
131
|
-
* // Type: readonly ['sum', 15, 'product', 50]
|
|
132
|
-
* ```
|
|
133
|
-
*
|
|
134
|
-
* @example Common patterns and use cases
|
|
135
|
-
* ```typescript
|
|
136
|
-
* // React-style state tuples
|
|
137
|
-
* const useState = <T>(initial: T) => tp(initial, (value: T) => void 0);
|
|
138
|
-
* const [count, setCount] = useState(0);
|
|
139
|
-
*
|
|
140
|
-
* // Redux-style actions
|
|
141
|
-
* const incrementAction = tp('INCREMENT', { amount: 1 });
|
|
142
|
-
* const decrementAction = tp('DECREMENT', { amount: 1 });
|
|
143
|
-
*
|
|
144
|
-
* // Database query results
|
|
145
|
-
* const queryResult = tp(
|
|
146
|
-
* true, // success
|
|
147
|
-
* [{ id: 1, name: 'John' }], // data
|
|
148
|
-
* null // error
|
|
149
|
-
* );
|
|
150
|
-
*
|
|
151
|
-
* // Configuration flags
|
|
152
|
-
* const features = tp('darkMode', 'analytics', 'notifications');
|
|
153
|
-
* const enabledFeatures = features.filter(f => isEnabled(f));
|
|
154
|
-
* ```
|
|
155
|
-
*
|
|
36
|
+
* @returns A readonly tuple containing the provided arguments with preserved
|
|
37
|
+
* literal types
|
|
156
38
|
* @see https://www.typescriptlang.org/docs/handbook/2/objects.html#tuple-types
|
|
157
39
|
*/
|
|
158
40
|
export declare const tp: <const T extends readonly unknown[]>(...args: T) => Readonly<T>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tuple.d.mts","sourceRoot":"","sources":["../../src/others/tuple.mts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"tuple.d.mts","sourceRoot":"","sources":["../../src/others/tuple.mts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AACH,eAAO,MAAM,EAAE,GAAI,KAAK,CAAC,CAAC,SAAS,SAAS,OAAO,EAAE,EACnD,GAAG,MAAM,CAAC,KACT,QAAQ,CAAC,CAAC,CAAS,CAAC"}
|
package/dist/others/tuple.mjs
CHANGED
|
@@ -1,158 +1,40 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Creates a readonly tuple from the given arguments with precise literal type
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
2
|
+
* Creates a readonly tuple from the given arguments with precise literal type
|
|
3
|
+
* inference. It is a convenient shorthand for `[...args] as const`.
|
|
4
|
+
*
|
|
5
|
+
* @example
|
|
6
|
+
*
|
|
7
|
+
* ```ts
|
|
8
|
+
* // Create a tuple with literal types preserved
|
|
9
|
+
* const coordinates = tp(10, 20, 30);
|
|
10
|
+
* expectType<typeof coordinates, readonly [10, 20, 30]>('=');
|
|
11
|
+
* expectType<typeof coordinates, readonly number[]>('!=');
|
|
12
|
+
* assert.deepStrictEqual(coordinates, [10, 20, 30]);
|
|
13
|
+
*
|
|
14
|
+
* // The following two are equivalent
|
|
15
|
+
* const a = tp(1, 2);
|
|
16
|
+
* const b = [1, 2] as const;
|
|
17
|
+
* expectType<typeof a, typeof b>('=');
|
|
18
|
+
* assert.deepStrictEqual(a, b);
|
|
19
|
+
*
|
|
20
|
+
* // Without tp, type would be number[]
|
|
21
|
+
* const point = tp('x', 42, true);
|
|
22
|
+
* expectType<typeof point, readonly ['x', 42, true]>('=');
|
|
23
|
+
* assert.deepStrictEqual(point, ['x', 42, true]);
|
|
24
|
+
*
|
|
25
|
+
* // Useful for creating const tuples
|
|
26
|
+
* const rgb = tp(255, 128, 0);
|
|
27
|
+
* expectType<typeof rgb, readonly [255, 128, 0]>('=');
|
|
28
|
+
*
|
|
29
|
+
* assert(rgb[0] === 255);
|
|
30
|
+
* assert(rgb[1] === 128);
|
|
31
|
+
* assert(rgb[2] === 0);
|
|
32
|
+
* ```
|
|
13
33
|
*
|
|
14
34
|
* @template T - A tuple type with literal types inferred from the arguments
|
|
15
35
|
* @param args - The elements to include in the tuple (variadic)
|
|
16
|
-
* @returns A readonly tuple containing the provided arguments with preserved
|
|
17
|
-
*
|
|
18
|
-
* @example Basic tuple creation with literal types
|
|
19
|
-
* ```typescript
|
|
20
|
-
* // Without tp: types are widened
|
|
21
|
-
* const arr = [1, 'hello', true]; // (string | number | boolean)[]
|
|
22
|
-
*
|
|
23
|
-
* // With tp: exact literal types preserved
|
|
24
|
-
* const tuple = tp(1, 'hello', true); // readonly [1, 'hello', true]
|
|
25
|
-
* const coords = tp(10, 20); // readonly [10, 20]
|
|
26
|
-
* const single = tp('only'); // readonly ['only']
|
|
27
|
-
* const empty = tp(); // readonly []
|
|
28
|
-
*
|
|
29
|
-
* // TypeScript knows exact values at compile time
|
|
30
|
-
* type First = typeof tuple[0]; // 1 (literal type)
|
|
31
|
-
* type Second = typeof tuple[1]; // 'hello' (literal type)
|
|
32
|
-
* ```
|
|
33
|
-
*
|
|
34
|
-
* @example Creating type-safe coordinate systems
|
|
35
|
-
* ```typescript
|
|
36
|
-
* // 2D coordinates
|
|
37
|
-
* const point2D = tp(10, 20);
|
|
38
|
-
* const [x, y] = point2D; // x: 10, y: 20
|
|
39
|
-
*
|
|
40
|
-
* // 3D coordinates
|
|
41
|
-
* const point3D = tp(10, 20, 30);
|
|
42
|
-
* const [x3, y3, z3] = point3D; // Exact types preserved
|
|
43
|
-
*
|
|
44
|
-
* // Named coordinate system
|
|
45
|
-
* const namedPoint = tp('x', 100, 'y', 200);
|
|
46
|
-
* // Type: readonly ['x', 100, 'y', 200]
|
|
47
|
-
* ```
|
|
48
|
-
*
|
|
49
|
-
* @example Building type-safe data structures
|
|
50
|
-
* ```typescript
|
|
51
|
-
* // Creating a type-safe map structure
|
|
52
|
-
* const colorMap = [
|
|
53
|
-
* tp('red', '#FF0000'),
|
|
54
|
-
* tp('green', '#00FF00'),
|
|
55
|
-
* tp('blue', '#0000FF')
|
|
56
|
-
* ] as const;
|
|
57
|
-
* // Type: readonly [readonly ['red', '#FF0000'], ...]
|
|
58
|
-
*
|
|
59
|
-
* // Type-safe event system
|
|
60
|
-
* type EventTuple = readonly ['click', MouseEvent] | readonly ['change', Event];
|
|
61
|
-
* const event = tp('click', new MouseEvent('click')) as EventTuple;
|
|
62
|
-
* ```
|
|
63
|
-
*
|
|
64
|
-
* @example Function argument patterns
|
|
65
|
-
* ```typescript
|
|
66
|
-
* // Functions expecting exact tuple types
|
|
67
|
-
* function processCoordinate(coord: readonly [number, number]): void {
|
|
68
|
-
* const [x, y] = coord;
|
|
69
|
-
* console.log(`Processing point at (${x}, ${y})`);
|
|
70
|
-
* }
|
|
71
|
-
*
|
|
72
|
-
* processCoordinate(tp(10, 20)); // ✅ Type-safe
|
|
73
|
-
* processCoordinate([10, 20]); // ❌ Error: number[] not assignable
|
|
74
|
-
*
|
|
75
|
-
* // Pattern matching with tuples
|
|
76
|
-
* function handleMessage(msg: readonly ['error', string] | readonly ['success', any]) {
|
|
77
|
-
* if (msg[0] === 'error') {
|
|
78
|
-
* console.error(msg[1]); // TypeScript knows msg[1] is string
|
|
79
|
-
* } else {
|
|
80
|
-
* console.log('Success:', msg[1]);
|
|
81
|
-
* }
|
|
82
|
-
* }
|
|
83
|
-
*
|
|
84
|
-
* handleMessage(tp('error', 'Failed to load'));
|
|
85
|
-
* handleMessage(tp('success', { id: 123 }));
|
|
86
|
-
* ```
|
|
87
|
-
*
|
|
88
|
-
* @example Advanced type inference
|
|
89
|
-
* ```typescript
|
|
90
|
-
* // Const assertions comparison
|
|
91
|
-
* const tuple1 = [1, 2, 3]; // number[]
|
|
92
|
-
* const tuple2 = [1, 2, 3] as const; // readonly [1, 2, 3]
|
|
93
|
-
* const tuple3 = tp(1, 2, 3); // readonly [1, 2, 3]
|
|
94
|
-
*
|
|
95
|
-
* // Building complex types
|
|
96
|
-
* const config = tp(
|
|
97
|
-
* tp('host', 'localhost'),
|
|
98
|
-
* tp('port', 3000),
|
|
99
|
-
* tp('secure', true)
|
|
100
|
-
* );
|
|
101
|
-
* // Type: readonly [
|
|
102
|
-
* // readonly ['host', 'localhost'],
|
|
103
|
-
* // readonly ['port', 3000],
|
|
104
|
-
* // readonly ['secure', true]
|
|
105
|
-
* // ]
|
|
106
|
-
*
|
|
107
|
-
* // Type-safe destructuring
|
|
108
|
-
* const [[, host], [, port], [, secure]] = config;
|
|
109
|
-
* // host: 'localhost', port: 3000, secure: true
|
|
110
|
-
* ```
|
|
111
|
-
*
|
|
112
|
-
* @example Integration with other utilities
|
|
113
|
-
* ```typescript
|
|
114
|
-
* import { pipe } from '../functional/pipe';
|
|
115
|
-
* import { Result } from '../functional/result';
|
|
116
|
-
*
|
|
117
|
-
* // Type-safe error handling
|
|
118
|
-
* function divide(a: number, b: number): Result<number, string> {
|
|
119
|
-
* if (b === 0) return Result.err('Division by zero');
|
|
120
|
-
* return Result.ok(a / b);
|
|
121
|
-
* }
|
|
122
|
-
*
|
|
123
|
-
* const calculation = tp(10, 2);
|
|
124
|
-
* const result = divide(...calculation); // Spread tuple as arguments
|
|
125
|
-
*
|
|
126
|
-
* // Building pipelines with tuples
|
|
127
|
-
* const pipeline = pipe(tp(5, 10))
|
|
128
|
-
* .map(([a, b]) => tp(a + b, a * b))
|
|
129
|
-
* .map(([sum, product]) => tp('sum', sum, 'product', product))
|
|
130
|
-
* .value;
|
|
131
|
-
* // Type: readonly ['sum', 15, 'product', 50]
|
|
132
|
-
* ```
|
|
133
|
-
*
|
|
134
|
-
* @example Common patterns and use cases
|
|
135
|
-
* ```typescript
|
|
136
|
-
* // React-style state tuples
|
|
137
|
-
* const useState = <T>(initial: T) => tp(initial, (value: T) => void 0);
|
|
138
|
-
* const [count, setCount] = useState(0);
|
|
139
|
-
*
|
|
140
|
-
* // Redux-style actions
|
|
141
|
-
* const incrementAction = tp('INCREMENT', { amount: 1 });
|
|
142
|
-
* const decrementAction = tp('DECREMENT', { amount: 1 });
|
|
143
|
-
*
|
|
144
|
-
* // Database query results
|
|
145
|
-
* const queryResult = tp(
|
|
146
|
-
* true, // success
|
|
147
|
-
* [{ id: 1, name: 'John' }], // data
|
|
148
|
-
* null // error
|
|
149
|
-
* );
|
|
150
|
-
*
|
|
151
|
-
* // Configuration flags
|
|
152
|
-
* const features = tp('darkMode', 'analytics', 'notifications');
|
|
153
|
-
* const enabledFeatures = features.filter(f => isEnabled(f));
|
|
154
|
-
* ```
|
|
155
|
-
*
|
|
36
|
+
* @returns A readonly tuple containing the provided arguments with preserved
|
|
37
|
+
* literal types
|
|
156
38
|
* @see https://www.typescriptlang.org/docs/handbook/2/objects.html#tuple-types
|
|
157
39
|
*/
|
|
158
40
|
const tp = (...args) => args;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tuple.mjs","sources":["../../src/others/tuple.mts"],"sourcesContent":[null],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"tuple.mjs","sources":["../../src/others/tuple.mts"],"sourcesContent":[null],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAsCG;AACI,MAAM,EAAE,GAAG,CAChB,GAAG,IAAO,KACM;;;;"}
|
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Converts an unknown value to its string representation in a type-safe manner.
|
|
3
3
|
*
|
|
4
|
-
* This function handles all JavaScript types and provides consistent string
|
|
5
|
-
* with proper error handling for edge cases like circular
|
|
6
|
-
* toString() calls, this function never throws and
|
|
4
|
+
* This function handles all JavaScript types and provides consistent string
|
|
5
|
+
* conversion with proper error handling for edge cases like circular
|
|
6
|
+
* references. Unlike naive toString() calls, this function never throws and
|
|
7
|
+
* handles all value types gracefully.
|
|
7
8
|
*
|
|
8
9
|
* **Type conversion rules:**
|
|
10
|
+
*
|
|
9
11
|
* - Strings: returned as-is
|
|
10
12
|
* - Numbers, booleans, bigints: converted via toString()
|
|
11
13
|
* - Symbols: converted to their description string
|
|
@@ -16,129 +18,13 @@
|
|
|
16
18
|
*
|
|
17
19
|
* @param value - The unknown value to convert to string
|
|
18
20
|
* @param options - Optional configuration for the conversion
|
|
19
|
-
* @param options.prettyPrintObject - If true, objects are formatted with
|
|
20
|
-
*
|
|
21
|
-
*
|
|
22
|
-
*
|
|
23
|
-
* ```typescript
|
|
24
|
-
* // Primitive types
|
|
25
|
-
* unknownToString('hello'); // 'hello'
|
|
26
|
-
* unknownToString(123); // '123'
|
|
27
|
-
* unknownToString(true); // 'true'
|
|
28
|
-
* unknownToString(null); // 'null'
|
|
29
|
-
* unknownToString(undefined); // 'undefined'
|
|
30
|
-
* unknownToString(Symbol('test')); // 'Symbol(test)'
|
|
31
|
-
* unknownToString(123n); // '123'
|
|
32
|
-
*
|
|
33
|
-
* // Function conversion
|
|
34
|
-
* const fn = () => 'test';
|
|
35
|
-
* unknownToString(fn); // "() => 'test'"
|
|
36
|
-
* ```
|
|
37
|
-
*
|
|
38
|
-
* @example Object stringification
|
|
39
|
-
* ```typescript
|
|
40
|
-
* // Simple object
|
|
41
|
-
* const obj = { a: 1, b: 'hello', c: [1, 2, 3] };
|
|
42
|
-
* const result = unknownToString(obj);
|
|
43
|
-
* console.log(result); // '{"a":1,"b":"hello","c":[1,2,3]}'
|
|
44
|
-
*
|
|
45
|
-
* // Pretty printing
|
|
46
|
-
* const prettyResult = unknownToString(obj, { prettyPrintObject: true });
|
|
47
|
-
* console.log(prettyResult);
|
|
48
|
-
* // {
|
|
49
|
-
* // "a": 1,
|
|
50
|
-
* // "b": "hello",
|
|
51
|
-
* // "c": [
|
|
52
|
-
* // 1,
|
|
53
|
-
* // 2,
|
|
54
|
-
* // 3
|
|
55
|
-
* // ]
|
|
56
|
-
* // }
|
|
57
|
-
* ```
|
|
58
|
-
*
|
|
59
|
-
* @example Error handling for circular references
|
|
60
|
-
* ```typescript
|
|
61
|
-
* // Circular reference
|
|
62
|
-
* const circular: any = { name: 'parent' };
|
|
63
|
-
* circular.self = circular;
|
|
64
|
-
*
|
|
65
|
-
* const result = unknownToString(circular);
|
|
66
|
-
* console.log(result); // "Converting circular structure to JSON"
|
|
67
|
-
*
|
|
68
|
-
* @example Logging and debugging utilities
|
|
69
|
-
* ```typescript
|
|
70
|
-
* // Type-safe logger
|
|
71
|
-
* class Logger {
|
|
72
|
-
* log(message: string, data?: unknown): void {
|
|
73
|
-
* const timestamp = new Date().toISOString();
|
|
74
|
-
* const dataStr = data !== undefined
|
|
75
|
-
* ? unknownToString(data, { prettyPrintObject: true })
|
|
76
|
-
* : '';
|
|
77
|
-
*
|
|
78
|
-
* console.log(`[${timestamp}] ${message}`, dataStr);
|
|
79
|
-
* }
|
|
80
|
-
* }
|
|
81
|
-
*
|
|
82
|
-
* const logger = new Logger();
|
|
83
|
-
* logger.log('User data:', { id: 123, name: 'John' });
|
|
84
|
-
* ```
|
|
85
|
-
*
|
|
86
|
-
* @example API response formatting
|
|
87
|
-
* ```typescript
|
|
88
|
-
* // Safe error response formatting
|
|
89
|
-
* function formatErrorResponse(error: unknown): string {
|
|
90
|
-
* const errorStr = unknownToString(error, { prettyPrintObject: true });
|
|
91
|
-
*
|
|
92
|
-
* return JSON.stringify({
|
|
93
|
-
* success: false,
|
|
94
|
-
* error: errorStr
|
|
95
|
-
* });
|
|
96
|
-
* }
|
|
97
|
-
*
|
|
98
|
-
* try {
|
|
99
|
-
* // some operation
|
|
100
|
-
* } catch (error) {
|
|
101
|
-
* const response = formatErrorResponse(error);
|
|
102
|
-
* res.status(500).send(response);
|
|
103
|
-
* }
|
|
104
|
-
* ```
|
|
105
|
-
*
|
|
106
|
-
* @example Working with special objects
|
|
107
|
-
* ```typescript
|
|
108
|
-
* // Date objects
|
|
109
|
-
* unknownToString(new Date('2023-01-01'));
|
|
110
|
-
* // '"2023-01-01T00:00:00.000Z"' - JSON stringified
|
|
111
|
-
*
|
|
112
|
-
* // Regular expressions
|
|
113
|
-
* unknownToString(/test/gi);
|
|
114
|
-
* // '{}' - RegExp has no enumerable properties
|
|
115
|
-
*
|
|
116
|
-
* // Arrays
|
|
117
|
-
* unknownToString([1, 'two', { three: 3 }]);
|
|
118
|
-
* // '[1,"two",{"three":3}]'
|
|
119
|
-
*
|
|
120
|
-
* // Map and Set (converted to empty objects by JSON.stringify)
|
|
121
|
-
* unknownToString(new Map([['a', 1]])); // '{}'
|
|
122
|
-
* unknownToString(new Set([1, 2, 3])); // '{}'
|
|
123
|
-
* ```
|
|
124
|
-
*
|
|
125
|
-
* @example Using with validation
|
|
126
|
-
* ```typescript
|
|
127
|
-
* // Simple validation helper
|
|
128
|
-
* function validateAndStringify(input: unknown): string {
|
|
129
|
-
* const str = unknownToString(input);
|
|
130
|
-
* const trimmed = str.trim();
|
|
131
|
-
*
|
|
132
|
-
* if (trimmed.length === 0) {
|
|
133
|
-
* throw new Error('Empty string');
|
|
134
|
-
* }
|
|
135
|
-
*
|
|
136
|
-
* return trimmed;
|
|
137
|
-
* }
|
|
138
|
-
* ```
|
|
21
|
+
* @param options.prettyPrintObject - If true, objects are formatted with
|
|
22
|
+
* 2-space indentation
|
|
23
|
+
* @returns The string representation of the value. For circular references or
|
|
24
|
+
* non-serializable objects, returns an error message string
|
|
139
25
|
*
|
|
140
|
-
*
|
|
141
|
-
*
|
|
26
|
+
* **Error Handling:** Circular references and non-serializable objects return
|
|
27
|
+
* descriptive error messages instead of throwing
|
|
142
28
|
* @see JSON.stringify - Underlying serialization for objects
|
|
143
29
|
*/
|
|
144
30
|
export declare const unknownToString: (value: unknown, options?: Partial<Readonly<{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"unknown-to-string.d.mts","sourceRoot":"","sources":["../../src/others/unknown-to-string.mts"],"names":[],"mappings":"AAEA
|
|
1
|
+
{"version":3,"file":"unknown-to-string.d.mts","sourceRoot":"","sources":["../../src/others/unknown-to-string.mts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,eAAO,MAAM,eAAe,GAC1B,OAAO,OAAO,EACd,UAAU,OAAO,CAAC,QAAQ,CAAC;IAAE,iBAAiB,EAAE,OAAO,CAAA;CAAE,CAAC,CAAC,KAC1D,MAiCF,CAAC"}
|