uom-types 5.0.1 → 5.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +7 -0
- package/dist/chunks/B2m_qd8-.mjs +252 -0
- package/dist/chunks/Cm6vkgfO.cjs +289 -0
- package/dist/chunks/nRDIxMhl.mjs +483 -0
- package/dist/chunks/ph65nozB.cjs +564 -0
- package/dist/converters.cjs +87 -0
- package/dist/converters.d.cts +569 -0
- package/dist/converters.d.mts +569 -0
- package/dist/converters.mjs +2 -0
- package/dist/index.cjs +118 -844
- package/dist/index.d.cts +72 -72
- package/dist/index.d.mts +72 -72
- package/dist/index.mjs +2 -732
- package/dist/math.cjs +42 -0
- package/dist/math.d.cts +458 -0
- package/dist/math.d.mts +458 -0
- package/dist/math.mjs +1 -0
- package/dist/types.d.cts +247 -0
- package/dist/types.d.mts +247 -0
- package/dist/units.d.cts +3603 -0
- package/dist/units.d.mts +3603 -0
- package/package.json +92 -71
package/dist/types.d.cts
ADDED
|
@@ -0,0 +1,247 @@
|
|
|
1
|
+
// Generated by dts-bundle-generator v9.5.1
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* @file Autogenerated File - Don't manually edit.
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* All the supported positive exponent values.
|
|
8
|
+
*
|
|
9
|
+
* @group Unit Components
|
|
10
|
+
*/
|
|
11
|
+
export type PosExponent = 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12;
|
|
12
|
+
/**
|
|
13
|
+
* All the supported negative exponent values.
|
|
14
|
+
*
|
|
15
|
+
* @group Unit Components
|
|
16
|
+
*/
|
|
17
|
+
export type NegExponent = -1 | -2 | -3 | -4 | -5 | -6 | -7 | -8 | -9 | -10 | -11 | -12;
|
|
18
|
+
/**
|
|
19
|
+
* All the supported exponent values.
|
|
20
|
+
*
|
|
21
|
+
* @group Unit Components
|
|
22
|
+
*/
|
|
23
|
+
export type Exponent = 0 | PosExponent | NegExponent;
|
|
24
|
+
/**
|
|
25
|
+
* @group Exponent Functions
|
|
26
|
+
*/
|
|
27
|
+
export type NegateExponent<T extends Exponent> = MultiplyExponents<T, -1>;
|
|
28
|
+
/**
|
|
29
|
+
* @group Exponent Functions
|
|
30
|
+
*/
|
|
31
|
+
export type SumExponents<A extends Exponent, B extends Exponent> = A extends 0 ? B extends 0 ? 0 : B extends 1 ? 1 : B extends -1 ? -1 : B extends 2 ? 2 : B extends -2 ? -2 : B extends 3 ? 3 : B extends -3 ? -3 : B extends 4 ? 4 : B extends -4 ? -4 : B extends 5 ? 5 : B extends -5 ? -5 : B extends 6 ? 6 : B extends -6 ? -6 : B extends 7 ? 7 : B extends -7 ? -7 : B extends 8 ? 8 : B extends -8 ? -8 : B extends 9 ? 9 : B extends -9 ? -9 : B extends 10 ? 10 : B extends -10 ? -10 : B extends 11 ? 11 : B extends -11 ? -11 : B extends 12 ? 12 : B extends -12 ? -12 : never : A extends 1 ? B extends 0 ? 1 : B extends 1 ? 2 : B extends -1 ? 0 : B extends 2 ? 3 : B extends -2 ? -1 : B extends 3 ? 4 : B extends -3 ? -2 : B extends 4 ? 5 : B extends -4 ? -3 : B extends 5 ? 6 : B extends -5 ? -4 : B extends 6 ? 7 : B extends -6 ? -5 : B extends 7 ? 8 : B extends -7 ? -6 : B extends 8 ? 9 : B extends -8 ? -7 : B extends 9 ? 10 : B extends -9 ? -8 : B extends 10 ? 11 : B extends -10 ? -9 : B extends 11 ? 12 : B extends -11 ? -10 : B extends -12 ? -11 : never : A extends -1 ? B extends 0 ? -1 : B extends 1 ? 0 : B extends -1 ? -2 : B extends 2 ? 1 : B extends -2 ? -3 : B extends 3 ? 2 : B extends -3 ? -4 : B extends 4 ? 3 : B extends -4 ? -5 : B extends 5 ? 4 : B extends -5 ? -6 : B extends 6 ? 5 : B extends -6 ? -7 : B extends 7 ? 6 : B extends -7 ? -8 : B extends 8 ? 7 : B extends -8 ? -9 : B extends 9 ? 8 : B extends -9 ? -10 : B extends 10 ? 9 : B extends -10 ? -11 : B extends 11 ? 10 : B extends -11 ? -12 : B extends 12 ? 11 : never : A extends 2 ? B extends 0 ? 2 : B extends 1 ? 3 : B extends -1 ? 1 : B extends 2 ? 4 : B extends -2 ? 0 : B extends 3 ? 5 : B extends -3 ? -1 : B extends 4 ? 6 : B extends -4 ? -2 : B extends 5 ? 7 : B extends -5 ? -3 : B extends 6 ? 8 : B extends -6 ? -4 : B extends 7 ? 9 : B extends -7 ? -5 : B extends 8 ? 10 : B extends -8 ? -6 : B extends 9 ? 11 : B extends -9 ? -7 : B extends 10 ? 12 : B extends -10 ? -8 : B extends -11 ? -9 : B extends -12 ? -10 : never : A extends -2 ? B extends 0 ? -2 : B extends 1 ? -1 : B extends -1 ? -3 : B extends 2 ? 0 : B extends -2 ? -4 : B extends 3 ? 1 : B extends -3 ? -5 : B extends 4 ? 2 : B extends -4 ? -6 : B extends 5 ? 3 : B extends -5 ? -7 : B extends 6 ? 4 : B extends -6 ? -8 : B extends 7 ? 5 : B extends -7 ? -9 : B extends 8 ? 6 : B extends -8 ? -10 : B extends 9 ? 7 : B extends -9 ? -11 : B extends 10 ? 8 : B extends -10 ? -12 : B extends 11 ? 9 : B extends 12 ? 10 : never : A extends 3 ? B extends 0 ? 3 : B extends 1 ? 4 : B extends -1 ? 2 : B extends 2 ? 5 : B extends -2 ? 1 : B extends 3 ? 6 : B extends -3 ? 0 : B extends 4 ? 7 : B extends -4 ? -1 : B extends 5 ? 8 : B extends -5 ? -2 : B extends 6 ? 9 : B extends -6 ? -3 : B extends 7 ? 10 : B extends -7 ? -4 : B extends 8 ? 11 : B extends -8 ? -5 : B extends 9 ? 12 : B extends -9 ? -6 : B extends -10 ? -7 : B extends -11 ? -8 : B extends -12 ? -9 : never : A extends -3 ? B extends 0 ? -3 : B extends 1 ? -2 : B extends -1 ? -4 : B extends 2 ? -1 : B extends -2 ? -5 : B extends 3 ? 0 : B extends -3 ? -6 : B extends 4 ? 1 : B extends -4 ? -7 : B extends 5 ? 2 : B extends -5 ? -8 : B extends 6 ? 3 : B extends -6 ? -9 : B extends 7 ? 4 : B extends -7 ? -10 : B extends 8 ? 5 : B extends -8 ? -11 : B extends 9 ? 6 : B extends -9 ? -12 : B extends 10 ? 7 : B extends 11 ? 8 : B extends 12 ? 9 : never : A extends 4 ? B extends 0 ? 4 : B extends 1 ? 5 : B extends -1 ? 3 : B extends 2 ? 6 : B extends -2 ? 2 : B extends 3 ? 7 : B extends -3 ? 1 : B extends 4 ? 8 : B extends -4 ? 0 : B extends 5 ? 9 : B extends -5 ? -1 : B extends 6 ? 10 : B extends -6 ? -2 : B extends 7 ? 11 : B extends -7 ? -3 : B extends 8 ? 12 : B extends -8 ? -4 : B extends -9 ? -5 : B extends -10 ? -6 : B extends -11 ? -7 : B extends -12 ? -8 : never : A extends -4 ? B extends 0 ? -4 : B extends 1 ? -3 : B extends -1 ? -5 : B extends 2 ? -2 : B extends -2 ? -6 : B extends 3 ? -1 : B extends -3 ? -7 : B extends 4 ? 0 : B extends -4 ? -8 : B extends 5 ? 1 : B extends -5 ? -9 : B extends 6 ? 2 : B extends -6 ? -10 : B extends 7 ? 3 : B extends -7 ? -11 : B extends 8 ? 4 : B extends -8 ? -12 : B extends 9 ? 5 : B extends 10 ? 6 : B extends 11 ? 7 : B extends 12 ? 8 : never : A extends 5 ? B extends 0 ? 5 : B extends 1 ? 6 : B extends -1 ? 4 : B extends 2 ? 7 : B extends -2 ? 3 : B extends 3 ? 8 : B extends -3 ? 2 : B extends 4 ? 9 : B extends -4 ? 1 : B extends 5 ? 10 : B extends -5 ? 0 : B extends 6 ? 11 : B extends -6 ? -1 : B extends 7 ? 12 : B extends -7 ? -2 : B extends -8 ? -3 : B extends -9 ? -4 : B extends -10 ? -5 : B extends -11 ? -6 : B extends -12 ? -7 : never : A extends -5 ? B extends 0 ? -5 : B extends 1 ? -4 : B extends -1 ? -6 : B extends 2 ? -3 : B extends -2 ? -7 : B extends 3 ? -2 : B extends -3 ? -8 : B extends 4 ? -1 : B extends -4 ? -9 : B extends 5 ? 0 : B extends -5 ? -10 : B extends 6 ? 1 : B extends -6 ? -11 : B extends 7 ? 2 : B extends -7 ? -12 : B extends 8 ? 3 : B extends 9 ? 4 : B extends 10 ? 5 : B extends 11 ? 6 : B extends 12 ? 7 : never : A extends 6 ? B extends 0 ? 6 : B extends 1 ? 7 : B extends -1 ? 5 : B extends 2 ? 8 : B extends -2 ? 4 : B extends 3 ? 9 : B extends -3 ? 3 : B extends 4 ? 10 : B extends -4 ? 2 : B extends 5 ? 11 : B extends -5 ? 1 : B extends 6 ? 12 : B extends -6 ? 0 : B extends -7 ? -1 : B extends -8 ? -2 : B extends -9 ? -3 : B extends -10 ? -4 : B extends -11 ? -5 : B extends -12 ? -6 : never : A extends -6 ? B extends 0 ? -6 : B extends 1 ? -5 : B extends -1 ? -7 : B extends 2 ? -4 : B extends -2 ? -8 : B extends 3 ? -3 : B extends -3 ? -9 : B extends 4 ? -2 : B extends -4 ? -10 : B extends 5 ? -1 : B extends -5 ? -11 : B extends 6 ? 0 : B extends -6 ? -12 : B extends 7 ? 1 : B extends 8 ? 2 : B extends 9 ? 3 : B extends 10 ? 4 : B extends 11 ? 5 : B extends 12 ? 6 : never : A extends 7 ? B extends 0 ? 7 : B extends 1 ? 8 : B extends -1 ? 6 : B extends 2 ? 9 : B extends -2 ? 5 : B extends 3 ? 10 : B extends -3 ? 4 : B extends 4 ? 11 : B extends -4 ? 3 : B extends 5 ? 12 : B extends -5 ? 2 : B extends -6 ? 1 : B extends -7 ? 0 : B extends -8 ? -1 : B extends -9 ? -2 : B extends -10 ? -3 : B extends -11 ? -4 : B extends -12 ? -5 : never : A extends -7 ? B extends 0 ? -7 : B extends 1 ? -6 : B extends -1 ? -8 : B extends 2 ? -5 : B extends -2 ? -9 : B extends 3 ? -4 : B extends -3 ? -10 : B extends 4 ? -3 : B extends -4 ? -11 : B extends 5 ? -2 : B extends -5 ? -12 : B extends 6 ? -1 : B extends 7 ? 0 : B extends 8 ? 1 : B extends 9 ? 2 : B extends 10 ? 3 : B extends 11 ? 4 : B extends 12 ? 5 : never : A extends 8 ? B extends 0 ? 8 : B extends 1 ? 9 : B extends -1 ? 7 : B extends 2 ? 10 : B extends -2 ? 6 : B extends 3 ? 11 : B extends -3 ? 5 : B extends 4 ? 12 : B extends -4 ? 4 : B extends -5 ? 3 : B extends -6 ? 2 : B extends -7 ? 1 : B extends -8 ? 0 : B extends -9 ? -1 : B extends -10 ? -2 : B extends -11 ? -3 : B extends -12 ? -4 : never : A extends -8 ? B extends 0 ? -8 : B extends 1 ? -7 : B extends -1 ? -9 : B extends 2 ? -6 : B extends -2 ? -10 : B extends 3 ? -5 : B extends -3 ? -11 : B extends 4 ? -4 : B extends -4 ? -12 : B extends 5 ? -3 : B extends 6 ? -2 : B extends 7 ? -1 : B extends 8 ? 0 : B extends 9 ? 1 : B extends 10 ? 2 : B extends 11 ? 3 : B extends 12 ? 4 : never : A extends 9 ? B extends 0 ? 9 : B extends 1 ? 10 : B extends -1 ? 8 : B extends 2 ? 11 : B extends -2 ? 7 : B extends 3 ? 12 : B extends -3 ? 6 : B extends -4 ? 5 : B extends -5 ? 4 : B extends -6 ? 3 : B extends -7 ? 2 : B extends -8 ? 1 : B extends -9 ? 0 : B extends -10 ? -1 : B extends -11 ? -2 : B extends -12 ? -3 : never : A extends -9 ? B extends 0 ? -9 : B extends 1 ? -8 : B extends -1 ? -10 : B extends 2 ? -7 : B extends -2 ? -11 : B extends 3 ? -6 : B extends -3 ? -12 : B extends 4 ? -5 : B extends 5 ? -4 : B extends 6 ? -3 : B extends 7 ? -2 : B extends 8 ? -1 : B extends 9 ? 0 : B extends 10 ? 1 : B extends 11 ? 2 : B extends 12 ? 3 : never : A extends 10 ? B extends 0 ? 10 : B extends 1 ? 11 : B extends -1 ? 9 : B extends 2 ? 12 : B extends -2 ? 8 : B extends -3 ? 7 : B extends -4 ? 6 : B extends -5 ? 5 : B extends -6 ? 4 : B extends -7 ? 3 : B extends -8 ? 2 : B extends -9 ? 1 : B extends -10 ? 0 : B extends -11 ? -1 : B extends -12 ? -2 : never : A extends -10 ? B extends 0 ? -10 : B extends 1 ? -9 : B extends -1 ? -11 : B extends 2 ? -8 : B extends -2 ? -12 : B extends 3 ? -7 : B extends 4 ? -6 : B extends 5 ? -5 : B extends 6 ? -4 : B extends 7 ? -3 : B extends 8 ? -2 : B extends 9 ? -1 : B extends 10 ? 0 : B extends 11 ? 1 : B extends 12 ? 2 : never : A extends 11 ? B extends 0 ? 11 : B extends 1 ? 12 : B extends -1 ? 10 : B extends -2 ? 9 : B extends -3 ? 8 : B extends -4 ? 7 : B extends -5 ? 6 : B extends -6 ? 5 : B extends -7 ? 4 : B extends -8 ? 3 : B extends -9 ? 2 : B extends -10 ? 1 : B extends -11 ? 0 : B extends -12 ? -1 : never : A extends -11 ? B extends 0 ? -11 : B extends 1 ? -10 : B extends -1 ? -12 : B extends 2 ? -9 : B extends 3 ? -8 : B extends 4 ? -7 : B extends 5 ? -6 : B extends 6 ? -5 : B extends 7 ? -4 : B extends 8 ? -3 : B extends 9 ? -2 : B extends 10 ? -1 : B extends 11 ? 0 : B extends 12 ? 1 : never : A extends 12 ? B extends 0 ? 12 : B extends -1 ? 11 : B extends -2 ? 10 : B extends -3 ? 9 : B extends -4 ? 8 : B extends -5 ? 7 : B extends -6 ? 6 : B extends -7 ? 5 : B extends -8 ? 4 : B extends -9 ? 3 : B extends -10 ? 2 : B extends -11 ? 1 : B extends -12 ? 0 : never : A extends -12 ? B extends 0 ? -12 : B extends 1 ? -11 : B extends 2 ? -10 : B extends 3 ? -9 : B extends 4 ? -8 : B extends 5 ? -7 : B extends 6 ? -6 : B extends 7 ? -5 : B extends 8 ? -4 : B extends 9 ? -3 : B extends 10 ? -2 : B extends 11 ? -1 : B extends 12 ? 0 : never : never;
|
|
32
|
+
/**
|
|
33
|
+
* @group Exponent Functions
|
|
34
|
+
*/
|
|
35
|
+
export type SubExponents<A extends Exponent, B extends Exponent> = SumExponents<A, NegateExponent<B>>;
|
|
36
|
+
/**
|
|
37
|
+
* @group Exponent Functions
|
|
38
|
+
*/
|
|
39
|
+
export type MultiplyExponents<A extends Exponent, B extends Exponent> = A extends 0 ? B extends 0 ? 0 : B extends 1 ? 0 : B extends -1 ? 0 : B extends 2 ? 0 : B extends -2 ? 0 : B extends 3 ? 0 : B extends -3 ? 0 : B extends 4 ? 0 : B extends -4 ? 0 : B extends 5 ? 0 : B extends -5 ? 0 : B extends 6 ? 0 : B extends -6 ? 0 : B extends 7 ? 0 : B extends -7 ? 0 : B extends 8 ? 0 : B extends -8 ? 0 : B extends 9 ? 0 : B extends -9 ? 0 : B extends 10 ? 0 : B extends -10 ? 0 : B extends 11 ? 0 : B extends -11 ? 0 : B extends 12 ? 0 : B extends -12 ? 0 : never : A extends 1 ? B extends 0 ? 0 : B extends 1 ? 1 : B extends -1 ? -1 : B extends 2 ? 2 : B extends -2 ? -2 : B extends 3 ? 3 : B extends -3 ? -3 : B extends 4 ? 4 : B extends -4 ? -4 : B extends 5 ? 5 : B extends -5 ? -5 : B extends 6 ? 6 : B extends -6 ? -6 : B extends 7 ? 7 : B extends -7 ? -7 : B extends 8 ? 8 : B extends -8 ? -8 : B extends 9 ? 9 : B extends -9 ? -9 : B extends 10 ? 10 : B extends -10 ? -10 : B extends 11 ? 11 : B extends -11 ? -11 : B extends 12 ? 12 : B extends -12 ? -12 : never : A extends -1 ? B extends 0 ? 0 : B extends 1 ? -1 : B extends -1 ? 1 : B extends 2 ? -2 : B extends -2 ? 2 : B extends 3 ? -3 : B extends -3 ? 3 : B extends 4 ? -4 : B extends -4 ? 4 : B extends 5 ? -5 : B extends -5 ? 5 : B extends 6 ? -6 : B extends -6 ? 6 : B extends 7 ? -7 : B extends -7 ? 7 : B extends 8 ? -8 : B extends -8 ? 8 : B extends 9 ? -9 : B extends -9 ? 9 : B extends 10 ? -10 : B extends -10 ? 10 : B extends 11 ? -11 : B extends -11 ? 11 : B extends 12 ? -12 : B extends -12 ? 12 : never : A extends 2 ? B extends 0 ? 0 : B extends 1 ? 2 : B extends -1 ? -2 : B extends 2 ? 4 : B extends -2 ? -4 : B extends 3 ? 6 : B extends -3 ? -6 : B extends 4 ? 8 : B extends -4 ? -8 : B extends 5 ? 10 : B extends -5 ? -10 : B extends 6 ? 12 : B extends -6 ? -12 : never : A extends -2 ? B extends 0 ? 0 : B extends 1 ? -2 : B extends -1 ? 2 : B extends 2 ? -4 : B extends -2 ? 4 : B extends 3 ? -6 : B extends -3 ? 6 : B extends 4 ? -8 : B extends -4 ? 8 : B extends 5 ? -10 : B extends -5 ? 10 : B extends 6 ? -12 : B extends -6 ? 12 : never : A extends 3 ? B extends 0 ? 0 : B extends 1 ? 3 : B extends -1 ? -3 : B extends 2 ? 6 : B extends -2 ? -6 : B extends 3 ? 9 : B extends -3 ? -9 : B extends 4 ? 12 : B extends -4 ? -12 : never : A extends -3 ? B extends 0 ? 0 : B extends 1 ? -3 : B extends -1 ? 3 : B extends 2 ? -6 : B extends -2 ? 6 : B extends 3 ? -9 : B extends -3 ? 9 : B extends 4 ? -12 : B extends -4 ? 12 : never : A extends 4 ? B extends 0 ? 0 : B extends 1 ? 4 : B extends -1 ? -4 : B extends 2 ? 8 : B extends -2 ? -8 : B extends 3 ? 12 : B extends -3 ? -12 : never : A extends -4 ? B extends 0 ? 0 : B extends 1 ? -4 : B extends -1 ? 4 : B extends 2 ? -8 : B extends -2 ? 8 : B extends 3 ? -12 : B extends -3 ? 12 : never : A extends 5 ? B extends 0 ? 0 : B extends 1 ? 5 : B extends -1 ? -5 : B extends 2 ? 10 : B extends -2 ? -10 : never : A extends -5 ? B extends 0 ? 0 : B extends 1 ? -5 : B extends -1 ? 5 : B extends 2 ? -10 : B extends -2 ? 10 : never : A extends 6 ? B extends 0 ? 0 : B extends 1 ? 6 : B extends -1 ? -6 : B extends 2 ? 12 : B extends -2 ? -12 : never : A extends -6 ? B extends 0 ? 0 : B extends 1 ? -6 : B extends -1 ? 6 : B extends 2 ? -12 : B extends -2 ? 12 : never : A extends 7 ? B extends 0 ? 0 : B extends 1 ? 7 : B extends -1 ? -7 : never : A extends -7 ? B extends 0 ? 0 : B extends 1 ? -7 : B extends -1 ? 7 : never : A extends 8 ? B extends 0 ? 0 : B extends 1 ? 8 : B extends -1 ? -8 : never : A extends -8 ? B extends 0 ? 0 : B extends 1 ? -8 : B extends -1 ? 8 : never : A extends 9 ? B extends 0 ? 0 : B extends 1 ? 9 : B extends -1 ? -9 : never : A extends -9 ? B extends 0 ? 0 : B extends 1 ? -9 : B extends -1 ? 9 : never : A extends 10 ? B extends 0 ? 0 : B extends 1 ? 10 : B extends -1 ? -10 : never : A extends -10 ? B extends 0 ? 0 : B extends 1 ? -10 : B extends -1 ? 10 : never : A extends 11 ? B extends 0 ? 0 : B extends 1 ? 11 : B extends -1 ? -11 : never : A extends -11 ? B extends 0 ? 0 : B extends 1 ? -11 : B extends -1 ? 11 : never : A extends 12 ? B extends 0 ? 0 : B extends 1 ? 12 : B extends -1 ? -12 : never : A extends -12 ? B extends 0 ? 0 : B extends 1 ? -12 : B extends -1 ? 12 : never : never;
|
|
40
|
+
/**
|
|
41
|
+
* @group Exponent Functions
|
|
42
|
+
*/
|
|
43
|
+
export type DivideExponents<A extends Exponent, B extends Exponent> = B extends 0 ? never : B extends 1 ? A extends 0 ? 0 : A extends 1 ? 1 : A extends -1 ? -1 : A extends 2 ? 2 : A extends -2 ? -2 : A extends 3 ? 3 : A extends -3 ? -3 : A extends 4 ? 4 : A extends -4 ? -4 : A extends 5 ? 5 : A extends -5 ? -5 : A extends 6 ? 6 : A extends -6 ? -6 : A extends 7 ? 7 : A extends -7 ? -7 : A extends 8 ? 8 : A extends -8 ? -8 : A extends 9 ? 9 : A extends -9 ? -9 : A extends 10 ? 10 : A extends -10 ? -10 : A extends 11 ? 11 : A extends -11 ? -11 : A extends 12 ? 12 : A extends -12 ? -12 : never : B extends -1 ? A extends 0 ? 0 : A extends 1 ? -1 : A extends -1 ? 1 : A extends 2 ? -2 : A extends -2 ? 2 : A extends 3 ? -3 : A extends -3 ? 3 : A extends 4 ? -4 : A extends -4 ? 4 : A extends 5 ? -5 : A extends -5 ? 5 : A extends 6 ? -6 : A extends -6 ? 6 : A extends 7 ? -7 : A extends -7 ? 7 : A extends 8 ? -8 : A extends -8 ? 8 : A extends 9 ? -9 : A extends -9 ? 9 : A extends 10 ? -10 : A extends -10 ? 10 : A extends 11 ? -11 : A extends -11 ? 11 : A extends 12 ? -12 : A extends -12 ? 12 : never : B extends 2 ? A extends 0 ? 0 : A extends 2 ? 1 : A extends -2 ? -1 : A extends 4 ? 2 : A extends -4 ? -2 : A extends 6 ? 3 : A extends -6 ? -3 : A extends 8 ? 4 : A extends -8 ? -4 : A extends 10 ? 5 : A extends -10 ? -5 : A extends 12 ? 6 : A extends -12 ? -6 : never : B extends -2 ? A extends 0 ? 0 : A extends 2 ? -1 : A extends -2 ? 1 : A extends 4 ? -2 : A extends -4 ? 2 : A extends 6 ? -3 : A extends -6 ? 3 : A extends 8 ? -4 : A extends -8 ? 4 : A extends 10 ? -5 : A extends -10 ? 5 : A extends 12 ? -6 : A extends -12 ? 6 : never : B extends 3 ? A extends 0 ? 0 : A extends 3 ? 1 : A extends -3 ? -1 : A extends 6 ? 2 : A extends -6 ? -2 : A extends 9 ? 3 : A extends -9 ? -3 : A extends 12 ? 4 : A extends -12 ? -4 : never : B extends -3 ? A extends 0 ? 0 : A extends 3 ? -1 : A extends -3 ? 1 : A extends 6 ? -2 : A extends -6 ? 2 : A extends 9 ? -3 : A extends -9 ? 3 : A extends 12 ? -4 : A extends -12 ? 4 : never : B extends 4 ? A extends 0 ? 0 : A extends 4 ? 1 : A extends -4 ? -1 : A extends 8 ? 2 : A extends -8 ? -2 : A extends 12 ? 3 : A extends -12 ? -3 : never : B extends -4 ? A extends 0 ? 0 : A extends 4 ? -1 : A extends -4 ? 1 : A extends 8 ? -2 : A extends -8 ? 2 : A extends 12 ? -3 : A extends -12 ? 3 : never : B extends 5 ? A extends 0 ? 0 : A extends 5 ? 1 : A extends -5 ? -1 : A extends 10 ? 2 : A extends -10 ? -2 : never : B extends -5 ? A extends 0 ? 0 : A extends 5 ? -1 : A extends -5 ? 1 : A extends 10 ? -2 : A extends -10 ? 2 : never : B extends 6 ? A extends 0 ? 0 : A extends 6 ? 1 : A extends -6 ? -1 : A extends 12 ? 2 : A extends -12 ? -2 : never : B extends -6 ? A extends 0 ? 0 : A extends 6 ? -1 : A extends -6 ? 1 : A extends 12 ? -2 : A extends -12 ? 2 : never : B extends 7 ? A extends 0 ? 0 : A extends 7 ? 1 : A extends -7 ? -1 : never : B extends -7 ? A extends 0 ? 0 : A extends 7 ? -1 : A extends -7 ? 1 : never : B extends 8 ? A extends 0 ? 0 : A extends 8 ? 1 : A extends -8 ? -1 : never : B extends -8 ? A extends 0 ? 0 : A extends 8 ? -1 : A extends -8 ? 1 : never : B extends 9 ? A extends 0 ? 0 : A extends 9 ? 1 : A extends -9 ? -1 : never : B extends -9 ? A extends 0 ? 0 : A extends 9 ? -1 : A extends -9 ? 1 : never : B extends 10 ? A extends 0 ? 0 : A extends 10 ? 1 : A extends -10 ? -1 : never : B extends -10 ? A extends 0 ? 0 : A extends 10 ? -1 : A extends -10 ? 1 : never : B extends 11 ? A extends 0 ? 0 : A extends 11 ? 1 : A extends -11 ? -1 : never : B extends -11 ? A extends 0 ? 0 : A extends 11 ? -1 : A extends -11 ? 1 : never : B extends 12 ? A extends 0 ? 0 : A extends 12 ? 1 : A extends -12 ? -1 : never : B extends -12 ? A extends 0 ? 0 : A extends 12 ? -1 : A extends -12 ? 1 : never : never;
|
|
44
|
+
interface Brand {
|
|
45
|
+
}
|
|
46
|
+
type BrandUnitMeta<UM extends UnknownUnitMeta> = Brand & {
|
|
47
|
+
__uom_types: {
|
|
48
|
+
unitMeta: UM;
|
|
49
|
+
};
|
|
50
|
+
};
|
|
51
|
+
type BrandUnitClass<UC extends UnknownUnitClass> = Brand & {
|
|
52
|
+
__uom_types: {
|
|
53
|
+
unitClass: UC;
|
|
54
|
+
};
|
|
55
|
+
};
|
|
56
|
+
type BrandUnitClassType = Brand & {
|
|
57
|
+
__uom_types: {
|
|
58
|
+
unitClassType: true;
|
|
59
|
+
};
|
|
60
|
+
};
|
|
61
|
+
type BrandUnitKeyValues<K, V> = Brand & Readonly<{
|
|
62
|
+
__uom_types: {
|
|
63
|
+
keys: K;
|
|
64
|
+
value: V;
|
|
65
|
+
};
|
|
66
|
+
}>;
|
|
67
|
+
type RemoveNeverValues<T extends object> = {
|
|
68
|
+
[K in keyof T as [
|
|
69
|
+
T[K]
|
|
70
|
+
] extends [
|
|
71
|
+
never
|
|
72
|
+
] ? never : K]: T[K];
|
|
73
|
+
};
|
|
74
|
+
type ExcludeUnitZeroSubvalues<U extends UnitSubvalues> = {
|
|
75
|
+
[S in keyof U as S extends string ? (U[S] extends 0 ? never : S) : never]: U[S];
|
|
76
|
+
};
|
|
77
|
+
type GetExponent<C extends UnitSubvalues, S> = S extends keyof C ? C[S] : 0;
|
|
78
|
+
type FlatternAlias<T> = {
|
|
79
|
+
[P in keyof T]: T[P];
|
|
80
|
+
} & {};
|
|
81
|
+
/**
|
|
82
|
+
* A unit without any meta data.
|
|
83
|
+
*
|
|
84
|
+
* @group Abstract Unit Generators
|
|
85
|
+
*/
|
|
86
|
+
export type AbstractUnit<C extends UnitSubvalues> = number & BrandUnitClass<UnitClass<C>>;
|
|
87
|
+
/**
|
|
88
|
+
* Create a unit without meta data from an already existing {@link UnitClass}.
|
|
89
|
+
*
|
|
90
|
+
* @group Abstract Unit Generators
|
|
91
|
+
*/
|
|
92
|
+
export type AbstractUnitFrom<C extends UnknownUnitClass> = C extends UnitClass<infer A> ? AbstractUnit<UnitSubvalues extends A ? {} : A> : never;
|
|
93
|
+
/**
|
|
94
|
+
* The core unit type.
|
|
95
|
+
*
|
|
96
|
+
* @group Unit Generators
|
|
97
|
+
*/
|
|
98
|
+
export type Unit<C extends UnitSubvalues, M extends UnitSubvalues = {}> = number & BrandUnitClass<UnitClass<C>> & BrandUnitMeta<UnitMeta<M>>;
|
|
99
|
+
/**
|
|
100
|
+
* Create a {@link Unit} from already existing {@link UnitClass} and {@link UnitMeta}.
|
|
101
|
+
*
|
|
102
|
+
* @group Unit Generators
|
|
103
|
+
*/
|
|
104
|
+
export type UnitFrom<C extends UnknownUnitClass, M extends UnknownUnitMeta = UnitMeta<{}>> = C extends UnitClass<infer A> ? (M extends UnitMeta<infer B> ? Unit<A, B> : never) : never;
|
|
105
|
+
/**
|
|
106
|
+
* A {@link Unit} without any {@link UnitClass}.
|
|
107
|
+
*
|
|
108
|
+
* Used to convert from one {@link Unit} to another of the same {@link UnitClass}.
|
|
109
|
+
*
|
|
110
|
+
* @group Unit Generators
|
|
111
|
+
*/
|
|
112
|
+
export type UnitConversionRate<M extends UnitSubvalues> = number & BrandUnitMeta<UnitMeta<M>>;
|
|
113
|
+
/**
|
|
114
|
+
* Create a {@link UnitConversionRate} from already existing {@link UnitMeta}.
|
|
115
|
+
*
|
|
116
|
+
* @group Unit Generators
|
|
117
|
+
*/
|
|
118
|
+
export type UnitConversionRateFrom<M extends UnknownUnitMeta> = M extends UnitMeta<infer A> ? UnitConversionRate<A> : never;
|
|
119
|
+
/**
|
|
120
|
+
* Used to determine what a unit is of. For example, length, volume, mass etc.
|
|
121
|
+
*
|
|
122
|
+
* @group Unit Components
|
|
123
|
+
*/
|
|
124
|
+
export type UnitClass<T extends UnitSubvalues> = UnitKeyValues<T> & BrandUnitClassType;
|
|
125
|
+
/**
|
|
126
|
+
* Used to state how units of the same {@link UnitClass} differ from one another.
|
|
127
|
+
* For example, by a scale factor.
|
|
128
|
+
*
|
|
129
|
+
* @group Unit Components
|
|
130
|
+
*/
|
|
131
|
+
export type UnitMeta<T extends UnitSubvalues> = UnitKeyValues<T> & Readonly<{
|
|
132
|
+
__uno_types__unit_meta_type: true;
|
|
133
|
+
}>;
|
|
134
|
+
/**
|
|
135
|
+
* A {@link Unit} that we don't know anything about.
|
|
136
|
+
*
|
|
137
|
+
* @group Unknown Units
|
|
138
|
+
*/
|
|
139
|
+
export type UnknownUnit = UnknownAbstractUnit & BrandUnitMeta<UnknownUnitMeta>;
|
|
140
|
+
/**
|
|
141
|
+
* An {@link AbstractUnit} that we don't know anything about.
|
|
142
|
+
*
|
|
143
|
+
* @group Unknown Units
|
|
144
|
+
*/
|
|
145
|
+
export type UnknownAbstractUnit = number & BrandUnitClass<UnknownUnitClass>;
|
|
146
|
+
/**
|
|
147
|
+
* An {@link UnitConversionRate} that we don't know anything about.
|
|
148
|
+
*
|
|
149
|
+
* @group Unknown Units
|
|
150
|
+
*/
|
|
151
|
+
export type UnknownUnitConversionRate = number & BrandUnitMeta<UnknownUnitMeta>;
|
|
152
|
+
/**
|
|
153
|
+
* A {@link UnitClass} that we don't know anything about.
|
|
154
|
+
*
|
|
155
|
+
* @group Unknown Units
|
|
156
|
+
*/
|
|
157
|
+
export type UnknownUnitClass = UnknownUnitKeyValues & BrandUnitClassType;
|
|
158
|
+
/**
|
|
159
|
+
* A {@link UnitMeta} that we don't know anything about.
|
|
160
|
+
*
|
|
161
|
+
* @group Unknown Units
|
|
162
|
+
*/
|
|
163
|
+
export type UnknownUnitMeta = UnknownUnitKeyValues & Readonly<{
|
|
164
|
+
__uno_types__unit_meta_type: true;
|
|
165
|
+
}>;
|
|
166
|
+
type UnitKeyValues<T extends UnitSubvalues> = BrandUnitKeyValues<keyof ExcludeUnitZeroSubvalues<T> extends string ? keyof ExcludeUnitZeroSubvalues<T> : never, RemoveNeverValues<T>>;
|
|
167
|
+
type UnknownUnitKeyValues = BrandUnitKeyValues<string, {}>;
|
|
168
|
+
/**
|
|
169
|
+
* A mapping of subvalue of a unit its magnitude.
|
|
170
|
+
*
|
|
171
|
+
* @group Unit Components
|
|
172
|
+
*/
|
|
173
|
+
export type UnitSubvalues = Record<string, Exponent>;
|
|
174
|
+
/**
|
|
175
|
+
* Take the inverse of a unit.
|
|
176
|
+
*
|
|
177
|
+
* @group Unit Functions
|
|
178
|
+
* @returns `1/X`.
|
|
179
|
+
*/
|
|
180
|
+
export type Inverse<X extends number> = Pow<X, -1>;
|
|
181
|
+
/**
|
|
182
|
+
* Inverses each of the subvalues.
|
|
183
|
+
*
|
|
184
|
+
* @group Unit Subvalue Functions
|
|
185
|
+
*/
|
|
186
|
+
export type InverseUnitSubvalues<T extends UnitSubvalues> = PowUnitSubvalues<T, -1>;
|
|
187
|
+
/**
|
|
188
|
+
* Multiply a unit by another unit.
|
|
189
|
+
*
|
|
190
|
+
* @group Unit Functions
|
|
191
|
+
* @returns `A⋅B`
|
|
192
|
+
*/
|
|
193
|
+
export type Multiply<A extends number, B extends number> = A extends UnknownUnit ? MultiplyHelperUnit<A, B> : B extends UnknownUnit ? MultiplyHelperUnit<B, A> : A extends UnknownAbstractUnit ? MultiplyHelperAbstractUnit<A, B> : B extends UnknownAbstractUnit ? MultiplyHelperAbstractUnit<B, A> : A extends UnknownUnitConversionRate ? MultiplyHelperUnitConversionRate<A, B> : B extends UnknownUnitConversionRate ? MultiplyHelperUnitConversionRate<B, A> : number;
|
|
194
|
+
type MultiplyHelperUnit<A extends UnknownUnit, B extends number> = A extends Unit<infer AClass, infer AMeta> ? B extends Unit<infer BClass, infer BMeta> ? Unit<FlatternAlias<MultiplyUnitSubvalues<AClass, BClass>>, FlatternAlias<MultiplyUnitSubvalues<AMeta, BMeta>>> : B extends AbstractUnit<infer BClass> ? Unit<FlatternAlias<MultiplyUnitSubvalues<AClass, BClass>>, AMeta> : B extends UnitConversionRate<infer BMeta> ? Unit<AClass, FlatternAlias<MultiplyUnitSubvalues<AMeta, BMeta>>> : A : never;
|
|
195
|
+
type MultiplyHelperAbstractUnit<A extends UnknownAbstractUnit, B extends number> = A extends AbstractUnit<infer AClass> ? B extends AbstractUnit<infer BClass> ? AbstractUnit<FlatternAlias<MultiplyUnitSubvalues<AClass, BClass>>> : B extends UnitConversionRate<infer BMeta> ? Unit<AClass, BMeta> : A : never;
|
|
196
|
+
type MultiplyHelperUnitConversionRate<A extends UnknownUnitConversionRate, B extends number> = A extends UnitConversionRate<infer AMeta> ? B extends UnitConversionRate<infer BMeta> ? UnitConversionRate<FlatternAlias<MultiplyUnitSubvalues<AMeta, BMeta>>> : A : never;
|
|
197
|
+
/**
|
|
198
|
+
* Multiply each of the subvalues from a unit with the corresponding once from another unit.
|
|
199
|
+
*
|
|
200
|
+
* @group Unit Subvalue Functions
|
|
201
|
+
*/
|
|
202
|
+
export type MultiplyUnitSubvalues<A extends UnitSubvalues, B extends UnitSubvalues> = ExcludeUnitZeroSubvalues<{
|
|
203
|
+
[S in keyof A | keyof B]: SumExponents<GetExponent<A, S>, GetExponent<B, S>>;
|
|
204
|
+
}>;
|
|
205
|
+
/**
|
|
206
|
+
* Divide a unit by another unit.
|
|
207
|
+
*
|
|
208
|
+
* @group Unit Functions
|
|
209
|
+
* @returns `A/B`
|
|
210
|
+
*/
|
|
211
|
+
export type Divide<A extends number, B extends number> = Multiply<A, Inverse<B>>;
|
|
212
|
+
/**
|
|
213
|
+
* Divide each of the subvalues from a unit with the corresponding once from another unit.
|
|
214
|
+
*
|
|
215
|
+
* @group Unit Subvalue Functions
|
|
216
|
+
*/
|
|
217
|
+
export type DivideUnitSubvalues<A extends UnitSubvalues, B extends UnitSubvalues> = MultiplyUnitSubvalues<A, InverseUnitSubvalues<B>>;
|
|
218
|
+
/**
|
|
219
|
+
* Put a unit to the power of an exponent.
|
|
220
|
+
*
|
|
221
|
+
* @group Unit Functions
|
|
222
|
+
*/
|
|
223
|
+
export type Pow<B extends number, E extends Exponent> = B extends Unit<infer Class, infer Meta> ? Unit<FlatternAlias<PowUnitSubvalues<Class, E>>, FlatternAlias<PowUnitSubvalues<Meta, E>>> : B extends AbstractUnit<infer Class> ? AbstractUnit<FlatternAlias<PowUnitSubvalues<Class, E>>> : B extends UnitConversionRate<infer Meta> ? UnitConversionRate<FlatternAlias<PowUnitSubvalues<Meta, E>>> : number;
|
|
224
|
+
/**
|
|
225
|
+
* Put each subvalue of a unit to the power of an exponent.
|
|
226
|
+
*
|
|
227
|
+
* @group Unit Subvalue Functions
|
|
228
|
+
*/
|
|
229
|
+
export type PowUnitSubvalues<B extends UnitSubvalues, E extends Exponent> = ExcludeUnitZeroSubvalues<{
|
|
230
|
+
[S in keyof B]: MultiplyExponents<GetExponent<B, S>, E>;
|
|
231
|
+
}>;
|
|
232
|
+
/**
|
|
233
|
+
* Take the nth root of a unit.
|
|
234
|
+
*
|
|
235
|
+
* @group Unit Functions
|
|
236
|
+
*/
|
|
237
|
+
export type Root<B extends number, E extends Exponent> = B extends Unit<infer Class, infer Meta> ? Unit<FlatternAlias<RootUnitSubvalues<Class, E>>, FlatternAlias<RootUnitSubvalues<Meta, E>>> : B extends AbstractUnit<infer Class> ? AbstractUnit<FlatternAlias<RootUnitSubvalues<Class, E>>> : B extends UnitConversionRate<infer Meta> ? UnitConversionRate<FlatternAlias<RootUnitSubvalues<Meta, E>>> : number;
|
|
238
|
+
/**
|
|
239
|
+
* Take the nth root of each subvalue of a unit.
|
|
240
|
+
*
|
|
241
|
+
* @group Unit Subvalue Functions
|
|
242
|
+
*/
|
|
243
|
+
export type RootUnitSubvalues<B extends UnitSubvalues, E extends Exponent> = ExcludeUnitZeroSubvalues<{
|
|
244
|
+
[S in keyof B]: DivideExponents<GetExponent<B, S>, E>;
|
|
245
|
+
}>;
|
|
246
|
+
|
|
247
|
+
export {};
|
package/dist/types.d.mts
ADDED
|
@@ -0,0 +1,247 @@
|
|
|
1
|
+
// Generated by dts-bundle-generator v9.5.1
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* @file Autogenerated File - Don't manually edit.
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* All the supported positive exponent values.
|
|
8
|
+
*
|
|
9
|
+
* @group Unit Components
|
|
10
|
+
*/
|
|
11
|
+
export type PosExponent = 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12;
|
|
12
|
+
/**
|
|
13
|
+
* All the supported negative exponent values.
|
|
14
|
+
*
|
|
15
|
+
* @group Unit Components
|
|
16
|
+
*/
|
|
17
|
+
export type NegExponent = -1 | -2 | -3 | -4 | -5 | -6 | -7 | -8 | -9 | -10 | -11 | -12;
|
|
18
|
+
/**
|
|
19
|
+
* All the supported exponent values.
|
|
20
|
+
*
|
|
21
|
+
* @group Unit Components
|
|
22
|
+
*/
|
|
23
|
+
export type Exponent = 0 | PosExponent | NegExponent;
|
|
24
|
+
/**
|
|
25
|
+
* @group Exponent Functions
|
|
26
|
+
*/
|
|
27
|
+
export type NegateExponent<T extends Exponent> = MultiplyExponents<T, -1>;
|
|
28
|
+
/**
|
|
29
|
+
* @group Exponent Functions
|
|
30
|
+
*/
|
|
31
|
+
export type SumExponents<A extends Exponent, B extends Exponent> = A extends 0 ? B extends 0 ? 0 : B extends 1 ? 1 : B extends -1 ? -1 : B extends 2 ? 2 : B extends -2 ? -2 : B extends 3 ? 3 : B extends -3 ? -3 : B extends 4 ? 4 : B extends -4 ? -4 : B extends 5 ? 5 : B extends -5 ? -5 : B extends 6 ? 6 : B extends -6 ? -6 : B extends 7 ? 7 : B extends -7 ? -7 : B extends 8 ? 8 : B extends -8 ? -8 : B extends 9 ? 9 : B extends -9 ? -9 : B extends 10 ? 10 : B extends -10 ? -10 : B extends 11 ? 11 : B extends -11 ? -11 : B extends 12 ? 12 : B extends -12 ? -12 : never : A extends 1 ? B extends 0 ? 1 : B extends 1 ? 2 : B extends -1 ? 0 : B extends 2 ? 3 : B extends -2 ? -1 : B extends 3 ? 4 : B extends -3 ? -2 : B extends 4 ? 5 : B extends -4 ? -3 : B extends 5 ? 6 : B extends -5 ? -4 : B extends 6 ? 7 : B extends -6 ? -5 : B extends 7 ? 8 : B extends -7 ? -6 : B extends 8 ? 9 : B extends -8 ? -7 : B extends 9 ? 10 : B extends -9 ? -8 : B extends 10 ? 11 : B extends -10 ? -9 : B extends 11 ? 12 : B extends -11 ? -10 : B extends -12 ? -11 : never : A extends -1 ? B extends 0 ? -1 : B extends 1 ? 0 : B extends -1 ? -2 : B extends 2 ? 1 : B extends -2 ? -3 : B extends 3 ? 2 : B extends -3 ? -4 : B extends 4 ? 3 : B extends -4 ? -5 : B extends 5 ? 4 : B extends -5 ? -6 : B extends 6 ? 5 : B extends -6 ? -7 : B extends 7 ? 6 : B extends -7 ? -8 : B extends 8 ? 7 : B extends -8 ? -9 : B extends 9 ? 8 : B extends -9 ? -10 : B extends 10 ? 9 : B extends -10 ? -11 : B extends 11 ? 10 : B extends -11 ? -12 : B extends 12 ? 11 : never : A extends 2 ? B extends 0 ? 2 : B extends 1 ? 3 : B extends -1 ? 1 : B extends 2 ? 4 : B extends -2 ? 0 : B extends 3 ? 5 : B extends -3 ? -1 : B extends 4 ? 6 : B extends -4 ? -2 : B extends 5 ? 7 : B extends -5 ? -3 : B extends 6 ? 8 : B extends -6 ? -4 : B extends 7 ? 9 : B extends -7 ? -5 : B extends 8 ? 10 : B extends -8 ? -6 : B extends 9 ? 11 : B extends -9 ? -7 : B extends 10 ? 12 : B extends -10 ? -8 : B extends -11 ? -9 : B extends -12 ? -10 : never : A extends -2 ? B extends 0 ? -2 : B extends 1 ? -1 : B extends -1 ? -3 : B extends 2 ? 0 : B extends -2 ? -4 : B extends 3 ? 1 : B extends -3 ? -5 : B extends 4 ? 2 : B extends -4 ? -6 : B extends 5 ? 3 : B extends -5 ? -7 : B extends 6 ? 4 : B extends -6 ? -8 : B extends 7 ? 5 : B extends -7 ? -9 : B extends 8 ? 6 : B extends -8 ? -10 : B extends 9 ? 7 : B extends -9 ? -11 : B extends 10 ? 8 : B extends -10 ? -12 : B extends 11 ? 9 : B extends 12 ? 10 : never : A extends 3 ? B extends 0 ? 3 : B extends 1 ? 4 : B extends -1 ? 2 : B extends 2 ? 5 : B extends -2 ? 1 : B extends 3 ? 6 : B extends -3 ? 0 : B extends 4 ? 7 : B extends -4 ? -1 : B extends 5 ? 8 : B extends -5 ? -2 : B extends 6 ? 9 : B extends -6 ? -3 : B extends 7 ? 10 : B extends -7 ? -4 : B extends 8 ? 11 : B extends -8 ? -5 : B extends 9 ? 12 : B extends -9 ? -6 : B extends -10 ? -7 : B extends -11 ? -8 : B extends -12 ? -9 : never : A extends -3 ? B extends 0 ? -3 : B extends 1 ? -2 : B extends -1 ? -4 : B extends 2 ? -1 : B extends -2 ? -5 : B extends 3 ? 0 : B extends -3 ? -6 : B extends 4 ? 1 : B extends -4 ? -7 : B extends 5 ? 2 : B extends -5 ? -8 : B extends 6 ? 3 : B extends -6 ? -9 : B extends 7 ? 4 : B extends -7 ? -10 : B extends 8 ? 5 : B extends -8 ? -11 : B extends 9 ? 6 : B extends -9 ? -12 : B extends 10 ? 7 : B extends 11 ? 8 : B extends 12 ? 9 : never : A extends 4 ? B extends 0 ? 4 : B extends 1 ? 5 : B extends -1 ? 3 : B extends 2 ? 6 : B extends -2 ? 2 : B extends 3 ? 7 : B extends -3 ? 1 : B extends 4 ? 8 : B extends -4 ? 0 : B extends 5 ? 9 : B extends -5 ? -1 : B extends 6 ? 10 : B extends -6 ? -2 : B extends 7 ? 11 : B extends -7 ? -3 : B extends 8 ? 12 : B extends -8 ? -4 : B extends -9 ? -5 : B extends -10 ? -6 : B extends -11 ? -7 : B extends -12 ? -8 : never : A extends -4 ? B extends 0 ? -4 : B extends 1 ? -3 : B extends -1 ? -5 : B extends 2 ? -2 : B extends -2 ? -6 : B extends 3 ? -1 : B extends -3 ? -7 : B extends 4 ? 0 : B extends -4 ? -8 : B extends 5 ? 1 : B extends -5 ? -9 : B extends 6 ? 2 : B extends -6 ? -10 : B extends 7 ? 3 : B extends -7 ? -11 : B extends 8 ? 4 : B extends -8 ? -12 : B extends 9 ? 5 : B extends 10 ? 6 : B extends 11 ? 7 : B extends 12 ? 8 : never : A extends 5 ? B extends 0 ? 5 : B extends 1 ? 6 : B extends -1 ? 4 : B extends 2 ? 7 : B extends -2 ? 3 : B extends 3 ? 8 : B extends -3 ? 2 : B extends 4 ? 9 : B extends -4 ? 1 : B extends 5 ? 10 : B extends -5 ? 0 : B extends 6 ? 11 : B extends -6 ? -1 : B extends 7 ? 12 : B extends -7 ? -2 : B extends -8 ? -3 : B extends -9 ? -4 : B extends -10 ? -5 : B extends -11 ? -6 : B extends -12 ? -7 : never : A extends -5 ? B extends 0 ? -5 : B extends 1 ? -4 : B extends -1 ? -6 : B extends 2 ? -3 : B extends -2 ? -7 : B extends 3 ? -2 : B extends -3 ? -8 : B extends 4 ? -1 : B extends -4 ? -9 : B extends 5 ? 0 : B extends -5 ? -10 : B extends 6 ? 1 : B extends -6 ? -11 : B extends 7 ? 2 : B extends -7 ? -12 : B extends 8 ? 3 : B extends 9 ? 4 : B extends 10 ? 5 : B extends 11 ? 6 : B extends 12 ? 7 : never : A extends 6 ? B extends 0 ? 6 : B extends 1 ? 7 : B extends -1 ? 5 : B extends 2 ? 8 : B extends -2 ? 4 : B extends 3 ? 9 : B extends -3 ? 3 : B extends 4 ? 10 : B extends -4 ? 2 : B extends 5 ? 11 : B extends -5 ? 1 : B extends 6 ? 12 : B extends -6 ? 0 : B extends -7 ? -1 : B extends -8 ? -2 : B extends -9 ? -3 : B extends -10 ? -4 : B extends -11 ? -5 : B extends -12 ? -6 : never : A extends -6 ? B extends 0 ? -6 : B extends 1 ? -5 : B extends -1 ? -7 : B extends 2 ? -4 : B extends -2 ? -8 : B extends 3 ? -3 : B extends -3 ? -9 : B extends 4 ? -2 : B extends -4 ? -10 : B extends 5 ? -1 : B extends -5 ? -11 : B extends 6 ? 0 : B extends -6 ? -12 : B extends 7 ? 1 : B extends 8 ? 2 : B extends 9 ? 3 : B extends 10 ? 4 : B extends 11 ? 5 : B extends 12 ? 6 : never : A extends 7 ? B extends 0 ? 7 : B extends 1 ? 8 : B extends -1 ? 6 : B extends 2 ? 9 : B extends -2 ? 5 : B extends 3 ? 10 : B extends -3 ? 4 : B extends 4 ? 11 : B extends -4 ? 3 : B extends 5 ? 12 : B extends -5 ? 2 : B extends -6 ? 1 : B extends -7 ? 0 : B extends -8 ? -1 : B extends -9 ? -2 : B extends -10 ? -3 : B extends -11 ? -4 : B extends -12 ? -5 : never : A extends -7 ? B extends 0 ? -7 : B extends 1 ? -6 : B extends -1 ? -8 : B extends 2 ? -5 : B extends -2 ? -9 : B extends 3 ? -4 : B extends -3 ? -10 : B extends 4 ? -3 : B extends -4 ? -11 : B extends 5 ? -2 : B extends -5 ? -12 : B extends 6 ? -1 : B extends 7 ? 0 : B extends 8 ? 1 : B extends 9 ? 2 : B extends 10 ? 3 : B extends 11 ? 4 : B extends 12 ? 5 : never : A extends 8 ? B extends 0 ? 8 : B extends 1 ? 9 : B extends -1 ? 7 : B extends 2 ? 10 : B extends -2 ? 6 : B extends 3 ? 11 : B extends -3 ? 5 : B extends 4 ? 12 : B extends -4 ? 4 : B extends -5 ? 3 : B extends -6 ? 2 : B extends -7 ? 1 : B extends -8 ? 0 : B extends -9 ? -1 : B extends -10 ? -2 : B extends -11 ? -3 : B extends -12 ? -4 : never : A extends -8 ? B extends 0 ? -8 : B extends 1 ? -7 : B extends -1 ? -9 : B extends 2 ? -6 : B extends -2 ? -10 : B extends 3 ? -5 : B extends -3 ? -11 : B extends 4 ? -4 : B extends -4 ? -12 : B extends 5 ? -3 : B extends 6 ? -2 : B extends 7 ? -1 : B extends 8 ? 0 : B extends 9 ? 1 : B extends 10 ? 2 : B extends 11 ? 3 : B extends 12 ? 4 : never : A extends 9 ? B extends 0 ? 9 : B extends 1 ? 10 : B extends -1 ? 8 : B extends 2 ? 11 : B extends -2 ? 7 : B extends 3 ? 12 : B extends -3 ? 6 : B extends -4 ? 5 : B extends -5 ? 4 : B extends -6 ? 3 : B extends -7 ? 2 : B extends -8 ? 1 : B extends -9 ? 0 : B extends -10 ? -1 : B extends -11 ? -2 : B extends -12 ? -3 : never : A extends -9 ? B extends 0 ? -9 : B extends 1 ? -8 : B extends -1 ? -10 : B extends 2 ? -7 : B extends -2 ? -11 : B extends 3 ? -6 : B extends -3 ? -12 : B extends 4 ? -5 : B extends 5 ? -4 : B extends 6 ? -3 : B extends 7 ? -2 : B extends 8 ? -1 : B extends 9 ? 0 : B extends 10 ? 1 : B extends 11 ? 2 : B extends 12 ? 3 : never : A extends 10 ? B extends 0 ? 10 : B extends 1 ? 11 : B extends -1 ? 9 : B extends 2 ? 12 : B extends -2 ? 8 : B extends -3 ? 7 : B extends -4 ? 6 : B extends -5 ? 5 : B extends -6 ? 4 : B extends -7 ? 3 : B extends -8 ? 2 : B extends -9 ? 1 : B extends -10 ? 0 : B extends -11 ? -1 : B extends -12 ? -2 : never : A extends -10 ? B extends 0 ? -10 : B extends 1 ? -9 : B extends -1 ? -11 : B extends 2 ? -8 : B extends -2 ? -12 : B extends 3 ? -7 : B extends 4 ? -6 : B extends 5 ? -5 : B extends 6 ? -4 : B extends 7 ? -3 : B extends 8 ? -2 : B extends 9 ? -1 : B extends 10 ? 0 : B extends 11 ? 1 : B extends 12 ? 2 : never : A extends 11 ? B extends 0 ? 11 : B extends 1 ? 12 : B extends -1 ? 10 : B extends -2 ? 9 : B extends -3 ? 8 : B extends -4 ? 7 : B extends -5 ? 6 : B extends -6 ? 5 : B extends -7 ? 4 : B extends -8 ? 3 : B extends -9 ? 2 : B extends -10 ? 1 : B extends -11 ? 0 : B extends -12 ? -1 : never : A extends -11 ? B extends 0 ? -11 : B extends 1 ? -10 : B extends -1 ? -12 : B extends 2 ? -9 : B extends 3 ? -8 : B extends 4 ? -7 : B extends 5 ? -6 : B extends 6 ? -5 : B extends 7 ? -4 : B extends 8 ? -3 : B extends 9 ? -2 : B extends 10 ? -1 : B extends 11 ? 0 : B extends 12 ? 1 : never : A extends 12 ? B extends 0 ? 12 : B extends -1 ? 11 : B extends -2 ? 10 : B extends -3 ? 9 : B extends -4 ? 8 : B extends -5 ? 7 : B extends -6 ? 6 : B extends -7 ? 5 : B extends -8 ? 4 : B extends -9 ? 3 : B extends -10 ? 2 : B extends -11 ? 1 : B extends -12 ? 0 : never : A extends -12 ? B extends 0 ? -12 : B extends 1 ? -11 : B extends 2 ? -10 : B extends 3 ? -9 : B extends 4 ? -8 : B extends 5 ? -7 : B extends 6 ? -6 : B extends 7 ? -5 : B extends 8 ? -4 : B extends 9 ? -3 : B extends 10 ? -2 : B extends 11 ? -1 : B extends 12 ? 0 : never : never;
|
|
32
|
+
/**
|
|
33
|
+
* @group Exponent Functions
|
|
34
|
+
*/
|
|
35
|
+
export type SubExponents<A extends Exponent, B extends Exponent> = SumExponents<A, NegateExponent<B>>;
|
|
36
|
+
/**
|
|
37
|
+
* @group Exponent Functions
|
|
38
|
+
*/
|
|
39
|
+
export type MultiplyExponents<A extends Exponent, B extends Exponent> = A extends 0 ? B extends 0 ? 0 : B extends 1 ? 0 : B extends -1 ? 0 : B extends 2 ? 0 : B extends -2 ? 0 : B extends 3 ? 0 : B extends -3 ? 0 : B extends 4 ? 0 : B extends -4 ? 0 : B extends 5 ? 0 : B extends -5 ? 0 : B extends 6 ? 0 : B extends -6 ? 0 : B extends 7 ? 0 : B extends -7 ? 0 : B extends 8 ? 0 : B extends -8 ? 0 : B extends 9 ? 0 : B extends -9 ? 0 : B extends 10 ? 0 : B extends -10 ? 0 : B extends 11 ? 0 : B extends -11 ? 0 : B extends 12 ? 0 : B extends -12 ? 0 : never : A extends 1 ? B extends 0 ? 0 : B extends 1 ? 1 : B extends -1 ? -1 : B extends 2 ? 2 : B extends -2 ? -2 : B extends 3 ? 3 : B extends -3 ? -3 : B extends 4 ? 4 : B extends -4 ? -4 : B extends 5 ? 5 : B extends -5 ? -5 : B extends 6 ? 6 : B extends -6 ? -6 : B extends 7 ? 7 : B extends -7 ? -7 : B extends 8 ? 8 : B extends -8 ? -8 : B extends 9 ? 9 : B extends -9 ? -9 : B extends 10 ? 10 : B extends -10 ? -10 : B extends 11 ? 11 : B extends -11 ? -11 : B extends 12 ? 12 : B extends -12 ? -12 : never : A extends -1 ? B extends 0 ? 0 : B extends 1 ? -1 : B extends -1 ? 1 : B extends 2 ? -2 : B extends -2 ? 2 : B extends 3 ? -3 : B extends -3 ? 3 : B extends 4 ? -4 : B extends -4 ? 4 : B extends 5 ? -5 : B extends -5 ? 5 : B extends 6 ? -6 : B extends -6 ? 6 : B extends 7 ? -7 : B extends -7 ? 7 : B extends 8 ? -8 : B extends -8 ? 8 : B extends 9 ? -9 : B extends -9 ? 9 : B extends 10 ? -10 : B extends -10 ? 10 : B extends 11 ? -11 : B extends -11 ? 11 : B extends 12 ? -12 : B extends -12 ? 12 : never : A extends 2 ? B extends 0 ? 0 : B extends 1 ? 2 : B extends -1 ? -2 : B extends 2 ? 4 : B extends -2 ? -4 : B extends 3 ? 6 : B extends -3 ? -6 : B extends 4 ? 8 : B extends -4 ? -8 : B extends 5 ? 10 : B extends -5 ? -10 : B extends 6 ? 12 : B extends -6 ? -12 : never : A extends -2 ? B extends 0 ? 0 : B extends 1 ? -2 : B extends -1 ? 2 : B extends 2 ? -4 : B extends -2 ? 4 : B extends 3 ? -6 : B extends -3 ? 6 : B extends 4 ? -8 : B extends -4 ? 8 : B extends 5 ? -10 : B extends -5 ? 10 : B extends 6 ? -12 : B extends -6 ? 12 : never : A extends 3 ? B extends 0 ? 0 : B extends 1 ? 3 : B extends -1 ? -3 : B extends 2 ? 6 : B extends -2 ? -6 : B extends 3 ? 9 : B extends -3 ? -9 : B extends 4 ? 12 : B extends -4 ? -12 : never : A extends -3 ? B extends 0 ? 0 : B extends 1 ? -3 : B extends -1 ? 3 : B extends 2 ? -6 : B extends -2 ? 6 : B extends 3 ? -9 : B extends -3 ? 9 : B extends 4 ? -12 : B extends -4 ? 12 : never : A extends 4 ? B extends 0 ? 0 : B extends 1 ? 4 : B extends -1 ? -4 : B extends 2 ? 8 : B extends -2 ? -8 : B extends 3 ? 12 : B extends -3 ? -12 : never : A extends -4 ? B extends 0 ? 0 : B extends 1 ? -4 : B extends -1 ? 4 : B extends 2 ? -8 : B extends -2 ? 8 : B extends 3 ? -12 : B extends -3 ? 12 : never : A extends 5 ? B extends 0 ? 0 : B extends 1 ? 5 : B extends -1 ? -5 : B extends 2 ? 10 : B extends -2 ? -10 : never : A extends -5 ? B extends 0 ? 0 : B extends 1 ? -5 : B extends -1 ? 5 : B extends 2 ? -10 : B extends -2 ? 10 : never : A extends 6 ? B extends 0 ? 0 : B extends 1 ? 6 : B extends -1 ? -6 : B extends 2 ? 12 : B extends -2 ? -12 : never : A extends -6 ? B extends 0 ? 0 : B extends 1 ? -6 : B extends -1 ? 6 : B extends 2 ? -12 : B extends -2 ? 12 : never : A extends 7 ? B extends 0 ? 0 : B extends 1 ? 7 : B extends -1 ? -7 : never : A extends -7 ? B extends 0 ? 0 : B extends 1 ? -7 : B extends -1 ? 7 : never : A extends 8 ? B extends 0 ? 0 : B extends 1 ? 8 : B extends -1 ? -8 : never : A extends -8 ? B extends 0 ? 0 : B extends 1 ? -8 : B extends -1 ? 8 : never : A extends 9 ? B extends 0 ? 0 : B extends 1 ? 9 : B extends -1 ? -9 : never : A extends -9 ? B extends 0 ? 0 : B extends 1 ? -9 : B extends -1 ? 9 : never : A extends 10 ? B extends 0 ? 0 : B extends 1 ? 10 : B extends -1 ? -10 : never : A extends -10 ? B extends 0 ? 0 : B extends 1 ? -10 : B extends -1 ? 10 : never : A extends 11 ? B extends 0 ? 0 : B extends 1 ? 11 : B extends -1 ? -11 : never : A extends -11 ? B extends 0 ? 0 : B extends 1 ? -11 : B extends -1 ? 11 : never : A extends 12 ? B extends 0 ? 0 : B extends 1 ? 12 : B extends -1 ? -12 : never : A extends -12 ? B extends 0 ? 0 : B extends 1 ? -12 : B extends -1 ? 12 : never : never;
|
|
40
|
+
/**
|
|
41
|
+
* @group Exponent Functions
|
|
42
|
+
*/
|
|
43
|
+
export type DivideExponents<A extends Exponent, B extends Exponent> = B extends 0 ? never : B extends 1 ? A extends 0 ? 0 : A extends 1 ? 1 : A extends -1 ? -1 : A extends 2 ? 2 : A extends -2 ? -2 : A extends 3 ? 3 : A extends -3 ? -3 : A extends 4 ? 4 : A extends -4 ? -4 : A extends 5 ? 5 : A extends -5 ? -5 : A extends 6 ? 6 : A extends -6 ? -6 : A extends 7 ? 7 : A extends -7 ? -7 : A extends 8 ? 8 : A extends -8 ? -8 : A extends 9 ? 9 : A extends -9 ? -9 : A extends 10 ? 10 : A extends -10 ? -10 : A extends 11 ? 11 : A extends -11 ? -11 : A extends 12 ? 12 : A extends -12 ? -12 : never : B extends -1 ? A extends 0 ? 0 : A extends 1 ? -1 : A extends -1 ? 1 : A extends 2 ? -2 : A extends -2 ? 2 : A extends 3 ? -3 : A extends -3 ? 3 : A extends 4 ? -4 : A extends -4 ? 4 : A extends 5 ? -5 : A extends -5 ? 5 : A extends 6 ? -6 : A extends -6 ? 6 : A extends 7 ? -7 : A extends -7 ? 7 : A extends 8 ? -8 : A extends -8 ? 8 : A extends 9 ? -9 : A extends -9 ? 9 : A extends 10 ? -10 : A extends -10 ? 10 : A extends 11 ? -11 : A extends -11 ? 11 : A extends 12 ? -12 : A extends -12 ? 12 : never : B extends 2 ? A extends 0 ? 0 : A extends 2 ? 1 : A extends -2 ? -1 : A extends 4 ? 2 : A extends -4 ? -2 : A extends 6 ? 3 : A extends -6 ? -3 : A extends 8 ? 4 : A extends -8 ? -4 : A extends 10 ? 5 : A extends -10 ? -5 : A extends 12 ? 6 : A extends -12 ? -6 : never : B extends -2 ? A extends 0 ? 0 : A extends 2 ? -1 : A extends -2 ? 1 : A extends 4 ? -2 : A extends -4 ? 2 : A extends 6 ? -3 : A extends -6 ? 3 : A extends 8 ? -4 : A extends -8 ? 4 : A extends 10 ? -5 : A extends -10 ? 5 : A extends 12 ? -6 : A extends -12 ? 6 : never : B extends 3 ? A extends 0 ? 0 : A extends 3 ? 1 : A extends -3 ? -1 : A extends 6 ? 2 : A extends -6 ? -2 : A extends 9 ? 3 : A extends -9 ? -3 : A extends 12 ? 4 : A extends -12 ? -4 : never : B extends -3 ? A extends 0 ? 0 : A extends 3 ? -1 : A extends -3 ? 1 : A extends 6 ? -2 : A extends -6 ? 2 : A extends 9 ? -3 : A extends -9 ? 3 : A extends 12 ? -4 : A extends -12 ? 4 : never : B extends 4 ? A extends 0 ? 0 : A extends 4 ? 1 : A extends -4 ? -1 : A extends 8 ? 2 : A extends -8 ? -2 : A extends 12 ? 3 : A extends -12 ? -3 : never : B extends -4 ? A extends 0 ? 0 : A extends 4 ? -1 : A extends -4 ? 1 : A extends 8 ? -2 : A extends -8 ? 2 : A extends 12 ? -3 : A extends -12 ? 3 : never : B extends 5 ? A extends 0 ? 0 : A extends 5 ? 1 : A extends -5 ? -1 : A extends 10 ? 2 : A extends -10 ? -2 : never : B extends -5 ? A extends 0 ? 0 : A extends 5 ? -1 : A extends -5 ? 1 : A extends 10 ? -2 : A extends -10 ? 2 : never : B extends 6 ? A extends 0 ? 0 : A extends 6 ? 1 : A extends -6 ? -1 : A extends 12 ? 2 : A extends -12 ? -2 : never : B extends -6 ? A extends 0 ? 0 : A extends 6 ? -1 : A extends -6 ? 1 : A extends 12 ? -2 : A extends -12 ? 2 : never : B extends 7 ? A extends 0 ? 0 : A extends 7 ? 1 : A extends -7 ? -1 : never : B extends -7 ? A extends 0 ? 0 : A extends 7 ? -1 : A extends -7 ? 1 : never : B extends 8 ? A extends 0 ? 0 : A extends 8 ? 1 : A extends -8 ? -1 : never : B extends -8 ? A extends 0 ? 0 : A extends 8 ? -1 : A extends -8 ? 1 : never : B extends 9 ? A extends 0 ? 0 : A extends 9 ? 1 : A extends -9 ? -1 : never : B extends -9 ? A extends 0 ? 0 : A extends 9 ? -1 : A extends -9 ? 1 : never : B extends 10 ? A extends 0 ? 0 : A extends 10 ? 1 : A extends -10 ? -1 : never : B extends -10 ? A extends 0 ? 0 : A extends 10 ? -1 : A extends -10 ? 1 : never : B extends 11 ? A extends 0 ? 0 : A extends 11 ? 1 : A extends -11 ? -1 : never : B extends -11 ? A extends 0 ? 0 : A extends 11 ? -1 : A extends -11 ? 1 : never : B extends 12 ? A extends 0 ? 0 : A extends 12 ? 1 : A extends -12 ? -1 : never : B extends -12 ? A extends 0 ? 0 : A extends 12 ? -1 : A extends -12 ? 1 : never : never;
|
|
44
|
+
interface Brand {
|
|
45
|
+
}
|
|
46
|
+
type BrandUnitMeta<UM extends UnknownUnitMeta> = Brand & {
|
|
47
|
+
__uom_types: {
|
|
48
|
+
unitMeta: UM;
|
|
49
|
+
};
|
|
50
|
+
};
|
|
51
|
+
type BrandUnitClass<UC extends UnknownUnitClass> = Brand & {
|
|
52
|
+
__uom_types: {
|
|
53
|
+
unitClass: UC;
|
|
54
|
+
};
|
|
55
|
+
};
|
|
56
|
+
type BrandUnitClassType = Brand & {
|
|
57
|
+
__uom_types: {
|
|
58
|
+
unitClassType: true;
|
|
59
|
+
};
|
|
60
|
+
};
|
|
61
|
+
type BrandUnitKeyValues<K, V> = Brand & Readonly<{
|
|
62
|
+
__uom_types: {
|
|
63
|
+
keys: K;
|
|
64
|
+
value: V;
|
|
65
|
+
};
|
|
66
|
+
}>;
|
|
67
|
+
type RemoveNeverValues<T extends object> = {
|
|
68
|
+
[K in keyof T as [
|
|
69
|
+
T[K]
|
|
70
|
+
] extends [
|
|
71
|
+
never
|
|
72
|
+
] ? never : K]: T[K];
|
|
73
|
+
};
|
|
74
|
+
type ExcludeUnitZeroSubvalues<U extends UnitSubvalues> = {
|
|
75
|
+
[S in keyof U as S extends string ? (U[S] extends 0 ? never : S) : never]: U[S];
|
|
76
|
+
};
|
|
77
|
+
type GetExponent<C extends UnitSubvalues, S> = S extends keyof C ? C[S] : 0;
|
|
78
|
+
type FlatternAlias<T> = {
|
|
79
|
+
[P in keyof T]: T[P];
|
|
80
|
+
} & {};
|
|
81
|
+
/**
|
|
82
|
+
* A unit without any meta data.
|
|
83
|
+
*
|
|
84
|
+
* @group Abstract Unit Generators
|
|
85
|
+
*/
|
|
86
|
+
export type AbstractUnit<C extends UnitSubvalues> = number & BrandUnitClass<UnitClass<C>>;
|
|
87
|
+
/**
|
|
88
|
+
* Create a unit without meta data from an already existing {@link UnitClass}.
|
|
89
|
+
*
|
|
90
|
+
* @group Abstract Unit Generators
|
|
91
|
+
*/
|
|
92
|
+
export type AbstractUnitFrom<C extends UnknownUnitClass> = C extends UnitClass<infer A> ? AbstractUnit<UnitSubvalues extends A ? {} : A> : never;
|
|
93
|
+
/**
|
|
94
|
+
* The core unit type.
|
|
95
|
+
*
|
|
96
|
+
* @group Unit Generators
|
|
97
|
+
*/
|
|
98
|
+
export type Unit<C extends UnitSubvalues, M extends UnitSubvalues = {}> = number & BrandUnitClass<UnitClass<C>> & BrandUnitMeta<UnitMeta<M>>;
|
|
99
|
+
/**
|
|
100
|
+
* Create a {@link Unit} from already existing {@link UnitClass} and {@link UnitMeta}.
|
|
101
|
+
*
|
|
102
|
+
* @group Unit Generators
|
|
103
|
+
*/
|
|
104
|
+
export type UnitFrom<C extends UnknownUnitClass, M extends UnknownUnitMeta = UnitMeta<{}>> = C extends UnitClass<infer A> ? (M extends UnitMeta<infer B> ? Unit<A, B> : never) : never;
|
|
105
|
+
/**
|
|
106
|
+
* A {@link Unit} without any {@link UnitClass}.
|
|
107
|
+
*
|
|
108
|
+
* Used to convert from one {@link Unit} to another of the same {@link UnitClass}.
|
|
109
|
+
*
|
|
110
|
+
* @group Unit Generators
|
|
111
|
+
*/
|
|
112
|
+
export type UnitConversionRate<M extends UnitSubvalues> = number & BrandUnitMeta<UnitMeta<M>>;
|
|
113
|
+
/**
|
|
114
|
+
* Create a {@link UnitConversionRate} from already existing {@link UnitMeta}.
|
|
115
|
+
*
|
|
116
|
+
* @group Unit Generators
|
|
117
|
+
*/
|
|
118
|
+
export type UnitConversionRateFrom<M extends UnknownUnitMeta> = M extends UnitMeta<infer A> ? UnitConversionRate<A> : never;
|
|
119
|
+
/**
|
|
120
|
+
* Used to determine what a unit is of. For example, length, volume, mass etc.
|
|
121
|
+
*
|
|
122
|
+
* @group Unit Components
|
|
123
|
+
*/
|
|
124
|
+
export type UnitClass<T extends UnitSubvalues> = UnitKeyValues<T> & BrandUnitClassType;
|
|
125
|
+
/**
|
|
126
|
+
* Used to state how units of the same {@link UnitClass} differ from one another.
|
|
127
|
+
* For example, by a scale factor.
|
|
128
|
+
*
|
|
129
|
+
* @group Unit Components
|
|
130
|
+
*/
|
|
131
|
+
export type UnitMeta<T extends UnitSubvalues> = UnitKeyValues<T> & Readonly<{
|
|
132
|
+
__uno_types__unit_meta_type: true;
|
|
133
|
+
}>;
|
|
134
|
+
/**
|
|
135
|
+
* A {@link Unit} that we don't know anything about.
|
|
136
|
+
*
|
|
137
|
+
* @group Unknown Units
|
|
138
|
+
*/
|
|
139
|
+
export type UnknownUnit = UnknownAbstractUnit & BrandUnitMeta<UnknownUnitMeta>;
|
|
140
|
+
/**
|
|
141
|
+
* An {@link AbstractUnit} that we don't know anything about.
|
|
142
|
+
*
|
|
143
|
+
* @group Unknown Units
|
|
144
|
+
*/
|
|
145
|
+
export type UnknownAbstractUnit = number & BrandUnitClass<UnknownUnitClass>;
|
|
146
|
+
/**
|
|
147
|
+
* An {@link UnitConversionRate} that we don't know anything about.
|
|
148
|
+
*
|
|
149
|
+
* @group Unknown Units
|
|
150
|
+
*/
|
|
151
|
+
export type UnknownUnitConversionRate = number & BrandUnitMeta<UnknownUnitMeta>;
|
|
152
|
+
/**
|
|
153
|
+
* A {@link UnitClass} that we don't know anything about.
|
|
154
|
+
*
|
|
155
|
+
* @group Unknown Units
|
|
156
|
+
*/
|
|
157
|
+
export type UnknownUnitClass = UnknownUnitKeyValues & BrandUnitClassType;
|
|
158
|
+
/**
|
|
159
|
+
* A {@link UnitMeta} that we don't know anything about.
|
|
160
|
+
*
|
|
161
|
+
* @group Unknown Units
|
|
162
|
+
*/
|
|
163
|
+
export type UnknownUnitMeta = UnknownUnitKeyValues & Readonly<{
|
|
164
|
+
__uno_types__unit_meta_type: true;
|
|
165
|
+
}>;
|
|
166
|
+
type UnitKeyValues<T extends UnitSubvalues> = BrandUnitKeyValues<keyof ExcludeUnitZeroSubvalues<T> extends string ? keyof ExcludeUnitZeroSubvalues<T> : never, RemoveNeverValues<T>>;
|
|
167
|
+
type UnknownUnitKeyValues = BrandUnitKeyValues<string, {}>;
|
|
168
|
+
/**
|
|
169
|
+
* A mapping of subvalue of a unit its magnitude.
|
|
170
|
+
*
|
|
171
|
+
* @group Unit Components
|
|
172
|
+
*/
|
|
173
|
+
export type UnitSubvalues = Record<string, Exponent>;
|
|
174
|
+
/**
|
|
175
|
+
* Take the inverse of a unit.
|
|
176
|
+
*
|
|
177
|
+
* @group Unit Functions
|
|
178
|
+
* @returns `1/X`.
|
|
179
|
+
*/
|
|
180
|
+
export type Inverse<X extends number> = Pow<X, -1>;
|
|
181
|
+
/**
|
|
182
|
+
* Inverses each of the subvalues.
|
|
183
|
+
*
|
|
184
|
+
* @group Unit Subvalue Functions
|
|
185
|
+
*/
|
|
186
|
+
export type InverseUnitSubvalues<T extends UnitSubvalues> = PowUnitSubvalues<T, -1>;
|
|
187
|
+
/**
|
|
188
|
+
* Multiply a unit by another unit.
|
|
189
|
+
*
|
|
190
|
+
* @group Unit Functions
|
|
191
|
+
* @returns `A⋅B`
|
|
192
|
+
*/
|
|
193
|
+
export type Multiply<A extends number, B extends number> = A extends UnknownUnit ? MultiplyHelperUnit<A, B> : B extends UnknownUnit ? MultiplyHelperUnit<B, A> : A extends UnknownAbstractUnit ? MultiplyHelperAbstractUnit<A, B> : B extends UnknownAbstractUnit ? MultiplyHelperAbstractUnit<B, A> : A extends UnknownUnitConversionRate ? MultiplyHelperUnitConversionRate<A, B> : B extends UnknownUnitConversionRate ? MultiplyHelperUnitConversionRate<B, A> : number;
|
|
194
|
+
type MultiplyHelperUnit<A extends UnknownUnit, B extends number> = A extends Unit<infer AClass, infer AMeta> ? B extends Unit<infer BClass, infer BMeta> ? Unit<FlatternAlias<MultiplyUnitSubvalues<AClass, BClass>>, FlatternAlias<MultiplyUnitSubvalues<AMeta, BMeta>>> : B extends AbstractUnit<infer BClass> ? Unit<FlatternAlias<MultiplyUnitSubvalues<AClass, BClass>>, AMeta> : B extends UnitConversionRate<infer BMeta> ? Unit<AClass, FlatternAlias<MultiplyUnitSubvalues<AMeta, BMeta>>> : A : never;
|
|
195
|
+
type MultiplyHelperAbstractUnit<A extends UnknownAbstractUnit, B extends number> = A extends AbstractUnit<infer AClass> ? B extends AbstractUnit<infer BClass> ? AbstractUnit<FlatternAlias<MultiplyUnitSubvalues<AClass, BClass>>> : B extends UnitConversionRate<infer BMeta> ? Unit<AClass, BMeta> : A : never;
|
|
196
|
+
type MultiplyHelperUnitConversionRate<A extends UnknownUnitConversionRate, B extends number> = A extends UnitConversionRate<infer AMeta> ? B extends UnitConversionRate<infer BMeta> ? UnitConversionRate<FlatternAlias<MultiplyUnitSubvalues<AMeta, BMeta>>> : A : never;
|
|
197
|
+
/**
|
|
198
|
+
* Multiply each of the subvalues from a unit with the corresponding once from another unit.
|
|
199
|
+
*
|
|
200
|
+
* @group Unit Subvalue Functions
|
|
201
|
+
*/
|
|
202
|
+
export type MultiplyUnitSubvalues<A extends UnitSubvalues, B extends UnitSubvalues> = ExcludeUnitZeroSubvalues<{
|
|
203
|
+
[S in keyof A | keyof B]: SumExponents<GetExponent<A, S>, GetExponent<B, S>>;
|
|
204
|
+
}>;
|
|
205
|
+
/**
|
|
206
|
+
* Divide a unit by another unit.
|
|
207
|
+
*
|
|
208
|
+
* @group Unit Functions
|
|
209
|
+
* @returns `A/B`
|
|
210
|
+
*/
|
|
211
|
+
export type Divide<A extends number, B extends number> = Multiply<A, Inverse<B>>;
|
|
212
|
+
/**
|
|
213
|
+
* Divide each of the subvalues from a unit with the corresponding once from another unit.
|
|
214
|
+
*
|
|
215
|
+
* @group Unit Subvalue Functions
|
|
216
|
+
*/
|
|
217
|
+
export type DivideUnitSubvalues<A extends UnitSubvalues, B extends UnitSubvalues> = MultiplyUnitSubvalues<A, InverseUnitSubvalues<B>>;
|
|
218
|
+
/**
|
|
219
|
+
* Put a unit to the power of an exponent.
|
|
220
|
+
*
|
|
221
|
+
* @group Unit Functions
|
|
222
|
+
*/
|
|
223
|
+
export type Pow<B extends number, E extends Exponent> = B extends Unit<infer Class, infer Meta> ? Unit<FlatternAlias<PowUnitSubvalues<Class, E>>, FlatternAlias<PowUnitSubvalues<Meta, E>>> : B extends AbstractUnit<infer Class> ? AbstractUnit<FlatternAlias<PowUnitSubvalues<Class, E>>> : B extends UnitConversionRate<infer Meta> ? UnitConversionRate<FlatternAlias<PowUnitSubvalues<Meta, E>>> : number;
|
|
224
|
+
/**
|
|
225
|
+
* Put each subvalue of a unit to the power of an exponent.
|
|
226
|
+
*
|
|
227
|
+
* @group Unit Subvalue Functions
|
|
228
|
+
*/
|
|
229
|
+
export type PowUnitSubvalues<B extends UnitSubvalues, E extends Exponent> = ExcludeUnitZeroSubvalues<{
|
|
230
|
+
[S in keyof B]: MultiplyExponents<GetExponent<B, S>, E>;
|
|
231
|
+
}>;
|
|
232
|
+
/**
|
|
233
|
+
* Take the nth root of a unit.
|
|
234
|
+
*
|
|
235
|
+
* @group Unit Functions
|
|
236
|
+
*/
|
|
237
|
+
export type Root<B extends number, E extends Exponent> = B extends Unit<infer Class, infer Meta> ? Unit<FlatternAlias<RootUnitSubvalues<Class, E>>, FlatternAlias<RootUnitSubvalues<Meta, E>>> : B extends AbstractUnit<infer Class> ? AbstractUnit<FlatternAlias<RootUnitSubvalues<Class, E>>> : B extends UnitConversionRate<infer Meta> ? UnitConversionRate<FlatternAlias<RootUnitSubvalues<Meta, E>>> : number;
|
|
238
|
+
/**
|
|
239
|
+
* Take the nth root of each subvalue of a unit.
|
|
240
|
+
*
|
|
241
|
+
* @group Unit Subvalue Functions
|
|
242
|
+
*/
|
|
243
|
+
export type RootUnitSubvalues<B extends UnitSubvalues, E extends Exponent> = ExcludeUnitZeroSubvalues<{
|
|
244
|
+
[S in keyof B]: DivideExponents<GetExponent<B, S>, E>;
|
|
245
|
+
}>;
|
|
246
|
+
|
|
247
|
+
export {};
|