uom-types 1.0.3 → 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 -73
- package/dist/functions-ho.d.mts +4 -73
- package/dist/functions-ho.mjs +1 -1
- package/dist/functions.cjs +0 -7
- package/dist/functions.d.cts +5 -78
- package/dist/functions.d.mts +5 -78
- 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 -34
- package/dist/si-units.d.mts +1 -34
- package/package.json +6 -10
package/dist/functions-ho.cjs
CHANGED
package/dist/functions-ho.d.cts
CHANGED
|
@@ -1,74 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
__uom_types: RemoveNever<{
|
|
4
|
-
[U in keyof T]: U extends keyof ExcludeZeroExponentsKeys<T> ? BrandUnitConfigValue<T[U]> : never;
|
|
5
|
-
}>;
|
|
6
|
-
};
|
|
7
|
-
type RemoveNever<T> = {
|
|
8
|
-
[K in keyof T as [T[K]] extends [never] ? never : K]: T[K];
|
|
9
|
-
};
|
|
10
|
-
type BrandUnitConfigValue<T extends UnitValue> = ExcludeZeroExponents<T> & {
|
|
11
|
-
__exactKeys: keyof ExcludeZeroExponents<T>;
|
|
12
|
-
};
|
|
13
|
-
type GetUnitConfig<T> = T extends UnitFull<infer C> ? C : never;
|
|
14
|
-
type ExcludeZeroExponentsKeys<T extends Record<string, UnitValue>> = {
|
|
15
|
-
[K in keyof T as T[K] extends {
|
|
16
|
-
exponent: 0;
|
|
17
|
-
} ? never : K]: T[K];
|
|
18
|
-
};
|
|
19
|
-
type ExcludeZeroExponents<T extends UnitValue> = {
|
|
20
|
-
[K in keyof T as T[K] extends 0 ? never : K]: T[K];
|
|
21
|
-
};
|
|
22
|
-
type GetUnitValues<T extends Record<string, UnitValue>, U> = U extends keyof T ? T[U] : {
|
|
23
|
-
exponent: 0;
|
|
24
|
-
};
|
|
25
|
-
type KeysOfTwoObjects<A, B> = keyof A | keyof B;
|
|
26
|
-
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
|
-
/**
|
|
46
|
-
* Flatten a complex type such as a union or intersection of objects into a
|
|
47
|
-
* single object.
|
|
48
|
-
*/
|
|
49
|
-
type FlatternAlias<T> = {
|
|
50
|
-
[P in keyof T]: T[P];
|
|
51
|
-
} & {};
|
|
52
|
-
|
|
53
|
-
type Exponent = -6 | -5 | -4 | -3 | -2 | -1 | 0 | 1 | 2 | 3 | 4 | 5 | 6;
|
|
54
|
-
type UnitFull<T extends Record<string, UnitValue>> = number & Readonly<BrandUnit<T>>;
|
|
55
|
-
type UnitValue = {
|
|
56
|
-
exponent: Exponent;
|
|
57
|
-
} & Record<string, Exponent>;
|
|
58
|
-
/**
|
|
59
|
-
* A unit of measurement.
|
|
60
|
-
*/
|
|
61
|
-
type Unit<T extends Record<string, Exponent | UnitValue>> = UnitFull<{
|
|
62
|
-
[K in keyof T]: T[K] extends Exponent ? {
|
|
63
|
-
exponent: T[K];
|
|
64
|
-
} : T[K] extends UnitValue ? T[K] : never;
|
|
65
|
-
}>;
|
|
66
|
-
type UnknownUnit = number & Readonly<{
|
|
67
|
-
__exactKeys: string;
|
|
68
|
-
__uom_types: Record<string, {}>;
|
|
69
|
-
}>;
|
|
70
|
-
|
|
71
|
-
type Decimal = Unit<{}>;
|
|
1
|
+
import { Multiply, Divide, UnknownUnit, Inverse, DivideUnitExponents } from './index.cjs';
|
|
2
|
+
import { Decimal } from './si-units.cjs';
|
|
72
3
|
|
|
73
4
|
type OperationIO<T extends number> = T extends UnknownUnit ? T : number;
|
|
74
5
|
/**
|
|
@@ -95,11 +26,11 @@ declare function mod<T extends number>(a: OperationIO<T>): (b: OperationIO<T>) =
|
|
|
95
26
|
* Perform mathematic modular arithmetic.
|
|
96
27
|
*/
|
|
97
28
|
declare function modSafe<T extends number>(a: OperationIO<T>): (b: OperationIO<T>) => OperationIO<T>;
|
|
98
|
-
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>;
|
|
99
30
|
/**
|
|
100
31
|
* Put a number to the power of the given value.
|
|
101
32
|
*/
|
|
102
|
-
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>>;
|
|
103
34
|
/**
|
|
104
35
|
* Equal: Compare if a value is equal to the given value.
|
|
105
36
|
*/
|
package/dist/functions-ho.d.mts
CHANGED
|
@@ -1,74 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
__uom_types: RemoveNever<{
|
|
4
|
-
[U in keyof T]: U extends keyof ExcludeZeroExponentsKeys<T> ? BrandUnitConfigValue<T[U]> : never;
|
|
5
|
-
}>;
|
|
6
|
-
};
|
|
7
|
-
type RemoveNever<T> = {
|
|
8
|
-
[K in keyof T as [T[K]] extends [never] ? never : K]: T[K];
|
|
9
|
-
};
|
|
10
|
-
type BrandUnitConfigValue<T extends UnitValue> = ExcludeZeroExponents<T> & {
|
|
11
|
-
__exactKeys: keyof ExcludeZeroExponents<T>;
|
|
12
|
-
};
|
|
13
|
-
type GetUnitConfig<T> = T extends UnitFull<infer C> ? C : never;
|
|
14
|
-
type ExcludeZeroExponentsKeys<T extends Record<string, UnitValue>> = {
|
|
15
|
-
[K in keyof T as T[K] extends {
|
|
16
|
-
exponent: 0;
|
|
17
|
-
} ? never : K]: T[K];
|
|
18
|
-
};
|
|
19
|
-
type ExcludeZeroExponents<T extends UnitValue> = {
|
|
20
|
-
[K in keyof T as T[K] extends 0 ? never : K]: T[K];
|
|
21
|
-
};
|
|
22
|
-
type GetUnitValues<T extends Record<string, UnitValue>, U> = U extends keyof T ? T[U] : {
|
|
23
|
-
exponent: 0;
|
|
24
|
-
};
|
|
25
|
-
type KeysOfTwoObjects<A, B> = keyof A | keyof B;
|
|
26
|
-
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
|
-
/**
|
|
46
|
-
* Flatten a complex type such as a union or intersection of objects into a
|
|
47
|
-
* single object.
|
|
48
|
-
*/
|
|
49
|
-
type FlatternAlias<T> = {
|
|
50
|
-
[P in keyof T]: T[P];
|
|
51
|
-
} & {};
|
|
52
|
-
|
|
53
|
-
type Exponent = -6 | -5 | -4 | -3 | -2 | -1 | 0 | 1 | 2 | 3 | 4 | 5 | 6;
|
|
54
|
-
type UnitFull<T extends Record<string, UnitValue>> = number & Readonly<BrandUnit<T>>;
|
|
55
|
-
type UnitValue = {
|
|
56
|
-
exponent: Exponent;
|
|
57
|
-
} & Record<string, Exponent>;
|
|
58
|
-
/**
|
|
59
|
-
* A unit of measurement.
|
|
60
|
-
*/
|
|
61
|
-
type Unit<T extends Record<string, Exponent | UnitValue>> = UnitFull<{
|
|
62
|
-
[K in keyof T]: T[K] extends Exponent ? {
|
|
63
|
-
exponent: T[K];
|
|
64
|
-
} : T[K] extends UnitValue ? T[K] : never;
|
|
65
|
-
}>;
|
|
66
|
-
type UnknownUnit = number & Readonly<{
|
|
67
|
-
__exactKeys: string;
|
|
68
|
-
__uom_types: Record<string, {}>;
|
|
69
|
-
}>;
|
|
70
|
-
|
|
71
|
-
type Decimal = Unit<{}>;
|
|
1
|
+
import { Multiply, Divide, UnknownUnit, Inverse, DivideUnitExponents } from './index.mjs';
|
|
2
|
+
import { Decimal } from './si-units.mjs';
|
|
72
3
|
|
|
73
4
|
type OperationIO<T extends number> = T extends UnknownUnit ? T : number;
|
|
74
5
|
/**
|
|
@@ -95,11 +26,11 @@ declare function mod<T extends number>(a: OperationIO<T>): (b: OperationIO<T>) =
|
|
|
95
26
|
* Perform mathematic modular arithmetic.
|
|
96
27
|
*/
|
|
97
28
|
declare function modSafe<T extends number>(a: OperationIO<T>): (b: OperationIO<T>) => OperationIO<T>;
|
|
98
|
-
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>;
|
|
99
30
|
/**
|
|
100
31
|
* Put a number to the power of the given value.
|
|
101
32
|
*/
|
|
102
|
-
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>>;
|
|
103
34
|
/**
|
|
104
35
|
* Equal: Compare if a value is equal to the given value.
|
|
105
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,74 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
__uom_types: RemoveNever<{
|
|
4
|
-
[U in keyof T]: U extends keyof ExcludeZeroExponentsKeys<T> ? BrandUnitConfigValue<T[U]> : never;
|
|
5
|
-
}>;
|
|
6
|
-
};
|
|
7
|
-
type RemoveNever<T> = {
|
|
8
|
-
[K in keyof T as [T[K]] extends [never] ? never : K]: T[K];
|
|
9
|
-
};
|
|
10
|
-
type BrandUnitConfigValue<T extends UnitValue> = ExcludeZeroExponents<T> & {
|
|
11
|
-
__exactKeys: keyof ExcludeZeroExponents<T>;
|
|
12
|
-
};
|
|
13
|
-
type GetUnitConfig<T> = T extends UnitFull<infer C> ? C : never;
|
|
14
|
-
type ExcludeZeroExponentsKeys<T extends Record<string, UnitValue>> = {
|
|
15
|
-
[K in keyof T as T[K] extends {
|
|
16
|
-
exponent: 0;
|
|
17
|
-
} ? never : K]: T[K];
|
|
18
|
-
};
|
|
19
|
-
type ExcludeZeroExponents<T extends UnitValue> = {
|
|
20
|
-
[K in keyof T as T[K] extends 0 ? never : K]: T[K];
|
|
21
|
-
};
|
|
22
|
-
type GetUnitValues<T extends Record<string, UnitValue>, U> = U extends keyof T ? T[U] : {
|
|
23
|
-
exponent: 0;
|
|
24
|
-
};
|
|
25
|
-
type KeysOfTwoObjects<A, B> = keyof A | keyof B;
|
|
26
|
-
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
|
-
/**
|
|
46
|
-
* Flatten a complex type such as a union or intersection of objects into a
|
|
47
|
-
* single object.
|
|
48
|
-
*/
|
|
49
|
-
type FlatternAlias<T> = {
|
|
50
|
-
[P in keyof T]: T[P];
|
|
51
|
-
} & {};
|
|
52
|
-
|
|
53
|
-
type Exponent = -6 | -5 | -4 | -3 | -2 | -1 | 0 | 1 | 2 | 3 | 4 | 5 | 6;
|
|
54
|
-
type UnitFull<T extends Record<string, UnitValue>> = number & Readonly<BrandUnit<T>>;
|
|
55
|
-
type UnitValue = {
|
|
56
|
-
exponent: Exponent;
|
|
57
|
-
} & Record<string, Exponent>;
|
|
58
|
-
/**
|
|
59
|
-
* A unit of measurement.
|
|
60
|
-
*/
|
|
61
|
-
type Unit<T extends Record<string, Exponent | UnitValue>> = UnitFull<{
|
|
62
|
-
[K in keyof T]: T[K] extends Exponent ? {
|
|
63
|
-
exponent: T[K];
|
|
64
|
-
} : T[K] extends UnitValue ? T[K] : never;
|
|
65
|
-
}>;
|
|
66
|
-
type UnknownUnit = number & Readonly<{
|
|
67
|
-
__exactKeys: string;
|
|
68
|
-
__uom_types: Record<string, {}>;
|
|
69
|
-
}>;
|
|
70
|
-
|
|
71
|
-
type Decimal = Unit<{}>;
|
|
1
|
+
import { Multiply, Divide, Inverse, UnknownUnit, DivideUnitExponents } from './index.cjs';
|
|
2
|
+
import { Decimal } from './si-units.cjs';
|
|
72
3
|
|
|
73
4
|
type OperationIO<T extends number> = T extends UnknownUnit ? T : number;
|
|
74
5
|
/**
|
|
@@ -114,7 +45,7 @@ declare function pow<B extends number>(base: OperationIO<B>, exponent: 0): Opera
|
|
|
114
45
|
/**
|
|
115
46
|
* Put a number to the power of 1/2.
|
|
116
47
|
*/
|
|
117
|
-
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>>;
|
|
118
49
|
/**
|
|
119
50
|
* Put a number to the power of 1.
|
|
120
51
|
*/
|
|
@@ -138,7 +69,7 @@ declare function pow<B extends number, E extends number>(base: OperationIO<B>, e
|
|
|
138
69
|
/**
|
|
139
70
|
* Take the square root of the given value.
|
|
140
71
|
*/
|
|
141
|
-
declare function sqrt<T extends number>(value: OperationIO<T>): OperationIO<
|
|
72
|
+
declare function sqrt<T extends number>(value: OperationIO<T>): OperationIO<DivideUnitExponents<T, 2>>;
|
|
142
73
|
/**
|
|
143
74
|
* Inverse the given value.
|
|
144
75
|
*/
|
|
@@ -175,10 +106,6 @@ declare function min<T extends number>(values: Iterable<T>): OperationIO<T>;
|
|
|
175
106
|
* Takes the sum of all the values in the given collection.
|
|
176
107
|
*/
|
|
177
108
|
declare function sum<T extends number>(values: ReadonlyArray<T>): OperationIO<T>;
|
|
178
|
-
/**
|
|
179
|
-
* Takes the product of all the values in the given collection.
|
|
180
|
-
*/
|
|
181
|
-
declare function product<T extends number>(values: ReadonlyArray<T>): OperationIO<T>;
|
|
182
109
|
/**
|
|
183
110
|
* Equal: Compare if two values are equal.
|
|
184
111
|
*/
|
|
@@ -200,4 +127,4 @@ declare function lt<A extends number>(a: OperationIO<A>, b: A): boolean;
|
|
|
200
127
|
*/
|
|
201
128
|
declare function lte<A extends number>(a: OperationIO<A>, b: A): boolean;
|
|
202
129
|
|
|
203
|
-
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,74 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
__uom_types: RemoveNever<{
|
|
4
|
-
[U in keyof T]: U extends keyof ExcludeZeroExponentsKeys<T> ? BrandUnitConfigValue<T[U]> : never;
|
|
5
|
-
}>;
|
|
6
|
-
};
|
|
7
|
-
type RemoveNever<T> = {
|
|
8
|
-
[K in keyof T as [T[K]] extends [never] ? never : K]: T[K];
|
|
9
|
-
};
|
|
10
|
-
type BrandUnitConfigValue<T extends UnitValue> = ExcludeZeroExponents<T> & {
|
|
11
|
-
__exactKeys: keyof ExcludeZeroExponents<T>;
|
|
12
|
-
};
|
|
13
|
-
type GetUnitConfig<T> = T extends UnitFull<infer C> ? C : never;
|
|
14
|
-
type ExcludeZeroExponentsKeys<T extends Record<string, UnitValue>> = {
|
|
15
|
-
[K in keyof T as T[K] extends {
|
|
16
|
-
exponent: 0;
|
|
17
|
-
} ? never : K]: T[K];
|
|
18
|
-
};
|
|
19
|
-
type ExcludeZeroExponents<T extends UnitValue> = {
|
|
20
|
-
[K in keyof T as T[K] extends 0 ? never : K]: T[K];
|
|
21
|
-
};
|
|
22
|
-
type GetUnitValues<T extends Record<string, UnitValue>, U> = U extends keyof T ? T[U] : {
|
|
23
|
-
exponent: 0;
|
|
24
|
-
};
|
|
25
|
-
type KeysOfTwoObjects<A, B> = keyof A | keyof B;
|
|
26
|
-
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
|
-
/**
|
|
46
|
-
* Flatten a complex type such as a union or intersection of objects into a
|
|
47
|
-
* single object.
|
|
48
|
-
*/
|
|
49
|
-
type FlatternAlias<T> = {
|
|
50
|
-
[P in keyof T]: T[P];
|
|
51
|
-
} & {};
|
|
52
|
-
|
|
53
|
-
type Exponent = -6 | -5 | -4 | -3 | -2 | -1 | 0 | 1 | 2 | 3 | 4 | 5 | 6;
|
|
54
|
-
type UnitFull<T extends Record<string, UnitValue>> = number & Readonly<BrandUnit<T>>;
|
|
55
|
-
type UnitValue = {
|
|
56
|
-
exponent: Exponent;
|
|
57
|
-
} & Record<string, Exponent>;
|
|
58
|
-
/**
|
|
59
|
-
* A unit of measurement.
|
|
60
|
-
*/
|
|
61
|
-
type Unit<T extends Record<string, Exponent | UnitValue>> = UnitFull<{
|
|
62
|
-
[K in keyof T]: T[K] extends Exponent ? {
|
|
63
|
-
exponent: T[K];
|
|
64
|
-
} : T[K] extends UnitValue ? T[K] : never;
|
|
65
|
-
}>;
|
|
66
|
-
type UnknownUnit = number & Readonly<{
|
|
67
|
-
__exactKeys: string;
|
|
68
|
-
__uom_types: Record<string, {}>;
|
|
69
|
-
}>;
|
|
70
|
-
|
|
71
|
-
type Decimal = Unit<{}>;
|
|
1
|
+
import { Multiply, Divide, Inverse, UnknownUnit, DivideUnitExponents } from './index.mjs';
|
|
2
|
+
import { Decimal } from './si-units.mjs';
|
|
72
3
|
|
|
73
4
|
type OperationIO<T extends number> = T extends UnknownUnit ? T : number;
|
|
74
5
|
/**
|
|
@@ -114,7 +45,7 @@ declare function pow<B extends number>(base: OperationIO<B>, exponent: 0): Opera
|
|
|
114
45
|
/**
|
|
115
46
|
* Put a number to the power of 1/2.
|
|
116
47
|
*/
|
|
117
|
-
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>>;
|
|
118
49
|
/**
|
|
119
50
|
* Put a number to the power of 1.
|
|
120
51
|
*/
|
|
@@ -138,7 +69,7 @@ declare function pow<B extends number, E extends number>(base: OperationIO<B>, e
|
|
|
138
69
|
/**
|
|
139
70
|
* Take the square root of the given value.
|
|
140
71
|
*/
|
|
141
|
-
declare function sqrt<T extends number>(value: OperationIO<T>): OperationIO<
|
|
72
|
+
declare function sqrt<T extends number>(value: OperationIO<T>): OperationIO<DivideUnitExponents<T, 2>>;
|
|
142
73
|
/**
|
|
143
74
|
* Inverse the given value.
|
|
144
75
|
*/
|
|
@@ -175,10 +106,6 @@ declare function min<T extends number>(values: Iterable<T>): OperationIO<T>;
|
|
|
175
106
|
* Takes the sum of all the values in the given collection.
|
|
176
107
|
*/
|
|
177
108
|
declare function sum<T extends number>(values: ReadonlyArray<T>): OperationIO<T>;
|
|
178
|
-
/**
|
|
179
|
-
* Takes the product of all the values in the given collection.
|
|
180
|
-
*/
|
|
181
|
-
declare function product<T extends number>(values: ReadonlyArray<T>): OperationIO<T>;
|
|
182
109
|
/**
|
|
183
110
|
* Equal: Compare if two values are equal.
|
|
184
111
|
*/
|
|
@@ -200,4 +127,4 @@ declare function lt<A extends number>(a: OperationIO<A>, b: A): boolean;
|
|
|
200
127
|
*/
|
|
201
128
|
declare function lte<A extends number>(a: OperationIO<A>, b: A): boolean;
|
|
202
129
|
|
|
203
|
-
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
|
@@ -1,37 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
__exactKeys: keyof ExcludeZeroExponentsKeys<T>;
|
|
3
|
-
__uom_types: RemoveNever<{
|
|
4
|
-
[U in keyof T]: U extends keyof ExcludeZeroExponentsKeys<T> ? BrandUnitConfigValue<T[U]> : never;
|
|
5
|
-
}>;
|
|
6
|
-
};
|
|
7
|
-
type RemoveNever<T> = {
|
|
8
|
-
[K in keyof T as [T[K]] extends [never] ? never : K]: T[K];
|
|
9
|
-
};
|
|
10
|
-
type BrandUnitConfigValue<T extends UnitValue> = ExcludeZeroExponents<T> & {
|
|
11
|
-
__exactKeys: keyof ExcludeZeroExponents<T>;
|
|
12
|
-
};
|
|
13
|
-
type ExcludeZeroExponentsKeys<T extends Record<string, UnitValue>> = {
|
|
14
|
-
[K in keyof T as T[K] extends {
|
|
15
|
-
exponent: 0;
|
|
16
|
-
} ? never : K]: T[K];
|
|
17
|
-
};
|
|
18
|
-
type ExcludeZeroExponents<T extends UnitValue> = {
|
|
19
|
-
[K in keyof T as T[K] extends 0 ? never : K]: T[K];
|
|
20
|
-
};
|
|
21
|
-
|
|
22
|
-
type Exponent = -6 | -5 | -4 | -3 | -2 | -1 | 0 | 1 | 2 | 3 | 4 | 5 | 6;
|
|
23
|
-
type UnitFull<T extends Record<string, UnitValue>> = number & Readonly<BrandUnit<T>>;
|
|
24
|
-
type UnitValue = {
|
|
25
|
-
exponent: Exponent;
|
|
26
|
-
} & Record<string, Exponent>;
|
|
27
|
-
/**
|
|
28
|
-
* A unit of measurement.
|
|
29
|
-
*/
|
|
30
|
-
type Unit<T extends Record<string, Exponent | UnitValue>> = UnitFull<{
|
|
31
|
-
[K in keyof T]: T[K] extends Exponent ? {
|
|
32
|
-
exponent: T[K];
|
|
33
|
-
} : T[K] extends UnitValue ? T[K] : never;
|
|
34
|
-
}>;
|
|
1
|
+
import { Unit } from './index.cjs';
|
|
35
2
|
|
|
36
3
|
type Decimal = Unit<{}>;
|
|
37
4
|
|
package/dist/si-units.d.mts
CHANGED
|
@@ -1,37 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
__exactKeys: keyof ExcludeZeroExponentsKeys<T>;
|
|
3
|
-
__uom_types: RemoveNever<{
|
|
4
|
-
[U in keyof T]: U extends keyof ExcludeZeroExponentsKeys<T> ? BrandUnitConfigValue<T[U]> : never;
|
|
5
|
-
}>;
|
|
6
|
-
};
|
|
7
|
-
type RemoveNever<T> = {
|
|
8
|
-
[K in keyof T as [T[K]] extends [never] ? never : K]: T[K];
|
|
9
|
-
};
|
|
10
|
-
type BrandUnitConfigValue<T extends UnitValue> = ExcludeZeroExponents<T> & {
|
|
11
|
-
__exactKeys: keyof ExcludeZeroExponents<T>;
|
|
12
|
-
};
|
|
13
|
-
type ExcludeZeroExponentsKeys<T extends Record<string, UnitValue>> = {
|
|
14
|
-
[K in keyof T as T[K] extends {
|
|
15
|
-
exponent: 0;
|
|
16
|
-
} ? never : K]: T[K];
|
|
17
|
-
};
|
|
18
|
-
type ExcludeZeroExponents<T extends UnitValue> = {
|
|
19
|
-
[K in keyof T as T[K] extends 0 ? never : K]: T[K];
|
|
20
|
-
};
|
|
21
|
-
|
|
22
|
-
type Exponent = -6 | -5 | -4 | -3 | -2 | -1 | 0 | 1 | 2 | 3 | 4 | 5 | 6;
|
|
23
|
-
type UnitFull<T extends Record<string, UnitValue>> = number & Readonly<BrandUnit<T>>;
|
|
24
|
-
type UnitValue = {
|
|
25
|
-
exponent: Exponent;
|
|
26
|
-
} & Record<string, Exponent>;
|
|
27
|
-
/**
|
|
28
|
-
* A unit of measurement.
|
|
29
|
-
*/
|
|
30
|
-
type Unit<T extends Record<string, Exponent | UnitValue>> = UnitFull<{
|
|
31
|
-
[K in keyof T]: T[K] extends Exponent ? {
|
|
32
|
-
exponent: T[K];
|
|
33
|
-
} : T[K] extends UnitValue ? T[K] : never;
|
|
34
|
-
}>;
|
|
1
|
+
import { Unit } from './index.mjs';
|
|
35
2
|
|
|
36
3
|
type Decimal = Unit<{}>;
|
|
37
4
|
|
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",
|