uom-types 1.0.2 → 2.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/dist/functions-ho.cjs +1 -1
- package/dist/functions-ho.d.cts +4 -4
- package/dist/functions-ho.d.mts +4 -4
- package/dist/functions-ho.mjs +1 -1
- package/dist/functions.cjs +0 -7
- package/dist/functions.d.cts +5 -9
- package/dist/functions.d.mts +5 -9
- package/dist/functions.mjs +1 -7
- package/dist/index.d.cts +44 -29
- package/dist/index.d.mts +44 -29
- package/dist/si-units.d.cts +1 -1
- package/dist/si-units.d.mts +1 -1
- package/package.json +6 -10
package/dist/functions-ho.cjs
CHANGED
package/dist/functions-ho.d.cts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { Multiply, Divide, UnknownUnit, Inverse } from '
|
|
2
|
-
import { Decimal } from '
|
|
1
|
+
import { Multiply, Divide, UnknownUnit, Inverse, DivideUnitExponents } from './index.cjs';
|
|
2
|
+
import { Decimal } from './si-units.cjs';
|
|
3
3
|
|
|
4
4
|
type OperationIO<T extends number> = T extends UnknownUnit ? T : number;
|
|
5
5
|
/**
|
|
@@ -26,11 +26,11 @@ declare function mod<T extends number>(a: OperationIO<T>): (b: OperationIO<T>) =
|
|
|
26
26
|
* Perform mathematic modular arithmetic.
|
|
27
27
|
*/
|
|
28
28
|
declare function modSafe<T extends number>(a: OperationIO<T>): (b: OperationIO<T>) => OperationIO<T>;
|
|
29
|
-
type PowFunction<E extends number, B extends number> = E extends -1 ? (b: OperationIO<B>) => OperationIO<Inverse<B>> : E extends 0 ? (b: OperationIO<B>) => Decimal
|
|
29
|
+
type PowFunction<E extends number, B extends number> = E extends UnknownUnit ? never : E extends -1 ? (b: OperationIO<B>) => OperationIO<Inverse<B>> : E extends 0 ? (b: OperationIO<B>) => OperationIO<B> extends UnknownUnit ? Decimal : 1 : E extends 0.5 ? (b: OperationIO<B>) => OperationIO<DivideUnitExponents<B, 2>> : E extends 1 ? (b: OperationIO<B>) => OperationIO<B> : E extends 2 ? (b: OperationIO<B>) => OperationIO<Multiply<B, B>> : E extends 3 ? (b: OperationIO<B>) => OperationIO<Multiply<B, Multiply<B, B>>> : E extends 4 ? (b: OperationIO<B>) => OperationIO<Multiply<B, Multiply<B, Multiply<B, B>>>> : (b: OperationIO<B>) => OperationIO<number>;
|
|
30
30
|
/**
|
|
31
31
|
* Put a number to the power of the given value.
|
|
32
32
|
*/
|
|
33
|
-
declare function pow<E extends number
|
|
33
|
+
declare function pow<E extends number>(exponent: E): <B extends number>(base: Parameters<PowFunction<E, B>>[0]) => ReturnType<PowFunction<E, B>>;
|
|
34
34
|
/**
|
|
35
35
|
* Equal: Compare if a value is equal to the given value.
|
|
36
36
|
*/
|
package/dist/functions-ho.d.mts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { Multiply, Divide, UnknownUnit, Inverse } from '
|
|
2
|
-
import { Decimal } from '
|
|
1
|
+
import { Multiply, Divide, UnknownUnit, Inverse, DivideUnitExponents } from './index.mjs';
|
|
2
|
+
import { Decimal } from './si-units.mjs';
|
|
3
3
|
|
|
4
4
|
type OperationIO<T extends number> = T extends UnknownUnit ? T : number;
|
|
5
5
|
/**
|
|
@@ -26,11 +26,11 @@ declare function mod<T extends number>(a: OperationIO<T>): (b: OperationIO<T>) =
|
|
|
26
26
|
* Perform mathematic modular arithmetic.
|
|
27
27
|
*/
|
|
28
28
|
declare function modSafe<T extends number>(a: OperationIO<T>): (b: OperationIO<T>) => OperationIO<T>;
|
|
29
|
-
type PowFunction<E extends number, B extends number> = E extends -1 ? (b: OperationIO<B>) => OperationIO<Inverse<B>> : E extends 0 ? (b: OperationIO<B>) => Decimal
|
|
29
|
+
type PowFunction<E extends number, B extends number> = E extends UnknownUnit ? never : E extends -1 ? (b: OperationIO<B>) => OperationIO<Inverse<B>> : E extends 0 ? (b: OperationIO<B>) => OperationIO<B> extends UnknownUnit ? Decimal : 1 : E extends 0.5 ? (b: OperationIO<B>) => OperationIO<DivideUnitExponents<B, 2>> : E extends 1 ? (b: OperationIO<B>) => OperationIO<B> : E extends 2 ? (b: OperationIO<B>) => OperationIO<Multiply<B, B>> : E extends 3 ? (b: OperationIO<B>) => OperationIO<Multiply<B, Multiply<B, B>>> : E extends 4 ? (b: OperationIO<B>) => OperationIO<Multiply<B, Multiply<B, Multiply<B, B>>>> : (b: OperationIO<B>) => OperationIO<number>;
|
|
30
30
|
/**
|
|
31
31
|
* Put a number to the power of the given value.
|
|
32
32
|
*/
|
|
33
|
-
declare function pow<E extends number
|
|
33
|
+
declare function pow<E extends number>(exponent: E): <B extends number>(base: Parameters<PowFunction<E, B>>[0]) => ReturnType<PowFunction<E, B>>;
|
|
34
34
|
/**
|
|
35
35
|
* Equal: Compare if a value is equal to the given value.
|
|
36
36
|
*/
|
package/dist/functions-ho.mjs
CHANGED
package/dist/functions.cjs
CHANGED
|
@@ -107,12 +107,6 @@ function min(values) {
|
|
|
107
107
|
function sum(values) {
|
|
108
108
|
return values.reduce((add), 0);
|
|
109
109
|
}
|
|
110
|
-
/**
|
|
111
|
-
* Takes the product of all the values in the given collection.
|
|
112
|
-
*/
|
|
113
|
-
function product(values) {
|
|
114
|
-
return values.reduce((mul), 1);
|
|
115
|
-
}
|
|
116
110
|
/**
|
|
117
111
|
* Equal: Compare if two values are equal.
|
|
118
112
|
*/
|
|
@@ -162,7 +156,6 @@ exports.modSafe = modSafe;
|
|
|
162
156
|
exports.mul = mul;
|
|
163
157
|
exports.negate = negate;
|
|
164
158
|
exports.pow = pow;
|
|
165
|
-
exports.product = product;
|
|
166
159
|
exports.round = round;
|
|
167
160
|
exports.sqrt = sqrt;
|
|
168
161
|
exports.sub = sub;
|
package/dist/functions.d.cts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { Multiply, Divide, Inverse, UnknownUnit } from '
|
|
2
|
-
import { Decimal } from '
|
|
1
|
+
import { Multiply, Divide, Inverse, UnknownUnit, DivideUnitExponents } from './index.cjs';
|
|
2
|
+
import { Decimal } from './si-units.cjs';
|
|
3
3
|
|
|
4
4
|
type OperationIO<T extends number> = T extends UnknownUnit ? T : number;
|
|
5
5
|
/**
|
|
@@ -45,7 +45,7 @@ declare function pow<B extends number>(base: OperationIO<B>, exponent: 0): Opera
|
|
|
45
45
|
/**
|
|
46
46
|
* Put a number to the power of 1/2.
|
|
47
47
|
*/
|
|
48
|
-
declare function pow<B extends number>(base: OperationIO<B>, exponent: 0.5): OperationIO<
|
|
48
|
+
declare function pow<B extends number>(base: OperationIO<B>, exponent: 0.5): OperationIO<DivideUnitExponents<B, 2>>;
|
|
49
49
|
/**
|
|
50
50
|
* Put a number to the power of 1.
|
|
51
51
|
*/
|
|
@@ -69,7 +69,7 @@ declare function pow<B extends number, E extends number>(base: OperationIO<B>, e
|
|
|
69
69
|
/**
|
|
70
70
|
* Take the square root of the given value.
|
|
71
71
|
*/
|
|
72
|
-
declare function sqrt<T extends number>(value: OperationIO<T>): OperationIO<
|
|
72
|
+
declare function sqrt<T extends number>(value: OperationIO<T>): OperationIO<DivideUnitExponents<T, 2>>;
|
|
73
73
|
/**
|
|
74
74
|
* Inverse the given value.
|
|
75
75
|
*/
|
|
@@ -106,10 +106,6 @@ declare function min<T extends number>(values: Iterable<T>): OperationIO<T>;
|
|
|
106
106
|
* Takes the sum of all the values in the given collection.
|
|
107
107
|
*/
|
|
108
108
|
declare function sum<T extends number>(values: ReadonlyArray<T>): OperationIO<T>;
|
|
109
|
-
/**
|
|
110
|
-
* Takes the product of all the values in the given collection.
|
|
111
|
-
*/
|
|
112
|
-
declare function product<T extends number>(values: ReadonlyArray<T>): OperationIO<T>;
|
|
113
109
|
/**
|
|
114
110
|
* Equal: Compare if two values are equal.
|
|
115
111
|
*/
|
|
@@ -131,4 +127,4 @@ declare function lt<A extends number>(a: OperationIO<A>, b: A): boolean;
|
|
|
131
127
|
*/
|
|
132
128
|
declare function lte<A extends number>(a: OperationIO<A>, b: A): boolean;
|
|
133
129
|
|
|
134
|
-
export { abs, add, ceil, div, eq, floor, gt, gte, inverse, lt, lte, max, min, mod, modSafe, mul, negate, pow,
|
|
130
|
+
export { abs, add, ceil, div, eq, floor, gt, gte, inverse, lt, lte, max, min, mod, modSafe, mul, negate, pow, round, sqrt, sub, sum };
|
package/dist/functions.d.mts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { Multiply, Divide, Inverse, UnknownUnit } from '
|
|
2
|
-
import { Decimal } from '
|
|
1
|
+
import { Multiply, Divide, Inverse, UnknownUnit, DivideUnitExponents } from './index.mjs';
|
|
2
|
+
import { Decimal } from './si-units.mjs';
|
|
3
3
|
|
|
4
4
|
type OperationIO<T extends number> = T extends UnknownUnit ? T : number;
|
|
5
5
|
/**
|
|
@@ -45,7 +45,7 @@ declare function pow<B extends number>(base: OperationIO<B>, exponent: 0): Opera
|
|
|
45
45
|
/**
|
|
46
46
|
* Put a number to the power of 1/2.
|
|
47
47
|
*/
|
|
48
|
-
declare function pow<B extends number>(base: OperationIO<B>, exponent: 0.5): OperationIO<
|
|
48
|
+
declare function pow<B extends number>(base: OperationIO<B>, exponent: 0.5): OperationIO<DivideUnitExponents<B, 2>>;
|
|
49
49
|
/**
|
|
50
50
|
* Put a number to the power of 1.
|
|
51
51
|
*/
|
|
@@ -69,7 +69,7 @@ declare function pow<B extends number, E extends number>(base: OperationIO<B>, e
|
|
|
69
69
|
/**
|
|
70
70
|
* Take the square root of the given value.
|
|
71
71
|
*/
|
|
72
|
-
declare function sqrt<T extends number>(value: OperationIO<T>): OperationIO<
|
|
72
|
+
declare function sqrt<T extends number>(value: OperationIO<T>): OperationIO<DivideUnitExponents<T, 2>>;
|
|
73
73
|
/**
|
|
74
74
|
* Inverse the given value.
|
|
75
75
|
*/
|
|
@@ -106,10 +106,6 @@ declare function min<T extends number>(values: Iterable<T>): OperationIO<T>;
|
|
|
106
106
|
* Takes the sum of all the values in the given collection.
|
|
107
107
|
*/
|
|
108
108
|
declare function sum<T extends number>(values: ReadonlyArray<T>): OperationIO<T>;
|
|
109
|
-
/**
|
|
110
|
-
* Takes the product of all the values in the given collection.
|
|
111
|
-
*/
|
|
112
|
-
declare function product<T extends number>(values: ReadonlyArray<T>): OperationIO<T>;
|
|
113
109
|
/**
|
|
114
110
|
* Equal: Compare if two values are equal.
|
|
115
111
|
*/
|
|
@@ -131,4 +127,4 @@ declare function lt<A extends number>(a: OperationIO<A>, b: A): boolean;
|
|
|
131
127
|
*/
|
|
132
128
|
declare function lte<A extends number>(a: OperationIO<A>, b: A): boolean;
|
|
133
129
|
|
|
134
|
-
export { abs, add, ceil, div, eq, floor, gt, gte, inverse, lt, lte, max, min, mod, modSafe, mul, negate, pow,
|
|
130
|
+
export { abs, add, ceil, div, eq, floor, gt, gte, inverse, lt, lte, max, min, mod, modSafe, mul, negate, pow, round, sqrt, sub, sum };
|
package/dist/functions.mjs
CHANGED
|
@@ -105,12 +105,6 @@ function min(values) {
|
|
|
105
105
|
function sum(values) {
|
|
106
106
|
return values.reduce((add), 0);
|
|
107
107
|
}
|
|
108
|
-
/**
|
|
109
|
-
* Takes the product of all the values in the given collection.
|
|
110
|
-
*/
|
|
111
|
-
function product(values) {
|
|
112
|
-
return values.reduce((mul), 1);
|
|
113
|
-
}
|
|
114
108
|
/**
|
|
115
109
|
* Equal: Compare if two values are equal.
|
|
116
110
|
*/
|
|
@@ -142,4 +136,4 @@ function lte(a, b) {
|
|
|
142
136
|
return a <= b;
|
|
143
137
|
}
|
|
144
138
|
|
|
145
|
-
export { abs, add, ceil, div, eq, floor, gt, gte, inverse, lt, lte, max, min, mod, modSafe, mul, negate, pow,
|
|
139
|
+
export { abs, add, ceil, div, eq, floor, gt, gte, inverse, lt, lte, max, min, mod, modSafe, mul, negate, pow, round, sqrt, sub, sum };
|
package/dist/index.d.cts
CHANGED
|
@@ -1,47 +1,36 @@
|
|
|
1
|
+
type Exponent = -6 | -5 | -4 | -3 | -2 | -1 | 0 | 1 | 2 | 3 | 4 | 5 | 6;
|
|
2
|
+
type NegativeExponent<T extends Exponent> = T extends -6 ? 6 : T extends -5 ? 5 : T extends -4 ? 4 : T extends -3 ? 3 : T extends -2 ? 2 : T extends -1 ? 1 : T extends 0 ? 0 : T extends 1 ? -1 : T extends 2 ? -2 : T extends 3 ? -3 : T extends 4 ? -4 : T extends 5 ? -5 : T extends 6 ? -6 : never;
|
|
3
|
+
type SumExponents<A extends Exponent, B extends Exponent> = A extends -6 ? B extends 0 ? A : B extends 1 ? -5 : B extends 2 ? -4 : B extends 3 ? -3 : B extends 4 ? -2 : B extends 5 ? -1 : B extends 6 ? 0 : never : A extends -5 ? B extends -1 ? -6 : B extends 0 ? A : B extends 1 ? -4 : B extends 2 ? -3 : B extends 3 ? -2 : B extends 4 ? -1 : B extends 5 ? 0 : B extends 6 ? 1 : never : A extends -4 ? B extends -2 ? -6 : B extends -1 ? -5 : B extends 0 ? A : B extends 1 ? -3 : B extends 2 ? -2 : B extends 3 ? -1 : B extends 4 ? 0 : B extends 5 ? 1 : B extends 6 ? 2 : never : A extends -3 ? B extends -3 ? -6 : B extends -2 ? -5 : B extends -1 ? -4 : B extends 0 ? A : B extends 1 ? -2 : B extends 2 ? -1 : B extends 3 ? 0 : B extends 4 ? 1 : B extends 5 ? 2 : B extends 6 ? 3 : never : A extends -2 ? B extends -4 ? -6 : B extends -3 ? -5 : B extends -2 ? -4 : B extends -1 ? -3 : B extends 0 ? A : B extends 1 ? -1 : B extends 2 ? 0 : B extends 3 ? 1 : B extends 4 ? 2 : B extends 5 ? 3 : B extends 6 ? 4 : never : A extends -1 ? B extends -5 ? -6 : B extends -4 ? -5 : B extends -3 ? -4 : B extends -2 ? -3 : B extends -1 ? -2 : B extends 0 ? A : B extends 1 ? 0 : B extends 2 ? 1 : B extends 3 ? 2 : B extends 4 ? 3 : B extends 5 ? 4 : B extends 6 ? 5 : never : A extends 0 ? B : A extends 1 ? B extends -6 ? -5 : B extends -5 ? -4 : B extends -4 ? -3 : B extends -3 ? -2 : B extends -2 ? -1 : B extends -1 ? 0 : B extends 0 ? A : B extends 1 ? 2 : B extends 2 ? 3 : B extends 3 ? 4 : B extends 4 ? 5 : B extends 5 ? 6 : never : A extends 2 ? B extends -6 ? -4 : B extends -5 ? -3 : B extends -4 ? -2 : B extends -3 ? -1 : B extends -2 ? 0 : B extends -1 ? 1 : B extends 0 ? A : B extends 1 ? 3 : B extends 2 ? 4 : B extends 3 ? 5 : B extends 4 ? 6 : never : A extends 3 ? B extends -6 ? -3 : B extends -5 ? -2 : B extends -4 ? -1 : B extends -3 ? 0 : B extends -2 ? 1 : B extends -1 ? 2 : B extends 0 ? A : B extends 1 ? 4 : B extends 2 ? 5 : B extends 3 ? 6 : never : A extends 4 ? B extends -6 ? -2 : B extends -5 ? -1 : B extends -4 ? 0 : B extends -3 ? 1 : B extends -2 ? 2 : B extends -1 ? 3 : B extends 0 ? A : B extends 1 ? 5 : B extends 2 ? 6 : never : A extends 5 ? B extends -6 ? -1 : B extends -5 ? 0 : B extends -4 ? 1 : B extends -3 ? 2 : B extends -2 ? 3 : B extends -1 ? 4 : B extends 0 ? A : B extends 1 ? 6 : never : A extends 6 ? B extends -6 ? 0 : B extends -5 ? 1 : B extends -4 ? 2 : B extends -3 ? 3 : B extends -2 ? 4 : B extends -1 ? 5 : B extends 0 ? A : never : never;
|
|
4
|
+
type SubExponents<A extends Exponent, B extends Exponent> = SumExponents<A, NegativeExponent<B>>;
|
|
5
|
+
type MultiplyExponents<A extends Exponent, B extends 2> = B extends 2 ? A extends -3 ? -6 : A extends -2 ? -4 : A extends -1 ? -2 : A extends 0 ? 0 : A extends 1 ? 2 : A extends 2 ? 4 : A extends 3 ? 6 : never : never;
|
|
6
|
+
type DivideExponents<A extends Exponent, B extends 2> = B extends 2 ? A extends -6 ? -3 : A extends -4 ? -2 : A extends -2 ? -1 : A extends 0 ? 0 : A extends 2 ? 1 : A extends 4 ? 2 : A extends 6 ? 3 : never : never;
|
|
7
|
+
|
|
1
8
|
type BrandUnit<T extends Record<string, UnitValue>> = {
|
|
2
|
-
__exactKeys: keyof
|
|
3
|
-
__uom_types:
|
|
4
|
-
[U in keyof T]: U extends keyof
|
|
9
|
+
__exactKeys: keyof ExcludeNullUnits<T>;
|
|
10
|
+
__uom_types: RemoveNeverValues<{
|
|
11
|
+
[U in keyof T]: U extends keyof ExcludeNullUnits<T> ? BrandUnitConfigValue<T[U]> : never;
|
|
5
12
|
}>;
|
|
6
13
|
};
|
|
7
|
-
type
|
|
14
|
+
type RemoveNeverValues<T> = {
|
|
8
15
|
[K in keyof T as [T[K]] extends [never] ? never : K]: T[K];
|
|
9
16
|
};
|
|
10
|
-
type BrandUnitConfigValue<T extends UnitValue> =
|
|
11
|
-
__exactKeys: keyof
|
|
17
|
+
type BrandUnitConfigValue<T extends UnitValue> = ExcludeNullUnit<T> & {
|
|
18
|
+
__exactKeys: keyof ExcludeNullUnit<T>;
|
|
12
19
|
};
|
|
13
|
-
type
|
|
14
|
-
type ExcludeZeroExponentsKeys<T extends Record<string, UnitValue>> = {
|
|
20
|
+
type ExcludeNullUnits<T extends Record<string, UnitValue>> = {
|
|
15
21
|
[K in keyof T as T[K] extends {
|
|
16
22
|
exponent: 0;
|
|
17
23
|
} ? never : K]: T[K];
|
|
18
24
|
};
|
|
19
|
-
type
|
|
25
|
+
type ExcludeNullUnit<T extends UnitValue> = {
|
|
20
26
|
[K in keyof T as T[K] extends 0 ? never : K]: T[K];
|
|
21
27
|
};
|
|
28
|
+
type GetUnitConfig<T> = T extends UnitFull<infer C> ? C : never;
|
|
22
29
|
type GetUnitValues<T extends Record<string, UnitValue>, U> = U extends keyof T ? T[U] : {
|
|
23
30
|
exponent: 0;
|
|
24
31
|
};
|
|
25
32
|
type KeysOfTwoObjects<A, B> = keyof A | keyof B;
|
|
26
33
|
type KeysOfKeyOfTwoObjects<A, B, K> = K extends keyof A ? K extends keyof B ? keyof A[K] | keyof B[K] : keyof A[K] : K extends keyof B ? keyof B[K] : never;
|
|
27
|
-
type Inverse<T extends number> = T extends UnknownUnit ? InverseUnit<T> : number;
|
|
28
|
-
type NegativeExponent<T extends Exponent> = T extends -6 ? 6 : T extends -5 ? 5 : T extends -4 ? 4 : T extends -3 ? 3 : T extends -2 ? 2 : T extends -1 ? 0 : T extends 0 ? 1 : T extends 1 ? -1 : T extends 2 ? -2 : T extends 3 ? -3 : T extends 4 ? -4 : T extends 5 ? -5 : T extends 6 ? -6 : never;
|
|
29
|
-
type InverseUnit<T extends UnknownUnit> = InverseUnitCore<T> extends Record<string, UnitValue> ? Unit<InverseUnitCore<T>> : never;
|
|
30
|
-
type InverseUnitCore<T extends UnknownUnit> = {
|
|
31
|
-
[U in keyof GetUnitConfig<T>]: {
|
|
32
|
-
[E in keyof GetUnitConfig<T>[U]]: NegativeExponent<GetUnitConfig<T>[U][E]>;
|
|
33
|
-
};
|
|
34
|
-
};
|
|
35
|
-
type Multiply<A extends number, B extends number> = A extends UnknownUnit ? B extends UnknownUnit ? MultiplyUnits<A, B> : A : B extends UnknownUnit ? B : number;
|
|
36
|
-
type MultiplyUnits<A extends UnknownUnit, B extends UnknownUnit> = MultiplyUnitsCore<A, B> extends Record<string, UnitValue> ? Unit<FlatternAlias<MultiplyUnitsCore<A, B>>> : never;
|
|
37
|
-
type MultiplyUnitsCore<A extends UnknownUnit, B extends UnknownUnit> = {
|
|
38
|
-
[U in KeysOfTwoObjects<GetUnitConfig<A>, GetUnitConfig<B>>]: {
|
|
39
|
-
[E in KeysOfKeyOfTwoObjects<GetUnitConfig<A>, GetUnitConfig<B>, U>]: SumExponents<E extends keyof GetUnitValues<GetUnitConfig<A>, U> ? GetUnitValues<GetUnitConfig<A>, U>[E] extends Exponent ? GetUnitValues<GetUnitConfig<A>, U>[E] : 0 : 0, E extends keyof GetUnitValues<GetUnitConfig<B>, U> ? GetUnitValues<GetUnitConfig<B>, U>[E] extends Exponent ? GetUnitValues<GetUnitConfig<B>, U>[E] : 0 : 0>;
|
|
40
|
-
};
|
|
41
|
-
};
|
|
42
|
-
type Divide<A extends number, B extends number> = A extends UnknownUnit ? B extends UnknownUnit ? DivideUnits<A, B> : A : B extends UnknownUnit ? Inverse<B> : number;
|
|
43
|
-
type DivideUnits<A extends UnknownUnit, B extends UnknownUnit> = MultiplyUnits<A, InverseUnit<B> extends UnknownUnit ? InverseUnit<B> : never>;
|
|
44
|
-
type SumExponents<A extends Exponent, B extends Exponent> = A extends -6 ? B extends 0 ? A : B extends 1 ? -5 : B extends 2 ? -4 : B extends 3 ? -3 : B extends 4 ? -2 : B extends 5 ? -1 : B extends 6 ? 0 : never : A extends -5 ? B extends -1 ? -6 : B extends 0 ? A : B extends 1 ? -4 : B extends 2 ? -3 : B extends 3 ? -2 : B extends 4 ? -1 : B extends 5 ? 0 : B extends 6 ? 1 : never : A extends -4 ? B extends -2 ? -6 : B extends -1 ? -5 : B extends 0 ? A : B extends 1 ? -3 : B extends 2 ? -2 : B extends 3 ? -1 : B extends 4 ? 0 : B extends 5 ? 1 : B extends 6 ? 2 : never : A extends -3 ? B extends -3 ? -6 : B extends -2 ? -5 : B extends -1 ? -4 : B extends 0 ? A : B extends 1 ? -2 : B extends 2 ? -1 : B extends 3 ? 0 : B extends 4 ? 1 : B extends 5 ? 2 : B extends 6 ? 3 : never : A extends -2 ? B extends -4 ? -6 : B extends -3 ? -5 : B extends -2 ? -4 : B extends -1 ? -3 : B extends 0 ? A : B extends 1 ? -1 : B extends 2 ? 0 : B extends 3 ? 1 : B extends 4 ? 2 : B extends 5 ? 3 : B extends 6 ? 4 : never : A extends -1 ? B extends -5 ? -6 : B extends -4 ? -5 : B extends -3 ? -4 : B extends -2 ? -3 : B extends -1 ? -2 : B extends 0 ? A : B extends 1 ? 0 : B extends 2 ? 1 : B extends 3 ? 2 : B extends 4 ? 3 : B extends 5 ? 4 : B extends 6 ? 5 : never : A extends 0 ? B : A extends 1 ? B extends -6 ? -5 : B extends -5 ? -4 : B extends -4 ? -3 : B extends -3 ? -2 : B extends -2 ? -1 : B extends -1 ? 0 : B extends 0 ? A : B extends 1 ? 2 : B extends 2 ? 3 : B extends 3 ? 4 : B extends 4 ? 5 : B extends 5 ? 6 : never : A extends 2 ? B extends -6 ? -4 : B extends -5 ? -3 : B extends -4 ? -2 : B extends -3 ? -1 : B extends -2 ? 0 : B extends -1 ? 1 : B extends 0 ? A : B extends 1 ? 3 : B extends 2 ? 4 : B extends 3 ? 5 : B extends 4 ? 6 : never : A extends 3 ? B extends -6 ? -3 : B extends -5 ? -2 : B extends -4 ? -1 : B extends -3 ? 0 : B extends -2 ? 1 : B extends -1 ? 2 : B extends 0 ? A : B extends 1 ? 4 : B extends 2 ? 5 : B extends 3 ? 6 : never : A extends 4 ? B extends -6 ? -2 : B extends -5 ? -1 : B extends -4 ? 0 : B extends -3 ? 1 : B extends -2 ? 2 : B extends -1 ? 3 : B extends 0 ? A : B extends 1 ? 5 : B extends 2 ? 6 : never : A extends 5 ? B extends -6 ? -1 : B extends -5 ? 0 : B extends -4 ? 1 : B extends -3 ? 2 : B extends -2 ? 3 : B extends -1 ? 4 : B extends 0 ? A : B extends 1 ? 6 : never : A extends 6 ? B extends -6 ? 0 : B extends -5 ? 1 : B extends -4 ? 2 : B extends -3 ? 3 : B extends -2 ? 4 : B extends -1 ? 5 : B extends 0 ? A : never : never;
|
|
45
34
|
/**
|
|
46
35
|
* Flatten a complex type such as a union or intersection of objects into a
|
|
47
36
|
* single object.
|
|
@@ -50,7 +39,6 @@ type FlatternAlias<T> = {
|
|
|
50
39
|
[P in keyof T]: T[P];
|
|
51
40
|
} & {};
|
|
52
41
|
|
|
53
|
-
type Exponent = -6 | -5 | -4 | -3 | -2 | -1 | 0 | 1 | 2 | 3 | 4 | 5 | 6;
|
|
54
42
|
type UnitFull<T extends Record<string, UnitValue>> = number & Readonly<BrandUnit<T>>;
|
|
55
43
|
type UnitValue = {
|
|
56
44
|
exponent: Exponent;
|
|
@@ -68,4 +56,31 @@ type UnknownUnit = number & Readonly<{
|
|
|
68
56
|
__uom_types: Record<string, {}>;
|
|
69
57
|
}>;
|
|
70
58
|
|
|
71
|
-
|
|
59
|
+
type MultiplyUnitExponents<A extends number, B extends 2> = A extends UnknownUnit ? MultiplyUnitExponentsCore<A, B> extends Record<string, UnitValue> ? Unit<FlatternAlias<MultiplyUnitExponentsCore<A, B>>> : never : number;
|
|
60
|
+
type MultiplyUnitExponentsCore<A extends UnknownUnit, B extends 2> = {
|
|
61
|
+
[U in keyof GetUnitConfig<A>]: {
|
|
62
|
+
[E in keyof GetUnitConfig<A>[U]]: MultiplyExponents<E extends keyof GetUnitValues<GetUnitConfig<A>, U> ? GetUnitValues<GetUnitConfig<A>, U>[E] extends Exponent ? GetUnitValues<GetUnitConfig<A>, U>[E] : 0 : 0, B>;
|
|
63
|
+
};
|
|
64
|
+
};
|
|
65
|
+
type DivideUnitExponents<A extends number, B extends 2> = A extends UnknownUnit ? DivideUnitExponentsCore<A, B> extends Record<string, UnitValue> ? Unit<FlatternAlias<DivideUnitExponentsCore<A, B>>> : never : number;
|
|
66
|
+
type DivideUnitExponentsCore<A extends UnknownUnit, B extends 2> = {
|
|
67
|
+
[U in keyof GetUnitConfig<A>]: {
|
|
68
|
+
[E in keyof GetUnitConfig<A>[U]]: DivideExponents<E extends keyof GetUnitValues<GetUnitConfig<A>, U> ? GetUnitValues<GetUnitConfig<A>, U>[E] extends Exponent ? GetUnitValues<GetUnitConfig<A>, U>[E] : 0 : 0, B>;
|
|
69
|
+
};
|
|
70
|
+
};
|
|
71
|
+
|
|
72
|
+
type Inverse<T extends number> = T extends UnknownUnit ? InverseUnitCore<T> extends Record<string, UnitValue> ? Unit<FlatternAlias<InverseUnitCore<T>>> : never : number;
|
|
73
|
+
type InverseUnitCore<T extends UnknownUnit> = {
|
|
74
|
+
[U in keyof GetUnitConfig<T>]: {
|
|
75
|
+
[E in keyof GetUnitConfig<T>[U]]: NegativeExponent<GetUnitConfig<T>[U][E]>;
|
|
76
|
+
};
|
|
77
|
+
};
|
|
78
|
+
type Multiply<A extends number, B extends number> = A extends UnknownUnit ? B extends UnknownUnit ? MultiplyUnitsCore<A, B> extends Record<string, UnitValue> ? Unit<FlatternAlias<MultiplyUnitsCore<A, B>>> : never : A : B extends UnknownUnit ? B : number;
|
|
79
|
+
type MultiplyUnitsCore<A extends UnknownUnit, B extends UnknownUnit> = {
|
|
80
|
+
[U in KeysOfTwoObjects<GetUnitConfig<A>, GetUnitConfig<B>>]: {
|
|
81
|
+
[E in KeysOfKeyOfTwoObjects<GetUnitConfig<A>, GetUnitConfig<B>, U>]: SumExponents<E extends keyof GetUnitValues<GetUnitConfig<A>, U> ? GetUnitValues<GetUnitConfig<A>, U>[E] extends Exponent ? GetUnitValues<GetUnitConfig<A>, U>[E] : 0 : 0, E extends keyof GetUnitValues<GetUnitConfig<B>, U> ? GetUnitValues<GetUnitConfig<B>, U>[E] extends Exponent ? GetUnitValues<GetUnitConfig<B>, U>[E] : 0 : 0>;
|
|
82
|
+
};
|
|
83
|
+
};
|
|
84
|
+
type Divide<A extends number, B extends number> = A extends UnknownUnit ? B extends UnknownUnit ? Multiply<A, Inverse<B> extends UnknownUnit ? Inverse<B> : never> : A : B extends UnknownUnit ? Inverse<B> : number;
|
|
85
|
+
|
|
86
|
+
export { Divide, DivideExponents, DivideUnitExponents, Exponent, Inverse, Multiply, MultiplyExponents, MultiplyUnitExponents, NegativeExponent, SubExponents, SumExponents, Unit, UnknownUnit };
|
package/dist/index.d.mts
CHANGED
|
@@ -1,47 +1,36 @@
|
|
|
1
|
+
type Exponent = -6 | -5 | -4 | -3 | -2 | -1 | 0 | 1 | 2 | 3 | 4 | 5 | 6;
|
|
2
|
+
type NegativeExponent<T extends Exponent> = T extends -6 ? 6 : T extends -5 ? 5 : T extends -4 ? 4 : T extends -3 ? 3 : T extends -2 ? 2 : T extends -1 ? 1 : T extends 0 ? 0 : T extends 1 ? -1 : T extends 2 ? -2 : T extends 3 ? -3 : T extends 4 ? -4 : T extends 5 ? -5 : T extends 6 ? -6 : never;
|
|
3
|
+
type SumExponents<A extends Exponent, B extends Exponent> = A extends -6 ? B extends 0 ? A : B extends 1 ? -5 : B extends 2 ? -4 : B extends 3 ? -3 : B extends 4 ? -2 : B extends 5 ? -1 : B extends 6 ? 0 : never : A extends -5 ? B extends -1 ? -6 : B extends 0 ? A : B extends 1 ? -4 : B extends 2 ? -3 : B extends 3 ? -2 : B extends 4 ? -1 : B extends 5 ? 0 : B extends 6 ? 1 : never : A extends -4 ? B extends -2 ? -6 : B extends -1 ? -5 : B extends 0 ? A : B extends 1 ? -3 : B extends 2 ? -2 : B extends 3 ? -1 : B extends 4 ? 0 : B extends 5 ? 1 : B extends 6 ? 2 : never : A extends -3 ? B extends -3 ? -6 : B extends -2 ? -5 : B extends -1 ? -4 : B extends 0 ? A : B extends 1 ? -2 : B extends 2 ? -1 : B extends 3 ? 0 : B extends 4 ? 1 : B extends 5 ? 2 : B extends 6 ? 3 : never : A extends -2 ? B extends -4 ? -6 : B extends -3 ? -5 : B extends -2 ? -4 : B extends -1 ? -3 : B extends 0 ? A : B extends 1 ? -1 : B extends 2 ? 0 : B extends 3 ? 1 : B extends 4 ? 2 : B extends 5 ? 3 : B extends 6 ? 4 : never : A extends -1 ? B extends -5 ? -6 : B extends -4 ? -5 : B extends -3 ? -4 : B extends -2 ? -3 : B extends -1 ? -2 : B extends 0 ? A : B extends 1 ? 0 : B extends 2 ? 1 : B extends 3 ? 2 : B extends 4 ? 3 : B extends 5 ? 4 : B extends 6 ? 5 : never : A extends 0 ? B : A extends 1 ? B extends -6 ? -5 : B extends -5 ? -4 : B extends -4 ? -3 : B extends -3 ? -2 : B extends -2 ? -1 : B extends -1 ? 0 : B extends 0 ? A : B extends 1 ? 2 : B extends 2 ? 3 : B extends 3 ? 4 : B extends 4 ? 5 : B extends 5 ? 6 : never : A extends 2 ? B extends -6 ? -4 : B extends -5 ? -3 : B extends -4 ? -2 : B extends -3 ? -1 : B extends -2 ? 0 : B extends -1 ? 1 : B extends 0 ? A : B extends 1 ? 3 : B extends 2 ? 4 : B extends 3 ? 5 : B extends 4 ? 6 : never : A extends 3 ? B extends -6 ? -3 : B extends -5 ? -2 : B extends -4 ? -1 : B extends -3 ? 0 : B extends -2 ? 1 : B extends -1 ? 2 : B extends 0 ? A : B extends 1 ? 4 : B extends 2 ? 5 : B extends 3 ? 6 : never : A extends 4 ? B extends -6 ? -2 : B extends -5 ? -1 : B extends -4 ? 0 : B extends -3 ? 1 : B extends -2 ? 2 : B extends -1 ? 3 : B extends 0 ? A : B extends 1 ? 5 : B extends 2 ? 6 : never : A extends 5 ? B extends -6 ? -1 : B extends -5 ? 0 : B extends -4 ? 1 : B extends -3 ? 2 : B extends -2 ? 3 : B extends -1 ? 4 : B extends 0 ? A : B extends 1 ? 6 : never : A extends 6 ? B extends -6 ? 0 : B extends -5 ? 1 : B extends -4 ? 2 : B extends -3 ? 3 : B extends -2 ? 4 : B extends -1 ? 5 : B extends 0 ? A : never : never;
|
|
4
|
+
type SubExponents<A extends Exponent, B extends Exponent> = SumExponents<A, NegativeExponent<B>>;
|
|
5
|
+
type MultiplyExponents<A extends Exponent, B extends 2> = B extends 2 ? A extends -3 ? -6 : A extends -2 ? -4 : A extends -1 ? -2 : A extends 0 ? 0 : A extends 1 ? 2 : A extends 2 ? 4 : A extends 3 ? 6 : never : never;
|
|
6
|
+
type DivideExponents<A extends Exponent, B extends 2> = B extends 2 ? A extends -6 ? -3 : A extends -4 ? -2 : A extends -2 ? -1 : A extends 0 ? 0 : A extends 2 ? 1 : A extends 4 ? 2 : A extends 6 ? 3 : never : never;
|
|
7
|
+
|
|
1
8
|
type BrandUnit<T extends Record<string, UnitValue>> = {
|
|
2
|
-
__exactKeys: keyof
|
|
3
|
-
__uom_types:
|
|
4
|
-
[U in keyof T]: U extends keyof
|
|
9
|
+
__exactKeys: keyof ExcludeNullUnits<T>;
|
|
10
|
+
__uom_types: RemoveNeverValues<{
|
|
11
|
+
[U in keyof T]: U extends keyof ExcludeNullUnits<T> ? BrandUnitConfigValue<T[U]> : never;
|
|
5
12
|
}>;
|
|
6
13
|
};
|
|
7
|
-
type
|
|
14
|
+
type RemoveNeverValues<T> = {
|
|
8
15
|
[K in keyof T as [T[K]] extends [never] ? never : K]: T[K];
|
|
9
16
|
};
|
|
10
|
-
type BrandUnitConfigValue<T extends UnitValue> =
|
|
11
|
-
__exactKeys: keyof
|
|
17
|
+
type BrandUnitConfigValue<T extends UnitValue> = ExcludeNullUnit<T> & {
|
|
18
|
+
__exactKeys: keyof ExcludeNullUnit<T>;
|
|
12
19
|
};
|
|
13
|
-
type
|
|
14
|
-
type ExcludeZeroExponentsKeys<T extends Record<string, UnitValue>> = {
|
|
20
|
+
type ExcludeNullUnits<T extends Record<string, UnitValue>> = {
|
|
15
21
|
[K in keyof T as T[K] extends {
|
|
16
22
|
exponent: 0;
|
|
17
23
|
} ? never : K]: T[K];
|
|
18
24
|
};
|
|
19
|
-
type
|
|
25
|
+
type ExcludeNullUnit<T extends UnitValue> = {
|
|
20
26
|
[K in keyof T as T[K] extends 0 ? never : K]: T[K];
|
|
21
27
|
};
|
|
28
|
+
type GetUnitConfig<T> = T extends UnitFull<infer C> ? C : never;
|
|
22
29
|
type GetUnitValues<T extends Record<string, UnitValue>, U> = U extends keyof T ? T[U] : {
|
|
23
30
|
exponent: 0;
|
|
24
31
|
};
|
|
25
32
|
type KeysOfTwoObjects<A, B> = keyof A | keyof B;
|
|
26
33
|
type KeysOfKeyOfTwoObjects<A, B, K> = K extends keyof A ? K extends keyof B ? keyof A[K] | keyof B[K] : keyof A[K] : K extends keyof B ? keyof B[K] : never;
|
|
27
|
-
type Inverse<T extends number> = T extends UnknownUnit ? InverseUnit<T> : number;
|
|
28
|
-
type NegativeExponent<T extends Exponent> = T extends -6 ? 6 : T extends -5 ? 5 : T extends -4 ? 4 : T extends -3 ? 3 : T extends -2 ? 2 : T extends -1 ? 0 : T extends 0 ? 1 : T extends 1 ? -1 : T extends 2 ? -2 : T extends 3 ? -3 : T extends 4 ? -4 : T extends 5 ? -5 : T extends 6 ? -6 : never;
|
|
29
|
-
type InverseUnit<T extends UnknownUnit> = InverseUnitCore<T> extends Record<string, UnitValue> ? Unit<InverseUnitCore<T>> : never;
|
|
30
|
-
type InverseUnitCore<T extends UnknownUnit> = {
|
|
31
|
-
[U in keyof GetUnitConfig<T>]: {
|
|
32
|
-
[E in keyof GetUnitConfig<T>[U]]: NegativeExponent<GetUnitConfig<T>[U][E]>;
|
|
33
|
-
};
|
|
34
|
-
};
|
|
35
|
-
type Multiply<A extends number, B extends number> = A extends UnknownUnit ? B extends UnknownUnit ? MultiplyUnits<A, B> : A : B extends UnknownUnit ? B : number;
|
|
36
|
-
type MultiplyUnits<A extends UnknownUnit, B extends UnknownUnit> = MultiplyUnitsCore<A, B> extends Record<string, UnitValue> ? Unit<FlatternAlias<MultiplyUnitsCore<A, B>>> : never;
|
|
37
|
-
type MultiplyUnitsCore<A extends UnknownUnit, B extends UnknownUnit> = {
|
|
38
|
-
[U in KeysOfTwoObjects<GetUnitConfig<A>, GetUnitConfig<B>>]: {
|
|
39
|
-
[E in KeysOfKeyOfTwoObjects<GetUnitConfig<A>, GetUnitConfig<B>, U>]: SumExponents<E extends keyof GetUnitValues<GetUnitConfig<A>, U> ? GetUnitValues<GetUnitConfig<A>, U>[E] extends Exponent ? GetUnitValues<GetUnitConfig<A>, U>[E] : 0 : 0, E extends keyof GetUnitValues<GetUnitConfig<B>, U> ? GetUnitValues<GetUnitConfig<B>, U>[E] extends Exponent ? GetUnitValues<GetUnitConfig<B>, U>[E] : 0 : 0>;
|
|
40
|
-
};
|
|
41
|
-
};
|
|
42
|
-
type Divide<A extends number, B extends number> = A extends UnknownUnit ? B extends UnknownUnit ? DivideUnits<A, B> : A : B extends UnknownUnit ? Inverse<B> : number;
|
|
43
|
-
type DivideUnits<A extends UnknownUnit, B extends UnknownUnit> = MultiplyUnits<A, InverseUnit<B> extends UnknownUnit ? InverseUnit<B> : never>;
|
|
44
|
-
type SumExponents<A extends Exponent, B extends Exponent> = A extends -6 ? B extends 0 ? A : B extends 1 ? -5 : B extends 2 ? -4 : B extends 3 ? -3 : B extends 4 ? -2 : B extends 5 ? -1 : B extends 6 ? 0 : never : A extends -5 ? B extends -1 ? -6 : B extends 0 ? A : B extends 1 ? -4 : B extends 2 ? -3 : B extends 3 ? -2 : B extends 4 ? -1 : B extends 5 ? 0 : B extends 6 ? 1 : never : A extends -4 ? B extends -2 ? -6 : B extends -1 ? -5 : B extends 0 ? A : B extends 1 ? -3 : B extends 2 ? -2 : B extends 3 ? -1 : B extends 4 ? 0 : B extends 5 ? 1 : B extends 6 ? 2 : never : A extends -3 ? B extends -3 ? -6 : B extends -2 ? -5 : B extends -1 ? -4 : B extends 0 ? A : B extends 1 ? -2 : B extends 2 ? -1 : B extends 3 ? 0 : B extends 4 ? 1 : B extends 5 ? 2 : B extends 6 ? 3 : never : A extends -2 ? B extends -4 ? -6 : B extends -3 ? -5 : B extends -2 ? -4 : B extends -1 ? -3 : B extends 0 ? A : B extends 1 ? -1 : B extends 2 ? 0 : B extends 3 ? 1 : B extends 4 ? 2 : B extends 5 ? 3 : B extends 6 ? 4 : never : A extends -1 ? B extends -5 ? -6 : B extends -4 ? -5 : B extends -3 ? -4 : B extends -2 ? -3 : B extends -1 ? -2 : B extends 0 ? A : B extends 1 ? 0 : B extends 2 ? 1 : B extends 3 ? 2 : B extends 4 ? 3 : B extends 5 ? 4 : B extends 6 ? 5 : never : A extends 0 ? B : A extends 1 ? B extends -6 ? -5 : B extends -5 ? -4 : B extends -4 ? -3 : B extends -3 ? -2 : B extends -2 ? -1 : B extends -1 ? 0 : B extends 0 ? A : B extends 1 ? 2 : B extends 2 ? 3 : B extends 3 ? 4 : B extends 4 ? 5 : B extends 5 ? 6 : never : A extends 2 ? B extends -6 ? -4 : B extends -5 ? -3 : B extends -4 ? -2 : B extends -3 ? -1 : B extends -2 ? 0 : B extends -1 ? 1 : B extends 0 ? A : B extends 1 ? 3 : B extends 2 ? 4 : B extends 3 ? 5 : B extends 4 ? 6 : never : A extends 3 ? B extends -6 ? -3 : B extends -5 ? -2 : B extends -4 ? -1 : B extends -3 ? 0 : B extends -2 ? 1 : B extends -1 ? 2 : B extends 0 ? A : B extends 1 ? 4 : B extends 2 ? 5 : B extends 3 ? 6 : never : A extends 4 ? B extends -6 ? -2 : B extends -5 ? -1 : B extends -4 ? 0 : B extends -3 ? 1 : B extends -2 ? 2 : B extends -1 ? 3 : B extends 0 ? A : B extends 1 ? 5 : B extends 2 ? 6 : never : A extends 5 ? B extends -6 ? -1 : B extends -5 ? 0 : B extends -4 ? 1 : B extends -3 ? 2 : B extends -2 ? 3 : B extends -1 ? 4 : B extends 0 ? A : B extends 1 ? 6 : never : A extends 6 ? B extends -6 ? 0 : B extends -5 ? 1 : B extends -4 ? 2 : B extends -3 ? 3 : B extends -2 ? 4 : B extends -1 ? 5 : B extends 0 ? A : never : never;
|
|
45
34
|
/**
|
|
46
35
|
* Flatten a complex type such as a union or intersection of objects into a
|
|
47
36
|
* single object.
|
|
@@ -50,7 +39,6 @@ type FlatternAlias<T> = {
|
|
|
50
39
|
[P in keyof T]: T[P];
|
|
51
40
|
} & {};
|
|
52
41
|
|
|
53
|
-
type Exponent = -6 | -5 | -4 | -3 | -2 | -1 | 0 | 1 | 2 | 3 | 4 | 5 | 6;
|
|
54
42
|
type UnitFull<T extends Record<string, UnitValue>> = number & Readonly<BrandUnit<T>>;
|
|
55
43
|
type UnitValue = {
|
|
56
44
|
exponent: Exponent;
|
|
@@ -68,4 +56,31 @@ type UnknownUnit = number & Readonly<{
|
|
|
68
56
|
__uom_types: Record<string, {}>;
|
|
69
57
|
}>;
|
|
70
58
|
|
|
71
|
-
|
|
59
|
+
type MultiplyUnitExponents<A extends number, B extends 2> = A extends UnknownUnit ? MultiplyUnitExponentsCore<A, B> extends Record<string, UnitValue> ? Unit<FlatternAlias<MultiplyUnitExponentsCore<A, B>>> : never : number;
|
|
60
|
+
type MultiplyUnitExponentsCore<A extends UnknownUnit, B extends 2> = {
|
|
61
|
+
[U in keyof GetUnitConfig<A>]: {
|
|
62
|
+
[E in keyof GetUnitConfig<A>[U]]: MultiplyExponents<E extends keyof GetUnitValues<GetUnitConfig<A>, U> ? GetUnitValues<GetUnitConfig<A>, U>[E] extends Exponent ? GetUnitValues<GetUnitConfig<A>, U>[E] : 0 : 0, B>;
|
|
63
|
+
};
|
|
64
|
+
};
|
|
65
|
+
type DivideUnitExponents<A extends number, B extends 2> = A extends UnknownUnit ? DivideUnitExponentsCore<A, B> extends Record<string, UnitValue> ? Unit<FlatternAlias<DivideUnitExponentsCore<A, B>>> : never : number;
|
|
66
|
+
type DivideUnitExponentsCore<A extends UnknownUnit, B extends 2> = {
|
|
67
|
+
[U in keyof GetUnitConfig<A>]: {
|
|
68
|
+
[E in keyof GetUnitConfig<A>[U]]: DivideExponents<E extends keyof GetUnitValues<GetUnitConfig<A>, U> ? GetUnitValues<GetUnitConfig<A>, U>[E] extends Exponent ? GetUnitValues<GetUnitConfig<A>, U>[E] : 0 : 0, B>;
|
|
69
|
+
};
|
|
70
|
+
};
|
|
71
|
+
|
|
72
|
+
type Inverse<T extends number> = T extends UnknownUnit ? InverseUnitCore<T> extends Record<string, UnitValue> ? Unit<FlatternAlias<InverseUnitCore<T>>> : never : number;
|
|
73
|
+
type InverseUnitCore<T extends UnknownUnit> = {
|
|
74
|
+
[U in keyof GetUnitConfig<T>]: {
|
|
75
|
+
[E in keyof GetUnitConfig<T>[U]]: NegativeExponent<GetUnitConfig<T>[U][E]>;
|
|
76
|
+
};
|
|
77
|
+
};
|
|
78
|
+
type Multiply<A extends number, B extends number> = A extends UnknownUnit ? B extends UnknownUnit ? MultiplyUnitsCore<A, B> extends Record<string, UnitValue> ? Unit<FlatternAlias<MultiplyUnitsCore<A, B>>> : never : A : B extends UnknownUnit ? B : number;
|
|
79
|
+
type MultiplyUnitsCore<A extends UnknownUnit, B extends UnknownUnit> = {
|
|
80
|
+
[U in KeysOfTwoObjects<GetUnitConfig<A>, GetUnitConfig<B>>]: {
|
|
81
|
+
[E in KeysOfKeyOfTwoObjects<GetUnitConfig<A>, GetUnitConfig<B>, U>]: SumExponents<E extends keyof GetUnitValues<GetUnitConfig<A>, U> ? GetUnitValues<GetUnitConfig<A>, U>[E] extends Exponent ? GetUnitValues<GetUnitConfig<A>, U>[E] : 0 : 0, E extends keyof GetUnitValues<GetUnitConfig<B>, U> ? GetUnitValues<GetUnitConfig<B>, U>[E] extends Exponent ? GetUnitValues<GetUnitConfig<B>, U>[E] : 0 : 0>;
|
|
82
|
+
};
|
|
83
|
+
};
|
|
84
|
+
type Divide<A extends number, B extends number> = A extends UnknownUnit ? B extends UnknownUnit ? Multiply<A, Inverse<B> extends UnknownUnit ? Inverse<B> : never> : A : B extends UnknownUnit ? Inverse<B> : number;
|
|
85
|
+
|
|
86
|
+
export { Divide, DivideExponents, DivideUnitExponents, Exponent, Inverse, Multiply, MultiplyExponents, MultiplyUnitExponents, NegativeExponent, SubExponents, SumExponents, Unit, UnknownUnit };
|
package/dist/si-units.d.cts
CHANGED
package/dist/si-units.d.mts
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "uom-types",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "2.0.0",
|
|
4
4
|
"description": "Typesafe units with no runtime overhead.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"uom",
|
|
@@ -22,13 +22,6 @@
|
|
|
22
22
|
"email": "rebecca.stevens@outlook.co.nz"
|
|
23
23
|
},
|
|
24
24
|
"type": "module",
|
|
25
|
-
"imports": {
|
|
26
|
-
"#uom-types": "./src/base/index.ts",
|
|
27
|
-
"#uom-types/functions": "./src/functions/index.ts",
|
|
28
|
-
"#uom-types/functions/higher-order": "./src/functions-ho/index.ts",
|
|
29
|
-
"#uom-types/si-units": "./src/si-units/index.ts",
|
|
30
|
-
"#uom-types/si-units/converters": "./src/si-units-converters/index.ts"
|
|
31
|
-
},
|
|
32
25
|
"exports": {
|
|
33
26
|
".": {
|
|
34
27
|
"types": {
|
|
@@ -74,7 +67,8 @@
|
|
|
74
67
|
"README.md"
|
|
75
68
|
],
|
|
76
69
|
"scripts": {
|
|
77
|
-
"build": "pnpm run build:node",
|
|
70
|
+
"build": "pnpm run build:node && pnpm run build-post",
|
|
71
|
+
"build-post": "node --no-warnings=ExperimentalWarning --loader=ts-paths-esm-loader/transpile-only --experimental-specifier-resolution=node ./scripts/post-build.ts",
|
|
78
72
|
"build:node": "rimraf dist && rollup -c rollup.config.ts --configPlugin @rollup/plugin-typescript",
|
|
79
73
|
"cz": "git-cz",
|
|
80
74
|
"lint": "pnpm run lint:js && pnpm run lint:md && pnpm run lint:prettier && pnpm run lint:knip && pnpm run lint:spelling",
|
|
@@ -90,8 +84,9 @@
|
|
|
90
84
|
"prepare": "husky install",
|
|
91
85
|
"release": "pnpm run release:semantic",
|
|
92
86
|
"release:semantic": "semantic-release",
|
|
93
|
-
"test": "pnpm run test:js",
|
|
87
|
+
"test": "pnpm run test:js && pnpm run test:types",
|
|
94
88
|
"test:js": "c8 ava",
|
|
89
|
+
"test:types": "tsd -t './dist/index.d.mts' -f 'tests/**/*.test-d.ts'",
|
|
95
90
|
"type-check": "tsc --noEmit"
|
|
96
91
|
},
|
|
97
92
|
"devDependencies": {
|
|
@@ -144,6 +139,7 @@
|
|
|
144
139
|
"ts-node": "10.9.1",
|
|
145
140
|
"ts-paths-esm-loader": "1.4.3",
|
|
146
141
|
"tsconfig-paths": "4.2.0",
|
|
142
|
+
"tsd": "0.28.1",
|
|
147
143
|
"typescript": "5.1.6"
|
|
148
144
|
},
|
|
149
145
|
"packageManager": "pnpm@8.6.6",
|