ts-data-forge 9.0.0 → 10.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 +1 -1
- package/dist/array/impl/array-utils-creation.d.mts +4 -4
- package/dist/array/impl/array-utils-creation.d.mts.map +1 -1
- package/dist/array/impl/array-utils-creation.mjs +17 -112
- package/dist/array/impl/array-utils-creation.mjs.map +1 -1
- package/dist/array/impl/array-utils-element-access.d.mts.map +1 -1
- package/dist/array/impl/array-utils-element-access.mjs +22 -61
- package/dist/array/impl/array-utils-element-access.mjs.map +1 -1
- package/dist/array/impl/array-utils-iterators.d.mts.map +1 -1
- package/dist/array/impl/array-utils-iterators.mjs +9 -63
- package/dist/array/impl/array-utils-iterators.mjs.map +1 -1
- package/dist/array/impl/array-utils-modification.d.mts +7 -7
- package/dist/array/impl/array-utils-modification.d.mts.map +1 -1
- package/dist/array/impl/array-utils-modification.mjs +78 -78
- package/dist/array/impl/array-utils-modification.mjs.map +1 -1
- package/dist/array/impl/array-utils-reducing-value.mjs +95 -89
- package/dist/array/impl/array-utils-reducing-value.mjs.map +1 -1
- package/dist/array/impl/array-utils-search.mjs +100 -92
- package/dist/array/impl/array-utils-search.mjs.map +1 -1
- package/dist/array/impl/array-utils-set-op.d.mts.map +1 -1
- package/dist/array/impl/array-utils-set-op.mjs +31 -141
- package/dist/array/impl/array-utils-set-op.mjs.map +1 -1
- package/dist/array/impl/array-utils-size.d.mts.map +1 -1
- package/dist/array/impl/array-utils-size.mjs +4 -8
- package/dist/array/impl/array-utils-size.mjs.map +1 -1
- package/dist/array/impl/array-utils-slice-clamped.mjs +11 -12
- package/dist/array/impl/array-utils-slice-clamped.mjs.map +1 -1
- package/dist/array/impl/array-utils-slicing.d.mts.map +1 -1
- package/dist/array/impl/array-utils-slicing.mjs +44 -96
- package/dist/array/impl/array-utils-slicing.mjs.map +1 -1
- package/dist/array/impl/array-utils-transformation.d.mts +4 -4
- package/dist/array/impl/array-utils-transformation.d.mts.map +1 -1
- package/dist/array/impl/array-utils-transformation.mjs +150 -292
- package/dist/array/impl/array-utils-transformation.mjs.map +1 -1
- package/dist/array/impl/array-utils-validation.d.mts +17 -17
- package/dist/array/impl/array-utils-validation.d.mts.map +1 -1
- package/dist/array/impl/array-utils-validation.mjs +23 -174
- package/dist/array/impl/array-utils-validation.mjs.map +1 -1
- package/dist/array/impl/index.mjs +1 -1
- package/dist/collections/imap-mapped.d.mts.map +1 -1
- package/dist/collections/imap-mapped.mjs +243 -330
- package/dist/collections/imap-mapped.mjs.map +1 -1
- package/dist/collections/imap.d.mts.map +1 -1
- package/dist/collections/imap.mjs +190 -275
- package/dist/collections/imap.mjs.map +1 -1
- package/dist/collections/iset-mapped.d.mts +1 -1
- package/dist/collections/iset-mapped.d.mts.map +1 -1
- package/dist/collections/iset-mapped.mjs +222 -444
- package/dist/collections/iset-mapped.mjs.map +1 -1
- package/dist/collections/iset.d.mts +1 -1
- package/dist/collections/iset.d.mts.map +1 -1
- package/dist/collections/iset.mjs +158 -324
- package/dist/collections/iset.mjs.map +1 -1
- package/dist/collections/queue.d.mts.map +1 -1
- package/dist/collections/queue.mjs +106 -178
- package/dist/collections/queue.mjs.map +1 -1
- package/dist/collections/stack.d.mts.map +1 -1
- package/dist/collections/stack.mjs +95 -165
- package/dist/collections/stack.mjs.map +1 -1
- package/dist/entry-point.mjs +2 -0
- package/dist/entry-point.mjs.map +1 -1
- package/dist/expect-type.d.mts +1 -1
- package/dist/expect-type.d.mts.map +1 -1
- package/dist/expect-type.mjs +1 -69
- package/dist/expect-type.mjs.map +1 -1
- package/dist/functional/match.mjs +9 -9
- package/dist/functional/match.mjs.map +1 -1
- package/dist/functional/optional/impl/optional-expect-to-be.mjs +13 -14
- package/dist/functional/optional/impl/optional-expect-to-be.mjs.map +1 -1
- package/dist/functional/optional/impl/optional-filter.mjs +14 -15
- package/dist/functional/optional/impl/optional-filter.mjs.map +1 -1
- package/dist/functional/optional/impl/optional-flat-map.mjs +10 -11
- package/dist/functional/optional/impl/optional-flat-map.mjs.map +1 -1
- package/dist/functional/optional/impl/optional-from-nullable.d.mts.map +1 -1
- package/dist/functional/optional/impl/optional-from-nullable.mjs +1 -25
- package/dist/functional/optional/impl/optional-from-nullable.mjs.map +1 -1
- package/dist/functional/optional/impl/optional-is-none.d.mts.map +1 -1
- package/dist/functional/optional/impl/optional-is-none.mjs +0 -19
- package/dist/functional/optional/impl/optional-is-none.mjs.map +1 -1
- package/dist/functional/optional/impl/optional-is-optional.d.mts.map +1 -1
- package/dist/functional/optional/impl/optional-is-optional.mjs +1 -23
- package/dist/functional/optional/impl/optional-is-optional.mjs.map +1 -1
- package/dist/functional/optional/impl/optional-is-some.d.mts.map +1 -1
- package/dist/functional/optional/impl/optional-is-some.mjs +0 -20
- package/dist/functional/optional/impl/optional-is-some.mjs.map +1 -1
- package/dist/functional/optional/impl/optional-map.mjs +13 -14
- package/dist/functional/optional/impl/optional-map.mjs.map +1 -1
- package/dist/functional/optional/impl/optional-none.mjs +0 -16
- package/dist/functional/optional/impl/optional-none.mjs.map +1 -1
- package/dist/functional/optional/impl/optional-or-else.mjs +10 -11
- package/dist/functional/optional/impl/optional-or-else.mjs.map +1 -1
- package/dist/functional/optional/impl/optional-some.d.mts.map +1 -1
- package/dist/functional/optional/impl/optional-some.mjs +2 -21
- package/dist/functional/optional/impl/optional-some.mjs.map +1 -1
- package/dist/functional/optional/impl/optional-to-nullable.d.mts.map +1 -1
- package/dist/functional/optional/impl/optional-to-nullable.mjs +1 -27
- package/dist/functional/optional/impl/optional-to-nullable.mjs.map +1 -1
- package/dist/functional/optional/impl/optional-unwrap-or.mjs +9 -10
- package/dist/functional/optional/impl/optional-unwrap-or.mjs.map +1 -1
- package/dist/functional/optional/impl/optional-unwrap-throw.d.mts.map +1 -1
- package/dist/functional/optional/impl/optional-unwrap-throw.mjs +4 -32
- package/dist/functional/optional/impl/optional-unwrap-throw.mjs.map +1 -1
- package/dist/functional/optional/impl/optional-unwrap.mjs +4 -4
- package/dist/functional/optional/impl/optional-unwrap.mjs.map +1 -1
- package/dist/functional/optional/impl/optional-zip.d.mts.map +1 -1
- package/dist/functional/optional/impl/optional-zip.mjs +1 -35
- package/dist/functional/optional/impl/optional-zip.mjs.map +1 -1
- package/dist/functional/optional/impl/tag.mjs +2 -3
- package/dist/functional/optional/impl/tag.mjs.map +1 -1
- package/dist/functional/pipe.d.mts.map +1 -1
- package/dist/functional/pipe.mjs +9 -34
- package/dist/functional/pipe.mjs.map +1 -1
- package/dist/functional/result/impl/result-err.d.mts.map +1 -1
- package/dist/functional/result/impl/result-err.mjs +2 -27
- package/dist/functional/result/impl/result-err.mjs.map +1 -1
- package/dist/functional/result/impl/result-expect-to-be.mjs +13 -15
- package/dist/functional/result/impl/result-expect-to-be.mjs.map +1 -1
- package/dist/functional/result/impl/result-flat-map.mjs +16 -16
- package/dist/functional/result/impl/result-flat-map.mjs.map +1 -1
- package/dist/functional/result/impl/result-fold.mjs +16 -16
- package/dist/functional/result/impl/result-fold.mjs.map +1 -1
- package/dist/functional/result/impl/result-from-promise.d.mts.map +1 -1
- package/dist/functional/result/impl/result-from-promise.mjs +4 -31
- package/dist/functional/result/impl/result-from-promise.mjs.map +1 -1
- package/dist/functional/result/impl/result-from-throwable.d.mts.map +1 -1
- package/dist/functional/result/impl/result-from-throwable.mjs +8 -38
- package/dist/functional/result/impl/result-from-throwable.mjs.map +1 -1
- package/dist/functional/result/impl/result-is-err.d.mts.map +1 -1
- package/dist/functional/result/impl/result-is-err.mjs +0 -19
- package/dist/functional/result/impl/result-is-err.mjs.map +1 -1
- package/dist/functional/result/impl/result-is-ok.d.mts.map +1 -1
- package/dist/functional/result/impl/result-is-ok.mjs +0 -19
- package/dist/functional/result/impl/result-is-ok.mjs.map +1 -1
- package/dist/functional/result/impl/result-is-result.d.mts.map +1 -1
- package/dist/functional/result/impl/result-is-result.mjs +1 -23
- package/dist/functional/result/impl/result-is-result.mjs.map +1 -1
- package/dist/functional/result/impl/result-map-err.mjs +16 -16
- package/dist/functional/result/impl/result-map-err.mjs.map +1 -1
- package/dist/functional/result/impl/result-map.mjs +16 -16
- package/dist/functional/result/impl/result-map.mjs.map +1 -1
- package/dist/functional/result/impl/result-ok.d.mts.map +1 -1
- package/dist/functional/result/impl/result-ok.mjs +2 -27
- package/dist/functional/result/impl/result-ok.mjs.map +1 -1
- package/dist/functional/result/impl/result-or-else.mjs +10 -12
- package/dist/functional/result/impl/result-or-else.mjs.map +1 -1
- package/dist/functional/result/impl/result-swap.d.mts.map +1 -1
- package/dist/functional/result/impl/result-swap.mjs +4 -22
- package/dist/functional/result/impl/result-swap.mjs.map +1 -1
- package/dist/functional/result/impl/result-to-optional.d.mts.map +1 -1
- package/dist/functional/result/impl/result-to-optional.mjs +0 -27
- package/dist/functional/result/impl/result-to-optional.mjs.map +1 -1
- package/dist/functional/result/impl/result-unwrap-err-or.mjs +9 -11
- package/dist/functional/result/impl/result-unwrap-err-or.mjs.map +1 -1
- package/dist/functional/result/impl/result-unwrap-err-throw.d.mts.map +1 -1
- package/dist/functional/result/impl/result-unwrap-err-throw.mjs +13 -40
- package/dist/functional/result/impl/result-unwrap-err-throw.mjs.map +1 -1
- package/dist/functional/result/impl/result-unwrap-err.d.mts.map +1 -1
- package/dist/functional/result/impl/result-unwrap-err.mjs +4 -32
- package/dist/functional/result/impl/result-unwrap-err.mjs.map +1 -1
- package/dist/functional/result/impl/result-unwrap-ok-or.mjs +9 -11
- package/dist/functional/result/impl/result-unwrap-ok-or.mjs.map +1 -1
- package/dist/functional/result/impl/result-unwrap-ok.mjs +4 -4
- package/dist/functional/result/impl/result-unwrap-ok.mjs.map +1 -1
- package/dist/functional/result/impl/result-unwrap-throw.d.mts.map +1 -1
- package/dist/functional/result/impl/result-unwrap-throw.mjs +4 -35
- package/dist/functional/result/impl/result-unwrap-throw.mjs.map +1 -1
- package/dist/functional/result/impl/result-zip.d.mts.map +1 -1
- package/dist/functional/result/impl/result-zip.mjs +1 -34
- package/dist/functional/result/impl/result-zip.mjs.map +1 -1
- package/dist/functional/result/impl/tag.mjs +2 -3
- package/dist/functional/result/impl/tag.mjs.map +1 -1
- package/dist/functional/ternary-result/impl/tag.mjs +3 -5
- package/dist/functional/ternary-result/impl/tag.mjs.map +1 -1
- package/dist/functional/ternary-result/impl/ternary-result-err.d.mts.map +1 -1
- package/dist/functional/ternary-result/impl/ternary-result-err.mjs +2 -15
- package/dist/functional/ternary-result/impl/ternary-result-err.mjs.map +1 -1
- package/dist/functional/ternary-result/impl/ternary-result-expect-to-be.mjs +13 -13
- package/dist/functional/ternary-result/impl/ternary-result-expect-to-be.mjs.map +1 -1
- package/dist/functional/ternary-result/impl/ternary-result-flat-map.mjs +27 -26
- package/dist/functional/ternary-result/impl/ternary-result-flat-map.mjs.map +1 -1
- package/dist/functional/ternary-result/impl/ternary-result-fold.mjs +21 -22
- package/dist/functional/ternary-result/impl/ternary-result-fold.mjs.map +1 -1
- package/dist/functional/ternary-result/impl/ternary-result-from-promise.d.mts.map +1 -1
- package/dist/functional/ternary-result/impl/ternary-result-from-promise.mjs +4 -20
- package/dist/functional/ternary-result/impl/ternary-result-from-promise.mjs.map +1 -1
- package/dist/functional/ternary-result/impl/ternary-result-from-throwable.d.mts.map +1 -1
- package/dist/functional/ternary-result/impl/ternary-result-from-throwable.mjs +7 -25
- package/dist/functional/ternary-result/impl/ternary-result-from-throwable.mjs.map +1 -1
- package/dist/functional/ternary-result/impl/ternary-result-is-err.d.mts.map +1 -1
- package/dist/functional/ternary-result/impl/ternary-result-is-err.mjs +0 -17
- package/dist/functional/ternary-result/impl/ternary-result-is-err.mjs.map +1 -1
- package/dist/functional/ternary-result/impl/ternary-result-is-ok.d.mts.map +1 -1
- package/dist/functional/ternary-result/impl/ternary-result-is-ok.mjs +0 -19
- package/dist/functional/ternary-result/impl/ternary-result-is-ok.mjs.map +1 -1
- package/dist/functional/ternary-result/impl/ternary-result-is-ternary-result.d.mts.map +1 -1
- package/dist/functional/ternary-result/impl/ternary-result-is-ternary-result.mjs +1 -25
- package/dist/functional/ternary-result/impl/ternary-result-is-ternary-result.mjs.map +1 -1
- package/dist/functional/ternary-result/impl/ternary-result-is-warn.d.mts.map +1 -1
- package/dist/functional/ternary-result/impl/ternary-result-is-warn.mjs +0 -18
- package/dist/functional/ternary-result/impl/ternary-result-is-warn.mjs.map +1 -1
- package/dist/functional/ternary-result/impl/ternary-result-map-err.mjs +13 -15
- package/dist/functional/ternary-result/impl/ternary-result-map-err.mjs.map +1 -1
- package/dist/functional/ternary-result/impl/ternary-result-map-warn.mjs +18 -18
- package/dist/functional/ternary-result/impl/ternary-result-map-warn.mjs.map +1 -1
- package/dist/functional/ternary-result/impl/ternary-result-map.mjs +21 -22
- package/dist/functional/ternary-result/impl/ternary-result-map.mjs.map +1 -1
- package/dist/functional/ternary-result/impl/ternary-result-ok.d.mts.map +1 -1
- package/dist/functional/ternary-result/impl/ternary-result-ok.mjs +2 -16
- package/dist/functional/ternary-result/impl/ternary-result-ok.mjs.map +1 -1
- package/dist/functional/ternary-result/impl/ternary-result-or-else.mjs +9 -9
- package/dist/functional/ternary-result/impl/ternary-result-or-else.mjs.map +1 -1
- package/dist/functional/ternary-result/impl/ternary-result-to-optional.d.mts.map +1 -1
- package/dist/functional/ternary-result/impl/ternary-result-to-optional.mjs +4 -22
- package/dist/functional/ternary-result/impl/ternary-result-to-optional.mjs.map +1 -1
- package/dist/functional/ternary-result/impl/ternary-result-unwrap-err-or.mjs +9 -9
- package/dist/functional/ternary-result/impl/ternary-result-unwrap-err-or.mjs.map +1 -1
- package/dist/functional/ternary-result/impl/ternary-result-unwrap-err-throw.d.mts.map +1 -1
- package/dist/functional/ternary-result/impl/ternary-result-unwrap-err-throw.mjs +12 -27
- package/dist/functional/ternary-result/impl/ternary-result-unwrap-err-throw.mjs.map +1 -1
- package/dist/functional/ternary-result/impl/ternary-result-unwrap-err.d.mts.map +1 -1
- package/dist/functional/ternary-result/impl/ternary-result-unwrap-err.mjs +4 -19
- package/dist/functional/ternary-result/impl/ternary-result-unwrap-err.mjs.map +1 -1
- package/dist/functional/ternary-result/impl/ternary-result-unwrap-ok-or.mjs +9 -9
- package/dist/functional/ternary-result/impl/ternary-result-unwrap-ok-or.mjs.map +1 -1
- package/dist/functional/ternary-result/impl/ternary-result-unwrap-ok.mjs +4 -5
- package/dist/functional/ternary-result/impl/ternary-result-unwrap-ok.mjs.map +1 -1
- package/dist/functional/ternary-result/impl/ternary-result-unwrap-throw.d.mts.map +1 -1
- package/dist/functional/ternary-result/impl/ternary-result-unwrap-throw.mjs +15 -27
- package/dist/functional/ternary-result/impl/ternary-result-unwrap-throw.mjs.map +1 -1
- package/dist/functional/ternary-result/impl/ternary-result-unwrap-warn-or.mjs +9 -9
- package/dist/functional/ternary-result/impl/ternary-result-unwrap-warn-or.mjs.map +1 -1
- package/dist/functional/ternary-result/impl/ternary-result-unwrap-warn-throw.d.mts.map +1 -1
- package/dist/functional/ternary-result/impl/ternary-result-unwrap-warn-throw.mjs +10 -24
- package/dist/functional/ternary-result/impl/ternary-result-unwrap-warn-throw.mjs.map +1 -1
- package/dist/functional/ternary-result/impl/ternary-result-unwrap-warn.d.mts.map +1 -1
- package/dist/functional/ternary-result/impl/ternary-result-unwrap-warn.mjs +4 -19
- package/dist/functional/ternary-result/impl/ternary-result-unwrap-warn.mjs.map +1 -1
- package/dist/functional/ternary-result/impl/ternary-result-warn.d.mts.map +1 -1
- package/dist/functional/ternary-result/impl/ternary-result-warn.mjs +3 -19
- package/dist/functional/ternary-result/impl/ternary-result-warn.mjs.map +1 -1
- package/dist/functional/ternary-result/impl/ternary-result-zip.d.mts.map +1 -1
- package/dist/functional/ternary-result/impl/ternary-result-zip.mjs +14 -45
- package/dist/functional/ternary-result/impl/ternary-result-zip.mjs.map +1 -1
- package/dist/functional/ternary-result/impl/variant-name.d.mts +1 -1
- package/dist/functional/ternary-result/impl/variant-name.d.mts.map +1 -1
- package/dist/functional/ternary-result/impl/variant-name.mjs +8 -9
- package/dist/functional/ternary-result/impl/variant-name.mjs.map +1 -1
- package/dist/guard/as-length-bounded-array.d.mts +117 -0
- package/dist/guard/as-length-bounded-array.d.mts.map +1 -0
- package/dist/guard/as-length-bounded-array.mjs +37 -0
- package/dist/guard/as-length-bounded-array.mjs.map +1 -0
- package/dist/guard/has-key.d.mts.map +1 -1
- package/dist/guard/has-key.mjs +0 -41
- package/dist/guard/has-key.mjs.map +1 -1
- package/dist/guard/index.d.mts +2 -0
- package/dist/guard/index.d.mts.map +1 -1
- package/dist/guard/index.mjs +2 -0
- package/dist/guard/index.mjs.map +1 -1
- package/dist/guard/is-length-bounded-array.d.mts +159 -0
- package/dist/guard/is-length-bounded-array.d.mts.map +1 -0
- package/dist/guard/is-length-bounded-array.mjs +7 -0
- package/dist/guard/is-length-bounded-array.mjs.map +1 -0
- package/dist/guard/is-length-bounded-string.d.mts +5 -6
- package/dist/guard/is-length-bounded-string.d.mts.map +1 -1
- package/dist/guard/is-length-bounded-string.mjs +0 -157
- package/dist/guard/is-length-bounded-string.mjs.map +1 -1
- package/dist/guard/is-non-empty-string.d.mts +1 -1
- package/dist/guard/is-non-empty-string.d.mts.map +1 -1
- package/dist/guard/is-non-empty-string.mjs +1 -38
- package/dist/guard/is-non-empty-string.mjs.map +1 -1
- package/dist/guard/is-non-null-object.d.mts.map +1 -1
- package/dist/guard/is-non-null-object.mjs +1 -35
- package/dist/guard/is-non-null-object.mjs.map +1 -1
- package/dist/guard/is-primitive.d.mts.map +1 -1
- package/dist/guard/is-primitive.mjs +12 -43
- package/dist/guard/is-primitive.mjs.map +1 -1
- package/dist/guard/is-record.d.mts.map +1 -1
- package/dist/guard/is-record.mjs +0 -86
- package/dist/guard/is-record.mjs.map +1 -1
- package/dist/guard/is-type.d.mts.map +1 -1
- package/dist/guard/is-type.mjs +12 -399
- package/dist/guard/is-type.mjs.map +1 -1
- package/dist/guard/key-is-in.d.mts.map +1 -1
- package/dist/guard/key-is-in.mjs +0 -40
- package/dist/guard/key-is-in.mjs.map +1 -1
- package/dist/index.mjs +2 -0
- package/dist/index.mjs.map +1 -1
- package/dist/iterator/range.mjs +16 -16
- package/dist/iterator/range.mjs.map +1 -1
- package/dist/json/json.d.mts.map +1 -1
- package/dist/json/json.mjs +52 -340
- package/dist/json/json.mjs.map +1 -1
- package/dist/number/branded-types/finite-number.d.mts +3 -3
- package/dist/number/branded-types/finite-number.mjs +135 -154
- package/dist/number/branded-types/finite-number.mjs.map +1 -1
- package/dist/number/branded-types/int.d.mts +4 -4
- package/dist/number/branded-types/int.mjs +205 -245
- package/dist/number/branded-types/int.mjs.map +1 -1
- package/dist/number/branded-types/int16.d.mts +15 -15
- package/dist/number/branded-types/int16.mjs +116 -123
- package/dist/number/branded-types/int16.mjs.map +1 -1
- package/dist/number/branded-types/int32.d.mts +11 -11
- package/dist/number/branded-types/int32.mjs +116 -123
- package/dist/number/branded-types/int32.mjs.map +1 -1
- package/dist/number/branded-types/negative-finite-number.d.mts +4 -4
- package/dist/number/branded-types/negative-finite-number.mjs +129 -144
- package/dist/number/branded-types/negative-finite-number.mjs.map +1 -1
- package/dist/number/branded-types/negative-int.d.mts +5 -5
- package/dist/number/branded-types/negative-int.mjs +94 -113
- package/dist/number/branded-types/negative-int.mjs.map +1 -1
- package/dist/number/branded-types/negative-safe-int.d.mts +5 -5
- package/dist/number/branded-types/negative-safe-int.mjs +103 -124
- package/dist/number/branded-types/negative-safe-int.mjs.map +1 -1
- package/dist/number/branded-types/non-negative-finite-number.d.mts +5 -5
- package/dist/number/branded-types/non-negative-finite-number.mjs +136 -142
- package/dist/number/branded-types/non-negative-finite-number.mjs.map +1 -1
- package/dist/number/branded-types/non-negative-int16.d.mts +16 -16
- package/dist/number/branded-types/non-negative-int16.mjs +109 -118
- package/dist/number/branded-types/non-negative-int16.mjs.map +1 -1
- package/dist/number/branded-types/non-negative-int32.d.mts +12 -12
- package/dist/number/branded-types/non-negative-int32.mjs +110 -119
- package/dist/number/branded-types/non-negative-int32.mjs.map +1 -1
- package/dist/number/branded-types/non-positive-finite-number.d.mts +3 -3
- package/dist/number/branded-types/non-positive-finite-number.mjs +120 -124
- package/dist/number/branded-types/non-positive-finite-number.mjs.map +1 -1
- package/dist/number/branded-types/non-positive-int.d.mts +4 -4
- package/dist/number/branded-types/non-positive-int.mjs +167 -212
- package/dist/number/branded-types/non-positive-int.mjs.map +1 -1
- package/dist/number/branded-types/non-positive-safe-int.d.mts +4 -4
- package/dist/number/branded-types/non-positive-safe-int.mjs +95 -106
- package/dist/number/branded-types/non-positive-safe-int.mjs.map +1 -1
- package/dist/number/branded-types/non-zero-finite-number.d.mts +4 -4
- package/dist/number/branded-types/non-zero-finite-number.mjs +114 -123
- package/dist/number/branded-types/non-zero-finite-number.mjs.map +1 -1
- package/dist/number/branded-types/non-zero-int.d.mts +2 -2
- package/dist/number/branded-types/non-zero-int.mjs +72 -83
- package/dist/number/branded-types/non-zero-int.mjs.map +1 -1
- package/dist/number/branded-types/non-zero-int16.d.mts +7 -7
- package/dist/number/branded-types/non-zero-int16.mjs +96 -107
- package/dist/number/branded-types/non-zero-int16.mjs.map +1 -1
- package/dist/number/branded-types/non-zero-int32.d.mts +5 -5
- package/dist/number/branded-types/non-zero-int32.mjs +97 -108
- package/dist/number/branded-types/non-zero-int32.mjs.map +1 -1
- package/dist/number/branded-types/non-zero-safe-int.d.mts +2 -2
- package/dist/number/branded-types/non-zero-safe-int.mjs +100 -111
- package/dist/number/branded-types/non-zero-safe-int.mjs.map +1 -1
- package/dist/number/branded-types/non-zero-uint16.d.mts +8 -8
- package/dist/number/branded-types/non-zero-uint16.mjs +96 -107
- package/dist/number/branded-types/non-zero-uint16.mjs.map +1 -1
- package/dist/number/branded-types/non-zero-uint32.d.mts +6 -6
- package/dist/number/branded-types/non-zero-uint32.mjs +96 -107
- package/dist/number/branded-types/non-zero-uint32.mjs.map +1 -1
- package/dist/number/branded-types/positive-finite-number.d.mts +8 -8
- package/dist/number/branded-types/positive-finite-number.mjs +139 -141
- package/dist/number/branded-types/positive-finite-number.mjs.map +1 -1
- package/dist/number/branded-types/positive-int.d.mts +11 -11
- package/dist/number/branded-types/positive-int.mjs +228 -271
- package/dist/number/branded-types/positive-int.mjs.map +1 -1
- package/dist/number/branded-types/positive-int16.d.mts +19 -19
- package/dist/number/branded-types/positive-int16.mjs +109 -118
- package/dist/number/branded-types/positive-int16.mjs.map +1 -1
- package/dist/number/branded-types/positive-int32.d.mts +15 -15
- package/dist/number/branded-types/positive-int32.mjs +109 -118
- package/dist/number/branded-types/positive-int32.mjs.map +1 -1
- package/dist/number/branded-types/positive-safe-int.d.mts +11 -11
- package/dist/number/branded-types/positive-safe-int.mjs +244 -275
- package/dist/number/branded-types/positive-safe-int.mjs.map +1 -1
- package/dist/number/branded-types/positive-uint16.d.mts +17 -17
- package/dist/number/branded-types/positive-uint16.mjs +109 -118
- package/dist/number/branded-types/positive-uint16.mjs.map +1 -1
- package/dist/number/branded-types/positive-uint32.d.mts +13 -13
- package/dist/number/branded-types/positive-uint32.mjs +110 -119
- package/dist/number/branded-types/positive-uint32.mjs.map +1 -1
- package/dist/number/branded-types/safe-int.d.mts +4 -4
- package/dist/number/branded-types/safe-int.mjs +251 -292
- package/dist/number/branded-types/safe-int.mjs.map +1 -1
- package/dist/number/branded-types/safe-uint.d.mts +8 -8
- package/dist/number/branded-types/safe-uint.mjs +111 -119
- package/dist/number/branded-types/safe-uint.mjs.map +1 -1
- package/dist/number/branded-types/uint.d.mts +8 -8
- package/dist/number/branded-types/uint.mjs +198 -225
- package/dist/number/branded-types/uint.mjs.map +1 -1
- package/dist/number/branded-types/uint16.d.mts +14 -14
- package/dist/number/branded-types/uint16.mjs +109 -119
- package/dist/number/branded-types/uint16.mjs.map +1 -1
- package/dist/number/branded-types/uint32.d.mts +10 -10
- package/dist/number/branded-types/uint32.mjs +110 -117
- package/dist/number/branded-types/uint32.mjs.map +1 -1
- package/dist/number/enum/int8.mjs +119 -145
- package/dist/number/enum/int8.mjs.map +1 -1
- package/dist/number/enum/uint8.mjs +107 -121
- package/dist/number/enum/uint8.mjs.map +1 -1
- package/dist/number/num.d.mts +2 -2
- package/dist/number/num.d.mts.map +1 -1
- package/dist/number/num.mjs +76 -537
- package/dist/number/num.mjs.map +1 -1
- package/dist/number/refined-number-utils.d.mts +1 -1
- package/dist/number/refined-number-utils.d.mts.map +1 -1
- package/dist/number/refined-number-utils.mjs +127 -263
- package/dist/number/refined-number-utils.mjs.map +1 -1
- package/dist/object/object.d.mts.map +1 -1
- package/dist/object/object.mjs +107 -222
- package/dist/object/object.mjs.map +1 -1
- package/dist/others/cast-mutable.d.mts.map +1 -1
- package/dist/others/cast-mutable.mjs +8 -37
- package/dist/others/cast-mutable.mjs.map +1 -1
- package/dist/others/cast-readonly.d.mts.map +1 -1
- package/dist/others/cast-readonly.mjs +8 -36
- package/dist/others/cast-readonly.mjs.map +1 -1
- package/dist/others/debounce-function.d.mts.map +1 -1
- package/dist/others/debounce-function.mjs +7 -16
- package/dist/others/debounce-function.mjs.map +1 -1
- package/dist/others/fast-deep-equal.d.mts.map +1 -1
- package/dist/others/fast-deep-equal.mjs +43 -59
- package/dist/others/fast-deep-equal.mjs.map +1 -1
- package/dist/others/if-then.d.mts.map +1 -1
- package/dist/others/if-then.mjs +0 -29
- package/dist/others/if-then.mjs.map +1 -1
- package/dist/others/map-nullable.mjs +9 -9
- package/dist/others/map-nullable.mjs.map +1 -1
- package/dist/others/memoize-function.mjs +12 -12
- package/dist/others/memoize-function.mjs.map +1 -1
- package/dist/others/tuple.d.mts.map +1 -1
- package/dist/others/tuple.mjs +0 -50
- package/dist/others/tuple.mjs.map +1 -1
- package/dist/others/unknown-to-string.d.mts.map +1 -1
- package/dist/others/unknown-to-string.mjs +41 -88
- package/dist/others/unknown-to-string.mjs.map +1 -1
- package/dist/promise/promise.d.mts.map +1 -1
- package/dist/promise/promise.mjs +4 -49
- package/dist/promise/promise.mjs.map +1 -1
- package/package.json +14 -13
- package/src/array/impl/array-utils-creation.mts +3 -3
- package/src/array/impl/array-utils-modification.mts +7 -7
- package/src/array/impl/array-utils-modification.test.mts +4 -4
- package/src/array/impl/array-utils-transformation.mts +4 -4
- package/src/array/impl/array-utils-transformation.test.mts +7 -7
- package/src/array/impl/array-utils-validation.mts +24 -24
- package/src/array/impl/array-utils-validation.test.mts +94 -92
- package/src/collections/queue.test.mts +1 -1
- package/src/guard/as-length-bounded-array.mts +190 -0
- package/src/guard/as-length-bounded-array.test.mts +118 -0
- package/src/guard/index.mts +2 -0
- package/src/guard/is-length-bounded-array.mts +195 -0
- package/src/guard/is-length-bounded-array.test.mts +169 -0
- package/src/guard/is-length-bounded-string.mts +6 -6
- package/src/object/object.test.mts +3 -3
|
@@ -1,163 +1,6 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Type guard that checks if a string has at least `minLength` characters.
|
|
3
|
-
*
|
|
4
|
-
* The length is measured in UTF-16 code units (the same unit as
|
|
5
|
-
* `String.prototype.length`), so characters outside the Basic Multilingual
|
|
6
|
-
* Plane (e.g. emoji) count as 2.
|
|
7
|
-
*
|
|
8
|
-
* **Type Narrowing Behavior:**
|
|
9
|
-
*
|
|
10
|
-
* - Narrows the input to `MinLengthString<MinLength>` while preserving the
|
|
11
|
-
* original string type (e.g. literal types) via intersection.
|
|
12
|
-
* - The result participates in the length-constraint subtyping relation: for
|
|
13
|
-
* example, a value narrowed to `MinLengthString<3>` is assignable to
|
|
14
|
-
* `MinLengthString<1>` (= `NonEmptyString`).
|
|
15
|
-
*
|
|
16
|
-
* @example
|
|
17
|
-
*
|
|
18
|
-
* ```ts
|
|
19
|
-
* const input: string = 'very-secret-password';
|
|
20
|
-
*
|
|
21
|
-
* assert.isTrue(isMinLengthString(input, 12));
|
|
22
|
-
*
|
|
23
|
-
* assert.isFalse(isMinLengthString('short', 12));
|
|
24
|
-
*
|
|
25
|
-
* if (isMinLengthString(input, 12)) {
|
|
26
|
-
* const password: MinLengthString<12> = input;
|
|
27
|
-
*
|
|
28
|
-
* const nonEmpty: NonEmptyString = input; // OK (12 >= 1)
|
|
29
|
-
* }
|
|
30
|
-
* ```
|
|
31
|
-
*
|
|
32
|
-
* @template S - The input string type (literal types are preserved).
|
|
33
|
-
* @template MinLength - The minimum number of characters (inclusive).
|
|
34
|
-
* @param s - The string to check.
|
|
35
|
-
* @param minLength - The minimum number of characters (inclusive).
|
|
36
|
-
* @returns `true` if `s.length >= minLength`, `false` otherwise. When `true`,
|
|
37
|
-
* TypeScript narrows `s` to `MinLengthString<MinLength> & S`.
|
|
38
|
-
*/
|
|
39
1
|
const isMinLengthString = (s, minLength) => s.length >= minLength;
|
|
40
|
-
/**
|
|
41
|
-
* Type guard that checks if a string has at most `maxLength` characters.
|
|
42
|
-
*
|
|
43
|
-
* The length is measured in UTF-16 code units (the same unit as
|
|
44
|
-
* `String.prototype.length`), so characters outside the Basic Multilingual
|
|
45
|
-
* Plane (e.g. emoji) count as 2.
|
|
46
|
-
*
|
|
47
|
-
* **Type Narrowing Behavior:**
|
|
48
|
-
*
|
|
49
|
-
* - Narrows the input to `MaxLengthString<MaxLength>` while preserving the
|
|
50
|
-
* original string type (e.g. literal types) via intersection.
|
|
51
|
-
* - The result participates in the length-constraint subtyping relation: for
|
|
52
|
-
* example, a value narrowed to `MaxLengthString<16>` is assignable to
|
|
53
|
-
* `MaxLengthString<32>`.
|
|
54
|
-
*
|
|
55
|
-
* @example
|
|
56
|
-
*
|
|
57
|
-
* ```ts
|
|
58
|
-
* const input: string = 'noshiro';
|
|
59
|
-
*
|
|
60
|
-
* assert.isTrue(isMaxLengthString(input, 32));
|
|
61
|
-
*
|
|
62
|
-
* assert.isFalse(isMaxLengthString(input, 3));
|
|
63
|
-
*
|
|
64
|
-
* if (isMaxLengthString(input, 32)) {
|
|
65
|
-
* const userName: MaxLengthString<32> = input;
|
|
66
|
-
*
|
|
67
|
-
* const relaxed: MaxLengthString<64> = input; // OK (32 <= 64)
|
|
68
|
-
* }
|
|
69
|
-
* ```
|
|
70
|
-
*
|
|
71
|
-
* @template S - The input string type (literal types are preserved).
|
|
72
|
-
* @template MaxLength - The maximum number of characters (inclusive).
|
|
73
|
-
* @param s - The string to check.
|
|
74
|
-
* @param maxLength - The maximum number of characters (inclusive).
|
|
75
|
-
* @returns `true` if `s.length <= maxLength`, `false` otherwise. When `true`,
|
|
76
|
-
* TypeScript narrows `s` to `MaxLengthString<MaxLength> & S`.
|
|
77
|
-
*/
|
|
78
2
|
const isMaxLengthString = (s, maxLength) => s.length <= maxLength;
|
|
79
|
-
/**
|
|
80
|
-
* Type guard that checks if a string's length is within the inclusive range
|
|
81
|
-
* `[minLength, maxLength]`.
|
|
82
|
-
*
|
|
83
|
-
* The length is measured in UTF-16 code units (the same unit as
|
|
84
|
-
* `String.prototype.length`), so characters outside the Basic Multilingual
|
|
85
|
-
* Plane (e.g. emoji) count as 2.
|
|
86
|
-
*
|
|
87
|
-
* **Type Narrowing Behavior:**
|
|
88
|
-
*
|
|
89
|
-
* - Narrows the input to `BoundedLengthString<MinLength, MaxLength>` while
|
|
90
|
-
* preserving the original string type (e.g. literal types) via intersection.
|
|
91
|
-
* - Since `BoundedLengthString` is the intersection of `MinLengthString` and
|
|
92
|
-
* `MaxLengthString`, the narrowed value is assignable to both, and both
|
|
93
|
-
* bounds can be weakened independently.
|
|
94
|
-
*
|
|
95
|
-
* @example
|
|
96
|
-
*
|
|
97
|
-
* ```ts
|
|
98
|
-
* const input: string = 'user-12345678';
|
|
99
|
-
*
|
|
100
|
-
* assert.isTrue(isBoundedLengthString(input, 8, 16));
|
|
101
|
-
*
|
|
102
|
-
* assert.isFalse(isBoundedLengthString('user', 8, 16));
|
|
103
|
-
*
|
|
104
|
-
* if (isBoundedLengthString(input, 8, 16)) {
|
|
105
|
-
* const userId: BoundedLengthString<8, 16> = input;
|
|
106
|
-
*
|
|
107
|
-
* const relaxed: BoundedLengthString<1, 255> = input; // OK ([8, 16] ⊆ [1, 255])
|
|
108
|
-
* }
|
|
109
|
-
* ```
|
|
110
|
-
*
|
|
111
|
-
* @template S - The input string type (literal types are preserved).
|
|
112
|
-
* @template MinLength - The minimum number of characters (inclusive).
|
|
113
|
-
* @template MaxLength - The maximum number of characters (inclusive).
|
|
114
|
-
* @param s - The string to check.
|
|
115
|
-
* @param minLength - The minimum number of characters (inclusive).
|
|
116
|
-
* @param maxLength - The maximum number of characters (inclusive).
|
|
117
|
-
* @returns `true` if `minLength <= s.length && s.length <= maxLength`, `false`
|
|
118
|
-
* otherwise. When `true`, TypeScript narrows `s` to
|
|
119
|
-
* `BoundedLengthString<MinLength, MaxLength> & S`.
|
|
120
|
-
*/
|
|
121
3
|
const isBoundedLengthString = (s, minLength, maxLength) => s.length >= minLength && s.length <= maxLength;
|
|
122
|
-
/**
|
|
123
|
-
* Type guard that checks if a string has exactly `length` characters.
|
|
124
|
-
*
|
|
125
|
-
* The length is measured in UTF-16 code units (the same unit as
|
|
126
|
-
* `String.prototype.length`), so characters outside the Basic Multilingual
|
|
127
|
-
* Plane (e.g. emoji) count as 2.
|
|
128
|
-
*
|
|
129
|
-
* **Type Narrowing Behavior:**
|
|
130
|
-
*
|
|
131
|
-
* - Narrows the input to `FixedLengthString<Length>` while preserving the
|
|
132
|
-
* original string type (e.g. literal types) via intersection.
|
|
133
|
-
* - Since `FixedLengthString<Length>` is defined as
|
|
134
|
-
* `BoundedLengthString<Length, Length>`, the narrowed value is assignable to
|
|
135
|
-
* any `MinLengthString<N>` with `N <= Length` and any `MaxLengthString<N>`
|
|
136
|
-
* with `N >= Length`.
|
|
137
|
-
*
|
|
138
|
-
* @example
|
|
139
|
-
*
|
|
140
|
-
* ```ts
|
|
141
|
-
* const input: string = 'JP';
|
|
142
|
-
*
|
|
143
|
-
* assert.isTrue(isFixedLengthString(input, 2));
|
|
144
|
-
*
|
|
145
|
-
* assert.isFalse(isFixedLengthString(input, 3));
|
|
146
|
-
*
|
|
147
|
-
* if (isFixedLengthString(input, 2)) {
|
|
148
|
-
* const countryCode: FixedLengthString<2> = input;
|
|
149
|
-
*
|
|
150
|
-
* const atMost5: MaxLengthString<5> = input; // OK (2 <= 5)
|
|
151
|
-
* }
|
|
152
|
-
* ```
|
|
153
|
-
*
|
|
154
|
-
* @template S - The input string type (literal types are preserved).
|
|
155
|
-
* @template Length - The exact number of characters.
|
|
156
|
-
* @param s - The string to check.
|
|
157
|
-
* @param length - The exact number of characters.
|
|
158
|
-
* @returns `true` if `s.length === length`, `false` otherwise. When `true`,
|
|
159
|
-
* TypeScript narrows `s` to `FixedLengthString<Length> & S`.
|
|
160
|
-
*/
|
|
161
4
|
const isFixedLengthString = (s, length) => s.length === length;
|
|
162
5
|
|
|
163
6
|
export { isBoundedLengthString, isFixedLengthString, isMaxLengthString, isMinLengthString };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"is-length-bounded-string.mjs","sources":["../../src/guard/is-length-bounded-string.mts"],"sourcesContent":[
|
|
1
|
+
{"version":3,"file":"is-length-bounded-string.mjs","sources":["../../src/guard/is-length-bounded-string.mts"],"sourcesContent":["import {\n type BoundedLengthString,\n type FixedLengthString,\n type MaxLengthString,\n type MinLengthString,\n type SupportedLength,\n} from 'ts-type-forge';\n\n/**\n * Type guard that checks if a string has at least `minLength` characters.\n *\n * The length is measured in UTF-16 code units (the same unit as\n * `String.prototype.length`), so characters outside the Basic Multilingual\n * Plane (e.g. emoji) count as 2.\n *\n * **Type Narrowing Behavior:**\n *\n * - Narrows the input to `MinLengthString<MinLength>` while preserving the\n * original string type (e.g. literal types) via intersection.\n * - The result participates in the length-constraint subtyping relation: for\n * example, a value narrowed to `MinLengthString<3>` is assignable to\n * `MinLengthString<1>` (= `NonEmptyString`).\n *\n * @example\n *\n * ```ts\n * const input: string = 'very-secret-password';\n *\n * assert.isTrue(isMinLengthString(input, 12));\n *\n * assert.isFalse(isMinLengthString('short', 12));\n *\n * if (isMinLengthString(input, 12)) {\n * const password: MinLengthString<12> = input;\n *\n * const nonEmpty: NonEmptyString = input; // OK (12 >= 1)\n * }\n * ```\n *\n * @template S - The input string type (literal types are preserved).\n * @template MinLength - The minimum number of characters (inclusive).\n * @param s - The string to check.\n * @param minLength - The minimum number of characters (inclusive).\n * @returns `true` if `s.length >= minLength`, `false` otherwise. When `true`,\n * TypeScript narrows `s` to `MinLengthString<MinLength> & S`.\n */\nexport const isMinLengthString = <\n S extends string,\n MinLength extends SupportedLength,\n>(\n s: S,\n minLength: MinLength,\n): s is MinLengthString<MinLength> & S => s.length >= minLength;\n\n/**\n * Type guard that checks if a string has at most `maxLength` characters.\n *\n * The length is measured in UTF-16 code units (the same unit as\n * `String.prototype.length`), so characters outside the Basic Multilingual\n * Plane (e.g. emoji) count as 2.\n *\n * **Type Narrowing Behavior:**\n *\n * - Narrows the input to `MaxLengthString<MaxLength>` while preserving the\n * original string type (e.g. literal types) via intersection.\n * - The result participates in the length-constraint subtyping relation: for\n * example, a value narrowed to `MaxLengthString<16>` is assignable to\n * `MaxLengthString<32>`.\n *\n * @example\n *\n * ```ts\n * const input: string = 'noshiro';\n *\n * assert.isTrue(isMaxLengthString(input, 32));\n *\n * assert.isFalse(isMaxLengthString(input, 3));\n *\n * if (isMaxLengthString(input, 32)) {\n * const userName: MaxLengthString<32> = input;\n *\n * const relaxed: MaxLengthString<64> = input; // OK (32 <= 64)\n * }\n * ```\n *\n * @template S - The input string type (literal types are preserved).\n * @template MaxLength - The maximum number of characters (inclusive).\n * @param s - The string to check.\n * @param maxLength - The maximum number of characters (inclusive).\n * @returns `true` if `s.length <= maxLength`, `false` otherwise. When `true`,\n * TypeScript narrows `s` to `MaxLengthString<MaxLength> & S`.\n */\nexport const isMaxLengthString = <\n S extends string,\n MaxLength extends SupportedLength,\n>(\n s: S,\n maxLength: MaxLength,\n): s is MaxLengthString<MaxLength> & S => s.length <= maxLength;\n\n/**\n * Type guard that checks if a string's length is within the inclusive range\n * `[minLength, maxLength]`.\n *\n * The length is measured in UTF-16 code units (the same unit as\n * `String.prototype.length`), so characters outside the Basic Multilingual\n * Plane (e.g. emoji) count as 2.\n *\n * **Type Narrowing Behavior:**\n *\n * - Narrows the input to `BoundedLengthString<MinLength, MaxLength>` while\n * preserving the original string type (e.g. literal types) via intersection.\n * - Since `BoundedLengthString` is the intersection of `MinLengthString` and\n * `MaxLengthString`, the narrowed value is assignable to both, and both\n * bounds can be weakened independently.\n *\n * @example\n *\n * ```ts\n * const input: string = 'user-12345678';\n *\n * assert.isTrue(isBoundedLengthString(input, 8, 16));\n *\n * assert.isFalse(isBoundedLengthString('user', 8, 16));\n *\n * if (isBoundedLengthString(input, 8, 16)) {\n * const userId: BoundedLengthString<8, 16> = input;\n *\n * const relaxed: BoundedLengthString<1, 255> = input; // OK ([8, 16] ⊆ [1, 255])\n * }\n * ```\n *\n * @template S - The input string type (literal types are preserved).\n * @template MinLength - The minimum number of characters (inclusive).\n * @template MaxLength - The maximum number of characters (inclusive).\n * @param s - The string to check.\n * @param minLength - The minimum number of characters (inclusive).\n * @param maxLength - The maximum number of characters (inclusive).\n * @returns `true` if `minLength <= s.length && s.length <= maxLength`, `false`\n * otherwise. When `true`, TypeScript narrows `s` to\n * `BoundedLengthString<MinLength, MaxLength> & S`.\n */\nexport const isBoundedLengthString = <\n S extends string,\n MinLength extends SupportedLength,\n MaxLength extends SupportedLength,\n>(\n s: S,\n minLength: MinLength,\n maxLength: MaxLength,\n): s is BoundedLengthString<MinLength, MaxLength> & S =>\n s.length >= minLength && s.length <= maxLength;\n\n/**\n * Type guard that checks if a string has exactly `length` characters.\n *\n * The length is measured in UTF-16 code units (the same unit as\n * `String.prototype.length`), so characters outside the Basic Multilingual\n * Plane (e.g. emoji) count as 2.\n *\n * **Type Narrowing Behavior:**\n *\n * - Narrows the input to `FixedLengthString<Length>` while preserving the\n * original string type (e.g. literal types) via intersection.\n * - Since `FixedLengthString<Length>` is defined as\n * `BoundedLengthString<Length, Length>`, the narrowed value is assignable to\n * any `MinLengthString<N>` with `N <= Length` and any `MaxLengthString<N>`\n * with `N >= Length`.\n *\n * @example\n *\n * ```ts\n * const input: string = 'JP';\n *\n * assert.isTrue(isFixedLengthString(input, 2));\n *\n * assert.isFalse(isFixedLengthString(input, 3));\n *\n * if (isFixedLengthString(input, 2)) {\n * const countryCode: FixedLengthString<2> = input;\n *\n * const atMost5: MaxLengthString<5> = input; // OK (2 <= 5)\n * }\n * ```\n *\n * @template S - The input string type (literal types are preserved).\n * @template Length - The exact number of characters.\n * @param s - The string to check.\n * @param length - The exact number of characters.\n * @returns `true` if `s.length === length`, `false` otherwise. When `true`,\n * TypeScript narrows `s` to `FixedLengthString<Length> & S`.\n */\nexport const isFixedLengthString = <\n S extends string,\n Length extends SupportedLength,\n>(\n s: S,\n length: Length,\n): s is FixedLengthString<Length> & S => s.length === length;\n"],"names":[],"mappings":"AA8CO,MAAM,iBAAA,GAAoB,CAI/B,CAAA,EACA,SAAA,KACwC,EAAE,MAAA,IAAU;AAwC/C,MAAM,iBAAA,GAAoB,CAI/B,CAAA,EACA,SAAA,KACwC,EAAE,MAAA,IAAU;AA4C/C,MAAM,qBAAA,GAAwB,CAKnC,CAAA,EACA,SAAA,EACA,cAEA,CAAA,CAAE,MAAA,IAAU,SAAA,IAAa,CAAA,CAAE,MAAA,IAAU;AAyChC,MAAM,mBAAA,GAAsB,CAIjC,CAAA,EACA,MAAA,KACuC,EAAE,MAAA,KAAW;;;;"}
|
|
@@ -36,5 +36,5 @@ import { type NonEmptyString, type RelaxedExclude } from 'ts-type-forge';
|
|
|
36
36
|
* `true`, TypeScript narrows the type to exclude empty strings and nullish
|
|
37
37
|
* values.
|
|
38
38
|
*/
|
|
39
|
-
export declare const isNonEmptyString: <S extends string | null | undefined>(s: S) => s is NonEmptyString & RelaxedExclude<NonNullable<S>,
|
|
39
|
+
export declare const isNonEmptyString: <S extends string | null | undefined>(s: S) => s is NonEmptyString & RelaxedExclude<NonNullable<S>, ''>;
|
|
40
40
|
//# 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,OAAO,EAAE,KAAK,cAAc,EAAE,KAAK,cAAc,EAAE,MAAM,eAAe,CAAC;AAEzE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH,eAAO,MAAM,gBAAgB,GAAI,CAAC,SAAS,MAAM,GAAG,IAAI,GAAG,SAAS,
|
|
1
|
+
{"version":3,"file":"is-non-empty-string.d.mts","sourceRoot":"","sources":["../../src/guard/is-non-empty-string.mts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,cAAc,EAAE,KAAK,cAAc,EAAE,MAAM,eAAe,CAAC;AAEzE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH,eAAO,MAAM,gBAAgB,GAAI,CAAC,SAAS,MAAM,GAAG,IAAI,GAAG,SAAS,KAC/D,CAAC,KACH,CAAC,IAAI,cAAc,GAAG,cAAc,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,EAAE,CACnB,CAAC"}
|
|
@@ -1,41 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
* Type guard that checks if a value is a non-empty string.
|
|
3
|
-
*
|
|
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.
|
|
8
|
-
*
|
|
9
|
-
* **Type Narrowing Behavior:**
|
|
10
|
-
*
|
|
11
|
-
* - Eliminates `null` and `undefined` from the type
|
|
12
|
-
* - Excludes empty string (`""`) from the type
|
|
13
|
-
* - Preserves literal string types when possible
|
|
14
|
-
* - Whitespace-only strings are considered non-empty
|
|
15
|
-
*
|
|
16
|
-
* @example
|
|
17
|
-
*
|
|
18
|
-
* ```ts
|
|
19
|
-
* const words: readonly (string | undefined)[] = [
|
|
20
|
-
* 'Ada',
|
|
21
|
-
* undefined,
|
|
22
|
-
* '',
|
|
23
|
-
* 'Lovelace',
|
|
24
|
-
* ] as const;
|
|
25
|
-
*
|
|
26
|
-
* const nonEmpty = words.filter(isNonEmptyString);
|
|
27
|
-
*
|
|
28
|
-
* assert.deepStrictEqual(nonEmpty, ['Ada', 'Lovelace']);
|
|
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.
|
|
37
|
-
*/
|
|
38
|
-
const isNonEmptyString = (s) => typeof s === 'string' && s.length > 0;
|
|
1
|
+
const isNonEmptyString = (s) => typeof s === "string" && s.length > 0;
|
|
39
2
|
|
|
40
3
|
export { isNonEmptyString };
|
|
41
4
|
//# sourceMappingURL=is-non-empty-string.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"is-non-empty-string.mjs","sources":["../../src/guard/is-non-empty-string.mts"],"sourcesContent":[null],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"is-non-empty-string.mjs","sources":["../../src/guard/is-non-empty-string.mts"],"sourcesContent":["import { type NonEmptyString, type RelaxedExclude } from 'ts-type-forge';\n\n/**\n * Type guard that checks if a value is a non-empty string.\n *\n * This function performs both a type check (ensuring the value is a string) and\n * a length check (ensuring the string is not empty). It acts as a type guard\n * that narrows the input type to exclude `null`, `undefined`, and empty\n * strings.\n *\n * **Type Narrowing Behavior:**\n *\n * - Eliminates `null` and `undefined` from the type\n * - Excludes empty string (`\"\"`) from the type\n * - Preserves literal string types when possible\n * - Whitespace-only strings are considered non-empty\n *\n * @example\n *\n * ```ts\n * const words: readonly (string | undefined)[] = [\n * 'Ada',\n * undefined,\n * '',\n * 'Lovelace',\n * ] as const;\n *\n * const nonEmpty = words.filter(isNonEmptyString);\n *\n * assert.deepStrictEqual(nonEmpty, ['Ada', 'Lovelace']);\n * ```\n *\n * @template S - The input type, which can include `string`, `null`, or\n * `undefined`\n * @param s - The value to check\n * @returns `true` if `s` is a string with length > 0, `false` otherwise. When\n * `true`, TypeScript narrows the type to exclude empty strings and nullish\n * values.\n */\nexport const isNonEmptyString = <S extends string | null | undefined>(\n s: S,\n): s is NonEmptyString & RelaxedExclude<NonNullable<S>, ''> =>\n typeof s === 'string' && s.length > 0;\n"],"names":[],"mappings":"AAuCO,MAAM,mBAAmB,CAC9B,CAAA,KAEA,OAAO,CAAA,KAAM,QAAA,IAAY,EAAE,MAAA,GAAS;;;;"}
|
|
@@ -1 +1 @@
|
|
|
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,
|
|
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,MAAO,OAAO,KAAG,CAAC,IAAI,MACb,CAAC"}
|
|
@@ -1,38 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
* Type guard that checks if a value is a non-null object.
|
|
3
|
-
*
|
|
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.
|
|
8
|
-
*
|
|
9
|
-
* **Type Narrowing Behavior:**
|
|
10
|
-
*
|
|
11
|
-
* - Narrows `unknown` to `object`
|
|
12
|
-
* - Excludes `null`, `undefined`, and all primitive types
|
|
13
|
-
* - Excludes functions (they have `typeof` === `"function"`, not `"object"`)
|
|
14
|
-
* - Includes arrays, dates, regex, and other object instances
|
|
15
|
-
*
|
|
16
|
-
* **Note:** This function returns `true` for arrays. If you need
|
|
17
|
-
* record-oriented narrowing that excludes arrays, use `isRecord()` instead.
|
|
18
|
-
*
|
|
19
|
-
* @example
|
|
20
|
-
*
|
|
21
|
-
* ```ts
|
|
22
|
-
* const mixed: readonly unknown[] = [{ id: 1 }, null, 'Ada'] as const;
|
|
23
|
-
*
|
|
24
|
-
* const objects = mixed.filter(isNonNullObject);
|
|
25
|
-
*
|
|
26
|
-
* assert.deepStrictEqual(objects, [{ id: 1 }]);
|
|
27
|
-
* ```
|
|
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`.
|
|
32
|
-
* @see {@link isRecord} - For record-oriented type narrowing (excludes arrays)
|
|
33
|
-
*/
|
|
34
|
-
// eslint-disable-next-line @typescript-eslint/no-restricted-types
|
|
35
|
-
const isNonNullObject = (u) => typeof u === 'object' && u !== null;
|
|
1
|
+
const isNonNullObject = (u) => typeof u === "object" && u !== null;
|
|
36
2
|
|
|
37
3
|
export { isNonNullObject };
|
|
38
4
|
//# sourceMappingURL=is-non-null-object.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"is-non-null-object.mjs","sources":["../../src/guard/is-non-null-object.mts"],"sourcesContent":[null],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"is-non-null-object.mjs","sources":["../../src/guard/is-non-null-object.mts"],"sourcesContent":["/**\n * Type guard that checks if a value is a non-null object.\n *\n * This function checks if a value has type `\"object\"` according to the `typeof`\n * operator and is not `null`. This includes all object types such as plain\n * objects, arrays, dates, regular expressions, and other object instances, but\n * excludes functions.\n *\n * **Type Narrowing Behavior:**\n *\n * - Narrows `unknown` to `object`\n * - Excludes `null`, `undefined`, and all primitive types\n * - Excludes functions (they have `typeof` === `\"function\"`, not `\"object\"`)\n * - Includes arrays, dates, regex, and other object instances\n *\n * **Note:** This function returns `true` for arrays. If you need\n * record-oriented narrowing that excludes arrays, use `isRecord()` instead.\n *\n * @example\n *\n * ```ts\n * const mixed: readonly unknown[] = [{ id: 1 }, null, 'Ada'] as const;\n *\n * const objects = mixed.filter(isNonNullObject);\n *\n * assert.deepStrictEqual(objects, [{ id: 1 }]);\n * ```\n *\n * @param u - The value to check\n * @returns `true` if `u` is an object and not `null`, `false` otherwise. When\n * `true`, TypeScript narrows the type to `object`.\n * @see {@link isRecord} - For record-oriented type narrowing (excludes arrays)\n */\n// eslint-disable-next-line @typescript-eslint/no-restricted-types\nexport const isNonNullObject = (u: unknown): u is object =>\n typeof u === 'object' && u !== null;\n"],"names":[],"mappings":"AAkCO,MAAM,kBAAkB,CAAC,CAAA,KAC9B,OAAO,CAAA,KAAM,YAAY,CAAA,KAAM;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"is-primitive.d.mts","sourceRoot":"","sources":["../../src/guard/is-primitive.mts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,eAAe,CAAC;AAG/C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,eAAO,MAAM,WAAW,
|
|
1
|
+
{"version":3,"file":"is-primitive.d.mts","sourceRoot":"","sources":["../../src/guard/is-primitive.mts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,eAAe,CAAC;AAG/C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,eAAO,MAAM,WAAW,MAAO,OAAO,KAAG,CAAC,IAAI,SAa7C,CAAC"}
|
|
@@ -1,47 +1,16 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Type guard that checks if a value is a primitive type.
|
|
3
|
-
*
|
|
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
|
-
*
|
|
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.
|
|
11
|
-
*
|
|
12
|
-
* **Type Narrowing Behavior:**
|
|
13
|
-
*
|
|
14
|
-
* - Narrows the input type to `Primitive` (union of all primitive types)
|
|
15
|
-
* - Excludes object types, arrays, functions, and other non-primitive values
|
|
16
|
-
* - Includes `null` despite its misleading `typeof` result
|
|
17
|
-
*
|
|
18
|
-
* @example
|
|
19
|
-
*
|
|
20
|
-
* ```ts
|
|
21
|
-
* const values: readonly unknown[] = [42, 'Ada', null, { id: 1 }] as const;
|
|
22
|
-
*
|
|
23
|
-
* const primitives = values.filter(isPrimitive);
|
|
24
|
-
*
|
|
25
|
-
* assert.deepStrictEqual(primitives, [42, 'Ada', null]);
|
|
26
|
-
* ```
|
|
27
|
-
*
|
|
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`.
|
|
31
|
-
*/
|
|
32
1
|
const isPrimitive = (u) => {
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
2
|
+
switch (typeof u) {
|
|
3
|
+
case "string":
|
|
4
|
+
case "number":
|
|
5
|
+
case "boolean":
|
|
6
|
+
case "undefined":
|
|
7
|
+
case "symbol":
|
|
8
|
+
case "bigint":
|
|
9
|
+
return true;
|
|
10
|
+
case "function":
|
|
11
|
+
case "object":
|
|
12
|
+
return u === null;
|
|
13
|
+
}
|
|
45
14
|
};
|
|
46
15
|
|
|
47
16
|
export { isPrimitive };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"is-primitive.mjs","sources":["../../src/guard/is-primitive.mts"],"sourcesContent":[null],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"is-primitive.mjs","sources":["../../src/guard/is-primitive.mts"],"sourcesContent":["import { type Primitive } from 'ts-type-forge';\nimport { expectType } from '../expect-type.mjs';\n\n/**\n * Type guard that checks if a value is a primitive type.\n *\n * This function identifies JavaScript primitive types, which are immutable data\n * types that are not objects. The primitive types are: `string`, `number`,\n * `boolean`, `undefined`, `symbol`, `bigint`, and `null`.\n *\n * **Important Note:** Although `null` has `typeof null === \"object\"` due to a\n * historical JavaScript quirk, this function correctly identifies `null` as a\n * primitive value.\n *\n * **Type Narrowing Behavior:**\n *\n * - Narrows the input type to `Primitive` (union of all primitive types)\n * - Excludes object types, arrays, functions, and other non-primitive values\n * - Includes `null` despite its misleading `typeof` result\n *\n * @example\n *\n * ```ts\n * const values: readonly unknown[] = [42, 'Ada', null, { id: 1 }] as const;\n *\n * const primitives = values.filter(isPrimitive);\n *\n * assert.deepStrictEqual(primitives, [42, 'Ada', null]);\n * ```\n *\n * @param u - The value to check\n * @returns `true` if `u` is a primitive type, `false` otherwise. When `true`,\n * TypeScript narrows the type to `Primitive`.\n */\nexport const isPrimitive = (u: unknown): u is Primitive => {\n switch (typeof u) {\n case 'string':\n case 'number':\n case 'boolean':\n case 'undefined':\n case 'symbol':\n case 'bigint':\n return true;\n case 'function':\n case 'object':\n return u === null;\n }\n};\n\nexpectType<\n bigint | boolean | number | string | symbol | undefined | null,\n Primitive\n>('=');\n"],"names":[],"mappings":"AAkCO,MAAM,WAAA,GAAc,CAAC,CAAA,KAA+B;AACzD,EAAA,QAAQ,OAAO,CAAA;AAAG,IAChB,KAAK,QAAA;AAAA,IACL,KAAK,QAAA;AAAA,IACL,KAAK,SAAA;AAAA,IACL,KAAK,WAAA;AAAA,IACL,KAAK,QAAA;AAAA,IACL,KAAK,QAAA;AACH,MAAA,OAAO,IAAA;AAAA,IACT,KAAK,UAAA;AAAA,IACL,KAAK,QAAA;AACH,MAAA,OAAO,CAAA,KAAM,IAAA;AAAA;AAEnB;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"is-record.d.mts","sourceRoot":"","sources":["../../src/guard/is-record.mts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,aAAa,EAAE,KAAK,aAAa,EAAE,MAAM,eAAe,CAAC;AAGvE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoDG;AACH,eAAO,MAAM,QAAQ,
|
|
1
|
+
{"version":3,"file":"is-record.d.mts","sourceRoot":"","sources":["../../src/guard/is-record.mts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,aAAa,EAAE,KAAK,aAAa,EAAE,MAAM,eAAe,CAAC;AAGvE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoDG;AACH,eAAO,MAAM,QAAQ,MAAO,OAAO,KAAG,CAAC,IAAI,aACF,CAAC;AAE1C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,eAAO,MAAM,eAAe,EAAE,CAC5B,CAAC,EAAE,OAAO,KACP,CAAC,IAAI,aAAa,CAAC,MAAM,EAAE,OAAO,CAAY,CAAC"}
|
package/dist/guard/is-record.mjs
CHANGED
|
@@ -1,92 +1,6 @@
|
|
|
1
1
|
import { isNonNullObject } from './is-non-null-object.mjs';
|
|
2
2
|
|
|
3
|
-
/**
|
|
4
|
-
* Type guard that checks if a value is a record — a non-null, non-array
|
|
5
|
-
* object — and narrows it to `UnknownRecord` (= `ReadonlyRecord<string,
|
|
6
|
-
* unknown>`).
|
|
7
|
-
*
|
|
8
|
-
* This function is designed to be combined with {@link hasKey} to probe
|
|
9
|
-
* values of type `unknown` (e.g. parsed JSON, caught errors, external data)
|
|
10
|
-
* in a type-safe way: `if (isRecord(u) && hasKey(u, 'some-key')) { ... }`.
|
|
11
|
-
*
|
|
12
|
-
* **Type Narrowing Behavior:**
|
|
13
|
-
*
|
|
14
|
-
* - Narrows `unknown` to `UnknownRecord` (= `ReadonlyRecord<string, unknown>`)
|
|
15
|
-
* - Excludes `null`, `undefined`, primitives, and functions
|
|
16
|
-
* - Excludes arrays: arrays have no string index signature, so they are not
|
|
17
|
-
* assignable to `UnknownRecord`; admitting them at runtime would be
|
|
18
|
-
* inconsistent with the narrowed type
|
|
19
|
-
* - Returns `true` for every other non-null object, including dictionary
|
|
20
|
-
* objects created with `Object.create(null)` and instances such as `Date`,
|
|
21
|
-
* `RegExp`, `Map`, `Set`, `Error`, and user-defined classes
|
|
22
|
-
*
|
|
23
|
-
* **Why non-plain objects are included:** since every property of
|
|
24
|
-
* `UnknownRecord` is typed `unknown`, reading properties from any object
|
|
25
|
-
* through this narrowing is type-safe, and `hasKey` (backed by
|
|
26
|
-
* `Object.hasOwn`) answers own-property questions correctly on any object
|
|
27
|
-
* (e.g. `Map` entries are not own properties, so `hasKey` correctly returns
|
|
28
|
-
* `false` for them). Restricting the guard to plain objects would require
|
|
29
|
-
* prototype checks that misjudge cross-realm objects and would prevent
|
|
30
|
-
* probing useful instances such as `Error` subclasses.
|
|
31
|
-
*
|
|
32
|
-
* **Implementation:** `isNonNullObject(u) && !Array.isArray(u)`.
|
|
33
|
-
*
|
|
34
|
-
* @example
|
|
35
|
-
*
|
|
36
|
-
* ```ts
|
|
37
|
-
* const entries: readonly unknown[] = [
|
|
38
|
-
* { id: 1 },
|
|
39
|
-
* [1, 2],
|
|
40
|
-
* 'str',
|
|
41
|
-
* 0,
|
|
42
|
-
* null,
|
|
43
|
-
* ] as const;
|
|
44
|
-
*
|
|
45
|
-
* const records = entries.filter(isRecord);
|
|
46
|
-
*
|
|
47
|
-
* assert.deepStrictEqual(records, [{ id: 1 }]);
|
|
48
|
-
* ```
|
|
49
|
-
*
|
|
50
|
-
* @param u - The value to check
|
|
51
|
-
* @returns `true` if `u` is a non-null, non-array object, `false` otherwise.
|
|
52
|
-
* When `true`, TypeScript narrows the type to `UnknownRecord`.
|
|
53
|
-
* @see {@link isNonNullObject} - For checking any non-null object (includes arrays)
|
|
54
|
-
* @see {@link hasKey} - For checking if a record has specific keys
|
|
55
|
-
*/
|
|
56
3
|
const isRecord = (u) => isNonNullObject(u) && !Array.isArray(u);
|
|
57
|
-
/**
|
|
58
|
-
* Type guard that checks if a value is a mutable record.
|
|
59
|
-
*
|
|
60
|
-
* This function has the same runtime behavior as {@link isRecord} (non-null,
|
|
61
|
-
* non-array object check), but narrows the type to `MutableRecord<string,
|
|
62
|
-
* unknown>`, which is useful when you need to add or overwrite properties on
|
|
63
|
-
* the narrowed object.
|
|
64
|
-
*
|
|
65
|
-
* **Type Narrowing Behavior:**
|
|
66
|
-
*
|
|
67
|
-
* - Narrows `unknown` to `MutableRecord<string, unknown>`
|
|
68
|
-
* - Excludes `null`, `undefined`, primitives, functions, and arrays
|
|
69
|
-
* - Returns `true` for every other non-null object (see {@link isRecord} for
|
|
70
|
-
* details on non-plain objects such as `Date`, `Map`, and `Set`)
|
|
71
|
-
*
|
|
72
|
-
* **Implementation:** This is a type alias for {@link isRecord}.
|
|
73
|
-
*
|
|
74
|
-
* @example
|
|
75
|
-
*
|
|
76
|
-
* ```ts
|
|
77
|
-
* const obj: unknown = { foo: 1 } as const;
|
|
78
|
-
*
|
|
79
|
-
* if (isMutableRecord(obj)) {
|
|
80
|
-
* obj['bar'] = 2; // Safe: obj is now known to be a mutable record
|
|
81
|
-
* }
|
|
82
|
-
* ```
|
|
83
|
-
*
|
|
84
|
-
* @param u - The value to check
|
|
85
|
-
* @returns `true` if `u` is a non-null, non-array object, `false` otherwise.
|
|
86
|
-
* When `true`, TypeScript narrows the type to `MutableRecord<string,
|
|
87
|
-
* unknown>`.
|
|
88
|
-
* @see {@link isRecord} - For the underlying implementation and more details
|
|
89
|
-
*/
|
|
90
4
|
const isMutableRecord = isRecord;
|
|
91
5
|
|
|
92
6
|
export { isMutableRecord, isRecord };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"is-record.mjs","sources":["../../src/guard/is-record.mts"],"sourcesContent":[null],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"is-record.mjs","sources":["../../src/guard/is-record.mts"],"sourcesContent":["import { type MutableRecord, type UnknownRecord } from 'ts-type-forge';\nimport { isNonNullObject } from './is-non-null-object.mjs';\n\n/**\n * Type guard that checks if a value is a record — a non-null, non-array\n * object — and narrows it to `UnknownRecord` (= `ReadonlyRecord<string,\n * unknown>`).\n *\n * This function is designed to be combined with {@link hasKey} to probe\n * values of type `unknown` (e.g. parsed JSON, caught errors, external data)\n * in a type-safe way: `if (isRecord(u) && hasKey(u, 'some-key')) { ... }`.\n *\n * **Type Narrowing Behavior:**\n *\n * - Narrows `unknown` to `UnknownRecord` (= `ReadonlyRecord<string, unknown>`)\n * - Excludes `null`, `undefined`, primitives, and functions\n * - Excludes arrays: arrays have no string index signature, so they are not\n * assignable to `UnknownRecord`; admitting them at runtime would be\n * inconsistent with the narrowed type\n * - Returns `true` for every other non-null object, including dictionary\n * objects created with `Object.create(null)` and instances such as `Date`,\n * `RegExp`, `Map`, `Set`, `Error`, and user-defined classes\n *\n * **Why non-plain objects are included:** since every property of\n * `UnknownRecord` is typed `unknown`, reading properties from any object\n * through this narrowing is type-safe, and `hasKey` (backed by\n * `Object.hasOwn`) answers own-property questions correctly on any object\n * (e.g. `Map` entries are not own properties, so `hasKey` correctly returns\n * `false` for them). Restricting the guard to plain objects would require\n * prototype checks that misjudge cross-realm objects and would prevent\n * probing useful instances such as `Error` subclasses.\n *\n * **Implementation:** `isNonNullObject(u) && !Array.isArray(u)`.\n *\n * @example\n *\n * ```ts\n * const entries: readonly unknown[] = [\n * { id: 1 },\n * [1, 2],\n * 'str',\n * 0,\n * null,\n * ] as const;\n *\n * const records = entries.filter(isRecord);\n *\n * assert.deepStrictEqual(records, [{ id: 1 }]);\n * ```\n *\n * @param u - The value to check\n * @returns `true` if `u` is a non-null, non-array object, `false` otherwise.\n * When `true`, TypeScript narrows the type to `UnknownRecord`.\n * @see {@link isNonNullObject} - For checking any non-null object (includes arrays)\n * @see {@link hasKey} - For checking if a record has specific keys\n */\nexport const isRecord = (u: unknown): u is UnknownRecord =>\n isNonNullObject(u) && !Array.isArray(u);\n\n/**\n * Type guard that checks if a value is a mutable record.\n *\n * This function has the same runtime behavior as {@link isRecord} (non-null,\n * non-array object check), but narrows the type to `MutableRecord<string,\n * unknown>`, which is useful when you need to add or overwrite properties on\n * the narrowed object.\n *\n * **Type Narrowing Behavior:**\n *\n * - Narrows `unknown` to `MutableRecord<string, unknown>`\n * - Excludes `null`, `undefined`, primitives, functions, and arrays\n * - Returns `true` for every other non-null object (see {@link isRecord} for\n * details on non-plain objects such as `Date`, `Map`, and `Set`)\n *\n * **Implementation:** This is a type alias for {@link isRecord}.\n *\n * @example\n *\n * ```ts\n * const obj: unknown = { foo: 1 } as const;\n *\n * if (isMutableRecord(obj)) {\n * obj['bar'] = 2; // Safe: obj is now known to be a mutable record\n * }\n * ```\n *\n * @param u - The value to check\n * @returns `true` if `u` is a non-null, non-array object, `false` otherwise.\n * When `true`, TypeScript narrows the type to `MutableRecord<string,\n * unknown>`.\n * @see {@link isRecord} - For the underlying implementation and more details\n */\nexport const isMutableRecord: (\n u: unknown,\n) => u is MutableRecord<string, unknown> = isRecord;\n"],"names":[],"mappings":";;AAwDO,MAAM,QAAA,GAAW,CAAC,CAAA,KACvB,eAAA,CAAgB,CAAC,CAAA,IAAK,CAAC,KAAA,CAAM,OAAA,CAAQ,CAAC;AAmCjC,MAAM,eAAA,GAE8B;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"is-type.d.mts","sourceRoot":"","sources":["../../src/guard/is-type.mts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,eAAe,CAAC;AAEpD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,eAAO,MAAM,WAAW,
|
|
1
|
+
{"version":3,"file":"is-type.d.mts","sourceRoot":"","sources":["../../src/guard/is-type.mts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,eAAe,CAAC;AAEpD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,eAAO,MAAM,WAAW,MAAO,OAAO,KAAG,CAAC,IAAI,SAA4B,CAAC;AAE3E;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,eAAO,MAAM,cAAc,GAAI,CAAC,KAAM,CAAC,KAAG,CAAC,IAAI,cAAc,CAAC,CAAC,EAAE,SAAS,CACzD,CAAC;AAElB;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,eAAO,MAAM,SAAS,MAAO,OAAO,KAAG,CAAC,IAAI,OAAiC,CAAC;AAE9E;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,eAAO,MAAM,YAAY,GAAI,CAAC,KAAM,CAAC,KAAG,CAAC,IAAI,cAAc,CAAC,CAAC,EAAE,OAAO,CAC9C,CAAC;AAEzB;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,eAAO,MAAM,QAAQ,MAAO,OAAO,KAAG,CAAC,IAAI,MAA+B,CAAC;AAE3E;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,eAAO,MAAM,WAAW,GAAI,CAAC,KAAM,CAAC,KAAG,CAAC,IAAI,cAAc,CAAC,CAAC,EAAE,MAAM,CAC7C,CAAC;AAExB;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,eAAO,MAAM,QAAQ,MAAO,OAAO,KAAG,CAAC,IAAI,MAA+B,CAAC;AAE3E;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,eAAO,MAAM,WAAW,GAAI,CAAC,KAAM,CAAC,KAAG,CAAC,IAAI,cAAc,CAAC,CAAC,EAAE,MAAM,CAC7C,CAAC;AAExB;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,eAAO,MAAM,QAAQ,MAAO,OAAO,KAAG,CAAC,IAAI,MAA+B,CAAC;AAE3E;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,eAAO,MAAM,WAAW,GAAI,CAAC,KAAM,CAAC,KAAG,CAAC,IAAI,cAAc,CAAC,CAAC,EAAE,MAAM,CAC7C,CAAC;AAExB;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,eAAO,MAAM,QAAQ,MAAO,OAAO,KAAG,CAAC,IAAI,MAA+B,CAAC;AAE3E;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,eAAO,MAAM,WAAW,GAAI,CAAC,KAAM,CAAC,KAAG,CAAC,IAAI,cAAc,CAAC,CAAC,EAAE,MAAM,CAC7C,CAAC;AAExB;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,eAAO,MAAM,MAAM,MAAO,OAAO,KAAG,CAAC,IAAI,IAAkB,CAAC;AAE5D;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,eAAO,MAAM,SAAS,GAAI,CAAC,KAAM,CAAC,GAAG,IAAI,KAAG,CAAC,IAAI,CAAe,CAAC;AAEjE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,eAAO,MAAM,SAAS,MAAO,OAAO,KAAG,CAAC,IAAI,IAAI,GAAG,SAAsB,CAAC;AAE1E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,eAAO,MAAM,YAAY,GAAI,CAAC,KAAM,CAAC,KAAG,CAAC,IAAI,WAAW,CAAC,CAAC,CAAc,CAAC"}
|