ts-data-forge 3.2.0 → 3.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +45 -21
- package/dist/array/impl/array-utils-creation.d.mts +116 -0
- package/dist/array/impl/array-utils-creation.d.mts.map +1 -0
- package/dist/array/impl/array-utils-creation.mjs +110 -0
- package/dist/array/impl/array-utils-creation.mjs.map +1 -0
- package/dist/array/impl/array-utils-element-access.d.mts +61 -0
- package/dist/array/impl/array-utils-element-access.d.mts.map +1 -0
- package/dist/array/impl/array-utils-element-access.mjs +66 -0
- package/dist/array/impl/array-utils-element-access.mjs.map +1 -0
- package/dist/array/impl/array-utils-iterators.d.mts +59 -0
- package/dist/array/impl/array-utils-iterators.d.mts.map +1 -0
- package/dist/array/impl/array-utils-iterators.mjs +104 -0
- package/dist/array/impl/array-utils-iterators.mjs.map +1 -0
- package/dist/array/impl/array-utils-modification.d.mts +154 -0
- package/dist/array/impl/array-utils-modification.d.mts.map +1 -0
- package/dist/array/impl/array-utils-modification.mjs +139 -0
- package/dist/array/impl/array-utils-modification.mjs.map +1 -0
- package/dist/array/impl/array-utils-reducing-value.d.mts +214 -0
- package/dist/array/impl/array-utils-reducing-value.d.mts.map +1 -0
- package/dist/array/impl/array-utils-reducing-value.mjs +160 -0
- package/dist/array/impl/array-utils-reducing-value.mjs.map +1 -0
- package/dist/array/impl/array-utils-search.d.mts +179 -0
- package/dist/array/impl/array-utils-search.d.mts.map +1 -0
- package/dist/array/impl/array-utils-search.mjs +153 -0
- package/dist/array/impl/array-utils-search.mjs.map +1 -0
- package/dist/array/impl/array-utils-set-op.d.mts +100 -0
- package/dist/array/impl/array-utils-set-op.d.mts.map +1 -0
- package/dist/array/impl/array-utils-set-op.mjs +137 -0
- package/dist/array/impl/array-utils-set-op.mjs.map +1 -0
- package/dist/array/impl/array-utils-size.d.mts +24 -0
- package/dist/array/impl/array-utils-size.d.mts.map +1 -0
- package/dist/array/impl/array-utils-size.mjs +28 -0
- package/dist/array/impl/array-utils-size.mjs.map +1 -0
- package/dist/array/impl/array-utils-slice-clamped.d.mts +18 -0
- package/dist/array/impl/array-utils-slice-clamped.d.mts.map +1 -0
- package/dist/array/impl/array-utils-slice-clamped.mjs +49 -0
- package/dist/array/impl/array-utils-slice-clamped.mjs.map +1 -0
- package/dist/array/impl/array-utils-slicing.d.mts +120 -0
- package/dist/array/impl/array-utils-slicing.d.mts.map +1 -0
- package/dist/array/impl/array-utils-slicing.mjs +140 -0
- package/dist/array/impl/array-utils-slicing.mjs.map +1 -0
- package/dist/array/impl/array-utils-transformation.d.mts +348 -0
- package/dist/array/impl/array-utils-transformation.d.mts.map +1 -0
- package/dist/array/impl/array-utils-transformation.mjs +331 -0
- package/dist/array/impl/array-utils-transformation.mjs.map +1 -0
- package/dist/array/impl/array-utils-validation.d.mts +149 -0
- package/dist/array/impl/array-utils-validation.d.mts.map +1 -0
- package/dist/array/impl/array-utils-validation.mjs +166 -0
- package/dist/array/impl/array-utils-validation.mjs.map +1 -0
- package/dist/array/impl/index.d.mts +13 -0
- package/dist/array/impl/index.d.mts.map +1 -0
- package/dist/array/impl/index.mjs +13 -0
- package/dist/array/impl/index.mjs.map +1 -0
- package/dist/array/index.d.mts +1 -1
- package/dist/array/index.d.mts.map +1 -1
- package/dist/array/index.mjs +2 -1
- package/dist/array/index.mjs.map +1 -1
- package/dist/collections/imap-mapped.d.mts +83 -253
- package/dist/collections/imap-mapped.d.mts.map +1 -1
- package/dist/collections/imap-mapped.mjs +33 -164
- package/dist/collections/imap-mapped.mjs.map +1 -1
- package/dist/collections/imap.d.mts +436 -163
- package/dist/collections/imap.d.mts.map +1 -1
- package/dist/collections/imap.mjs +74 -94
- package/dist/collections/imap.mjs.map +1 -1
- package/dist/collections/iset-mapped.d.mts +828 -345
- package/dist/collections/iset-mapped.d.mts.map +1 -1
- package/dist/collections/iset-mapped.mjs +200 -242
- package/dist/collections/iset-mapped.mjs.map +1 -1
- package/dist/collections/iset.d.mts +397 -205
- package/dist/collections/iset.d.mts.map +1 -1
- package/dist/collections/iset.mjs +102 -184
- package/dist/collections/iset.mjs.map +1 -1
- package/dist/collections/queue.d.mts +155 -135
- package/dist/collections/queue.d.mts.map +1 -1
- package/dist/collections/queue.mjs +55 -156
- package/dist/collections/queue.mjs.map +1 -1
- package/dist/collections/stack.d.mts +154 -154
- package/dist/collections/stack.d.mts.map +1 -1
- package/dist/collections/stack.mjs +54 -203
- package/dist/collections/stack.mjs.map +1 -1
- package/dist/entry-point.d.mts +3 -0
- package/dist/entry-point.d.mts.map +1 -0
- package/dist/entry-point.mjs +62 -0
- package/dist/entry-point.mjs.map +1 -0
- package/dist/expect-type.d.mts +43 -172
- package/dist/expect-type.d.mts.map +1 -1
- package/dist/expect-type.mjs +43 -172
- package/dist/expect-type.mjs.map +1 -1
- package/dist/functional/match.d.mts +35 -140
- package/dist/functional/match.d.mts.map +1 -1
- package/dist/functional/match.mjs.map +1 -1
- package/dist/functional/optional.d.mts +282 -160
- package/dist/functional/optional.d.mts.map +1 -1
- package/dist/functional/optional.mjs +131 -71
- package/dist/functional/optional.mjs.map +1 -1
- package/dist/functional/pipe.d.mts +59 -113
- package/dist/functional/pipe.d.mts.map +1 -1
- package/dist/functional/pipe.mjs.map +1 -1
- package/dist/functional/result.d.mts +433 -332
- package/dist/functional/result.d.mts.map +1 -1
- package/dist/functional/result.mjs +233 -239
- package/dist/functional/result.mjs.map +1 -1
- package/dist/globals.d.mts +12 -5
- package/dist/guard/has-key.d.mts +23 -74
- package/dist/guard/has-key.d.mts.map +1 -1
- package/dist/guard/has-key.mjs +23 -74
- package/dist/guard/has-key.mjs.map +1 -1
- package/dist/guard/is-non-empty-string.d.mts +20 -87
- package/dist/guard/is-non-empty-string.d.mts.map +1 -1
- package/dist/guard/is-non-empty-string.mjs +20 -87
- package/dist/guard/is-non-empty-string.mjs.map +1 -1
- package/dist/guard/is-non-null-object.d.mts +14 -84
- package/dist/guard/is-non-null-object.d.mts.map +1 -1
- package/dist/guard/is-non-null-object.mjs +14 -84
- package/dist/guard/is-non-null-object.mjs.map +1 -1
- package/dist/guard/is-primitive.d.mts +13 -126
- package/dist/guard/is-primitive.d.mts.map +1 -1
- package/dist/guard/is-primitive.mjs +13 -126
- package/dist/guard/is-primitive.mjs.map +1 -1
- package/dist/guard/is-record.d.mts +21 -132
- package/dist/guard/is-record.d.mts.map +1 -1
- package/dist/guard/is-record.mjs +21 -132
- package/dist/guard/is-record.mjs.map +1 -1
- package/dist/guard/is-type.d.mts +201 -238
- package/dist/guard/is-type.d.mts.map +1 -1
- package/dist/guard/is-type.mjs +201 -238
- package/dist/guard/is-type.mjs.map +1 -1
- package/dist/guard/key-is-in.d.mts +22 -139
- package/dist/guard/key-is-in.d.mts.map +1 -1
- package/dist/guard/key-is-in.mjs +22 -139
- package/dist/guard/key-is-in.mjs.map +1 -1
- package/dist/index.d.mts +0 -1
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +0 -1
- package/dist/index.mjs.map +1 -1
- package/dist/iterator/range.d.mts +29 -62
- package/dist/iterator/range.d.mts.map +1 -1
- package/dist/iterator/range.mjs.map +1 -1
- package/dist/json/json.d.mts +191 -121
- package/dist/json/json.d.mts.map +1 -1
- package/dist/json/json.mjs +238 -136
- package/dist/json/json.mjs.map +1 -1
- package/dist/number/branded-types/finite-number.d.mts +24 -156
- package/dist/number/branded-types/finite-number.d.mts.map +1 -1
- package/dist/number/branded-types/finite-number.mjs +27 -159
- package/dist/number/branded-types/finite-number.mjs.map +1 -1
- package/dist/number/branded-types/int.d.mts +122 -120
- package/dist/number/branded-types/int.d.mts.map +1 -1
- package/dist/number/branded-types/int.mjs +122 -120
- package/dist/number/branded-types/int.mjs.map +1 -1
- package/dist/number/branded-types/int16.d.mts +22 -30
- package/dist/number/branded-types/int16.d.mts.map +1 -1
- package/dist/number/branded-types/int16.mjs +22 -30
- package/dist/number/branded-types/int16.mjs.map +1 -1
- package/dist/number/branded-types/int32.d.mts +22 -31
- package/dist/number/branded-types/int32.d.mts.map +1 -1
- package/dist/number/branded-types/int32.mjs +22 -31
- package/dist/number/branded-types/int32.mjs.map +1 -1
- package/dist/number/branded-types/non-negative-finite-number.d.mts +28 -36
- package/dist/number/branded-types/non-negative-finite-number.d.mts.map +1 -1
- package/dist/number/branded-types/non-negative-finite-number.mjs +31 -39
- package/dist/number/branded-types/non-negative-finite-number.mjs.map +1 -1
- package/dist/number/branded-types/non-negative-int16.d.mts +24 -34
- package/dist/number/branded-types/non-negative-int16.d.mts.map +1 -1
- package/dist/number/branded-types/non-negative-int16.mjs +24 -34
- package/dist/number/branded-types/non-negative-int16.mjs.map +1 -1
- package/dist/number/branded-types/non-negative-int32.d.mts +26 -35
- package/dist/number/branded-types/non-negative-int32.d.mts.map +1 -1
- package/dist/number/branded-types/non-negative-int32.mjs +26 -35
- package/dist/number/branded-types/non-negative-int32.mjs.map +1 -1
- package/dist/number/branded-types/non-zero-finite-number.d.mts +22 -37
- package/dist/number/branded-types/non-zero-finite-number.d.mts.map +1 -1
- package/dist/number/branded-types/non-zero-finite-number.mjs +25 -40
- package/dist/number/branded-types/non-zero-finite-number.mjs.map +1 -1
- package/dist/number/branded-types/non-zero-int.d.mts +15 -30
- package/dist/number/branded-types/non-zero-int.d.mts.map +1 -1
- package/dist/number/branded-types/non-zero-int.mjs +15 -30
- package/dist/number/branded-types/non-zero-int.mjs.map +1 -1
- package/dist/number/branded-types/non-zero-int16.d.mts +27 -35
- package/dist/number/branded-types/non-zero-int16.d.mts.map +1 -1
- package/dist/number/branded-types/non-zero-int16.mjs +27 -35
- package/dist/number/branded-types/non-zero-int16.mjs.map +1 -1
- package/dist/number/branded-types/non-zero-int32.d.mts +29 -36
- package/dist/number/branded-types/non-zero-int32.d.mts.map +1 -1
- package/dist/number/branded-types/non-zero-int32.mjs +29 -36
- package/dist/number/branded-types/non-zero-int32.mjs.map +1 -1
- package/dist/number/branded-types/non-zero-safe-int.d.mts +37 -38
- package/dist/number/branded-types/non-zero-safe-int.d.mts.map +1 -1
- package/dist/number/branded-types/non-zero-safe-int.mjs +39 -40
- package/dist/number/branded-types/non-zero-safe-int.mjs.map +1 -1
- package/dist/number/branded-types/non-zero-uint16.d.mts +24 -35
- package/dist/number/branded-types/non-zero-uint16.d.mts.map +1 -1
- package/dist/number/branded-types/non-zero-uint16.mjs +24 -35
- package/dist/number/branded-types/non-zero-uint16.mjs.map +1 -1
- package/dist/number/branded-types/non-zero-uint32.d.mts +24 -35
- package/dist/number/branded-types/non-zero-uint32.d.mts.map +1 -1
- package/dist/number/branded-types/non-zero-uint32.mjs +24 -35
- package/dist/number/branded-types/non-zero-uint32.mjs.map +1 -1
- package/dist/number/branded-types/positive-finite-number.d.mts +26 -40
- package/dist/number/branded-types/positive-finite-number.d.mts.map +1 -1
- package/dist/number/branded-types/positive-finite-number.mjs +29 -43
- package/dist/number/branded-types/positive-finite-number.mjs.map +1 -1
- package/dist/number/branded-types/positive-int.d.mts +133 -123
- package/dist/number/branded-types/positive-int.d.mts.map +1 -1
- package/dist/number/branded-types/positive-int.mjs +133 -123
- package/dist/number/branded-types/positive-int.mjs.map +1 -1
- package/dist/number/branded-types/positive-int16.d.mts +24 -35
- package/dist/number/branded-types/positive-int16.d.mts.map +1 -1
- package/dist/number/branded-types/positive-int16.mjs +24 -35
- package/dist/number/branded-types/positive-int16.mjs.map +1 -1
- package/dist/number/branded-types/positive-int32.d.mts +24 -35
- package/dist/number/branded-types/positive-int32.d.mts.map +1 -1
- package/dist/number/branded-types/positive-int32.mjs +24 -35
- package/dist/number/branded-types/positive-int32.mjs.map +1 -1
- package/dist/number/branded-types/positive-safe-int.d.mts +159 -33
- package/dist/number/branded-types/positive-safe-int.d.mts.map +1 -1
- package/dist/number/branded-types/positive-safe-int.mjs +160 -34
- package/dist/number/branded-types/positive-safe-int.mjs.map +1 -1
- package/dist/number/branded-types/positive-uint16.d.mts +24 -35
- package/dist/number/branded-types/positive-uint16.d.mts.map +1 -1
- package/dist/number/branded-types/positive-uint16.mjs +24 -35
- package/dist/number/branded-types/positive-uint16.mjs.map +1 -1
- package/dist/number/branded-types/positive-uint32.d.mts +26 -36
- package/dist/number/branded-types/positive-uint32.d.mts.map +1 -1
- package/dist/number/branded-types/positive-uint32.mjs +26 -36
- package/dist/number/branded-types/positive-uint32.mjs.map +1 -1
- package/dist/number/branded-types/safe-int.d.mts +140 -99
- package/dist/number/branded-types/safe-int.d.mts.map +1 -1
- package/dist/number/branded-types/safe-int.mjs +142 -101
- package/dist/number/branded-types/safe-int.mjs.map +1 -1
- package/dist/number/branded-types/safe-uint.d.mts +24 -33
- package/dist/number/branded-types/safe-uint.d.mts.map +1 -1
- package/dist/number/branded-types/safe-uint.mjs +25 -34
- package/dist/number/branded-types/safe-uint.mjs.map +1 -1
- package/dist/number/branded-types/uint.d.mts +121 -30
- package/dist/number/branded-types/uint.d.mts.map +1 -1
- package/dist/number/branded-types/uint.mjs +121 -30
- package/dist/number/branded-types/uint.mjs.map +1 -1
- package/dist/number/branded-types/uint16.d.mts +26 -34
- package/dist/number/branded-types/uint16.d.mts.map +1 -1
- package/dist/number/branded-types/uint16.mjs +26 -34
- package/dist/number/branded-types/uint16.mjs.map +1 -1
- package/dist/number/branded-types/uint32.d.mts +26 -68
- package/dist/number/branded-types/uint32.d.mts.map +1 -1
- package/dist/number/branded-types/uint32.mjs +26 -68
- package/dist/number/branded-types/uint32.mjs.map +1 -1
- package/dist/number/enum/int8.d.mts +37 -101
- package/dist/number/enum/int8.d.mts.map +1 -1
- package/dist/number/enum/int8.mjs +39 -170
- package/dist/number/enum/int8.mjs.map +1 -1
- package/dist/number/enum/uint8.d.mts +45 -55
- package/dist/number/enum/uint8.d.mts.map +1 -1
- package/dist/number/enum/uint8.mjs +46 -155
- package/dist/number/enum/uint8.mjs.map +1 -1
- package/dist/number/num.d.mts +145 -206
- package/dist/number/num.d.mts.map +1 -1
- package/dist/number/num.mjs +143 -199
- package/dist/number/num.mjs.map +1 -1
- package/dist/number/refined-number-utils.d.mts +97 -21
- package/dist/number/refined-number-utils.d.mts.map +1 -1
- package/dist/number/refined-number-utils.mjs +91 -20
- package/dist/number/refined-number-utils.mjs.map +1 -1
- package/dist/object/object.d.mts +126 -208
- package/dist/object/object.d.mts.map +1 -1
- package/dist/object/object.mjs +68 -102
- package/dist/object/object.mjs.map +1 -1
- package/dist/others/cast-mutable.d.mts +12 -88
- package/dist/others/cast-mutable.d.mts.map +1 -1
- package/dist/others/cast-mutable.mjs +13 -89
- package/dist/others/cast-mutable.mjs.map +1 -1
- package/dist/others/cast-readonly.d.mts +12 -168
- package/dist/others/cast-readonly.d.mts.map +1 -1
- package/dist/others/cast-readonly.mjs +13 -169
- package/dist/others/cast-readonly.mjs.map +1 -1
- package/dist/others/if-then.d.mts +6 -83
- package/dist/others/if-then.d.mts.map +1 -1
- package/dist/others/if-then.mjs +6 -83
- package/dist/others/if-then.mjs.map +1 -1
- package/dist/others/map-nullable.d.mts +12 -136
- package/dist/others/map-nullable.d.mts.map +1 -1
- package/dist/others/map-nullable.mjs.map +1 -1
- package/dist/others/memoize-function.d.mts +14 -157
- package/dist/others/memoize-function.d.mts.map +1 -1
- package/dist/others/memoize-function.mjs +14 -157
- package/dist/others/memoize-function.mjs.map +1 -1
- package/dist/others/tuple.d.mts +33 -151
- package/dist/others/tuple.d.mts.map +1 -1
- package/dist/others/tuple.mjs +33 -151
- package/dist/others/tuple.mjs.map +1 -1
- package/dist/others/unknown-to-string.d.mts +11 -125
- package/dist/others/unknown-to-string.d.mts.map +1 -1
- package/dist/others/unknown-to-string.mjs +14 -127
- package/dist/others/unknown-to-string.mjs.map +1 -1
- package/dist/promise/promise.d.mts +33 -20
- package/dist/promise/promise.d.mts.map +1 -1
- package/dist/promise/promise.mjs +34 -21
- package/dist/promise/promise.mjs.map +1 -1
- package/dist/types.d.mts +1 -1
- package/package.json +54 -50
- package/src/array/impl/array-utils-creation.mts +192 -0
- package/src/array/{array-utils-creation.test.mts → impl/array-utils-creation.test.mts} +121 -72
- package/src/array/impl/array-utils-element-access.mts +115 -0
- package/src/array/impl/array-utils-element-access.test.mts +151 -0
- package/src/array/impl/array-utils-iterators.mts +79 -0
- package/src/array/impl/array-utils-iterators.test.mts +98 -0
- package/src/array/impl/array-utils-modification.mts +434 -0
- package/src/array/{array-utils-modification.test.mts → impl/array-utils-modification.test.mts} +41 -28
- package/src/array/{array-utils-overload-type-error.test.mts → impl/array-utils-overload-type-error.test.mts} +33 -33
- package/src/array/impl/array-utils-reducing-value.mts +551 -0
- package/src/array/{array-utils-reducing-value.test.mts → impl/array-utils-reducing-value.test.mts} +45 -50
- package/src/array/impl/array-utils-search.mts +509 -0
- package/src/array/impl/array-utils-search.test.mts +346 -0
- package/src/array/impl/array-utils-set-op.mts +166 -0
- package/src/array/{array-utils-set-op.test.mts → impl/array-utils-set-op.test.mts} +42 -35
- package/src/array/impl/array-utils-size.mts +30 -0
- package/src/array/impl/array-utils-size.test.mts +9 -0
- package/src/array/impl/array-utils-slice-clamped.mts +51 -0
- package/src/array/{array-utils-slice-clamped.test.mts → impl/array-utils-slice-clamped.test.mts} +12 -12
- package/src/array/impl/array-utils-slicing.mts +275 -0
- package/src/array/impl/array-utils-slicing.test.mts +158 -0
- package/src/array/impl/array-utils-transformation.mts +746 -0
- package/src/array/{array-utils-transformation.test.mts → impl/array-utils-transformation.test.mts} +662 -889
- package/src/array/impl/array-utils-validation.mts +241 -0
- package/src/array/{array-utils-validation.test.mts → impl/array-utils-validation.test.mts} +194 -107
- package/src/array/{array.test.mts → impl/array.test.mts} +2 -2
- package/src/array/impl/index.mts +12 -0
- package/src/array/index.mts +1 -1
- package/src/collections/imap-mapped.mts +99 -265
- package/src/collections/imap.mts +477 -174
- package/src/collections/imap.test.mts +12 -19
- package/src/collections/iset-mapped.mts +892 -358
- package/src/collections/iset.mts +429 -213
- package/src/collections/queue.mts +174 -200
- package/src/collections/stack.mts +172 -245
- package/src/collections/stack.test.mts +9 -1
- package/src/entry-point.mts +2 -0
- package/src/expect-type.mts +43 -172
- package/src/functional/match.mts +35 -145
- package/src/functional/optional.mts +285 -163
- package/src/functional/optional.test.mts +4 -1
- package/src/functional/pipe.mts +60 -113
- package/src/functional/result.mts +452 -351
- package/src/functional/result.test.mts +9 -2
- package/src/globals.d.mts +12 -5
- package/src/guard/has-key.mts +23 -74
- package/src/guard/is-non-empty-string.mts +20 -87
- package/src/guard/is-non-null-object.mts +14 -84
- package/src/guard/is-non-null-object.test.mts +1 -1
- package/src/guard/is-primitive.mts +13 -126
- package/src/guard/is-primitive.test.mts +1 -1
- package/src/guard/is-record.mts +21 -132
- package/src/guard/is-record.test.mts +0 -1
- package/src/guard/is-type.mts +201 -238
- package/src/guard/is-type.test.mts +7 -7
- package/src/guard/key-is-in.mts +22 -139
- package/src/index.mts +0 -1
- package/src/iterator/range.mts +29 -62
- package/src/json/json.mts +202 -134
- package/src/json/json.test.mts +1 -3
- package/src/number/branded-types/finite-number.mts +27 -159
- package/src/number/branded-types/int.mts +122 -120
- package/src/number/branded-types/int16.mts +22 -30
- package/src/number/branded-types/int16.test.mts +24 -24
- package/src/number/branded-types/int32.mts +22 -31
- package/src/number/branded-types/int32.test.mts +39 -39
- package/src/number/branded-types/non-negative-finite-number.mts +31 -39
- package/src/number/branded-types/non-negative-int16.mts +24 -34
- package/src/number/branded-types/non-negative-int16.test.mts +16 -16
- package/src/number/branded-types/non-negative-int32.mts +26 -35
- package/src/number/branded-types/non-negative-int32.test.mts +30 -30
- package/src/number/branded-types/non-zero-finite-number.mts +25 -40
- package/src/number/branded-types/non-zero-int.mts +15 -30
- package/src/number/branded-types/non-zero-int16.mts +27 -35
- package/src/number/branded-types/non-zero-int16.test.mts +26 -26
- package/src/number/branded-types/non-zero-int32.mts +29 -36
- package/src/number/branded-types/non-zero-int32.test.mts +45 -42
- package/src/number/branded-types/non-zero-safe-int.mts +39 -40
- package/src/number/branded-types/non-zero-uint16.mts +24 -35
- package/src/number/branded-types/non-zero-uint16.test.mts +16 -16
- package/src/number/branded-types/non-zero-uint32.mts +24 -35
- package/src/number/branded-types/non-zero-uint32.test.mts +28 -28
- package/src/number/branded-types/positive-finite-number.mts +29 -43
- package/src/number/branded-types/positive-int.mts +134 -124
- package/src/number/branded-types/positive-int16.mts +24 -35
- package/src/number/branded-types/positive-int16.test.mts +14 -14
- package/src/number/branded-types/positive-int32.mts +24 -35
- package/src/number/branded-types/positive-int32.test.mts +26 -26
- package/src/number/branded-types/positive-safe-int.mts +160 -34
- package/src/number/branded-types/positive-uint16.mts +24 -35
- package/src/number/branded-types/positive-uint16.test.mts +16 -16
- package/src/number/branded-types/positive-uint32.mts +26 -36
- package/src/number/branded-types/positive-uint32.test.mts +31 -28
- package/src/number/branded-types/safe-int.mts +142 -101
- package/src/number/branded-types/safe-uint.mts +25 -34
- package/src/number/branded-types/uint.mts +121 -30
- package/src/number/branded-types/uint16.mts +26 -34
- package/src/number/branded-types/uint16.test.mts +16 -16
- package/src/number/branded-types/uint32.mts +26 -68
- package/src/number/branded-types/uint32.test.mts +28 -28
- package/src/number/enum/int8.mts +39 -170
- package/src/number/enum/uint8.mts +46 -155
- package/src/number/num.mts +157 -212
- package/src/number/num.test.mts +4 -4
- package/src/number/refined-number-utils.mts +109 -26
- package/src/object/object.mts +130 -212
- package/src/object/object.test.mts +29 -0
- package/src/others/cast-mutable.mts +13 -89
- package/src/others/cast-mutable.test.mts +80 -0
- package/src/others/cast-readonly.mts +13 -169
- package/src/others/if-then.mts +6 -83
- package/src/others/map-nullable.mts +12 -136
- package/src/others/map-nullable.test.mts +6 -6
- package/src/others/memoize-function.mts +14 -157
- package/src/others/tuple.mts +33 -151
- package/src/others/unknown-to-string.mts +15 -127
- package/src/others/unknown-to-string.test.mts +14 -2
- package/src/promise/promise.mts +34 -21
- package/src/promise/promise.test.mts +43 -0
- package/dist/array/array-utils.d.mts +0 -2956
- package/dist/array/array-utils.d.mts.map +0 -1
- package/dist/array/array-utils.mjs +0 -1838
- package/dist/array/array-utils.mjs.map +0 -1
- package/src/array/array-utils-search.test.mts +0 -169
- package/src/array/array-utils-slicing.test.mts +0 -274
- package/src/array/array-utils.mts +0 -4834
|
@@ -1,104 +1,34 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Type guard that checks if a value is a non-null object.
|
|
3
3
|
*
|
|
4
|
-
* This function checks if a value has type `"object"` according to the `typeof`
|
|
5
|
-
* and is not `null`. This includes all object types such as plain
|
|
6
|
-
* regular expressions, and other object instances, but
|
|
4
|
+
* This function checks if a value has type `"object"` according to the `typeof`
|
|
5
|
+
* operator and is not `null`. This includes all object types such as plain
|
|
6
|
+
* objects, arrays, dates, regular expressions, and other object instances, but
|
|
7
|
+
* excludes functions.
|
|
7
8
|
*
|
|
8
9
|
* **Type Narrowing Behavior:**
|
|
10
|
+
*
|
|
9
11
|
* - Narrows `unknown` to `object`
|
|
10
12
|
* - Excludes `null`, `undefined`, and all primitive types
|
|
11
13
|
* - Excludes functions (they have `typeof` === `"function"`, not `"object"`)
|
|
12
14
|
* - Includes arrays, dates, regex, and other object instances
|
|
13
15
|
*
|
|
14
|
-
* **Note:** This function returns `true` for arrays. If you need to check for
|
|
15
|
-
* specifically (excluding arrays), use `isRecord()` instead.
|
|
16
|
-
*
|
|
17
|
-
* @param u - The value to check
|
|
18
|
-
* @returns `true` if `u` is an object and not `null`, `false` otherwise.
|
|
19
|
-
* When `true`, TypeScript narrows the type to `object`.
|
|
20
|
-
*
|
|
21
|
-
* @example
|
|
22
|
-
* Basic usage with different value types:
|
|
23
|
-
* ```typescript
|
|
24
|
-
* isNonNullObject({}); // true (plain object)
|
|
25
|
-
* isNonNullObject([]); // true (arrays are objects)
|
|
26
|
-
* isNonNullObject(new Date()); // true (Date instance)
|
|
27
|
-
* isNonNullObject(/regex/); // true (RegExp instance)
|
|
28
|
-
* isNonNullObject(new Map()); // true (Map instance)
|
|
29
|
-
* isNonNullObject(null); // false (null is not considered object here)
|
|
30
|
-
* isNonNullObject(undefined); // false (primitive)
|
|
31
|
-
* isNonNullObject("string"); // false (primitive)
|
|
32
|
-
* isNonNullObject(42); // false (primitive)
|
|
33
|
-
* isNonNullObject(true); // false (primitive)
|
|
34
|
-
* isNonNullObject(() => {}); // false (functions are not objects in this context)
|
|
35
|
-
* ```
|
|
36
|
-
*
|
|
37
|
-
* @example
|
|
38
|
-
* Type guard usage with unknown values:
|
|
39
|
-
* ```typescript
|
|
40
|
-
* const value: unknown = parseJsonData();
|
|
41
|
-
*
|
|
42
|
-
* if (isNonNullObject(value)) {
|
|
43
|
-
* // value is now typed as object
|
|
44
|
-
* console.log('Value is an object');
|
|
45
|
-
*
|
|
46
|
-
* // You can now safely use object-specific operations
|
|
47
|
-
* console.log(Object.keys(value)); // Safe to call Object.keys
|
|
48
|
-
* console.log(value.toString()); // Safe to call methods
|
|
49
|
-
*
|
|
50
|
-
* // But you may need additional checks for specific object types
|
|
51
|
-
* if (Array.isArray(value)) {
|
|
52
|
-
* console.log('It\'s an array with length:', value.length);
|
|
53
|
-
* }
|
|
54
|
-
* } else {
|
|
55
|
-
* console.log('Value is not an object');
|
|
56
|
-
* }
|
|
57
|
-
* ```
|
|
16
|
+
* **Note:** This function returns `true` for arrays. If you need to check for
|
|
17
|
+
* plain objects specifically (excluding arrays), use `isRecord()` instead.
|
|
58
18
|
*
|
|
59
19
|
* @example
|
|
60
|
-
* Filtering arrays to find objects:
|
|
61
|
-
* ```typescript
|
|
62
|
-
* const mixedArray: unknown[] = [
|
|
63
|
-
* { name: 'John' },
|
|
64
|
-
* 'string',
|
|
65
|
-
* [1, 2, 3],
|
|
66
|
-
* 42,
|
|
67
|
-
* null,
|
|
68
|
-
* new Date(),
|
|
69
|
-
* () => 'function'
|
|
70
|
-
* ];
|
|
71
20
|
*
|
|
72
|
-
*
|
|
73
|
-
*
|
|
74
|
-
* // Note: includes both plain objects and arrays
|
|
21
|
+
* ```ts
|
|
22
|
+
* const mixed: unknown[] = [{ id: 1 }, null, 'Ada'] as const;
|
|
75
23
|
*
|
|
76
|
-
* objects.
|
|
77
|
-
* // Each obj is guaranteed to be an object
|
|
78
|
-
* console.log('Object type:', obj.constructor.name);
|
|
79
|
-
* });
|
|
80
|
-
* ```
|
|
24
|
+
* const objects = mixed.filter(isNonNullObject);
|
|
81
25
|
*
|
|
82
|
-
*
|
|
83
|
-
* Progressive type narrowing with other guards:
|
|
84
|
-
* ```typescript
|
|
85
|
-
* const apiResponse: unknown = await fetchData();
|
|
86
|
-
*
|
|
87
|
-
* if (isNonNullObject(apiResponse)) {
|
|
88
|
-
* // apiResponse is now object
|
|
89
|
-
*
|
|
90
|
-
* if (isRecord(apiResponse)) {
|
|
91
|
-
* // Further narrowed to UnknownRecord (plain object, not array)
|
|
92
|
-
*
|
|
93
|
-
* if (hasKey(apiResponse, 'status')) {
|
|
94
|
-
* console.log('API status:', apiResponse.status);
|
|
95
|
-
* }
|
|
96
|
-
* } else if (Array.isArray(apiResponse)) {
|
|
97
|
-
* console.log('Response is an array with length:', apiResponse.length);
|
|
98
|
-
* }
|
|
99
|
-
* }
|
|
26
|
+
* assert.deepStrictEqual(objects, [{ id: 1 }]);
|
|
100
27
|
* ```
|
|
101
28
|
*
|
|
29
|
+
* @param u - The value to check
|
|
30
|
+
* @returns `true` if `u` is an object and not `null`, `false` otherwise. When
|
|
31
|
+
* `true`, TypeScript narrows the type to `object`.
|
|
102
32
|
* @see {@link isRecord} - For checking plain objects specifically (excludes arrays)
|
|
103
33
|
*/
|
|
104
34
|
export declare const isNonNullObject: (u: unknown) => u is object;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"is-non-null-object.d.mts","sourceRoot":"","sources":["../../src/guard/is-non-null-object.mts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"is-non-null-object.d.mts","sourceRoot":"","sources":["../../src/guard/is-non-null-object.mts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AAEH,eAAO,MAAM,eAAe,GAAI,GAAG,OAAO,KAAG,CAAC,IAAI,MACb,CAAC"}
|
|
@@ -1,104 +1,34 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Type guard that checks if a value is a non-null object.
|
|
3
3
|
*
|
|
4
|
-
* This function checks if a value has type `"object"` according to the `typeof`
|
|
5
|
-
* and is not `null`. This includes all object types such as plain
|
|
6
|
-
* regular expressions, and other object instances, but
|
|
4
|
+
* This function checks if a value has type `"object"` according to the `typeof`
|
|
5
|
+
* operator and is not `null`. This includes all object types such as plain
|
|
6
|
+
* objects, arrays, dates, regular expressions, and other object instances, but
|
|
7
|
+
* excludes functions.
|
|
7
8
|
*
|
|
8
9
|
* **Type Narrowing Behavior:**
|
|
10
|
+
*
|
|
9
11
|
* - Narrows `unknown` to `object`
|
|
10
12
|
* - Excludes `null`, `undefined`, and all primitive types
|
|
11
13
|
* - Excludes functions (they have `typeof` === `"function"`, not `"object"`)
|
|
12
14
|
* - Includes arrays, dates, regex, and other object instances
|
|
13
15
|
*
|
|
14
|
-
* **Note:** This function returns `true` for arrays. If you need to check for
|
|
15
|
-
* specifically (excluding arrays), use `isRecord()` instead.
|
|
16
|
-
*
|
|
17
|
-
* @param u - The value to check
|
|
18
|
-
* @returns `true` if `u` is an object and not `null`, `false` otherwise.
|
|
19
|
-
* When `true`, TypeScript narrows the type to `object`.
|
|
20
|
-
*
|
|
21
|
-
* @example
|
|
22
|
-
* Basic usage with different value types:
|
|
23
|
-
* ```typescript
|
|
24
|
-
* isNonNullObject({}); // true (plain object)
|
|
25
|
-
* isNonNullObject([]); // true (arrays are objects)
|
|
26
|
-
* isNonNullObject(new Date()); // true (Date instance)
|
|
27
|
-
* isNonNullObject(/regex/); // true (RegExp instance)
|
|
28
|
-
* isNonNullObject(new Map()); // true (Map instance)
|
|
29
|
-
* isNonNullObject(null); // false (null is not considered object here)
|
|
30
|
-
* isNonNullObject(undefined); // false (primitive)
|
|
31
|
-
* isNonNullObject("string"); // false (primitive)
|
|
32
|
-
* isNonNullObject(42); // false (primitive)
|
|
33
|
-
* isNonNullObject(true); // false (primitive)
|
|
34
|
-
* isNonNullObject(() => {}); // false (functions are not objects in this context)
|
|
35
|
-
* ```
|
|
36
|
-
*
|
|
37
|
-
* @example
|
|
38
|
-
* Type guard usage with unknown values:
|
|
39
|
-
* ```typescript
|
|
40
|
-
* const value: unknown = parseJsonData();
|
|
41
|
-
*
|
|
42
|
-
* if (isNonNullObject(value)) {
|
|
43
|
-
* // value is now typed as object
|
|
44
|
-
* console.log('Value is an object');
|
|
45
|
-
*
|
|
46
|
-
* // You can now safely use object-specific operations
|
|
47
|
-
* console.log(Object.keys(value)); // Safe to call Object.keys
|
|
48
|
-
* console.log(value.toString()); // Safe to call methods
|
|
49
|
-
*
|
|
50
|
-
* // But you may need additional checks for specific object types
|
|
51
|
-
* if (Array.isArray(value)) {
|
|
52
|
-
* console.log('It\'s an array with length:', value.length);
|
|
53
|
-
* }
|
|
54
|
-
* } else {
|
|
55
|
-
* console.log('Value is not an object');
|
|
56
|
-
* }
|
|
57
|
-
* ```
|
|
16
|
+
* **Note:** This function returns `true` for arrays. If you need to check for
|
|
17
|
+
* plain objects specifically (excluding arrays), use `isRecord()` instead.
|
|
58
18
|
*
|
|
59
19
|
* @example
|
|
60
|
-
* Filtering arrays to find objects:
|
|
61
|
-
* ```typescript
|
|
62
|
-
* const mixedArray: unknown[] = [
|
|
63
|
-
* { name: 'John' },
|
|
64
|
-
* 'string',
|
|
65
|
-
* [1, 2, 3],
|
|
66
|
-
* 42,
|
|
67
|
-
* null,
|
|
68
|
-
* new Date(),
|
|
69
|
-
* () => 'function'
|
|
70
|
-
* ];
|
|
71
20
|
*
|
|
72
|
-
*
|
|
73
|
-
*
|
|
74
|
-
* // Note: includes both plain objects and arrays
|
|
21
|
+
* ```ts
|
|
22
|
+
* const mixed: unknown[] = [{ id: 1 }, null, 'Ada'] as const;
|
|
75
23
|
*
|
|
76
|
-
* objects.
|
|
77
|
-
* // Each obj is guaranteed to be an object
|
|
78
|
-
* console.log('Object type:', obj.constructor.name);
|
|
79
|
-
* });
|
|
80
|
-
* ```
|
|
24
|
+
* const objects = mixed.filter(isNonNullObject);
|
|
81
25
|
*
|
|
82
|
-
*
|
|
83
|
-
* Progressive type narrowing with other guards:
|
|
84
|
-
* ```typescript
|
|
85
|
-
* const apiResponse: unknown = await fetchData();
|
|
86
|
-
*
|
|
87
|
-
* if (isNonNullObject(apiResponse)) {
|
|
88
|
-
* // apiResponse is now object
|
|
89
|
-
*
|
|
90
|
-
* if (isRecord(apiResponse)) {
|
|
91
|
-
* // Further narrowed to UnknownRecord (plain object, not array)
|
|
92
|
-
*
|
|
93
|
-
* if (hasKey(apiResponse, 'status')) {
|
|
94
|
-
* console.log('API status:', apiResponse.status);
|
|
95
|
-
* }
|
|
96
|
-
* } else if (Array.isArray(apiResponse)) {
|
|
97
|
-
* console.log('Response is an array with length:', apiResponse.length);
|
|
98
|
-
* }
|
|
99
|
-
* }
|
|
26
|
+
* assert.deepStrictEqual(objects, [{ id: 1 }]);
|
|
100
27
|
* ```
|
|
101
28
|
*
|
|
29
|
+
* @param u - The value to check
|
|
30
|
+
* @returns `true` if `u` is an object and not `null`, `false` otherwise. When
|
|
31
|
+
* `true`, TypeScript narrows the type to `object`.
|
|
102
32
|
* @see {@link isRecord} - For checking plain objects specifically (excludes arrays)
|
|
103
33
|
*/
|
|
104
34
|
// eslint-disable-next-line @typescript-eslint/no-restricted-types
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"is-non-null-object.mjs","sources":["../../src/guard/is-non-null-object.mts"],"sourcesContent":[null],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"is-non-null-object.mjs","sources":["../../src/guard/is-non-null-object.mts"],"sourcesContent":[null],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgCG;AACH;AACO,MAAM,eAAe,GAAG,CAAC,CAAU,KACxC,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK;;;;"}
|
|
@@ -1,146 +1,33 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Type guard that checks if a value is a primitive type.
|
|
3
3
|
*
|
|
4
|
-
* This function identifies JavaScript primitive types, which are immutable data
|
|
5
|
-
* not objects. The primitive types are: `string`, `number`,
|
|
6
|
-
* `bigint`, and `null`.
|
|
4
|
+
* This function identifies JavaScript primitive types, which are immutable data
|
|
5
|
+
* types that are not objects. The primitive types are: `string`, `number`,
|
|
6
|
+
* `boolean`, `undefined`, `symbol`, `bigint`, and `null`.
|
|
7
7
|
*
|
|
8
|
-
* **Important Note:** Although `null` has `typeof null === "object"` due to a
|
|
9
|
-
* JavaScript quirk, this function correctly identifies `null` as a
|
|
8
|
+
* **Important Note:** Although `null` has `typeof null === "object"` due to a
|
|
9
|
+
* historical JavaScript quirk, this function correctly identifies `null` as a
|
|
10
|
+
* primitive value.
|
|
10
11
|
*
|
|
11
12
|
* **Type Narrowing Behavior:**
|
|
13
|
+
*
|
|
12
14
|
* - Narrows the input type to `Primitive` (union of all primitive types)
|
|
13
15
|
* - Excludes object types, arrays, functions, and other non-primitive values
|
|
14
16
|
* - Includes `null` despite its misleading `typeof` result
|
|
15
17
|
*
|
|
16
|
-
* @param u - The value to check
|
|
17
|
-
* @returns `true` if `u` is a primitive type, `false` otherwise.
|
|
18
|
-
* When `true`, TypeScript narrows the type to `Primitive`.
|
|
19
|
-
*
|
|
20
18
|
* @example
|
|
21
|
-
* Basic usage with different value types:
|
|
22
|
-
* ```typescript
|
|
23
|
-
* isPrimitive("hello"); // true (string)
|
|
24
|
-
* isPrimitive(42); // true (number)
|
|
25
|
-
* isPrimitive(true); // true (boolean)
|
|
26
|
-
* isPrimitive(undefined); // true (undefined)
|
|
27
|
-
* isPrimitive(Symbol('test')); // true (symbol)
|
|
28
|
-
* isPrimitive(123n); // true (bigint)
|
|
29
|
-
* isPrimitive(null); // true (null is primitive despite typeof quirk)
|
|
30
|
-
*
|
|
31
|
-
* isPrimitive({}); // false (object)
|
|
32
|
-
* isPrimitive([]); // false (array)
|
|
33
|
-
* isPrimitive(() => {}); // false (function)
|
|
34
|
-
* isPrimitive(new Date()); // false (object instance)
|
|
35
|
-
* isPrimitive(/regex/); // false (RegExp object)
|
|
36
|
-
* ```
|
|
37
19
|
*
|
|
38
|
-
*
|
|
39
|
-
*
|
|
40
|
-
* ```typescript
|
|
41
|
-
* const values: unknown[] = [
|
|
42
|
-
* 'string',
|
|
43
|
-
* 42,
|
|
44
|
-
* true,
|
|
45
|
-
* null,
|
|
46
|
-
* undefined,
|
|
47
|
-
* {},
|
|
48
|
-
* [],
|
|
49
|
-
* new Date()
|
|
50
|
-
* ];
|
|
20
|
+
* ```ts
|
|
21
|
+
* const values: readonly unknown[] = [42, 'Ada', null, { id: 1 }] as const;
|
|
51
22
|
*
|
|
52
23
|
* const primitives = values.filter(isPrimitive);
|
|
53
|
-
* const objects = values.filter(value => !isPrimitive(value));
|
|
54
|
-
*
|
|
55
|
-
* primitives.forEach(primitive => {
|
|
56
|
-
* // primitive is now typed as Primitive
|
|
57
|
-
* console.log('Primitive value:', primitive);
|
|
58
|
-
* console.log('Type:', typeof primitive);
|
|
59
|
-
* });
|
|
60
|
-
* ```
|
|
61
|
-
*
|
|
62
|
-
* @example
|
|
63
|
-
* Deep cloning detection - primitives don't need cloning:
|
|
64
|
-
* ```typescript
|
|
65
|
-
* function deepClone<T>(value: T): T {
|
|
66
|
-
* if (isPrimitive(value)) {
|
|
67
|
-
* // Primitives are immutable, return as-is
|
|
68
|
-
* return value;
|
|
69
|
-
* }
|
|
70
24
|
*
|
|
71
|
-
*
|
|
72
|
-
* if (Array.isArray(value)) {
|
|
73
|
-
* return value.map(deepClone) as T;
|
|
74
|
-
* }
|
|
75
|
-
*
|
|
76
|
-
* if (isRecord(value)) {
|
|
77
|
-
* const cloned = {} as T;
|
|
78
|
-
* for (const key in value) {
|
|
79
|
-
* if (Object.hasOwn(value, key)) {
|
|
80
|
-
* cloned[key] = deepClone(value[key]);
|
|
81
|
-
* }
|
|
82
|
-
* }
|
|
83
|
-
* return cloned;
|
|
84
|
-
* }
|
|
85
|
-
*
|
|
86
|
-
* // For other object types, return as-is or implement specific cloning
|
|
87
|
-
* return value;
|
|
88
|
-
* }
|
|
89
|
-
* ```
|
|
90
|
-
*
|
|
91
|
-
* @example
|
|
92
|
-
* Serialization helpers:
|
|
93
|
-
* ```typescript
|
|
94
|
-
* function canSerializeDirectly(value: unknown): boolean {
|
|
95
|
-
* if (isPrimitive(value)) {
|
|
96
|
-
* // Most primitives can be serialized directly
|
|
97
|
-
* return typeof value !== 'symbol' && typeof value !== 'bigint';
|
|
98
|
-
* }
|
|
99
|
-
* return false;
|
|
100
|
-
* }
|
|
101
|
-
*
|
|
102
|
-
* function safeStringify(value: unknown): string {
|
|
103
|
-
* if (isPrimitive(value)) {
|
|
104
|
-
* if (value === null) return 'null';
|
|
105
|
-
* if (value === undefined) return 'undefined';
|
|
106
|
-
* if (typeof value === 'symbol') return value.toString();
|
|
107
|
-
* if (typeof value === 'bigint') return value.toString() + 'n';
|
|
108
|
-
* return String(value);
|
|
109
|
-
* }
|
|
110
|
-
*
|
|
111
|
-
* return JSON.stringify(value);
|
|
112
|
-
* }
|
|
25
|
+
* assert.deepStrictEqual(primitives, [42, 'Ada', null]);
|
|
113
26
|
* ```
|
|
114
27
|
*
|
|
115
|
-
* @
|
|
116
|
-
*
|
|
117
|
-
*
|
|
118
|
-
* function processValue(value: unknown): string {
|
|
119
|
-
* if (isPrimitive(value)) {
|
|
120
|
-
* // value is now Primitive type
|
|
121
|
-
* switch (typeof value) {
|
|
122
|
-
* case 'string':
|
|
123
|
-
* return `String: ${value}`;
|
|
124
|
-
* case 'number':
|
|
125
|
-
* return `Number: ${value}`;
|
|
126
|
-
* case 'boolean':
|
|
127
|
-
* return `Boolean: ${value}`;
|
|
128
|
-
* case 'undefined':
|
|
129
|
-
* return 'Undefined';
|
|
130
|
-
* case 'symbol':
|
|
131
|
-
* return `Symbol: ${value.description || 'unnamed'}`;
|
|
132
|
-
* case 'bigint':
|
|
133
|
-
* return `BigInt: ${value}n`;
|
|
134
|
-
* case 'object': // This is null
|
|
135
|
-
* return 'Null';
|
|
136
|
-
* default:
|
|
137
|
-
* return 'Unknown primitive';
|
|
138
|
-
* }
|
|
139
|
-
* } else {
|
|
140
|
-
* return `Object: ${value?.constructor?.name || 'Unknown'}`;
|
|
141
|
-
* }
|
|
142
|
-
* }
|
|
143
|
-
* ```
|
|
28
|
+
* @param u - The value to check
|
|
29
|
+
* @returns `true` if `u` is a primitive type, `false` otherwise. When `true`,
|
|
30
|
+
* TypeScript narrows the type to `Primitive`.
|
|
144
31
|
*/
|
|
145
32
|
export declare const isPrimitive: (u: unknown) => u is Primitive;
|
|
146
33
|
//# sourceMappingURL=is-primitive.d.mts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"is-primitive.d.mts","sourceRoot":"","sources":["../../src/guard/is-primitive.mts"],"names":[],"mappings":"AAEA
|
|
1
|
+
{"version":3,"file":"is-primitive.d.mts","sourceRoot":"","sources":["../../src/guard/is-primitive.mts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,eAAO,MAAM,WAAW,GAAI,GAAG,OAAO,KAAG,CAAC,IAAI,SAa7C,CAAC"}
|
|
@@ -1,146 +1,33 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Type guard that checks if a value is a primitive type.
|
|
3
3
|
*
|
|
4
|
-
* This function identifies JavaScript primitive types, which are immutable data
|
|
5
|
-
* not objects. The primitive types are: `string`, `number`,
|
|
6
|
-
* `bigint`, and `null`.
|
|
4
|
+
* This function identifies JavaScript primitive types, which are immutable data
|
|
5
|
+
* types that are not objects. The primitive types are: `string`, `number`,
|
|
6
|
+
* `boolean`, `undefined`, `symbol`, `bigint`, and `null`.
|
|
7
7
|
*
|
|
8
|
-
* **Important Note:** Although `null` has `typeof null === "object"` due to a
|
|
9
|
-
* JavaScript quirk, this function correctly identifies `null` as a
|
|
8
|
+
* **Important Note:** Although `null` has `typeof null === "object"` due to a
|
|
9
|
+
* historical JavaScript quirk, this function correctly identifies `null` as a
|
|
10
|
+
* primitive value.
|
|
10
11
|
*
|
|
11
12
|
* **Type Narrowing Behavior:**
|
|
13
|
+
*
|
|
12
14
|
* - Narrows the input type to `Primitive` (union of all primitive types)
|
|
13
15
|
* - Excludes object types, arrays, functions, and other non-primitive values
|
|
14
16
|
* - Includes `null` despite its misleading `typeof` result
|
|
15
17
|
*
|
|
16
|
-
* @param u - The value to check
|
|
17
|
-
* @returns `true` if `u` is a primitive type, `false` otherwise.
|
|
18
|
-
* When `true`, TypeScript narrows the type to `Primitive`.
|
|
19
|
-
*
|
|
20
18
|
* @example
|
|
21
|
-
* Basic usage with different value types:
|
|
22
|
-
* ```typescript
|
|
23
|
-
* isPrimitive("hello"); // true (string)
|
|
24
|
-
* isPrimitive(42); // true (number)
|
|
25
|
-
* isPrimitive(true); // true (boolean)
|
|
26
|
-
* isPrimitive(undefined); // true (undefined)
|
|
27
|
-
* isPrimitive(Symbol('test')); // true (symbol)
|
|
28
|
-
* isPrimitive(123n); // true (bigint)
|
|
29
|
-
* isPrimitive(null); // true (null is primitive despite typeof quirk)
|
|
30
|
-
*
|
|
31
|
-
* isPrimitive({}); // false (object)
|
|
32
|
-
* isPrimitive([]); // false (array)
|
|
33
|
-
* isPrimitive(() => {}); // false (function)
|
|
34
|
-
* isPrimitive(new Date()); // false (object instance)
|
|
35
|
-
* isPrimitive(/regex/); // false (RegExp object)
|
|
36
|
-
* ```
|
|
37
19
|
*
|
|
38
|
-
*
|
|
39
|
-
*
|
|
40
|
-
* ```typescript
|
|
41
|
-
* const values: unknown[] = [
|
|
42
|
-
* 'string',
|
|
43
|
-
* 42,
|
|
44
|
-
* true,
|
|
45
|
-
* null,
|
|
46
|
-
* undefined,
|
|
47
|
-
* {},
|
|
48
|
-
* [],
|
|
49
|
-
* new Date()
|
|
50
|
-
* ];
|
|
20
|
+
* ```ts
|
|
21
|
+
* const values: readonly unknown[] = [42, 'Ada', null, { id: 1 }] as const;
|
|
51
22
|
*
|
|
52
23
|
* const primitives = values.filter(isPrimitive);
|
|
53
|
-
* const objects = values.filter(value => !isPrimitive(value));
|
|
54
|
-
*
|
|
55
|
-
* primitives.forEach(primitive => {
|
|
56
|
-
* // primitive is now typed as Primitive
|
|
57
|
-
* console.log('Primitive value:', primitive);
|
|
58
|
-
* console.log('Type:', typeof primitive);
|
|
59
|
-
* });
|
|
60
|
-
* ```
|
|
61
|
-
*
|
|
62
|
-
* @example
|
|
63
|
-
* Deep cloning detection - primitives don't need cloning:
|
|
64
|
-
* ```typescript
|
|
65
|
-
* function deepClone<T>(value: T): T {
|
|
66
|
-
* if (isPrimitive(value)) {
|
|
67
|
-
* // Primitives are immutable, return as-is
|
|
68
|
-
* return value;
|
|
69
|
-
* }
|
|
70
24
|
*
|
|
71
|
-
*
|
|
72
|
-
* if (Array.isArray(value)) {
|
|
73
|
-
* return value.map(deepClone) as T;
|
|
74
|
-
* }
|
|
75
|
-
*
|
|
76
|
-
* if (isRecord(value)) {
|
|
77
|
-
* const cloned = {} as T;
|
|
78
|
-
* for (const key in value) {
|
|
79
|
-
* if (Object.hasOwn(value, key)) {
|
|
80
|
-
* cloned[key] = deepClone(value[key]);
|
|
81
|
-
* }
|
|
82
|
-
* }
|
|
83
|
-
* return cloned;
|
|
84
|
-
* }
|
|
85
|
-
*
|
|
86
|
-
* // For other object types, return as-is or implement specific cloning
|
|
87
|
-
* return value;
|
|
88
|
-
* }
|
|
89
|
-
* ```
|
|
90
|
-
*
|
|
91
|
-
* @example
|
|
92
|
-
* Serialization helpers:
|
|
93
|
-
* ```typescript
|
|
94
|
-
* function canSerializeDirectly(value: unknown): boolean {
|
|
95
|
-
* if (isPrimitive(value)) {
|
|
96
|
-
* // Most primitives can be serialized directly
|
|
97
|
-
* return typeof value !== 'symbol' && typeof value !== 'bigint';
|
|
98
|
-
* }
|
|
99
|
-
* return false;
|
|
100
|
-
* }
|
|
101
|
-
*
|
|
102
|
-
* function safeStringify(value: unknown): string {
|
|
103
|
-
* if (isPrimitive(value)) {
|
|
104
|
-
* if (value === null) return 'null';
|
|
105
|
-
* if (value === undefined) return 'undefined';
|
|
106
|
-
* if (typeof value === 'symbol') return value.toString();
|
|
107
|
-
* if (typeof value === 'bigint') return value.toString() + 'n';
|
|
108
|
-
* return String(value);
|
|
109
|
-
* }
|
|
110
|
-
*
|
|
111
|
-
* return JSON.stringify(value);
|
|
112
|
-
* }
|
|
25
|
+
* assert.deepStrictEqual(primitives, [42, 'Ada', null]);
|
|
113
26
|
* ```
|
|
114
27
|
*
|
|
115
|
-
* @
|
|
116
|
-
*
|
|
117
|
-
*
|
|
118
|
-
* function processValue(value: unknown): string {
|
|
119
|
-
* if (isPrimitive(value)) {
|
|
120
|
-
* // value is now Primitive type
|
|
121
|
-
* switch (typeof value) {
|
|
122
|
-
* case 'string':
|
|
123
|
-
* return `String: ${value}`;
|
|
124
|
-
* case 'number':
|
|
125
|
-
* return `Number: ${value}`;
|
|
126
|
-
* case 'boolean':
|
|
127
|
-
* return `Boolean: ${value}`;
|
|
128
|
-
* case 'undefined':
|
|
129
|
-
* return 'Undefined';
|
|
130
|
-
* case 'symbol':
|
|
131
|
-
* return `Symbol: ${value.description || 'unnamed'}`;
|
|
132
|
-
* case 'bigint':
|
|
133
|
-
* return `BigInt: ${value}n`;
|
|
134
|
-
* case 'object': // This is null
|
|
135
|
-
* return 'Null';
|
|
136
|
-
* default:
|
|
137
|
-
* return 'Unknown primitive';
|
|
138
|
-
* }
|
|
139
|
-
* } else {
|
|
140
|
-
* return `Object: ${value?.constructor?.name || 'Unknown'}`;
|
|
141
|
-
* }
|
|
142
|
-
* }
|
|
143
|
-
* ```
|
|
28
|
+
* @param u - The value to check
|
|
29
|
+
* @returns `true` if `u` is a primitive type, `false` otherwise. When `true`,
|
|
30
|
+
* TypeScript narrows the type to `Primitive`.
|
|
144
31
|
*/
|
|
145
32
|
const isPrimitive = (u) => {
|
|
146
33
|
switch (typeof u) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"is-primitive.mjs","sources":["../../src/guard/is-primitive.mts"],"sourcesContent":[null],"names":[],"mappings":"AAEA
|
|
1
|
+
{"version":3,"file":"is-primitive.mjs","sources":["../../src/guard/is-primitive.mts"],"sourcesContent":[null],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8BG;AACI,MAAM,WAAW,GAAG,CAAC,CAAU,KAAoB;IACxD,QAAQ,OAAO,CAAC;AACd,QAAA,KAAK,QAAQ;AACb,QAAA,KAAK,QAAQ;AACb,QAAA,KAAK,SAAS;AACd,QAAA,KAAK,WAAW;AAChB,QAAA,KAAK,QAAQ;AACb,QAAA,KAAK,QAAQ;AACX,YAAA,OAAO,IAAI;AACb,QAAA,KAAK,UAAU;AACf,QAAA,KAAK,QAAQ;YACX,OAAO,CAAC,KAAK,IAAI;;AAEvB;;;;"}
|