uom-types 3.0.1 → 3.1.1

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.
@@ -1,4 +1,4 @@
1
- import { E as Exactify, i as UnitClass, j as Exponent, d as AbstractUnitFrom, e as UnitSubvalues, f as UnitMeta, g as UnknownUnitMeta, h as UnitFrom } from './_index.cjs';
1
+ import { x as Exactify, b as UnitClass, E as Exponent, a as AbstractUnitFrom, g as UnitSubvalues, f as UnitMeta, l as UnknownUnitMeta, e as UnitFrom } from './_units.cjs';
2
2
 
3
3
  type SiUnitKeys = "Second" | "Metre" | "Kilogram" | "Mole" | "Ampere" | "Candela" | "Kelvin" | "Radian";
4
4
  /**
@@ -1,4 +1,4 @@
1
- import { E as Exactify, i as UnitClass, j as Exponent, d as AbstractUnitFrom, e as UnitSubvalues, f as UnitMeta, g as UnknownUnitMeta, h as UnitFrom } from './_index.mjs';
1
+ import { x as Exactify, b as UnitClass, E as Exponent, a as AbstractUnitFrom, g as UnitSubvalues, f as UnitMeta, l as UnknownUnitMeta, e as UnitFrom } from './_units.mjs';
2
2
 
3
3
  type SiUnitKeys = "Second" | "Metre" | "Kilogram" | "Mole" | "Ampere" | "Candela" | "Kelvin" | "Radian";
4
4
  /**
@@ -1,4 +1,4 @@
1
- import { d as AbstractUnitFrom, e as UnitSubvalues, f as UnitMeta, g as UnknownUnitMeta, h as UnitFrom } from './_index.cjs';
1
+ import { a as AbstractUnitFrom, g as UnitSubvalues, f as UnitMeta, l as UnknownUnitMeta, e as UnitFrom } from './_units.cjs';
2
2
  import { B as BaseUnitClass } from './_angle-plane.cjs';
3
3
 
4
4
  /**
@@ -1,4 +1,4 @@
1
- import { d as AbstractUnitFrom, e as UnitSubvalues, f as UnitMeta, g as UnknownUnitMeta, h as UnitFrom } from './_index.mjs';
1
+ import { a as AbstractUnitFrom, g as UnitSubvalues, f as UnitMeta, l as UnknownUnitMeta, e as UnitFrom } from './_units.mjs';
2
2
  import { B as BaseUnitClass } from './_angle-plane.mjs';
3
3
 
4
4
  /**
@@ -1,4 +1,4 @@
1
- import { b as UnknownAbstractUnit, U as UnknownUnit, l as MultiplyUnitExponents, I as Inverse, m as UnknownUnitClass, i as UnitClass, n as InverseUnitSubvalues, e as UnitSubvalues, f as UnitMeta, g as UnknownUnitMeta, h as UnitFrom, d as AbstractUnitFrom } from './_index.cjs';
1
+ import { i as UnknownUnit, h as UnknownAbstractUnit, k as UnknownUnitConversionRate, j as UnknownUnitClass, l as UnknownUnitMeta, P as Pow, b as UnitClass, v as PowUnitSubvalues, f as UnitMeta, I as Inverse, s as InverseUnitSubvalues, g as UnitSubvalues, e as UnitFrom, a as AbstractUnitFrom } from './_units.cjs';
2
2
  import { B as BaseUnitClass } from './_angle-plane.cjs';
3
3
 
4
4
  /**
@@ -6,19 +6,19 @@ import { B as BaseUnitClass } from './_angle-plane.cjs';
6
6
  *
7
7
  * @group Modifiers
8
8
  * @category General
9
- * @see {@link MultiplyUnitExponents}
9
+ * @see {@link Pow}
10
10
  * @see {@link Cubic}
11
11
  */
12
- type Square<T extends UnknownAbstractUnit | UnknownUnit> = MultiplyUnitExponents<T, 2>;
12
+ type Square<T extends UnknownUnit | UnknownAbstractUnit | UnknownUnitConversionRate | UnknownUnitClass | UnknownUnitMeta> = T extends number ? Pow<T, 2> : T extends UnknownUnitClass ? UnitClass<PowUnitSubvalues<T["__uom_types__value"], 2>> : T extends UnknownUnitMeta ? UnitMeta<PowUnitSubvalues<T["__uom_types__value"], 2>> : never;
13
13
  /**
14
14
  * Put the given {@link Unit} to the power of 3.
15
15
  *
16
16
  * @group Modifiers
17
17
  * @category General
18
- * @see {@link MultiplyUnitExponents}
18
+ * @see {@link Pow}
19
19
  * @see {@link Square}
20
20
  */
21
- type Cubic<T extends UnknownAbstractUnit | UnknownUnit> = MultiplyUnitExponents<T, 3>;
21
+ type Cubic<T extends UnknownUnit | UnknownAbstractUnit | UnknownUnitConversionRate | UnknownUnitClass | UnknownUnitMeta> = T extends number ? Pow<T, 3> : T extends UnknownUnitClass ? UnitClass<PowUnitSubvalues<T["__uom_types__value"], 3>> : T extends UnknownUnitMeta ? UnitMeta<PowUnitSubvalues<T["__uom_types__value"], 3>> : never;
22
22
 
23
23
  /**
24
24
  * Invert the {@link Unit}.
@@ -26,12 +26,11 @@ type Cubic<T extends UnknownAbstractUnit | UnknownUnit> = MultiplyUnitExponents<
26
26
  * @group Modifiers
27
27
  * @category General
28
28
  */
29
- type Reciprocal<T extends UnknownAbstractUnit | UnknownUnit> = Inverse<T>;
29
+ type Reciprocal<T extends UnknownUnit | UnknownAbstractUnit | UnknownUnitConversionRate | UnknownUnitClass | UnknownUnitMeta> = T extends number ? Inverse<T> : T extends UnknownUnitClass ? UnitClass<InverseUnitSubvalues<T["__uom_types__value"]>> : T extends UnknownUnitMeta ? UnitMeta<InverseUnitSubvalues<T["__uom_types__value"]>> : never;
30
30
  /**
31
31
  * Invert the {@link UnitClass}.
32
32
  *
33
- * @group Unit Class Modifiers
34
- * @category General
33
+ * @deprecated Use {@link Reciprocal} instead.
35
34
  */
36
35
  type ReciprocalUnitClass<T extends UnknownUnitClass> = UnitClass<InverseUnitSubvalues<T["__uom_types__value"]>>;
37
36
 
@@ -39,7 +38,7 @@ type ReciprocalUnitClass<T extends UnknownUnitClass> = UnitClass<InverseUnitSubv
39
38
  * @group Unit Classes
40
39
  * @category Kinematic
41
40
  */
