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
package/dist/guard/has-key.mjs
CHANGED
|
@@ -1,91 +1,40 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Type guard function that checks if an object has a specific key as its own
|
|
2
|
+
* Type guard function that checks if an object has a specific key as its own
|
|
3
|
+
* property.
|
|
3
4
|
*
|
|
4
|
-
* This function uses `Object.hasOwn()` to check if the given object has the
|
|
5
|
-
* as its own property (not inherited). It acts as a type guard
|
|
6
|
-
* object to guarantee the key exists, enabling
|
|
5
|
+
* This function uses `Object.hasOwn()` to check if the given object has the
|
|
6
|
+
* specified key as its own property (not inherited). It acts as a type guard
|
|
7
|
+
* that narrows the type of the object to guarantee the key exists, enabling
|
|
8
|
+
* type-safe property access.
|
|
7
9
|
*
|
|
8
10
|
* **Type Narrowing Behavior:**
|
|
9
|
-
*
|
|
11
|
+
*
|
|
12
|
+
* - When the guard returns `true`, TypeScript narrows the object type to include
|
|
13
|
+
* the checked key
|
|
10
14
|
* - For union types, only union members that contain the key are preserved
|
|
11
15
|
* - The key's value type is preserved from the original object type when possible
|
|
12
16
|
*
|
|
13
|
-
* @template R - The type of the input object, must extend UnknownRecord
|
|
14
|
-
* @template K - The type of the key to check for, must extend PropertyKey (string | number | symbol)
|
|
15
|
-
* @param obj - The object to check for the presence of the key
|
|
16
|
-
* @param key - The key to check for in the object
|
|
17
|
-
* @returns `true` if the object has the specified key as its own property, `false` otherwise.
|
|
18
|
-
* When `true`, TypeScript narrows the object type to guarantee the key exists.
|
|
19
|
-
*
|
|
20
17
|
* @example
|
|
21
|
-
* Basic usage with known object structure:
|
|
22
|
-
* ```typescript
|
|
23
|
-
* const obj = { a: 1, b: 'hello' };
|
|
24
|
-
*
|
|
25
|
-
* if (hasKey(obj, 'a')) {
|
|
26
|
-
* // obj is narrowed to guarantee 'a' exists
|
|
27
|
-
* console.log(obj.a); // TypeScript knows 'a' exists and is type number
|
|
28
|
-
* // No need for optional chaining or undefined checks
|
|
29
|
-
* }
|
|
30
18
|
*
|
|
31
|
-
*
|
|
32
|
-
*
|
|
33
|
-
* console.log(obj.c); // But TypeScript would know 'c' exists if it did
|
|
34
|
-
* }
|
|
35
|
-
* ```
|
|
36
|
-
*
|
|
37
|
-
* @example
|
|
38
|
-
* Working with dynamic objects and unknown keys:
|
|
39
|
-
* ```typescript
|
|
40
|
-
* const dynamicObj: Record<string, unknown> = { x: 10, y: 20 };
|
|
41
|
-
* const userInput: string = getUserInput();
|
|
19
|
+
* ```ts
|
|
20
|
+
* const maybeUser: { id?: number; name?: string } = { id: 42 };
|
|
42
21
|
*
|
|
43
|
-
* if (hasKey(
|
|
44
|
-
* //
|
|
45
|
-
*
|
|
46
|
-
* console.log(`Value for ${userInput}:`, value);
|
|
22
|
+
* if (hasKey(maybeUser, 'id')) {
|
|
23
|
+
* // `maybeUser` is now known to have an `id` property.
|
|
24
|
+
* assert(maybeUser.id === 42);
|
|
47
25
|
* } else {
|
|
48
|
-
*
|
|
49
|
-
* }
|
|
50
|
-
* ```
|
|
51
|
-
*
|
|
52
|
-
* @example
|
|
53
|
-
* Type narrowing with union types:
|
|
54
|
-
* ```typescript
|
|
55
|
-
* type UserPreferences =
|
|
56
|
-
* | { theme: 'dark'; notifications: boolean }
|
|
57
|
-
* | { theme: 'light' }
|
|
58
|
-
* | { autoSave: true; interval: number };
|
|
59
|
-
*
|
|
60
|
-
* const preferences: UserPreferences = getPreferences();
|
|
61
|
-
*
|
|
62
|
-
* if (hasKey(preferences, 'theme')) {
|
|
63
|
-
* // preferences is narrowed to the first two union members
|
|
64
|
-
* console.log(preferences.theme); // 'dark' | 'light'
|
|
65
|
-
* }
|
|
66
|
-
*
|
|
67
|
-
* if (hasKey(preferences, 'autoSave')) {
|
|
68
|
-
* // preferences is narrowed to the third union member
|
|
69
|
-
* console.log(preferences.interval); // number (we know this exists)
|
|
70
|
-
* }
|
|
71
|
-
* ```
|
|
72
|
-
*
|
|
73
|
-
* @example
|
|
74
|
-
* Basic usage with isRecord for progressive narrowing:
|
|
75
|
-
* ```typescript
|
|
76
|
-
* const data: unknown = parseApiResponse();
|
|
77
|
-
*
|
|
78
|
-
* if (isRecord(data) && hasKey(data, 'user')) {
|
|
79
|
-
* // data is now Record<string, unknown> with guaranteed 'user' key
|
|
80
|
-
* const user = data.user;
|
|
81
|
-
*
|
|
82
|
-
* if (isRecord(user) && hasKey(user, 'name')) {
|
|
83
|
-
* // Safely access nested properties
|
|
84
|
-
* console.log('User name:', user.name);
|
|
85
|
-
* }
|
|
26
|
+
* assert.fail('Expected the object to contain the id key.');
|
|
86
27
|
* }
|
|
87
28
|
* ```
|
|
88
29
|
*
|
|
30
|
+
* @template R - The type of the input object, must extend UnknownRecord
|
|
31
|
+
* @template K - The type of the key to check for, must extend PropertyKey
|
|
32
|
+
* (string | number | symbol)
|
|
33
|
+
* @param obj - The object to check for the presence of the key
|
|
34
|
+
* @param key - The key to check for in the object
|
|
35
|
+
* @returns `true` if the object has the specified key as its own property,
|
|
36
|
+
* `false` otherwise. When `true`, TypeScript narrows the object type to
|
|
37
|
+
* guarantee the key exists.
|
|
89
38
|
* @see {@link keyIsIn} - Similar function that narrows the key type instead of the object type
|
|
90
39
|
*/
|
|
91
40
|
const hasKey = (obj, key) => Object.hasOwn(obj, key);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"has-key.mjs","sources":["../../src/guard/has-key.mts"],"sourcesContent":[null],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"has-key.mjs","sources":["../../src/guard/has-key.mts"],"sourcesContent":[null],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAsCG;AACI,MAAM,MAAM,GAAG,CAIpB,GAAM,EACN,GAAM,KAC4B,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG;;;;"}
|
|
@@ -1,106 +1,39 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Type guard that checks if a value is a non-empty string.
|
|
3
3
|
*
|
|
4
|
-
* This function performs both a type check (ensuring the value is a string) and
|
|
5
|
-
* (ensuring the string is not empty). It acts as a type guard
|
|
6
|
-
* exclude `null`, `undefined`, and empty
|
|
4
|
+
* This function performs both a type check (ensuring the value is a string) and
|
|
5
|
+
* a length check (ensuring the string is not empty). It acts as a type guard
|
|
6
|
+
* that narrows the input type to exclude `null`, `undefined`, and empty
|
|
7
|
+
* strings.
|
|
7
8
|
*
|
|
8
9
|
* **Type Narrowing Behavior:**
|
|
10
|
+
*
|
|
9
11
|
* - Eliminates `null` and `undefined` from the type
|
|
10
12
|
* - Excludes empty string (`""`) from the type
|
|
11
13
|
* - Preserves literal string types when possible
|
|
12
14
|
* - Whitespace-only strings are considered non-empty
|
|
13
15
|
*
|
|
14
|
-
* @template S - The input type, which can include `string`, `null`, or `undefined`
|
|
15
|
-
* @param s - The value to check
|
|
16
|
-
* @returns `true` if `s` is a string with length > 0, `false` otherwise.
|
|
17
|
-
* When `true`, TypeScript narrows the type to exclude empty strings and nullish values.
|
|
18
|
-
*
|
|
19
|
-
* @example
|
|
20
|
-
* Basic usage with different string types:
|
|
21
|
-
* ```typescript
|
|
22
|
-
* isNonEmptyString("hello"); // true
|
|
23
|
-
* isNonEmptyString(" "); // true (whitespace is considered non-empty)
|
|
24
|
-
* isNonEmptyString("\t\n"); // true (whitespace characters are non-empty)
|
|
25
|
-
* isNonEmptyString(""); // false
|
|
26
|
-
* isNonEmptyString(null); // false
|
|
27
|
-
* isNonEmptyString(undefined); // false
|
|
28
|
-
* ```
|
|
29
|
-
*
|
|
30
|
-
* @example
|
|
31
|
-
* Type guard usage with nullable strings:
|
|
32
|
-
* ```typescript
|
|
33
|
-
* const userInput: string | null | undefined = getUserInput();
|
|
34
|
-
*
|
|
35
|
-
* if (isNonEmptyString(userInput)) {
|
|
36
|
-
* // userInput is now typed as non-empty string
|
|
37
|
-
* console.log(userInput.charAt(0)); // Safe to access string methods
|
|
38
|
-
* console.log(userInput.toUpperCase()); // No need for null checks
|
|
39
|
-
* const length = userInput.length; // Guaranteed to be > 0
|
|
40
|
-
* } else {
|
|
41
|
-
* console.log('No valid input provided');
|
|
42
|
-
* }
|
|
43
|
-
* ```
|
|
44
|
-
*
|
|
45
|
-
* @example
|
|
46
|
-
* Working with literal string types:
|
|
47
|
-
* ```typescript
|
|
48
|
-
* type Status = "active" | "inactive" | "" | null;
|
|
49
|
-
* const status: Status = getStatus();
|
|
50
|
-
*
|
|
51
|
-
* if (isNonEmptyString(status)) {
|
|
52
|
-
* // status is now typed as "active" | "inactive"
|
|
53
|
-
* console.log(`Status is: ${status}`);
|
|
54
|
-
* }
|
|
55
|
-
* ```
|
|
56
|
-
*
|
|
57
16
|
* @example
|
|
58
|
-
* Form validation patterns:
|
|
59
|
-
* ```typescript
|
|
60
|
-
* interface FormData {
|
|
61
|
-
* name?: string;
|
|
62
|
-
* email?: string;
|
|
63
|
-
* phone?: string;
|
|
64
|
-
* }
|
|
65
|
-
*
|
|
66
|
-
* function validateForm(data: FormData): string[] {
|
|
67
|
-
* const errors: string[] = [];
|
|
68
|
-
*
|
|
69
|
-
* if (!isNonEmptyString(data.name)) {
|
|
70
|
-
* errors.push('Name is required');
|
|
71
|
-
* }
|
|
72
|
-
*
|
|
73
|
-
* if (!isNonEmptyString(data.email)) {
|
|
74
|
-
* errors.push('Email is required');
|
|
75
|
-
* } else if (!data.email.includes('@')) {
|
|
76
|
-
* // Safe to access string methods after guard
|
|
77
|
-
* errors.push('Invalid email format');
|
|
78
|
-
* }
|
|
79
17
|
*
|
|
80
|
-
*
|
|
81
|
-
*
|
|
82
|
-
*
|
|
83
|
-
*
|
|
84
|
-
* @example
|
|
85
|
-
* Filtering arrays of potentially empty strings:
|
|
86
|
-
* ```typescript
|
|
87
|
-
* const responses: (string | null | undefined)[] = [
|
|
88
|
-
* "hello",
|
|
89
|
-
* "",
|
|
90
|
-
* "world",
|
|
91
|
-
* null,
|
|
18
|
+
* ```ts
|
|
19
|
+
* const words: readonly (string | undefined)[] = [
|
|
20
|
+
* 'Ada',
|
|
92
21
|
* undefined,
|
|
93
|
-
*
|
|
94
|
-
*
|
|
22
|
+
* '',
|
|
23
|
+
* 'Lovelace',
|
|
24
|
+
* ] as const;
|
|
95
25
|
*
|
|
96
|
-
* const
|
|
97
|
-
* // validResponses is now string[] containing ["hello", "world", " "]
|
|
26
|
+
* const nonEmpty = words.filter(isNonEmptyString);
|
|
98
27
|
*
|
|
99
|
-
*
|
|
100
|
-
* // Each response is guaranteed to be a non-empty string
|
|
101
|
-
* console.log(response.trim().toUpperCase());
|
|
102
|
-
* });
|
|
28
|
+
* assert.deepStrictEqual(nonEmpty, ['Ada', 'Lovelace']);
|
|
103
29
|
* ```
|
|
30
|
+
*
|
|
31
|
+
* @template S - The input type, which can include `string`, `null`, or
|
|
32
|
+
* `undefined`
|
|
33
|
+
* @param s - The value to check
|
|
34
|
+
* @returns `true` if `s` is a string with length > 0, `false` otherwise. When
|
|
35
|
+
* `true`, TypeScript narrows the type to exclude empty strings and nullish
|
|
36
|
+
* values.
|
|
104
37
|
*/
|
|
105
38
|
export declare const isNonEmptyString: <S extends string | null | undefined>(s: S) => s is RelaxedExclude<NonNullable<S>, "">;
|
|
106
39
|
//# sourceMappingURL=is-non-empty-string.d.mts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"is-non-empty-string.d.mts","sourceRoot":"","sources":["../../src/guard/is-non-empty-string.mts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"is-non-empty-string.d.mts","sourceRoot":"","sources":["../../src/guard/is-non-empty-string.mts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH,eAAO,MAAM,gBAAgB,GAAI,CAAC,SAAS,MAAM,GAAG,IAAI,GAAG,SAAS,EAClE,GAAG,CAAC,KACH,CAAC,IAAI,cAAc,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,EAAE,CACF,CAAC"}
|
|
@@ -1,106 +1,39 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Type guard that checks if a value is a non-empty string.
|
|
3
3
|
*
|
|
4
|
-
* This function performs both a type check (ensuring the value is a string) and
|
|
5
|
-
* (ensuring the string is not empty). It acts as a type guard
|
|
6
|
-
* exclude `null`, `undefined`, and empty
|
|
4
|
+
* This function performs both a type check (ensuring the value is a string) and
|
|
5
|
+
* a length check (ensuring the string is not empty). It acts as a type guard
|
|
6
|
+
* that narrows the input type to exclude `null`, `undefined`, and empty
|
|
7
|
+
* strings.
|
|
7
8
|
*
|
|
8
9
|
* **Type Narrowing Behavior:**
|
|
10
|
+
*
|
|
9
11
|
* - Eliminates `null` and `undefined` from the type
|
|
10
12
|
* - Excludes empty string (`""`) from the type
|
|
11
13
|
* - Preserves literal string types when possible
|
|
12
14
|
* - Whitespace-only strings are considered non-empty
|
|
13
15
|
*
|
|
14
|
-
* @template S - The input type, which can include `string`, `null`, or `undefined`
|
|
15
|
-
* @param s - The value to check
|
|
16
|
-
* @returns `true` if `s` is a string with length > 0, `false` otherwise.
|
|
17
|
-
* When `true`, TypeScript narrows the type to exclude empty strings and nullish values.
|
|
18
|
-
*
|
|
19
|
-
* @example
|
|
20
|
-
* Basic usage with different string types:
|
|
21
|
-
* ```typescript
|
|
22
|
-
* isNonEmptyString("hello"); // true
|
|
23
|
-
* isNonEmptyString(" "); // true (whitespace is considered non-empty)
|
|
24
|
-
* isNonEmptyString("\t\n"); // true (whitespace characters are non-empty)
|
|
25
|
-
* isNonEmptyString(""); // false
|
|
26
|
-
* isNonEmptyString(null); // false
|
|
27
|
-
* isNonEmptyString(undefined); // false
|
|
28
|
-
* ```
|
|
29
|
-
*
|
|
30
|
-
* @example
|
|
31
|
-
* Type guard usage with nullable strings:
|
|
32
|
-
* ```typescript
|
|
33
|
-
* const userInput: string | null | undefined = getUserInput();
|
|
34
|
-
*
|
|
35
|
-
* if (isNonEmptyString(userInput)) {
|
|
36
|
-
* // userInput is now typed as non-empty string
|
|
37
|
-
* console.log(userInput.charAt(0)); // Safe to access string methods
|
|
38
|
-
* console.log(userInput.toUpperCase()); // No need for null checks
|
|
39
|
-
* const length = userInput.length; // Guaranteed to be > 0
|
|
40
|
-
* } else {
|
|
41
|
-
* console.log('No valid input provided');
|
|
42
|
-
* }
|
|
43
|
-
* ```
|
|
44
|
-
*
|
|
45
|
-
* @example
|
|
46
|
-
* Working with literal string types:
|
|
47
|
-
* ```typescript
|
|
48
|
-
* type Status = "active" | "inactive" | "" | null;
|
|
49
|
-
* const status: Status = getStatus();
|
|
50
|
-
*
|
|
51
|
-
* if (isNonEmptyString(status)) {
|
|
52
|
-
* // status is now typed as "active" | "inactive"
|
|
53
|
-
* console.log(`Status is: ${status}`);
|
|
54
|
-
* }
|
|
55
|
-
* ```
|
|
56
|
-
*
|
|
57
16
|
* @example
|
|
58
|
-
* Form validation patterns:
|
|
59
|
-
* ```typescript
|
|
60
|
-
* interface FormData {
|
|
61
|
-
* name?: string;
|
|
62
|
-
* email?: string;
|
|
63
|
-
* phone?: string;
|
|
64
|
-
* }
|
|
65
|
-
*
|
|
66
|
-
* function validateForm(data: FormData): string[] {
|
|
67
|
-
* const errors: string[] = [];
|
|
68
|
-
*
|
|
69
|
-
* if (!isNonEmptyString(data.name)) {
|
|
70
|
-
* errors.push('Name is required');
|
|
71
|
-
* }
|
|
72
|
-
*
|
|
73
|
-
* if (!isNonEmptyString(data.email)) {
|
|
74
|
-
* errors.push('Email is required');
|
|
75
|
-
* } else if (!data.email.includes('@')) {
|
|
76
|
-
* // Safe to access string methods after guard
|
|
77
|
-
* errors.push('Invalid email format');
|
|
78
|
-
* }
|
|
79
17
|
*
|
|
80
|
-
*
|
|
81
|
-
*
|
|
82
|
-
*
|
|
83
|
-
*
|
|
84
|
-
* @example
|
|
85
|
-
* Filtering arrays of potentially empty strings:
|
|
86
|
-
* ```typescript
|
|
87
|
-
* const responses: (string | null | undefined)[] = [
|
|
88
|
-
* "hello",
|
|
89
|
-
* "",
|
|
90
|
-
* "world",
|
|
91
|
-
* null,
|
|
18
|
+
* ```ts
|
|
19
|
+
* const words: readonly (string | undefined)[] = [
|
|
20
|
+
* 'Ada',
|
|
92
21
|
* undefined,
|
|
93
|
-
*
|
|
94
|
-
*
|
|
22
|
+
* '',
|
|
23
|
+
* 'Lovelace',
|
|
24
|
+
* ] as const;
|
|
95
25
|
*
|
|
96
|
-
* const
|
|
97
|
-
* // validResponses is now string[] containing ["hello", "world", " "]
|
|
26
|
+
* const nonEmpty = words.filter(isNonEmptyString);
|
|
98
27
|
*
|
|
99
|
-
*
|
|
100
|
-
* // Each response is guaranteed to be a non-empty string
|
|
101
|
-
* console.log(response.trim().toUpperCase());
|
|
102
|
-
* });
|
|
28
|
+
* assert.deepStrictEqual(nonEmpty, ['Ada', 'Lovelace']);
|
|
103
29
|
* ```
|
|
30
|
+
*
|
|
31
|
+
* @template S - The input type, which can include `string`, `null`, or
|
|
32
|
+
* `undefined`
|
|
33
|
+
* @param s - The value to check
|
|
34
|
+
* @returns `true` if `s` is a string with length > 0, `false` otherwise. When
|
|
35
|
+
* `true`, TypeScript narrows the type to exclude empty strings and nullish
|
|
36
|
+
* values.
|
|
104
37
|
*/
|
|
105
38
|
const isNonEmptyString = (s) => typeof s === 'string' && s.length > 0;
|
|
106
39
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"is-non-empty-string.mjs","sources":["../../src/guard/is-non-empty-string.mts"],"sourcesContent":[null],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"is-non-empty-string.mjs","sources":["../../src/guard/is-non-empty-string.mts"],"sourcesContent":[null],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAoCG;AACI,MAAM,gBAAgB,GAAG,CAC9B,CAAI,KAEJ,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,MAAM,GAAG;;;;"}
|
|
@@ -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;;;;"}
|