ts-data-forge 3.3.0 → 4.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +37 -13
- package/dist/array/impl/array-utils-creation.d.mts +116 -0
- package/dist/array/impl/array-utils-creation.d.mts.map +1 -0
- package/dist/array/impl/array-utils-creation.mjs +110 -0
- package/dist/array/impl/array-utils-creation.mjs.map +1 -0
- package/dist/array/impl/array-utils-element-access.d.mts +60 -0
- package/dist/array/impl/array-utils-element-access.d.mts.map +1 -0
- package/dist/array/impl/array-utils-element-access.mjs +66 -0
- package/dist/array/impl/array-utils-element-access.mjs.map +1 -0
- package/dist/array/impl/array-utils-iterators.d.mts +59 -0
- package/dist/array/impl/array-utils-iterators.d.mts.map +1 -0
- package/dist/array/impl/array-utils-iterators.mjs +104 -0
- package/dist/array/impl/array-utils-iterators.mjs.map +1 -0
- package/dist/array/impl/array-utils-modification.d.mts +154 -0
- package/dist/array/impl/array-utils-modification.d.mts.map +1 -0
- package/dist/array/impl/array-utils-modification.mjs +139 -0
- package/dist/array/impl/array-utils-modification.mjs.map +1 -0
- package/dist/array/impl/array-utils-reducing-value.d.mts +213 -0
- package/dist/array/impl/array-utils-reducing-value.d.mts.map +1 -0
- package/dist/array/impl/array-utils-reducing-value.mjs +162 -0
- package/dist/array/impl/array-utils-reducing-value.mjs.map +1 -0
- package/dist/array/impl/array-utils-search.d.mts +178 -0
- package/dist/array/impl/array-utils-search.d.mts.map +1 -0
- package/dist/array/impl/array-utils-search.mjs +153 -0
- package/dist/array/impl/array-utils-search.mjs.map +1 -0
- package/dist/array/impl/array-utils-set-op.d.mts +100 -0
- package/dist/array/impl/array-utils-set-op.d.mts.map +1 -0
- package/dist/array/impl/array-utils-set-op.mjs +137 -0
- package/dist/array/impl/array-utils-set-op.mjs.map +1 -0
- package/dist/array/impl/array-utils-size.d.mts +24 -0
- package/dist/array/impl/array-utils-size.d.mts.map +1 -0
- package/dist/array/impl/array-utils-size.mjs +28 -0
- package/dist/array/impl/array-utils-size.mjs.map +1 -0
- package/dist/array/impl/array-utils-slice-clamped.d.mts +18 -0
- package/dist/array/impl/array-utils-slice-clamped.d.mts.map +1 -0
- package/dist/array/impl/array-utils-slice-clamped.mjs +49 -0
- package/dist/array/impl/array-utils-slice-clamped.mjs.map +1 -0
- package/dist/array/impl/array-utils-slicing.d.mts +120 -0
- package/dist/array/impl/array-utils-slicing.d.mts.map +1 -0
- package/dist/array/impl/array-utils-slicing.mjs +140 -0
- package/dist/array/impl/array-utils-slicing.mjs.map +1 -0
- package/dist/array/impl/array-utils-transformation.d.mts +348 -0
- package/dist/array/impl/array-utils-transformation.d.mts.map +1 -0
- package/dist/array/impl/array-utils-transformation.mjs +329 -0
- package/dist/array/impl/array-utils-transformation.mjs.map +1 -0
- package/dist/array/impl/array-utils-validation.d.mts +149 -0
- package/dist/array/impl/array-utils-validation.d.mts.map +1 -0
- package/dist/array/impl/array-utils-validation.mjs +166 -0
- package/dist/array/impl/array-utils-validation.mjs.map +1 -0
- package/dist/array/impl/index.d.mts +13 -0
- package/dist/array/impl/index.d.mts.map +1 -0
- package/dist/array/impl/index.mjs +13 -0
- package/dist/array/impl/index.mjs.map +1 -0
- package/dist/array/index.d.mts +1 -1
- package/dist/array/index.d.mts.map +1 -1
- package/dist/array/index.mjs +2 -1
- package/dist/array/index.mjs.map +1 -1
- package/dist/collections/imap-mapped.d.mts +83 -254
- package/dist/collections/imap-mapped.d.mts.map +1 -1
- package/dist/collections/imap-mapped.mjs +40 -170
- package/dist/collections/imap-mapped.mjs.map +1 -1
- package/dist/collections/imap.d.mts +436 -164
- package/dist/collections/imap.d.mts.map +1 -1
- package/dist/collections/imap.mjs +83 -101
- package/dist/collections/imap.mjs.map +1 -1
- package/dist/collections/iset-mapped.d.mts +828 -345
- package/dist/collections/iset-mapped.d.mts.map +1 -1
- package/dist/collections/iset-mapped.mjs +200 -242
- package/dist/collections/iset-mapped.mjs.map +1 -1
- package/dist/collections/iset.d.mts +397 -205
- package/dist/collections/iset.d.mts.map +1 -1
- package/dist/collections/iset.mjs +102 -184
- package/dist/collections/iset.mjs.map +1 -1
- package/dist/collections/queue.d.mts +155 -136
- package/dist/collections/queue.d.mts.map +1 -1
- package/dist/collections/queue.mjs +59 -160
- package/dist/collections/queue.mjs.map +1 -1
- package/dist/collections/stack.d.mts +154 -155
- package/dist/collections/stack.d.mts.map +1 -1
- package/dist/collections/stack.mjs +58 -207
- package/dist/collections/stack.mjs.map +1 -1
- package/dist/entry-point.d.mts +2 -0
- package/dist/entry-point.d.mts.map +1 -1
- package/dist/entry-point.mjs +8 -5
- package/dist/entry-point.mjs.map +1 -1
- package/dist/expect-type.d.mts +43 -172
- package/dist/expect-type.d.mts.map +1 -1
- package/dist/expect-type.mjs +43 -172
- package/dist/expect-type.mjs.map +1 -1
- package/dist/functional/index.d.mts +2 -2
- package/dist/functional/index.d.mts.map +1 -1
- package/dist/functional/index.mjs +4 -2
- package/dist/functional/index.mjs.map +1 -1
- package/dist/functional/match.d.mts +35 -140
- package/dist/functional/match.d.mts.map +1 -1
- package/dist/functional/match.mjs.map +1 -1
- package/dist/functional/optional/impl/index.d.mts +18 -0
- package/dist/functional/optional/impl/index.d.mts.map +1 -0
- package/dist/functional/optional/impl/index.mjs +17 -0
- package/dist/functional/optional/impl/index.mjs.map +1 -0
- package/dist/functional/optional/impl/optional-expect-to-be.d.mts +29 -0
- package/dist/functional/optional/impl/optional-expect-to-be.d.mts.map +1 -0
- package/dist/functional/optional/impl/optional-expect-to-be.mjs +25 -0
- package/dist/functional/optional/impl/optional-expect-to-be.mjs.map +1 -0
- package/dist/functional/optional/impl/optional-filter.d.mts +29 -0
- package/dist/functional/optional/impl/optional-filter.d.mts.map +1 -0
- package/dist/functional/optional/impl/optional-filter.mjs +28 -0
- package/dist/functional/optional/impl/optional-filter.mjs.map +1 -0
- package/dist/functional/optional/impl/optional-flat-map.d.mts +33 -0
- package/dist/functional/optional/impl/optional-flat-map.d.mts.map +1 -0
- package/dist/functional/optional/impl/optional-flat-map.mjs +21 -0
- package/dist/functional/optional/impl/optional-flat-map.mjs.map +1 -0
- package/dist/functional/optional/impl/optional-from-nullable.d.mts +24 -0
- package/dist/functional/optional/impl/optional-from-nullable.d.mts.map +1 -0
- package/dist/functional/optional/impl/optional-from-nullable.mjs +29 -0
- package/dist/functional/optional/impl/optional-from-nullable.mjs.map +1 -0
- package/dist/functional/optional/impl/optional-is-none.d.mts +22 -0
- package/dist/functional/optional/impl/optional-is-none.d.mts.map +1 -0
- package/dist/functional/optional/impl/optional-is-none.mjs +25 -0
- package/dist/functional/optional/impl/optional-is-none.mjs.map +1 -0
- package/dist/functional/optional/impl/optional-is-optional.d.mts +18 -0
- package/dist/functional/optional/impl/optional-is-optional.d.mts.map +1 -0
- package/dist/functional/optional/impl/optional-is-optional.mjs +27 -0
- package/dist/functional/optional/impl/optional-is-optional.mjs.map +1 -0
- package/dist/functional/optional/impl/optional-is-some.d.mts +22 -0
- package/dist/functional/optional/impl/optional-is-some.d.mts.map +1 -0
- package/dist/functional/optional/impl/optional-is-some.mjs +25 -0
- package/dist/functional/optional/impl/optional-is-some.mjs.map +1 -0
- package/dist/functional/optional/impl/optional-map.d.mts +31 -0
- package/dist/functional/optional/impl/optional-map.d.mts.map +1 -0
- package/dist/functional/optional/impl/optional-map.mjs +25 -0
- package/dist/functional/optional/impl/optional-map.mjs.map +1 -0
- package/dist/functional/optional/impl/optional-none.d.mts +16 -0
- package/dist/functional/optional/impl/optional-none.d.mts.map +1 -0
- package/dist/functional/optional/impl/optional-none.mjs +20 -0
- package/dist/functional/optional/impl/optional-none.mjs.map +1 -0
- package/dist/functional/optional/impl/optional-or-else.d.mts +35 -0
- package/dist/functional/optional/impl/optional-or-else.d.mts.map +1 -0
- package/dist/functional/optional/impl/optional-or-else.mjs +19 -0
- package/dist/functional/optional/impl/optional-or-else.mjs.map +1 -0
- package/dist/functional/optional/impl/optional-some.d.mts +19 -0
- package/dist/functional/optional/impl/optional-some.d.mts.map +1 -0
- package/dist/functional/optional/impl/optional-some.mjs +26 -0
- package/dist/functional/optional/impl/optional-some.mjs.map +1 -0
- package/dist/functional/optional/impl/optional-to-nullable.d.mts +27 -0
- package/dist/functional/optional/impl/optional-to-nullable.d.mts.map +1 -0
- package/dist/functional/optional/impl/optional-to-nullable.mjs +31 -0
- package/dist/functional/optional/impl/optional-to-nullable.mjs.map +1 -0
- package/dist/functional/optional/impl/optional-unwrap-or.d.mts +33 -0
- package/dist/functional/optional/impl/optional-unwrap-or.d.mts.map +1 -0
- package/dist/functional/optional/impl/optional-unwrap-or.mjs +19 -0
- package/dist/functional/optional/impl/optional-unwrap-or.mjs.map +1 -0
- package/dist/functional/optional/impl/optional-unwrap-throw.d.mts +29 -0
- package/dist/functional/optional/impl/optional-unwrap-throw.d.mts.map +1 -0
- package/dist/functional/optional/impl/optional-unwrap-throw.mjs +38 -0
- package/dist/functional/optional/impl/optional-unwrap-throw.mjs.map +1 -0
- package/dist/functional/optional/impl/optional-unwrap.d.mts +28 -0
- package/dist/functional/optional/impl/optional-unwrap.d.mts.map +1 -0
- package/dist/functional/optional/impl/optional-unwrap.mjs +11 -0
- package/dist/functional/optional/impl/optional-unwrap.mjs.map +1 -0
- package/dist/functional/optional/impl/optional-zip.d.mts +31 -0
- package/dist/functional/optional/impl/optional-zip.d.mts.map +1 -0
- package/dist/functional/optional/impl/optional-zip.mjs +39 -0
- package/dist/functional/optional/impl/optional-zip.mjs.map +1 -0
- package/dist/functional/optional/impl/tag.d.mts +5 -0
- package/dist/functional/optional/impl/tag.d.mts.map +1 -0
- package/dist/functional/optional/impl/tag.mjs +7 -0
- package/dist/functional/optional/impl/tag.mjs.map +1 -0
- package/dist/functional/optional/impl/types.d.mts +22 -0
- package/dist/functional/optional/impl/types.d.mts.map +1 -0
- package/dist/functional/optional/impl/types.mjs +2 -0
- package/dist/functional/optional/impl/types.mjs.map +1 -0
- package/dist/functional/optional/index.d.mts +2 -0
- package/dist/functional/optional/index.d.mts.map +1 -0
- package/dist/functional/optional/index.mjs +3 -0
- package/dist/functional/optional/index.mjs.map +1 -0
- package/dist/functional/pipe.d.mts +63 -117
- package/dist/functional/pipe.d.mts.map +1 -1
- package/dist/functional/pipe.mjs +4 -3
- package/dist/functional/pipe.mjs.map +1 -1
- package/dist/functional/result/impl/index.d.mts +24 -0
- package/dist/functional/result/impl/index.d.mts.map +1 -0
- package/dist/functional/result/impl/index.mjs +23 -0
- package/dist/functional/result/impl/index.mjs.map +1 -0
- package/dist/functional/result/impl/result-err.d.mts +25 -0
- package/dist/functional/result/impl/result-err.d.mts.map +1 -0
- package/dist/functional/result/impl/result-err.mjs +32 -0
- package/dist/functional/result/impl/result-err.mjs.map +1 -0
- package/dist/functional/result/impl/result-expect-to-be.d.mts +27 -0
- package/dist/functional/result/impl/result-expect-to-be.d.mts.map +1 -0
- package/dist/functional/result/impl/result-expect-to-be.mjs +26 -0
- package/dist/functional/result/impl/result-expect-to-be.mjs.map +1 -0
- package/dist/functional/result/impl/result-flat-map.d.mts +39 -0
- package/dist/functional/result/impl/result-flat-map.d.mts.map +1 -0
- package/dist/functional/result/impl/result-flat-map.mjs +24 -0
- package/dist/functional/result/impl/result-flat-map.mjs.map +1 -0
- package/dist/functional/result/impl/result-fold.d.mts +45 -0
- package/dist/functional/result/impl/result-fold.d.mts.map +1 -0
- package/dist/functional/result/impl/result-fold.mjs +26 -0
- package/dist/functional/result/impl/result-fold.mjs.map +1 -0
- package/dist/functional/result/impl/result-from-promise.d.mts +32 -0
- package/dist/functional/result/impl/result-from-promise.d.mts.map +1 -0
- package/dist/functional/result/impl/result-from-promise.mjs +32 -0
- package/dist/functional/result/impl/result-from-promise.mjs.map +1 -0
- package/dist/functional/result/impl/result-from-throwable.d.mts +29 -0
- package/dist/functional/result/impl/result-from-throwable.d.mts.map +1 -0
- package/dist/functional/result/impl/result-from-throwable.mjs +46 -0
- package/dist/functional/result/impl/result-from-throwable.mjs.map +1 -0
- package/dist/functional/result/impl/result-is-err.d.mts +20 -0
- package/dist/functional/result/impl/result-is-err.d.mts.map +1 -0
- package/dist/functional/result/impl/result-is-err.mjs +23 -0
- package/dist/functional/result/impl/result-is-err.mjs.map +1 -0
- package/dist/functional/result/impl/result-is-ok.d.mts +20 -0
- package/dist/functional/result/impl/result-is-ok.d.mts.map +1 -0
- package/dist/functional/result/impl/result-is-ok.mjs +23 -0
- package/dist/functional/result/impl/result-is-ok.mjs.map +1 -0
- package/dist/functional/result/impl/result-is-result.d.mts +17 -0
- package/dist/functional/result/impl/result-is-result.d.mts.map +1 -0
- package/dist/functional/result/impl/result-is-result.mjs +26 -0
- package/dist/functional/result/impl/result-is-result.mjs.map +1 -0
- package/dist/functional/result/impl/result-map-err.d.mts +33 -0
- package/dist/functional/result/impl/result-map-err.d.mts.map +1 -0
- package/dist/functional/result/impl/result-map-err.mjs +25 -0
- package/dist/functional/result/impl/result-map-err.mjs.map +1 -0
- package/dist/functional/result/impl/result-map.d.mts +34 -0
- package/dist/functional/result/impl/result-map.d.mts.map +1 -0
- package/dist/functional/result/impl/result-map.mjs +25 -0
- package/dist/functional/result/impl/result-map.mjs.map +1 -0
- package/dist/functional/result/impl/result-ok.d.mts +25 -0
- package/dist/functional/result/impl/result-ok.d.mts.map +1 -0
- package/dist/functional/result/impl/result-ok.mjs +32 -0
- package/dist/functional/result/impl/result-ok.mjs.map +1 -0
- package/dist/functional/result/impl/result-or-else.d.mts +32 -0
- package/dist/functional/result/impl/result-or-else.d.mts.map +1 -0
- package/dist/functional/result/impl/result-or-else.mjs +20 -0
- package/dist/functional/result/impl/result-or-else.mjs.map +1 -0
- package/dist/functional/result/impl/result-swap.d.mts +20 -0
- package/dist/functional/result/impl/result-swap.d.mts.map +1 -0
- package/dist/functional/result/impl/result-swap.mjs +28 -0
- package/dist/functional/result/impl/result-swap.mjs.map +1 -0
- package/dist/functional/result/impl/result-to-optional.d.mts +28 -0
- package/dist/functional/result/impl/result-to-optional.d.mts.map +1 -0
- package/dist/functional/result/impl/result-to-optional.mjs +34 -0
- package/dist/functional/result/impl/result-to-optional.mjs.map +1 -0
- package/dist/functional/result/impl/result-unwrap-err-or.d.mts +29 -0
- package/dist/functional/result/impl/result-unwrap-err-or.d.mts.map +1 -0
- package/dist/functional/result/impl/result-unwrap-err-or.mjs +20 -0
- package/dist/functional/result/impl/result-unwrap-err-or.mjs.map +1 -0
- package/dist/functional/result/impl/result-unwrap-err-throw.d.mts +30 -0
- package/dist/functional/result/impl/result-unwrap-err-throw.d.mts.map +1 -0
- package/dist/functional/result/impl/result-unwrap-err-throw.mjs +47 -0
- package/dist/functional/result/impl/result-unwrap-err-throw.mjs.map +1 -0
- package/dist/functional/result/impl/result-unwrap-err.d.mts +31 -0
- package/dist/functional/result/impl/result-unwrap-err.d.mts.map +1 -0
- package/dist/functional/result/impl/result-unwrap-err.mjs +36 -0
- package/dist/functional/result/impl/result-unwrap-err.mjs.map +1 -0
- package/dist/functional/result/impl/result-unwrap-ok-or.d.mts +29 -0
- package/dist/functional/result/impl/result-unwrap-ok-or.d.mts.map +1 -0
- package/dist/functional/result/impl/result-unwrap-ok-or.mjs +20 -0
- package/dist/functional/result/impl/result-unwrap-ok-or.mjs.map +1 -0
- package/dist/functional/result/impl/result-unwrap-ok.d.mts +23 -0
- package/dist/functional/result/impl/result-unwrap-ok.d.mts.map +1 -0
- package/dist/functional/result/impl/result-unwrap-ok.mjs +11 -0
- package/dist/functional/result/impl/result-unwrap-ok.mjs.map +1 -0
- package/dist/functional/result/impl/result-unwrap-throw.d.mts +30 -0
- package/dist/functional/result/impl/result-unwrap-throw.d.mts.map +1 -0
- package/dist/functional/result/impl/result-unwrap-throw.mjs +41 -0
- package/dist/functional/result/impl/result-unwrap-throw.mjs.map +1 -0
- package/dist/functional/result/impl/result-zip.d.mts +29 -0
- package/dist/functional/result/impl/result-zip.d.mts.map +1 -0
- package/dist/functional/result/impl/result-zip.mjs +38 -0
- package/dist/functional/result/impl/result-zip.mjs.map +1 -0
- package/dist/functional/result/impl/tag.d.mts +5 -0
- package/dist/functional/result/impl/tag.d.mts.map +1 -0
- package/dist/functional/result/impl/tag.mjs +7 -0
- package/dist/functional/result/impl/tag.mjs.map +1 -0
- package/dist/functional/result/impl/types.d.mts +29 -0
- package/dist/functional/result/impl/types.d.mts.map +1 -0
- package/dist/functional/result/impl/types.mjs +2 -0
- package/dist/functional/result/impl/types.mjs.map +1 -0
- package/dist/functional/result/index.d.mts +2 -0
- package/dist/functional/result/index.d.mts.map +1 -0
- package/dist/functional/result/index.mjs +3 -0
- package/dist/functional/result/index.mjs.map +1 -0
- package/dist/globals.d.mts +95 -5
- package/dist/guard/has-key.d.mts +23 -74
- package/dist/guard/has-key.d.mts.map +1 -1
- package/dist/guard/has-key.mjs +23 -74
- package/dist/guard/has-key.mjs.map +1 -1
- package/dist/guard/is-non-empty-string.d.mts +20 -87
- package/dist/guard/is-non-empty-string.d.mts.map +1 -1
- package/dist/guard/is-non-empty-string.mjs +20 -87
- package/dist/guard/is-non-empty-string.mjs.map +1 -1
- package/dist/guard/is-non-null-object.d.mts +14 -84
- package/dist/guard/is-non-null-object.d.mts.map +1 -1
- package/dist/guard/is-non-null-object.mjs +14 -84
- package/dist/guard/is-non-null-object.mjs.map +1 -1
- package/dist/guard/is-primitive.d.mts +13 -126
- package/dist/guard/is-primitive.d.mts.map +1 -1
- package/dist/guard/is-primitive.mjs +13 -126
- package/dist/guard/is-primitive.mjs.map +1 -1
- package/dist/guard/is-record.d.mts +21 -132
- package/dist/guard/is-record.d.mts.map +1 -1
- package/dist/guard/is-record.mjs +21 -132
- package/dist/guard/is-record.mjs.map +1 -1
- package/dist/guard/is-type.d.mts +201 -238
- package/dist/guard/is-type.d.mts.map +1 -1
- package/dist/guard/is-type.mjs +201 -238
- package/dist/guard/is-type.mjs.map +1 -1
- package/dist/guard/key-is-in.d.mts +22 -139
- package/dist/guard/key-is-in.d.mts.map +1 -1
- package/dist/guard/key-is-in.mjs +22 -139
- package/dist/guard/key-is-in.mjs.map +1 -1
- package/dist/index.d.mts +0 -2
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +0 -5
- package/dist/index.mjs.map +1 -1
- package/dist/iterator/range.d.mts +29 -62
- package/dist/iterator/range.d.mts.map +1 -1
- package/dist/iterator/range.mjs.map +1 -1
- package/dist/json/json.d.mts +191 -122
- package/dist/json/json.d.mts.map +1 -1
- package/dist/json/json.mjs +246 -144
- package/dist/json/json.mjs.map +1 -1
- package/dist/number/branded-types/finite-number.d.mts +24 -156
- package/dist/number/branded-types/finite-number.d.mts.map +1 -1
- package/dist/number/branded-types/finite-number.mjs +28 -160
- package/dist/number/branded-types/finite-number.mjs.map +1 -1
- package/dist/number/branded-types/int.d.mts +122 -120
- package/dist/number/branded-types/int.d.mts.map +1 -1
- package/dist/number/branded-types/int.mjs +123 -121
- package/dist/number/branded-types/int.mjs.map +1 -1
- package/dist/number/branded-types/int16.d.mts +22 -30
- package/dist/number/branded-types/int16.d.mts.map +1 -1
- package/dist/number/branded-types/int16.mjs +23 -31
- package/dist/number/branded-types/int16.mjs.map +1 -1
- package/dist/number/branded-types/int32.d.mts +22 -31
- package/dist/number/branded-types/int32.d.mts.map +1 -1
- package/dist/number/branded-types/int32.mjs +23 -32
- package/dist/number/branded-types/int32.mjs.map +1 -1
- package/dist/number/branded-types/non-negative-finite-number.d.mts +28 -36
- package/dist/number/branded-types/non-negative-finite-number.d.mts.map +1 -1
- package/dist/number/branded-types/non-negative-finite-number.mjs +32 -40
- package/dist/number/branded-types/non-negative-finite-number.mjs.map +1 -1
- package/dist/number/branded-types/non-negative-int16.d.mts +24 -34
- package/dist/number/branded-types/non-negative-int16.d.mts.map +1 -1
- package/dist/number/branded-types/non-negative-int16.mjs +25 -35
- package/dist/number/branded-types/non-negative-int16.mjs.map +1 -1
- package/dist/number/branded-types/non-negative-int32.d.mts +26 -35
- package/dist/number/branded-types/non-negative-int32.d.mts.map +1 -1
- package/dist/number/branded-types/non-negative-int32.mjs +27 -36
- package/dist/number/branded-types/non-negative-int32.mjs.map +1 -1
- package/dist/number/branded-types/non-zero-finite-number.d.mts +22 -37
- package/dist/number/branded-types/non-zero-finite-number.d.mts.map +1 -1
- package/dist/number/branded-types/non-zero-finite-number.mjs +26 -41
- package/dist/number/branded-types/non-zero-finite-number.mjs.map +1 -1
- package/dist/number/branded-types/non-zero-int.d.mts +15 -30
- package/dist/number/branded-types/non-zero-int.d.mts.map +1 -1
- package/dist/number/branded-types/non-zero-int.mjs +16 -31
- package/dist/number/branded-types/non-zero-int.mjs.map +1 -1
- package/dist/number/branded-types/non-zero-int16.d.mts +27 -35
- package/dist/number/branded-types/non-zero-int16.d.mts.map +1 -1
- package/dist/number/branded-types/non-zero-int16.mjs +28 -36
- package/dist/number/branded-types/non-zero-int16.mjs.map +1 -1
- package/dist/number/branded-types/non-zero-int32.d.mts +29 -36
- package/dist/number/branded-types/non-zero-int32.d.mts.map +1 -1
- package/dist/number/branded-types/non-zero-int32.mjs +30 -37
- package/dist/number/branded-types/non-zero-int32.mjs.map +1 -1
- package/dist/number/branded-types/non-zero-safe-int.d.mts +37 -38
- package/dist/number/branded-types/non-zero-safe-int.d.mts.map +1 -1
- package/dist/number/branded-types/non-zero-safe-int.mjs +40 -41
- package/dist/number/branded-types/non-zero-safe-int.mjs.map +1 -1
- package/dist/number/branded-types/non-zero-uint16.d.mts +24 -35
- package/dist/number/branded-types/non-zero-uint16.d.mts.map +1 -1
- package/dist/number/branded-types/non-zero-uint16.mjs +25 -36
- package/dist/number/branded-types/non-zero-uint16.mjs.map +1 -1
- package/dist/number/branded-types/non-zero-uint32.d.mts +24 -35
- package/dist/number/branded-types/non-zero-uint32.d.mts.map +1 -1
- package/dist/number/branded-types/non-zero-uint32.mjs +25 -36
- package/dist/number/branded-types/non-zero-uint32.mjs.map +1 -1
- package/dist/number/branded-types/positive-finite-number.d.mts +26 -40
- package/dist/number/branded-types/positive-finite-number.d.mts.map +1 -1
- package/dist/number/branded-types/positive-finite-number.mjs +30 -44
- package/dist/number/branded-types/positive-finite-number.mjs.map +1 -1
- package/dist/number/branded-types/positive-int.d.mts +133 -123
- package/dist/number/branded-types/positive-int.d.mts.map +1 -1
- package/dist/number/branded-types/positive-int.mjs +134 -124
- package/dist/number/branded-types/positive-int.mjs.map +1 -1
- package/dist/number/branded-types/positive-int16.d.mts +24 -35
- package/dist/number/branded-types/positive-int16.d.mts.map +1 -1
- package/dist/number/branded-types/positive-int16.mjs +25 -36
- package/dist/number/branded-types/positive-int16.mjs.map +1 -1
- package/dist/number/branded-types/positive-int32.d.mts +24 -35
- package/dist/number/branded-types/positive-int32.d.mts.map +1 -1
- package/dist/number/branded-types/positive-int32.mjs +25 -36
- package/dist/number/branded-types/positive-int32.mjs.map +1 -1
- package/dist/number/branded-types/positive-safe-int.d.mts +159 -33
- package/dist/number/branded-types/positive-safe-int.d.mts.map +1 -1
- package/dist/number/branded-types/positive-safe-int.mjs +161 -35
- package/dist/number/branded-types/positive-safe-int.mjs.map +1 -1
- package/dist/number/branded-types/positive-uint16.d.mts +24 -35
- package/dist/number/branded-types/positive-uint16.d.mts.map +1 -1
- package/dist/number/branded-types/positive-uint16.mjs +25 -36
- package/dist/number/branded-types/positive-uint16.mjs.map +1 -1
- package/dist/number/branded-types/positive-uint32.d.mts +26 -36
- package/dist/number/branded-types/positive-uint32.d.mts.map +1 -1
- package/dist/number/branded-types/positive-uint32.mjs +27 -37
- package/dist/number/branded-types/positive-uint32.mjs.map +1 -1
- package/dist/number/branded-types/safe-int.d.mts +140 -99
- package/dist/number/branded-types/safe-int.d.mts.map +1 -1
- package/dist/number/branded-types/safe-int.mjs +143 -102
- package/dist/number/branded-types/safe-int.mjs.map +1 -1
- package/dist/number/branded-types/safe-uint.d.mts +24 -33
- package/dist/number/branded-types/safe-uint.d.mts.map +1 -1
- package/dist/number/branded-types/safe-uint.mjs +26 -35
- package/dist/number/branded-types/safe-uint.mjs.map +1 -1
- package/dist/number/branded-types/uint.d.mts +121 -30
- package/dist/number/branded-types/uint.d.mts.map +1 -1
- package/dist/number/branded-types/uint.mjs +122 -31
- package/dist/number/branded-types/uint.mjs.map +1 -1
- package/dist/number/branded-types/uint16.d.mts +26 -34
- package/dist/number/branded-types/uint16.d.mts.map +1 -1
- package/dist/number/branded-types/uint16.mjs +27 -35
- package/dist/number/branded-types/uint16.mjs.map +1 -1
- package/dist/number/branded-types/uint32.d.mts +26 -68
- package/dist/number/branded-types/uint32.d.mts.map +1 -1
- package/dist/number/branded-types/uint32.mjs +27 -69
- package/dist/number/branded-types/uint32.mjs.map +1 -1
- package/dist/number/enum/int8.d.mts +37 -101
- package/dist/number/enum/int8.d.mts.map +1 -1
- package/dist/number/enum/int8.mjs +40 -171
- package/dist/number/enum/int8.mjs.map +1 -1
- package/dist/number/enum/uint8.d.mts +45 -55
- package/dist/number/enum/uint8.d.mts.map +1 -1
- package/dist/number/enum/uint8.mjs +47 -156
- package/dist/number/enum/uint8.mjs.map +1 -1
- package/dist/number/num.d.mts +145 -206
- package/dist/number/num.d.mts.map +1 -1
- package/dist/number/num.mjs +143 -199
- package/dist/number/num.mjs.map +1 -1
- package/dist/number/refined-number-utils.d.mts +97 -21
- package/dist/number/refined-number-utils.d.mts.map +1 -1
- package/dist/number/refined-number-utils.mjs +91 -22
- package/dist/number/refined-number-utils.mjs.map +1 -1
- package/dist/object/object.d.mts +126 -208
- package/dist/object/object.d.mts.map +1 -1
- package/dist/object/object.mjs +68 -102
- package/dist/object/object.mjs.map +1 -1
- package/dist/others/cast-mutable.d.mts +12 -88
- package/dist/others/cast-mutable.d.mts.map +1 -1
- package/dist/others/cast-mutable.mjs +13 -89
- package/dist/others/cast-mutable.mjs.map +1 -1
- package/dist/others/cast-readonly.d.mts +12 -168
- package/dist/others/cast-readonly.d.mts.map +1 -1
- package/dist/others/cast-readonly.mjs +13 -169
- package/dist/others/cast-readonly.mjs.map +1 -1
- package/dist/others/if-then.d.mts +6 -83
- package/dist/others/if-then.d.mts.map +1 -1
- package/dist/others/if-then.mjs +6 -83
- package/dist/others/if-then.mjs.map +1 -1
- package/dist/others/map-nullable.d.mts +12 -136
- package/dist/others/map-nullable.d.mts.map +1 -1
- package/dist/others/map-nullable.mjs.map +1 -1
- package/dist/others/memoize-function.d.mts +14 -157
- package/dist/others/memoize-function.d.mts.map +1 -1
- package/dist/others/memoize-function.mjs +14 -157
- package/dist/others/memoize-function.mjs.map +1 -1
- package/dist/others/tuple.d.mts +33 -151
- package/dist/others/tuple.d.mts.map +1 -1
- package/dist/others/tuple.mjs +33 -151
- package/dist/others/tuple.mjs.map +1 -1
- package/dist/others/unknown-to-string.d.mts +11 -125
- package/dist/others/unknown-to-string.d.mts.map +1 -1
- package/dist/others/unknown-to-string.mjs +12 -126
- package/dist/others/unknown-to-string.mjs.map +1 -1
- package/dist/promise/promise.d.mts +33 -21
- package/dist/promise/promise.d.mts.map +1 -1
- package/dist/promise/promise.mjs +36 -24
- package/dist/promise/promise.mjs.map +1 -1
- package/package.json +58 -44
- package/src/array/impl/array-utils-creation.mts +192 -0
- package/src/array/{array-utils-creation.test.mts → impl/array-utils-creation.test.mts} +121 -72
- package/src/array/impl/array-utils-element-access.mts +115 -0
- package/src/array/impl/array-utils-element-access.test.mts +151 -0
- package/src/array/impl/array-utils-iterators.mts +79 -0
- package/src/array/impl/array-utils-iterators.test.mts +98 -0
- package/src/array/impl/array-utils-modification.mts +434 -0
- package/src/array/{array-utils-modification.test.mts → impl/array-utils-modification.test.mts} +41 -28
- package/src/array/{array-utils-overload-type-error.test.mts → impl/array-utils-overload-type-error.test.mts} +33 -33
- package/src/array/impl/array-utils-reducing-value.mts +535 -0
- package/src/array/{array-utils-reducing-value.test.mts → impl/array-utils-reducing-value.test.mts} +53 -58
- package/src/array/impl/array-utils-search.mts +509 -0
- package/src/array/impl/array-utils-search.test.mts +346 -0
- package/src/array/impl/array-utils-set-op.mts +166 -0
- package/src/array/{array-utils-set-op.test.mts → impl/array-utils-set-op.test.mts} +42 -35
- package/src/array/impl/array-utils-size.mts +30 -0
- package/src/array/impl/array-utils-size.test.mts +9 -0
- package/src/array/impl/array-utils-slice-clamped.mts +51 -0
- package/src/array/{array-utils-slice-clamped.test.mts → impl/array-utils-slice-clamped.test.mts} +13 -13
- package/src/array/impl/array-utils-slicing.mts +275 -0
- package/src/array/impl/array-utils-slicing.test.mts +158 -0
- package/src/array/impl/array-utils-transformation.mts +746 -0
- package/src/array/{array-utils-transformation.test.mts → impl/array-utils-transformation.test.mts} +662 -889
- package/src/array/impl/array-utils-validation.mts +241 -0
- package/src/array/{array-utils-validation.test.mts → impl/array-utils-validation.test.mts} +194 -107
- package/src/array/{array.test.mts → impl/array.test.mts} +2 -2
- package/src/array/impl/index.mts +12 -0
- package/src/array/index.mts +1 -1
- package/src/collections/imap-mapped.mts +99 -265
- package/src/collections/imap.mts +477 -174
- package/src/collections/imap.test.mts +12 -19
- package/src/collections/iset-mapped.mts +892 -358
- package/src/collections/iset.mts +429 -213
- package/src/collections/queue.mts +174 -200
- package/src/collections/stack.mts +172 -245
- package/src/collections/stack.test.mts +9 -1
- package/src/entry-point.mts +2 -0
- package/src/expect-type.mts +43 -172
- package/src/functional/index.mts +2 -2
- package/src/functional/match.mts +35 -145
- package/src/functional/optional/impl/index.mts +17 -0
- package/src/functional/optional/impl/optional-expect-to-be.mts +65 -0
- package/src/functional/optional/impl/optional-filter.mts +71 -0
- package/src/functional/optional/impl/optional-flat-map.mts +67 -0
- package/src/functional/optional/impl/optional-from-nullable.mts +28 -0
- package/src/functional/optional/impl/optional-is-none.mts +25 -0
- package/src/functional/optional/impl/optional-is-optional.mts +27 -0
- package/src/functional/optional/impl/optional-is-some.mts +25 -0
- package/src/functional/optional/impl/optional-map.mts +69 -0
- package/src/functional/optional/impl/optional-none.mts +17 -0
- package/src/functional/optional/impl/optional-or-else.mts +73 -0
- package/src/functional/optional/impl/optional-some.mts +23 -0
- package/src/functional/optional/impl/optional-to-nullable.mts +31 -0
- package/src/functional/optional/impl/optional-unwrap-or.mts +64 -0
- package/src/functional/optional/impl/optional-unwrap-throw.mts +39 -0
- package/src/functional/optional/impl/optional-unwrap.mts +41 -0
- package/src/functional/optional/impl/optional-zip.mts +40 -0
- package/src/functional/optional/impl/tag.mts +6 -0
- package/src/functional/optional/impl/types.mts +28 -0
- package/src/functional/optional/index.mts +1 -0
- package/src/functional/optional.test.mts +11 -9
- package/src/functional/pipe.mts +65 -118
- package/src/functional/pipe.test.mts +1 -1
- package/src/functional/result/impl/index.mts +23 -0
- package/src/functional/result/impl/result-err.mts +29 -0
- package/src/functional/result/impl/result-expect-to-be.mts +63 -0
- package/src/functional/result/impl/result-flat-map.mts +79 -0
- package/src/functional/result/impl/result-fold.mts +95 -0
- package/src/functional/result/impl/result-from-promise.mts +39 -0
- package/src/functional/result/impl/result-from-throwable.mts +42 -0
- package/src/functional/result/impl/result-is-err.mts +23 -0
- package/src/functional/result/impl/result-is-ok.mts +23 -0
- package/src/functional/result/impl/result-is-result.mts +23 -0
- package/src/functional/result/impl/result-map-err.mts +72 -0
- package/src/functional/result/impl/result-map.mts +73 -0
- package/src/functional/result/impl/result-ok.mts +29 -0
- package/src/functional/result/impl/result-or-else.mts +63 -0
- package/src/functional/result/impl/result-swap.mts +28 -0
- package/src/functional/result/impl/result-to-optional.mts +34 -0
- package/src/functional/result/impl/result-unwrap-err-or.mts +60 -0
- package/src/functional/result/impl/result-unwrap-err-throw.mts +53 -0
- package/src/functional/result/impl/result-unwrap-err.mts +36 -0
- package/src/functional/result/impl/result-unwrap-ok-or.mts +60 -0
- package/src/functional/result/impl/result-unwrap-ok.mts +35 -0
- package/src/functional/result/impl/result-unwrap-throw.mts +43 -0
- package/src/functional/result/impl/result-zip.mts +39 -0
- package/src/functional/result/impl/tag.mts +6 -0
- package/src/functional/result/impl/types.mts +35 -0
- package/src/functional/result/index.mts +1 -0
- package/src/functional/result.test.mts +14 -6
- package/src/globals.d.mts +95 -5
- package/src/guard/has-key.mts +23 -74
- package/src/guard/is-non-empty-string.mts +20 -87
- package/src/guard/is-non-empty-string.test.mts +1 -1
- package/src/guard/is-non-null-object.mts +14 -84
- package/src/guard/is-non-null-object.test.mts +4 -4
- package/src/guard/is-primitive.mts +13 -126
- package/src/guard/is-primitive.test.mts +4 -4
- package/src/guard/is-record.mts +21 -132
- package/src/guard/is-type.mts +201 -238
- package/src/guard/is-type.test.mts +10 -10
- package/src/guard/key-is-in.mts +22 -139
- package/src/index.mts +0 -2
- package/src/iterator/range.mts +29 -62
- package/src/json/json.mts +202 -134
- package/src/json/json.test.mts +1 -3
- package/src/number/branded-types/finite-number.mts +34 -166
- package/src/number/branded-types/int.mts +129 -127
- package/src/number/branded-types/int16.mts +31 -39
- package/src/number/branded-types/int16.test.mts +24 -24
- package/src/number/branded-types/int32.mts +31 -40
- package/src/number/branded-types/int32.test.mts +39 -39
- package/src/number/branded-types/non-negative-finite-number.mts +39 -47
- package/src/number/branded-types/non-negative-int16.mts +33 -43
- package/src/number/branded-types/non-negative-int16.test.mts +16 -16
- package/src/number/branded-types/non-negative-int32.mts +35 -44
- package/src/number/branded-types/non-negative-int32.test.mts +30 -30
- package/src/number/branded-types/non-zero-finite-number.mts +32 -47
- package/src/number/branded-types/non-zero-int.mts +22 -37
- package/src/number/branded-types/non-zero-int16.mts +36 -44
- package/src/number/branded-types/non-zero-int16.test.mts +26 -26
- package/src/number/branded-types/non-zero-int32.mts +38 -45
- package/src/number/branded-types/non-zero-int32.test.mts +45 -42
- package/src/number/branded-types/non-zero-safe-int.mts +48 -49
- package/src/number/branded-types/non-zero-uint16.mts +33 -44
- package/src/number/branded-types/non-zero-uint16.test.mts +16 -16
- package/src/number/branded-types/non-zero-uint32.mts +33 -44
- package/src/number/branded-types/non-zero-uint32.test.mts +28 -28
- package/src/number/branded-types/positive-finite-number.mts +37 -51
- package/src/number/branded-types/positive-int.mts +142 -132
- package/src/number/branded-types/positive-int16.mts +33 -44
- package/src/number/branded-types/positive-int16.test.mts +14 -14
- package/src/number/branded-types/positive-int32.mts +33 -44
- package/src/number/branded-types/positive-int32.test.mts +26 -26
- package/src/number/branded-types/positive-safe-int.mts +169 -43
- package/src/number/branded-types/positive-uint16.mts +33 -44
- package/src/number/branded-types/positive-uint16.test.mts +16 -16
- package/src/number/branded-types/positive-uint32.mts +35 -45
- package/src/number/branded-types/positive-uint32.test.mts +31 -28
- package/src/number/branded-types/safe-int.mts +151 -110
- package/src/number/branded-types/safe-uint.mts +34 -43
- package/src/number/branded-types/uint.mts +129 -38
- package/src/number/branded-types/uint16.mts +35 -43
- package/src/number/branded-types/uint16.test.mts +16 -16
- package/src/number/branded-types/uint32.mts +35 -77
- package/src/number/branded-types/uint32.test.mts +28 -28
- package/src/number/enum/int8.mts +42 -173
- package/src/number/enum/int8.test.mts +9 -9
- package/src/number/enum/uint8.mts +49 -158
- package/src/number/enum/uint8.test.mts +8 -8
- package/src/number/num.mts +157 -212
- package/src/number/num.test.mts +4 -4
- package/src/number/refined-number-utils.mts +109 -26
- package/src/object/object.mts +130 -212
- package/src/object/object.test.mts +29 -0
- package/src/others/cast-mutable.mts +13 -89
- package/src/others/cast-mutable.test.mts +80 -0
- package/src/others/cast-readonly.mts +13 -169
- package/src/others/if-then.mts +6 -83
- package/src/others/map-nullable.mts +12 -136
- package/src/others/map-nullable.test.mts +6 -6
- package/src/others/memoize-function.mts +14 -157
- package/src/others/tuple.mts +33 -151
- package/src/others/unknown-to-string.mts +12 -126
- package/src/others/unknown-to-string.test.mts +13 -1
- package/src/promise/promise.mts +34 -21
- package/src/promise/promise.test.mts +43 -0
- package/dist/array/array-utils.d.mts +0 -2956
- package/dist/array/array-utils.d.mts.map +0 -1
- package/dist/array/array-utils.mjs +0 -1838
- package/dist/array/array-utils.mjs.map +0 -1
- package/dist/functional/optional.d.mts +0 -360
- package/dist/functional/optional.d.mts.map +0 -1
- package/dist/functional/optional.mjs +0 -268
- package/dist/functional/optional.mjs.map +0 -1
- package/dist/functional/result.d.mts +0 -611
- package/dist/functional/result.d.mts.map +0 -1
- package/dist/functional/result.mjs +0 -545
- package/dist/functional/result.mjs.map +0 -1
- package/src/array/array-utils-search.test.mts +0 -169
- package/src/array/array-utils-slicing.test.mts +0 -274
- package/src/array/array-utils.mts +0 -4834
- package/src/functional/optional.mts +0 -591
- package/src/functional/result.mts +0 -986
|
@@ -1,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;;;;"}
|
|
@@ -1,149 +1,38 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Type guard that checks if a value is a plain object (record) - a non-null
|
|
2
|
+
* Type guard that checks if a value is a plain object (record) - a non-null
|
|
3
|
+
* object that is not an array.
|
|
3
4
|
*
|
|
4
|
-
* This function is useful for identifying "plain" JavaScript objects (also
|
|
5
|
-
* dictionaries) - objects that are typically used as
|
|
6
|
-
*
|
|
7
|
-
*
|
|
5
|
+
* This function is useful for identifying "plain" JavaScript objects (also
|
|
6
|
+
* called records or dictionaries) - objects that are typically used as
|
|
7
|
+
* key-value collections. It excludes arrays, functions, and special object
|
|
8
|
+
* types like Date, RegExp, etc., focusing on objects that can be safely treated
|
|
9
|
+
* as property collections.
|
|
8
10
|
*
|
|
9
11
|
* **Type Narrowing Behavior:**
|
|
10
|
-
*
|
|
12
|
+
*
|
|
13
|
+
* - Narrows `unknown` to `UnknownRecord` (equivalent to `Record<PropertyKey,
|
|
14
|
+
* unknown>`)
|
|
11
15
|
* - Excludes `null`, `undefined`, primitives, arrays, and functions
|
|
12
|
-
* - Returns `true` for plain objects `{}`, object literals, and objects created
|
|
16
|
+
* - Returns `true` for plain objects `{}`, object literals, and objects created
|
|
17
|
+
* with `Object.create()`
|
|
13
18
|
* - Returns `false` for arrays, even though they are technically objects
|
|
14
19
|
*
|
|
15
|
-
* **Implementation:** Uses `isNonNullObject()` to check for objects, then
|
|
16
|
-
*
|
|
17
|
-
* @param u - The value to check
|
|
18
|
-
* @returns `true` if `u` is a non-null object and not an array, `false` otherwise.
|
|
19
|
-
* When `true`, TypeScript narrows the type to `UnknownRecord`.
|
|
20
|
-
*
|
|
21
|
-
* @example
|
|
22
|
-
* Basic usage with different value types:
|
|
23
|
-
* ```typescript
|
|
24
|
-
* isRecord({}); // true (empty object)
|
|
25
|
-
* isRecord({ name: 'John' }); // true (object literal)
|
|
26
|
-
* isRecord(Object.create(null)); // true (object created with Object.create)
|
|
27
|
-
* isRecord(new Object()); // true (object constructor)
|
|
28
|
-
*
|
|
29
|
-
* isRecord([]); // false (array)
|
|
30
|
-
* isRecord([1, 2, 3]); // false (array with elements)
|
|
31
|
-
* isRecord(null); // false (null)
|
|
32
|
-
* isRecord(undefined); // false (undefined)
|
|
33
|
-
* isRecord("string"); // false (primitive)
|
|
34
|
-
* isRecord(42); // false (primitive)
|
|
35
|
-
* isRecord(() => {}); // false (function)
|
|
36
|
-
* isRecord(new Date()); // false (Date object - not a plain record)
|
|
37
|
-
* isRecord(/regex/); // false (RegExp object)
|
|
38
|
-
* ```
|
|
39
|
-
*
|
|
40
|
-
* @example
|
|
41
|
-
* Type guard usage for safe property access:
|
|
42
|
-
* ```typescript
|
|
43
|
-
* const apiResponse: unknown = await fetchUserData();
|
|
44
|
-
*
|
|
45
|
-
* if (isRecord(apiResponse)) {
|
|
46
|
-
* // apiResponse is now typed as UnknownRecord
|
|
47
|
-
* console.log('Response keys:', Object.keys(apiResponse));
|
|
48
|
-
*
|
|
49
|
-
* // Safe to access properties (though values are still unknown)
|
|
50
|
-
* const userId = apiResponse.id; // Type: unknown
|
|
51
|
-
* const userName = apiResponse.name; // Type: unknown
|
|
52
|
-
*
|
|
53
|
-
* // You can combine with other type guards for further narrowing
|
|
54
|
-
* if (hasKey(apiResponse, 'id') && isString(apiResponse.id)) {
|
|
55
|
-
* console.log('User ID:', apiResponse.id); // Now safely typed as string
|
|
56
|
-
* }
|
|
57
|
-
* } else {
|
|
58
|
-
* console.log('API response is not a valid object');
|
|
59
|
-
* }
|
|
60
|
-
* ```
|
|
61
|
-
*
|
|
62
|
-
* @example
|
|
63
|
-
* Filtering mixed arrays to find plain objects:
|
|
64
|
-
* ```typescript
|
|
65
|
-
* const mixedData: unknown[] = [
|
|
66
|
-
* { type: 'user', name: 'Alice' },
|
|
67
|
-
* [1, 2, 3],
|
|
68
|
-
* 'string',
|
|
69
|
-
* { type: 'admin', permissions: ['read', 'write'] },
|
|
70
|
-
* new Date(),
|
|
71
|
-
* null,
|
|
72
|
-
* { id: 123 }
|
|
73
|
-
* ];
|
|
74
|
-
*
|
|
75
|
-
* const records = mixedData.filter(isRecord);
|
|
76
|
-
* // records contains only the plain objects:
|
|
77
|
-
* // [{ type: 'user', name: 'Alice' }, { type: 'admin', permissions: [...] }, { id: 123 }]
|
|
78
|
-
*
|
|
79
|
-
* records.forEach(record => {
|
|
80
|
-
* // Each record is guaranteed to be UnknownRecord
|
|
81
|
-
* const keys = Object.keys(record);
|
|
82
|
-
* console.log('Object keys:', keys);
|
|
83
|
-
* });
|
|
84
|
-
* ```
|
|
20
|
+
* **Implementation:** Uses `isNonNullObject()` to check for objects, then
|
|
21
|
+
* `Array.isArray()` to exclude arrays.
|
|
85
22
|
*
|
|
86
23
|
* @example
|
|
87
|
-
* Progressive validation of nested structures:
|
|
88
|
-
* ```typescript
|
|
89
|
-
* interface User {
|
|
90
|
-
* id: string;
|
|
91
|
-
* profile: {
|
|
92
|
-
* name: string;
|
|
93
|
-
* email: string;
|
|
94
|
-
* };
|
|
95
|
-
* }
|
|
96
|
-
*
|
|
97
|
-
* function validateUser(data: unknown): User | null {
|
|
98
|
-
* if (!isRecord(data)) {
|
|
99
|
-
* return null;
|
|
100
|
-
* }
|
|
101
|
-
*
|
|
102
|
-
* // data is now UnknownRecord
|
|
103
|
-
* if (!hasKey(data, 'id') || !isString(data.id)) {
|
|
104
|
-
* return null;
|
|
105
|
-
* }
|
|
106
24
|
*
|
|
107
|
-
*
|
|
108
|
-
*
|
|
109
|
-
* }
|
|
25
|
+
* ```ts
|
|
26
|
+
* const entries: unknown[] = [{ id: 1 }, ['tuple']];
|
|
110
27
|
*
|
|
111
|
-
*
|
|
112
|
-
* if (!hasKey(profile, 'name') || !isString(profile.name) ||
|
|
113
|
-
* !hasKey(profile, 'email') || !isString(profile.email)) {
|
|
114
|
-
* return null;
|
|
115
|
-
* }
|
|
28
|
+
* const records = entries.filter(isRecord);
|
|
116
29
|
*
|
|
117
|
-
*
|
|
118
|
-
* id: data.id,
|
|
119
|
-
* profile: {
|
|
120
|
-
* name: profile.name,
|
|
121
|
-
* email: profile.email
|
|
122
|
-
* }
|
|
123
|
-
* };
|
|
124
|
-
* }
|
|
125
|
-
* ```
|
|
126
|
-
*
|
|
127
|
-
* @example
|
|
128
|
-
* Object transformation and mapping:
|
|
129
|
-
* ```typescript
|
|
130
|
-
* function transformRecords(data: unknown[]): Record<string, unknown>[] {
|
|
131
|
-
* return data
|
|
132
|
-
* .filter(isRecord) // Keep only plain objects
|
|
133
|
-
* .map(record => {
|
|
134
|
-
* // Transform each record
|
|
135
|
-
* const transformed: Record<string, unknown> = {};
|
|
136
|
-
*
|
|
137
|
-
* for (const [key, value] of Object.entries(record)) {
|
|
138
|
-
* // Apply some transformation logic
|
|
139
|
-
* transformed[key.toLowerCase()] = value;
|
|
140
|
-
* }
|
|
141
|
-
*
|
|
142
|
-
* return transformed;
|
|
143
|
-
* });
|
|
144
|
-
* }
|
|
30
|
+
* assert.deepStrictEqual(records, [{ id: 1 }]);
|
|
145
31
|
* ```
|
|
146
32
|
*
|
|
33
|
+
* @param u - The value to check
|
|
34
|
+
* @returns `true` if `u` is a non-null object and not an array, `false`
|
|
35
|
+
* otherwise. When `true`, TypeScript narrows the type to `UnknownRecord`.
|
|
147
36
|
* @see {@link isNonNullObject} - For checking any object type (includes arrays)
|
|
148
37
|
* @see {@link hasKey} - For checking if a record has specific keys
|
|
149
38
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"is-record.d.mts","sourceRoot":"","sources":["../../src/guard/is-record.mts"],"names":[],"mappings":"AAEA
|
|
1
|
+
{"version":3,"file":"is-record.d.mts","sourceRoot":"","sources":["../../src/guard/is-record.mts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AACH,eAAO,MAAM,QAAQ,GAAI,GAAG,OAAO,KAAG,CAAC,IAAI,aACF,CAAC"}
|
package/dist/guard/is-record.mjs
CHANGED
|
@@ -1,151 +1,40 @@
|
|
|
1
1
|
import { isNonNullObject } from './is-non-null-object.mjs';
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
|
-
* Type guard that checks if a value is a plain object (record) - a non-null
|
|
4
|
+
* Type guard that checks if a value is a plain object (record) - a non-null
|
|
5
|
+
* object that is not an array.
|
|
5
6
|
*
|
|
6
|
-
* This function is useful for identifying "plain" JavaScript objects (also
|
|
7
|
-
* dictionaries) - objects that are typically used as
|
|
8
|
-
*
|
|
9
|
-
*
|
|
7
|
+
* This function is useful for identifying "plain" JavaScript objects (also
|
|
8
|
+
* called records or dictionaries) - objects that are typically used as
|
|
9
|
+
* key-value collections. It excludes arrays, functions, and special object
|
|
10
|
+
* types like Date, RegExp, etc., focusing on objects that can be safely treated
|
|
11
|
+
* as property collections.
|
|
10
12
|
*
|
|
11
13
|
* **Type Narrowing Behavior:**
|
|
12
|
-
*
|
|
14
|
+
*
|
|
15
|
+
* - Narrows `unknown` to `UnknownRecord` (equivalent to `Record<PropertyKey,
|
|
16
|
+
* unknown>`)
|
|
13
17
|
* - Excludes `null`, `undefined`, primitives, arrays, and functions
|
|
14
|
-
* - Returns `true` for plain objects `{}`, object literals, and objects created
|
|
18
|
+
* - Returns `true` for plain objects `{}`, object literals, and objects created
|
|
19
|
+
* with `Object.create()`
|
|
15
20
|
* - Returns `false` for arrays, even though they are technically objects
|
|
16
21
|
*
|
|
17
|
-
* **Implementation:** Uses `isNonNullObject()` to check for objects, then
|
|
18
|
-
*
|
|
19
|
-
* @param u - The value to check
|
|
20
|
-
* @returns `true` if `u` is a non-null object and not an array, `false` otherwise.
|
|
21
|
-
* When `true`, TypeScript narrows the type to `UnknownRecord`.
|
|
22
|
-
*
|
|
23
|
-
* @example
|
|
24
|
-
* Basic usage with different value types:
|
|
25
|
-
* ```typescript
|
|
26
|
-
* isRecord({}); // true (empty object)
|
|
27
|
-
* isRecord({ name: 'John' }); // true (object literal)
|
|
28
|
-
* isRecord(Object.create(null)); // true (object created with Object.create)
|
|
29
|
-
* isRecord(new Object()); // true (object constructor)
|
|
30
|
-
*
|
|
31
|
-
* isRecord([]); // false (array)
|
|
32
|
-
* isRecord([1, 2, 3]); // false (array with elements)
|
|
33
|
-
* isRecord(null); // false (null)
|
|
34
|
-
* isRecord(undefined); // false (undefined)
|
|
35
|
-
* isRecord("string"); // false (primitive)
|
|
36
|
-
* isRecord(42); // false (primitive)
|
|
37
|
-
* isRecord(() => {}); // false (function)
|
|
38
|
-
* isRecord(new Date()); // false (Date object - not a plain record)
|
|
39
|
-
* isRecord(/regex/); // false (RegExp object)
|
|
40
|
-
* ```
|
|
41
|
-
*
|
|
42
|
-
* @example
|
|
43
|
-
* Type guard usage for safe property access:
|
|
44
|
-
* ```typescript
|
|
45
|
-
* const apiResponse: unknown = await fetchUserData();
|
|
46
|
-
*
|
|
47
|
-
* if (isRecord(apiResponse)) {
|
|
48
|
-
* // apiResponse is now typed as UnknownRecord
|
|
49
|
-
* console.log('Response keys:', Object.keys(apiResponse));
|
|
50
|
-
*
|
|
51
|
-
* // Safe to access properties (though values are still unknown)
|
|
52
|
-
* const userId = apiResponse.id; // Type: unknown
|
|
53
|
-
* const userName = apiResponse.name; // Type: unknown
|
|
54
|
-
*
|
|
55
|
-
* // You can combine with other type guards for further narrowing
|
|
56
|
-
* if (hasKey(apiResponse, 'id') && isString(apiResponse.id)) {
|
|
57
|
-
* console.log('User ID:', apiResponse.id); // Now safely typed as string
|
|
58
|
-
* }
|
|
59
|
-
* } else {
|
|
60
|
-
* console.log('API response is not a valid object');
|
|
61
|
-
* }
|
|
62
|
-
* ```
|
|
63
|
-
*
|
|
64
|
-
* @example
|
|
65
|
-
* Filtering mixed arrays to find plain objects:
|
|
66
|
-
* ```typescript
|
|
67
|
-
* const mixedData: unknown[] = [
|
|
68
|
-
* { type: 'user', name: 'Alice' },
|
|
69
|
-
* [1, 2, 3],
|
|
70
|
-
* 'string',
|
|
71
|
-
* { type: 'admin', permissions: ['read', 'write'] },
|
|
72
|
-
* new Date(),
|
|
73
|
-
* null,
|
|
74
|
-
* { id: 123 }
|
|
75
|
-
* ];
|
|
76
|
-
*
|
|
77
|
-
* const records = mixedData.filter(isRecord);
|
|
78
|
-
* // records contains only the plain objects:
|
|
79
|
-
* // [{ type: 'user', name: 'Alice' }, { type: 'admin', permissions: [...] }, { id: 123 }]
|
|
80
|
-
*
|
|
81
|
-
* records.forEach(record => {
|
|
82
|
-
* // Each record is guaranteed to be UnknownRecord
|
|
83
|
-
* const keys = Object.keys(record);
|
|
84
|
-
* console.log('Object keys:', keys);
|
|
85
|
-
* });
|
|
86
|
-
* ```
|
|
22
|
+
* **Implementation:** Uses `isNonNullObject()` to check for objects, then
|
|
23
|
+
* `Array.isArray()` to exclude arrays.
|
|
87
24
|
*
|
|
88
25
|
* @example
|
|
89
|
-
* Progressive validation of nested structures:
|
|
90
|
-
* ```typescript
|
|
91
|
-
* interface User {
|
|
92
|
-
* id: string;
|
|
93
|
-
* profile: {
|
|
94
|
-
* name: string;
|
|
95
|
-
* email: string;
|
|
96
|
-
* };
|
|
97
|
-
* }
|
|
98
|
-
*
|
|
99
|
-
* function validateUser(data: unknown): User | null {
|
|
100
|
-
* if (!isRecord(data)) {
|
|
101
|
-
* return null;
|
|
102
|
-
* }
|
|
103
|
-
*
|
|
104
|
-
* // data is now UnknownRecord
|
|
105
|
-
* if (!hasKey(data, 'id') || !isString(data.id)) {
|
|
106
|
-
* return null;
|
|
107
|
-
* }
|
|
108
26
|
*
|
|
109
|
-
*
|
|
110
|
-
*
|
|
111
|
-
* }
|
|
27
|
+
* ```ts
|
|
28
|
+
* const entries: unknown[] = [{ id: 1 }, ['tuple']];
|
|
112
29
|
*
|
|
113
|
-
*
|
|
114
|
-
* if (!hasKey(profile, 'name') || !isString(profile.name) ||
|
|
115
|
-
* !hasKey(profile, 'email') || !isString(profile.email)) {
|
|
116
|
-
* return null;
|
|
117
|
-
* }
|
|
30
|
+
* const records = entries.filter(isRecord);
|
|
118
31
|
*
|
|
119
|
-
*
|
|
120
|
-
* id: data.id,
|
|
121
|
-
* profile: {
|
|
122
|
-
* name: profile.name,
|
|
123
|
-
* email: profile.email
|
|
124
|
-
* }
|
|
125
|
-
* };
|
|
126
|
-
* }
|
|
127
|
-
* ```
|
|
128
|
-
*
|
|
129
|
-
* @example
|
|
130
|
-
* Object transformation and mapping:
|
|
131
|
-
* ```typescript
|
|
132
|
-
* function transformRecords(data: unknown[]): Record<string, unknown>[] {
|
|
133
|
-
* return data
|
|
134
|
-
* .filter(isRecord) // Keep only plain objects
|
|
135
|
-
* .map(record => {
|
|
136
|
-
* // Transform each record
|
|
137
|
-
* const transformed: Record<string, unknown> = {};
|
|
138
|
-
*
|
|
139
|
-
* for (const [key, value] of Object.entries(record)) {
|
|
140
|
-
* // Apply some transformation logic
|
|
141
|
-
* transformed[key.toLowerCase()] = value;
|
|
142
|
-
* }
|
|
143
|
-
*
|
|
144
|
-
* return transformed;
|
|
145
|
-
* });
|
|
146
|
-
* }
|
|
32
|
+
* assert.deepStrictEqual(records, [{ id: 1 }]);
|
|
147
33
|
* ```
|
|
148
34
|
*
|
|
35
|
+
* @param u - The value to check
|
|
36
|
+
* @returns `true` if `u` is a non-null object and not an array, `false`
|
|
37
|
+
* otherwise. When `true`, TypeScript narrows the type to `UnknownRecord`.
|
|
149
38
|
* @see {@link isNonNullObject} - For checking any object type (includes arrays)
|
|
150
39
|
* @see {@link hasKey} - For checking if a record has specific keys
|
|
151
40
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"is-record.mjs","sources":["../../src/guard/is-record.mts"],"sourcesContent":[null],"names":[],"mappings":";;AAEA
|
|
1
|
+
{"version":3,"file":"is-record.mjs","sources":["../../src/guard/is-record.mts"],"sourcesContent":[null],"names":[],"mappings":";;AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAqCG;MACU,QAAQ,GAAG,CAAC,CAAU,KACjC,eAAe,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;;;;"}
|