ts-data-forge 1.0.0 → 1.0.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/README.md +1 -1
- package/dist/array/array-utils.d.mts +2617 -0
- package/dist/array/array-utils.d.mts.map +1 -0
- package/dist/array/array-utils.mjs +2915 -0
- package/dist/array/array-utils.mjs.map +1 -0
- package/dist/array/index.d.mts +3 -0
- package/dist/array/index.d.mts.map +1 -0
- package/dist/array/index.mjs +3 -0
- package/dist/array/index.mjs.map +1 -0
- package/dist/array/tuple-utils.d.mts +421 -0
- package/dist/array/tuple-utils.d.mts.map +1 -0
- package/dist/array/tuple-utils.mjs +391 -0
- package/dist/array/tuple-utils.mjs.map +1 -0
- package/dist/collections/imap-mapped.d.mts +445 -0
- package/dist/collections/imap-mapped.d.mts.map +1 -0
- package/dist/collections/imap-mapped.mjs +424 -0
- package/dist/collections/imap-mapped.mjs.map +1 -0
- package/dist/collections/imap.d.mts +359 -0
- package/dist/collections/imap.d.mts.map +1 -0
- package/dist/collections/imap.mjs +338 -0
- package/dist/collections/imap.mjs.map +1 -0
- package/dist/collections/index.d.mts +7 -0
- package/dist/collections/index.d.mts.map +1 -0
- package/dist/collections/index.mjs +7 -0
- package/dist/collections/index.mjs.map +1 -0
- package/dist/collections/iset-mapped.d.mts +576 -0
- package/dist/collections/iset-mapped.d.mts.map +1 -0
- package/dist/collections/iset-mapped.mjs +522 -0
- package/dist/collections/iset-mapped.mjs.map +1 -0
- package/dist/collections/iset.d.mts +426 -0
- package/dist/collections/iset.d.mts.map +1 -0
- package/dist/collections/iset.mjs +437 -0
- package/dist/collections/iset.mjs.map +1 -0
- package/dist/collections/queue.d.mts +190 -0
- package/dist/collections/queue.d.mts.map +1 -0
- package/dist/collections/queue.mjs +317 -0
- package/dist/collections/queue.mjs.map +1 -0
- package/dist/collections/stack.d.mts +210 -0
- package/dist/collections/stack.d.mts.map +1 -0
- package/dist/collections/stack.mjs +353 -0
- package/dist/collections/stack.mjs.map +1 -0
- package/dist/expect-type.d.mts +199 -0
- package/dist/expect-type.d.mts.map +1 -0
- package/dist/expect-type.mjs +201 -0
- package/dist/expect-type.mjs.map +1 -0
- package/dist/functional/index.d.mts +5 -0
- package/dist/functional/index.d.mts.map +1 -0
- package/dist/functional/index.mjs +5 -0
- package/dist/functional/index.mjs.map +1 -0
- package/dist/functional/match.d.mts +215 -0
- package/dist/functional/match.d.mts.map +1 -0
- package/dist/functional/match.mjs +139 -0
- package/dist/functional/match.mjs.map +1 -0
- package/dist/functional/optional.d.mts +517 -0
- package/dist/functional/optional.d.mts.map +1 -0
- package/dist/functional/optional.mjs +532 -0
- package/dist/functional/optional.mjs.map +1 -0
- package/dist/functional/pipe.d.mts +185 -0
- package/dist/functional/pipe.d.mts.map +1 -0
- package/dist/functional/pipe.mjs +129 -0
- package/dist/functional/pipe.mjs.map +1 -0
- package/dist/functional/result.d.mts +796 -0
- package/dist/functional/result.d.mts.map +1 -0
- package/dist/functional/result.mjs +844 -0
- package/dist/functional/result.mjs.map +1 -0
- package/dist/globals.d.mts +38 -0
- package/dist/guard/has-key.d.mts +100 -0
- package/dist/guard/has-key.d.mts.map +1 -0
- package/dist/guard/has-key.mjs +94 -0
- package/dist/guard/has-key.mjs.map +1 -0
- package/dist/guard/index.d.mts +8 -0
- package/dist/guard/index.d.mts.map +1 -0
- package/dist/guard/index.mjs +8 -0
- package/dist/guard/index.mjs.map +1 -0
- package/dist/guard/is-non-empty-string.d.mts +106 -0
- package/dist/guard/is-non-empty-string.d.mts.map +1 -0
- package/dist/guard/is-non-empty-string.mjs +108 -0
- package/dist/guard/is-non-empty-string.mjs.map +1 -0
- package/dist/guard/is-non-null-object.d.mts +105 -0
- package/dist/guard/is-non-null-object.d.mts.map +1 -0
- package/dist/guard/is-non-null-object.mjs +108 -0
- package/dist/guard/is-non-null-object.mjs.map +1 -0
- package/dist/guard/is-primitive.d.mts +146 -0
- package/dist/guard/is-primitive.d.mts.map +1 -0
- package/dist/guard/is-primitive.mjs +161 -0
- package/dist/guard/is-primitive.mjs.map +1 -0
- package/dist/guard/is-record.d.mts +151 -0
- package/dist/guard/is-record.d.mts.map +1 -0
- package/dist/guard/is-record.mjs +155 -0
- package/dist/guard/is-record.mjs.map +1 -0
- package/dist/guard/is-type.d.mts +430 -0
- package/dist/guard/is-type.d.mts.map +1 -0
- package/dist/guard/is-type.mjs +432 -0
- package/dist/guard/is-type.mjs.map +1 -0
- package/dist/guard/key-is-in.d.mts +158 -0
- package/dist/guard/key-is-in.d.mts.map +1 -0
- package/dist/guard/key-is-in.mjs +160 -0
- package/dist/guard/key-is-in.mjs.map +1 -0
- package/dist/index.d.mts +11 -0
- package/dist/index.d.mts.map +1 -0
- package/dist/index.mjs +61 -0
- package/dist/index.mjs.map +1 -0
- package/dist/iterator/index.d.mts +2 -0
- package/dist/iterator/index.d.mts.map +1 -0
- package/dist/iterator/index.mjs +2 -0
- package/dist/iterator/index.mjs.map +1 -0
- package/dist/iterator/range.d.mts +97 -0
- package/dist/iterator/range.d.mts.map +1 -0
- package/dist/iterator/range.mjs +130 -0
- package/dist/iterator/range.mjs.map +1 -0
- package/dist/json/index.d.mts +2 -0
- package/dist/json/index.d.mts.map +1 -0
- package/dist/json/index.mjs +2 -0
- package/dist/json/index.mjs.map +1 -0
- package/dist/json/json.d.mts +597 -0
- package/dist/json/json.d.mts.map +1 -0
- package/dist/json/json.mjs +687 -0
- package/dist/json/json.mjs.map +1 -0
- package/dist/number/branded-types/finite-number.d.mts +291 -0
- package/dist/number/branded-types/finite-number.d.mts.map +1 -0
- package/dist/number/branded-types/finite-number.mjs +296 -0
- package/dist/number/branded-types/finite-number.mjs.map +1 -0
- package/dist/number/branded-types/index.d.mts +27 -0
- package/dist/number/branded-types/index.d.mts.map +1 -0
- package/dist/number/branded-types/index.mjs +27 -0
- package/dist/number/branded-types/index.mjs.map +1 -0
- package/dist/number/branded-types/int.d.mts +242 -0
- package/dist/number/branded-types/int.d.mts.map +1 -0
- package/dist/number/branded-types/int.mjs +239 -0
- package/dist/number/branded-types/int.mjs.map +1 -0
- package/dist/number/branded-types/int16.d.mts +162 -0
- package/dist/number/branded-types/int16.d.mts.map +1 -0
- package/dist/number/branded-types/int16.mjs +141 -0
- package/dist/number/branded-types/int16.mjs.map +1 -0
- package/dist/number/branded-types/int32.d.mts +155 -0
- package/dist/number/branded-types/int32.d.mts.map +1 -0
- package/dist/number/branded-types/int32.mjs +142 -0
- package/dist/number/branded-types/int32.mjs.map +1 -0
- package/dist/number/branded-types/non-negative-finite-number.d.mts +165 -0
- package/dist/number/branded-types/non-negative-finite-number.d.mts.map +1 -0
- package/dist/number/branded-types/non-negative-finite-number.mjs +160 -0
- package/dist/number/branded-types/non-negative-finite-number.mjs.map +1 -0
- package/dist/number/branded-types/non-negative-int16.d.mts +160 -0
- package/dist/number/branded-types/non-negative-int16.d.mts.map +1 -0
- package/dist/number/branded-types/non-negative-int16.mjs +138 -0
- package/dist/number/branded-types/non-negative-int16.mjs.map +1 -0
- package/dist/number/branded-types/non-negative-int32.d.mts +156 -0
- package/dist/number/branded-types/non-negative-int32.d.mts.map +1 -0
- package/dist/number/branded-types/non-negative-int32.mjs +138 -0
- package/dist/number/branded-types/non-negative-int32.mjs.map +1 -0
- package/dist/number/branded-types/non-zero-finite-number.d.mts +154 -0
- package/dist/number/branded-types/non-zero-finite-number.d.mts.map +1 -0
- package/dist/number/branded-types/non-zero-finite-number.mjs +160 -0
- package/dist/number/branded-types/non-zero-finite-number.mjs.map +1 -0
- package/dist/number/branded-types/non-zero-int.d.mts +131 -0
- package/dist/number/branded-types/non-zero-int.d.mts.map +1 -0
- package/dist/number/branded-types/non-zero-int.mjs +128 -0
- package/dist/number/branded-types/non-zero-int.mjs.map +1 -0
- package/dist/number/branded-types/non-zero-int16.d.mts +166 -0
- package/dist/number/branded-types/non-zero-int16.d.mts.map +1 -0
- package/dist/number/branded-types/non-zero-int16.mjs +145 -0
- package/dist/number/branded-types/non-zero-int16.mjs.map +1 -0
- package/dist/number/branded-types/non-zero-int32.d.mts +158 -0
- package/dist/number/branded-types/non-zero-int32.d.mts.map +1 -0
- package/dist/number/branded-types/non-zero-int32.mjs +145 -0
- package/dist/number/branded-types/non-zero-int32.mjs.map +1 -0
- package/dist/number/branded-types/non-zero-safe-int.d.mts +148 -0
- package/dist/number/branded-types/non-zero-safe-int.d.mts.map +1 -0
- package/dist/number/branded-types/non-zero-safe-int.mjs +145 -0
- package/dist/number/branded-types/non-zero-safe-int.mjs.map +1 -0
- package/dist/number/branded-types/non-zero-uint16.d.mts +160 -0
- package/dist/number/branded-types/non-zero-uint16.d.mts.map +1 -0
- package/dist/number/branded-types/non-zero-uint16.mjs +140 -0
- package/dist/number/branded-types/non-zero-uint16.mjs.map +1 -0
- package/dist/number/branded-types/non-zero-uint32.d.mts +156 -0
- package/dist/number/branded-types/non-zero-uint32.d.mts.map +1 -0
- package/dist/number/branded-types/non-zero-uint32.mjs +140 -0
- package/dist/number/branded-types/non-zero-uint32.mjs.map +1 -0
- package/dist/number/branded-types/positive-finite-number.d.mts +171 -0
- package/dist/number/branded-types/positive-finite-number.d.mts.map +1 -0
- package/dist/number/branded-types/positive-finite-number.mjs +165 -0
- package/dist/number/branded-types/positive-finite-number.mjs.map +1 -0
- package/dist/number/branded-types/positive-int.d.mts +270 -0
- package/dist/number/branded-types/positive-int.d.mts.map +1 -0
- package/dist/number/branded-types/positive-int.mjs +257 -0
- package/dist/number/branded-types/positive-int.mjs.map +1 -0
- package/dist/number/branded-types/positive-int16.d.mts +162 -0
- package/dist/number/branded-types/positive-int16.d.mts.map +1 -0
- package/dist/number/branded-types/positive-int16.mjs +139 -0
- package/dist/number/branded-types/positive-int16.mjs.map +1 -0
- package/dist/number/branded-types/positive-int32.d.mts +158 -0
- package/dist/number/branded-types/positive-int32.d.mts.map +1 -0
- package/dist/number/branded-types/positive-int32.mjs +139 -0
- package/dist/number/branded-types/positive-int32.mjs.map +1 -0
- package/dist/number/branded-types/positive-safe-int.d.mts +152 -0
- package/dist/number/branded-types/positive-safe-int.d.mts.map +1 -0
- package/dist/number/branded-types/positive-safe-int.mjs +138 -0
- package/dist/number/branded-types/positive-safe-int.mjs.map +1 -0
- package/dist/number/branded-types/positive-uint16.d.mts +160 -0
- package/dist/number/branded-types/positive-uint16.d.mts.map +1 -0
- package/dist/number/branded-types/positive-uint16.mjs +139 -0
- package/dist/number/branded-types/positive-uint16.mjs.map +1 -0
- package/dist/number/branded-types/positive-uint32.d.mts +156 -0
- package/dist/number/branded-types/positive-uint32.d.mts.map +1 -0
- package/dist/number/branded-types/positive-uint32.mjs +139 -0
- package/dist/number/branded-types/positive-uint32.mjs.map +1 -0
- package/dist/number/branded-types/safe-int.d.mts +243 -0
- package/dist/number/branded-types/safe-int.d.mts.map +1 -0
- package/dist/number/branded-types/safe-int.mjs +240 -0
- package/dist/number/branded-types/safe-int.mjs.map +1 -0
- package/dist/number/branded-types/safe-uint.d.mts +151 -0
- package/dist/number/branded-types/safe-uint.d.mts.map +1 -0
- package/dist/number/branded-types/safe-uint.mjs +138 -0
- package/dist/number/branded-types/safe-uint.mjs.map +1 -0
- package/dist/number/branded-types/uint.d.mts +144 -0
- package/dist/number/branded-types/uint.d.mts.map +1 -0
- package/dist/number/branded-types/uint.mjs +132 -0
- package/dist/number/branded-types/uint.mjs.map +1 -0
- package/dist/number/branded-types/uint16.d.mts +157 -0
- package/dist/number/branded-types/uint16.d.mts.map +1 -0
- package/dist/number/branded-types/uint16.mjs +137 -0
- package/dist/number/branded-types/uint16.mjs.map +1 -0
- package/dist/number/branded-types/uint32.d.mts +185 -0
- package/dist/number/branded-types/uint32.d.mts.map +1 -0
- package/dist/number/branded-types/uint32.mjs +169 -0
- package/dist/number/branded-types/uint32.mjs.map +1 -0
- package/dist/number/enum/index.d.mts +3 -0
- package/dist/number/enum/index.d.mts.map +1 -0
- package/dist/number/enum/index.mjs +3 -0
- package/dist/number/enum/index.mjs.map +1 -0
- package/dist/number/enum/int8.d.mts +202 -0
- package/dist/number/enum/int8.d.mts.map +1 -0
- package/dist/number/enum/int8.mjs +296 -0
- package/dist/number/enum/int8.mjs.map +1 -0
- package/dist/number/enum/uint8.d.mts +128 -0
- package/dist/number/enum/uint8.d.mts.map +1 -0
- package/dist/number/enum/uint8.mjs +251 -0
- package/dist/number/enum/uint8.mjs.map +1 -0
- package/dist/number/index.d.mts +5 -0
- package/dist/number/index.d.mts.map +1 -0
- package/dist/number/index.mjs +31 -0
- package/dist/number/index.mjs.map +1 -0
- package/dist/number/num.d.mts +515 -0
- package/dist/number/num.d.mts.map +1 -0
- package/dist/number/num.mjs +513 -0
- package/dist/number/num.mjs.map +1 -0
- package/dist/number/refined-number-utils.d.mts +191 -0
- package/dist/number/refined-number-utils.d.mts.map +1 -0
- package/dist/number/refined-number-utils.mjs +179 -0
- package/dist/number/refined-number-utils.mjs.map +1 -0
- package/dist/object/index.d.mts +2 -0
- package/dist/object/index.d.mts.map +1 -0
- package/dist/object/index.mjs +2 -0
- package/dist/object/index.mjs.map +1 -0
- package/dist/object/object.d.mts +296 -0
- package/dist/object/object.d.mts.map +1 -0
- package/dist/object/object.mjs +295 -0
- package/dist/object/object.mjs.map +1 -0
- package/dist/others/cast-mutable.d.mts +110 -0
- package/dist/others/cast-mutable.d.mts.map +1 -0
- package/dist/others/cast-mutable.mjs +114 -0
- package/dist/others/cast-mutable.mjs.map +1 -0
- package/dist/others/cast-readonly.d.mts +189 -0
- package/dist/others/cast-readonly.d.mts.map +1 -0
- package/dist/others/cast-readonly.mjs +193 -0
- package/dist/others/cast-readonly.mjs.map +1 -0
- package/dist/others/if-then.d.mts +98 -0
- package/dist/others/if-then.d.mts.map +1 -0
- package/dist/others/if-then.mjs +100 -0
- package/dist/others/if-then.mjs.map +1 -0
- package/dist/others/index.d.mts +8 -0
- package/dist/others/index.d.mts.map +1 -0
- package/dist/others/index.mjs +8 -0
- package/dist/others/index.mjs.map +1 -0
- package/dist/others/map-nullable.d.mts +151 -0
- package/dist/others/map-nullable.d.mts.map +1 -0
- package/dist/others/map-nullable.mjs +159 -0
- package/dist/others/map-nullable.mjs.map +1 -0
- package/dist/others/memoize-function.d.mts +173 -0
- package/dist/others/memoize-function.d.mts.map +1 -0
- package/dist/others/memoize-function.mjs +189 -0
- package/dist/others/memoize-function.mjs.map +1 -0
- package/dist/others/tuple.d.mts +159 -0
- package/dist/others/tuple.d.mts.map +1 -0
- package/dist/others/tuple.mjs +161 -0
- package/dist/others/tuple.mjs.map +1 -0
- package/dist/others/unknown-to-string.d.mts +180 -0
- package/dist/others/unknown-to-string.d.mts.map +1 -0
- package/dist/others/unknown-to-string.mjs +211 -0
- package/dist/others/unknown-to-string.mjs.map +1 -0
- package/dist/tsconfig.json +1 -0
- package/package.json +18 -16
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
import { TsVerifiedInternals } from '../refined-number-utils.mjs';
|
|
2
|
+
|
|
3
|
+
const typeNameInMessage = 'a positive finite number';
|
|
4
|
+
const { MIN_VALUE, min: min_, max: max_, pow, add, sub, mul, div, random, is, castType, clamp, } = TsVerifiedInternals.RefinedNumberUtils.operatorsForFloat({
|
|
5
|
+
MIN_VALUE: Number.MIN_VALUE,
|
|
6
|
+
MAX_VALUE: undefined,
|
|
7
|
+
typeNameInMessage,
|
|
8
|
+
});
|
|
9
|
+
const floor = (x) =>
|
|
10
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion
|
|
11
|
+
Math.floor(x);
|
|
12
|
+
const ceil = (x) =>
|
|
13
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion
|
|
14
|
+
Math.ceil(x);
|
|
15
|
+
const round = (x) =>
|
|
16
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion
|
|
17
|
+
Math.round(x);
|
|
18
|
+
/**
|
|
19
|
+
* Checks if a number is a PositiveFiniteNumber (a finite number > 0).
|
|
20
|
+
* @param value The value to check.
|
|
21
|
+
* @returns `true` if the value is a PositiveFiniteNumber, `false` otherwise.
|
|
22
|
+
*/
|
|
23
|
+
const isPositiveFiniteNumber = is;
|
|
24
|
+
/**
|
|
25
|
+
* Casts a number to a PositiveFiniteNumber type.
|
|
26
|
+
* @param value The value to cast.
|
|
27
|
+
* @returns The value as a PositiveFiniteNumber type.
|
|
28
|
+
* @throws {TypeError} If the value is not a positive finite number.
|
|
29
|
+
* @example
|
|
30
|
+
* ```typescript
|
|
31
|
+
* const x = asPositiveFiniteNumber(5.5); // PositiveFiniteNumber
|
|
32
|
+
* const y = asPositiveFiniteNumber(0.001); // PositiveFiniteNumber
|
|
33
|
+
* // asPositiveFiniteNumber(0); // throws TypeError
|
|
34
|
+
* // asPositiveFiniteNumber(-1); // throws TypeError
|
|
35
|
+
* ```
|
|
36
|
+
*/
|
|
37
|
+
const asPositiveFiniteNumber = castType;
|
|
38
|
+
/**
|
|
39
|
+
* Namespace providing type-safe arithmetic operations for positive finite numbers.
|
|
40
|
+
*
|
|
41
|
+
* All operations maintain the positive constraint by clamping non-positive results to MIN_VALUE,
|
|
42
|
+
* while ensuring results remain finite (excluding NaN and Infinity). This type is useful
|
|
43
|
+
* for representing quantities that must always be positive, such as probabilities, magnitudes,
|
|
44
|
+
* and physical measurements.
|
|
45
|
+
*
|
|
46
|
+
* @example
|
|
47
|
+
* ```typescript
|
|
48
|
+
* const probability = asPositiveFiniteNumber(0.75);
|
|
49
|
+
* const rate = asPositiveFiniteNumber(1.25);
|
|
50
|
+
*
|
|
51
|
+
* // Arithmetic operations with positive clamping
|
|
52
|
+
* const combined = PositiveFiniteNumber.add(probability, rate); // PositiveFiniteNumber (2.0)
|
|
53
|
+
* const difference = PositiveFiniteNumber.sub(rate, probability); // PositiveFiniteNumber (0.5)
|
|
54
|
+
* const scaled = PositiveFiniteNumber.mul(probability, rate); // PositiveFiniteNumber (0.9375)
|
|
55
|
+
* const ratio = PositiveFiniteNumber.div(rate, probability); // PositiveFiniteNumber (1.666...)
|
|
56
|
+
*
|
|
57
|
+
* // Range operations
|
|
58
|
+
* const clamped = PositiveFiniteNumber.clamp(-10.5); // PositiveFiniteNumber (MIN_VALUE)
|
|
59
|
+
* const minimum = PositiveFiniteNumber.min(probability, rate); // PositiveFiniteNumber (0.75)
|
|
60
|
+
* const maximum = PositiveFiniteNumber.max(probability, rate); // PositiveFiniteNumber (1.25)
|
|
61
|
+
*
|
|
62
|
+
* // Rounding operations (different return types based on operation)
|
|
63
|
+
* const ceiled = PositiveFiniteNumber.ceil(probability); // PositiveInt (1)
|
|
64
|
+
* const floored = PositiveFiniteNumber.floor(rate); // Uint (1)
|
|
65
|
+
* const rounded = PositiveFiniteNumber.round(rate); // Uint (1)
|
|
66
|
+
*
|
|
67
|
+
* // Utility operations
|
|
68
|
+
* const random = PositiveFiniteNumber.random(); // PositiveFiniteNumber (random positive value)
|
|
69
|
+
* const power = PositiveFiniteNumber.pow(rate, probability); // PositiveFiniteNumber (1.18...)
|
|
70
|
+
* ```
|
|
71
|
+
*/
|
|
72
|
+
const PositiveFiniteNumber = {
|
|
73
|
+
/**
|
|
74
|
+
* Type guard to check if a value is a PositiveFiniteNumber.
|
|
75
|
+
* @param value The value to check.
|
|
76
|
+
* @returns `true` if the value is a positive finite number, `false` otherwise.
|
|
77
|
+
*/
|
|
78
|
+
is,
|
|
79
|
+
/**
|
|
80
|
+
* The minimum value for a positive finite number.
|
|
81
|
+
* @readonly
|
|
82
|
+
*/
|
|
83
|
+
MIN_VALUE,
|
|
84
|
+
/**
|
|
85
|
+
* Returns the smaller of two PositiveFiniteNumber values.
|
|
86
|
+
* @param a The first PositiveFiniteNumber.
|
|
87
|
+
* @param b The second PositiveFiniteNumber.
|
|
88
|
+
* @returns The minimum value as a PositiveFiniteNumber.
|
|
89
|
+
*/
|
|
90
|
+
min: min_,
|
|
91
|
+
/**
|
|
92
|
+
* Returns the larger of two PositiveFiniteNumber values.
|
|
93
|
+
* @param a The first PositiveFiniteNumber.
|
|
94
|
+
* @param b The second PositiveFiniteNumber.
|
|
95
|
+
* @returns The maximum value as a PositiveFiniteNumber.
|
|
96
|
+
*/
|
|
97
|
+
max: max_,
|
|
98
|
+
/**
|
|
99
|
+
* Clamps a number to the positive finite range.
|
|
100
|
+
* @param value The number to clamp.
|
|
101
|
+
* @returns The value clamped to (0, +∞) as a PositiveFiniteNumber.
|
|
102
|
+
*/
|
|
103
|
+
clamp,
|
|
104
|
+
/**
|
|
105
|
+
* Rounds down a PositiveFiniteNumber to the nearest integer.
|
|
106
|
+
* @param x The PositiveFiniteNumber to round down.
|
|
107
|
+
* @returns The floor value as a Uint (can be 0).
|
|
108
|
+
*/
|
|
109
|
+
floor,
|
|
110
|
+
/**
|
|
111
|
+
* Rounds up a PositiveFiniteNumber to the nearest integer.
|
|
112
|
+
* @param x The PositiveFiniteNumber to round up.
|
|
113
|
+
* @returns The ceiling value as a PositiveInt (always >= 1).
|
|
114
|
+
*/
|
|
115
|
+
ceil,
|
|
116
|
+
/**
|
|
117
|
+
* Rounds a PositiveFiniteNumber to the nearest integer.
|
|
118
|
+
* @param x The PositiveFiniteNumber to round.
|
|
119
|
+
* @returns The rounded value as a Uint (can be 0 if x < 0.5).
|
|
120
|
+
*/
|
|
121
|
+
round,
|
|
122
|
+
/**
|
|
123
|
+
* Generates a random PositiveFiniteNumber value.
|
|
124
|
+
* @returns A random positive finite number.
|
|
125
|
+
*/
|
|
126
|
+
random,
|
|
127
|
+
/**
|
|
128
|
+
* Raises a PositiveFiniteNumber to the power of another PositiveFiniteNumber.
|
|
129
|
+
* @param a The base PositiveFiniteNumber.
|
|
130
|
+
* @param b The exponent PositiveFiniteNumber.
|
|
131
|
+
* @returns `a ** b` clamped to (0, +∞) as a PositiveFiniteNumber.
|
|
132
|
+
*/
|
|
133
|
+
pow,
|
|
134
|
+
/**
|
|
135
|
+
* Adds two PositiveFiniteNumber values.
|
|
136
|
+
* @param a The first PositiveFiniteNumber.
|
|
137
|
+
* @param b The second PositiveFiniteNumber.
|
|
138
|
+
* @returns `a + b` clamped to (0, +∞) as a PositiveFiniteNumber.
|
|
139
|
+
*/
|
|
140
|
+
add,
|
|
141
|
+
/**
|
|
142
|
+
* Subtracts one PositiveFiniteNumber from another.
|
|
143
|
+
* @param a The minuend PositiveFiniteNumber.
|
|
144
|
+
* @param b The subtrahend PositiveFiniteNumber.
|
|
145
|
+
* @returns `a - b` clamped to (0, +∞) as a PositiveFiniteNumber (minimum MIN_VALUE).
|
|
146
|
+
*/
|
|
147
|
+
sub,
|
|
148
|
+
/**
|
|
149
|
+
* Multiplies two PositiveFiniteNumber values.
|
|
150
|
+
* @param a The first PositiveFiniteNumber.
|
|
151
|
+
* @param b The second PositiveFiniteNumber.
|
|
152
|
+
* @returns `a * b` clamped to (0, +∞) as a PositiveFiniteNumber.
|
|
153
|
+
*/
|
|
154
|
+
mul,
|
|
155
|
+
/**
|
|
156
|
+
* Divides one PositiveFiniteNumber by another.
|
|
157
|
+
* @param a The dividend PositiveFiniteNumber.
|
|
158
|
+
* @param b The divisor PositiveFiniteNumber.
|
|
159
|
+
* @returns `a / b` clamped to (0, +∞) as a PositiveFiniteNumber.
|
|
160
|
+
*/
|
|
161
|
+
div,
|
|
162
|
+
};
|
|
163
|
+
|
|
164
|
+
export { PositiveFiniteNumber, asPositiveFiniteNumber, isPositiveFiniteNumber };
|
|
165
|
+
//# sourceMappingURL=positive-finite-number.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"positive-finite-number.mjs","sources":["../../../src/number/branded-types/positive-finite-number.mts"],"sourcesContent":[null],"names":[],"mappings":";;AAKA,MAAM,iBAAiB,GAAG,0BAA0B;AAEpD,MAAM,EACJ,SAAS,EACT,GAAG,EAAE,IAAI,EACT,GAAG,EAAE,IAAI,EACT,GAAG,EACH,GAAG,EACH,GAAG,EACH,GAAG,EACH,GAAG,EACH,MAAM,EACN,EAAE,EACF,QAAQ,EACR,KAAK,GACN,GAAG,mBAAmB,CAAC,kBAAkB,CAAC,iBAAiB,CAI1D;IACA,SAAS,EAAE,MAAM,CAAC,SAAS;AAC3B,IAAA,SAAS,EAAE,SAAS;IACpB,iBAAiB;AACT,CAAA,CAAC;AAEX,MAAM,KAAK,GAAG,CACZ,CAAc;AAId;AACA,IAAI,CAAC,KAAK,CAAC,CAAC,CAEX;AAEH,MAAM,IAAI,GAAG,CACX,CAAc;AAEd;AACA,IAAI,CAAC,IAAI,CAAC,CAAC,CAA8D;AAE3E,MAAM,KAAK,GAAG,CACZ,CAAc;AAId;AACA,IAAI,CAAC,KAAK,CAAC,CAAC,CAEX;AAcH;;;;AAIG;AACI,MAAM,sBAAsB,GAAG;AAEtC;;;;;;;;;;;;AAYG;AACI,MAAM,sBAAsB,GAAG;AAEtC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiCG;AACI,MAAM,oBAAoB,GAAG;AAClC;;;;AAIG;IACH,EAAE;AAEF;;;AAGG;IACH,SAAS;AAET;;;;;AAKG;AACH,IAAA,GAAG,EAAE,IAAI;AAET;;;;;AAKG;AACH,IAAA,GAAG,EAAE,IAAI;AAET;;;;AAIG;IACH,KAAK;AAEL;;;;AAIG;IACH,KAAK;AAEL;;;;AAIG;IACH,IAAI;AAEJ;;;;AAIG;IACH,KAAK;AAEL;;;AAGG;IACH,MAAM;AAEN;;;;;AAKG;IACH,GAAG;AAEH;;;;;AAKG;IACH,GAAG;AAEH;;;;;AAKG;IACH,GAAG;AAEH;;;;;AAKG;IACH,GAAG;AAEH;;;;;AAKG;IACH,GAAG;;;;;"}
|
|
@@ -0,0 +1,270 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Type guard that checks if a value is a positive integer.
|
|
3
|
+
*
|
|
4
|
+
* A positive integer is any integer greater than zero (>= 1).
|
|
5
|
+
* This excludes zero, negative numbers, and non-integers.
|
|
6
|
+
*
|
|
7
|
+
* @param value - The value to check
|
|
8
|
+
* @returns `true` if the value is a positive integer, `false` otherwise
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* ```typescript
|
|
12
|
+
* isPositiveInt(5); // true
|
|
13
|
+
* isPositiveInt(1); // true
|
|
14
|
+
* isPositiveInt(0); // false (zero is not positive)
|
|
15
|
+
* isPositiveInt(-1); // false (negative)
|
|
16
|
+
* isPositiveInt(5.5); // false (not an integer)
|
|
17
|
+
* isPositiveInt(NaN); // false
|
|
18
|
+
* ```
|
|
19
|
+
*/
|
|
20
|
+
export declare const isPositiveInt: (a: number) => a is PositiveInt;
|
|
21
|
+
/**
|
|
22
|
+
* Casts a number to a PositiveInt branded type.
|
|
23
|
+
*
|
|
24
|
+
* This function validates that the input is a positive integer (>= 1)
|
|
25
|
+
* and returns it with the PositiveInt brand. This ensures type safety
|
|
26
|
+
* for operations that require strictly positive integer values.
|
|
27
|
+
*
|
|
28
|
+
* @param value - The value to cast
|
|
29
|
+
* @returns The value as a PositiveInt branded type
|
|
30
|
+
* @throws {TypeError} If the value is not a positive integer
|
|
31
|
+
*
|
|
32
|
+
* @example
|
|
33
|
+
* ```typescript
|
|
34
|
+
* const count = asPositiveInt(5); // PositiveInt
|
|
35
|
+
* const length = asPositiveInt(100); // PositiveInt
|
|
36
|
+
* const one = asPositiveInt(1); // PositiveInt (minimum valid)
|
|
37
|
+
*
|
|
38
|
+
* // These throw TypeError:
|
|
39
|
+
* // asPositiveInt(0); // Zero is not positive
|
|
40
|
+
* // asPositiveInt(-1); // Negative numbers not allowed
|
|
41
|
+
* // asPositiveInt(5.5); // Not an integer
|
|
42
|
+
* // asPositiveInt(Infinity); // Not finite
|
|
43
|
+
* ```
|
|
44
|
+
*/
|
|
45
|
+
export declare const asPositiveInt: <N extends number>(x: N) => number & {
|
|
46
|
+
readonly NaNValue: false;
|
|
47
|
+
readonly "!=0": true;
|
|
48
|
+
readonly "> -2^16": true;
|
|
49
|
+
readonly "> -2^32": true;
|
|
50
|
+
readonly ">= -2^15": true;
|
|
51
|
+
readonly ">= -2^31": true;
|
|
52
|
+
readonly ">=0": true;
|
|
53
|
+
readonly Finite: true;
|
|
54
|
+
readonly Int: true;
|
|
55
|
+
} & Readonly<{
|
|
56
|
+
'TSTypeForgeInternals--edd2f9ce-7ca5-45b0-9d1a-bd61b9b5d9c3': unknown;
|
|
57
|
+
}> & N;
|
|
58
|
+
/**
|
|
59
|
+
* Namespace providing type-safe operations for PositiveInt branded types.
|
|
60
|
+
*
|
|
61
|
+
* PositiveInt represents integers that are strictly greater than zero (>= 1).
|
|
62
|
+
* All operations automatically clamp results to maintain the positive constraint,
|
|
63
|
+
* ensuring that arithmetic operations never produce zero or negative values.
|
|
64
|
+
*
|
|
65
|
+
* This type is essential for:
|
|
66
|
+
* - Array lengths and sizes (length >= 1)
|
|
67
|
+
* - Counts and quantities that must be positive
|
|
68
|
+
* - Denominators in division operations
|
|
69
|
+
* - Loop counters and iteration counts
|
|
70
|
+
* - Database primary keys and IDs
|
|
71
|
+
*
|
|
72
|
+
* @example
|
|
73
|
+
* ```typescript
|
|
74
|
+
* // Type validation
|
|
75
|
+
* PositiveInt.is(5); // true
|
|
76
|
+
* PositiveInt.is(1); // true (minimum value)
|
|
77
|
+
* PositiveInt.is(0); // false
|
|
78
|
+
* PositiveInt.is(-1); // false
|
|
79
|
+
*
|
|
80
|
+
* // Automatic clamping in operations
|
|
81
|
+
* const a = asPositiveInt(10);
|
|
82
|
+
* const b = asPositiveInt(3);
|
|
83
|
+
*
|
|
84
|
+
* const sum = PositiveInt.add(a, b); // PositiveInt (13)
|
|
85
|
+
* const diff1 = PositiveInt.sub(a, b); // PositiveInt (7)
|
|
86
|
+
* const diff2 = PositiveInt.sub(b, a); // PositiveInt (1) - clamped!
|
|
87
|
+
* const product = PositiveInt.mul(a, b); // PositiveInt (30)
|
|
88
|
+
* const quotient = PositiveInt.div(a, b); // PositiveInt (3)
|
|
89
|
+
*
|
|
90
|
+
* // Edge case: division that would be < 1
|
|
91
|
+
* const small = PositiveInt.div(asPositiveInt(2), asPositiveInt(3)); // PositiveInt (1)
|
|
92
|
+
*
|
|
93
|
+
* // Range operations
|
|
94
|
+
* const minimum = PositiveInt.min(a, b); // PositiveInt (3)
|
|
95
|
+
* const maximum = PositiveInt.max(a, b); // PositiveInt (10)
|
|
96
|
+
*
|
|
97
|
+
* // Random generation
|
|
98
|
+
* const dice = PositiveInt.random(asPositiveInt(1), asPositiveInt(6)); // 1-6
|
|
99
|
+
* const id = PositiveInt.random(asPositiveInt(1000), asPositiveInt(9999)); // 4-digit ID
|
|
100
|
+
* ```
|
|
101
|
+
*/
|
|
102
|
+
export declare const PositiveInt: {
|
|
103
|
+
/**
|
|
104
|
+
* Type guard that checks if a value is a positive integer.
|
|
105
|
+
*
|
|
106
|
+
* @param value - The value to check
|
|
107
|
+
* @returns `true` if the value is a positive integer, `false` otherwise
|
|
108
|
+
*
|
|
109
|
+
* @see {@link isPositiveInt} for usage examples
|
|
110
|
+
*/
|
|
111
|
+
readonly is: (a: number) => a is PositiveInt;
|
|
112
|
+
/**
|
|
113
|
+
* The minimum value for a PositiveInt.
|
|
114
|
+
* @readonly
|
|
115
|
+
*/
|
|
116
|
+
readonly MIN_VALUE: 1;
|
|
117
|
+
/**
|
|
118
|
+
* Returns the minimum value from a list of positive integers.
|
|
119
|
+
*
|
|
120
|
+
* Since all inputs are guaranteed to be >= 1, the result is also guaranteed
|
|
121
|
+
* to be a positive integer.
|
|
122
|
+
*
|
|
123
|
+
* @param values - The positive integers to compare (at least one required)
|
|
124
|
+
* @returns The smallest value as a PositiveInt
|
|
125
|
+
*
|
|
126
|
+
* @example
|
|
127
|
+
* ```typescript
|
|
128
|
+
* PositiveInt.min(asPositiveInt(5), asPositiveInt(3)); // PositiveInt (3)
|
|
129
|
+
* PositiveInt.min(asPositiveInt(10), asPositiveInt(1), asPositiveInt(7)); // PositiveInt (1)
|
|
130
|
+
* ```
|
|
131
|
+
*/
|
|
132
|
+
readonly min: (...values: readonly WithSmallInt<PositiveInt, 40>[]) => PositiveInt;
|
|
133
|
+
/**
|
|
134
|
+
* Returns the maximum value from a list of positive integers.
|
|
135
|
+
*
|
|
136
|
+
* @param values - The positive integers to compare (at least one required)
|
|
137
|
+
* @returns The largest value as a PositiveInt
|
|
138
|
+
*
|
|
139
|
+
* @example
|
|
140
|
+
* ```typescript
|
|
141
|
+
* PositiveInt.max(asPositiveInt(5), asPositiveInt(3)); // PositiveInt (5)
|
|
142
|
+
* PositiveInt.max(asPositiveInt(10), asPositiveInt(1), asPositiveInt(7)); // PositiveInt (10)
|
|
143
|
+
* ```
|
|
144
|
+
*/
|
|
145
|
+
readonly max: (...values: readonly WithSmallInt<PositiveInt, 40>[]) => PositiveInt;
|
|
146
|
+
/**
|
|
147
|
+
* Clamps a number to the positive integer range.
|
|
148
|
+
*
|
|
149
|
+
* Since PositiveInt has a minimum value of 1, this function ensures
|
|
150
|
+
* that any input less than 1 is clamped to 1.
|
|
151
|
+
*
|
|
152
|
+
* @param value - The number to clamp
|
|
153
|
+
* @returns The value clamped to >= 1 as a PositiveInt
|
|
154
|
+
*
|
|
155
|
+
* @example
|
|
156
|
+
* ```typescript
|
|
157
|
+
* PositiveInt.clamp(5); // PositiveInt (5)
|
|
158
|
+
* PositiveInt.clamp(0); // PositiveInt (1) - clamped to minimum
|
|
159
|
+
* PositiveInt.clamp(-10); // PositiveInt (1) - clamped to minimum
|
|
160
|
+
* PositiveInt.clamp(100); // PositiveInt (100)
|
|
161
|
+
* ```
|
|
162
|
+
*/
|
|
163
|
+
readonly clamp: (x: number) => PositiveInt;
|
|
164
|
+
/**
|
|
165
|
+
* Generates a random positive integer within the specified range (inclusive).
|
|
166
|
+
*
|
|
167
|
+
* Both bounds are inclusive, and both min and max must be positive integers.
|
|
168
|
+
* If min > max, they are automatically swapped.
|
|
169
|
+
*
|
|
170
|
+
* @param min - The minimum value (inclusive, must be >= 1)
|
|
171
|
+
* @param max - The maximum value (inclusive, must be >= min)
|
|
172
|
+
* @returns A random PositiveInt in the range [min, max]
|
|
173
|
+
*
|
|
174
|
+
* @example
|
|
175
|
+
* ```typescript
|
|
176
|
+
* // Dice roll
|
|
177
|
+
* const d6 = PositiveInt.random(asPositiveInt(1), asPositiveInt(6));
|
|
178
|
+
*
|
|
179
|
+
* // Random user ID
|
|
180
|
+
* const userId = PositiveInt.random(asPositiveInt(1000), asPositiveInt(9999));
|
|
181
|
+
*
|
|
182
|
+
* // Random page count
|
|
183
|
+
* const pages = PositiveInt.random(asPositiveInt(50), asPositiveInt(500));
|
|
184
|
+
* ```
|
|
185
|
+
*/
|
|
186
|
+
readonly random: (min: WithSmallInt<PositiveInt, 40>, max: WithSmallInt<PositiveInt, 40>) => PositiveInt;
|
|
187
|
+
/**
|
|
188
|
+
* Raises a positive integer to a power, ensuring the result is never less than 1.
|
|
189
|
+
* @param a - The base positive integer
|
|
190
|
+
* @param b - The exponent positive integer
|
|
191
|
+
* @returns `a ** b` as a PositiveInt, but never less than 1
|
|
192
|
+
* @example
|
|
193
|
+
* ```typescript
|
|
194
|
+
* PositiveInt.pow(asPositiveInt(2), asPositiveInt(3)); // PositiveInt (8)
|
|
195
|
+
* ```
|
|
196
|
+
*/
|
|
197
|
+
readonly pow: (x: WithSmallInt<PositiveInt, 40>, y: WithSmallInt<PositiveInt, 40>) => PositiveInt;
|
|
198
|
+
/**
|
|
199
|
+
* Adds two positive integers, ensuring the result is never less than 1.
|
|
200
|
+
* @param a - First positive integer
|
|
201
|
+
* @param b - Second positive integer
|
|
202
|
+
* @returns `a + b` as a PositiveInt, but never less than 1
|
|
203
|
+
* @example
|
|
204
|
+
* ```typescript
|
|
205
|
+
* PositiveInt.add(asPositiveInt(5), asPositiveInt(3)); // PositiveInt (8)
|
|
206
|
+
* ```
|
|
207
|
+
*/
|
|
208
|
+
readonly add: (x: WithSmallInt<PositiveInt, 40>, y: WithSmallInt<PositiveInt, 40>) => PositiveInt;
|
|
209
|
+
/**
|
|
210
|
+
* Subtracts two positive integers, clamping the result to remain positive.
|
|
211
|
+
*
|
|
212
|
+
* If the mathematical result would be <= 0, it is clamped to 1 to maintain
|
|
213
|
+
* the positive integer constraint.
|
|
214
|
+
*
|
|
215
|
+
* @param a - The minuend (positive integer)
|
|
216
|
+
* @param b - The subtrahend (positive integer)
|
|
217
|
+
* @returns `max(1, a - b)` as a PositiveInt
|
|
218
|
+
*
|
|
219
|
+
* @example
|
|
220
|
+
* ```typescript
|
|
221
|
+
* PositiveInt.sub(asPositiveInt(8), asPositiveInt(3)); // PositiveInt (5)
|
|
222
|
+
* PositiveInt.sub(asPositiveInt(3), asPositiveInt(8)); // PositiveInt (1) - clamped
|
|
223
|
+
* PositiveInt.sub(asPositiveInt(5), asPositiveInt(5)); // PositiveInt (1) - clamped
|
|
224
|
+
* ```
|
|
225
|
+
*/
|
|
226
|
+
readonly sub: (x: WithSmallInt<PositiveInt, 40>, y: WithSmallInt<PositiveInt, 40>) => PositiveInt;
|
|
227
|
+
/**
|
|
228
|
+
* Multiplies two positive integers, ensuring the result is never less than 1.
|
|
229
|
+
* @param a - First positive integer
|
|
230
|
+
* @param b - Second positive integer
|
|
231
|
+
* @returns `a * b` as a PositiveInt, but never less than 1
|
|
232
|
+
* @example
|
|
233
|
+
* ```typescript
|
|
234
|
+
* PositiveInt.mul(asPositiveInt(4), asPositiveInt(3)); // PositiveInt (12)
|
|
235
|
+
* ```
|
|
236
|
+
*/
|
|
237
|
+
readonly mul: (x: WithSmallInt<PositiveInt, 40>, y: WithSmallInt<PositiveInt, 40>) => PositiveInt;
|
|
238
|
+
/**
|
|
239
|
+
* Divides two positive integers using floor division, clamping to remain positive.
|
|
240
|
+
*
|
|
241
|
+
* Performs mathematical floor division: `⌊a / b⌋`. If the result would be 0
|
|
242
|
+
* (when a < b), it is clamped to 1 to maintain the positive integer constraint.
|
|
243
|
+
*
|
|
244
|
+
* @param a - The dividend (positive integer)
|
|
245
|
+
* @param b - The divisor (positive integer, guaranteed non-zero)
|
|
246
|
+
* @returns `max(1, ⌊a / b⌋)` as a PositiveInt
|
|
247
|
+
*
|
|
248
|
+
* @example
|
|
249
|
+
* ```typescript
|
|
250
|
+
* PositiveInt.div(asPositiveInt(10), asPositiveInt(3)); // PositiveInt (3)
|
|
251
|
+
* PositiveInt.div(asPositiveInt(9), asPositiveInt(3)); // PositiveInt (3)
|
|
252
|
+
* PositiveInt.div(asPositiveInt(2), asPositiveInt(3)); // PositiveInt (1) - clamped
|
|
253
|
+
* PositiveInt.div(asPositiveInt(1), asPositiveInt(5)); // PositiveInt (1) - clamped
|
|
254
|
+
* ```
|
|
255
|
+
*/
|
|
256
|
+
readonly div: (x: WithSmallInt<PositiveInt, 40>, y: 1 | 2 | 3 | 32 | 4 | 5 | 6 | 7 | 8 | 9 | 11 | 10 | 24 | 14 | 34 | 12 | 13 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 33 | 35 | 36 | 37 | 38 | 39 | NormalizeBrandUnion<number & {
|
|
257
|
+
readonly NaNValue: false;
|
|
258
|
+
readonly "!=0": true;
|
|
259
|
+
readonly "> -2^16": true;
|
|
260
|
+
readonly "> -2^32": true;
|
|
261
|
+
readonly ">= -2^15": true;
|
|
262
|
+
readonly ">= -2^31": true;
|
|
263
|
+
readonly ">=0": true;
|
|
264
|
+
readonly Finite: true;
|
|
265
|
+
readonly Int: true;
|
|
266
|
+
} & Readonly<{
|
|
267
|
+
'TSTypeForgeInternals--edd2f9ce-7ca5-45b0-9d1a-bd61b9b5d9c3': unknown;
|
|
268
|
+
}>>) => PositiveInt;
|
|
269
|
+
};
|
|
270
|
+
//# sourceMappingURL=positive-int.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"positive-int.d.mts","sourceRoot":"","sources":["../../../src/number/branded-types/positive-int.mts"],"names":[],"mappings":"AA+BA;;;;;;;;;;;;;;;;;;GAkBG;AACH,eAAO,MAAM,aAAa,iCAAK,CAAC;AAEhC;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,eAAO,MAAM,aAAa;;;;;;;;;;;;MAAW,CAAC;AAEtC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CG;AACH,eAAO,MAAM,WAAW;IACtB;;;;;;;OAOG;;IAGH;;;OAGG;;IAGH;;;;;;;;;;;;;;OAcG;;IAGH;;;;;;;;;;;OAWG;;IAGH;;;;;;;;;;;;;;;;OAgBG;;IAGH;;;;;;;;;;;;;;;;;;;;;OAqBG;;IAGH;;;;;;;;;OASG;;IAGH;;;;;;;;;OASG;;IAGH;;;;;;;;;;;;;;;;OAgBG;;IAGH;;;;;;;;;OASG;;IAGH;;;;;;;;;;;;;;;;;OAiBG;;;;;;;;;;;;;;CAEK,CAAC"}
|