uom-types 4.1.2 → 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 CHANGED
@@ -1,6 +1,25 @@
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
+
11
+ # [5.0.0](https://github.com/RebeccaStevens/uom-types/compare/v4.1.2...v5.0.0) (2024-11-27)
12
+
13
+
14
+ ### Features
15
+
16
+ * drop support for node 16 ([c701cf3](https://github.com/RebeccaStevens/uom-types/commit/c701cf37a8b433bf5daa3269a6c5c00a66f8361a))
17
+
18
+
19
+ ### BREAKING CHANGES
20
+
21
+ * drop support for node 16
22
+
4
23
  ## [4.1.2](https://github.com/RebeccaStevens/uom-types/compare/v4.1.1...v4.1.2) (2024-10-18)
5
24
 
6
25
 
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
- * Get the exponent value of the given key.
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,8 +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
- export type UnitKeyValues<T extends UnitSubvalues> = BrandUnitKeyValues<keyof ExcludeUnitZeroSubvalues<T> extends string ? keyof ExcludeUnitZeroSubvalues<T> : never, RemoveNeverValues<T>>;
205
- 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, {}>;
206
171
  /**
207
172
  * A mapping of subvalue of a unit its magnitude.
208
173
  *
@@ -229,24 +194,9 @@ export type InverseUnitSubvalues<T extends UnitSubvalues> = PowUnitSubvalues<T,
229
194
  * @returns `A⋅B`
230
195
  */
231
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;
232
- /**
233
- * Multiple a Unit by a Unit, AbstractUnit, UnitConversionRate or number
234
- *
235
- * @internal
236
- */
237
- 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;
238
- /**
239
- * Multiple an AbstractUnit by an AbstractUnit, UnitConversionRate or number
240
- *
241
- * @internal
242
- */
243
- 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;
244
- /**
245
- * Multiple an UnitConversionRate by a UnitConversionRate or number
246
- *
247
- * @internal
248
- */
249
- 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;
250
200
  /**
251
201
  * Multiply each of the subvalues from a unit with the corresponding once from another unit.
252
202
  *
@@ -296,16 +246,14 @@ export type Root<B extends number, E extends Exponent> = B extends Unit<infer Cl
296
246
  export type RootUnitSubvalues<B extends UnitSubvalues, E extends Exponent> = ExcludeUnitZeroSubvalues<{
297
247
  [S in keyof B]: DivideExponents<GetExponent<B, S>, E>;
298
248
  }>;
299
- export type SiUnitKeys = "Second" | "Meter" | "Kilogram" | "Mole" | "Ampere" | "Candela" | "Kelvin" | "Radian";
249
+ type SiUnitKeys = "Second" | "Meter" | "Kilogram" | "Mole" | "Ampere" | "Candela" | "Kelvin" | "Radian";
300
250
  /**
301
251
  * The {@link UnitClass} that is the base of all {@link Unit}s defined by this library.
302
252
  *
303
253
  * @group Unit Classes
304
254
  */
305
255
  export type BaseUnitClass<T extends Exactify<SiUnitConfig, T>> = UnitClass<T>;
306
- export type SiUnitConfig = {
307
- [K in SiUnitKeys]?: Exponent;
308
- };
256
+ type SiUnitConfig = Partial<Record<SiUnitKeys, Exponent>>;
309
257
  /**
310
258
  * @group Unit Classes
311
259
  * @category Angle (Plane)
@@ -4176,7 +4124,7 @@ export declare function cubicMetersToLiters(volume: Cubic<Meter>): Liter;
4176
4124
  * Convert {@link Liter} to {@link Cubic}<{@link Meter}>.
4177
4125
  */
4178
4126
  export declare function litersToCubicMeters(volume: Liter): Cubic<Meter>;
4179
- export type OperationIO<T extends number> = [
4127
+ type OperationIO<T extends number> = [
4180
4128
  T
4181
4129
  ] extends [
4182
4130
  UnknownUnit | UnknownAbstractUnit
@@ -4271,10 +4219,10 @@ export declare function modSafe<T extends number>(a: OperationIO<T>, b: Operatio
4271
4219
  * @returns A function that takes a integer and returns an integer between zero (inclusive) and `b` (exclusive).
4272
4220
  */
4273
4221
  export declare function modSafe<T extends number>(b: OperationIO<T>): (a: OperationIO<T>) => OperationIO<T>;
4274
- export 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;
4275
- export type PowFunction<B extends number, E extends number> = (b: B) => PowResult<B, E>;
4276
- export 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;
4277
- export type RootFunction<B extends number, E extends number> = (b: B) => RootResult<B, E>;
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>;
4278
4226
  /**
4279
4227
  * Raise a number to the power of another.
4280
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
- * Get the exponent value of the given key.
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,8 +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
- export type UnitKeyValues<T extends UnitSubvalues> = BrandUnitKeyValues<keyof ExcludeUnitZeroSubvalues<T> extends string ? keyof ExcludeUnitZeroSubvalues<T> : never, RemoveNeverValues<T>>;
205
- 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, {}>;
206
171
  /**
207
172
  * A mapping of subvalue of a unit its magnitude.
208
173
  *
@@ -229,24 +194,9 @@ export type InverseUnitSubvalues<T extends UnitSubvalues> = PowUnitSubvalues<T,
229
194
  * @returns `A⋅B`
230
195
  */
231
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;
232
- /**
233
- * Multiple a Unit by a Unit, AbstractUnit, UnitConversionRate or number
234
- *
235
- * @internal
236
- */
237
- 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;
238
- /**
239
- * Multiple an AbstractUnit by an AbstractUnit, UnitConversionRate or number
240
- *
241
- * @internal
242
- */
243
- 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;
244
- /**
245
- * Multiple an UnitConversionRate by a UnitConversionRate or number
246
- *
247
- * @internal
248
- */
249
- 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;
250
200
  /**
251
201
  * Multiply each of the subvalues from a unit with the corresponding once from another unit.
252
202
  *
@@ -296,16 +246,14 @@ export type Root<B extends number, E extends Exponent> = B extends Unit<infer Cl
296
246
  export type RootUnitSubvalues<B extends UnitSubvalues, E extends Exponent> = ExcludeUnitZeroSubvalues<{
297
247
  [S in keyof B]: DivideExponents<GetExponent<B, S>, E>;
298
248
  }>;
299
- export type SiUnitKeys = "Second" | "Meter" | "Kilogram" | "Mole" | "Ampere" | "Candela" | "Kelvin" | "Radian";
249
+ type SiUnitKeys = "Second" | "Meter" | "Kilogram" | "Mole" | "Ampere" | "Candela" | "Kelvin" | "Radian";
300
250
  /**
301
251
  * The {@link UnitClass} that is the base of all {@link Unit}s defined by this library.
302
252
  *
303
253
  * @group Unit Classes
304
254
  */
305
255
  export type BaseUnitClass<T extends Exactify<SiUnitConfig, T>> = UnitClass<T>;
306
- export type SiUnitConfig = {
307
- [K in SiUnitKeys]?: Exponent;
308
- };
256
+ type SiUnitConfig = Partial<Record<SiUnitKeys, Exponent>>;
309
257
  /**
310
258
  * @group Unit Classes
311
259
  * @category Angle (Plane)
@@ -4176,7 +4124,7 @@ export declare function cubicMetersToLiters(volume: Cubic<Meter>): Liter;
4176
4124
  * Convert {@link Liter} to {@link Cubic}<{@link Meter}>.
4177
4125
  */
4178
4126
  export declare function litersToCubicMeters(volume: Liter): Cubic<Meter>;
4179
- export type OperationIO<T extends number> = [
4127
+ type OperationIO<T extends number> = [
4180
4128
  T
4181
4129
  ] extends [
4182
4130
  UnknownUnit | UnknownAbstractUnit
@@ -4271,10 +4219,10 @@ export declare function modSafe<T extends number>(a: OperationIO<T>, b: Operatio
4271
4219
  * @returns A function that takes a integer and returns an integer between zero (inclusive) and `b` (exclusive).
4272
4220
  */
4273
4221
  export declare function modSafe<T extends number>(b: OperationIO<T>): (a: OperationIO<T>) => OperationIO<T>;
4274
- export 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;
4275
- export type PowFunction<B extends number, E extends number> = (b: B) => PowResult<B, E>;
4276
- export 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;
4277
- export type RootFunction<B extends number, E extends number> = (b: B) => RootResult<B, E>;
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>;
4278
4226
  /**
4279
4227
  * Raise a number to the power of another.
4280
4228
  *
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "uom-types",
3
- "version": "4.1.2",
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",
@@ -77,83 +77,79 @@
77
77
  "test": "pnpm run test:js-run && pnpm run test:types",
78
78
  "test:js": "vitest --coverage",
79
79
  "test:js-run": "vitest run --coverage",
80
- "test:types": "pnpm run test:types-pre && tsd -t './dist/index.d.mts' -f 'tests/**/*.test-d.ts'",
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.build.json --noEmit"
83
- },
84
- "resolutions": {
85
- "dts-bundle-generator": "9.5.1"
82
+ "typecheck": "tsc -p src/tsconfig.json --noEmit"
86
83
  },
87
84
  "devDependencies": {
88
- "@commitlint/cli": "19.5.0",
89
- "@commitlint/config-conventional": "19.5.0",
85
+ "@commitlint/cli": "19.6.0",
86
+ "@commitlint/config-conventional": "19.6.0",
90
87
  "@cspell/dict-cryptocurrencies": "5.0.3",
91
- "@eslint/compat": "1.2.0",
92
- "@rebeccastevens/eslint-config": "3.3.2",
93
- "@rollup/plugin-replace": "6.0.1",
94
- "@rollup/plugin-typescript": "12.1.0",
95
- "@sebbo2002/semantic-release-jsr": "2.0.1",
88
+ "@eslint/compat": "1.2.4",
89
+ "@rebeccastevens/eslint-config": "3.3.4",
90
+ "@rollup/plugin-typescript": "12.1.1",
91
+ "@sebbo2002/semantic-release-jsr": "2.0.2",
96
92
  "@semantic-release/changelog": "6.0.3",
97
93
  "@semantic-release/commit-analyzer": "13.0.0",
98
94
  "@semantic-release/git": "10.0.1",
99
- "@semantic-release/github": "11.0.0",
95
+ "@semantic-release/github": "11.0.1",
100
96
  "@semantic-release/npm": "12.0.1",
101
97
  "@semantic-release/release-notes-generator": "14.0.1",
102
- "@stylistic/eslint-plugin": "2.9.0",
103
- "@types/node": "16.18.113",
104
- "@typescript-eslint/eslint-plugin": "8.9.0",
105
- "@typescript-eslint/parser": "8.9.0",
106
- "@vitest/coverage-v8": "2.1.2",
107
- "@vitest/eslint-plugin": "1.1.7",
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",
108
104
  "commitizen": "4.3.1",
109
- "cspell": "8.15.3",
105
+ "cspell": "8.16.1",
110
106
  "cz-conventional-changelog": "3.3.0",
111
- "eslint": "9.12.0",
107
+ "eslint": "9.17.0",
112
108
  "eslint-config-prettier": "9.1.0",
113
109
  "eslint-flat-config-utils": "0.4.0",
114
- "eslint-import-resolver-typescript": "3.6.3",
110
+ "eslint-import-resolver-typescript": "3.7.0",
115
111
  "eslint-merge-processors": "0.1.0",
116
112
  "eslint-plugin-eslint-comments": "3.2.0",
117
- "eslint-plugin-format": "0.1.2",
118
- "eslint-plugin-functional": "7.0.2",
119
- "eslint-plugin-import-x": "4.3.1",
120
- "eslint-plugin-jsdoc": "50.4.1",
121
- "eslint-plugin-jsonc": "2.16.0",
113
+ "eslint-plugin-format": "0.1.3",
114
+ "eslint-plugin-functional": "7.1.0",
115
+ "eslint-plugin-import-x": "4.5.0",
116
+ "eslint-plugin-jsdoc": "50.6.1",
117
+ "eslint-plugin-jsonc": "2.18.2",
122
118
  "eslint-plugin-markdown": "5.1.0",
123
- "eslint-plugin-n": "17.11.1",
119
+ "eslint-plugin-n": "17.15.0",
124
120
  "eslint-plugin-no-only-tests": "3.3.0",
125
121
  "eslint-plugin-optimize-regex": "1.2.1",
126
122
  "eslint-plugin-prettier": "5.2.1",
127
- "eslint-plugin-promise": "7.1.0",
128
- "eslint-plugin-regexp": "2.6.0",
129
- "eslint-plugin-sonarjs": "2.0.3",
130
- "eslint-plugin-unicorn": "56.0.0",
131
- "eslint-plugin-yml": "1.14.0",
123
+ "eslint-plugin-promise": "7.2.1",
124
+ "eslint-plugin-regexp": "2.7.0",
125
+ "eslint-plugin-sonarjs": "3.0.1",
126
+ "eslint-plugin-unicorn": "56.0.1",
127
+ "eslint-plugin-yml": "1.16.0",
132
128
  "http-serve": "1.0.1",
133
- "husky": "9.1.6",
129
+ "husky": "9.1.7",
134
130
  "jsonc-eslint-parser": "2.4.0",
135
- "knip": "5.33.3",
136
- "lint-staged": "15.2.10",
137
- "markdownlint-cli2": "0.14.0",
138
- "prettier": "3.3.3",
131
+ "knip": "5.40.0",
132
+ "lint-staged": "15.2.11",
133
+ "markdownlint-cli2": "0.16.0",
134
+ "prettier": "3.4.2",
139
135
  "rimraf": "6.0.1",
140
- "rollup": "4.24.0",
136
+ "rollup": "4.28.1",
141
137
  "rollup-plugin-deassert": "1.3.0",
142
- "rollup-plugin-dts-bundle-generator": "1.4.0",
143
- "semantic-release": "24.1.2",
144
- "tsafe": "1.7.5",
138
+ "rollup-plugin-dts-bundle-generator-2": "2.0.0",
139
+ "semantic-release": "24.2.0",
140
+ "tsafe": "1.8.5",
145
141
  "tsc-files": "1.1.4",
146
142
  "tsd": "0.31.2",
147
- "tsx": "4.19.1",
148
- "typedoc": "0.26.9",
149
- "typedoc-plugin-coverage": "3.3.0",
150
- "typescript": "5.6.3",
151
- "vite-tsconfig-paths": "5.0.1",
152
- "vitest": "2.1.2",
143
+ "tsx": "4.19.2",
144
+ "typedoc": "0.27.4",
145
+ "typedoc-plugin-coverage": "3.4.0",
146
+ "typescript": "5.7.2",
147
+ "vite-tsconfig-paths": "5.1.4",
148
+ "vitest": "2.1.8",
153
149
  "yaml-eslint-parser": "1.2.3"
154
150
  },
155
- "packageManager": "pnpm@9.12.1",
151
+ "packageManager": "pnpm@9.15.0",
156
152
  "engines": {
157
- "node": ">=16.0.0"
153
+ "node": ">=18.0.0"
158
154
  }
159
155
  }