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.
@@ -42,7 +42,7 @@ function modSafe(a) {
42
42
  * Put a number to the power of the given value.
43
43
  */
44
44
  function pow(exponent) {
45
- return ((base) => base ** exponent);
45
+ return (base) => (base ** exponent);
46
46
  }
47
47
  /**
48
48
  * Equal: Compare if a value is equal to the given value.
@@ -1,5 +1,5 @@
1
- import { Multiply, Divide, UnknownUnit, Inverse } from '#uom-types';
2
- import { Decimal } from '#uom-types/si-units';
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 | 1 : E extends 0.5 ? (b: OperationIO<B>) => OperationIO<Divide<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>;
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, B extends number>(exponent: E extends UnknownUnit ? never : E): PowFunction<E, B>;
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
  */
@@ -1,5 +1,5 @@
1
- import { Multiply, Divide, UnknownUnit, Inverse } from '#uom-types';
2
- import { Decimal } from '#uom-types/si-units';
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 | 1 : E extends 0.5 ? (b: OperationIO<B>) => OperationIO<Divide<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>;
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, B extends number>(exponent: E extends UnknownUnit ? never : E): PowFunction<E, B>;
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
  */
@@ -40,7 +40,7 @@ function modSafe(a) {
40
40
  * Put a number to the power of the given value.
41
41
  */
42
42
  function pow(exponent) {
43
- return ((base) => base ** exponent);
43
+ return (base) => (base ** exponent);
44
44
  }
45
45
  /**
46
46
  * Equal: Compare if a value is equal to the given value.
@@ -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;
@@ -1,5 +1,5 @@
1
- import { Multiply, Divide, Inverse, UnknownUnit } from '#uom-types';
2
- import { Decimal } from '#uom-types/si-units';
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<Divide<B, 2>>;
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<Divide<T, 2>>;
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, product, round, sqrt, sub, sum };
130
+ export { abs, add, ceil, div, eq, floor, gt, gte, inverse, lt, lte, max, min, mod, modSafe, mul, negate, pow, round, sqrt, sub, sum };
@@ -1,5 +1,5 @@
1
- import { Multiply, Divide, Inverse, UnknownUnit } from '#uom-types';
2
- import { Decimal } from '#uom-types/si-units';
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<Divide<B, 2>>;
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<Divide<T, 2>>;
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, product, round, sqrt, sub, sum };
130
+ export { abs, add, ceil, div, eq, floor, gt, gte, inverse, lt, lte, max, min, mod, modSafe, mul, negate, pow, round, sqrt, sub, sum };
@@ -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, product, round, sqrt, sub, sum };
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 ExcludeZeroExponentsKeys<T>;
3
- __uom_types: RemoveNever<{
4
- [U in keyof T]: U extends keyof ExcludeZeroExponentsKeys<T> ? BrandUnitConfigValue<T[U]> : never;
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 RemoveNever<T> = {
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> = ExcludeZeroExponents<T> & {
11
- __exactKeys: keyof ExcludeZeroExponents<T>;
17
+ type BrandUnitConfigValue<T extends UnitValue> = ExcludeNullUnit<T> & {
18
+ __exactKeys: keyof ExcludeNullUnit<T>;
12
19
  };
13
- type GetUnitConfig<T> = T extends UnitFull<infer C> ? C : never;
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 ExcludeZeroExponents<T extends UnitValue> = {
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
- export { Divide, Inverse, Multiply, Unit, UnknownUnit };
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 ExcludeZeroExponentsKeys<T>;
3
- __uom_types: RemoveNever<{
4
- [U in keyof T]: U extends keyof ExcludeZeroExponentsKeys<T> ? BrandUnitConfigValue<T[U]> : never;
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 RemoveNever<T> = {
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> = ExcludeZeroExponents<T> & {
11
- __exactKeys: keyof ExcludeZeroExponents<T>;
17
+ type BrandUnitConfigValue<T extends UnitValue> = ExcludeNullUnit<T> & {
18
+ __exactKeys: keyof ExcludeNullUnit<T>;
12
19
  };
13
- type GetUnitConfig<T> = T extends UnitFull<infer C> ? C : never;
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 ExcludeZeroExponents<T extends UnitValue> = {
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
- export { Divide, Inverse, Multiply, Unit, UnknownUnit };
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 };
@@ -1,4 +1,4 @@
1
- import { Unit } from '#uom-types';
1
+ import { Unit } from './index.cjs';
2
2
 
3
3
  type Decimal = Unit<{}>;
4
4
 
@@ -1,4 +1,4 @@
1
- import { Unit } from '#uom-types';
1
+ import { Unit } from './index.mjs';
2
2
 
3
3
  type Decimal = Unit<{}>;
4
4
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "uom-types",
3
- "version": "1.0.2",
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",