42
- type FrequencyUnitClass = ReciprocalUnitClass<DurationUnitClass>;
41
+ type FrequencyUnitClass = Reciprocal<DurationUnitClass>;
43
42
  /**
44
43
  * @group Abstract Units
45
44
  * @category Kinematic
@@ -479,4 +478,4 @@ type Year = DurationUnit<{
479
478
  scalarDayInYear: 1;
480
479
  }>;
481
480
 
482
- export { VolumeUnit as $, Are as A, LengthUnitClass as B, Celsius as C, Day as D, EnergyUnitClass as E, FrequencyUnitClass as F, Gram as G, Hectare as H, Length as I, Joule as J, Kelvin as K, Litre as L, Metre as M, LengthUnit as N, LengthUnitFrom as O, PerMinute as P, MassUnitClass as Q, ReciprocalUnitClass as R, Square as S, Tonne as T, Mass as U, MassUnit as V, Week as W, MassUnitFrom as X, Year as Y, VolumeUnitClass as Z, Volume as _, Second as a, VolumeUnitFrom as a0, TemperatureUnit as a1, TemperatureUnitFrom as a2, DurationUnitClass as a3, Duration as a4, DurationUnit as a5, DurationUnitFrom as a6, Minute as b, Hour as c, WattMinute as d, WattHour as e, Hertz as f, PerHour as g, PerDay as h, PerWeek as i, PerYear as j, Cubic as k, Reciprocal as l, Energy as m, EnergyUnit as n, EnergyUnitFrom as o, TemperatureUnitClass as p, Temperature as q, Frequency as r, FrequencyUnit as s, FrequencyUnitFrom as t, PerSecond as u, AreaUnitClass as v, Area as w, AreaUnit as x, AreaUnitFrom as y, WattSecond as z };
481
+ export { Minute as $, AreaUnitClass as A, Tonne as B, Volume as C, VolumeUnit as D, EnergyUnitClass as E, FrequencyUnitClass as F, Gram as G, Hertz as H, VolumeUnitFrom as I, Joule as J, Litre as K, LengthUnitClass as L, Metre as M, TemperatureUnit as N, TemperatureUnitFrom as O, PerSecond as P, Kelvin as Q, Reciprocal as R, Celsius as S, TemperatureUnitClass as T, DurationUnitClass as U, VolumeUnitClass as V, WattSecond as W, Duration as X, DurationUnit as Y, DurationUnitFrom as Z, Second as _, Energy as a, Hour as a0, Day as a1, Week as a2, Year as a3, Square as a4, Cubic as a5, ReciprocalUnitClass as a6, EnergyUnit as b, EnergyUnitFrom as c, Temperature as d, Frequency as e, FrequencyUnit as f, FrequencyUnitFrom as g, PerMinute as h, PerHour as i, PerDay as j, PerWeek as k, PerYear as l, Area as m, AreaUnit as n, AreaUnitFrom as o, Are as p, Hectare as q, WattMinute as r, WattHour as s, Length as t, LengthUnit as u, LengthUnitFrom as v, MassUnitClass as w, Mass as x, MassUnit as y, MassUnitFrom as z };
@@ -1,4 +1,4 @@
1
- import { b as UnknownAbstractUnit, U as UnknownUnit, l as MultiplyUnitExponents, I as Inverse, m as UnknownUnitClass, i as UnitClass, n as InverseUnitSubvalues, e as UnitSubvalues, f as UnitMeta, g as UnknownUnitMeta, h as UnitFrom, d as AbstractUnitFrom } from './_index.mjs';
1
+ import { i as UnknownUnit, h as UnknownAbstractUnit, k as UnknownUnitConversionRate, j as UnknownUnitClass, l as UnknownUnitMeta, P as Pow, b as UnitClass, v as PowUnitSubvalues, f as UnitMeta, I as Inverse, s as InverseUnitSubvalues, g as UnitSubvalues, e as UnitFrom, a as AbstractUnitFrom } from './_units.mjs';
2
2
  import { B as BaseUnitClass } from './_angle-plane.mjs';
3
3
 
4
4
  /**
@@ -6,19 +6,19 @@ import { B as BaseUnitClass } from './_angle-plane.mjs';
6
6
  *
7
7
  * @group Modifiers
8
8
  * @category General
9
- * @see {@link MultiplyUnitExponents}
9
+ * @see {@link Pow}
10
10
  * @see {@link Cubic}
11
11
  */
12
- type Square<T extends UnknownAbstractUnit | UnknownUnit> = MultiplyUnitExponents<T, 2>;
12
+ type Square<T extends UnknownUnit | UnknownAbstractUnit | UnknownUnitConversionRate | UnknownUnitClass | UnknownUnitMeta> = T extends number ? Pow<T, 2> : T extends UnknownUnitClass ? UnitClass<PowUnitSubvalues<T["__uom_types__value"], 2>> : T extends UnknownUnitMeta ? UnitMeta<PowUnitSubvalues<T["__uom_types__value"], 2>> : never;
13
13
  /**
14
14
  * Put the given {@link Unit} to the power of 3.
15
15
  *
16
16
  * @group Modifiers
17
17
  * @category General
18
- * @see {@link MultiplyUnitExponents}
18
+ * @see {@link Pow}
19
19
  * @see {@link Square}
20
20
  */
21
- type Cubic<T extends UnknownAbstractUnit | UnknownUnit> = MultiplyUnitExponents<T, 3>;
21
+ type Cubic<T extends UnknownUnit | UnknownAbstractUnit | UnknownUnitConversionRate | UnknownUnitClass | UnknownUnitMeta> = T extends number ? Pow<T, 3> : T extends UnknownUnitClass ? UnitClass<PowUnitSubvalues<T["__uom_types__value"], 3>> : T extends UnknownUnitMeta ? UnitMeta<PowUnitSubvalues<T["__uom_types__value"], 3>> : never;
22
22
 
23
23
  /**
24
24
  * Invert the {@link Unit}.
@@ -26,12 +26,11 @@ type Cubic<T extends UnknownAbstractUnit | UnknownUnit> = MultiplyUnitExponents<
26
26
  * @group Modifiers
27
27
  * @category General
28
28
  */
29
- type Reciprocal<T extends UnknownAbstractUnit | UnknownUnit> = Inverse<T>;
29
+ type Reciprocal<T extends UnknownUnit | UnknownAbstractUnit | UnknownUnitConversionRate | UnknownUnitClass | UnknownUnitMeta> = T extends number ? Inverse<T> : T extends UnknownUnitClass ? UnitClass<InverseUnitSubvalues<T["__uom_types__value"]>> : T extends UnknownUnitMeta ? UnitMeta<InverseUnitSubvalues<T["__uom_types__value"]>> : never;
30
30
  /**
31
31
  * Invert the {@link UnitClass}.
32
32
  *
33
- * @group Unit Class Modifiers
34
- * @category General
33
+ * @deprecated Use {@link Reciprocal} instead.
35
34
  */
36
35
  type ReciprocalUnitClass<T extends UnknownUnitClass> = UnitClass<InverseUnitSubvalues<T["__uom_types__value"]>>;
