uom-types 5.0.0 → 5.0.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.
- package/CHANGELOG.md +7 -0
- package/dist/index.d.cts +22 -78
- package/dist/index.d.mts +22 -78
- package/package.json +29 -29
package/CHANGELOG.md
CHANGED
|
@@ -1,6 +1,13 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
All notable changes to this project will be documented in this file. Dates are displayed in UTC.
|
|
3
3
|
|
|
4
|
+
## [5.0.1](https://github.com/RebeccaStevens/uom-types/compare/v5.0.0...v5.0.1) (2024-12-14)
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
### Bug Fixes
|
|
8
|
+
|
|
9
|
+
* dist types ([a01ca42](https://github.com/RebeccaStevens/uom-types/commit/a01ca429263a5752edf554a739318cdeb155a940)), closes [#437](https://github.com/RebeccaStevens/uom-types/issues/437)
|
|
10
|
+
|
|
4
11
|
# [5.0.0](https://github.com/RebeccaStevens/uom-types/compare/v4.1.2...v5.0.0) (2024-11-27)
|
|
5
12
|
|
|
6
13
|
|
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,14 +166,8 @@ 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
|
*
|
|
@@ -235,24 +194,9 @@ export type InverseUnitSubvalues<T extends UnitSubvalues> = PowUnitSubvalues<T,
|
|
|
235
194
|
* @returns `A⋅B`
|
|
236
195
|
*/
|
|
237
196
|
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
|
-
|
|
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;
|
|
197
|
+
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;
|
|
198
|
+
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;
|
|
199
|
+
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
200
|
/**
|
|
257
201
|
* Multiply each of the subvalues from a unit with the corresponding once from another unit.
|
|
258
202
|
*
|
|
@@ -302,14 +246,14 @@ export type Root<B extends number, E extends Exponent> = B extends Unit<infer Cl
|
|
|
302
246
|
export type RootUnitSubvalues<B extends UnitSubvalues, E extends Exponent> = ExcludeUnitZeroSubvalues<{
|
|
303
247
|
[S in keyof B]: DivideExponents<GetExponent<B, S>, E>;
|
|
304
248
|
}>;
|
|
305
|
-
|
|
249
|
+
type SiUnitKeys = "Second" | "Meter" | "Kilogram" | "Mole" | "Ampere" | "Candela" | "Kelvin" | "Radian";
|
|
306
250
|
/**
|
|
307
251
|
* The {@link UnitClass} that is the base of all {@link Unit}s defined by this library.
|
|
308
252
|
*
|
|
309
253
|
* @group Unit Classes
|
|
310
254
|
*/
|
|
311
255
|
export type BaseUnitClass<T extends Exactify<SiUnitConfig, T>> = UnitClass<T>;
|
|
312
|
-
|
|
256
|
+
type SiUnitConfig = Partial<Record<SiUnitKeys, Exponent>>;
|
|
313
257
|
/**
|
|
314
258
|
* @group Unit Classes
|
|
315
259
|
* @category Angle (Plane)
|
|
@@ -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,14 +166,8 @@ 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
|
*
|
|
@@ -235,24 +194,9 @@ export type InverseUnitSubvalues<T extends UnitSubvalues> = PowUnitSubvalues<T,
|
|
|
235
194
|
* @returns `A⋅B`
|
|
236
195
|
*/
|
|
237
196
|
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
|
-
|
|
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;
|
|
197
|
+
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;
|
|
198
|
+
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;
|
|
199
|
+
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
200
|
/**
|
|
257
201
|
* Multiply each of the subvalues from a unit with the corresponding once from another unit.
|
|
258
202
|
*
|
|
@@ -302,14 +246,14 @@ export type Root<B extends number, E extends Exponent> = B extends Unit<infer Cl
|
|
|
302
246
|
export type RootUnitSubvalues<B extends UnitSubvalues, E extends Exponent> = ExcludeUnitZeroSubvalues<{
|
|
303
247
|
[S in keyof B]: DivideExponents<GetExponent<B, S>, E>;
|
|
304
248
|
}>;
|
|
305
|
-
|
|
249
|
+
type SiUnitKeys = "Second" | "Meter" | "Kilogram" | "Mole" | "Ampere" | "Candela" | "Kelvin" | "Radian";
|
|
306
250
|
/**
|
|
307
251
|
* The {@link UnitClass} that is the base of all {@link Unit}s defined by this library.
|
|
308
252
|
*
|
|
309
253
|
* @group Unit Classes
|
|
310
254
|
*/
|
|
311
255
|
export type BaseUnitClass<T extends Exactify<SiUnitConfig, T>> = UnitClass<T>;
|
|
312
|
-
|
|
256
|
+
type SiUnitConfig = Partial<Record<SiUnitKeys, Exponent>>;
|
|
313
257
|
/**
|
|
314
258
|
* @group Unit Classes
|
|
315
259
|
* @category Angle (Plane)
|
|
@@ -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/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "uom-types",
|
|
3
|
-
"version": "5.0.
|
|
3
|
+
"version": "5.0.1",
|
|
4
4
|
"description": "Typesafe units with no runtime overhead.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"uom",
|
|
@@ -51,7 +51,7 @@
|
|
|
51
51
|
"scripts": {
|
|
52
52
|
"build": "pnpm run build-pre && pnpm run build:js",
|
|
53
53
|
"build-pre": "pnpm run generate-files",
|
|
54
|
-
"build:js": "rimraf dist && rollup -c rollup.config.ts --configPlugin @rollup/plugin-typescript",
|
|
54
|
+
"build:js": "rimraf dist && rollup -c rollup.config.ts --configPlugin @rollup/plugin-typescript --configImportAttributesKey with",
|
|
55
55
|
"cz": "git-cz",
|
|
56
56
|
"docs": "typedoc",
|
|
57
57
|
"docs:serve": "http-serve docs/generated",
|
|
@@ -79,14 +79,14 @@
|
|
|
79
79
|
"test:js-run": "vitest run --coverage",
|
|
80
80
|
"test:types": "pnpm run test:types-pre && tsd -t './dist/index.d.mts' -f 'src/**/*.test-d.ts'",
|
|
81
81
|
"test:types-pre": "pnpm run build",
|
|
82
|
-
"typecheck": "tsc -p tsconfig.
|
|
82
|
+
"typecheck": "tsc -p src/tsconfig.json --noEmit"
|
|
83
83
|
},
|
|
84
84
|
"devDependencies": {
|
|
85
85
|
"@commitlint/cli": "19.6.0",
|
|
86
86
|
"@commitlint/config-conventional": "19.6.0",
|
|
87
87
|
"@cspell/dict-cryptocurrencies": "5.0.3",
|
|
88
|
-
"@eslint/compat": "1.2.
|
|
89
|
-
"@rebeccastevens/eslint-config": "3.3.
|
|
88
|
+
"@eslint/compat": "1.2.4",
|
|
89
|
+
"@rebeccastevens/eslint-config": "3.3.4",
|
|
90
90
|
"@rollup/plugin-typescript": "12.1.1",
|
|
91
91
|
"@sebbo2002/semantic-release-jsr": "2.0.2",
|
|
92
92
|
"@semantic-release/changelog": "6.0.3",
|
|
@@ -95,60 +95,60 @@
|
|
|
95
95
|
"@semantic-release/github": "11.0.1",
|
|
96
96
|
"@semantic-release/npm": "12.0.1",
|
|
97
97
|
"@semantic-release/release-notes-generator": "14.0.1",
|
|
98
|
-
"@stylistic/eslint-plugin": "2.
|
|
99
|
-
"@types/node": "18.19.
|
|
100
|
-
"@typescript-eslint/eslint-plugin": "8.
|
|
101
|
-
"@typescript-eslint/parser": "8.
|
|
102
|
-
"@vitest/coverage-v8": "2.1.
|
|
103
|
-
"@vitest/eslint-plugin": "1.1.
|
|
98
|
+
"@stylistic/eslint-plugin": "2.12.1",
|
|
99
|
+
"@types/node": "18.19.67",
|
|
100
|
+
"@typescript-eslint/eslint-plugin": "8.18.0",
|
|
101
|
+
"@typescript-eslint/parser": "8.18.0",
|
|
102
|
+
"@vitest/coverage-v8": "2.1.8",
|
|
103
|
+
"@vitest/eslint-plugin": "1.1.16",
|
|
104
104
|
"commitizen": "4.3.1",
|
|
105
105
|
"cspell": "8.16.1",
|
|
106
106
|
"cz-conventional-changelog": "3.3.0",
|
|
107
|
-
"eslint": "9.
|
|
107
|
+
"eslint": "9.17.0",
|
|
108
108
|
"eslint-config-prettier": "9.1.0",
|
|
109
109
|
"eslint-flat-config-utils": "0.4.0",
|
|
110
|
-
"eslint-import-resolver-typescript": "3.
|
|
110
|
+
"eslint-import-resolver-typescript": "3.7.0",
|
|
111
111
|
"eslint-merge-processors": "0.1.0",
|
|
112
112
|
"eslint-plugin-eslint-comments": "3.2.0",
|
|
113
|
-
"eslint-plugin-format": "0.1.
|
|
113
|
+
"eslint-plugin-format": "0.1.3",
|
|
114
114
|
"eslint-plugin-functional": "7.1.0",
|
|
115
|
-
"eslint-plugin-import-x": "4.
|
|
116
|
-
"eslint-plugin-jsdoc": "50.6.
|
|
115
|
+
"eslint-plugin-import-x": "4.5.0",
|
|
116
|
+
"eslint-plugin-jsdoc": "50.6.1",
|
|
117
117
|
"eslint-plugin-jsonc": "2.18.2",
|
|
118
118
|
"eslint-plugin-markdown": "5.1.0",
|
|
119
|
-
"eslint-plugin-n": "17.
|
|
119
|
+
"eslint-plugin-n": "17.15.0",
|
|
120
120
|
"eslint-plugin-no-only-tests": "3.3.0",
|
|
121
121
|
"eslint-plugin-optimize-regex": "1.2.1",
|
|
122
122
|
"eslint-plugin-prettier": "5.2.1",
|
|
123
123
|
"eslint-plugin-promise": "7.2.1",
|
|
124
124
|
"eslint-plugin-regexp": "2.7.0",
|
|
125
|
-
"eslint-plugin-sonarjs": "
|
|
125
|
+
"eslint-plugin-sonarjs": "3.0.1",
|
|
126
126
|
"eslint-plugin-unicorn": "56.0.1",
|
|
127
|
-
"eslint-plugin-yml": "1.
|
|
127
|
+
"eslint-plugin-yml": "1.16.0",
|
|
128
128
|
"http-serve": "1.0.1",
|
|
129
129
|
"husky": "9.1.7",
|
|
130
130
|
"jsonc-eslint-parser": "2.4.0",
|
|
131
|
-
"knip": "5.
|
|
132
|
-
"lint-staged": "15.2.
|
|
133
|
-
"markdownlint-cli2": "0.
|
|
134
|
-
"prettier": "3.4.
|
|
131
|
+
"knip": "5.40.0",
|
|
132
|
+
"lint-staged": "15.2.11",
|
|
133
|
+
"markdownlint-cli2": "0.16.0",
|
|
134
|
+
"prettier": "3.4.2",
|
|
135
135
|
"rimraf": "6.0.1",
|
|
136
|
-
"rollup": "4.
|
|
136
|
+
"rollup": "4.28.1",
|
|
137
137
|
"rollup-plugin-deassert": "1.3.0",
|
|
138
|
-
"rollup-plugin-dts-bundle-generator-2": "
|
|
138
|
+
"rollup-plugin-dts-bundle-generator-2": "2.0.0",
|
|
139
139
|
"semantic-release": "24.2.0",
|
|
140
140
|
"tsafe": "1.8.5",
|
|
141
141
|
"tsc-files": "1.1.4",
|
|
142
142
|
"tsd": "0.31.2",
|
|
143
143
|
"tsx": "4.19.2",
|
|
144
|
-
"typedoc": "0.
|
|
144
|
+
"typedoc": "0.27.4",
|
|
145
145
|
"typedoc-plugin-coverage": "3.4.0",
|
|
146
146
|
"typescript": "5.7.2",
|
|
147
|
-
"vite-tsconfig-paths": "5.1.
|
|
148
|
-
"vitest": "2.1.
|
|
147
|
+
"vite-tsconfig-paths": "5.1.4",
|
|
148
|
+
"vitest": "2.1.8",
|
|
149
149
|
"yaml-eslint-parser": "1.2.3"
|
|
150
150
|
},
|
|
151
|
-
"packageManager": "pnpm@9.
|
|
151
|
+
"packageManager": "pnpm@9.15.0",
|
|
152
152
|
"engines": {
|
|
153
153
|
"node": ">=18.0.0"
|
|
154
154
|
}
|