ts-data-forge 14.10.2 → 14.11.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +34 -1
- package/dist/array/impl/array-utils-reducing-value.d.mts.map +1 -1
- package/dist/array/impl/array-utils-reducing-value.mjs +4 -3
- package/dist/array/impl/array-utils-reducing-value.mjs.map +1 -1
- package/dist/array/impl/array-utils-slice-clamped.mjs +1 -1
- 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 +10 -3
- package/dist/array/impl/array-utils-slicing.mjs.map +1 -1
- package/dist/array/impl/array-utils-transformation.d.mts.map +1 -1
- package/dist/array/impl/array-utils-transformation.mjs +2 -2
- package/dist/array/impl/array-utils-transformation.mjs.map +1 -1
- package/dist/array/impl/array-utils-validation.d.mts.map +1 -1
- package/dist/array/impl/array-utils-validation.mjs +2 -1
- package/dist/array/impl/array-utils-validation.mjs.map +1 -1
- package/dist/built-in-tag.d.mts +22 -0
- package/dist/built-in-tag.d.mts.map +1 -0
- package/dist/built-in-tag.mjs +34 -0
- package/dist/built-in-tag.mjs.map +1 -0
- package/dist/collections/stack.mjs +3 -3
- package/dist/collections/stack.mjs.map +1 -1
- package/dist/iterator/range.d.mts +1 -1
- package/dist/iterator/range.d.mts.map +1 -1
- package/dist/iterator/range.mjs +5 -2
- package/dist/iterator/range.mjs.map +1 -1
- package/dist/json/json.d.mts +20 -2
- package/dist/json/json.d.mts.map +1 -1
- package/dist/json/json.mjs +18 -0
- package/dist/json/json.mjs.map +1 -1
- package/dist/number/branded-types/finite-number.d.mts +4 -9
- package/dist/number/branded-types/finite-number.d.mts.map +1 -1
- package/dist/number/branded-types/finite-number.mjs +9 -9
- package/dist/number/branded-types/finite-number.mjs.map +1 -1
- package/dist/number/branded-types/int.d.mts +3 -9
- package/dist/number/branded-types/int.d.mts.map +1 -1
- package/dist/number/branded-types/int.mjs +9 -10
- package/dist/number/branded-types/int.mjs.map +1 -1
- package/dist/number/branded-types/int16.d.mts +3 -18
- package/dist/number/branded-types/int16.d.mts.map +1 -1
- package/dist/number/branded-types/int16.mjs +9 -10
- package/dist/number/branded-types/int16.mjs.map +1 -1
- package/dist/number/branded-types/int32.d.mts +3 -14
- package/dist/number/branded-types/int32.d.mts.map +1 -1
- package/dist/number/branded-types/int32.mjs +9 -10
- package/dist/number/branded-types/int32.mjs.map +1 -1
- package/dist/number/branded-types/negative-finite-number.d.mts +4 -16
- package/dist/number/branded-types/negative-finite-number.d.mts.map +1 -1
- package/dist/number/branded-types/negative-finite-number.mjs +9 -10
- package/dist/number/branded-types/negative-finite-number.mjs.map +1 -1
- package/dist/number/branded-types/negative-int.d.mts +3 -16
- package/dist/number/branded-types/negative-int.d.mts.map +1 -1
- package/dist/number/branded-types/negative-int.mjs +9 -11
- package/dist/number/branded-types/negative-int.mjs.map +1 -1
- package/dist/number/branded-types/negative-safe-int.d.mts +3 -17
- package/dist/number/branded-types/negative-safe-int.d.mts.map +1 -1
- package/dist/number/branded-types/negative-safe-int.mjs +9 -11
- package/dist/number/branded-types/negative-safe-int.mjs.map +1 -1
- package/dist/number/branded-types/non-negative-finite-number.d.mts +4 -14
- package/dist/number/branded-types/non-negative-finite-number.d.mts.map +1 -1
- package/dist/number/branded-types/non-negative-finite-number.mjs +9 -9
- package/dist/number/branded-types/non-negative-finite-number.mjs.map +1 -1
- package/dist/number/branded-types/non-negative-int16.d.mts +3 -19
- package/dist/number/branded-types/non-negative-int16.d.mts.map +1 -1
- package/dist/number/branded-types/non-negative-int16.mjs +9 -10
- package/dist/number/branded-types/non-negative-int16.mjs.map +1 -1
- package/dist/number/branded-types/non-negative-int32.d.mts +3 -17
- package/dist/number/branded-types/non-negative-int32.d.mts.map +1 -1
- package/dist/number/branded-types/non-negative-int32.mjs +9 -10
- package/dist/number/branded-types/non-negative-int32.mjs.map +1 -1
- package/dist/number/branded-types/non-positive-finite-number.d.mts +4 -14
- package/dist/number/branded-types/non-positive-finite-number.d.mts.map +1 -1
- package/dist/number/branded-types/non-positive-finite-number.mjs +9 -9
- package/dist/number/branded-types/non-positive-finite-number.mjs.map +1 -1
- package/dist/number/branded-types/non-positive-int.d.mts +3 -14
- package/dist/number/branded-types/non-positive-int.d.mts.map +1 -1
- package/dist/number/branded-types/non-positive-int.mjs +9 -10
- package/dist/number/branded-types/non-positive-int.mjs.map +1 -1
- package/dist/number/branded-types/non-positive-safe-int.d.mts +3 -15
- package/dist/number/branded-types/non-positive-safe-int.d.mts.map +1 -1
- package/dist/number/branded-types/non-positive-safe-int.mjs +9 -10
- 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 -10
- package/dist/number/branded-types/non-zero-finite-number.d.mts.map +1 -1
- package/dist/number/branded-types/non-zero-finite-number.mjs +9 -10
- package/dist/number/branded-types/non-zero-finite-number.mjs.map +1 -1
- package/dist/number/branded-types/non-zero-int.d.mts +3 -10
- package/dist/number/branded-types/non-zero-int.d.mts.map +1 -1
- package/dist/number/branded-types/non-zero-int.mjs +9 -11
- package/dist/number/branded-types/non-zero-int.mjs.map +1 -1
- package/dist/number/branded-types/non-zero-int16.d.mts +3 -19
- package/dist/number/branded-types/non-zero-int16.d.mts.map +1 -1
- package/dist/number/branded-types/non-zero-int16.mjs +12 -11
- package/dist/number/branded-types/non-zero-int16.mjs.map +1 -1
- package/dist/number/branded-types/non-zero-int32.d.mts +3 -15
- package/dist/number/branded-types/non-zero-int32.d.mts.map +1 -1
- package/dist/number/branded-types/non-zero-int32.mjs +12 -11
- package/dist/number/branded-types/non-zero-int32.mjs.map +1 -1
- package/dist/number/branded-types/non-zero-safe-int.d.mts +6 -14
- package/dist/number/branded-types/non-zero-safe-int.d.mts.map +1 -1
- package/dist/number/branded-types/non-zero-safe-int.mjs +9 -13
- package/dist/number/branded-types/non-zero-safe-int.mjs.map +1 -1
- package/dist/number/branded-types/non-zero-uint16.d.mts +3 -20
- package/dist/number/branded-types/non-zero-uint16.d.mts.map +1 -1
- package/dist/number/branded-types/non-zero-uint16.mjs +9 -11
- package/dist/number/branded-types/non-zero-uint16.mjs.map +1 -1
- package/dist/number/branded-types/non-zero-uint32.d.mts +3 -18
- package/dist/number/branded-types/non-zero-uint32.d.mts.map +1 -1
- package/dist/number/branded-types/non-zero-uint32.mjs +9 -11
- package/dist/number/branded-types/non-zero-uint32.mjs.map +1 -1
- package/dist/number/branded-types/positive-finite-number.d.mts +4 -16
- package/dist/number/branded-types/positive-finite-number.d.mts.map +1 -1
- package/dist/number/branded-types/positive-finite-number.mjs +9 -9
- package/dist/number/branded-types/positive-finite-number.mjs.map +1 -1
- package/dist/number/branded-types/positive-int.d.mts +3 -16
- package/dist/number/branded-types/positive-int.d.mts.map +1 -1
- package/dist/number/branded-types/positive-int.mjs +9 -10
- package/dist/number/branded-types/positive-int.mjs.map +1 -1
- package/dist/number/branded-types/positive-int16.d.mts +3 -21
- package/dist/number/branded-types/positive-int16.d.mts.map +1 -1
- package/dist/number/branded-types/positive-int16.mjs +9 -10
- package/dist/number/branded-types/positive-int16.mjs.map +1 -1
- package/dist/number/branded-types/positive-int32.d.mts +3 -19
- package/dist/number/branded-types/positive-int32.d.mts.map +1 -1
- package/dist/number/branded-types/positive-int32.mjs +9 -10
- package/dist/number/branded-types/positive-int32.mjs.map +1 -1
- package/dist/number/branded-types/positive-safe-int.d.mts +5 -19
- package/dist/number/branded-types/positive-safe-int.d.mts.map +1 -1
- package/dist/number/branded-types/positive-safe-int.mjs +9 -11
- package/dist/number/branded-types/positive-safe-int.mjs.map +1 -1
- package/dist/number/branded-types/positive-uint16.d.mts +3 -20
- package/dist/number/branded-types/positive-uint16.d.mts.map +1 -1
- package/dist/number/branded-types/positive-uint16.mjs +9 -10
- package/dist/number/branded-types/positive-uint16.mjs.map +1 -1
- package/dist/number/branded-types/positive-uint32.d.mts +3 -18
- package/dist/number/branded-types/positive-uint32.d.mts.map +1 -1
- package/dist/number/branded-types/positive-uint32.mjs +9 -10
- package/dist/number/branded-types/positive-uint32.mjs.map +1 -1
- package/dist/number/branded-types/safe-int.d.mts +5 -12
- package/dist/number/branded-types/safe-int.d.mts.map +1 -1
- package/dist/number/branded-types/safe-int.mjs +9 -12
- package/dist/number/branded-types/safe-int.mjs.map +1 -1
- package/dist/number/branded-types/safe-uint.d.mts +3 -15
- package/dist/number/branded-types/safe-uint.d.mts.map +1 -1
- package/dist/number/branded-types/safe-uint.mjs +9 -11
- package/dist/number/branded-types/safe-uint.mjs.map +1 -1
- package/dist/number/branded-types/uint.d.mts +3 -14
- package/dist/number/branded-types/uint.d.mts.map +1 -1
- package/dist/number/branded-types/uint.mjs +9 -10
- package/dist/number/branded-types/uint.mjs.map +1 -1
- package/dist/number/branded-types/uint16.d.mts +3 -18
- package/dist/number/branded-types/uint16.d.mts.map +1 -1
- package/dist/number/branded-types/uint16.mjs +9 -10
- package/dist/number/branded-types/uint16.mjs.map +1 -1
- package/dist/number/branded-types/uint32.d.mts +3 -16
- package/dist/number/branded-types/uint32.d.mts.map +1 -1
- package/dist/number/branded-types/uint32.mjs +9 -10
- package/dist/number/branded-types/uint32.mjs.map +1 -1
- package/dist/number/enum/int8.d.mts +13 -15
- package/dist/number/enum/int8.d.mts.map +1 -1
- package/dist/number/enum/int8.mjs +20 -25
- package/dist/number/enum/int8.mjs.map +1 -1
- package/dist/number/enum/uint8.d.mts +12 -14
- package/dist/number/enum/uint8.d.mts.map +1 -1
- package/dist/number/enum/uint8.mjs +18 -23
- package/dist/number/enum/uint8.mjs.map +1 -1
- package/dist/number/index.d.mts +1 -1
- package/dist/number/index.d.mts.map +1 -1
- package/dist/number/index.mjs +1 -1
- package/dist/number/index.mjs.map +1 -1
- package/dist/number/num/impl/index.d.mts +2 -0
- package/dist/number/num/impl/index.d.mts.map +1 -0
- package/dist/number/num/impl/index.mjs +2 -0
- package/dist/number/num/impl/index.mjs.map +1 -0
- package/dist/number/num/impl/num.d.mts +531 -0
- package/dist/number/num/impl/num.d.mts.map +1 -0
- package/dist/number/num/impl/num.mjs +542 -0
- package/dist/number/num/impl/num.mjs.map +1 -0
- package/dist/number/num/index.d.mts +17 -0
- package/dist/number/num/index.d.mts.map +1 -0
- package/dist/number/num/index.mjs +17 -0
- package/dist/number/num/index.mjs.map +1 -0
- package/dist/number/operators/finite-number.d.mts +16 -0
- package/dist/number/operators/finite-number.d.mts.map +1 -0
- package/dist/number/operators/finite-number.mjs +7 -0
- package/dist/number/operators/finite-number.mjs.map +1 -0
- package/dist/number/operators/int.d.mts +16 -0
- package/dist/number/operators/int.d.mts.map +1 -0
- package/dist/number/operators/int.mjs +8 -0
- package/dist/number/operators/int.mjs.map +1 -0
- package/dist/number/operators/int16.d.mts +25 -0
- package/dist/number/operators/int16.d.mts.map +1 -0
- package/dist/number/operators/int16.mjs +8 -0
- package/dist/number/operators/int16.mjs.map +1 -0
- package/dist/number/operators/int32.d.mts +21 -0
- package/dist/number/operators/int32.d.mts.map +1 -0
- package/dist/number/operators/int32.mjs +8 -0
- package/dist/number/operators/int32.mjs.map +1 -0
- package/dist/number/operators/int8.d.mts +24 -0
- package/dist/number/operators/int8.d.mts.map +1 -0
- package/dist/number/operators/int8.mjs +8 -0
- package/dist/number/operators/int8.mjs.map +1 -0
- package/dist/number/operators/negative-finite-number.d.mts +11 -0
- package/dist/number/operators/negative-finite-number.d.mts.map +1 -0
- package/dist/number/operators/negative-finite-number.mjs +8 -0
- package/dist/number/operators/negative-finite-number.mjs.map +1 -0
- package/dist/number/operators/negative-int.d.mts +10 -0
- package/dist/number/operators/negative-int.d.mts.map +1 -0
- package/dist/number/operators/negative-int.mjs +9 -0
- package/dist/number/operators/negative-int.mjs.map +1 -0
- package/dist/number/operators/negative-safe-int.d.mts +10 -0
- package/dist/number/operators/negative-safe-int.d.mts.map +1 -0
- package/dist/number/operators/negative-safe-int.mjs +9 -0
- package/dist/number/operators/negative-safe-int.mjs.map +1 -0
- package/dist/number/operators/non-negative-finite-number.d.mts +22 -0
- package/dist/number/operators/non-negative-finite-number.d.mts.map +1 -0
- package/dist/number/operators/non-negative-finite-number.mjs +7 -0
- package/dist/number/operators/non-negative-finite-number.mjs.map +1 -0
- package/dist/number/operators/non-negative-int16.d.mts +27 -0
- package/dist/number/operators/non-negative-int16.d.mts.map +1 -0
- package/dist/number/operators/non-negative-int16.mjs +8 -0
- package/dist/number/operators/non-negative-int16.mjs.map +1 -0
- package/dist/number/operators/non-negative-int32.d.mts +25 -0
- package/dist/number/operators/non-negative-int32.d.mts.map +1 -0
- package/dist/number/operators/non-negative-int32.mjs +8 -0
- package/dist/number/operators/non-negative-int32.mjs.map +1 -0
- package/dist/number/operators/non-positive-finite-number.d.mts +11 -0
- package/dist/number/operators/non-positive-finite-number.d.mts.map +1 -0
- package/dist/number/operators/non-positive-finite-number.mjs +7 -0
- package/dist/number/operators/non-positive-finite-number.mjs.map +1 -0
- package/dist/number/operators/non-positive-int.d.mts +10 -0
- package/dist/number/operators/non-positive-int.d.mts.map +1 -0
- package/dist/number/operators/non-positive-int.mjs +8 -0
- package/dist/number/operators/non-positive-int.mjs.map +1 -0
- package/dist/number/operators/non-positive-safe-int.d.mts +10 -0
- package/dist/number/operators/non-positive-safe-int.d.mts.map +1 -0
- package/dist/number/operators/non-positive-safe-int.mjs +8 -0
- package/dist/number/operators/non-positive-safe-int.mjs.map +1 -0
- package/dist/number/operators/non-zero-finite-number.d.mts +16 -0
- package/dist/number/operators/non-zero-finite-number.d.mts.map +1 -0
- package/dist/number/operators/non-zero-finite-number.mjs +8 -0
- package/dist/number/operators/non-zero-finite-number.mjs.map +1 -0
- package/dist/number/operators/non-zero-int.d.mts +10 -0
- package/dist/number/operators/non-zero-int.d.mts.map +1 -0
- package/dist/number/operators/non-zero-int.mjs +9 -0
- package/dist/number/operators/non-zero-int.mjs.map +1 -0
- package/dist/number/operators/non-zero-int16.d.mts +10 -0
- package/dist/number/operators/non-zero-int16.d.mts.map +1 -0
- package/dist/number/operators/non-zero-int16.mjs +9 -0
- package/dist/number/operators/non-zero-int16.mjs.map +1 -0
- package/dist/number/operators/non-zero-int32.d.mts +10 -0
- package/dist/number/operators/non-zero-int32.d.mts.map +1 -0
- package/dist/number/operators/non-zero-int32.mjs +9 -0
- package/dist/number/operators/non-zero-int32.mjs.map +1 -0
- package/dist/number/operators/non-zero-safe-int.d.mts +10 -0
- package/dist/number/operators/non-zero-safe-int.d.mts.map +1 -0
- package/dist/number/operators/non-zero-safe-int.mjs +11 -0
- package/dist/number/operators/non-zero-safe-int.mjs.map +1 -0
- package/dist/number/operators/non-zero-uint16.d.mts +2 -0
- package/dist/number/operators/non-zero-uint16.d.mts.map +1 -0
- package/dist/number/operators/non-zero-uint16.mjs +9 -0
- package/dist/number/operators/non-zero-uint16.mjs.map +1 -0
- package/dist/number/operators/non-zero-uint32.d.mts +2 -0
- package/dist/number/operators/non-zero-uint32.d.mts.map +1 -0
- package/dist/number/operators/non-zero-uint32.mjs +9 -0
- package/dist/number/operators/non-zero-uint32.mjs.map +1 -0
- package/dist/number/operators/positive-finite-number.d.mts +23 -0
- package/dist/number/operators/positive-finite-number.d.mts.map +1 -0
- package/dist/number/operators/positive-finite-number.mjs +7 -0
- package/dist/number/operators/positive-finite-number.mjs.map +1 -0
- package/dist/number/operators/positive-int.d.mts +23 -0
- package/dist/number/operators/positive-int.d.mts.map +1 -0
- package/dist/number/operators/positive-int.mjs +8 -0
- package/dist/number/operators/positive-int.mjs.map +1 -0
- package/dist/number/operators/positive-int16.d.mts +28 -0
- package/dist/number/operators/positive-int16.d.mts.map +1 -0
- package/dist/number/operators/positive-int16.mjs +8 -0
- package/dist/number/operators/positive-int16.mjs.map +1 -0
- package/dist/number/operators/positive-int32.d.mts +26 -0
- package/dist/number/operators/positive-int32.d.mts.map +1 -0
- package/dist/number/operators/positive-int32.mjs +8 -0
- package/dist/number/operators/positive-int32.mjs.map +1 -0
- package/dist/number/operators/positive-safe-int.d.mts +24 -0
- package/dist/number/operators/positive-safe-int.d.mts.map +1 -0
- package/dist/number/operators/positive-safe-int.mjs +9 -0
- package/dist/number/operators/positive-safe-int.mjs.map +1 -0
- package/dist/number/operators/positive-uint16.d.mts +27 -0
- package/dist/number/operators/positive-uint16.d.mts.map +1 -0
- package/dist/number/operators/positive-uint16.mjs +8 -0
- package/dist/number/operators/positive-uint16.mjs.map +1 -0
- package/dist/number/operators/positive-uint32.d.mts +25 -0
- package/dist/number/operators/positive-uint32.d.mts.map +1 -0
- package/dist/number/operators/positive-uint32.mjs +8 -0
- package/dist/number/operators/positive-uint32.mjs.map +1 -0
- package/dist/number/operators/safe-int.d.mts +17 -0
- package/dist/number/operators/safe-int.d.mts.map +1 -0
- package/dist/number/operators/safe-int.mjs +10 -0
- package/dist/number/operators/safe-int.mjs.map +1 -0
- package/dist/number/operators/safe-uint.d.mts +22 -0
- package/dist/number/operators/safe-uint.d.mts.map +1 -0
- package/dist/number/operators/safe-uint.mjs +9 -0
- package/dist/number/operators/safe-uint.mjs.map +1 -0
- package/dist/number/operators/uint.d.mts +14 -0
- package/dist/number/operators/uint.d.mts.map +1 -0
- package/dist/number/operators/uint.mjs +8 -0
- package/dist/number/operators/uint.mjs.map +1 -0
- package/dist/number/operators/uint16.d.mts +25 -0
- package/dist/number/operators/uint16.d.mts.map +1 -0
- package/dist/number/operators/uint16.mjs +8 -0
- package/dist/number/operators/uint16.mjs.map +1 -0
- package/dist/number/operators/uint32.d.mts +23 -0
- package/dist/number/operators/uint32.d.mts.map +1 -0
- package/dist/number/operators/uint32.mjs +8 -0
- package/dist/number/operators/uint32.mjs.map +1 -0
- package/dist/number/operators/uint8.d.mts +24 -0
- package/dist/number/operators/uint8.d.mts.map +1 -0
- package/dist/number/operators/uint8.mjs +8 -0
- package/dist/number/operators/uint8.mjs.map +1 -0
- package/dist/number/refined-number-utils.d.mts +2 -2
- package/dist/number/refined-number-utils.d.mts.map +1 -1
- package/dist/number/refined-number-utils.mjs +1 -1
- package/dist/number/refined-number-utils.mjs.map +1 -1
- package/dist/object/object.mjs +1 -1
- package/dist/object/object.mjs.map +1 -1
- package/dist/others/fast-deep-equal.mjs +1 -1
- package/dist/others/fast-deep-equal.mjs.map +1 -1
- package/package.json +23 -10
- package/src/array/impl/array-utils-reducing-value.mts +4 -3
- package/src/array/impl/array-utils-shape-invariants.test.mts +1 -1
- package/src/array/impl/array-utils-slice-clamped.mts +1 -1
- package/src/array/impl/array-utils-slicing.mts +12 -3
- package/src/array/impl/array-utils-transformation.mts +6 -2
- package/src/array/impl/array-utils-transformation.test.mts +44 -1
- package/src/array/impl/array-utils-validation.mts +2 -1
- package/src/built-in-tag.mts +59 -0
- package/src/built-in-tag.test.mts +215 -0
- package/src/collections/stack.mts +3 -3
- package/src/iterator/range.mts +10 -2
- package/src/iterator/range.test.mts +7 -0
- package/src/json/json.mts +20 -2
- package/src/json/json.test.mts +63 -0
- package/src/number/branded-types/finite-number.mts +23 -25
- package/src/number/branded-types/int.mts +20 -26
- package/src/number/branded-types/int16.mts +21 -26
- package/src/number/branded-types/int32.mts +21 -26
- package/src/number/branded-types/negative-finite-number.mts +25 -26
- package/src/number/branded-types/negative-int.mts +20 -27
- package/src/number/branded-types/negative-safe-int.mts +23 -28
- package/src/number/branded-types/non-negative-finite-number.mts +24 -25
- package/src/number/branded-types/non-negative-int16.mts +23 -26
- package/src/number/branded-types/non-negative-int32.mts +23 -26
- package/src/number/branded-types/non-positive-finite-number.mts +24 -25
- package/src/number/branded-types/non-positive-int.mts +20 -26
- package/src/number/branded-types/non-positive-safe-int.mts +21 -26
- package/src/number/branded-types/non-zero-finite-number.mts +23 -25
- package/src/number/branded-types/non-zero-int.mts +19 -25
- package/src/number/branded-types/non-zero-int16.mts +27 -28
- package/src/number/branded-types/non-zero-int32.mts +27 -28
- package/src/number/branded-types/non-zero-safe-int.mts +25 -35
- package/src/number/branded-types/non-zero-uint16.mts +24 -28
- package/src/number/branded-types/non-zero-uint32.mts +24 -28
- package/src/number/branded-types/positive-finite-number.mts +25 -25
- package/src/number/branded-types/positive-int.mts +21 -26
- package/src/number/branded-types/positive-int16.mts +23 -26
- package/src/number/branded-types/positive-int32.mts +23 -26
- package/src/number/branded-types/positive-safe-int.mts +24 -31
- package/src/number/branded-types/positive-uint16.mts +23 -26
- package/src/number/branded-types/positive-uint32.mts +23 -26
- package/src/number/branded-types/safe-int.mts +22 -29
- package/src/number/branded-types/safe-uint.mts +21 -27
- package/src/number/branded-types/uint.mts +21 -26
- package/src/number/branded-types/uint16.mts +21 -26
- package/src/number/branded-types/uint32.mts +21 -26
- package/src/number/enum/int8.mts +40 -52
- package/src/number/enum/uint8.mts +40 -48
- package/src/number/index.mts +1 -1
- package/src/number/num/impl/index.mts +1 -0
- package/src/number/num/impl/num.mts +715 -0
- package/src/number/{num.test.mts → num/impl/num.test.mts} +4 -4
- package/src/number/num/index.mts +16 -0
- package/src/number/num-arithmetic.test.mts +1 -1
- package/src/number/operators/finite-number.mts +20 -0
- package/src/number/operators/int.mts +20 -0
- package/src/number/operators/int16.mts +33 -0
- package/src/number/operators/int32.mts +33 -0
- package/src/number/operators/int8.mts +18 -0
- package/src/number/operators/negative-finite-number.mts +22 -0
- package/src/number/operators/negative-int.mts +22 -0
- package/src/number/operators/negative-safe-int.mts +32 -0
- package/src/number/operators/non-negative-finite-number.mts +32 -0
- package/src/number/operators/non-negative-int16.mts +33 -0
- package/src/number/operators/non-negative-int32.mts +33 -0
- package/src/number/operators/non-positive-finite-number.mts +21 -0
- package/src/number/operators/non-positive-int.mts +21 -0
- package/src/number/operators/non-positive-safe-int.mts +31 -0
- package/src/number/operators/non-zero-finite-number.mts +21 -0
- package/src/number/operators/non-zero-int.mts +22 -0
- package/src/number/operators/non-zero-int16.mts +32 -0
- package/src/number/operators/non-zero-int32.mts +32 -0
- package/src/number/operators/non-zero-safe-int.mts +34 -0
- package/src/number/operators/non-zero-uint16.mts +32 -0
- package/src/number/operators/non-zero-uint32.mts +32 -0
- package/src/number/operators/positive-finite-number.mts +32 -0
- package/src/number/operators/positive-int.mts +32 -0
- package/src/number/operators/positive-int16.mts +33 -0
- package/src/number/operators/positive-int32.mts +33 -0
- package/src/number/operators/positive-safe-int.mts +34 -0
- package/src/number/operators/positive-uint16.mts +33 -0
- package/src/number/operators/positive-uint32.mts +33 -0
- package/src/number/operators/safe-int.mts +35 -0
- package/src/number/operators/safe-uint.mts +33 -0
- package/src/number/operators/uint.mts +31 -0
- package/src/number/operators/uint16.mts +32 -0
- package/src/number/operators/uint32.mts +32 -0
- package/src/number/operators/uint8.mts +16 -0
- package/src/number/refined-number-utils.mts +4 -4
- package/src/object/object.mts +1 -1
- package/src/others/fast-deep-equal.mts +1 -1
- package/src/others/replace-equal-deep.test.mts +0 -2
- package/dist/number/num.d.mts +0 -550
- package/dist/number/num.d.mts.map +0 -1
- package/dist/number/num.mjs +0 -563
- package/dist/number/num.mjs.map +0 -1
- package/src/guard/is-error.test.mts +0 -145
- package/src/number/num.mts +0 -735
|
@@ -0,0 +1,215 @@
|
|
|
1
|
+
/* eslint-disable functional/no-class-inheritance */
|
|
2
|
+
/* eslint-disable unicorn/error-message */
|
|
3
|
+
import {
|
|
4
|
+
isError,
|
|
5
|
+
isMap,
|
|
6
|
+
isRegExp,
|
|
7
|
+
isSet,
|
|
8
|
+
isTypedArray,
|
|
9
|
+
} from './built-in-tag.mjs';
|
|
10
|
+
import { expectType } from './expect-type.mjs';
|
|
11
|
+
|
|
12
|
+
describe(isError, () => {
|
|
13
|
+
test('should return true for native Error instances', () => {
|
|
14
|
+
assert.isTrue(isError(new Error()));
|
|
15
|
+
|
|
16
|
+
assert.isTrue(isError(new Error('test message')));
|
|
17
|
+
});
|
|
18
|
+
|
|
19
|
+
test('should return true for native Error subclasses', () => {
|
|
20
|
+
assert.isTrue(isError(new TypeError()));
|
|
21
|
+
|
|
22
|
+
assert.isTrue(isError(new RangeError()));
|
|
23
|
+
|
|
24
|
+
assert.isTrue(isError(new ReferenceError()));
|
|
25
|
+
|
|
26
|
+
assert.isTrue(isError(new SyntaxError()));
|
|
27
|
+
|
|
28
|
+
assert.isTrue(isError(new EvalError()));
|
|
29
|
+
|
|
30
|
+
assert.isTrue(isError(new URIError()));
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
test('should return true for custom Error subclasses', () => {
|
|
34
|
+
class CustomError extends Error {
|
|
35
|
+
constructor(message?: string) {
|
|
36
|
+
super(message);
|
|
37
|
+
|
|
38
|
+
this.name = 'CustomError';
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
assert.isTrue(isError(new CustomError()));
|
|
43
|
+
|
|
44
|
+
assert.isTrue(isError(new CustomError('custom error message')));
|
|
45
|
+
});
|
|
46
|
+
|
|
47
|
+
test('should return true for Error subclass with additional properties', () => {
|
|
48
|
+
class ExtendedError extends Error {
|
|
49
|
+
readonly code: number;
|
|
50
|
+
|
|
51
|
+
constructor(message: string, code: number) {
|
|
52
|
+
super(message);
|
|
53
|
+
|
|
54
|
+
this.name = 'ExtendedError';
|
|
55
|
+
|
|
56
|
+
this.code = code;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
assert.isTrue(isError(new ExtendedError('error with code', 404)));
|
|
61
|
+
});
|
|
62
|
+
|
|
63
|
+
test('should return true for deeply nested Error subclass', () => {
|
|
64
|
+
class BaseCustomError extends Error {
|
|
65
|
+
constructor(message?: string) {
|
|
66
|
+
super(message);
|
|
67
|
+
|
|
68
|
+
this.name = 'BaseCustomError';
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
class DerivedCustomError extends BaseCustomError {
|
|
73
|
+
constructor(message?: string) {
|
|
74
|
+
super(message);
|
|
75
|
+
|
|
76
|
+
this.name = 'DerivedCustomError';
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
assert.isTrue(isError(new DerivedCustomError()));
|
|
81
|
+
});
|
|
82
|
+
|
|
83
|
+
test('should return false for Error-like objects', () => {
|
|
84
|
+
const errorLikeObject = {
|
|
85
|
+
name: 'Error',
|
|
86
|
+
message: 'This is not a real error',
|
|
87
|
+
stack: 'fake stack trace',
|
|
88
|
+
} as const;
|
|
89
|
+
|
|
90
|
+
assert.isFalse(isError(errorLikeObject));
|
|
91
|
+
});
|
|
92
|
+
|
|
93
|
+
test('should return false for non-Error values', () => {
|
|
94
|
+
assert.isFalse(isError(null));
|
|
95
|
+
|
|
96
|
+
assert.isFalse(isError(undefined));
|
|
97
|
+
|
|
98
|
+
assert.isFalse(isError(0));
|
|
99
|
+
|
|
100
|
+
assert.isFalse(isError(''));
|
|
101
|
+
|
|
102
|
+
assert.isFalse(isError('Error'));
|
|
103
|
+
|
|
104
|
+
assert.isFalse(isError(true));
|
|
105
|
+
|
|
106
|
+
assert.isFalse(isError({}));
|
|
107
|
+
|
|
108
|
+
assert.isFalse(isError([]));
|
|
109
|
+
|
|
110
|
+
assert.isFalse(isError(() => {}));
|
|
111
|
+
});
|
|
112
|
+
|
|
113
|
+
test('should act as a type guard', () => {
|
|
114
|
+
const value: Error | string = new Error('test');
|
|
115
|
+
|
|
116
|
+
if (!isError(value)) {
|
|
117
|
+
return;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
expectType<typeof value, Error>('=');
|
|
121
|
+
|
|
122
|
+
expect(value.message).toBe('test');
|
|
123
|
+
});
|
|
124
|
+
|
|
125
|
+
test('should work with AggregateError', () => {
|
|
126
|
+
const aggregateError = new AggregateError(
|
|
127
|
+
[new Error('error 1'), new Error('error 2')],
|
|
128
|
+
'Multiple errors occurred',
|
|
129
|
+
);
|
|
130
|
+
|
|
131
|
+
assert.isTrue(isError(aggregateError));
|
|
132
|
+
});
|
|
133
|
+
|
|
134
|
+
test('should return false for errors created with Object.create', () => {
|
|
135
|
+
// Built and then re-pointed rather than `Object.create(Error.prototype)`,
|
|
136
|
+
// which the strict standard library types as `unknown` — correctly, since
|
|
137
|
+
// it knows nothing about the resulting shape. The object under test is the
|
|
138
|
+
// same: Error.prototype in its chain, never constructed as an Error.
|
|
139
|
+
const mut_protoError = { message: 'proto error', name: 'ProtoError' };
|
|
140
|
+
|
|
141
|
+
Object.setPrototypeOf(mut_protoError, Error.prototype);
|
|
142
|
+
|
|
143
|
+
const protoError = mut_protoError;
|
|
144
|
+
|
|
145
|
+
assert.isFalse(isError(protoError));
|
|
146
|
+
});
|
|
147
|
+
});
|
|
148
|
+
|
|
149
|
+
describe(isMap, () => {
|
|
150
|
+
test('should return true for a Map only', () => {
|
|
151
|
+
assert.isTrue(isMap(new Map<number, number>([[1, 2]])));
|
|
152
|
+
|
|
153
|
+
assert.isFalse(isMap(new WeakMap<object, unknown>()));
|
|
154
|
+
|
|
155
|
+
assert.isFalse(isMap(new Set<unknown>()));
|
|
156
|
+
|
|
157
|
+
assert.isFalse(isMap({ size: 0 }));
|
|
158
|
+
});
|
|
159
|
+
});
|
|
160
|
+
|
|
161
|
+
describe(isSet, () => {
|
|
162
|
+
test('should return true for a Set only', () => {
|
|
163
|
+
assert.isTrue(isSet(new Set<number>([1])));
|
|
164
|
+
|
|
165
|
+
assert.isFalse(isSet(new WeakSet<object>()));
|
|
166
|
+
|
|
167
|
+
assert.isFalse(isSet(new Map<unknown, unknown>()));
|
|
168
|
+
|
|
169
|
+
assert.isFalse(isSet([1]));
|
|
170
|
+
});
|
|
171
|
+
});
|
|
172
|
+
|
|
173
|
+
describe(isRegExp, () => {
|
|
174
|
+
test('should return true for a RegExp only', () => {
|
|
175
|
+
assert.isTrue(isRegExp(/a/u));
|
|
176
|
+
|
|
177
|
+
assert.isFalse(isRegExp('/a/u'));
|
|
178
|
+
|
|
179
|
+
assert.isFalse(isRegExp({ source: 'a', flags: 'u' }));
|
|
180
|
+
});
|
|
181
|
+
});
|
|
182
|
+
|
|
183
|
+
describe(isTypedArray, () => {
|
|
184
|
+
test('should return true for every typed array', () => {
|
|
185
|
+
assert.isTrue(isTypedArray(new Int8Array(1)));
|
|
186
|
+
|
|
187
|
+
assert.isTrue(isTypedArray(new Uint8Array(1)));
|
|
188
|
+
|
|
189
|
+
assert.isTrue(isTypedArray(new Uint8ClampedArray(1)));
|
|
190
|
+
|
|
191
|
+
assert.isTrue(isTypedArray(new Int16Array(1)));
|
|
192
|
+
|
|
193
|
+
assert.isTrue(isTypedArray(new Uint16Array(1)));
|
|
194
|
+
|
|
195
|
+
assert.isTrue(isTypedArray(new Int32Array(1)));
|
|
196
|
+
|
|
197
|
+
assert.isTrue(isTypedArray(new Uint32Array(1)));
|
|
198
|
+
|
|
199
|
+
assert.isTrue(isTypedArray(new Float32Array(1)));
|
|
200
|
+
|
|
201
|
+
assert.isTrue(isTypedArray(new Float64Array(1)));
|
|
202
|
+
|
|
203
|
+
assert.isTrue(isTypedArray(new BigInt64Array(1)));
|
|
204
|
+
|
|
205
|
+
assert.isTrue(isTypedArray(new BigUint64Array(1)));
|
|
206
|
+
});
|
|
207
|
+
|
|
208
|
+
test('should return false for other binary views and arrays', () => {
|
|
209
|
+
assert.isFalse(isTypedArray(new DataView(new ArrayBuffer(1))));
|
|
210
|
+
|
|
211
|
+
assert.isFalse(isTypedArray(new ArrayBuffer(1)));
|
|
212
|
+
|
|
213
|
+
assert.isFalse(isTypedArray([1, 2]));
|
|
214
|
+
});
|
|
215
|
+
});
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Optional } from '../functional/index.mjs';
|
|
2
2
|
import { range } from '../iterator/index.mjs';
|
|
3
|
-
import { asUint32, Uint32 } from '../number/index.mjs';
|
|
3
|
+
import { asUint32, type Uint32 } from '../number/index.mjs';
|
|
4
4
|
import type { SizeType } from '../types.mjs';
|
|
5
5
|
|
|
6
6
|
/**
|
|
@@ -285,7 +285,7 @@ class StackClass<T> implements Stack<T> {
|
|
|
285
285
|
return Optional.none;
|
|
286
286
|
}
|
|
287
287
|
|
|
288
|
-
this.#mut_size =
|
|
288
|
+
this.#mut_size = asUint32(this.#mut_size - 1);
|
|
289
289
|
|
|
290
290
|
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
291
291
|
const element = this.#mut_buffer[this.#mut_size]!;
|
|
@@ -320,7 +320,7 @@ class StackClass<T> implements Stack<T> {
|
|
|
320
320
|
|
|
321
321
|
this.#mut_buffer[this.#mut_size] = value;
|
|
322
322
|
|
|
323
|
-
this.#mut_size =
|
|
323
|
+
this.#mut_size = asUint32(this.#mut_size + 1);
|
|
324
324
|
}
|
|
325
325
|
}
|
|
326
326
|
|
package/src/iterator/range.mts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { NonZeroSafeInt, SafeUint, WithSmallInt } from 'ts-type-forge';
|
|
2
|
-
import {
|
|
2
|
+
import { asSafeInt, type SafeInt } from '../number/index.mjs';
|
|
3
|
+
import * as Num from '../number/num/impl/index.mjs';
|
|
3
4
|
|
|
4
5
|
/**
|
|
5
6
|
* Generates a sequence of numbers within a specified range using a generator
|
|
@@ -109,7 +110,14 @@ export function* range(
|
|
|
109
110
|
for (
|
|
110
111
|
let mut_i: SafeInt = asSafeInt(start);
|
|
111
112
|
step > 0 ? mut_i < end : mut_i > end;
|
|
112
|
-
|
|
113
|
+
// Saturates as `SafeInt.add` does, without the `SafeInt` object.
|
|
114
|
+
mut_i = asSafeInt(
|
|
115
|
+
Num.clamp(
|
|
116
|
+
mut_i + asSafeInt(step),
|
|
117
|
+
Number.MIN_SAFE_INTEGER,
|
|
118
|
+
Number.MAX_SAFE_INTEGER,
|
|
119
|
+
),
|
|
120
|
+
)
|
|
113
121
|
) {
|
|
114
122
|
yield mut_i;
|
|
115
123
|
}
|
|
@@ -78,4 +78,11 @@ describe(range, () => {
|
|
|
78
78
|
|
|
79
79
|
assert.deepStrictEqual(xs, [0, -1]);
|
|
80
80
|
});
|
|
81
|
+
|
|
82
|
+
// The step is checked before it is added, as `SafeInt.add` used to have it
|
|
83
|
+
// checked, so an unchecked caller gets an error rather than an endless loop.
|
|
84
|
+
test('a step that is not a safe integer throws', () => {
|
|
85
|
+
// @ts-expect-error -- the type forbids it; an unchecked caller can still pass it
|
|
86
|
+
assert.throws(() => Array.from(range(0, 10, Number.POSITIVE_INFINITY)));
|
|
87
|
+
});
|
|
81
88
|
});
|
package/src/json/json.mts
CHANGED
|
@@ -48,6 +48,15 @@ export namespace Json {
|
|
|
48
48
|
* );
|
|
49
49
|
*
|
|
50
50
|
* assert.isTrue(Result.isOk(withReviver));
|
|
51
|
+
*
|
|
52
|
+
* // With a reviver, the result is whatever the reviver returned, not JSON:
|
|
53
|
+
* // `created` is a `Date` here although it is typed `JsonValue`. Widen it to
|
|
54
|
+
* // `unknown` before narrowing it.
|
|
55
|
+
* const revived: unknown = withReviver.value;
|
|
56
|
+
*
|
|
57
|
+
* assert.isTrue(isRecord(revived));
|
|
58
|
+
*
|
|
59
|
+
* assert.instanceOf(revived['created'], Date);
|
|
51
60
|
* ```
|
|
52
61
|
*
|
|
53
62
|
* @param text - A valid JSON string to parse. Can contain any valid JSON data
|
|
@@ -55,10 +64,19 @@ export namespace Json {
|
|
|
55
64
|
* @param reviver - Optional function that transforms parsed values. Called
|
|
56
65
|
* for each key-value pair in the JSON. The function receives the key name
|
|
57
66
|
* and parsed value, and should return the transformed value. For nested
|
|
58
|
-
* objects, inner objects are processed before outer objects
|
|
67
|
+
* objects, inner objects are processed before outer objects, so the
|
|
68
|
+
* `value` an outer object is passed holds what the reviver already
|
|
69
|
+
* returned for its children, which need not be JSON (see `@returns`).
|
|
70
|
+
* Returning
|
|
71
|
+
* `undefined` for a child deletes that property from an object and leaves
|
|
72
|
+
* a hole in an array. The root is passed with the key `''`.
|
|
59
73
|
* @returns A `Result<JsonValue, string>` containing:
|
|
60
74
|
*
|
|
61
|
-
* - On success: `Result.ok(parsedValue)` where `parsedValue` is the parsed
|
|
75
|
+
* - On success: `Result.ok(parsedValue)` where `parsedValue` is the parsed
|
|
76
|
+
* JSON. With a reviver it is whatever the reviver returned for the root
|
|
77
|
+
* (a `Date`, `undefined`, ...), which is not checked to be JSON although
|
|
78
|
+
* it is typed `JsonValue`; widen it to `unknown` before narrowing it,
|
|
79
|
+
* as the example does.
|
|
62
80
|
* - On failure: `Result.err(errorMessage)` where `errorMessage` describes the
|
|
63
81
|
* parsing error
|
|
64
82
|
*/
|
package/src/json/json.test.mts
CHANGED
|
@@ -180,6 +180,69 @@ describe('parse', () => {
|
|
|
180
180
|
|
|
181
181
|
expect(result.value.text).toBe('hello');
|
|
182
182
|
});
|
|
183
|
+
|
|
184
|
+
test('should return what the reviver returns for the root, even if it is not JSON', () => {
|
|
185
|
+
const result = Json.parse('{"a":1}', (key, value) =>
|
|
186
|
+
key === '' ? undefined : value,
|
|
187
|
+
);
|
|
188
|
+
|
|
189
|
+
assert.isTrue(Result.isOk(result));
|
|
190
|
+
|
|
191
|
+
expect(result.value).toBeUndefined();
|
|
192
|
+
});
|
|
193
|
+
|
|
194
|
+
test('should delete an object property and leave an array hole where the reviver returns undefined', () => {
|
|
195
|
+
const result = Json.parse('{"a":1,"b":[1,2,3]}', (key, value) =>
|
|
196
|
+
key === 'a' || key === '1' ? undefined : value,
|
|
197
|
+
);
|
|
198
|
+
|
|
199
|
+
assert.isTrue(Result.isOk(result));
|
|
200
|
+
|
|
201
|
+
const revived: unknown = result.value;
|
|
202
|
+
|
|
203
|
+
assert.isTrue(isRecord(revived));
|
|
204
|
+
|
|
205
|
+
assert.isFalse(hasKey(revived, 'a'));
|
|
206
|
+
|
|
207
|
+
assert.isTrue(hasKey(revived, 'b'));
|
|
208
|
+
|
|
209
|
+
const arr = revived.b;
|
|
210
|
+
|
|
211
|
+
assert.isTrue(Array.isArray(arr));
|
|
212
|
+
|
|
213
|
+
expect(arr).toHaveLength(3);
|
|
214
|
+
|
|
215
|
+
expect(arr[0]).toBe(1);
|
|
216
|
+
|
|
217
|
+
expect(arr[1]).toBeUndefined();
|
|
218
|
+
|
|
219
|
+
expect(arr[2]).toBe(3);
|
|
220
|
+
|
|
221
|
+
// With the same elements, only a hole at index 1 makes these differ.
|
|
222
|
+
expect(arr).not.toStrictEqual([1, undefined, 3]);
|
|
223
|
+
});
|
|
224
|
+
|
|
225
|
+
test('should pass the reviver the children it has already revived', () => {
|
|
226
|
+
const mut_seen: unknown[] = [];
|
|
227
|
+
|
|
228
|
+
const result = Json.parse('{"inner":{"n":1}}', (key, value) => {
|
|
229
|
+
if (key === 'inner') {
|
|
230
|
+
mut_seen.push(structuredClone(value));
|
|
231
|
+
|
|
232
|
+
return 'replaced';
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
if (key === '') {
|
|
236
|
+
mut_seen.push(structuredClone(value));
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
return value;
|
|
240
|
+
});
|
|
241
|
+
|
|
242
|
+
assert.isTrue(Result.isOk(result));
|
|
243
|
+
|
|
244
|
+
assert.deepStrictEqual(mut_seen, [{ n: 1 }, { inner: 'replaced' }]);
|
|
245
|
+
});
|
|
183
246
|
});
|
|
184
247
|
|
|
185
248
|
describe('stringify', () => {
|
|
@@ -4,35 +4,24 @@ import type {
|
|
|
4
4
|
FiniteNumber as TtfImported_FiniteNumber,
|
|
5
5
|
} from 'ts-type-forge';
|
|
6
6
|
import { expectType } from '../../expect-type.mjs';
|
|
7
|
-
import {
|
|
8
|
-
|
|
9
|
-
export type FiniteNumber = TtfImported_FiniteNumber;
|
|
10
|
-
|
|
11
|
-
type ElementType = FiniteNumber;
|
|
12
|
-
|
|
13
|
-
const typeNameInMessage = 'a finite number';
|
|
14
|
-
|
|
15
|
-
const {
|
|
7
|
+
import {
|
|
16
8
|
abs,
|
|
17
9
|
add,
|
|
18
|
-
castType,
|
|
19
10
|
div,
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
min: min_,
|
|
11
|
+
max as max_,
|
|
12
|
+
min as min_,
|
|
23
13
|
mul,
|
|
24
14
|
pow,
|
|
25
15
|
random,
|
|
26
16
|
sub,
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
} as const);
|
|
17
|
+
} from '../operators/finite-number.mjs';
|
|
18
|
+
import type { TsDataForgeInternals } from '../refined-number-utils.mjs';
|
|
19
|
+
|
|
20
|
+
export type FiniteNumber = TtfImported_FiniteNumber;
|
|
21
|
+
|
|
22
|
+
type ElementType = FiniteNumber;
|
|
23
|
+
|
|
24
|
+
const typeNameInMessage = 'a finite number';
|
|
36
25
|
|
|
37
26
|
const floor = (
|
|
38
27
|
x: ElementType,
|
|
@@ -65,7 +54,8 @@ expectType<TsDataForgeInternals.RefinedNumberUtils.ToInt<ElementType>, Int>(
|
|
|
65
54
|
* @param value - The value to check
|
|
66
55
|
* @returns `true` if the value is a finite number, `false` otherwise
|
|
67
56
|
*/
|
|
68
|
-
export const isFiniteNumber = is
|
|
57
|
+
export const isFiniteNumber = (value: number): value is FiniteNumber =>
|
|
58
|
+
Number.isFinite(value);
|
|
69
59
|
|
|
70
60
|
/**
|
|
71
61
|
* Casts a `number` to the `FiniteNumber` branded type.
|
|
@@ -77,7 +67,15 @@ export const isFiniteNumber = is;
|
|
|
77
67
|
* @returns The value as a `FiniteNumber`
|
|
78
68
|
* @throws {TypeError} If the value is not a finite number
|
|
79
69
|
*/
|
|
80
|
-
export const asFiniteNumber =
|
|
70
|
+
export const asFiniteNumber = <N extends number>(
|
|
71
|
+
value: N,
|
|
72
|
+
): FiniteNumber & N => {
|
|
73
|
+
if (!isFiniteNumber(value)) {
|
|
74
|
+
throw new TypeError(`Expected ${typeNameInMessage}, got: ${value}`);
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
return value;
|
|
78
|
+
};
|
|
81
79
|
|
|
82
80
|
/**
|
|
83
81
|
* Namespace providing type-safe operations for the `FiniteNumber` branded type.
|
|
@@ -92,7 +90,7 @@ export const FiniteNumber = {
|
|
|
92
90
|
* @returns `true` if the value is a finite number, `false` otherwise
|
|
93
91
|
* @see {@link isFiniteNumber} for usage examples
|
|
94
92
|
*/
|
|
95
|
-
is,
|
|
93
|
+
is: isFiniteNumber,
|
|
96
94
|
|
|
97
95
|
/**
|
|
98
96
|
* Returns the absolute value of a finite number.
|
|
@@ -1,35 +1,23 @@
|
|
|
1
1
|
import type { Int as TtfImported_Int } from 'ts-type-forge';
|
|
2
2
|
import { expectType } from '../../expect-type.mjs';
|
|
3
|
-
import {
|
|
4
|
-
|
|
5
|
-
export type Int = TtfImported_Int;
|
|
6
|
-
|
|
7
|
-
type ElementType = Int;
|
|
8
|
-
|
|
9
|
-
const typeNameInMessage = 'an integer';
|
|
10
|
-
|
|
11
|
-
const {
|
|
3
|
+
import {
|
|
12
4
|
abs,
|
|
13
5
|
add,
|
|
14
|
-
castType,
|
|
15
6
|
div,
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
min: min_,
|
|
7
|
+
max as max_,
|
|
8
|
+
min as min_,
|
|
19
9
|
mul,
|
|
20
10
|
pow,
|
|
21
11
|
random,
|
|
22
12
|
sub,
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
typeNameInMessage,
|
|
32
|
-
} as const);
|
|
13
|
+
} from '../operators/int.mjs';
|
|
14
|
+
import type { TsDataForgeInternals } from '../refined-number-utils.mjs';
|
|
15
|
+
|
|
16
|
+
export type Int = TtfImported_Int;
|
|
17
|
+
|
|
18
|
+
type ElementType = Int;
|
|
19
|
+
|
|
20
|
+
const typeNameInMessage = 'an integer';
|
|
33
21
|
|
|
34
22
|
/**
|
|
35
23
|
* Type guard that checks if a value is an integer.
|
|
@@ -50,7 +38,7 @@ const {
|
|
|
50
38
|
* @param value - The value to check
|
|
51
39
|
* @returns `true` if the value is an integer, `false` otherwise
|
|
52
40
|
*/
|
|
53
|
-
export const isInt = is;
|
|
41
|
+
export const isInt = (value: number): value is Int => Number.isInteger(value);
|
|
54
42
|
|
|
55
43
|
/**
|
|
56
44
|
* Casts a `number` to the `Int` branded type.
|
|
@@ -72,7 +60,13 @@ export const isInt = is;
|
|
|
72
60
|
* @returns The value as an `Int`
|
|
73
61
|
* @throws {TypeError} If the value is not an integer
|
|
74
62
|
*/
|
|
75
|
-
export const asInt =
|
|
63
|
+
export const asInt = <N extends number>(value: N): Int & N => {
|
|
64
|
+
if (!isInt(value)) {
|
|
65
|
+
throw new TypeError(`Expected ${typeNameInMessage}, got: ${value}`);
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
return value;
|
|
69
|
+
};
|
|
76
70
|
|
|
77
71
|
/**
|
|
78
72
|
* Namespace providing type-safe operations for the `Int` branded type.
|
|
@@ -101,7 +95,7 @@ export const Int = {
|
|
|
101
95
|
* @returns `true` if the value is an integer, `false` otherwise
|
|
102
96
|
* @see {@link isInt} for usage examples
|
|
103
97
|
*/
|
|
104
|
-
is,
|
|
98
|
+
is: isInt,
|
|
105
99
|
|
|
106
100
|
/**
|
|
107
101
|
* Returns the absolute value of an integer.
|
|
@@ -1,38 +1,26 @@
|
|
|
1
1
|
import type { Int16 as TtfImported_Int16 } from 'ts-type-forge';
|
|
2
2
|
import { expectType } from '../../expect-type.mjs';
|
|
3
|
-
import {
|
|
4
|
-
|
|
5
|
-
export type Int16 = TtfImported_Int16;
|
|
6
|
-
|
|
7
|
-
type ElementType = Int16;
|
|
8
|
-
|
|
9
|
-
const typeNameInMessage = 'an integer in [-2^15, 2^15)';
|
|
10
|
-
|
|
11
|
-
const {
|
|
3
|
+
import {
|
|
12
4
|
MAX_VALUE,
|
|
13
5
|
MIN_VALUE,
|
|
14
6
|
abs,
|
|
15
7
|
add,
|
|
16
|
-
castType,
|
|
17
8
|
div,
|
|
18
9
|
fromNumber,
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
min: min_,
|
|
10
|
+
max as max_,
|
|
11
|
+
min as min_,
|
|
22
12
|
mul,
|
|
23
13
|
pow,
|
|
24
14
|
random,
|
|
25
15
|
sub,
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
typeNameInMessage,
|
|
35
|
-
} as const);
|
|
16
|
+
} from '../operators/int16.mjs';
|
|
17
|
+
import type { TsDataForgeInternals } from '../refined-number-utils.mjs';
|
|
18
|
+
|
|
19
|
+
export type Int16 = TtfImported_Int16;
|
|
20
|
+
|
|
21
|
+
type ElementType = Int16;
|
|
22
|
+
|
|
23
|
+
const typeNameInMessage = 'an integer in [-2^15, 2^15)';
|
|
36
24
|
|
|
37
25
|
/**
|
|
38
26
|
* Type guard that checks if a value is an integer in [-2^15, 2^15).
|
|
@@ -43,7 +31,8 @@ const {
|
|
|
43
31
|
* @param value - The value to check
|
|
44
32
|
* @returns `true` if the value is an integer in [-2^15, 2^15), `false` otherwise
|
|
45
33
|
*/
|
|
46
|
-
export const isInt16 = is
|
|
34
|
+
export const isInt16 = (value: number): value is Int16 =>
|
|
35
|
+
Number.isSafeInteger(value) && -(2 ** 15) <= value && value <= 2 ** 15 - 1;
|
|
47
36
|
|
|
48
37
|
/**
|
|
49
38
|
* Casts a `number` to the `Int16` branded type.
|
|
@@ -55,7 +44,13 @@ export const isInt16 = is;
|
|
|
55
44
|
* @returns The value as an `Int16`
|
|
56
45
|
* @throws {TypeError} If the value is not an integer in [-2^15, 2^15)
|
|
57
46
|
*/
|
|
58
|
-
export const asInt16 =
|
|
47
|
+
export const asInt16 = <N extends number>(value: N): Int16 & N => {
|
|
48
|
+
if (!isInt16(value)) {
|
|
49
|
+
throw new TypeError(`Expected ${typeNameInMessage}, got: ${value}`);
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
return value;
|
|
53
|
+
};
|
|
59
54
|
|
|
60
55
|
/**
|
|
61
56
|
* Namespace providing type-safe operations for the `Int16` branded type.
|
|
@@ -71,7 +66,7 @@ export const Int16 = {
|
|
|
71
66
|
* @returns `true` if the value is an integer in [-2^15, 2^15), `false` otherwise
|
|
72
67
|
* @see {@link isInt16} for usage examples
|
|
73
68
|
*/
|
|
74
|
-
is,
|
|
69
|
+
is: isInt16,
|
|
75
70
|
|
|
76
71
|
/**
|
|
77
72
|
* The smallest value representable as `Int16` (the lower saturation target of
|