37
36
 
@@ -39,7 +38,7 @@ type ReciprocalUnitClass<T extends UnknownUnitClass> = UnitClass<InverseUnitSubv
39
38
  * @group Unit Classes
40
39
  * @category Kinematic
41
40
  */
42
- type FrequencyUnitClass = ReciprocalUnitClass<DurationUnitClass>;
41
+ type FrequencyUnitClass = Reciprocal<DurationUnitClass>;
43
42
  /**
44
43
  * @group Abstract Units
45
44
  * @category Kinematic
@@ -479,4 +478,4 @@ type Year = DurationUnit<{
479
478
  scalarDayInYear: 1;
480
479
  }>;
481
480
 
482
- export { VolumeUnit as $, Are as A, LengthUnitClass as B, Celsius as C, Day as D, EnergyUnitClass as E, FrequencyUnitClass as F, Gram as G, Hectare as H, Length as I, Joule as J, Kelvin as K, Litre as L, Metre as M, LengthUnit as N, LengthUnitFrom as O, PerMinute as P, MassUnitClass as Q, ReciprocalUnitClass as R, Square as S, Tonne as T, Mass as U, MassUnit as V, Week as W, MassUnitFrom as X, Year as Y, VolumeUnitClass as Z, Volume as _, Second as a, VolumeUnitFrom as a0, TemperatureUnit as a1, TemperatureUnitFrom as a2, DurationUnitClass as a3, Duration as a4, DurationUnit as a5, DurationUnitFrom as a6, Minute as b, Hour as c, WattMinute as d, WattHour as e, Hertz as f, PerHour as g, PerDay as h, PerWeek as i, PerYear as j, Cubic as k, Reciprocal as l, Energy as m, EnergyUnit as n, EnergyUnitFrom as o, TemperatureUnitClass as p, Temperature as q, Frequency as r, FrequencyUnit as s, FrequencyUnitFrom as t, PerSecond as u, AreaUnitClass as v, Area as w, AreaUnit as x, AreaUnitFrom as y, WattSecond as z };
481
+ export { Minute as $, AreaUnitClass as A, Tonne as B, Volume as C, VolumeUnit as D, EnergyUnitClass as E, FrequencyUnitClass as F, Gram as G, Hertz as H, VolumeUnitFrom as I, Joule as J, Litre as K, LengthUnitClass as L, Metre as M, TemperatureUnit as N, TemperatureUnitFrom as O, PerSecond as P, Kelvin as Q, Reciprocal as R, Celsius as S, TemperatureUnitClass as T, DurationUnitClass as U, VolumeUnitClass as V, WattSecond as W, Duration as X, DurationUnit as Y, DurationUnitFrom as Z, Second as _, Energy as a, Hour as a0, Day as a1, Week as a2, Year as a3, Square as a4, Cubic as a5, ReciprocalUnitClass as a6, EnergyUnit as b, EnergyUnitFrom as c, Temperature as d, Frequency as e, FrequencyUnit as f, FrequencyUnitFrom as g, PerMinute as h, PerHour as i, PerDay as j, PerWeek as k, PerYear as l, Area as m, AreaUnit as n, AreaUnitFrom as o, Are as p, Hectare as q, WattMinute as r, WattHour as s, Length as t, LengthUnit as u, LengthUnitFrom as v, MassUnitClass as w, Mass as x, MassUnit as y, MassUnitFrom as z };
@@ -1,16 +1,32 @@
1
1
  /**
2
2
  * @file Autogenerated File - Don't manually edit.
3
3
  */
4
+ /**
5
+ * All the supported positive exponent values.
6
+ *
7
+ * @group Unit Components
8
+ */
9
+ type PosExponent = 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12;
10
+ /**
11
+ * All the supported negative exponent values.
12
+ *
13
+ * @group Unit Components
14
+ */
15
+ type NegExponent = -1 | -2 | -3 | -4 | -5 | -6 | -7 | -8 | -9 | -10 | -11 | -12;
4
16
  /**
5
17
  * All the supported exponent values.
6
18
  *
7
19
  * @group Unit Components
8
20
  */
9
- type Exponent = 0 | 1 | -1 | 2 | -2 | 3 | -3 | 4 | -4 | 5 | -5 | 6 | -6 | 7 | -7 | 8 | -8 | 9 | -9 | 10 | -10 | 11 | -11 | 12 | -12;
21
+ type Exponent = 0 | PosExponent | NegExponent;
10
22
  /**
11
23
  * @group Exponent Functions
12
24
  */
13
- type NegativeExponent<T extends Exponent> = T extends 0 ? 0 : T extends 1 ? -1 : T extends -1 ? 1 : T extends 2 ? -2 : T extends -2 ? 2 : T extends 3 ? -3 : T extends -3 ? 3 : T extends 4 ? -4 : T extends -4 ? 4 : T extends 5 ? -5 : T extends -5 ? 5 : T extends 6 ? -6 : T extends -6 ? 6 : T extends 7 ? -7 : T extends -7 ? 7 : T extends 8 ? -8 : T extends -8 ? 8 : T extends 9 ? -9 : T extends -9 ? 9 : T extends 10 ? -10 : T extends -10 ? 10 : T extends 11 ? -11 : T extends -11 ? 11 : T extends 12 ? -12 : T extends -12 ? 12 : never;
25
+ type NegateExponent<T extends Exponent> = MultiplyExponents<T, -1>;
26
+ /**
27
+ * @depreated Use {@link NegateExponent} instead.
28
+ */
29
+ type NegativeExponent<T extends Exponent> = NegateExponent<T>;
14
30
  /**
15
31
  * @group Exponent Functions
16
32
  */
