uom-types 1.0.3 → 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +33 -1
- package/dist/_angle-plane.d.cts +89 -0
- package/dist/_angle-plane.d.mts +89 -0
- package/dist/_identity.d.cts +29 -0
- package/dist/_identity.d.mts +29 -0
- package/dist/_index.d.cts +235 -0
- package/dist/_index.d.mts +235 -0
- package/dist/_time-duration.d.cts +481 -0
- package/dist/_time-duration.d.mts +481 -0
- package/dist/{functions-ho.cjs → functions-higher-order.cjs} +32 -5
- package/dist/functions-higher-order.d.cts +84 -0
- package/dist/functions-higher-order.d.mts +84 -0
- package/dist/{functions-ho.mjs → functions-higher-order.mjs} +32 -5
- package/dist/functions.cjs +167 -12
- package/dist/functions.d.cts +168 -98
- package/dist/functions.d.mts +168 -98
- package/dist/functions.mjs +155 -12
- package/dist/index.d.cts +1 -71
- package/dist/index.d.mts +1 -71
- package/dist/units-converters.cjs +564 -0
- package/dist/units-converters.d.cts +370 -0
- package/dist/units-converters.d.mts +370 -0
- package/dist/units-converters.mjs +483 -0
- package/dist/units.d.cts +3056 -0
- package/dist/units.d.mts +3056 -0
- package/package.json +63 -54
- package/dist/functions-ho.d.cts +0 -124
- package/dist/functions-ho.d.mts +0 -124
- package/dist/si-units-converters.cjs +0 -2
- package/dist/si-units-converters.d.cts +0 -2
- package/dist/si-units-converters.d.mts +0 -2
- package/dist/si-units-converters.mjs +0 -1
- package/dist/si-units.d.cts +0 -38
- package/dist/si-units.d.mts +0 -38
package/README.md
CHANGED
|
@@ -6,7 +6,8 @@ Typesafe units with no runtime overhead.
|
|
|
6
6
|
|
|
7
7
|
[](https://www.npmjs.com/package/uom-types)
|
|
8
8
|
[](https://github.com/RebeccaStevens/uom-types/actions/workflows/release.yml)
|
|
9
|
-
[](https://codecov.io/gh/RebeccaStevens/uom-types)
|
|
9
|
+
[](https://codecov.io/gh/RebeccaStevens/uom-types)
|
|
10
|
+
[](https://RebeccaStevens.github.io/uom-types/stable/)\
|
|
10
11
|
[](https://github.com/prettier/prettier)
|
|
11
12
|
[](https://github.com/RebeccaStevens/uom-types/discussions)
|
|
12
13
|
[](https://opensource.org/licenses/BSD-3-Clause)
|
|
@@ -19,6 +20,13 @@ Typesafe units with no runtime overhead.
|
|
|
19
20
|
|
|
20
21
|
[Any donations would be much appreciated](./DONATIONS.md). 😄
|
|
21
22
|
|
|
23
|
+
### Enterprise Users
|
|
24
|
+
|
|
25
|
+
`uom-types` is available as part of the Tidelift Subscription.
|
|
26
|
+
|
|
27
|
+
Tidelift is working with the maintainers of `uom-types` and a growing network of open source maintainers to ensure your open source software supply chain meets enterprise standards now and into the future.
|
|
28
|
+
[Learn more.](https://tidelift.com/subscription/pkg/npm-uom-types?utm_source=npm-uom-types&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)
|
|
29
|
+
|
|
22
30
|
## Installation
|
|
23
31
|
|
|
24
32
|
```sh
|
|
@@ -32,6 +40,30 @@ pnpm add -D uom-types
|
|
|
32
40
|
yarn add -D uom-types
|
|
33
41
|
```
|
|
34
42
|
|
|
43
|
+
### Library Make Up
|
|
44
|
+
|
|
45
|
+
This library is split into several submodules.
|
|
46
|
+
|
|
47
|
+
- `uom-types`\
|
|
48
|
+
Defines the core types of this library. You'll only need to use if if you are defining your own custom types.
|
|
49
|
+
|
|
50
|
+
- `uom-types/functions`\
|
|
51
|
+
Defines runtime mathematical functions that are type-aware of this library's type.
|
|
52
|
+
|
|
53
|
+
- `uom-types/functions/higher-order`\
|
|
54
|
+
Defines runtime higher order mathematical functions that are type-aware of this library's type.
|
|
55
|
+
|
|
56
|
+
- `uom-types/units`\
|
|
57
|
+
Defines common types.\
|
|
58
|
+
Note: does not currently define any imperial types.
|
|
59
|
+
|
|
60
|
+
- `uom-types/units/converters`\
|
|
61
|
+
Defines runtime functions for converting between different units of the same `UnitClass`.
|
|
62
|
+
|
|
63
|
+
## Documentation
|
|
64
|
+
|
|
65
|
+
Check out [RebeccaStevens.github.io/uom-types](https://RebeccaStevens.github.io/uom-types/stable/) for the documentation.
|
|
66
|
+
|
|
35
67
|
## Inspiration
|
|
36
68
|
|
|
37
69
|
Inspired by [uom-ts](https://github.com/mindbrave/uom-ts).
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import { E as Exactify, i as UnitClass, j as Exponent, d as AbstractUnitFrom, e as UnitSubvalues, f as UnitMeta, g as UnknownUnitMeta, h as UnitFrom } from './_index.cjs';
|
|
2
|
+
|
|
3
|
+
type SiUnitKeys = "Second" | "Metre" | "Kilogram" | "Mole" | "Ampere" | "Candela" | "Kelvin" | "Radian";
|
|
4
|
+
/**
|
|
5
|
+
* The {@link UnitClass} that is the base of all {@link Unit}s defined by this library.
|
|
6
|
+
*
|
|
7
|
+
* @group Unit Classes
|
|
8
|
+
*/
|
|
9
|
+
type BaseUnitClass<T extends Exactify<SiUnitConfig, T>> = UnitClass<T>;
|
|
10
|
+
type SiUnitConfig = {
|
|
11
|
+
[K in SiUnitKeys]?: Exponent;
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* @group Unit Classes
|
|
16
|
+
* @category Angle (Plane)
|
|
17
|
+
*/
|
|
18
|
+
type PlaneAngleUnitClass = BaseUnitClass<{
|
|
19
|
+
Radian: 1;
|
|
20
|
+
}>;
|
|
21
|
+
/**
|
|
22
|
+
* @group Abstract Units
|
|
23
|
+
* @category Angle (Plane)
|
|
24
|
+
*/
|
|
25
|
+
type PlaneAngle = AbstractUnitFrom<PlaneAngleUnitClass>;
|
|
26
|
+
/**
|
|
27
|
+
* @group Unit Generators
|
|
28
|
+
* @category Angle (Plane)
|
|
29
|
+
*/
|
|
30
|
+
type PlaneAngleUnit<M extends UnitSubvalues> = PlaneAngleUnitFrom<UnitMeta<M>>;
|
|
31
|
+
/**
|
|
32
|
+
* @group Unit Generators
|
|
33
|
+
* @category Angle (Plane)
|
|
34
|
+
*/
|
|
35
|
+
type PlaneAngleUnitFrom<M extends UnknownUnitMeta> = UnitFrom<PlaneAngleUnitClass, M>;
|
|
36
|
+
/**
|
|
37
|
+
* A unit of {@link PlaneAngle}.
|
|
38
|
+
*
|
|
39
|
+
* One radian is equal to the angle subtended at the centre of a circle by an
|
|
40
|
+
* arc equal in length to the radius.
|
|
41
|
+
* The total plane angle about a point is 2π radian.
|
|
42
|
+
*
|
|
43
|
+
* @group Units
|
|
44
|
+
* @category Base
|
|
45
|
+
* @category Angle (Plane)
|
|
46
|
+
* @symbol `rad`
|
|
47
|
+
*/
|
|
48
|
+
type Radian = PlaneAngleUnit<{}>;
|
|
49
|
+
/**
|
|
50
|
+
* A unit of {@link PlaneAngle}.
|
|
51
|
+
*
|
|
52
|
+
* The total plane angle of a circle is 360 degrees.
|
|
53
|
+
*
|
|
54
|
+
* @group Units
|
|
55
|
+
* @category Angle (Plane)
|
|
56
|
+
* @symbol `°`
|
|
57
|
+
*/
|
|
58
|
+
type Degree = PlaneAngleUnit<{
|
|
59
|
+
scalar360: 1;
|
|
60
|
+
scalar2π: -1;
|
|
61
|
+
}>;
|
|
62
|
+
/**
|
|
63
|
+
* A unit of {@link PlaneAngle}.
|
|
64
|
+
*
|
|
65
|
+
* One gradian is equal to 100th of a right angle.
|
|
66
|
+
* The total plane angle about a point is 400 gradian.
|
|
67
|
+
*
|
|
68
|
+
* @group Units
|
|
69
|
+
* @category Angle (Plane)
|
|
70
|
+
* @symbol `gon`
|
|
71
|
+
*/
|
|
72
|
+
type Gradian = PlaneAngleUnit<{
|
|
73
|
+
scalar400: 1;
|
|
74
|
+
scalar2π: -1;
|
|
75
|
+
}>;
|
|
76
|
+
/**
|
|
77
|
+
* A unit of {@link PlaneAngle}.
|
|
78
|
+
*
|
|
79
|
+
* One turn is equal to 1 full rotation about a point.
|
|
80
|
+
*
|
|
81
|
+
* @group Units
|
|
82
|
+
* @category Angle (Plane)
|
|
83
|
+
* @symbol `tr`
|
|
84
|
+
*/
|
|
85
|
+
type Turn = PlaneAngleUnit<{
|
|
86
|
+
scalar2π: -1;
|
|
87
|
+
}>;
|
|
88
|
+
|
|
89
|
+
export { BaseUnitClass as B, Degree as D, Gradian as G, PlaneAngleUnitClass as P, Radian as R, Turn as T, PlaneAngle as a, PlaneAngleUnit as b, PlaneAngleUnitFrom as c };
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import { E as Exactify, i as UnitClass, j as Exponent, d as AbstractUnitFrom, e as UnitSubvalues, f as UnitMeta, g as UnknownUnitMeta, h as UnitFrom } from './_index.mjs';
|
|
2
|
+
|
|
3
|
+
type SiUnitKeys = "Second" | "Metre" | "Kilogram" | "Mole" | "Ampere" | "Candela" | "Kelvin" | "Radian";
|
|
4
|
+
/**
|
|
5
|
+
* The {@link UnitClass} that is the base of all {@link Unit}s defined by this library.
|
|
6
|
+
*
|
|
7
|
+
* @group Unit Classes
|
|
8
|
+
*/
|
|
9
|
+
type BaseUnitClass<T extends Exactify<SiUnitConfig, T>> = UnitClass<T>;
|
|
10
|
+
type SiUnitConfig = {
|
|
11
|
+
[K in SiUnitKeys]?: Exponent;
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* @group Unit Classes
|
|
16
|
+
* @category Angle (Plane)
|
|
17
|
+
*/
|
|
18
|
+
type PlaneAngleUnitClass = BaseUnitClass<{
|
|
19
|
+
Radian: 1;
|
|
20
|
+
}>;
|
|
21
|
+
/**
|
|
22
|
+
* @group Abstract Units
|
|
23
|
+
* @category Angle (Plane)
|
|
24
|
+
*/
|
|
25
|
+
type PlaneAngle = AbstractUnitFrom<PlaneAngleUnitClass>;
|
|
26
|
+
/**
|
|
27
|
+
* @group Unit Generators
|
|
28
|
+
* @category Angle (Plane)
|
|
29
|
+
*/
|
|
30
|
+
type PlaneAngleUnit<M extends UnitSubvalues> = PlaneAngleUnitFrom<UnitMeta<M>>;
|
|
31
|
+
/**
|
|
32
|
+
* @group Unit Generators
|
|
33
|
+
* @category Angle (Plane)
|
|
34
|
+
*/
|
|
35
|
+
type PlaneAngleUnitFrom<M extends UnknownUnitMeta> = UnitFrom<PlaneAngleUnitClass, M>;
|
|
36
|
+
/**
|
|
37
|
+
* A unit of {@link PlaneAngle}.
|
|
38
|
+
*
|
|
39
|
+
* One radian is equal to the angle subtended at the centre of a circle by an
|
|
40
|
+
* arc equal in length to the radius.
|
|
41
|
+
* The total plane angle about a point is 2π radian.
|
|
42
|
+
*
|
|
43
|
+
* @group Units
|
|
44
|
+
* @category Base
|
|
45
|
+
* @category Angle (Plane)
|
|
46
|
+
* @symbol `rad`
|
|
47
|
+
*/
|
|
48
|
+
type Radian = PlaneAngleUnit<{}>;
|
|
49
|
+
/**
|
|
50
|
+
* A unit of {@link PlaneAngle}.
|
|
51
|
+
*
|
|
52
|
+
* The total plane angle of a circle is 360 degrees.
|
|
53
|
+
*
|
|
54
|
+
* @group Units
|
|
55
|
+
* @category Angle (Plane)
|
|
56
|
+
* @symbol `°`
|
|
57
|
+
*/
|
|
58
|
+
type Degree = PlaneAngleUnit<{
|
|
59
|
+
scalar360: 1;
|
|
60
|
+
scalar2π: -1;
|
|
61
|
+
}>;
|
|
62
|
+
/**
|
|
63
|
+
* A unit of {@link PlaneAngle}.
|
|
64
|
+
*
|
|
65
|
+
* One gradian is equal to 100th of a right angle.
|
|
66
|
+
* The total plane angle about a point is 400 gradian.
|
|
67
|
+
*
|
|
68
|
+
* @group Units
|
|
69
|
+
* @category Angle (Plane)
|
|
70
|
+
* @symbol `gon`
|
|
71
|
+
*/
|
|
72
|
+
type Gradian = PlaneAngleUnit<{
|
|
73
|
+
scalar400: 1;
|
|
74
|
+
scalar2π: -1;
|
|
75
|
+
}>;
|
|
76
|
+
/**
|
|
77
|
+
* A unit of {@link PlaneAngle}.
|
|
78
|
+
*
|
|
79
|
+
* One turn is equal to 1 full rotation about a point.
|
|
80
|
+
*
|
|
81
|
+
* @group Units
|
|
82
|
+
* @category Angle (Plane)
|
|
83
|
+
* @symbol `tr`
|
|
84
|
+
*/
|
|
85
|
+
type Turn = PlaneAngleUnit<{
|
|
86
|
+
scalar2π: -1;
|
|
87
|
+
}>;
|
|
88
|
+
|
|
89
|
+
export { BaseUnitClass as B, Degree as D, Gradian as G, PlaneAngleUnitClass as P, Radian as R, Turn as T, PlaneAngle as a, PlaneAngleUnit as b, PlaneAngleUnitFrom as c };
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { d as AbstractUnitFrom, e as UnitSubvalues, f as UnitMeta, g as UnknownUnitMeta, h as UnitFrom } from './_index.cjs';
|
|
2
|
+
import { B as BaseUnitClass } from './_angle-plane.cjs';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* @group Unit Classes
|
|
6
|
+
*/
|
|
7
|
+
type IdentityUnitClass = BaseUnitClass<{}>;
|
|
8
|
+
/**
|
|
9
|
+
* @group Abstract Units
|
|
10
|
+
*/
|
|
11
|
+
type Identity = AbstractUnitFrom<IdentityUnitClass>;
|
|
12
|
+
/**
|
|
13
|
+
* @group Unit Generators
|
|
14
|
+
*/
|
|
15
|
+
type IdentityUnit<M extends UnitSubvalues> = IdentityUnitFrom<UnitMeta<M>>;
|
|
16
|
+
/**
|
|
17
|
+
* @group Unit Generators
|
|
18
|
+
*/
|
|
19
|
+
type IdentityUnitFrom<M extends UnknownUnitMeta> = UnitFrom<IdentityUnitClass, M>;
|
|
20
|
+
/**
|
|
21
|
+
* A {@link Unit} with no units.
|
|
22
|
+
*
|
|
23
|
+
* @group Units
|
|
24
|
+
* @category Base
|
|
25
|
+
* @symbol ``
|
|
26
|
+
*/
|
|
27
|
+
type Unitless = IdentityUnit<{}>;
|
|
28
|
+
|
|
29
|
+
export { IdentityUnitClass as I, Unitless as U, Identity as a, IdentityUnit as b, IdentityUnitFrom as c };
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { d as AbstractUnitFrom, e as UnitSubvalues, f as UnitMeta, g as UnknownUnitMeta, h as UnitFrom } from './_index.mjs';
|
|
2
|
+
import { B as BaseUnitClass } from './_angle-plane.mjs';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* @group Unit Classes
|
|
6
|
+
*/
|
|
7
|
+
type IdentityUnitClass = BaseUnitClass<{}>;
|
|
8
|
+
/**
|
|
9
|
+
* @group Abstract Units
|
|
10
|
+
*/
|
|
11
|
+
type Identity = AbstractUnitFrom<IdentityUnitClass>;
|
|
12
|
+
/**
|
|
13
|
+
* @group Unit Generators
|
|
14
|
+
*/
|
|
15
|
+
type IdentityUnit<M extends UnitSubvalues> = IdentityUnitFrom<UnitMeta<M>>;
|
|
16
|
+
/**
|
|
17
|
+
* @group Unit Generators
|
|
18
|
+
*/
|
|
19
|
+
type IdentityUnitFrom<M extends UnknownUnitMeta> = UnitFrom<IdentityUnitClass, M>;
|
|
20
|
+
/**
|
|
21
|
+
* A {@link Unit} with no units.
|
|
22
|
+
*
|
|
23
|
+
* @group Units
|
|
24
|
+
* @category Base
|
|
25
|
+
* @symbol ``
|
|
26
|
+
*/
|
|
27
|
+
type Unitless = IdentityUnit<{}>;
|
|
28
|
+
|
|
29
|
+
export { IdentityUnitClass as I, Unitless as U, Identity as a, IdentityUnit as b, IdentityUnitFrom as c };
|
|
@@ -0,0 +1,235 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file Autogenerated File - Don't manually edit.
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* All the supported exponent values.
|
|
6
|
+
*
|
|
7
|
+
* @group Unit Components
|
|
8
|
+
*/
|
|
9
|
+
type Exponent = 0 | 1 | -1 | 2 | -2 | 3 | -3 | 4 | -4 | 5 | -5 | 6 | -6 | 7 | -7 | 8 | -8 | 9 | -9 | 10 | -10 | 11 | -11 | 12 | -12;
|
|
10
|
+
/**
|
|
11
|
+
* @group Exponent Functions
|
|
12
|
+
*/
|
|
13
|
+
type NegativeExponent<T extends Exponent> = T extends 0 ? 0 : T extends 1 ? -1 : T extends -1 ? 1 : T extends 2 ? -2 : T extends -2 ? 2 : T extends 3 ? -3 : T extends -3 ? 3 : T extends 4 ? -4 : T extends -4 ? 4 : T extends 5 ? -5 : T extends -5 ? 5 : T extends 6 ? -6 : T extends -6 ? 6 : T extends 7 ? -7 : T extends -7 ? 7 : T extends 8 ? -8 : T extends -8 ? 8 : T extends 9 ? -9 : T extends -9 ? 9 : T extends 10 ? -10 : T extends -10 ? 10 : T extends 11 ? -11 : T extends -11 ? 11 : T extends 12 ? -12 : T extends -12 ? 12 : never;
|
|
14
|
+
/**
|
|
15
|
+
* @group Exponent Functions
|
|
16
|
+
*/
|
|
17
|
+
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;
|
|
18
|
+
/**
|
|
19
|
+
* @group Exponent Functions
|
|
20
|
+
*/
|
|
21
|
+
type SubExponents<A extends Exponent, B extends Exponent> = SumExponents<A, NegativeExponent<B>>;
|
|
22
|
+
/**
|
|
23
|
+
* @group Exponent Functions
|
|
24
|
+
*/
|
|
25
|
+
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;
|
|
26
|
+
/**
|
|
27
|
+
* @group Exponent Functions
|
|
28
|
+
*/
|
|
29
|
+
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;
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* Remove all key from the object that are `never`.
|
|
33
|
+
*/
|
|
34
|
+
type RemoveNeverValues<T extends object> = {
|
|
35
|
+
[K in keyof T as [T[K]] extends [never] ? never : K]: T[K];
|
|
36
|
+
};
|
|
37
|
+
/**
|
|
38
|
+
* Exclude all unit subvalues with an exponent value of zero.
|
|
39
|
+
*/
|
|
40
|
+
type ExcludeUnitZeroSubvalues<U extends UnitSubvalues> = {
|
|
41
|
+
[S in keyof U as S extends string ? U[S] extends 0 ? never : S : never]: U[S];
|
|
42
|
+
};
|
|
43
|
+
/**
|
|
44
|
+
* Get the exponent value of the given key.
|
|
45
|
+
*/
|
|
46
|
+
type GetExponent<C extends UnitSubvalues, S> = S extends keyof C ? C[S] : 0;
|
|
47
|
+
/**
|
|
48
|
+
* Flatten a complex type such as a union or intersection of objects into a
|
|
49
|
+
* single object.
|
|
50
|
+
*
|
|
51
|
+
* @internal
|
|
52
|
+
*/
|
|
53
|
+
type FlatternAlias<T> = {
|
|
54
|
+
[P in keyof T]: T[P];
|
|
55
|
+
} & {};
|
|
56
|
+
/**
|
|
57
|
+
* Make `T` exactly `T`.
|
|
58
|
+
*
|
|
59
|
+
* @internal
|
|
60
|
+
*/
|
|
61
|
+
type Exactify<T, U extends T> = T & {
|
|
62
|
+
[K in keyof U]: K extends keyof T ? U[K] : never;
|
|
63
|
+
};
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* A unit without any meta data.
|
|
67
|
+
*
|
|
68
|
+
* @group Abstract Unit Generators
|
|
69
|
+
*/
|
|
70
|
+
type AbstractUnit<C extends UnitSubvalues> = number & {
|
|
71
|
+
readonly __uom_types__unit_class: UnitClass<C>;
|
|
72
|
+
};
|
|
73
|
+
/**
|
|
74
|
+
* Create a unit without meta data from an already existing {@link UnitClass}.
|
|
75
|
+
*
|
|
76
|
+
* @group Abstract Unit Generators
|
|
77
|
+
*/
|
|
78
|
+
type AbstractUnitFrom<C extends UnknownUnitClass> = C extends UnitClass<infer A> ? AbstractUnit<UnitSubvalues extends A ? {} : A> : never;
|
|
79
|
+
/**
|
|
80
|
+
* The core unit type.
|
|
81
|
+
*
|
|
82
|
+
* @group Unit Generators
|
|
83
|
+
*/
|
|
84
|
+
type Unit<C extends UnitSubvalues, M extends UnitSubvalues = {}> = number & {
|
|
85
|
+
readonly __uom_types__unit_class: UnitClass<C>;
|
|
86
|
+
readonly __uom_types__unit_meta: UnitMeta<M>;
|
|
87
|
+
};
|
|
88
|
+
/**
|
|
89
|
+
* Create a {@link Unit} from already existing {@link UnitClass} and {@link UnitMeta}.
|
|
90
|
+
*
|
|
91
|
+
* @group Unit Generators
|
|
92
|
+
*/
|
|
93
|
+
type UnitFrom<C extends UnknownUnitClass, M extends UnknownUnitMeta = UnitMeta<{}>> = C extends UnitClass<infer A> ? M extends UnitMeta<infer B> ? Unit<UnitSubvalues extends A ? {} : A, UnitSubvalues extends B ? {} : B> : never : never;
|
|
94
|
+
/**
|
|
95
|
+
* A {@link Unit} without any {@link UnitClass}.
|
|
96
|
+
*
|
|
97
|
+
* Used to convert from one {@link Unit} to another of the same {@link UnitClass}.
|
|
98
|
+
*
|
|
99
|
+
* @group Unit Generators
|
|
100
|
+
*/
|
|
101
|
+
type UnitConversionRate<M extends UnitSubvalues> = Unit<{}, M>;
|
|
102
|
+
/**
|
|
103
|
+
* Create a {@link UnitConversionRate} from already existing {@link UnitMeta}.
|
|
104
|
+
*
|
|
105
|
+
* @group Unit Generators
|
|
106
|
+
*/
|
|
107
|
+
type UnitConversionRateFrom<M extends UnknownUnitMeta> = M extends UnitMeta<infer A> ? UnitConversionRate<UnitSubvalues extends A ? {} : A> : never;
|
|
108
|
+
/**
|
|
109
|
+
* Used to determine what a unit is of. For example, length, volume, mass etc.
|
|
110
|
+
*
|
|
111
|
+
* @group Unit Components
|
|
112
|
+
*/
|
|
113
|
+
type UnitClass<T extends UnitSubvalues> = UnitKeyValues<T> & {
|
|
114
|
+
readonly __uno_types__unit_class_type: true;
|
|
115
|
+
};
|
|
116
|
+
/**
|
|
117
|
+
* Used to state how units of the same {@link UnitClass} differ from one another.
|
|
118
|
+
* For example, by a scale factor.
|
|
119
|
+
*
|
|
120
|
+
* @group Unit Components
|
|
121
|
+
*/
|
|
122
|
+
type UnitMeta<T extends UnitSubvalues> = UnitKeyValues<T> & {
|
|
123
|
+
readonly __uno_types__unit_meta_type: true;
|
|
124
|
+
};
|
|
125
|
+
/**
|
|
126
|
+
* A {@link Unit} that we don't know anything about.
|
|
127
|
+
*
|
|
128
|
+
* @group Unknown Units
|
|
129
|
+
*/
|
|
130
|
+
type UnknownUnit = UnknownAbstractUnit & {
|
|
131
|
+
readonly __uom_types__unit_meta: UnknownUnitMeta;
|
|
132
|
+
};
|
|
133
|
+
/**
|
|
134
|
+
* An {@link AbstractUnit} that we don't know anything about.
|
|
135
|
+
*
|
|
136
|
+
* @group Unknown Units
|
|
137
|
+
*/
|
|
138
|
+
type UnknownAbstractUnit = number & {
|
|
139
|
+
readonly __uom_types__unit_class: UnknownUnitClass;
|
|
140
|
+
};
|
|
141
|
+
/**
|
|
142
|
+
* A {@link UnitClass} that we don't know anything about.
|
|
143
|
+
*
|
|
144
|
+
* @group Unknown Units
|
|
145
|
+
*/
|
|
146
|
+
type UnknownUnitClass = UnknownUnitKeyValues & {
|
|
147
|
+
readonly __uno_types__unit_class_type: true;
|
|
148
|
+
};
|
|
149
|
+
/**
|
|
150
|
+
* A {@link UnitMeta} that we don't know anything about.
|
|
151
|
+
*
|
|
152
|
+
* @group Unknown Units
|
|
153
|
+
*/
|
|
154
|
+
type UnknownUnitMeta = UnknownUnitKeyValues & {
|
|
155
|
+
readonly __uno_types__unit_meta_type: true;
|
|
156
|
+
};
|
|
157
|
+
type UnitKeyValues<T extends UnitSubvalues> = {
|
|
158
|
+
readonly __uom_types__keys: keyof ExcludeUnitZeroSubvalues<T> extends string ? keyof ExcludeUnitZeroSubvalues<T> : never;
|
|
159
|
+
readonly __uom_types__value: RemoveNeverValues<T>;
|
|
160
|
+
};
|
|
161
|
+
type UnknownUnitKeyValues = {
|
|
162
|
+
readonly __uom_types__keys: string;
|
|
163
|
+
readonly __uom_types__value: {};
|
|
164
|
+
};
|
|
165
|
+
/**
|
|
166
|
+
* A mapping of subvalue of a unit its magnitude.
|
|
167
|
+
*
|
|
168
|
+
* @group Unit Components
|
|
169
|
+
*/
|
|
170
|
+
type UnitSubvalues = Record<string, Exponent>;
|
|
171
|
+
|
|
172
|
+
/**
|
|
173
|
+
* Multiple the exponent values of a unit by a number.
|
|
174
|
+
*
|
|
175
|
+
* @group Unit Functions
|
|
176
|
+
*/
|
|
177
|
+
type MultiplyUnitExponents<T extends number, E extends Exponent> = T extends Unit<infer Config, infer Meta> ? Unit<FlatternAlias<MultiplyUnitSubvaluesExponents<Config, E>>, FlatternAlias<MultiplyUnitSubvaluesExponents<Meta, E>>> : number;
|
|
178
|
+
type MultiplyUnitSubvaluesExponents<T extends UnitSubvalues, E extends Exponent> = {
|
|
179
|
+
[S in keyof T]: MultiplyExponents<GetExponent<T, S>, E>;
|
|
180
|
+
};
|
|
181
|
+
/**
|
|
182
|
+
* Divide the exponent values of a unit by a number.
|
|
183
|
+
*
|
|
184
|
+
* @group Unit Functions
|
|
185
|
+
*/
|
|
186
|
+
type DivideUnitExponents<T extends number, E extends Exponent> = T extends Unit<infer Config, infer Meta> ? Unit<FlatternAlias<DivideUnitSubvaluesExponents<Config, E>>, FlatternAlias<DivideUnitSubvaluesExponents<Meta, E>>> : number;
|
|
187
|
+
type DivideUnitSubvaluesExponents<T extends UnitSubvalues, E extends Exponent> = {
|
|
188
|
+
[S in keyof T]: DivideExponents<GetExponent<T, S>, E>;
|
|
189
|
+
};
|
|
190
|
+
|
|
191
|
+
/**
|
|
192
|
+
* Take the inverse of a unit.
|
|
193
|
+
*
|
|
194
|
+
* @group Unit Functions
|
|
195
|
+
* @returns `1/X`.
|
|
196
|
+
*/
|
|
197
|
+
type Inverse<X extends number> = X extends Unit<infer Config, infer Meta> ? Unit<FlatternAlias<InverseUnitSubvalues<Config>>, FlatternAlias<InverseUnitSubvalues<Meta>>> : X extends AbstractUnit<infer Config> ? AbstractUnit<FlatternAlias<InverseUnitSubvalues<Config>>> : number;
|
|
198
|
+
/**
|
|
199
|
+
* Inverses each of the subvalues.
|
|
200
|
+
*
|
|
201
|
+
* @group Unit Subvalue Functions
|
|
202
|
+
*/
|
|
203
|
+
type InverseUnitSubvalues<T extends UnitSubvalues> = {
|
|
204
|
+
[E in keyof T]: NegativeExponent<T[E]>;
|
|
205
|
+
};
|
|
206
|
+
/**
|
|
207
|
+
* Multiply a unit by another unit.
|
|
208
|
+
*
|
|
209
|
+
* @group Unit Functions
|
|
210
|
+
* @returns `A⋅B`
|
|
211
|
+
*/
|
|
212
|
+
type Multiply<A extends number, B extends number> = A extends Unit<infer AConfig, infer AMeta> ? B extends Unit<infer BConfig, infer BMeta> ? Unit<FlatternAlias<MultiplyUnitSubvalues<AConfig, BConfig>>, FlatternAlias<MultiplyUnitSubvalues<AMeta, BMeta>>> : B extends UnknownAbstractUnit ? never : A : B extends UnknownUnit ? A extends UnknownAbstractUnit ? never : B : A extends AbstractUnit<infer AConfig> ? B extends AbstractUnit<infer BConfig> ? AbstractUnit<FlatternAlias<MultiplyUnitSubvalues<AConfig, BConfig>>> : A : B extends UnknownAbstractUnit ? B : number;
|
|
213
|
+
/**
|
|
214
|
+
* Multiply each of the subvalues from a unit with the corresponding once from another unit.
|
|
215
|
+
*
|
|
216
|
+
* @group Unit Subvalue Functions
|
|
217
|
+
*/
|
|
218
|
+
type MultiplyUnitSubvalues<A extends UnitSubvalues, B extends UnitSubvalues> = ExcludeUnitZeroSubvalues<{
|
|
219
|
+
[S in keyof A | keyof B]: SumExponents<GetExponent<A, S>, GetExponent<B, S>>;
|
|
220
|
+
}>;
|
|
221
|
+
/**
|
|
222
|
+
* Divide a unit by another unit.
|
|
223
|
+
*
|
|
224
|
+
* @group Unit Functions
|
|
225
|
+
* @returns `A/B`
|
|
226
|
+
*/
|
|
227
|
+
type Divide<A extends number, B extends number> = Multiply<A, Inverse<B>>;
|
|
228
|
+
/**
|
|
229
|
+
* Divide each of the subvalues from a unit with the corresponding once from another unit.
|
|
230
|
+
*
|
|
231
|
+
* @group Unit Subvalue Functions
|
|
232
|
+
*/
|
|
233
|
+
type DivideUnitSubvalues<A extends UnitSubvalues, B extends UnitSubvalues> = MultiplyUnitSubvalues<A, InverseUnitSubvalues<B>>;
|
|
234
|
+
|
|
235
|
+
export { AbstractUnit as A, Divide as D, Exactify as E, Inverse as I, Multiply as M, NegativeExponent as N, SubExponents as S, UnknownUnit as U, Unit as a, UnknownAbstractUnit as b, DivideUnitExponents as c, AbstractUnitFrom as d, UnitSubvalues as e, UnitMeta as f, UnknownUnitMeta as g, UnitFrom as h, UnitClass as i, Exponent as j, UnitConversionRate as k, MultiplyUnitExponents as l, UnknownUnitClass as m, InverseUnitSubvalues as n, UnitConversionRateFrom as o, DivideExponents as p, MultiplyExponents as q, SumExponents as r, DivideUnitSubvalues as s, MultiplyUnitSubvalues as t };
|