uom-types 5.0.0 → 5.1.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/CHANGELOG.md +14 -0
- package/dist/chunks/B2m_qd8-.mjs +252 -0
- package/dist/chunks/Cm6vkgfO.cjs +289 -0
- package/dist/chunks/nRDIxMhl.mjs +483 -0
- package/dist/chunks/ph65nozB.cjs +564 -0
- package/dist/converters.cjs +87 -0
- package/dist/converters.d.cts +569 -0
- package/dist/converters.d.mts +569 -0
- package/dist/converters.mjs +2 -0
- package/dist/index.cjs +118 -844
- package/dist/index.d.cts +91 -147
- package/dist/index.d.mts +91 -147
- package/dist/index.mjs +2 -732
- package/dist/math.cjs +42 -0
- package/dist/math.d.cts +458 -0
- package/dist/math.d.mts +458 -0
- package/dist/math.mjs +1 -0
- package/dist/types.d.cts +247 -0
- package/dist/types.d.mts +247 -0
- package/dist/units.d.cts +3603 -0
- package/dist/units.d.mts +3603 -0
- package/package.json +93 -72
package/dist/index.d.cts
CHANGED
|
@@ -41,79 +41,44 @@ export type MultiplyExponents<A extends Exponent, B extends Exponent> = A extend
|
|
|
41
41
|
* @group Exponent Functions
|
|
42
42
|
*/
|
|
43
43
|
export type DivideExponents<A extends Exponent, B extends Exponent> = B extends 0 ? never : B extends 1 ? A extends 0 ? 0 : A extends 1 ? 1 : A extends -1 ? -1 : A extends 2 ? 2 : A extends -2 ? -2 : A extends 3 ? 3 : A extends -3 ? -3 : A extends 4 ? 4 : A extends -4 ? -4 : A extends 5 ? 5 : A extends -5 ? -5 : A extends 6 ? 6 : A extends -6 ? -6 : A extends 7 ? 7 : A extends -7 ? -7 : A extends 8 ? 8 : A extends -8 ? -8 : A extends 9 ? 9 : A extends -9 ? -9 : A extends 10 ? 10 : A extends -10 ? -10 : A extends 11 ? 11 : A extends -11 ? -11 : A extends 12 ? 12 : A extends -12 ? -12 : never : B extends -1 ? A extends 0 ? 0 : A extends 1 ? -1 : A extends -1 ? 1 : A extends 2 ? -2 : A extends -2 ? 2 : A extends 3 ? -3 : A extends -3 ? 3 : A extends 4 ? -4 : A extends -4 ? 4 : A extends 5 ? -5 : A extends -5 ? 5 : A extends 6 ? -6 : A extends -6 ? 6 : A extends 7 ? -7 : A extends -7 ? 7 : A extends 8 ? -8 : A extends -8 ? 8 : A extends 9 ? -9 : A extends -9 ? 9 : A extends 10 ? -10 : A extends -10 ? 10 : A extends 11 ? -11 : A extends -11 ? 11 : A extends 12 ? -12 : A extends -12 ? 12 : never : B extends 2 ? A extends 0 ? 0 : A extends 2 ? 1 : A extends -2 ? -1 : A extends 4 ? 2 : A extends -4 ? -2 : A extends 6 ? 3 : A extends -6 ? -3 : A extends 8 ? 4 : A extends -8 ? -4 : A extends 10 ? 5 : A extends -10 ? -5 : A extends 12 ? 6 : A extends -12 ? -6 : never : B extends -2 ? A extends 0 ? 0 : A extends 2 ? -1 : A extends -2 ? 1 : A extends 4 ? -2 : A extends -4 ? 2 : A extends 6 ? -3 : A extends -6 ? 3 : A extends 8 ? -4 : A extends -8 ? 4 : A extends 10 ? -5 : A extends -10 ? 5 : A extends 12 ? -6 : A extends -12 ? 6 : never : B extends 3 ? A extends 0 ? 0 : A extends 3 ? 1 : A extends -3 ? -1 : A extends 6 ? 2 : A extends -6 ? -2 : A extends 9 ? 3 : A extends -9 ? -3 : A extends 12 ? 4 : A extends -12 ? -4 : never : B extends -3 ? A extends 0 ? 0 : A extends 3 ? -1 : A extends -3 ? 1 : A extends 6 ? -2 : A extends -6 ? 2 : A extends 9 ? -3 : A extends -9 ? 3 : A extends 12 ? -4 : A extends -12 ? 4 : never : B extends 4 ? A extends 0 ? 0 : A extends 4 ? 1 : A extends -4 ? -1 : A extends 8 ? 2 : A extends -8 ? -2 : A extends 12 ? 3 : A extends -12 ? -3 : never : B extends -4 ? A extends 0 ? 0 : A extends 4 ? -1 : A extends -4 ? 1 : A extends 8 ? -2 : A extends -8 ? 2 : A extends 12 ? -3 : A extends -12 ? 3 : never : B extends 5 ? A extends 0 ? 0 : A extends 5 ? 1 : A extends -5 ? -1 : A extends 10 ? 2 : A extends -10 ? -2 : never : B extends -5 ? A extends 0 ? 0 : A extends 5 ? -1 : A extends -5 ? 1 : A extends 10 ? -2 : A extends -10 ? 2 : never : B extends 6 ? A extends 0 ? 0 : A extends 6 ? 1 : A extends -6 ? -1 : A extends 12 ? 2 : A extends -12 ? -2 : never : B extends -6 ? A extends 0 ? 0 : A extends 6 ? -1 : A extends -6 ? 1 : A extends 12 ? -2 : A extends -12 ? 2 : never : B extends 7 ? A extends 0 ? 0 : A extends 7 ? 1 : A extends -7 ? -1 : never : B extends -7 ? A extends 0 ? 0 : A extends 7 ? -1 : A extends -7 ? 1 : never : B extends 8 ? A extends 0 ? 0 : A extends 8 ? 1 : A extends -8 ? -1 : never : B extends -8 ? A extends 0 ? 0 : A extends 8 ? -1 : A extends -8 ? 1 : never : B extends 9 ? A extends 0 ? 0 : A extends 9 ? 1 : A extends -9 ? -1 : never : B extends -9 ? A extends 0 ? 0 : A extends 9 ? -1 : A extends -9 ? 1 : never : B extends 10 ? A extends 0 ? 0 : A extends 10 ? 1 : A extends -10 ? -1 : never : B extends -10 ? A extends 0 ? 0 : A extends 10 ? -1 : A extends -10 ? 1 : never : B extends 11 ? A extends 0 ? 0 : A extends 11 ? 1 : A extends -11 ? -1 : never : B extends -11 ? A extends 0 ? 0 : A extends 11 ? -1 : A extends -11 ? 1 : never : B extends 12 ? A extends 0 ? 0 : A extends 12 ? 1 : A extends -12 ? -1 : never : B extends -12 ? A extends 0 ? 0 : A extends 12 ? -1 : A extends -12 ? 1 : never : never;
|
|
44
|
-
|
|
45
|
-
* Available for providing custom branding.
|
|
46
|
-
*/
|
|
47
|
-
export interface Brand {
|
|
44
|
+
interface Brand {
|
|
48
45
|
}
|
|
49
|
-
|
|
50
|
-
* Brand with the unit meta.
|
|
51
|
-
*/
|
|
52
|
-
export type BrandUnitMeta<UM extends UnknownUnitMeta> = Brand & {
|
|
46
|
+
type BrandUnitMeta<UM extends UnknownUnitMeta> = Brand & {
|
|
53
47
|
__uom_types: {
|
|
54
48
|
unitMeta: UM;
|
|
55
49
|
};
|
|
56
50
|
};
|
|
57
|
-
|
|
58
|
-
* Brand with the unit class.
|
|
59
|
-
*/
|
|
60
|
-
export type BrandUnitClass<UC extends UnknownUnitClass> = Brand & {
|
|
51
|
+
type BrandUnitClass<UC extends UnknownUnitClass> = Brand & {
|
|
61
52
|
__uom_types: {
|
|
62
53
|
unitClass: UC;
|
|
63
54
|
};
|
|
64
55
|
};
|
|
65
|
-
|
|
66
|
-
* Brand that it is a unit class.
|
|
67
|
-
*/
|
|
68
|
-
export type BrandUnitClassType = Brand & {
|
|
56
|
+
type BrandUnitClassType = Brand & {
|
|
69
57
|
__uom_types: {
|
|
70
58
|
unitClassType: true;
|
|
71
59
|
};
|
|
72
60
|
};
|
|
73
|
-
|
|
74
|
-
* Brand with the unit keys and value.
|
|
75
|
-
*/
|
|
76
|
-
export type BrandUnitKeyValues<K, V> = Brand & Readonly<{
|
|
61
|
+
type BrandUnitKeyValues<K, V> = Brand & Readonly<{
|
|
77
62
|
__uom_types: {
|
|
78
63
|
keys: K;
|
|
79
64
|
value: V;
|
|
80
65
|
};
|
|
81
66
|
}>;
|
|
82
|
-
|
|
83
|
-
* Remove all key from the object that are `never`.
|
|
84
|
-
*/
|
|
85
|
-
export type RemoveNeverValues<T extends object> = {
|
|
67
|
+
type RemoveNeverValues<T extends object> = {
|
|
86
68
|
[K in keyof T as [
|
|
87
69
|
T[K]
|
|
88
70
|
] extends [
|
|
89
71
|
never
|
|
90
72
|
] ? never : K]: T[K];
|
|
91
73
|
};
|
|
92
|
-
|
|
93
|
-
* Exclude all unit subvalues with an exponent value of zero.
|
|
94
|
-
*/
|
|
95
|
-
export type ExcludeUnitZeroSubvalues<U extends UnitSubvalues> = {
|
|
74
|
+
type ExcludeUnitZeroSubvalues<U extends UnitSubvalues> = {
|
|
96
75
|
[S in keyof U as S extends string ? (U[S] extends 0 ? never : S) : never]: U[S];
|
|
97
76
|
};
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
*/
|
|
101
|
-
export type GetExponent<C extends UnitSubvalues, S> = S extends keyof C ? C[S] : 0;
|
|
102
|
-
/**
|
|
103
|
-
* Flatten a complex type such as a union or intersection of objects into a
|
|
104
|
-
* single object.
|
|
105
|
-
*
|
|
106
|
-
* @internal
|
|
107
|
-
*/
|
|
108
|
-
export type FlatternAlias<T> = {
|
|
77
|
+
type GetExponent<C extends UnitSubvalues, S> = S extends keyof C ? C[S] : 0;
|
|
78
|
+
type FlatternAlias<T> = {
|
|
109
79
|
[P in keyof T]: T[P];
|
|
110
80
|
} & {};
|
|
111
|
-
|
|
112
|
-
* Make `T` exactly `T`.
|
|
113
|
-
*
|
|
114
|
-
* @internal
|
|
115
|
-
*/
|
|
116
|
-
export type Exactify<T, U extends T> = T & {
|
|
81
|
+
type Exactify<T, U extends T> = T & {
|
|
117
82
|
[K in keyof U]: K extends keyof T ? U[K] : never;
|
|
118
83
|
};
|
|
119
84
|
/**
|
|
@@ -201,115 +166,22 @@ export type UnknownUnitClass = UnknownUnitKeyValues & BrandUnitClassType;
|
|
|
201
166
|
export type UnknownUnitMeta = UnknownUnitKeyValues & Readonly<{
|
|
202
167
|
__uno_types__unit_meta_type: true;
|
|
203
168
|
}>;
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
*/
|
|
207
|
-
export type UnitKeyValues<T extends UnitSubvalues> = BrandUnitKeyValues<keyof ExcludeUnitZeroSubvalues<T> extends string ? keyof ExcludeUnitZeroSubvalues<T> : never, RemoveNeverValues<T>>;
|
|
208
|
-
/**
|
|
209
|
-
* @internal
|
|
210
|
-
*/
|
|
211
|
-
export type UnknownUnitKeyValues = BrandUnitKeyValues<string, {}>;
|
|
169
|
+
type UnitKeyValues<T extends UnitSubvalues> = BrandUnitKeyValues<keyof ExcludeUnitZeroSubvalues<T> extends string ? keyof ExcludeUnitZeroSubvalues<T> : never, RemoveNeverValues<T>>;
|
|
170
|
+
type UnknownUnitKeyValues = BrandUnitKeyValues<string, {}>;
|
|
212
171
|
/**
|
|
213
172
|
* A mapping of subvalue of a unit its magnitude.
|
|
214
173
|
*
|
|
215
174
|
* @group Unit Components
|
|
216
175
|
*/
|
|
217
176
|
export type UnitSubvalues = Record<string, Exponent>;
|
|
218
|
-
|
|
219
|
-
* Take the inverse of a unit.
|
|
220
|
-
*
|
|
221
|
-
* @group Unit Functions
|
|
222
|
-
* @returns `1/X`.
|
|
223
|
-
*/
|
|
224
|
-
export type Inverse<X extends number> = Pow<X, -1>;
|
|
225
|
-
/**
|
|
226
|
-
* Inverses each of the subvalues.
|
|
227
|
-
*
|
|
228
|
-
* @group Unit Subvalue Functions
|
|
229
|
-
*/
|
|
230
|
-
export type InverseUnitSubvalues<T extends UnitSubvalues> = PowUnitSubvalues<T, -1>;
|
|
231
|
-
/**
|
|
232
|
-
* Multiply a unit by another unit.
|
|
233
|
-
*
|
|
234
|
-
* @group Unit Functions
|
|
235
|
-
* @returns `A⋅B`
|
|
236
|
-
*/
|
|
237
|
-
export 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;
|
|
238
|
-
/**
|
|
239
|
-
* Multiple a Unit by a Unit, AbstractUnit, UnitConversionRate or number
|
|
240
|
-
*
|
|
241
|
-
* @internal
|
|
242
|
-
*/
|
|
243
|
-
export 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;
|
|
244
|
-
/**
|
|
245
|
-
* Multiple an AbstractUnit by an AbstractUnit, UnitConversionRate or number
|
|
246
|
-
*
|
|
247
|
-
* @internal
|
|
248
|
-
*/
|
|
249
|
-
export 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;
|
|
250
|
-
/**
|
|
251
|
-
* Multiple an UnitConversionRate by a UnitConversionRate or number
|
|
252
|
-
*
|
|
253
|
-
* @internal
|
|
254
|
-
*/
|
|
255
|
-
export 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;
|
|
256
|
-
/**
|
|
257
|
-
* Multiply each of the subvalues from a unit with the corresponding once from another unit.
|
|
258
|
-
*
|
|
259
|
-
* @group Unit Subvalue Functions
|
|
260
|
-
*/
|
|
261
|
-
export type MultiplyUnitSubvalues<A extends UnitSubvalues, B extends UnitSubvalues> = ExcludeUnitZeroSubvalues<{
|
|
262
|
-
[S in keyof A | keyof B]: SumExponents<GetExponent<A, S>, GetExponent<B, S>>;
|
|
263
|
-
}>;
|
|
264
|
-
/**
|
|
265
|
-
* Divide a unit by another unit.
|
|
266
|
-
*
|
|
267
|
-
* @group Unit Functions
|
|
268
|
-
* @returns `A/B`
|
|
269
|
-
*/
|
|
270
|
-
export type Divide<A extends number, B extends number> = Multiply<A, Inverse<B>>;
|
|
271
|
-
/**
|
|
272
|
-
* Divide each of the subvalues from a unit with the corresponding once from another unit.
|
|
273
|
-
*
|
|
274
|
-
* @group Unit Subvalue Functions
|
|
275
|
-
*/
|
|
276
|
-
export type DivideUnitSubvalues<A extends UnitSubvalues, B extends UnitSubvalues> = MultiplyUnitSubvalues<A, InverseUnitSubvalues<B>>;
|
|
277
|
-
/**
|
|
278
|
-
* Put a unit to the power of an exponent.
|
|
279
|
-
*
|
|
280
|
-
* @group Unit Functions
|
|
281
|
-
*/
|
|
282
|
-
export type Pow<B extends number, E extends Exponent> = B extends Unit<infer Class, infer Meta> ? Unit<FlatternAlias<PowUnitSubvalues<Class, E>>, FlatternAlias<PowUnitSubvalues<Meta, E>>> : B extends AbstractUnit<infer Class> ? AbstractUnit<FlatternAlias<PowUnitSubvalues<Class, E>>> : B extends UnitConversionRate<infer Meta> ? UnitConversionRate<FlatternAlias<PowUnitSubvalues<Meta, E>>> : number;
|
|
283
|
-
/**
|
|
284
|
-
* Put each subvalue of a unit to the power of an exponent.
|
|
285
|
-
*
|
|
286
|
-
* @group Unit Subvalue Functions
|
|
287
|
-
*/
|
|
288
|
-
export type PowUnitSubvalues<B extends UnitSubvalues, E extends Exponent> = ExcludeUnitZeroSubvalues<{
|
|
289
|
-
[S in keyof B]: MultiplyExponents<GetExponent<B, S>, E>;
|
|
290
|
-
}>;
|
|
291
|
-
/**
|
|
292
|
-
* Take the nth root of a unit.
|
|
293
|
-
*
|
|
294
|
-
* @group Unit Functions
|
|
295
|
-
*/
|
|
296
|
-
export type Root<B extends number, E extends Exponent> = B extends Unit<infer Class, infer Meta> ? Unit<FlatternAlias<RootUnitSubvalues<Class, E>>, FlatternAlias<RootUnitSubvalues<Meta, E>>> : B extends AbstractUnit<infer Class> ? AbstractUnit<FlatternAlias<RootUnitSubvalues<Class, E>>> : B extends UnitConversionRate<infer Meta> ? UnitConversionRate<FlatternAlias<RootUnitSubvalues<Meta, E>>> : number;
|
|
297
|
-
/**
|
|
298
|
-
* Take the nth root of each subvalue of a unit.
|
|
299
|
-
*
|
|
300
|
-
* @group Unit Subvalue Functions
|
|
301
|
-
*/
|
|
302
|
-
export type RootUnitSubvalues<B extends UnitSubvalues, E extends Exponent> = ExcludeUnitZeroSubvalues<{
|
|
303
|
-
[S in keyof B]: DivideExponents<GetExponent<B, S>, E>;
|
|
304
|
-
}>;
|
|
305
|
-
export type SiUnitKeys = "Second" | "Meter" | "Kilogram" | "Mole" | "Ampere" | "Candela" | "Kelvin" | "Radian";
|
|
177
|
+
type SiUnitKeys = "Second" | "Meter" | "Kilogram" | "Mole" | "Ampere" | "Candela" | "Kelvin" | "Radian";
|
|
306
178
|
/**
|
|
307
179
|
* The {@link UnitClass} that is the base of all {@link Unit}s defined by this library.
|
|
308
180
|
*
|
|
309
181
|
* @group Unit Classes
|
|
310
182
|
*/
|
|
311
183
|
export type BaseUnitClass<T extends Exactify<SiUnitConfig, T>> = UnitClass<T>;
|
|
312
|
-
|
|
184
|
+
type SiUnitConfig = Partial<Record<SiUnitKeys, Exponent>>;
|
|
313
185
|
/**
|
|
314
186
|
* @group Unit Classes
|
|
315
187
|
* @category Angle (Plane)
|
|
@@ -1230,6 +1102,78 @@ export type MagneticPermeabilityUnitFrom<M extends UnknownUnitMeta> = UnitFrom<M
|
|
|
1230
1102
|
* @symbol `H/m`
|
|
1231
1103
|
*/
|
|
1232
1104
|
export type HenryPerMeter = MagneticPermeabilityUnit<{}>;
|
|
1105
|
+
/**
|
|
1106
|
+
* Take the inverse of a unit.
|
|
1107
|
+
*
|
|
1108
|
+
* @group Unit Functions
|
|
1109
|
+
* @returns `1/X`.
|
|
1110
|
+
*/
|
|
1111
|
+
export type Inverse<X extends number> = Pow<X, -1>;
|
|
1112
|
+
/**
|
|
1113
|
+
* Inverses each of the subvalues.
|
|
1114
|
+
*
|
|
1115
|
+
* @group Unit Subvalue Functions
|
|
1116
|
+
*/
|
|
1117
|
+
export type InverseUnitSubvalues<T extends UnitSubvalues> = PowUnitSubvalues<T, -1>;
|
|
1118
|
+
/**
|
|
1119
|
+
* Multiply a unit by another unit.
|
|
1120
|
+
*
|
|
1121
|
+
* @group Unit Functions
|
|
1122
|
+
* @returns `A⋅B`
|
|
1123
|
+
*/
|
|
1124
|
+
export 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;
|
|
1125
|
+
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;
|
|
1126
|
+
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;
|
|
1127
|
+
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;
|
|
1128
|
+
/**
|
|
1129
|
+
* Multiply each of the subvalues from a unit with the corresponding once from another unit.
|
|
1130
|
+
*
|
|
1131
|
+
* @group Unit Subvalue Functions
|
|
1132
|
+
*/
|
|
1133
|
+
export type MultiplyUnitSubvalues<A extends UnitSubvalues, B extends UnitSubvalues> = ExcludeUnitZeroSubvalues<{
|
|
1134
|
+
[S in keyof A | keyof B]: SumExponents<GetExponent<A, S>, GetExponent<B, S>>;
|
|
1135
|
+
}>;
|
|
1136
|
+
/**
|
|
1137
|
+
* Divide a unit by another unit.
|
|
1138
|
+
*
|
|
1139
|
+
* @group Unit Functions
|
|
1140
|
+
* @returns `A/B`
|
|
1141
|
+
*/
|
|
1142
|
+
export type Divide<A extends number, B extends number> = Multiply<A, Inverse<B>>;
|
|
1143
|
+
/**
|
|
1144
|
+
* Divide each of the subvalues from a unit with the corresponding once from another unit.
|
|
1145
|
+
*
|
|
1146
|
+
* @group Unit Subvalue Functions
|
|
1147
|
+
*/
|
|
1148
|
+
export type DivideUnitSubvalues<A extends UnitSubvalues, B extends UnitSubvalues> = MultiplyUnitSubvalues<A, InverseUnitSubvalues<B>>;
|
|
1149
|
+
/**
|
|
1150
|
+
* Put a unit to the power of an exponent.
|
|
1151
|
+
*
|
|
1152
|
+
* @group Unit Functions
|
|
1153
|
+
*/
|
|
1154
|
+
export type Pow<B extends number, E extends Exponent> = B extends Unit<infer Class, infer Meta> ? Unit<FlatternAlias<PowUnitSubvalues<Class, E>>, FlatternAlias<PowUnitSubvalues<Meta, E>>> : B extends AbstractUnit<infer Class> ? AbstractUnit<FlatternAlias<PowUnitSubvalues<Class, E>>> : B extends UnitConversionRate<infer Meta> ? UnitConversionRate<FlatternAlias<PowUnitSubvalues<Meta, E>>> : number;
|
|
1155
|
+
/**
|
|
1156
|
+
* Put each subvalue of a unit to the power of an exponent.
|
|
1157
|
+
*
|
|
1158
|
+
* @group Unit Subvalue Functions
|
|
1159
|
+
*/
|
|
1160
|
+
export type PowUnitSubvalues<B extends UnitSubvalues, E extends Exponent> = ExcludeUnitZeroSubvalues<{
|
|
1161
|
+
[S in keyof B]: MultiplyExponents<GetExponent<B, S>, E>;
|
|
1162
|
+
}>;
|
|
1163
|
+
/**
|
|
1164
|
+
* Take the nth root of a unit.
|
|
1165
|
+
*
|
|
1166
|
+
* @group Unit Functions
|
|
1167
|
+
*/
|
|
1168
|
+
export type Root<B extends number, E extends Exponent> = B extends Unit<infer Class, infer Meta> ? Unit<FlatternAlias<RootUnitSubvalues<Class, E>>, FlatternAlias<RootUnitSubvalues<Meta, E>>> : B extends AbstractUnit<infer Class> ? AbstractUnit<FlatternAlias<RootUnitSubvalues<Class, E>>> : B extends UnitConversionRate<infer Meta> ? UnitConversionRate<FlatternAlias<RootUnitSubvalues<Meta, E>>> : number;
|
|
1169
|
+
/**
|
|
1170
|
+
* Take the nth root of each subvalue of a unit.
|
|
1171
|
+
*
|
|
1172
|
+
* @group Unit Subvalue Functions
|
|
1173
|
+
*/
|
|
1174
|
+
export type RootUnitSubvalues<B extends UnitSubvalues, E extends Exponent> = ExcludeUnitZeroSubvalues<{
|
|
1175
|
+
[S in keyof B]: DivideExponents<GetExponent<B, S>, E>;
|
|
1176
|
+
}>;
|
|
1233
1177
|
/**
|
|
1234
1178
|
* Put the given {@link Unit} to the power of 2.
|
|
1235
1179
|
*
|
|
@@ -4180,7 +4124,7 @@ export declare function cubicMetersToLiters(volume: Cubic<Meter>): Liter;
|
|
|
4180
4124
|
* Convert {@link Liter} to {@link Cubic}<{@link Meter}>.
|
|
4181
4125
|
*/
|
|
4182
4126
|
export declare function litersToCubicMeters(volume: Liter): Cubic<Meter>;
|
|
4183
|
-
|
|
4127
|
+
type OperationIO<T extends number> = [
|
|
4184
4128
|
T
|
|
4185
4129
|
] extends [
|
|
4186
4130
|
UnknownUnit | UnknownAbstractUnit
|
|
@@ -4275,10 +4219,10 @@ export declare function modSafe<T extends number>(a: OperationIO<T>, b: Operatio
|
|
|
4275
4219
|
* @returns A function that takes a integer and returns an integer between zero (inclusive) and `b` (exclusive).
|
|
4276
4220
|
*/
|
|
4277
4221
|
export declare function modSafe<T extends number>(b: OperationIO<T>): (a: OperationIO<T>) => OperationIO<T>;
|
|
4278
|
-
|
|
4279
|
-
|
|
4280
|
-
|
|
4281
|
-
|
|
4222
|
+
type PowResult<B extends number, E extends number> = E extends Unitless ? PowResult<B, number> : E extends UnknownUnit ? never : E extends UnknownAbstractUnit ? never : E extends Exponent ? Pow<B, E> : E extends 0.5 ? Root<B, 2> : B extends Unitless ? B : number;
|
|
4223
|
+
type PowFunction<B extends number, E extends number> = (b: B) => PowResult<B, E>;
|
|
4224
|
+
type RootResult<B extends number, E extends number> = E extends Unitless ? RootResult<B, number> : E extends UnknownUnit ? never : E extends UnknownAbstractUnit ? never : E extends Exponent ? Root<B, E> : E extends 0.5 ? Pow<B, 2> : B extends Unitless ? B : number;
|
|
4225
|
+
type RootFunction<B extends number, E extends number> = (b: B) => RootResult<B, E>;
|
|
4282
4226
|
/**
|
|
4283
4227
|
* Raise a number to the power of another.
|
|
4284
4228
|
*
|
package/dist/index.d.mts
CHANGED
|
@@ -41,79 +41,44 @@ export type MultiplyExponents<A extends Exponent, B extends Exponent> = A extend
|
|
|
41
41
|
* @group Exponent Functions
|
|
42
42
|
*/
|
|
43
43
|
export type DivideExponents<A extends Exponent, B extends Exponent> = B extends 0 ? never : B extends 1 ? A extends 0 ? 0 : A extends 1 ? 1 : A extends -1 ? -1 : A extends 2 ? 2 : A extends -2 ? -2 : A extends 3 ? 3 : A extends -3 ? -3 : A extends 4 ? 4 : A extends -4 ? -4 : A extends 5 ? 5 : A extends -5 ? -5 : A extends 6 ? 6 : A extends -6 ? -6 : A extends 7 ? 7 : A extends -7 ? -7 : A extends 8 ? 8 : A extends -8 ? -8 : A extends 9 ? 9 : A extends -9 ? -9 : A extends 10 ? 10 : A extends -10 ? -10 : A extends 11 ? 11 : A extends -11 ? -11 : A extends 12 ? 12 : A extends -12 ? -12 : never : B extends -1 ? A extends 0 ? 0 : A extends 1 ? -1 : A extends -1 ? 1 : A extends 2 ? -2 : A extends -2 ? 2 : A extends 3 ? -3 : A extends -3 ? 3 : A extends 4 ? -4 : A extends -4 ? 4 : A extends 5 ? -5 : A extends -5 ? 5 : A extends 6 ? -6 : A extends -6 ? 6 : A extends 7 ? -7 : A extends -7 ? 7 : A extends 8 ? -8 : A extends -8 ? 8 : A extends 9 ? -9 : A extends -9 ? 9 : A extends 10 ? -10 : A extends -10 ? 10 : A extends 11 ? -11 : A extends -11 ? 11 : A extends 12 ? -12 : A extends -12 ? 12 : never : B extends 2 ? A extends 0 ? 0 : A extends 2 ? 1 : A extends -2 ? -1 : A extends 4 ? 2 : A extends -4 ? -2 : A extends 6 ? 3 : A extends -6 ? -3 : A extends 8 ? 4 : A extends -8 ? -4 : A extends 10 ? 5 : A extends -10 ? -5 : A extends 12 ? 6 : A extends -12 ? -6 : never : B extends -2 ? A extends 0 ? 0 : A extends 2 ? -1 : A extends -2 ? 1 : A extends 4 ? -2 : A extends -4 ? 2 : A extends 6 ? -3 : A extends -6 ? 3 : A extends 8 ? -4 : A extends -8 ? 4 : A extends 10 ? -5 : A extends -10 ? 5 : A extends 12 ? -6 : A extends -12 ? 6 : never : B extends 3 ? A extends 0 ? 0 : A extends 3 ? 1 : A extends -3 ? -1 : A extends 6 ? 2 : A extends -6 ? -2 : A extends 9 ? 3 : A extends -9 ? -3 : A extends 12 ? 4 : A extends -12 ? -4 : never : B extends -3 ? A extends 0 ? 0 : A extends 3 ? -1 : A extends -3 ? 1 : A extends 6 ? -2 : A extends -6 ? 2 : A extends 9 ? -3 : A extends -9 ? 3 : A extends 12 ? -4 : A extends -12 ? 4 : never : B extends 4 ? A extends 0 ? 0 : A extends 4 ? 1 : A extends -4 ? -1 : A extends 8 ? 2 : A extends -8 ? -2 : A extends 12 ? 3 : A extends -12 ? -3 : never : B extends -4 ? A extends 0 ? 0 : A extends 4 ? -1 : A extends -4 ? 1 : A extends 8 ? -2 : A extends -8 ? 2 : A extends 12 ? -3 : A extends -12 ? 3 : never : B extends 5 ? A extends 0 ? 0 : A extends 5 ? 1 : A extends -5 ? -1 : A extends 10 ? 2 : A extends -10 ? -2 : never : B extends -5 ? A extends 0 ? 0 : A extends 5 ? -1 : A extends -5 ? 1 : A extends 10 ? -2 : A extends -10 ? 2 : never : B extends 6 ? A extends 0 ? 0 : A extends 6 ? 1 : A extends -6 ? -1 : A extends 12 ? 2 : A extends -12 ? -2 : never : B extends -6 ? A extends 0 ? 0 : A extends 6 ? -1 : A extends -6 ? 1 : A extends 12 ? -2 : A extends -12 ? 2 : never : B extends 7 ? A extends 0 ? 0 : A extends 7 ? 1 : A extends -7 ? -1 : never : B extends -7 ? A extends 0 ? 0 : A extends 7 ? -1 : A extends -7 ? 1 : never : B extends 8 ? A extends 0 ? 0 : A extends 8 ? 1 : A extends -8 ? -1 : never : B extends -8 ? A extends 0 ? 0 : A extends 8 ? -1 : A extends -8 ? 1 : never : B extends 9 ? A extends 0 ? 0 : A extends 9 ? 1 : A extends -9 ? -1 : never : B extends -9 ? A extends 0 ? 0 : A extends 9 ? -1 : A extends -9 ? 1 : never : B extends 10 ? A extends 0 ? 0 : A extends 10 ? 1 : A extends -10 ? -1 : never : B extends -10 ? A extends 0 ? 0 : A extends 10 ? -1 : A extends -10 ? 1 : never : B extends 11 ? A extends 0 ? 0 : A extends 11 ? 1 : A extends -11 ? -1 : never : B extends -11 ? A extends 0 ? 0 : A extends 11 ? -1 : A extends -11 ? 1 : never : B extends 12 ? A extends 0 ? 0 : A extends 12 ? 1 : A extends -12 ? -1 : never : B extends -12 ? A extends 0 ? 0 : A extends 12 ? -1 : A extends -12 ? 1 : never : never;
|
|
44
|
-
|
|
45
|
-
* Available for providing custom branding.
|
|
46
|
-
*/
|
|
47
|
-
export interface Brand {
|
|
44
|
+
interface Brand {
|
|
48
45
|
}
|
|
49
|
-
|
|
50
|
-
* Brand with the unit meta.
|
|
51
|
-
*/
|
|
52
|
-
export type BrandUnitMeta<UM extends UnknownUnitMeta> = Brand & {
|
|
46
|
+
type BrandUnitMeta<UM extends UnknownUnitMeta> = Brand & {
|
|
53
47
|
__uom_types: {
|
|
54
48
|
unitMeta: UM;
|
|
55
49
|
};
|
|
56
50
|
};
|
|
57
|
-
|
|
58
|
-
* Brand with the unit class.
|
|
59
|
-
*/
|
|
60
|
-
export type BrandUnitClass<UC extends UnknownUnitClass> = Brand & {
|
|
51
|
+
type BrandUnitClass<UC extends UnknownUnitClass> = Brand & {
|
|
61
52
|
__uom_types: {
|
|
62
53
|
unitClass: UC;
|
|
63
54
|
};
|
|
64
55
|
};
|
|
65
|
-
|
|
66
|
-
* Brand that it is a unit class.
|
|
67
|
-
*/
|
|
68
|
-
export type BrandUnitClassType = Brand & {
|
|
56
|
+
type BrandUnitClassType = Brand & {
|
|
69
57
|
__uom_types: {
|
|
70
58
|
unitClassType: true;
|
|
71
59
|
};
|
|
72
60
|
};
|
|
73
|
-
|
|
74
|
-
* Brand with the unit keys and value.
|
|
75
|
-
*/
|
|
76
|
-
export type BrandUnitKeyValues<K, V> = Brand & Readonly<{
|
|
61
|
+
type BrandUnitKeyValues<K, V> = Brand & Readonly<{
|
|
77
62
|
__uom_types: {
|
|
78
63
|
keys: K;
|
|
79
64
|
value: V;
|
|
80
65
|
};
|
|
81
66
|
}>;
|
|
82
|
-
|
|
83
|
-
* Remove all key from the object that are `never`.
|
|
84
|
-
*/
|
|
85
|
-
export type RemoveNeverValues<T extends object> = {
|
|
67
|
+
type RemoveNeverValues<T extends object> = {
|
|
86
68
|
[K in keyof T as [
|
|
87
69
|
T[K]
|
|
88
70
|
] extends [
|
|
89
71
|
never
|
|
90
72
|
] ? never : K]: T[K];
|
|
91
73
|
};
|
|
92
|
-
|
|
93
|
-
* Exclude all unit subvalues with an exponent value of zero.
|
|
94
|
-
*/
|
|
95
|
-
export type ExcludeUnitZeroSubvalues<U extends UnitSubvalues> = {
|
|
74
|
+
type ExcludeUnitZeroSubvalues<U extends UnitSubvalues> = {
|
|
96
75
|
[S in keyof U as S extends string ? (U[S] extends 0 ? never : S) : never]: U[S];
|
|
97
76
|
};
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
*/
|
|
101
|
-
export type GetExponent<C extends UnitSubvalues, S> = S extends keyof C ? C[S] : 0;
|
|
102
|
-
/**
|
|
103
|
-
* Flatten a complex type such as a union or intersection of objects into a
|
|
104
|
-
* single object.
|
|
105
|
-
*
|
|
106
|
-
* @internal
|
|
107
|
-
*/
|
|
108
|
-
export type FlatternAlias<T> = {
|
|
77
|
+
type GetExponent<C extends UnitSubvalues, S> = S extends keyof C ? C[S] : 0;
|
|
78
|
+
type FlatternAlias<T> = {
|
|
109
79
|
[P in keyof T]: T[P];
|
|
110
80
|
} & {};
|
|
111
|
-
|
|
112
|
-
* Make `T` exactly `T`.
|
|
113
|
-
*
|
|
114
|
-
* @internal
|
|
115
|
-
*/
|
|
116
|
-
export type Exactify<T, U extends T> = T & {
|
|
81
|
+
type Exactify<T, U extends T> = T & {
|
|
117
82
|
[K in keyof U]: K extends keyof T ? U[K] : never;
|
|
118
83
|
};
|
|
119
84
|
/**
|
|
@@ -201,115 +166,22 @@ export type UnknownUnitClass = UnknownUnitKeyValues & BrandUnitClassType;
|
|
|
201
166
|
export type UnknownUnitMeta = UnknownUnitKeyValues & Readonly<{
|
|
202
167
|
__uno_types__unit_meta_type: true;
|
|
203
168
|
}>;
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
*/
|
|
207
|
-
export type UnitKeyValues<T extends UnitSubvalues> = BrandUnitKeyValues<keyof ExcludeUnitZeroSubvalues<T> extends string ? keyof ExcludeUnitZeroSubvalues<T> : never, RemoveNeverValues<T>>;
|
|
208
|
-
/**
|
|
209
|
-
* @internal
|
|
210
|
-
*/
|
|
211
|
-
export type UnknownUnitKeyValues = BrandUnitKeyValues<string, {}>;
|
|
169
|
+
type UnitKeyValues<T extends UnitSubvalues> = BrandUnitKeyValues<keyof ExcludeUnitZeroSubvalues<T> extends string ? keyof ExcludeUnitZeroSubvalues<T> : never, RemoveNeverValues<T>>;
|
|
170
|
+
type UnknownUnitKeyValues = BrandUnitKeyValues<string, {}>;
|
|
212
171
|
/**
|
|
213
172
|
* A mapping of subvalue of a unit its magnitude.
|
|
214
173
|
*
|
|
215
174
|
* @group Unit Components
|
|
216
175
|
*/
|
|
217
176
|
export type UnitSubvalues = Record<string, Exponent>;
|
|
218
|
-
|
|
219
|
-
* Take the inverse of a unit.
|
|
220
|
-
*
|
|
221
|
-
* @group Unit Functions
|
|
222
|
-
* @returns `1/X`.
|
|
223
|
-
*/
|
|
224
|
-
export type Inverse<X extends number> = Pow<X, -1>;
|
|
225
|
-
/**
|
|
226
|
-
* Inverses each of the subvalues.
|
|
227
|
-
*
|
|
228
|
-
* @group Unit Subvalue Functions
|
|
229
|
-
*/
|
|
230
|
-
export type InverseUnitSubvalues<T extends UnitSubvalues> = PowUnitSubvalues<T, -1>;
|
|
231
|
-
/**
|
|
232
|
-
* Multiply a unit by another unit.
|
|
233
|
-
*
|
|
234
|
-
* @group Unit Functions
|
|
235
|
-
* @returns `A⋅B`
|
|
236
|
-
*/
|
|
237
|
-
export 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;
|
|
238
|
-
/**
|
|
239
|
-
* Multiple a Unit by a Unit, AbstractUnit, UnitConversionRate or number
|
|
240
|
-
*
|
|
241
|
-
* @internal
|
|
242
|
-
*/
|
|
243
|
-
export 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;
|
|
244
|
-
/**
|
|
245
|
-
* Multiple an AbstractUnit by an AbstractUnit, UnitConversionRate or number
|
|
246
|
-
*
|
|
247
|
-
* @internal
|
|
248
|
-
*/
|
|
249
|
-
export 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;
|
|
250
|
-
/**
|
|
251
|
-
* Multiple an UnitConversionRate by a UnitConversionRate or number
|
|
252
|
-
*
|
|
253
|
-
* @internal
|
|
254
|
-
*/
|
|
255
|
-
export 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;
|
|
256
|
-
/**
|
|
257
|
-
* Multiply each of the subvalues from a unit with the corresponding once from another unit.
|
|
258
|
-
*
|
|
259
|
-
* @group Unit Subvalue Functions
|
|
260
|
-
*/
|
|
261
|
-
export type MultiplyUnitSubvalues<A extends UnitSubvalues, B extends UnitSubvalues> = ExcludeUnitZeroSubvalues<{
|
|
262
|
-
[S in keyof A | keyof B]: SumExponents<GetExponent<A, S>, GetExponent<B, S>>;
|
|
263
|
-
}>;
|
|
264
|
-
/**
|
|
265
|
-
* Divide a unit by another unit.
|
|
266
|
-
*
|
|
267
|
-
* @group Unit Functions
|
|
268
|
-
* @returns `A/B`
|
|
269
|
-
*/
|
|
270
|
-
export type Divide<A extends number, B extends number> = Multiply<A, Inverse<B>>;
|
|
271
|
-
/**
|
|
272
|
-
* Divide each of the subvalues from a unit with the corresponding once from another unit.
|
|
273
|
-
*
|
|
274
|
-
* @group Unit Subvalue Functions
|
|
275
|
-
*/
|
|
276
|
-
export type DivideUnitSubvalues<A extends UnitSubvalues, B extends UnitSubvalues> = MultiplyUnitSubvalues<A, InverseUnitSubvalues<B>>;
|
|
277
|
-
/**
|
|
278
|
-
* Put a unit to the power of an exponent.
|
|
279
|
-
*
|
|
280
|
-
* @group Unit Functions
|
|
281
|
-
*/
|
|
282
|
-
export type Pow<B extends number, E extends Exponent> = B extends Unit<infer Class, infer Meta> ? Unit<FlatternAlias<PowUnitSubvalues<Class, E>>, FlatternAlias<PowUnitSubvalues<Meta, E>>> : B extends AbstractUnit<infer Class> ? AbstractUnit<FlatternAlias<PowUnitSubvalues<Class, E>>> : B extends UnitConversionRate<infer Meta> ? UnitConversionRate<FlatternAlias<PowUnitSubvalues<Meta, E>>> : number;
|
|
283
|
-
/**
|
|
284
|
-
* Put each subvalue of a unit to the power of an exponent.
|
|
285
|
-
*
|
|
286
|
-
* @group Unit Subvalue Functions
|
|
287
|
-
*/
|
|
288
|
-
export type PowUnitSubvalues<B extends UnitSubvalues, E extends Exponent> = ExcludeUnitZeroSubvalues<{
|
|
289
|
-
[S in keyof B]: MultiplyExponents<GetExponent<B, S>, E>;
|
|
290
|
-
}>;
|
|
291
|
-
/**
|
|
292
|
-
* Take the nth root of a unit.
|
|
293
|
-
*
|
|
294
|
-
* @group Unit Functions
|
|
295
|
-
*/
|
|
296
|
-
export type Root<B extends number, E extends Exponent> = B extends Unit<infer Class, infer Meta> ? Unit<FlatternAlias<RootUnitSubvalues<Class, E>>, FlatternAlias<RootUnitSubvalues<Meta, E>>> : B extends AbstractUnit<infer Class> ? AbstractUnit<FlatternAlias<RootUnitSubvalues<Class, E>>> : B extends UnitConversionRate<infer Meta> ? UnitConversionRate<FlatternAlias<RootUnitSubvalues<Meta, E>>> : number;
|
|
297
|
-
/**
|
|
298
|
-
* Take the nth root of each subvalue of a unit.
|
|
299
|
-
*
|
|
300
|
-
* @group Unit Subvalue Functions
|
|
301
|
-
*/
|
|
302
|
-
export type RootUnitSubvalues<B extends UnitSubvalues, E extends Exponent> = ExcludeUnitZeroSubvalues<{
|
|
303
|
-
[S in keyof B]: DivideExponents<GetExponent<B, S>, E>;
|
|
304
|
-
}>;
|
|
305
|
-
export type SiUnitKeys = "Second" | "Meter" | "Kilogram" | "Mole" | "Ampere" | "Candela" | "Kelvin" | "Radian";
|
|
177
|
+
type SiUnitKeys = "Second" | "Meter" | "Kilogram" | "Mole" | "Ampere" | "Candela" | "Kelvin" | "Radian";
|
|
306
178
|
/**
|
|
307
179
|
* The {@link UnitClass} that is the base of all {@link Unit}s defined by this library.
|
|
308
180
|
*
|
|
309
181
|
* @group Unit Classes
|
|
310
182
|
*/
|
|
311
183
|
export type BaseUnitClass<T extends Exactify<SiUnitConfig, T>> = UnitClass<T>;
|
|
312
|
-
|
|
184
|
+
type SiUnitConfig = Partial<Record<SiUnitKeys, Exponent>>;
|
|
313
185
|
/**
|
|
314
186
|
* @group Unit Classes
|
|
315
187
|
* @category Angle (Plane)
|
|
@@ -1230,6 +1102,78 @@ export type MagneticPermeabilityUnitFrom<M extends UnknownUnitMeta> = UnitFrom<M
|
|
|
1230
1102
|
* @symbol `H/m`
|
|
1231
1103
|
*/
|
|
1232
1104
|
export type HenryPerMeter = MagneticPermeabilityUnit<{}>;
|
|
1105
|
+
/**
|
|
1106
|
+
* Take the inverse of a unit.
|
|
1107
|
+
*
|
|
1108
|
+
* @group Unit Functions
|
|
1109
|
+
* @returns `1/X`.
|
|
1110
|
+
*/
|
|
1111
|
+
export type Inverse<X extends number> = Pow<X, -1>;
|
|
1112
|
+
/**
|
|
1113
|
+
* Inverses each of the subvalues.
|
|
1114
|
+
*
|
|
1115
|
+
* @group Unit Subvalue Functions
|
|
1116
|
+
*/
|
|
1117
|
+
export type InverseUnitSubvalues<T extends UnitSubvalues> = PowUnitSubvalues<T, -1>;
|
|
1118
|
+
/**
|
|
1119
|
+
* Multiply a unit by another unit.
|
|
1120
|
+
*
|
|
1121
|
+
* @group Unit Functions
|
|
1122
|
+
* @returns `A⋅B`
|
|
1123
|
+
*/
|
|
1124
|
+
export 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;
|
|
1125
|
+
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;
|
|
1126
|
+
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;
|
|
1127
|
+
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;
|
|
1128
|
+
/**
|
|
1129
|
+
* Multiply each of the subvalues from a unit with the corresponding once from another unit.
|
|
1130
|
+
*
|
|
1131
|
+
* @group Unit Subvalue Functions
|
|
1132
|
+
*/
|
|
1133
|
+
export type MultiplyUnitSubvalues<A extends UnitSubvalues, B extends UnitSubvalues> = ExcludeUnitZeroSubvalues<{
|
|
1134
|
+
[S in keyof A | keyof B]: SumExponents<GetExponent<A, S>, GetExponent<B, S>>;
|
|
1135
|
+
}>;
|
|
1136
|
+
/**
|
|
1137
|
+
* Divide a unit by another unit.
|
|
1138
|
+
*
|
|
1139
|
+
* @group Unit Functions
|
|
1140
|
+
* @returns `A/B`
|
|
1141
|
+
*/
|
|
1142
|
+
export type Divide<A extends number, B extends number> = Multiply<A, Inverse<B>>;
|
|
1143
|
+
/**
|
|
1144
|
+
* Divide each of the subvalues from a unit with the corresponding once from another unit.
|
|
1145
|
+
*
|
|
1146
|
+
* @group Unit Subvalue Functions
|
|
1147
|
+
*/
|
|
1148
|
+
export type DivideUnitSubvalues<A extends UnitSubvalues, B extends UnitSubvalues> = MultiplyUnitSubvalues<A, InverseUnitSubvalues<B>>;
|
|
1149
|
+
/**
|
|
1150
|
+
* Put a unit to the power of an exponent.
|
|
1151
|
+
*
|
|
1152
|
+
* @group Unit Functions
|
|
1153
|
+
*/
|
|
1154
|
+
export type Pow<B extends number, E extends Exponent> = B extends Unit<infer Class, infer Meta> ? Unit<FlatternAlias<PowUnitSubvalues<Class, E>>, FlatternAlias<PowUnitSubvalues<Meta, E>>> : B extends AbstractUnit<infer Class> ? AbstractUnit<FlatternAlias<PowUnitSubvalues<Class, E>>> : B extends UnitConversionRate<infer Meta> ? UnitConversionRate<FlatternAlias<PowUnitSubvalues<Meta, E>>> : number;
|
|
1155
|
+
/**
|
|
1156
|
+
* Put each subvalue of a unit to the power of an exponent.
|
|
1157
|
+
*
|
|
1158
|
+
* @group Unit Subvalue Functions
|
|
1159
|
+
*/
|
|
1160
|
+
export type PowUnitSubvalues<B extends UnitSubvalues, E extends Exponent> = ExcludeUnitZeroSubvalues<{
|
|
1161
|
+
[S in keyof B]: MultiplyExponents<GetExponent<B, S>, E>;
|
|
1162
|
+
}>;
|
|
1163
|
+
/**
|
|
1164
|
+
* Take the nth root of a unit.
|
|
1165
|
+
*
|
|
1166
|
+
* @group Unit Functions
|
|
1167
|
+
*/
|
|
1168
|
+
export type Root<B extends number, E extends Exponent> = B extends Unit<infer Class, infer Meta> ? Unit<FlatternAlias<RootUnitSubvalues<Class, E>>, FlatternAlias<RootUnitSubvalues<Meta, E>>> : B extends AbstractUnit<infer Class> ? AbstractUnit<FlatternAlias<RootUnitSubvalues<Class, E>>> : B extends UnitConversionRate<infer Meta> ? UnitConversionRate<FlatternAlias<RootUnitSubvalues<Meta, E>>> : number;
|
|
1169
|
+
/**
|
|
1170
|
+
* Take the nth root of each subvalue of a unit.
|
|
1171
|
+
*
|
|
1172
|
+
* @group Unit Subvalue Functions
|
|
1173
|
+
*/
|
|
1174
|
+
export type RootUnitSubvalues<B extends UnitSubvalues, E extends Exponent> = ExcludeUnitZeroSubvalues<{
|
|
1175
|
+
[S in keyof B]: DivideExponents<GetExponent<B, S>, E>;
|
|
1176
|
+
}>;
|
|
1233
1177
|
/**
|
|
1234
1178
|
* Put the given {@link Unit} to the power of 2.
|
|
1235
1179
|
*
|
|
@@ -4180,7 +4124,7 @@ export declare function cubicMetersToLiters(volume: Cubic<Meter>): Liter;
|
|
|
4180
4124
|
* Convert {@link Liter} to {@link Cubic}<{@link Meter}>.
|
|
4181
4125
|
*/
|
|
4182
4126
|
export declare function litersToCubicMeters(volume: Liter): Cubic<Meter>;
|
|
4183
|
-
|
|
4127
|
+
type OperationIO<T extends number> = [
|
|
4184
4128
|
T
|
|
4185
4129
|
] extends [
|
|
4186
4130
|
UnknownUnit | UnknownAbstractUnit
|
|
@@ -4275,10 +4219,10 @@ export declare function modSafe<T extends number>(a: OperationIO<T>, b: Operatio
|
|
|
4275
4219
|
* @returns A function that takes a integer and returns an integer between zero (inclusive) and `b` (exclusive).
|
|
4276
4220
|
*/
|
|
4277
4221
|
export declare function modSafe<T extends number>(b: OperationIO<T>): (a: OperationIO<T>) => OperationIO<T>;
|
|
4278
|
-
|
|
4279
|
-
|
|
4280
|
-
|
|
4281
|
-
|
|
4222
|
+
type PowResult<B extends number, E extends number> = E extends Unitless ? PowResult<B, number> : E extends UnknownUnit ? never : E extends UnknownAbstractUnit ? never : E extends Exponent ? Pow<B, E> : E extends 0.5 ? Root<B, 2> : B extends Unitless ? B : number;
|
|
4223
|
+
type PowFunction<B extends number, E extends number> = (b: B) => PowResult<B, E>;
|
|
4224
|
+
type RootResult<B extends number, E extends number> = E extends Unitless ? RootResult<B, number> : E extends UnknownUnit ? never : E extends UnknownAbstractUnit ? never : E extends Exponent ? Root<B, E> : E extends 0.5 ? Pow<B, 2> : B extends Unitless ? B : number;
|
|
4225
|
+
type RootFunction<B extends number, E extends number> = (b: B) => RootResult<B, E>;
|
|
4282
4226
|
/**
|
|
4283
4227
|
* Raise a number to the power of another.
|
|
4284
4228
|
*
|