@@ -90,7 +106,7 @@ type Unit<C extends UnitSubvalues, M extends UnitSubvalues = {}> = number & {
90
106
  *
91
107
  * @group Unit Generators
92
108
  */
93
- type UnitFrom<C extends UnknownUnitClass, M extends UnknownUnitMeta = UnitMeta<{}>> = C extends UnitClass<infer A> ? M extends UnitMeta<infer B> ? Unit<UnitSubvalues extends A ? {} : A, UnitSubvalues extends B ? {} : B> : never : never;
109
+ type UnitFrom<C extends UnknownUnitClass, M extends UnknownUnitMeta = UnitMeta<{}>> = C extends UnitClass<infer A> ? M extends UnitMeta<infer B> ? Unit<A, B> : never : never;
94
110
  /**
95
111
  * A {@link Unit} without any {@link UnitClass}.
96
112
  *
@@ -98,13 +114,15 @@ type UnitFrom<C extends UnknownUnitClass, M extends UnknownUnitMeta = UnitMeta<{
98
114
  *
99
115
  * @group Unit Generators
100
116
  */
101
- type UnitConversionRate<M extends UnitSubvalues> = Unit<{}, M>;
117
+ type UnitConversionRate<M extends UnitSubvalues> = number & {
118
+ readonly __uom_types__unit_meta: UnitMeta<M>;
119
+ };
102
120
  /**
103
121
  * Create a {@link UnitConversionRate} from already existing {@link UnitMeta}.
104
122
  *
105
123
  * @group Unit Generators
106
124
  */
107
- type UnitConversionRateFrom<M extends UnknownUnitMeta> = M extends UnitMeta<infer A> ? UnitConversionRate<UnitSubvalues extends A ? {} : A> : never;
125
+ type UnitConversionRateFrom<M extends UnknownUnitMeta> = M extends UnitMeta<infer A> ? UnitConversionRate<A> : never;
108
126
  /**
109
127
  * Used to determine what a unit is of. For example, length, volume, mass etc.
110
128
  *
@@ -138,6 +156,14 @@ type UnknownUnit = UnknownAbstractUnit & {
138
156
  type UnknownAbstractUnit = number & {
139
157
  readonly __uom_types__unit_class: UnknownUnitClass;
140
158
  };
159
+ /**
160
+ * An {@link UnitConversionRate} that we don't know anything about.
161
+ *
162
+ * @group Unknown Units
163
+ */
164
+ type UnknownUnitConversionRate = number & {
165
+ readonly __uom_types__unit_meta: UnknownUnitMeta;
166
+ };
141
167
  /**
142
168
  * A {@link UnitClass} that we don't know anything about.
143
169
  *
@@ -169,47 +195,44 @@ type UnknownUnitKeyValues = {
169
195
  */
170
196
  type UnitSubvalues = Record<string, Exponent>;
171
197
 
172
- /**
173
- * Multiple the exponent values of a unit by a number.
174
- *
175
- * @group Unit Functions
176
- */
177
- type MultiplyUnitExponents<T extends number, E extends Exponent> = T extends Unit<infer Config, infer Meta> ? Unit<FlatternAlias<MultiplyUnitSubvaluesExponents<Config, E>>, FlatternAlias<MultiplyUnitSubvaluesExponents<Meta, E>>> : T extends AbstractUnit<infer Config> ? AbstractUnit<FlatternAlias<MultiplyUnitSubvaluesExponents<Config, E>>> : number;
178
- type MultiplyUnitSubvaluesExponents<T extends UnitSubvalues, E extends Exponent> = {
179
- [S in keyof T]: MultiplyExponents<GetExponent<T, S>, E>;
180
- };
181
- /**
182
- * Divide the exponent values of a unit by a number.
183
- *
184
- * @group Unit Functions
185
- */
186
- type DivideUnitExponents<T extends number, E extends Exponent> = T extends Unit<infer Config, infer Meta> ? Unit<FlatternAlias<DivideUnitSubvaluesExponents<Config, E>>, FlatternAlias<DivideUnitSubvaluesExponents<Meta, E>>> : T extends AbstractUnit<infer Config> ? AbstractUnit<FlatternAlias<DivideUnitSubvaluesExponents<Config, E>>> : number;
187
- type DivideUnitSubvaluesExponents<T extends UnitSubvalues, E extends Exponent> = {
188
- [S in keyof T]: DivideExponents<GetExponent<T, S>, E>;
189
- };
190
-
191
198
  /**
192
199
  * Take the inverse of a unit.
193
200
  *
194
201
  * @group Unit Functions
195
202
  * @returns `1/X`.
196
203
  */
197
- type Inverse<X extends number> = X extends Unit<infer Config, infer Meta> ? Unit<FlatternAlias<InverseUnitSubvalues<Config>>, FlatternAlias<InverseUnitSubvalues<Meta>>> : X extends AbstractUnit<infer Config> ? AbstractUnit<FlatternAlias<InverseUnitSubvalues<Config>>> : number;
204
+ type Inverse<X extends number> = Pow<X, -1>;
198
205
  /**
199
206
  * Inverses each of the subvalues.
200
207
  *
201
208
  * @group Unit Subvalue Functions
202
209
  */
203
- type InverseUnitSubvalues<T extends UnitSubvalues> = {
204
- [E in keyof T]: NegativeExponent<T[E]>;
205
- };
210
+ type InverseUnitSubvalues<T extends UnitSubvalues> = PowUnitSubvalues<T, -1>;
206
211
  /**
207
212
  * Multiply a unit by another unit.
208
213
  *
209
214
  * @group Unit Functions
210
215
  * @returns `A⋅B`
211
216
  */
212
- type Multiply<A extends number, B extends number> = A extends Unit<infer AConfig, infer AMeta> ? B extends Unit<infer BConfig, infer BMeta> ? Unit<FlatternAlias<MultiplyUnitSubvalues<AConfig, BConfig>>, FlatternAlias<MultiplyUnitSubvalues<AMeta, BMeta>>> : B extends UnknownAbstractUnit ? never : A : B extends UnknownUnit ? A extends UnknownAbstractUnit ? never : B : A extends AbstractUnit<infer AConfig> ? B extends AbstractUnit<infer BConfig> ? AbstractUnit<FlatternAlias<MultiplyUnitSubvalues<AConfig, BConfig>>> : A : B extends UnknownAbstractUnit ? B : number;
217
+ type Multiply<A extends number, B extends number> = A extends UnknownUnit ? MultiplyHelperUnit<A, B> : B extends UnknownUnit ? MultiplyHelperUnit<B, A> : A extends UnknownAbstractUnit ? MultiplyHelperAbstractUnit<A, B> : B extends UnknownAbstractUnit ? MultiplyHelperAbstractUnit<B, A> : A extends UnknownUnitConversionRate ? MultiplyHelperUnitConversionRate<A, B> : B extends UnknownUnitConversionRate ? MultiplyHelperUnitConversionRate<B, A> : number;
218
+ /**
219
+ * Multiple a Unit by a Unit, AbstractUnit, UnitConversionRate or number
220
+ *
221
+ * @internal
222
+ */
223
+ type MultiplyHelperUnit<A extends UnknownUnit, B extends number> = A extends Unit<infer AClass, infer AMeta> ? B extends Unit<infer BClass, infer BMeta> ? Unit<FlatternAlias<MultiplyUnitSubvalues<AClass, BClass>>, FlatternAlias<MultiplyUnitSubvalues<AMeta, BMeta>>> : B extends AbstractUnit<infer BClass> ? Unit<FlatternAlias<MultiplyUnitSubvalues<AClass, BClass>>, AMeta> : B extends UnitConversionRate<infer BMeta> ? Unit<AClass, FlatternAlias<MultiplyUnitSubvalues<AMeta, BMeta>>> : A : never;
224
+ /**
225
+ * Multiple an AbstractUnit by an AbstractUnit, UnitConversionRate or number
226
+ *
227
+ * @internal
228
+ */
229
+ type MultiplyHelperAbstractUnit<A extends UnknownAbstractUnit, B extends number> = A extends AbstractUnit<infer AClass> ? B extends AbstractUnit<infer BClass> ? AbstractUnit<FlatternAlias<MultiplyUnitSubvalues<AClass, BClass>>> : B extends UnitConversionRate<infer BMeta> ? Unit<AClass, BMeta> : A : never;
230
+ /**
231
+ * Multiple an UnitConversionRate by a UnitConversionRate or number
232
+ *
233
+ * @internal
234
+ */
235
+ type MultiplyHelperUnitConversionRate<A extends UnknownUnitConversionRate, B extends number> = A extends UnitConversionRate<infer AMeta> ? B extends UnitConversionRate<infer BMeta> ? UnitConversionRate<FlatternAlias<MultiplyUnitSubvalues<AMeta, BMeta>>> : A : never;
213
236
  /**
214
237
  * Multiply each of the subvalues from a unit with the corresponding once from another unit.
215
238
  *
@@ -231,5 +254,33 @@ type Divide<A extends number, B extends number> = Multiply<A, Inverse<B>>;
231
254
  * @group Unit Subvalue Functions
232
255
  */
233
256
  type DivideUnitSubvalues<A extends UnitSubvalues, B extends UnitSubvalues> = MultiplyUnitSubvalues<A, InverseUnitSubvalues<B>>;
257
+ /**
258
+ * Put a unit to the power of an exponent.
259
+ *
260
+ * @group Unit Functions
261
+ */
262
+ type Pow<T extends number, N extends Exponent> = T extends Unit<infer Class, infer Meta> ? Unit<FlatternAlias<PowUnitSubvalues<Class, N>>, FlatternAlias<PowUnitSubvalues<Meta, N>>> : T extends AbstractUnit<infer Class> ? AbstractUnit<FlatternAlias<PowUnitSubvalues<Class, N>>> : T extends UnitConversionRate<infer Meta> ? UnitConversionRate<FlatternAlias<PowUnitSubvalues<Meta, N>>> : number;
263
+ /**
264
+ * Put each subvalue of a unit to the power of an exponent.
265
+ *
266
+ * @group Unit Subvalue Functions
267
+ */
268
+ type PowUnitSubvalues<T extends UnitSubvalues, E extends Exponent> = ExcludeUnitZeroSubvalues<{
269
+ [S in keyof T]: MultiplyExponents<GetExponent<T, S>, E>;
270
+ }>;
271
+ /**
272
+ * Take the nth root of a unit.
273
+ *
274
+ * @group Unit Functions
275
+ */
276
+ type Root<T extends number, N extends Exponent> = T extends Unit<infer Class, infer Meta> ? Unit<FlatternAlias<RootUnitSubvalues<Class, N>>, FlatternAlias<RootUnitSubvalues<Meta, N>>> : T extends AbstractUnit<infer Class> ? AbstractUnit<FlatternAlias<RootUnitSubvalues<Class, N>>> : T extends UnitConversionRate<infer Meta> ? UnitConversionRate<FlatternAlias<RootUnitSubvalues<Meta, N>>> : number;
277
+ /**
278
+ * Take the nth root of each subvalue of a unit.
279
+ *
280
+ * @group Unit Subvalue Functions
281
+ */
282
+ type RootUnitSubvalues<T extends UnitSubvalues, E extends Exponent> = ExcludeUnitZeroSubvalues<{
283
+ [S in keyof T]: DivideExponents<GetExponent<T, S>, E>;
284
+ }>;
234
285
 
235
- export { AbstractUnit as A, Divide as D, Exactify as E, Inverse as I, Multiply as M, NegativeExponent as N, SubExponents as S, UnknownUnit as U, Unit as a, UnknownAbstractUnit as b, DivideUnitExponents as c, AbstractUnitFrom as d, UnitSubvalues as e, UnitMeta as f, UnknownUnitMeta as g, UnitFrom as h, UnitClass as i, Exponent as j, UnitConversionRate as k, MultiplyUnitExponents as l, UnknownUnitClass as m, InverseUnitSubvalues as n, UnitConversionRateFrom as o, DivideExponents as p, MultiplyExponents as q, SumExponents as r, DivideUnitSubvalues as s, MultiplyUnitSubvalues as t };
286
+ export { AbstractUnit as A, DivideExponents as D, Exponent as E, Inverse as I, MultiplyExponents as M, NegateExponent as N, Pow as P, Root as R, SubExponents as S, Unit as U, AbstractUnitFrom as a, UnitClass as b, UnitConversionRate as c, UnitConversionRateFrom as d, UnitFrom as e, UnitMeta as f, UnitSubvalues as g, UnknownAbstractUnit as h, UnknownUnit as i, UnknownUnitClass as j, UnknownUnitConversionRate as k, UnknownUnitMeta as l, NegativeExponent as m, NegExponent as n, PosExponent as o, SumExponents as p, Divide as q, DivideUnitSubvalues as r, InverseUnitSubvalues as s, Multiply as t, MultiplyUnitSubvalues as u, PowUnitSubvalues as v, RootUnitSubvalues as w, Exactify as x };
@@ -1,16 +1,32 @@
1
1
  /**
2
2
  * @file Autogenerated File - Don't manually edit.
3
3
  */
4
+ /**
5
+ * All the supported positive exponent values.
6
+ *
7
+ * @group Unit Components
8
+ */
9
+ type PosExponent = 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12;
10
+ /**
11
+ * All the supported negative exponent values.
12
+ *
13
+ * @group Unit Components
14
+ */
15
+ type NegExponent = -1 | -2 | -3 | -4 | -5 | -6 | -7 | -8 | -9 | -10 | -11 | -12;
4
16
  /**
5
17
  * All the supported exponent values.
6
18
  *
7
19
  * @group Unit Components
8
20
  */
9
- type Exponent = 0 | 1 | -1 | 2 | -2 | 3 | -3 | 4 | -4 | 5 | -5 | 6 | -6 | 7 | -7 | 8 | -8 | 9 | -9 | 10 | -10 | 11 | -11 | 12 | -12;
21
+ type Exponent = 0 | PosExponent | NegExponent;
10
22
  /**
11
23
  * @group Exponent Functions
12
24
  */
13
- type NegativeExponent<T extends Exponent> = T extends 0 ? 0 : T extends 1 ? -1 : T extends -1 ? 1 : T extends 2 ? -2 : T extends -2 ? 2 : T extends 3 ? -3 : T extends -3 ? 3 : T extends 4 ? -4 : T extends -4 ? 4 : T extends 5 ? -5 : T extends -5 ? 5 : T extends 6 ? -6 : T extends -6 ? 6 : T extends 7 ? -7 : T extends -7 ? 7 : T extends 8 ? -8 : T extends -8 ? 8 : T extends 9 ? -9 : T extends -9 ? 9 : T extends 10 ? -10 : T extends -10 ? 10 : T extends 11 ? -11 : T extends -11 ? 11 : T extends 12 ? -12 : T extends -12 ? 12 : never;
25
+ type NegateExponent<T extends Exponent> = MultiplyExponents<T, -1>;
26
+ /**
27
+ * @depreated Use {@link NegateExponent} instead.
28
+ */
29
+ type NegativeExponent<T extends Exponent> = NegateExponent<T>;
14
30
  /**
15
31
  * @group Exponent Functions
16
32
  */
@@ -90,7 +106,7 @@ type Unit<C extends UnitSubvalues, M extends UnitSubvalues = {}> = number & {
90
106
  *
91
107
  * @group Unit Generators
92
108
  */
93
- type UnitFrom<C extends UnknownUnitClass, M extends UnknownUnitMeta = UnitMeta<{}>> = C extends UnitClass<infer A> ? M extends UnitMeta<infer B> ? Unit<UnitSubvalues extends A ? {} : A, UnitSubvalues extends B ? {} : B> : never : never;
109
+ type UnitFrom<C extends UnknownUnitClass, M extends UnknownUnitMeta = UnitMeta<{}>> = C extends UnitClass<infer A> ? M extends UnitMeta<infer B> ? Unit<A, B> : never : never;
94
110
  /**
95
111
  * A {@link Unit} without any {@link UnitClass}.
96
112
  *
@@ -98,13 +114,15 @@ type UnitFrom<C extends UnknownUnitClass, M extends UnknownUnitMeta = UnitMeta<{
98
114
  *
99
115
  * @group Unit Generators
100
116
  */
101
- type UnitConversionRate<M extends UnitSubvalues> = Unit<{}, M>;
117
+ type UnitConversionRate<M extends UnitSubvalues> = number & {
118
+ readonly __uom_types__unit_meta: UnitMeta<M>;
119
+ };
102
120
  /**
103
121
  * Create a {@link UnitConversionRate} from already existing {@link UnitMeta}.
104
122
  *
105
123
  * @group Unit Generators
106
124
  */
107
- type UnitConversionRateFrom<M extends UnknownUnitMeta> = M extends UnitMeta<infer A> ? UnitConversionRate<UnitSubvalues extends A ? {} : A> : never;
125
+ type UnitConversionRateFrom<M extends UnknownUnitMeta> = M extends UnitMeta<infer A> ? UnitConversionRate<A> : never;
108
126
  /**
109
127
  * Used to determine what a unit is of. For example, length, volume, mass etc.
110
128
  *
@@ -138,6 +156,14 @@ type UnknownUnit = UnknownAbstractUnit & {
138
156
  type UnknownAbstractUnit = number & {
139
157
  readonly __uom_types__unit_class: UnknownUnitClass;
140
158
  };
159
+ /**
160
+ * An {@link UnitConversionRate} that we don't know anything about.
161
+ *
162
+ * @group Unknown Units
163
+ */
164
+ type UnknownUnitConversionRate = number & {
165
+ readonly __uom_types__unit_meta: UnknownUnitMeta;
166
+ };
141
167
  /**
142
168
  * A {@link UnitClass} that we don't know anything about.
143
169
  *
@@ -169,47 +195,44 @@ type UnknownUnitKeyValues = {
169
195
  */
170
196
  type UnitSubvalues = Record<string, Exponent>;
171
197
 
172
- /**
173
- * Multiple the exponent values of a unit by a number.
174
- *
175
- * @group Unit Functions
176
- */
177
- type MultiplyUnitExponents<T extends number, E extends Exponent> = T extends Unit<infer Config, infer Meta> ? Unit<FlatternAlias<MultiplyUnitSubvaluesExponents<Config, E>>, FlatternAlias<MultiplyUnitSubvaluesExponents<Meta, E>>> : T extends AbstractUnit<infer Config> ? AbstractUnit<FlatternAlias<MultiplyUnitSubvaluesExponents<Config, E>>> : number;
178
- type MultiplyUnitSubvaluesExponents<T extends UnitSubvalues, E extends Exponent> = {
179
- [S in keyof T]: MultiplyExponents<GetExponent<T, S>, E>;
180
- };
181
- /**
182
- * Divide the exponent values of a unit by a number.
183
- *
184
- * @group Unit Functions
185
- */
186
- type DivideUnitExponents<T extends number, E extends Exponent> = T extends Unit<infer Config, infer Meta> ? Unit<FlatternAlias<DivideUnitSubvaluesExponents<Config, E>>, FlatternAlias<DivideUnitSubvaluesExponents<Meta, E>>> : T extends AbstractUnit<infer Config> ? AbstractUnit<FlatternAlias<DivideUnitSubvaluesExponents<Config, E>>> : number;
187
- type DivideUnitSubvaluesExponents<T extends UnitSubvalues, E extends Exponent> = {
188
- [S in keyof T]: DivideExponents<GetExponent<T, S>, E>;
189
- };
190
-
191
198
  /**
192
199
  * Take the inverse of a unit.
193
200
  *
194
201
  * @group Unit Functions
195
202
  * @returns `1/X`.
196
203
  */
197
- type Inverse<X extends number> = X extends Unit<infer Config, infer Meta> ? Unit<FlatternAlias<InverseUnitSubvalues<Config>>, FlatternAlias<InverseUnitSubvalues<Meta>>> : X extends AbstractUnit<infer Config> ? AbstractUnit<FlatternAlias<InverseUnitSubvalues<Config>>> : number;
204
+ type Inverse<X extends number> = Pow<X, -1>;
198
205
  /**
199
206
  * Inverses each of the subvalues.
200
207
  *
201
208
  * @group Unit Subvalue Functions
202
209
  */
203
- type InverseUnitSubvalues<T extends UnitSubvalues> = {
204
- [E in keyof T]: NegativeExponent<T[E]>;
205
- };
210
+ type InverseUnitSubvalues<T extends UnitSubvalues> = PowUnitSubvalues<T, -1>;
206
211
  /**
207
212
  * Multiply a unit by another unit.
208
213
  *
209
214
  * @group Unit Functions
210
215
  * @returns `A⋅B`
211
216
  */
212
- type Multiply<A extends number, B extends number> = A extends Unit<infer AConfig, infer AMeta> ? B extends Unit<infer BConfig, infer BMeta> ? Unit<FlatternAlias<MultiplyUnitSubvalues<AConfig, BConfig>>, FlatternAlias<MultiplyUnitSubvalues<AMeta, BMeta>>> : B extends UnknownAbstractUnit ? never : A : B extends UnknownUnit ? A extends UnknownAbstractUnit ? never : B : A extends AbstractUnit<infer AConfig> ? B extends AbstractUnit<infer BConfig> ? AbstractUnit<FlatternAlias<MultiplyUnitSubvalues<AConfig, BConfig>>> : A : B extends UnknownAbstractUnit ? B : number;
217
+ type Multiply<A extends number, B extends number> = A extends UnknownUnit ? MultiplyHelperUnit<A, B> : B extends UnknownUnit ? MultiplyHelperUnit<B, A> : A extends UnknownAbstractUnit ? MultiplyHelperAbstractUnit<A, B> : B extends UnknownAbstractUnit ? MultiplyHelperAbstractUnit<B, A> : A extends UnknownUnitConversionRate ? MultiplyHelperUnitConversionRate<A, B> : B extends UnknownUnitConversionRate ? MultiplyHelperUnitConversionRate<B, A> : number;
218
+ /**
219
+ * Multiple a Unit by a Unit, AbstractUnit, UnitConversionRate or number
220
+ *
221
+ * @internal
222
+ */
223
+ type MultiplyHelperUnit<A extends UnknownUnit, B extends number> = A extends Unit<infer AClass, infer AMeta> ? B extends Unit<infer BClass, infer BMeta> ? Unit<FlatternAlias<MultiplyUnitSubvalues<AClass, BClass>>, FlatternAlias<MultiplyUnitSubvalues<AMeta, BMeta>>> : B extends AbstractUnit<infer BClass> ? Unit<FlatternAlias<MultiplyUnitSubvalues<AClass, BClass>>, AMeta> : B extends UnitConversionRate<infer BMeta> ? Unit<AClass, FlatternAlias<MultiplyUnitSubvalues<AMeta, BMeta>>> : A : never;
224
+ /**
225
+ * Multiple an AbstractUnit by an AbstractUnit, UnitConversionRate or number
226
+ *
227
+ * @internal
228
+ */
229
+ type MultiplyHelperAbstractUnit<A extends UnknownAbstractUnit, B extends number> = A extends AbstractUnit<infer AClass> ? B extends AbstractUnit<infer BClass> ? AbstractUnit<FlatternAlias<MultiplyUnitSubvalues<AClass, BClass>>> : B extends UnitConversionRate<infer BMeta> ? Unit<AClass, BMeta> : A : never;
230
+ /**
231
+ * Multiple an UnitConversionRate by a UnitConversionRate or number
232
+ *
233
+ * @internal
234
+ */
235
+ type MultiplyHelperUnitConversionRate<A extends UnknownUnitConversionRate, B extends number> = A extends UnitConversionRate<infer AMeta> ? B extends UnitConversionRate<infer BMeta> ? UnitConversionRate<FlatternAlias<MultiplyUnitSubvalues<AMeta, BMeta>>> : A : never;
213
236
  /**
214
237
  * Multiply each of the subvalues from a unit with the corresponding once from another unit.
215
238
  *
@@ -231,5 +254,33 @@ type Divide<A extends number, B extends number> = Multiply<A, Inverse<B>>;
231
254
  * @group Unit Subvalue Functions
232
255
  */
233
256
  type DivideUnitSubvalues<A extends UnitSubvalues, B extends UnitSubvalues> = MultiplyUnitSubvalues<A, InverseUnitSubvalues<B>>;
257
+ /**
258
+ * Put a unit to the power of an exponent.
259
+ *
260
+ * @group Unit Functions
261
+ */
262
+ type Pow<T extends number, N extends Exponent> = T extends Unit<infer Class, infer Meta> ? Unit<FlatternAlias<PowUnitSubvalues<Class, N>>, FlatternAlias<PowUnitSubvalues<Meta, N>>> : T extends AbstractUnit<infer Class> ? AbstractUnit<FlatternAlias<PowUnitSubvalues<Class, N>>> : T extends UnitConversionRate<infer Meta> ? UnitConversionRate<FlatternAlias<PowUnitSubvalues<Meta, N>>> : number;
263
+ /**
264
+ * Put each subvalue of a unit to the power of an exponent.
265
+ *
266
+ * @group Unit Subvalue Functions
267
+ */
268
+ type PowUnitSubvalues<T extends UnitSubvalues, E extends Exponent> = ExcludeUnitZeroSubvalues<{
269
+ [S in keyof T]: MultiplyExponents<GetExponent<T, S>, E>;
270
+ }>;
271
+ /**
272
+ * Take the nth root of a unit.
273
+ *
274
+ * @group Unit Functions
275
+ */
276
+ type Root<T extends number, N extends Exponent> = T extends Unit<infer Class, infer Meta> ? Unit<FlatternAlias<RootUnitSubvalues<Class, N>>, FlatternAlias<RootUnitSubvalues<Meta, N>>> : T extends AbstractUnit<infer Class> ? AbstractUnit<FlatternAlias<RootUnitSubvalues<Class, N>>> : T extends UnitConversionRate<infer Meta> ? UnitConversionRate<FlatternAlias<RootUnitSubvalues<Meta, N>>> : number;
277
+ /**
278
+ * Take the nth root of each subvalue of a unit.
279
+ *
280
+ * @group Unit Subvalue Functions
281
+ */
282
+ type RootUnitSubvalues<T extends UnitSubvalues, E extends Exponent> = ExcludeUnitZeroSubvalues<{
283
+ [S in keyof T]: DivideExponents<GetExponent<T, S>, E>;
284
+ }>;
234
285
 
235
- export { AbstractUnit as A, Divide as D, Exactify as E, Inverse as I, Multiply as M, NegativeExponent as N, SubExponents as S, UnknownUnit as U, Unit as a, UnknownAbstractUnit as b, DivideUnitExponents as c, AbstractUnitFrom as d, UnitSubvalues as e, UnitMeta as f, UnknownUnitMeta as g, UnitFrom as h, UnitClass as i, Exponent as j, UnitConversionRate as k, MultiplyUnitExponents as l, UnknownUnitClass as m, InverseUnitSubvalues as n, UnitConversionRateFrom as o, DivideExponents as p, MultiplyExponents as q, SumExponents as r, DivideUnitSubvalues as s, MultiplyUnitSubvalues as t };
286
+ export { AbstractUnit as A, DivideExponents as D, Exponent as E, Inverse as I, MultiplyExponents as M, NegateExponent as N, Pow as P, Root as R, SubExponents as S, Unit as U, AbstractUnitFrom as a, UnitClass as b, UnitConversionRate as c, UnitConversionRateFrom as d, UnitFrom as e, UnitMeta as f, UnitSubvalues as g, UnknownAbstractUnit as h, UnknownUnit as i, UnknownUnitClass as j, UnknownUnitConversionRate as k, UnknownUnitMeta as l, NegativeExponent as m, NegExponent as n, PosExponent as o, SumExponents as p, Divide as q, DivideUnitSubvalues as r, InverseUnitSubvalues as s, Multiply as t, MultiplyUnitSubvalues as u, PowUnitSubvalues as v, RootUnitSubvalues as w, Exactify as x };
@@ -61,6 +61,14 @@ function modSafe(a) {
61
61
  function pow(exponent) {
62
62
  return (base) => (base ** exponent);
63
63
  }
64
+ /**
65
+ * Take the nth root of a number.
66
+ *
67
+ * @category Math
68
+ */
69
+ function root(exponent) {
70
+ return (base) => (base ** (1 / exponent));
71
+ }
64
72
  /**
65
73
  * Equal: Compare if a value is equal to the given value.
66
74
  *
@@ -113,4 +121,5 @@ exports.mod = mod;
113
121
  exports.modSafe = modSafe;
114
122
  exports.mul = mul;
115
123
  exports.pow = pow;
124
+ exports.root = root;
116
125
  exports.sub = sub;
@@ -1,4 +1,4 @@
1
- import { M as Multiply, D as Divide, U as UnknownUnit, b as UnknownAbstractUnit, I as Inverse, a as Unit, A as AbstractUnit, c as DivideUnitExponents } from './_index.cjs';
1
+ import { t as Multiply, q as Divide, i as UnknownUnit, h as UnknownAbstractUnit, E as Exponent, P as Pow, R as Root, o as PosExponent } from './_units.cjs';
2
2
 
3
3
  /**
4
4
  * @module uom-types/functions/higher-order
@@ -43,13 +43,20 @@ declare function mod<T extends number>(a: OperationIO<T>): (b: OperationIO<T>) =
43
43
  * @category Math
44
44
  */
45
45
  declare function modSafe<T extends number>(a: OperationIO<T>): (b: OperationIO<T>) => OperationIO<T>;
46
- type PowFunction<E extends number, B extends number> = E extends UnknownUnit ? never : E extends UnknownAbstractUnit ? never : E extends -1 ? (b: B) => Inverse<B> : E extends 0 ? (b: B) => B extends UnknownUnit ? Unit<{}> : B extends UnknownAbstractUnit ? AbstractUnit<{}> : 1 : E extends 0.5 ? (b: B) => DivideUnitExponents<B, 2> : E extends 1 ? (b: B) => B : E extends 2 ? (b: B) => Multiply<B, B> : E extends 3 ? (b: B) => Multiply<B, Multiply<B, B>> : E extends 4 ? (b: B) => Multiply<B, Multiply<B, Multiply<B, B>>> : (b: B) => number;
46
+ type PowFunction<E extends number, B extends number> = E extends UnknownUnit ? never : E extends UnknownAbstractUnit ? never : E extends Exponent ? (b: B) => Pow<B, E> : E extends 0.5 ? (b: B) => Root<B, 2> : (b: B) => number;
47
47
  /**
48
48
  * Put a number to the power of the given value.
49
49
  *
50
50
  * @category Math
51
51
  */
52
52
  declare function pow<E extends number>(exponent: E): <B extends number>(base: Parameters<PowFunction<E, B>>[0]) => ReturnType<PowFunction<E, B>>;
53
+ type RootFunction<E extends number, B extends number> = E extends UnknownUnit ? never : E extends UnknownAbstractUnit ? never : E extends PosExponent ? (b: B) => Root<B, E> : (b: B) => number;
54
+ /**
55
+ * Take the nth root of a number.
56
+ *
57
+ * @category Math
58
+ */
59
+ declare function root<N extends number>(exponent: N): <B extends number>(base: Parameters<RootFunction<N, B>>[0]) => ReturnType<RootFunction<N, B>>;
53
60
  /**
54
61
  * Equal: Compare if a value is equal to the given value.
55
62
  *
@@ -81,4 +88,4 @@ declare function lt<T extends number>(a: OperationIO<T>): (b: OperationIO<T>) =>
81
88
  */
82
89
  declare function lte<T extends number>(a: OperationIO<T>): (b: OperationIO<T>) => boolean;
83
90
 
84
- export { add, div, eq, gt, gte, lt, lte, mod, modSafe, mul, pow, sub };
91
+ export { add, div, eq, gt, gte, lt, lte, mod, modSafe, mul, pow, root, sub };
@@ -1,4 +1,4 @@
1
- import { M as Multiply, D as Divide, U as UnknownUnit, b as UnknownAbstractUnit, I as Inverse, a as Unit, A as AbstractUnit, c as DivideUnitExponents } from './_index.mjs';
1
+ import { t as Multiply, q as Divide, i as UnknownUnit, h as UnknownAbstractUnit, E as Exponent, P as Pow, R as Root, o as PosExponent } from './_units.mjs';
2
2
 
3
3
  /**
4
4
  * @module uom-types/functions/higher-order
@@ -43,13 +43,20 @@ declare function mod<T extends number>(a: OperationIO<T>): (b: OperationIO<T>) =
43
43
  * @category Math
44
44
  */
45
45
  declare function modSafe<T extends number>(a: OperationIO<T>): (b: OperationIO<T>) => OperationIO<T>;
46
- type PowFunction<E extends number, B extends number> = E extends UnknownUnit ? never : E extends UnknownAbstractUnit ? never : E extends -1 ? (b: B) => Inverse<B> : E extends 0 ? (b: B) => B extends UnknownUnit ? Unit<{}> : B extends UnknownAbstractUnit ? AbstractUnit<{}> : 1 : E extends 0.5 ? (b: B) => DivideUnitExponents<B, 2> : E extends 1 ? (b: B) => B : E extends 2 ? (b: B) => Multiply<B, B> : E extends 3 ? (b: B) => Multiply<B, Multiply<B, B>> : E extends 4 ? (b: B) => Multiply<B, Multiply<B, Multiply<B, B>>> : (b: B) => number;
46
+ type PowFunction<E extends number, B extends number> = E extends UnknownUnit ? never : E extends UnknownAbstractUnit ? never : E extends Exponent ? (b: B) => Pow<B, E> : E extends 0.5 ? (b: B) => Root<B, 2> : (b: B) => number;
47
47
  /**
48
48
  * Put a number to the power of the given value.
49
49
  *
50
50
  * @category Math
51
51
  */
52
52
  declare function pow<E extends number>(exponent: E): <B extends number>(base: Parameters<PowFunction<E, B>>[0]) => ReturnType<PowFunction<E, B>>;
53
+ type RootFunction<E extends number, B extends number> = E extends UnknownUnit ? never : E extends UnknownAbstractUnit ? never : E extends PosExponent ? (b: B) => Root<B, E> : (b: B) => number;
54
+ /**
55
+ * Take the nth root of a number.
56
+ *
57
+ * @category Math
58
+ */
59
+ declare function root<N extends number>(exponent: N): <B extends number>(base: Parameters<RootFunction<N, B>>[0]) => ReturnType<RootFunction<N, B>>;
53
60
  /**
54
61
  * Equal: Compare if a value is equal to the given value.
55
62
  *
@@ -81,4 +88,4 @@ declare function lt<T extends number>(a: OperationIO<T>): (b: OperationIO<T>) =>
81
88
  */
82
89
  declare function lte<T extends number>(a: OperationIO<T>): (b: OperationIO<T>) => boolean;
83
90
 
84
- export { add, div, eq, gt, gte, lt, lte, mod, modSafe, mul, pow, sub };
91
+ export { add, div, eq, gt, gte, lt, lte, mod, modSafe, mul, pow, root, sub };