ts-data-forge 14.6.0 → 14.6.2
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/dist/array/impl/array-utils-creation.mjs +126 -26
- package/dist/array/impl/array-utils-creation.mjs.map +1 -1
- package/dist/array/impl/array-utils-element-access.mjs +63 -30
- package/dist/array/impl/array-utils-element-access.mjs.map +1 -1
- package/dist/array/impl/array-utils-iterators.mjs +69 -53
- package/dist/array/impl/array-utils-iterators.mjs.map +1 -1
- package/dist/array/impl/array-utils-length-bounded-array-cast.mjs +109 -73
- package/dist/array/impl/array-utils-length-bounded-array-cast.mjs.map +1 -1
- package/dist/array/impl/array-utils-length-bounded-array-guard.mjs +71 -33
- package/dist/array/impl/array-utils-length-bounded-array-guard.mjs.map +1 -1
- package/dist/array/impl/array-utils-length-bounded-tuple-cast.mjs +102 -73
- package/dist/array/impl/array-utils-length-bounded-tuple-cast.mjs.map +1 -1
- package/dist/array/impl/array-utils-length-bounded-tuple-guard.mjs +77 -33
- package/dist/array/impl/array-utils-length-bounded-tuple-guard.mjs.map +1 -1
- package/dist/array/impl/array-utils-modification.mjs +75 -122
- package/dist/array/impl/array-utils-modification.mjs.map +1 -1
- package/dist/array/impl/array-utils-reducing-value.mjs +100 -150
- package/dist/array/impl/array-utils-reducing-value.mjs.map +1 -1
- package/dist/array/impl/array-utils-search.mjs +110 -134
- package/dist/array/impl/array-utils-search.mjs.map +1 -1
- package/dist/array/impl/array-utils-set-op.mjs +146 -38
- package/dist/array/impl/array-utils-set-op.mjs.map +1 -1
- package/dist/array/impl/array-utils-size.mjs +10 -8
- package/dist/array/impl/array-utils-size.mjs.map +1 -1
- package/dist/array/impl/array-utils-slice-clamped.mjs +13 -50
- package/dist/array/impl/array-utils-slice-clamped.mjs.map +1 -1
- package/dist/array/impl/array-utils-slicing.mjs +94 -78
- package/dist/array/impl/array-utils-slicing.mjs.map +1 -1
- package/dist/array/impl/array-utils-transformation.mjs +291 -199
- package/dist/array/impl/array-utils-transformation.mjs.map +1 -1
- package/dist/array/impl/array-utils-validation.mjs +54 -56
- package/dist/array/impl/array-utils-validation.mjs.map +1 -1
- package/dist/array/impl/index.mjs +17 -17
- package/dist/array/impl/index.mjs.map +1 -1
- package/dist/array/index.mjs +2 -3
- package/dist/array/index.mjs.map +1 -1
- package/dist/collections/imap-mapped.mjs +335 -291
- package/dist/collections/imap-mapped.mjs.map +1 -1
- package/dist/collections/imap.mjs +280 -239
- package/dist/collections/imap.mjs.map +1 -1
- package/dist/collections/index.mjs +7 -7
- package/dist/collections/index.mjs.map +1 -1
- package/dist/collections/iset-mapped.d.mts.map +1 -1
- package/dist/collections/iset-mapped.mjs +448 -263
- package/dist/collections/iset-mapped.mjs.map +1 -1
- package/dist/collections/iset.mjs +328 -201
- package/dist/collections/iset.mjs.map +1 -1
- package/dist/collections/queue.mjs +183 -151
- package/dist/collections/queue.mjs.map +1 -1
- package/dist/collections/stack.mjs +169 -140
- package/dist/collections/stack.mjs.map +1 -1
- package/dist/entry-point.mjs +4 -77
- package/dist/entry-point.mjs.map +1 -1
- package/dist/expect-type.mjs +70 -4
- package/dist/expect-type.mjs.map +1 -1
- package/dist/functional/async-result/async-result.mjs +2 -3
- package/dist/functional/async-result/async-result.mjs.map +1 -1
- package/dist/functional/async-result/impl/async-result-flat-map.mjs +19 -21
- package/dist/functional/async-result/impl/async-result-flat-map.mjs.map +1 -1
- package/dist/functional/async-result/impl/async-result-from-promise.mjs +9 -10
- package/dist/functional/async-result/impl/async-result-from-promise.mjs.map +1 -1
- package/dist/functional/async-result/impl/async-result-from-throwable.mjs +12 -14
- package/dist/functional/async-result/impl/async-result-from-throwable.mjs.map +1 -1
- package/dist/functional/async-result/impl/async-result-map-err.mjs +16 -19
- package/dist/functional/async-result/impl/async-result-map-err.mjs.map +1 -1
- package/dist/functional/async-result/impl/async-result-map.mjs +16 -19
- package/dist/functional/async-result/impl/async-result-map.mjs.map +1 -1
- package/dist/functional/async-result/impl/async-result-unwrap-or.mjs +36 -9
- package/dist/functional/async-result/impl/async-result-unwrap-or.mjs.map +1 -1
- package/dist/functional/async-result/impl/index.mjs +8 -7
- package/dist/functional/async-result/impl/index.mjs.map +1 -1
- package/dist/functional/async-result/impl/types.mjs +2 -2
- package/dist/functional/async-result/impl/types.mjs.map +1 -1
- package/dist/functional/async-result/index.mjs +2 -3
- package/dist/functional/async-result/index.mjs.map +1 -1
- package/dist/functional/index.mjs +7 -11
- package/dist/functional/index.mjs.map +1 -1
- package/dist/functional/match.mjs +27 -13
- package/dist/functional/match.mjs.map +1 -1
- package/dist/functional/optional/impl/index.mjs +19 -18
- package/dist/functional/optional/impl/index.mjs.map +1 -1
- package/dist/functional/optional/impl/optional-expect-to-be.mjs +16 -18
- package/dist/functional/optional/impl/optional-expect-to-be.mjs.map +1 -1
- package/dist/functional/optional/impl/optional-filter.mjs +17 -19
- package/dist/functional/optional/impl/optional-filter.mjs.map +1 -1
- package/dist/functional/optional/impl/optional-flat-map.mjs +13 -15
- package/dist/functional/optional/impl/optional-flat-map.mjs.map +1 -1
- package/dist/functional/optional/impl/optional-from-nullable.mjs +26 -5
- package/dist/functional/optional/impl/optional-from-nullable.mjs.map +1 -1
- package/dist/functional/optional/impl/optional-is-none.mjs +21 -5
- package/dist/functional/optional/impl/optional-is-none.mjs.map +1 -1
- package/dist/functional/optional/impl/optional-is-optional.mjs +26 -8
- package/dist/functional/optional/impl/optional-is-optional.mjs.map +1 -1
- package/dist/functional/optional/impl/optional-is-some.mjs +22 -5
- package/dist/functional/optional/impl/optional-is-some.mjs.map +1 -1
- package/dist/functional/optional/impl/optional-map.mjs +16 -18
- package/dist/functional/optional/impl/optional-map.mjs.map +1 -1
- package/dist/functional/optional/impl/optional-match.mjs +16 -18
- package/dist/functional/optional/impl/optional-match.mjs.map +1 -1
- package/dist/functional/optional/impl/optional-none.mjs +18 -5
- package/dist/functional/optional/impl/optional-none.mjs.map +1 -1
- package/dist/functional/optional/impl/optional-or-else.mjs +13 -15
- package/dist/functional/optional/impl/optional-or-else.mjs.map +1 -1
- package/dist/functional/optional/impl/optional-some.mjs +23 -7
- package/dist/functional/optional/impl/optional-some.mjs.map +1 -1
- package/dist/functional/optional/impl/optional-to-nullable.mjs +28 -5
- package/dist/functional/optional/impl/optional-to-nullable.mjs.map +1 -1
- package/dist/functional/optional/impl/optional-unwrap-or.mjs +12 -14
- package/dist/functional/optional/impl/optional-unwrap-or.mjs.map +1 -1
- package/dist/functional/optional/impl/optional-unwrap-throw.mjs +34 -9
- package/dist/functional/optional/impl/optional-unwrap-throw.mjs.map +1 -1
- package/dist/functional/optional/impl/optional-unwrap.mjs +6 -9
- package/dist/functional/optional/impl/optional-unwrap.mjs.map +1 -1
- package/dist/functional/optional/impl/optional-zip.mjs +36 -5
- package/dist/functional/optional/impl/optional-zip.mjs.map +1 -1
- package/dist/functional/optional/impl/tag.mjs +4 -5
- package/dist/functional/optional/impl/tag.mjs.map +1 -1
- package/dist/functional/optional/impl/types.mjs +2 -2
- package/dist/functional/optional/impl/types.mjs.map +1 -1
- package/dist/functional/optional/index.mjs +2 -3
- package/dist/functional/optional/index.mjs.map +1 -1
- package/dist/functional/optional/optional.mjs +2 -3
- package/dist/functional/optional/optional.mjs.map +1 -1
- package/dist/functional/pipe.mjs +42 -14
- package/dist/functional/pipe.mjs.map +1 -1
- package/dist/functional/result/impl/index.mjs +28 -27
- package/dist/functional/result/impl/index.mjs.map +1 -1
- package/dist/functional/result/impl/result-err.mjs +29 -7
- package/dist/functional/result/impl/result-err.mjs.map +1 -1
- package/dist/functional/result/impl/result-expect-to-be.mjs +17 -18
- package/dist/functional/result/impl/result-expect-to-be.mjs.map +1 -1
- package/dist/functional/result/impl/result-flat-map.mjs +18 -21
- package/dist/functional/result/impl/result-flat-map.mjs.map +1 -1
- package/dist/functional/result/impl/result-fold.mjs +18 -21
- package/dist/functional/result/impl/result-fold.mjs.map +1 -1
- package/dist/functional/result/impl/result-from-optional.mjs +17 -20
- package/dist/functional/result/impl/result-from-optional.mjs.map +1 -1
- package/dist/functional/result/impl/result-from-promise.mjs +37 -8
- package/dist/functional/result/impl/result-from-promise.mjs.map +1 -1
- package/dist/functional/result/impl/result-from-throwable.mjs +41 -14
- package/dist/functional/result/impl/result-from-throwable.mjs.map +1 -1
- package/dist/functional/result/impl/result-is-err.mjs +21 -5
- package/dist/functional/result/impl/result-is-err.mjs.map +1 -1
- package/dist/functional/result/impl/result-is-ok.mjs +21 -5
- package/dist/functional/result/impl/result-is-ok.mjs.map +1 -1
- package/dist/functional/result/impl/result-is-result.mjs +25 -7
- package/dist/functional/result/impl/result-is-result.mjs.map +1 -1
- package/dist/functional/result/impl/result-map-err.mjs +18 -21
- package/dist/functional/result/impl/result-map-err.mjs.map +1 -1
- package/dist/functional/result/impl/result-map.mjs +18 -21
- package/dist/functional/result/impl/result-map.mjs.map +1 -1
- package/dist/functional/result/impl/result-match.mjs +17 -21
- package/dist/functional/result/impl/result-match.mjs.map +1 -1
- package/dist/functional/result/impl/result-ok.mjs +29 -7
- package/dist/functional/result/impl/result-ok.mjs.map +1 -1
- package/dist/functional/result/impl/result-or-else.mjs +14 -15
- package/dist/functional/result/impl/result-or-else.mjs.map +1 -1
- package/dist/functional/result/impl/result-safe-try.mjs +32 -21
- package/dist/functional/result/impl/result-safe-try.mjs.map +1 -1
- package/dist/functional/result/impl/result-safe-unwrap.mjs +40 -12
- package/dist/functional/result/impl/result-safe-unwrap.mjs.map +1 -1
- package/dist/functional/result/impl/result-swap.mjs +23 -8
- package/dist/functional/result/impl/result-swap.mjs.map +1 -1
- package/dist/functional/result/impl/result-to-optional.mjs +30 -7
- package/dist/functional/result/impl/result-to-optional.mjs.map +1 -1
- package/dist/functional/result/impl/result-unwrap-err-or.mjs +13 -14
- package/dist/functional/result/impl/result-unwrap-err-or.mjs.map +1 -1
- package/dist/functional/result/impl/result-unwrap-err-throw.mjs +43 -20
- package/dist/functional/result/impl/result-unwrap-err-throw.mjs.map +1 -1
- package/dist/functional/result/impl/result-unwrap-err.mjs +33 -8
- package/dist/functional/result/impl/result-unwrap-err.mjs.map +1 -1
- package/dist/functional/result/impl/result-unwrap-ok-or.mjs +13 -14
- package/dist/functional/result/impl/result-unwrap-ok-or.mjs.map +1 -1
- package/dist/functional/result/impl/result-unwrap-ok.mjs +6 -9
- package/dist/functional/result/impl/result-unwrap-ok.mjs.map +1 -1
- package/dist/functional/result/impl/result-unwrap-throw.mjs +38 -11
- package/dist/functional/result/impl/result-unwrap-throw.mjs.map +1 -1
- package/dist/functional/result/impl/result-zip.mjs +35 -5
- package/dist/functional/result/impl/result-zip.mjs.map +1 -1
- package/dist/functional/result/impl/tag.mjs +4 -5
- package/dist/functional/result/impl/tag.mjs.map +1 -1
- package/dist/functional/result/impl/types.mjs +2 -2
- package/dist/functional/result/impl/types.mjs.map +1 -1
- package/dist/functional/result/index.mjs +2 -3
- package/dist/functional/result/index.mjs.map +1 -1
- package/dist/functional/result/result.mjs +2 -3
- package/dist/functional/result/result.mjs.map +1 -1
- package/dist/functional/ternary-result/impl/index.mjs +29 -28
- package/dist/functional/ternary-result/impl/index.mjs.map +1 -1
- package/dist/functional/ternary-result/impl/tag.mjs +6 -6
- package/dist/functional/ternary-result/impl/tag.mjs.map +1 -1
- package/dist/functional/ternary-result/impl/ternary-result-err.mjs +17 -7
- 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 +15 -18
- 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 +28 -32
- package/dist/functional/ternary-result/impl/ternary-result-flat-map.mjs.map +1 -1
- package/dist/functional/ternary-result/impl/ternary-result-fold.mjs +24 -26
- package/dist/functional/ternary-result/impl/ternary-result-fold.mjs.map +1 -1
- package/dist/functional/ternary-result/impl/ternary-result-from-promise.mjs +21 -8
- package/dist/functional/ternary-result/impl/ternary-result-from-promise.mjs.map +1 -1
- package/dist/functional/ternary-result/impl/ternary-result-from-throwable.mjs +28 -13
- package/dist/functional/ternary-result/impl/ternary-result-from-throwable.mjs.map +1 -1
- package/dist/functional/ternary-result/impl/ternary-result-is-err.mjs +19 -5
- package/dist/functional/ternary-result/impl/ternary-result-is-err.mjs.map +1 -1
- package/dist/functional/ternary-result/impl/ternary-result-is-ok.mjs +21 -5
- 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.mjs +28 -8
- 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.mjs +20 -5
- 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 +17 -18
- 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 +20 -23
- package/dist/functional/ternary-result/impl/ternary-result-map-warn.mjs.map +1 -1
- package/dist/functional/ternary-result/impl/ternary-result-map.mjs +24 -26
- package/dist/functional/ternary-result/impl/ternary-result-map.mjs.map +1 -1
- package/dist/functional/ternary-result/impl/ternary-result-ok.mjs +18 -7
- package/dist/functional/ternary-result/impl/ternary-result-ok.mjs.map +1 -1
- package/dist/functional/ternary-result/impl/ternary-result-or-else.mjs +11 -14
- package/dist/functional/ternary-result/impl/ternary-result-or-else.mjs.map +1 -1
- package/dist/functional/ternary-result/impl/ternary-result-to-optional.mjs +24 -10
- 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 +11 -14
- 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.mjs +30 -19
- 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.mjs +20 -8
- 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 +11 -14
- 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 +7 -9
- package/dist/functional/ternary-result/impl/ternary-result-unwrap-ok.mjs.map +1 -1
- package/dist/functional/ternary-result/impl/ternary-result-unwrap-throw.mjs +30 -22
- 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 +11 -14
- 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.mjs +27 -17
- 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.mjs +20 -8
- package/dist/functional/ternary-result/impl/ternary-result-unwrap-warn.mjs.map +1 -1
- package/dist/functional/ternary-result/impl/ternary-result-warn.mjs +21 -8
- package/dist/functional/ternary-result/impl/ternary-result-warn.mjs.map +1 -1
- package/dist/functional/ternary-result/impl/ternary-result-zip.mjs +47 -19
- package/dist/functional/ternary-result/impl/ternary-result-zip.mjs.map +1 -1
- package/dist/functional/ternary-result/impl/types.mjs +2 -2
- package/dist/functional/ternary-result/impl/types.mjs.map +1 -1
- package/dist/functional/ternary-result/impl/variant-name.mjs +12 -14
- package/dist/functional/ternary-result/impl/variant-name.mjs.map +1 -1
- package/dist/functional/ternary-result/index.mjs +2 -3
- package/dist/functional/ternary-result/index.mjs.map +1 -1
- package/dist/functional/ternary-result/ternary-result.mjs +2 -3
- package/dist/functional/ternary-result/ternary-result.mjs.map +1 -1
- package/dist/guard/has-key.mjs +43 -4
- package/dist/guard/has-key.mjs.map +1 -1
- package/dist/guard/index.mjs +8 -8
- package/dist/guard/index.mjs.map +1 -1
- package/dist/guard/is-non-empty-string.mjs +39 -4
- package/dist/guard/is-non-empty-string.mjs.map +1 -1
- package/dist/guard/is-non-null-object.mjs +36 -4
- package/dist/guard/is-non-null-object.mjs.map +1 -1
- package/dist/guard/is-primitive.mjs +46 -15
- package/dist/guard/is-primitive.mjs.map +1 -1
- package/dist/guard/is-record.mjs +89 -6
- package/dist/guard/is-record.mjs.map +1 -1
- package/dist/guard/is-type.mjs +404 -19
- package/dist/guard/is-type.mjs.map +1 -1
- package/dist/guard/key-is-in.mjs +42 -4
- package/dist/guard/key-is-in.mjs.map +1 -1
- package/dist/index.mjs +12 -65
- package/dist/index.mjs.map +1 -1
- package/dist/iterator/index.mjs +2 -2
- package/dist/iterator/index.mjs.map +1 -1
- package/dist/iterator/range.mjs +19 -57
- package/dist/iterator/range.mjs.map +1 -1
- package/dist/json/index.mjs +2 -2
- package/dist/json/index.mjs.map +1 -1
- package/dist/json/json.mjs +346 -105
- package/dist/json/json.mjs.map +1 -1
- package/dist/number/branded-types/finite-number.mjs +148 -137
- package/dist/number/branded-types/finite-number.mjs.map +1 -1
- package/dist/number/branded-types/index.mjs +33 -33
- package/dist/number/branded-types/index.mjs.map +1 -1
- package/dist/number/branded-types/int.mjs +245 -209
- package/dist/number/branded-types/int.mjs.map +1 -1
- package/dist/number/branded-types/int16.mjs +141 -131
- package/dist/number/branded-types/int16.mjs.map +1 -1
- package/dist/number/branded-types/int32.mjs +141 -131
- package/dist/number/branded-types/int32.mjs.map +1 -1
- package/dist/number/branded-types/negative-finite-number.mjs +155 -149
- package/dist/number/branded-types/negative-finite-number.mjs.map +1 -1
- package/dist/number/branded-types/negative-int.mjs +125 -110
- package/dist/number/branded-types/negative-int.mjs.map +1 -1
- package/dist/number/branded-types/negative-safe-int.mjs +126 -115
- package/dist/number/branded-types/negative-safe-int.mjs.map +1 -1
- package/dist/number/branded-types/non-negative-finite-number.mjs +164 -154
- package/dist/number/branded-types/non-negative-finite-number.mjs.map +1 -1
- package/dist/number/branded-types/non-negative-int16.mjs +137 -125
- package/dist/number/branded-types/non-negative-int16.mjs.map +1 -1
- package/dist/number/branded-types/non-negative-int32.mjs +137 -125
- package/dist/number/branded-types/non-negative-int32.mjs.map +1 -1
- package/dist/number/branded-types/non-positive-finite-number.mjs +143 -139
- package/dist/number/branded-types/non-positive-finite-number.mjs.map +1 -1
- package/dist/number/branded-types/non-positive-int.mjs +116 -99
- package/dist/number/branded-types/non-positive-int.mjs.map +1 -1
- package/dist/number/branded-types/non-positive-safe-int.mjs +118 -107
- package/dist/number/branded-types/non-positive-safe-int.mjs.map +1 -1
- package/dist/number/branded-types/non-zero-finite-number.mjs +144 -129
- package/dist/number/branded-types/non-zero-finite-number.mjs.map +1 -1
- package/dist/number/branded-types/non-zero-int.mjs +102 -82
- package/dist/number/branded-types/non-zero-int.mjs.map +1 -1
- package/dist/number/branded-types/non-zero-int16.mjs +118 -105
- package/dist/number/branded-types/non-zero-int16.mjs.map +1 -1
- package/dist/number/branded-types/non-zero-int32.mjs +118 -105
- package/dist/number/branded-types/non-zero-int32.mjs.map +1 -1
- package/dist/number/branded-types/non-zero-safe-int.mjs +122 -108
- package/dist/number/branded-types/non-zero-safe-int.mjs.map +1 -1
- package/dist/number/branded-types/non-zero-uint16.mjs +118 -104
- package/dist/number/branded-types/non-zero-uint16.mjs.map +1 -1
- package/dist/number/branded-types/non-zero-uint32.mjs +118 -104
- package/dist/number/branded-types/non-zero-uint32.mjs.map +1 -1
- package/dist/number/branded-types/positive-finite-number.mjs +167 -160
- package/dist/number/branded-types/positive-finite-number.mjs.map +1 -1
- package/dist/number/branded-types/positive-int.mjs +260 -224
- package/dist/number/branded-types/positive-int.mjs.map +1 -1
- package/dist/number/branded-types/positive-int16.mjs +134 -122
- package/dist/number/branded-types/positive-int16.mjs.map +1 -1
- package/dist/number/branded-types/positive-int32.mjs +134 -122
- package/dist/number/branded-types/positive-int32.mjs.map +1 -1
- package/dist/number/branded-types/positive-safe-int.mjs +292 -258
- package/dist/number/branded-types/positive-safe-int.mjs.map +1 -1
- package/dist/number/branded-types/positive-uint16.mjs +134 -122
- package/dist/number/branded-types/positive-uint16.mjs.map +1 -1
- package/dist/number/branded-types/positive-uint32.mjs +134 -122
- package/dist/number/branded-types/positive-uint32.mjs.map +1 -1
- package/dist/number/branded-types/safe-int.mjs +284 -255
- package/dist/number/branded-types/safe-int.mjs.map +1 -1
- package/dist/number/branded-types/safe-uint.mjs +135 -124
- package/dist/number/branded-types/safe-uint.mjs.map +1 -1
- package/dist/number/branded-types/uint.mjs +248 -211
- package/dist/number/branded-types/uint.mjs.map +1 -1
- package/dist/number/branded-types/uint16.mjs +132 -121
- package/dist/number/branded-types/uint16.mjs.map +1 -1
- package/dist/number/branded-types/uint32.mjs +132 -121
- package/dist/number/branded-types/uint32.mjs.map +1 -1
- package/dist/number/enum/index.mjs +3 -3
- package/dist/number/enum/index.mjs.map +1 -1
- package/dist/number/enum/int8.mjs +146 -131
- package/dist/number/enum/int8.mjs.map +1 -1
- package/dist/number/enum/uint8.mjs +133 -119
- package/dist/number/enum/uint8.mjs.map +1 -1
- package/dist/number/index.mjs +6 -37
- package/dist/number/index.mjs.map +1 -1
- package/dist/number/num-arithmetic-types.mjs +42 -1
- package/dist/number/num-arithmetic-types.mjs.map +1 -1
- package/dist/number/num.mjs +541 -83
- package/dist/number/num.mjs.map +1 -1
- package/dist/number/refined-number-utils.mjs +294 -133
- package/dist/number/refined-number-utils.mjs.map +1 -1
- package/dist/object/index.mjs +2 -2
- package/dist/object/index.mjs.map +1 -1
- package/dist/object/object.mjs +355 -202
- package/dist/object/object.mjs.map +1 -1
- package/dist/others/cast-mutable.mjs +38 -11
- package/dist/others/cast-mutable.mjs.map +1 -1
- package/dist/others/cast-readonly.mjs +37 -11
- package/dist/others/cast-readonly.mjs.map +1 -1
- package/dist/others/debounce-function.mjs +22 -11
- package/dist/others/debounce-function.mjs.map +1 -1
- package/dist/others/fast-deep-equal.mjs +70 -51
- package/dist/others/fast-deep-equal.mjs.map +1 -1
- package/dist/others/if-then.mjs +32 -5
- package/dist/others/if-then.mjs.map +1 -1
- package/dist/others/index.mjs +10 -10
- package/dist/others/index.mjs.map +1 -1
- package/dist/others/map-nullable.mjs +11 -13
- package/dist/others/map-nullable.mjs.map +1 -1
- package/dist/others/memoize-function.mjs +14 -16
- package/dist/others/memoize-function.mjs.map +1 -1
- package/dist/others/tuple.mjs +52 -4
- package/dist/others/tuple.mjs.map +1 -1
- package/dist/others/unknown-to-string.mjs +91 -47
- package/dist/others/unknown-to-string.mjs.map +1 -1
- package/dist/promise/index.mjs +2 -2
- package/dist/promise/index.mjs.map +1 -1
- package/dist/promise/promise.mjs +51 -10
- package/dist/promise/promise.mjs.map +1 -1
- package/dist/string/index.mjs +2 -2
- package/dist/string/index.mjs.map +1 -1
- package/dist/string/str.mjs +250 -83
- package/dist/string/str.mjs.map +1 -1
- package/dist/types.mjs +3 -2
- package/dist/types.mjs.map +1 -1
- package/package.json +5 -6
- package/src/array/impl/array-utils-length-constraint-preservation.test.mts +2 -2
- package/src/collections/imap-mapped.mts +4 -4
- package/src/collections/imap.mts +1 -1
- package/src/collections/imap.test.mts +1 -1
- package/src/collections/iset-mapped.mts +2 -1
- package/src/collections/iset.mts +1 -1
- package/src/functional/async-result.test.mts +3 -2
- package/src/functional/optional.test.mts +2 -1
- package/src/functional/result.test.mts +0 -2
- package/src/guard/is-non-empty-string.test.mts +2 -2
- package/src/guard/is-non-null-object.test.mts +3 -3
- package/src/guard/is-primitive.test.mts +3 -3
- package/src/guard/is-type.test.mts +3 -3
- package/src/json/json.test.mts +1 -1
- package/src/number/enum/int8.mts +1 -1
package/dist/string/str.mjs
CHANGED
|
@@ -1,88 +1,255 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
1
|
+
/**
|
|
2
|
+
* Namespace providing type guards and runtime-checked casts for the branded
|
|
3
|
+
* length-constrained string types (`MinLengthString`, `MaxLengthString`,
|
|
4
|
+
* `BoundedLengthString`, `FixedLengthString`).
|
|
5
|
+
*
|
|
6
|
+
* Lengths are measured in UTF-16 code units (the same unit as
|
|
7
|
+
* `String.prototype.length`), so characters outside the Basic Multilingual
|
|
8
|
+
* Plane (e.g. emoji) count as 2.
|
|
9
|
+
*/
|
|
10
|
+
export var Str;
|
|
11
|
+
(function (Str) {
|
|
12
|
+
/**
|
|
13
|
+
* Type guard that checks if a string has at least `minLength` characters.
|
|
14
|
+
*
|
|
15
|
+
* **Type Narrowing Behavior:**
|
|
16
|
+
*
|
|
17
|
+
* - Narrows the input to `MinLengthString<MinLength>` while preserving the
|
|
18
|
+
* original string type (e.g. literal types) via intersection.
|
|
19
|
+
* - The result participates in the length-constraint subtyping relation: for
|
|
20
|
+
* example, a value narrowed to `MinLengthString<3>` is assignable to
|
|
21
|
+
* `MinLengthString<1>` (= `NonEmptyString`).
|
|
22
|
+
*
|
|
23
|
+
* @example
|
|
24
|
+
*
|
|
25
|
+
* ```ts
|
|
26
|
+
* const input: string = 'very-secret-password';
|
|
27
|
+
*
|
|
28
|
+
* assert.isTrue(Str.isMinLengthString(12, input));
|
|
29
|
+
*
|
|
30
|
+
* assert.isFalse(Str.isMinLengthString(12, 'short'));
|
|
31
|
+
*
|
|
32
|
+
* if (Str.isMinLengthString(12, input)) {
|
|
33
|
+
* const nonEmpty: NonEmptyString = input; // OK (12 >= 1)
|
|
34
|
+
*
|
|
35
|
+
* assert.isTrue(nonEmpty.length >= 12);
|
|
36
|
+
* }
|
|
37
|
+
* ```
|
|
38
|
+
*
|
|
39
|
+
* @template MinLength - The minimum number of characters (inclusive).
|
|
40
|
+
* @template S - The input string type (literal types are preserved).
|
|
41
|
+
* @param minLength - The minimum number of characters (inclusive).
|
|
42
|
+
* @param s - The string to check.
|
|
43
|
+
* @returns `true` if `s.length >= minLength`, `false` otherwise. When `true`,
|
|
44
|
+
* TypeScript narrows `s` to `MinLengthString<MinLength> & S`.
|
|
45
|
+
*/
|
|
46
|
+
Str.isMinLengthString = (minLength, s) => s.length >= minLength;
|
|
47
|
+
/**
|
|
48
|
+
* Type guard that checks if a string has at most `maxLength` characters.
|
|
49
|
+
*
|
|
50
|
+
* **Type Narrowing Behavior:**
|
|
51
|
+
*
|
|
52
|
+
* - Narrows the input to `MaxLengthString<MaxLength>` while preserving the
|
|
53
|
+
* original string type (e.g. literal types) via intersection.
|
|
54
|
+
* - The result participates in the length-constraint subtyping relation: for
|
|
55
|
+
* example, a value narrowed to `MaxLengthString<16>` is assignable to
|
|
56
|
+
* `MaxLengthString<32>`.
|
|
57
|
+
*
|
|
58
|
+
* @example
|
|
59
|
+
*
|
|
60
|
+
* ```ts
|
|
61
|
+
* const input: string = 'noshiro';
|
|
62
|
+
*
|
|
63
|
+
* assert.isTrue(Str.isMaxLengthString(32, input));
|
|
64
|
+
*
|
|
65
|
+
* assert.isFalse(Str.isMaxLengthString(3, input));
|
|
66
|
+
*
|
|
67
|
+
* if (Str.isMaxLengthString(32, input)) {
|
|
68
|
+
* const relaxed: MaxLengthString<64> = input; // OK (32 <= 64)
|
|
69
|
+
*
|
|
70
|
+
* assert.isTrue(relaxed.length <= 32);
|
|
71
|
+
* }
|
|
72
|
+
* ```
|
|
73
|
+
*
|
|
74
|
+
* @template MaxLength - The maximum number of characters (inclusive).
|
|
75
|
+
* @template S - The input string type (literal types are preserved).
|
|
76
|
+
* @param maxLength - The maximum number of characters (inclusive).
|
|
77
|
+
* @param s - The string to check.
|
|
78
|
+
* @returns `true` if `s.length <= maxLength`, `false` otherwise. When `true`,
|
|
79
|
+
* TypeScript narrows `s` to `MaxLengthString<MaxLength> & S`.
|
|
80
|
+
*/
|
|
81
|
+
Str.isMaxLengthString = (maxLength, s) => s.length <= maxLength;
|
|
82
|
+
/**
|
|
83
|
+
* Type guard that checks if a string's length is within the inclusive range
|
|
84
|
+
* `[minLength, maxLength]`.
|
|
85
|
+
*
|
|
86
|
+
* **Type Narrowing Behavior:**
|
|
87
|
+
*
|
|
88
|
+
* - Narrows the input to `BoundedLengthString<MinLength, MaxLength>` while
|
|
89
|
+
* preserving the original string type (e.g. literal types) via intersection.
|
|
90
|
+
* - Since `BoundedLengthString` is the intersection of `MinLengthString` and
|
|
91
|
+
* `MaxLengthString`, the narrowed value is assignable to both, and both
|
|
92
|
+
* bounds can be weakened independently.
|
|
93
|
+
*
|
|
94
|
+
* @example
|
|
95
|
+
*
|
|
96
|
+
* ```ts
|
|
97
|
+
* const input: string = 'user-12345678';
|
|
98
|
+
*
|
|
99
|
+
* assert.isTrue(Str.isBoundedLengthString(8, 16, input));
|
|
100
|
+
*
|
|
101
|
+
* assert.isFalse(Str.isBoundedLengthString(8, 16, 'user'));
|
|
102
|
+
*
|
|
103
|
+
* if (Str.isBoundedLengthString(8, 16, input)) {
|
|
104
|
+
* const userId: BoundedLengthString<1, 255> = input; // OK ([8, 16] ⊆ [1, 255])
|
|
105
|
+
*
|
|
106
|
+
* assert.isTrue(userId.length >= 8 && userId.length <= 16);
|
|
107
|
+
* }
|
|
108
|
+
* ```
|
|
109
|
+
*
|
|
110
|
+
* @template MinLength - The minimum number of characters (inclusive).
|
|
111
|
+
* @template MaxLength - The maximum number of characters (inclusive).
|
|
112
|
+
* @template S - The input string type (literal types are preserved).
|
|
113
|
+
* @param minLength - The minimum number of characters (inclusive).
|
|
114
|
+
* @param maxLength - The maximum number of characters (inclusive).
|
|
115
|
+
* @param s - The string to check.
|
|
116
|
+
* @returns `true` if `minLength <= s.length && s.length <= maxLength`, `false`
|
|
117
|
+
* otherwise. When `true`, TypeScript narrows `s` to
|
|
118
|
+
* `BoundedLengthString<MinLength, MaxLength> & S`.
|
|
119
|
+
*/
|
|
120
|
+
Str.isBoundedLengthString = (minLength, maxLength, s) => s.length >= minLength && s.length <= maxLength;
|
|
121
|
+
/**
|
|
122
|
+
* Type guard that checks if a string has exactly `length` characters.
|
|
123
|
+
*
|
|
124
|
+
* **Type Narrowing Behavior:**
|
|
125
|
+
*
|
|
126
|
+
* - Narrows the input to `FixedLengthString<Length>` while preserving the
|
|
127
|
+
* original string type (e.g. literal types) via intersection.
|
|
128
|
+
* - Since `FixedLengthString<Length>` is defined as
|
|
129
|
+
* `BoundedLengthString<Length, Length>`, the narrowed value is assignable to
|
|
130
|
+
* any `MinLengthString<N>` with `N <= Length` and any `MaxLengthString<N>`
|
|
131
|
+
* with `N >= Length`.
|
|
132
|
+
*
|
|
133
|
+
* @example
|
|
134
|
+
*
|
|
135
|
+
* ```ts
|
|
136
|
+
* const input: string = 'JP';
|
|
137
|
+
*
|
|
138
|
+
* assert.isTrue(Str.isFixedLengthString(2, input));
|
|
139
|
+
*
|
|
140
|
+
* assert.isFalse(Str.isFixedLengthString(3, input));
|
|
141
|
+
*
|
|
142
|
+
* if (Str.isFixedLengthString(2, input)) {
|
|
143
|
+
* const atMost5: MaxLengthString<5> = input; // OK (2 <= 5)
|
|
144
|
+
*
|
|
145
|
+
* assert.isTrue(atMost5.length === 2);
|
|
146
|
+
* }
|
|
147
|
+
* ```
|
|
148
|
+
*
|
|
149
|
+
* @template Length - The exact number of characters.
|
|
150
|
+
* @template S - The input string type (literal types are preserved).
|
|
151
|
+
* @param length - The exact number of characters.
|
|
152
|
+
* @param s - The string to check.
|
|
153
|
+
* @returns `true` if `s.length === length`, `false` otherwise. When `true`,
|
|
154
|
+
* TypeScript narrows `s` to `FixedLengthString<Length> & S`.
|
|
155
|
+
*/
|
|
156
|
+
Str.isFixedLengthString = (length, s) => s.length === length;
|
|
157
|
+
function asMinLengthString(...args) {
|
|
158
|
+
switch (args.length) {
|
|
159
|
+
case 2:
|
|
160
|
+
return asMinLengthStringImpl(...args);
|
|
161
|
+
case 1:
|
|
162
|
+
return (s) => asMinLengthStringImpl(args[0], s);
|
|
163
|
+
}
|
|
13
164
|
}
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
165
|
+
Str.asMinLengthString = asMinLengthString;
|
|
166
|
+
const asMinLengthStringImpl = (minLength, s) => {
|
|
167
|
+
const actualLength = s.length;
|
|
168
|
+
if (!Str.isMinLengthString(minLength, s)) {
|
|
169
|
+
throw new TypeError(`Expected a string of length >= ${minLength}, got a string of length ${actualLength}`);
|
|
170
|
+
}
|
|
171
|
+
return s;
|
|
172
|
+
};
|
|
173
|
+
function asMaxLengthString(...args) {
|
|
174
|
+
switch (args.length) {
|
|
175
|
+
case 2:
|
|
176
|
+
return asMaxLengthStringImpl(...args);
|
|
177
|
+
case 1:
|
|
178
|
+
return (s) => asMaxLengthStringImpl(args[0], s);
|
|
179
|
+
}
|
|
22
180
|
}
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
181
|
+
Str.asMaxLengthString = asMaxLengthString;
|
|
182
|
+
const asMaxLengthStringImpl = (maxLength, s) => {
|
|
183
|
+
const actualLength = s.length;
|
|
184
|
+
if (!Str.isMaxLengthString(maxLength, s)) {
|
|
185
|
+
throw new TypeError(`Expected a string of length <= ${maxLength}, got a string of length ${actualLength}`);
|
|
186
|
+
}
|
|
187
|
+
return s;
|
|
188
|
+
};
|
|
189
|
+
function asBoundedLengthString(...args) {
|
|
190
|
+
switch (args.length) {
|
|
191
|
+
case 3:
|
|
192
|
+
return asBoundedLengthStringImpl(...args);
|
|
193
|
+
case 2:
|
|
194
|
+
return (s) => asBoundedLengthStringImpl(...args, s);
|
|
195
|
+
}
|
|
31
196
|
}
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
197
|
+
Str.asBoundedLengthString = asBoundedLengthString;
|
|
198
|
+
const asBoundedLengthStringImpl = (minLength, maxLength, s) => {
|
|
199
|
+
const actualLength = s.length;
|
|
200
|
+
if (!Str.isBoundedLengthString(minLength, maxLength, s)) {
|
|
201
|
+
throw new TypeError(`Expected a string of length in [${minLength}, ${maxLength}], got a string of length ${actualLength}`);
|
|
202
|
+
}
|
|
203
|
+
return s;
|
|
204
|
+
};
|
|
205
|
+
function asFixedLengthString(...args) {
|
|
206
|
+
switch (args.length) {
|
|
207
|
+
case 2:
|
|
208
|
+
return asFixedLengthStringImpl(...args);
|
|
209
|
+
case 1:
|
|
210
|
+
return (s) => asFixedLengthStringImpl(args[0], s);
|
|
211
|
+
}
|
|
40
212
|
}
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
}
|
|
83
|
-
return s;
|
|
84
|
-
};
|
|
213
|
+
Str.asFixedLengthString = asFixedLengthString;
|
|
214
|
+
const asFixedLengthStringImpl = (length, s) => {
|
|
215
|
+
const actualLength = s.length;
|
|
216
|
+
if (!Str.isFixedLengthString(length, s)) {
|
|
217
|
+
throw new TypeError(`Expected a string of length ${length}, got a string of length ${actualLength}`);
|
|
218
|
+
}
|
|
219
|
+
return s;
|
|
220
|
+
};
|
|
221
|
+
/**
|
|
222
|
+
* Casts a string to `NonEmptyString` after checking that it has at least one
|
|
223
|
+
* character.
|
|
224
|
+
*
|
|
225
|
+
* `NonEmptyString` is an alias of `MinLengthString<1>`, so this is the
|
|
226
|
+
* length-1 specialization of {@link asMinLengthString}. Use this instead of
|
|
227
|
+
* writing `s as unknown as NonEmptyString`: the length is verified at
|
|
228
|
+
* runtime, and the original string type (e.g. literal types) is preserved
|
|
229
|
+
* via intersection.
|
|
230
|
+
*
|
|
231
|
+
* @example
|
|
232
|
+
*
|
|
233
|
+
* ```ts
|
|
234
|
+
* const name = Str.asNonEmptyString('noshiro');
|
|
235
|
+
*
|
|
236
|
+
* const nonEmpty: NonEmptyString = name; // OK
|
|
237
|
+
*
|
|
238
|
+
* assert.isTrue(nonEmpty.length >= 1);
|
|
239
|
+
*
|
|
240
|
+
* assert.throws(() => Str.asNonEmptyString('')); // length 0 < 1
|
|
241
|
+
* ```
|
|
242
|
+
*
|
|
243
|
+
* @template S - The input string type (literal types are preserved).
|
|
244
|
+
* @param s - The string to cast.
|
|
245
|
+
* @returns `s` typed as `NonEmptyString & S`.
|
|
246
|
+
* @throws {TypeError} If `s` is empty.
|
|
247
|
+
*/
|
|
248
|
+
Str.asNonEmptyString = (s) => {
|
|
249
|
+
if (!Str.isMinLengthString(1, s)) {
|
|
250
|
+
throw new TypeError('Expected a non-empty string, got an empty string');
|
|
251
|
+
}
|
|
252
|
+
return s;
|
|
253
|
+
};
|
|
85
254
|
})(Str || (Str = {}));
|
|
86
|
-
|
|
87
|
-
export { Str };
|
|
88
|
-
//# sourceMappingURL=str.mjs.map
|
|
255
|
+
//# sourceMappingURL=str.mjs.map
|
package/dist/string/str.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"str.mjs","sources":["../../src/string/str.mts"],"sourcesContent":["import {\n type BoundedLengthString,\n type FixedLengthString,\n type MaxLengthString,\n type MinLengthString,\n type NonEmptyString,\n type SupportedLength,\n} from 'ts-type-forge';\n\n/**\n * Namespace providing type guards and runtime-checked casts for the branded\n * length-constrained string types (`MinLengthString`, `MaxLengthString`,\n * `BoundedLengthString`, `FixedLengthString`).\n *\n * Lengths are 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 */\nexport namespace Str {\n /**\n * Type guard that checks if a string has at least `minLength` characters.\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(Str.isMinLengthString(12, input));\n *\n * assert.isFalse(Str.isMinLengthString(12, 'short'));\n *\n * if (Str.isMinLengthString(12, input)) {\n * const nonEmpty: NonEmptyString = input; // OK (12 >= 1)\n *\n * assert.isTrue(nonEmpty.length >= 12);\n * }\n * ```\n *\n * @template MinLength - The minimum number of characters (inclusive).\n * @template S - The input string type (literal types are preserved).\n * @param minLength - The minimum number of characters (inclusive).\n * @param s - The string to check.\n * @returns `true` if `s.length >= minLength`, `false` otherwise. When `true`,\n * TypeScript narrows `s` to `MinLengthString<MinLength> & S`.\n */\n export const isMinLengthString = <\n MinLength extends SupportedLength,\n S extends string,\n >(\n minLength: MinLength,\n s: S,\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 * **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(Str.isMaxLengthString(32, input));\n *\n * assert.isFalse(Str.isMaxLengthString(3, input));\n *\n * if (Str.isMaxLengthString(32, input)) {\n * const relaxed: MaxLengthString<64> = input; // OK (32 <= 64)\n *\n * assert.isTrue(relaxed.length <= 32);\n * }\n * ```\n *\n * @template MaxLength - The maximum number of characters (inclusive).\n * @template S - The input string type (literal types are preserved).\n * @param maxLength - The maximum number of characters (inclusive).\n * @param s - The string to check.\n * @returns `true` if `s.length <= maxLength`, `false` otherwise. When `true`,\n * TypeScript narrows `s` to `MaxLengthString<MaxLength> & S`.\n */\n export const isMaxLengthString = <\n MaxLength extends SupportedLength,\n S extends string,\n >(\n maxLength: MaxLength,\n s: S,\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 * **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(Str.isBoundedLengthString(8, 16, input));\n *\n * assert.isFalse(Str.isBoundedLengthString(8, 16, 'user'));\n *\n * if (Str.isBoundedLengthString(8, 16, input)) {\n * const userId: BoundedLengthString<1, 255> = input; // OK ([8, 16] ⊆ [1, 255])\n *\n * assert.isTrue(userId.length >= 8 && userId.length <= 16);\n * }\n * ```\n *\n * @template MinLength - The minimum number of characters (inclusive).\n * @template MaxLength - The maximum number of characters (inclusive).\n * @template S - The input string type (literal types are preserved).\n * @param minLength - The minimum number of characters (inclusive).\n * @param maxLength - The maximum number of characters (inclusive).\n * @param s - The string to check.\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 */\n export const isBoundedLengthString = <\n MinLength extends SupportedLength,\n MaxLength extends SupportedLength,\n S extends string,\n >(\n minLength: MinLength,\n maxLength: MaxLength,\n s: S,\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 * **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(Str.isFixedLengthString(2, input));\n *\n * assert.isFalse(Str.isFixedLengthString(3, input));\n *\n * if (Str.isFixedLengthString(2, input)) {\n * const atMost5: MaxLengthString<5> = input; // OK (2 <= 5)\n *\n * assert.isTrue(atMost5.length === 2);\n * }\n * ```\n *\n * @template Length - The exact number of characters.\n * @template S - The input string type (literal types are preserved).\n * @param length - The exact number of characters.\n * @param s - The string to check.\n * @returns `true` if `s.length === length`, `false` otherwise. When `true`,\n * TypeScript narrows `s` to `FixedLengthString<Length> & S`.\n */\n export const isFixedLengthString = <\n Length extends SupportedLength,\n S extends string,\n >(\n length: Length,\n s: S,\n ): s is FixedLengthString<Length> & S => s.length === length;\n\n /**\n * Casts a string to `MinLengthString<MinLength>` after checking that it has\n * at least `minLength` characters.\n *\n * Use this instead of writing `s as unknown as MinLengthString<N>`: the\n * length is verified at runtime, and the original string type (e.g. literal\n * types) is preserved via intersection.\n *\n * Supports a curried overload: calling it with only `minLength` returns a\n * function that casts a string, which is convenient for `pipe`/`map`.\n *\n * @example\n *\n * ```ts\n * const password = Str.asMinLengthString(12, 'very-secret-password');\n *\n * const nonEmpty: NonEmptyString = password; // OK (>= 1)\n *\n * assert.isTrue(nonEmpty.length >= 12);\n *\n * // curried version\n * const asPassword = Str.asMinLengthString(12);\n *\n * assert.strictEqual(asPassword('another-secret'), 'another-secret');\n *\n * assert.throws(() => Str.asMinLengthString(12, 'short')); // length 5 < 12\n * ```\n *\n * @template MinLength - The minimum number of characters (inclusive).\n * @template S - The input string type (literal types are preserved).\n * @param minLength - The minimum number of characters (inclusive).\n * @param s - The string to cast.\n * @returns `s` typed as `MinLengthString<MinLength> & S`.\n * @throws {TypeError} If `s.length < minLength`.\n */\n export function asMinLengthString<\n MinLength extends SupportedLength,\n S extends string,\n >(minLength: MinLength, s: S): MinLengthString<MinLength> & S;\n\n // Curried version\n export function asMinLengthString<MinLength extends SupportedLength>(\n minLength: MinLength,\n ): <S extends string>(s: S) => MinLengthString<MinLength> & S;\n\n export function asMinLengthString(\n ...args:\n | readonly [minLength: SupportedLength, s: string]\n | readonly [minLength: SupportedLength]\n ): string | ((s: string) => string) {\n switch (args.length) {\n case 2:\n return asMinLengthStringImpl(...args);\n\n case 1:\n return (s) => asMinLengthStringImpl(args[0], s);\n }\n }\n\n const asMinLengthStringImpl = (\n minLength: SupportedLength,\n s: string,\n ): string => {\n const actualLength = s.length;\n\n if (!isMinLengthString(minLength, s)) {\n throw new TypeError(\n `Expected a string of length >= ${minLength}, got a string of length ${actualLength}`,\n );\n }\n\n return s;\n };\n\n /**\n * Casts a string to `MaxLengthString<MaxLength>` after checking that it has\n * at most `maxLength` characters.\n *\n * Use this instead of writing `s as unknown as MaxLengthString<N>`: the\n * length is verified at runtime, and the original string type (e.g. literal\n * types) is preserved via intersection.\n *\n * Supports a curried overload: calling it with only `maxLength` returns a\n * function that casts a string, which is convenient for `pipe`/`map`.\n *\n * @example\n *\n * ```ts\n * const userName = Str.asMaxLengthString(32, 'noshiro');\n *\n * const relaxed: MaxLengthString<64> = userName; // OK (32 <= 64)\n *\n * assert.isTrue(relaxed.length <= 32);\n *\n * // curried version\n * const asUserName = Str.asMaxLengthString(32);\n *\n * assert.strictEqual(asUserName('another-user'), 'another-user');\n *\n * assert.throws(() => Str.asMaxLengthString(3, 'noshiro')); // length 7 > 3\n * ```\n *\n * @template MaxLength - The maximum number of characters (inclusive).\n * @template S - The input string type (literal types are preserved).\n * @param maxLength - The maximum number of characters (inclusive).\n * @param s - The string to cast.\n * @returns `s` typed as `MaxLengthString<MaxLength> & S`.\n * @throws {TypeError} If `s.length > maxLength`.\n */\n export function asMaxLengthString<\n MaxLength extends SupportedLength,\n S extends string,\n >(maxLength: MaxLength, s: S): MaxLengthString<MaxLength> & S;\n\n // Curried version\n export function asMaxLengthString<MaxLength extends SupportedLength>(\n maxLength: MaxLength,\n ): <S extends string>(s: S) => MaxLengthString<MaxLength> & S;\n\n export function asMaxLengthString(\n ...args:\n | readonly [maxLength: SupportedLength, s: string]\n | readonly [maxLength: SupportedLength]\n ): string | ((s: string) => string) {\n switch (args.length) {\n case 2:\n return asMaxLengthStringImpl(...args);\n\n case 1:\n return (s) => asMaxLengthStringImpl(args[0], s);\n }\n }\n\n const asMaxLengthStringImpl = (\n maxLength: SupportedLength,\n s: string,\n ): string => {\n const actualLength = s.length;\n\n if (!isMaxLengthString(maxLength, s)) {\n throw new TypeError(\n `Expected a string of length <= ${maxLength}, got a string of length ${actualLength}`,\n );\n }\n\n return s;\n };\n\n /**\n * Casts a string to `BoundedLengthString<MinLength, MaxLength>` after\n * checking that its length is within the inclusive range\n * `[minLength, maxLength]`.\n *\n * Use this instead of writing `s as unknown as BoundedLengthString<M, N>`:\n * the length is verified at runtime, and the original string type (e.g.\n * literal types) is preserved via intersection.\n *\n * Supports a curried overload: calling it with only `minLength` and\n * `maxLength` returns a function that casts a string, which is convenient for\n * `pipe`/`map`.\n *\n * @example\n *\n * ```ts\n * const userId = Str.asBoundedLengthString(8, 16, 'user-12345678');\n *\n * const relaxed: BoundedLengthString<1, 255> = userId; // OK ([8, 16] ⊆ [1, 255])\n *\n * assert.isTrue(relaxed.length >= 8 && relaxed.length <= 16);\n *\n * // curried version\n * const asUserId = Str.asBoundedLengthString(8, 16);\n *\n * assert.strictEqual(asUserId('user-87654321'), 'user-87654321');\n *\n * assert.throws(() => Str.asBoundedLengthString(8, 16, 'user')); // length 4 < 8\n * ```\n *\n * @template MinLength - The minimum number of characters (inclusive).\n * @template MaxLength - The maximum number of characters (inclusive).\n * @template S - The input string type (literal types are preserved).\n * @param minLength - The minimum number of characters (inclusive).\n * @param maxLength - The maximum number of characters (inclusive).\n * @param s - The string to cast.\n * @returns `s` typed as `BoundedLengthString<MinLength, MaxLength> & S`.\n * @throws {TypeError} If `s.length < minLength` or `s.length > maxLength`.\n */\n export function asBoundedLengthString<\n MinLength extends SupportedLength,\n MaxLength extends SupportedLength,\n S extends string,\n >(\n minLength: MinLength,\n maxLength: MaxLength,\n s: S,\n ): BoundedLengthString<MinLength, MaxLength> & S;\n\n // Curried version\n export function asBoundedLengthString<\n MinLength extends SupportedLength,\n MaxLength extends SupportedLength,\n >(\n minLength: MinLength,\n maxLength: MaxLength,\n ): <S extends string>(s: S) => BoundedLengthString<MinLength, MaxLength> & S;\n\n export function asBoundedLengthString(\n ...args:\n | readonly [\n minLength: SupportedLength,\n maxLength: SupportedLength,\n s: string,\n ]\n | readonly [minLength: SupportedLength, maxLength: SupportedLength]\n ): string | ((s: string) => string) {\n switch (args.length) {\n case 3:\n return asBoundedLengthStringImpl(...args);\n\n case 2:\n return (s) => asBoundedLengthStringImpl(...args, s);\n }\n }\n\n const asBoundedLengthStringImpl = (\n minLength: SupportedLength,\n maxLength: SupportedLength,\n s: string,\n ): string => {\n const actualLength = s.length;\n\n if (!isBoundedLengthString(minLength, maxLength, s)) {\n throw new TypeError(\n `Expected a string of length in [${minLength}, ${maxLength}], got a string of length ${actualLength}`,\n );\n }\n\n return s;\n };\n\n /**\n * Casts a string to `FixedLengthString<Length>` after checking that it has\n * exactly `length` characters.\n *\n * Use this instead of writing `s as unknown as FixedLengthString<N>`: the\n * length is verified at runtime, and the original string type (e.g. literal\n * types) is preserved via intersection.\n *\n * Supports a curried overload: calling it with only `length` returns a\n * function that casts a string, which is convenient for `pipe`/`map`.\n *\n * @example\n *\n * ```ts\n * const countryCode = Str.asFixedLengthString(2, 'JP');\n *\n * const atMost5: MaxLengthString<5> = countryCode; // OK (2 <= 5)\n *\n * assert.isTrue(atMost5.length === 2);\n *\n * // curried version\n * const asCountryCode = Str.asFixedLengthString(2);\n *\n * assert.strictEqual(asCountryCode('US'), 'US');\n *\n * assert.throws(() => Str.asFixedLengthString(3, 'JP')); // length 2 !== 3\n * ```\n *\n * @template Length - The exact number of characters.\n * @template S - The input string type (literal types are preserved).\n * @param length - The exact number of characters.\n * @param s - The string to cast.\n * @returns `s` typed as `FixedLengthString<Length> & S`.\n * @throws {TypeError} If `s.length !== length`.\n */\n export function asFixedLengthString<\n Length extends SupportedLength,\n S extends string,\n >(length: Length, s: S): FixedLengthString<Length> & S;\n\n // Curried version\n export function asFixedLengthString<Length extends SupportedLength>(\n length: Length,\n ): <S extends string>(s: S) => FixedLengthString<Length> & S;\n\n export function asFixedLengthString(\n ...args:\n | readonly [length: SupportedLength, s: string]\n | readonly [length: SupportedLength]\n ): string | ((s: string) => string) {\n switch (args.length) {\n case 2:\n return asFixedLengthStringImpl(...args);\n\n case 1:\n return (s) => asFixedLengthStringImpl(args[0], s);\n }\n }\n\n const asFixedLengthStringImpl = (\n length: SupportedLength,\n s: string,\n ): string => {\n const actualLength = s.length;\n\n if (!isFixedLengthString(length, s)) {\n throw new TypeError(\n `Expected a string of length ${length}, got a string of length ${actualLength}`,\n );\n }\n\n return s;\n };\n\n /**\n * Casts a string to `NonEmptyString` after checking that it has at least one\n * character.\n *\n * `NonEmptyString` is an alias of `MinLengthString<1>`, so this is the\n * length-1 specialization of {@link asMinLengthString}. Use this instead of\n * writing `s as unknown as NonEmptyString`: the length is verified at\n * runtime, and the original string type (e.g. literal types) is preserved\n * via intersection.\n *\n * @example\n *\n * ```ts\n * const name = Str.asNonEmptyString('noshiro');\n *\n * const nonEmpty: NonEmptyString = name; // OK\n *\n * assert.isTrue(nonEmpty.length >= 1);\n *\n * assert.throws(() => Str.asNonEmptyString('')); // length 0 < 1\n * ```\n *\n * @template S - The input string type (literal types are preserved).\n * @param s - The string to cast.\n * @returns `s` typed as `NonEmptyString & S`.\n * @throws {TypeError} If `s` is empty.\n */\n export const asNonEmptyString = <S extends string>(\n s: S,\n ): NonEmptyString & S => {\n if (!isMinLengthString(1, s)) {\n throw new TypeError('Expected a non-empty string, got an empty string');\n }\n\n return s;\n };\n}\n"],"names":["Str"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"str.mjs","sourceRoot":"","sources":["../../src/string/str.mts"],"names":[],"mappings":"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"}
|
package/dist/types.mjs
CHANGED
|
@@ -1,2 +1,3 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
export {};
|
|
2
|
+
// #endregion Result
|
|
3
|
+
//# sourceMappingURL=types.mjs.map
|
package/dist/types.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.mjs","
|
|
1
|
+
{"version":3,"file":"types.mjs","sourceRoot":"","sources":["../src/types.mts"],"names":[],"mappings":";AAkIA,oBAAoB"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ts-data-forge",
|
|
3
|
-
"version": "14.6.
|
|
3
|
+
"version": "14.6.2",
|
|
4
4
|
"private": false,
|
|
5
5
|
"keywords": [
|
|
6
6
|
"typescript",
|
|
@@ -46,17 +46,16 @@
|
|
|
46
46
|
"@types/react": "19.2.18",
|
|
47
47
|
"@vitest/browser-playwright": "4.1.11",
|
|
48
48
|
"dedent": "1.7.2",
|
|
49
|
-
"eslint-config-typed": "5.10.
|
|
50
|
-
"eslint-plugin-ts-fortress": "1.0
|
|
51
|
-
"eslint-plugin-ts-type-forge": "0.
|
|
49
|
+
"eslint-config-typed": "5.10.5",
|
|
50
|
+
"eslint-plugin-ts-fortress": "1.1.0",
|
|
51
|
+
"eslint-plugin-ts-type-forge": "0.8.0",
|
|
52
52
|
"immer": "11.1.18",
|
|
53
53
|
"playwright": "1.62.1",
|
|
54
54
|
"prettier": "3.9.6",
|
|
55
55
|
"prettier-plugin-organize-imports": "4.3.0",
|
|
56
56
|
"prettier-plugin-packagejson": "3.0.2",
|
|
57
57
|
"react": "19.2.8",
|
|
58
|
-
"
|
|
59
|
-
"ts-repo-utils": "10.3.3",
|
|
58
|
+
"ts-repo-utils": "10.5.0",
|
|
60
59
|
"typedoc": "0.28.20",
|
|
61
60
|
"typedoc-github-theme": "0.4.0",
|
|
62
61
|
"vite": "8.2.2"
|
|
@@ -32,7 +32,7 @@ describe('map preserves length constraints', () => {
|
|
|
32
32
|
test('a branded input keeps its constraint', () => {
|
|
33
33
|
const input: MinLengthArray<3, number> = asMinLengthArray(3, [0, 1, 2, 3]);
|
|
34
34
|
|
|
35
|
-
const result = map(input, (value) => `#${
|
|
35
|
+
const result = map(input, (value) => `#${value.toString()}`);
|
|
36
36
|
|
|
37
37
|
expectType<typeof result, MinLengthArray<3, string>>('~=');
|
|
38
38
|
|
|
@@ -162,7 +162,7 @@ describe('other length-preserving utilities preserve length constraints', () =>
|
|
|
162
162
|
test('toUpdated keeps the brand and widens only the element type', () => {
|
|
163
163
|
const input: MinLengthArray<3, number> = asMinLengthArray(3, [0, 1, 2]);
|
|
164
164
|
|
|
165
|
-
const result = toUpdated(input, 1, (prev) => `#${
|
|
165
|
+
const result = toUpdated(input, 1, (prev) => `#${prev.toString()}`);
|
|
166
166
|
|
|
167
167
|
expectType<typeof result, MinLengthArray<3, number | `#${string}`>>('~=');
|
|
168
168
|
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
import { type WidenLiteral } from 'ts-type-forge';
|
|
3
3
|
import { Optional, pipe } from '../functional/index.mjs';
|
|
4
4
|
import { asUint32 } from '../number/index.mjs';
|
|
5
|
-
import { tp } from '../others/index.mjs';
|
|
5
|
+
import { tp, unknownToString } from '../others/index.mjs';
|
|
6
6
|
import { type MapSetKeyType, type SizeType } from '../types.mjs';
|
|
7
7
|
|
|
8
8
|
/**
|
|
@@ -1051,7 +1051,7 @@ class IMapMappedClass<K, V, KM extends MapSetKeyType>
|
|
|
1051
1051
|
if (!this.has(key)) {
|
|
1052
1052
|
if (this.#showNotFoundMessage) {
|
|
1053
1053
|
console.warn(
|
|
1054
|
-
`IMapMapped.delete: key not found: ${
|
|
1054
|
+
`IMapMapped.delete: key not found: ${unknownToString(this.#toKey(key))}`,
|
|
1055
1055
|
);
|
|
1056
1056
|
}
|
|
1057
1057
|
|
|
@@ -1103,7 +1103,7 @@ class IMapMappedClass<K, V, KM extends MapSetKeyType>
|
|
|
1103
1103
|
if (Optional.isNone(curr)) {
|
|
1104
1104
|
if (this.#showNotFoundMessage) {
|
|
1105
1105
|
console.warn(
|
|
1106
|
-
`IMapMapped.update: key not found: ${
|
|
1106
|
+
`IMapMapped.update: key not found: ${unknownToString(this.#toKey(key))}`,
|
|
1107
1107
|
);
|
|
1108
1108
|
}
|
|
1109
1109
|
|
|
@@ -1160,7 +1160,7 @@ class IMapMappedClass<K, V, KM extends MapSetKeyType>
|
|
|
1160
1160
|
if (curr === undefined || !mut_result.has(key)) {
|
|
1161
1161
|
if (this.#showNotFoundMessage) {
|
|
1162
1162
|
console.warn(
|
|
1163
|
-
`IMapMapped.withMutations::update: key not found: ${
|
|
1163
|
+
`IMapMapped.withMutations::update: key not found: ${unknownToString(key)}`,
|
|
1164
1164
|
);
|
|
1165
1165
|
}
|
|
1166
1166
|
|
package/src/collections/imap.mts
CHANGED
|
@@ -753,7 +753,7 @@ class IMapClass<K extends MapSetKeyType, V>
|
|
|
753
753
|
|
|
754
754
|
/** @inheritdoc */
|
|
755
755
|
has(key: K | (WidenLiteral<K> & {})): boolean {
|
|
756
|
-
// eslint-disable-next-line total-functions/no-unsafe-type-assertion
|
|
756
|
+
// eslint-disable-next-line total-functions/no-unsafe-type-assertion, @typescript-eslint/no-unnecessary-type-assertion -- unnecessary only under the strict standard library; the stock one types `has` as taking exactly `K`
|
|
757
757
|
return this.#map.has(key as K);
|
|
758
758
|
}
|
|
759
759
|
|
|
@@ -5,6 +5,7 @@ import {
|
|
|
5
5
|
type WidenLiteral,
|
|
6
6
|
} from 'ts-type-forge';
|
|
7
7
|
import { asUint32 } from '../number/index.mjs';
|
|
8
|
+
import { unknownToString } from '../others/index.mjs';
|
|
8
9
|
import { type MapSetKeyType, type SizeType } from '../types.mjs';
|
|
9
10
|
|
|
10
11
|
/**
|
|
@@ -1270,7 +1271,7 @@ class ISetMappedClass<K, KM extends MapSetKeyType>
|
|
|
1270
1271
|
if (!this.has(key)) {
|
|
1271
1272
|
if (this.#showNotFoundMessage) {
|
|
1272
1273
|
console.warn(
|
|
1273
|
-
`ISetMapped.delete: key not found: ${
|
|
1274
|
+
`ISetMapped.delete: key not found: ${unknownToString(this.#toKey(key))}`,
|
|
1274
1275
|
);
|
|
1275
1276
|
}
|
|
1276
1277
|
|
package/src/collections/iset.mts
CHANGED
|
@@ -753,7 +753,7 @@ class ISetClass<K extends MapSetKeyType> implements ISet<K>, Iterable<K> {
|
|
|
753
753
|
|
|
754
754
|
/** @inheritdoc */
|
|
755
755
|
has(key: K | (WidenLiteral<K> & {})): boolean {
|
|
756
|
-
// eslint-disable-next-line total-functions/no-unsafe-type-assertion
|
|
756
|
+
// eslint-disable-next-line total-functions/no-unsafe-type-assertion, @typescript-eslint/no-unnecessary-type-assertion -- unnecessary only under the strict standard library; the stock one types `has` as taking exactly `K`
|
|
757
757
|
return this.#set.has(key as K);
|
|
758
758
|
}
|
|
759
759
|
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { isError } from '@sindresorhus/is';
|
|
2
2
|
import { AsyncResult as AsyncResultFromEntryPoint } from '../entry-point.mjs';
|
|
3
3
|
import { expectType } from '../expect-type.mjs';
|
|
4
|
+
import { unknownToString } from '../others/index.mjs';
|
|
4
5
|
import { AsyncResult } from './async-result/index.mjs';
|
|
5
6
|
import { Result } from './result/index.mjs';
|
|
6
7
|
|
|
@@ -17,7 +18,7 @@ describe('AsyncResult test', () => {
|
|
|
17
18
|
test('resolved promise becomes Ok', async () => {
|
|
18
19
|
const result = await AsyncResult.fromPromise(
|
|
19
20
|
Promise.resolve(42),
|
|
20
|
-
(error) => `mapped: ${
|
|
21
|
+
(error) => `mapped: ${unknownToString(error)}`,
|
|
21
22
|
);
|
|
22
23
|
|
|
23
24
|
assert.isTrue(Result.isOk(result));
|
|
@@ -61,7 +62,7 @@ describe('AsyncResult test', () => {
|
|
|
61
62
|
test('resolved async function becomes Ok', async () => {
|
|
62
63
|
const result = await AsyncResult.fromThrowable(
|
|
63
64
|
() => Promise.resolve('data'),
|
|
64
|
-
(error) => `mapped: ${
|
|
65
|
+
(error) => `mapped: ${unknownToString(error)}`,
|
|
65
66
|
);
|
|
66
67
|
|
|
67
68
|
assert.isTrue(Result.isOk(result));
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { expectType } from '../expect-type.mjs';
|
|
2
2
|
import { Num } from '../number/index.mjs';
|
|
3
|
+
import { unknownToString } from '../others/index.mjs';
|
|
3
4
|
import { type None, type Some } from '../types.mjs';
|
|
4
5
|
import { Optional, type UnknownOptional } from './optional/index.mjs';
|
|
5
6
|
import { pipe } from './pipe.mjs';
|
|
@@ -872,7 +873,7 @@ describe('Optional test', () => {
|
|
|
872
873
|
const makeOptional = (): Optional<undefined> => Optional.some(undefined);
|
|
873
874
|
|
|
874
875
|
const result = Optional.match(makeOptional(), {
|
|
875
|
-
some: (value) => `some: ${
|
|
876
|
+
some: (value) => `some: ${unknownToString(value)}`,
|
|
876
877
|
none: () => 'none',
|
|
877
878
|
});
|
|
878
879
|
|
|
@@ -963,14 +963,12 @@ describe('Result test', () => {
|
|
|
963
963
|
|
|
964
964
|
const invalidJson = '{invalid json}';
|
|
965
965
|
|
|
966
|
-
// eslint-disable-next-line @typescript-eslint/no-unsafe-return
|
|
967
966
|
const validResult = Result.fromThrowable(() => JSON.parse(validJson));
|
|
968
967
|
|
|
969
968
|
assert.isTrue(Result.isOk(validResult));
|
|
970
969
|
|
|
971
970
|
assert.deepStrictEqual(Result.unwrapOk(validResult), { key: 'value' });
|
|
972
971
|
|
|
973
|
-
// eslint-disable-next-line @typescript-eslint/no-unsafe-return
|
|
974
972
|
const invalidResult = Result.fromThrowable(() => JSON.parse(invalidJson));
|
|
975
973
|
|
|
976
974
|
assert.isTrue(Result.isErr(invalidResult));
|
|
@@ -61,7 +61,7 @@ describe(isNonEmptyString, () => {
|
|
|
61
61
|
// TypeScript knows it's a string
|
|
62
62
|
expect(value.length).toBeGreaterThan(0);
|
|
63
63
|
|
|
64
|
-
expect(value.
|
|
64
|
+
expect(value.at(0)).toBe('t');
|
|
65
65
|
}
|
|
66
66
|
});
|
|
67
67
|
|
|
@@ -109,7 +109,7 @@ describe(isNonEmptyString, () => {
|
|
|
109
109
|
|
|
110
110
|
test('should not accept String objects', () => {
|
|
111
111
|
// @ts-expect-error Testing non-string types
|
|
112
|
-
// eslint-disable-next-line unicorn/new-for-builtins
|
|
112
|
+
// eslint-disable-next-line unicorn/new-for-builtins, @typescript-eslint/no-deprecated
|
|
113
113
|
assert.isFalse(isNonEmptyString(new String('hello') as unknown));
|
|
114
114
|
});
|
|
115
115
|
});
|
|
@@ -43,13 +43,13 @@ describe(isNonNullObject, () => {
|
|
|
43
43
|
});
|
|
44
44
|
|
|
45
45
|
test('should return true for boxed primitives', () => {
|
|
46
|
-
// eslint-disable-next-line unicorn/new-for-builtins
|
|
46
|
+
// eslint-disable-next-line unicorn/new-for-builtins, @typescript-eslint/no-deprecated
|
|
47
47
|
assert.isTrue(isNonNullObject(new String('hello')));
|
|
48
48
|
|
|
49
|
-
// eslint-disable-next-line unicorn/new-for-builtins
|
|
49
|
+
// eslint-disable-next-line unicorn/new-for-builtins, @typescript-eslint/no-deprecated
|
|
50
50
|
assert.isTrue(isNonNullObject(new Number(42)));
|
|
51
51
|
|
|
52
|
-
// eslint-disable-next-line unicorn/new-for-builtins
|
|
52
|
+
// eslint-disable-next-line unicorn/new-for-builtins, @typescript-eslint/no-deprecated
|
|
53
53
|
assert.isTrue(isNonNullObject(new Boolean(true)));
|
|
54
54
|
});
|
|
55
55
|
|