uom-types 4.0.1 → 4.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +14 -0
- package/README.md +2 -1
- package/dist/index.d.cts +52 -45
- package/dist/index.d.mts +52 -45
- package/package.json +6 -6
package/CHANGELOG.md
CHANGED
|
@@ -1,6 +1,20 @@
|
|
|
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
|
+
## [4.1.1](https://github.com/RebeccaStevens/uom-types/compare/v4.1.0...v4.1.1) (2024-10-18)
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
### Bug Fixes
|
|
8
|
+
|
|
9
|
+
* improve handling of unitless with pow/root functions ([ad44cf3](https://github.com/RebeccaStevens/uom-types/commit/ad44cf3accf48207391c2d55b7c10f723b0dad19))
|
|
10
|
+
|
|
11
|
+
# [4.1.0](https://github.com/RebeccaStevens/uom-types/compare/v4.0.1...v4.1.0) (2024-10-18)
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
### Features
|
|
15
|
+
|
|
16
|
+
* add ability to make brands compatible with 3rd party brands ([9f7d4cd](https://github.com/RebeccaStevens/uom-types/commit/9f7d4cd4c85bd534db93d4f4457217a43511dc0f))
|
|
17
|
+
|
|
4
18
|
## [4.0.1](https://github.com/RebeccaStevens/uom-types/compare/v4.0.0...v4.0.1) (2024-10-14)
|
|
5
19
|
|
|
6
20
|
# [4.0.0](https://github.com/RebeccaStevens/uom-types/compare/v3.1.1...v4.0.0) (2024-10-14)
|
package/README.md
CHANGED
|
@@ -7,7 +7,8 @@ Typesafe units with no runtime overhead.
|
|
|
7
7
|
[](https://www.npmjs.com/package/uom-types)
|
|
8
8
|
[](https://jsr.io/@rebeccastevens/uom-types)
|
|
9
9
|
[](https://github.com/RebeccaStevens/template-typescript-node-package/actions/workflows/release.yml)
|
|
10
|
-
[](https://codecov.io/gh/RebeccaStevens/template-typescript-node-package)
|
|
10
|
+
[](https://codecov.io/gh/RebeccaStevens/template-typescript-node-package)
|
|
11
|
+
[](https://RebeccaStevens.github.io/uom-types/)\
|
|
11
12
|
[](https://github.com/prettier/prettier)
|
|
12
13
|
[](https://github.com/RebeccaStevens/template-typescript-node-package/discussions)
|
|
13
14
|
[](https://opensource.org/licenses/BSD-3-Clause)
|
package/dist/index.d.cts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// Generated by dts-bundle-generator v9.
|
|
1
|
+
// Generated by dts-bundle-generator v9.5.1
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
4
|
* @file Autogenerated File - Don't manually edit.
|
|
@@ -41,6 +41,35 @@ 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 {
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Brand with the unit meta.
|
|
51
|
+
*/
|
|
52
|
+
export type BrandUnitMeta<UM extends UnknownUnitMeta> = Brand & {
|
|
53
|
+
__uom_types: {
|
|
54
|
+
unitMeta: UM;
|
|
55
|
+
};
|
|
56
|
+
};
|
|
57
|
+
/**
|
|
58
|
+
* Brand with the unit class.
|
|
59
|
+
*/
|
|
60
|
+
export type BrandUnitClass<UC extends UnknownUnitClass> = Brand & {
|
|
61
|
+
__uom_types: {
|
|
62
|
+
unitClass: UC;
|
|
63
|
+
};
|
|
64
|
+
};
|
|
65
|
+
/**
|
|
66
|
+
* Brand that it is a unit class.
|
|
67
|
+
*/
|
|
68
|
+
export type BrandUnitClassType = Brand & {
|
|
69
|
+
__uom_types: {
|
|
70
|
+
unitClassType: true;
|
|
71
|
+
};
|
|
72
|
+
};
|
|
44
73
|
/**
|
|
45
74
|
* Remove all key from the object that are `never`.
|
|
46
75
|
*/
|
|
@@ -83,9 +112,7 @@ export type Exactify<T, U extends T> = T & {
|
|
|
83
112
|
*
|
|
84
113
|
* @group Abstract Unit Generators
|
|
85
114
|
*/
|
|
86
|
-
export type AbstractUnit<C extends UnitSubvalues> = number &
|
|
87
|
-
__uom_types__unit_class: UnitClass<C>;
|
|
88
|
-
}>;
|
|
115
|
+
export type AbstractUnit<C extends UnitSubvalues> = number & BrandUnitClass<UnitClass<C>>;
|
|
89
116
|
/**
|
|
90
117
|
* Create a unit without meta data from an already existing {@link UnitClass}.
|
|
91
118
|
*
|
|
@@ -97,10 +124,7 @@ export type AbstractUnitFrom<C extends UnknownUnitClass> = C extends UnitClass<i
|
|
|
97
124
|
*
|
|
98
125
|
* @group Unit Generators
|
|
99
126
|
*/
|
|
100
|
-
export type Unit<C extends UnitSubvalues, M extends UnitSubvalues = {}> = number &
|
|
101
|
-
__uom_types__unit_class: UnitClass<C>;
|
|
102
|
-
__uom_types__unit_meta: UnitMeta<M>;
|
|
103
|
-
}>;
|
|
127
|
+
export type Unit<C extends UnitSubvalues, M extends UnitSubvalues = {}> = number & BrandUnitClass<UnitClass<C>> & BrandUnitMeta<UnitMeta<M>>;
|
|
104
128
|
/**
|
|
105
129
|
* Create a {@link Unit} from already existing {@link UnitClass} and {@link UnitMeta}.
|
|
106
130
|
*
|
|
@@ -114,9 +138,7 @@ export type UnitFrom<C extends UnknownUnitClass, M extends UnknownUnitMeta = Uni
|
|
|
114
138
|
*
|
|
115
139
|
* @group Unit Generators
|
|
116
140
|
*/
|
|
117
|
-
export type UnitConversionRate<M extends UnitSubvalues> = number &
|
|
118
|
-
__uom_types__unit_meta: UnitMeta<M>;
|
|
119
|
-
}>;
|
|
141
|
+
export type UnitConversionRate<M extends UnitSubvalues> = number & BrandUnitMeta<UnitMeta<M>>;
|
|
120
142
|
/**
|
|
121
143
|
* Create a {@link UnitConversionRate} from already existing {@link UnitMeta}.
|
|
122
144
|
*
|
|
@@ -128,9 +150,7 @@ export type UnitConversionRateFrom<M extends UnknownUnitMeta> = M extends UnitMe
|
|
|
128
150
|
*
|
|
129
151
|
* @group Unit Components
|
|
130
152
|
*/
|
|
131
|
-
export type UnitClass<T extends UnitSubvalues> = UnitKeyValues<T> &
|
|
132
|
-
__uno_types__unit_class_type: true;
|
|
133
|
-
}>;
|
|
153
|
+
export type UnitClass<T extends UnitSubvalues> = UnitKeyValues<T> & BrandUnitClassType;
|
|
134
154
|
/**
|
|
135
155
|
* Used to state how units of the same {@link UnitClass} differ from one another.
|
|
136
156
|
* For example, by a scale factor.
|
|
@@ -145,33 +165,25 @@ export type UnitMeta<T extends UnitSubvalues> = UnitKeyValues<T> & Readonly<{
|
|
|
145
165
|
*
|
|
146
166
|
* @group Unknown Units
|
|
147
167
|
*/
|
|
148
|
-
export type UnknownUnit = UnknownAbstractUnit &
|
|
149
|
-
__uom_types__unit_meta: UnknownUnitMeta;
|
|
150
|
-
}>;
|
|
168
|
+
export type UnknownUnit = UnknownAbstractUnit & BrandUnitMeta<UnknownUnitMeta>;
|
|
151
169
|
/**
|
|
152
170
|
* An {@link AbstractUnit} that we don't know anything about.
|
|
153
171
|
*
|
|
154
172
|
* @group Unknown Units
|
|
155
173
|
*/
|
|
156
|
-
export type UnknownAbstractUnit = number &
|
|
157
|
-
__uom_types__unit_class: UnknownUnitClass;
|
|
158
|
-
}>;
|
|
174
|
+
export type UnknownAbstractUnit = number & BrandUnitClass<UnknownUnitClass>;
|
|
159
175
|
/**
|
|
160
176
|
* An {@link UnitConversionRate} that we don't know anything about.
|
|
161
177
|
*
|
|
162
178
|
* @group Unknown Units
|
|
163
179
|
*/
|
|
164
|
-
export type UnknownUnitConversionRate = number &
|
|
165
|
-
__uom_types__unit_meta: UnknownUnitMeta;
|
|
166
|
-
}>;
|
|
180
|
+
export type UnknownUnitConversionRate = number & BrandUnitMeta<UnknownUnitMeta>;
|
|
167
181
|
/**
|
|
168
182
|
* A {@link UnitClass} that we don't know anything about.
|
|
169
183
|
*
|
|
170
184
|
* @group Unknown Units
|
|
171
185
|
*/
|
|
172
|
-
export type UnknownUnitClass = UnknownUnitKeyValues &
|
|
173
|
-
__uno_types__unit_class_type: true;
|
|
174
|
-
}>;
|
|
186
|
+
export type UnknownUnitClass = UnknownUnitKeyValues & BrandUnitClassType;
|
|
175
187
|
/**
|
|
176
188
|
* A {@link UnitMeta} that we don't know anything about.
|
|
177
189
|
*
|
|
@@ -258,28 +270,28 @@ export type DivideUnitSubvalues<A extends UnitSubvalues, B extends UnitSubvalues
|
|
|
258
270
|
*
|
|
259
271
|
* @group Unit Functions
|
|
260
272
|
*/
|
|
261
|
-
export type Pow<
|
|
273
|
+
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;
|
|
262
274
|
/**
|
|
263
275
|
* Put each subvalue of a unit to the power of an exponent.
|
|
264
276
|
*
|
|
265
277
|
* @group Unit Subvalue Functions
|
|
266
278
|
*/
|
|
267
|
-
export type PowUnitSubvalues<
|
|
268
|
-
[S in keyof
|
|
279
|
+
export type PowUnitSubvalues<B extends UnitSubvalues, E extends Exponent> = ExcludeUnitZeroSubvalues<{
|
|
280
|
+
[S in keyof B]: MultiplyExponents<GetExponent<B, S>, E>;
|
|
269
281
|
}>;
|
|
270
282
|
/**
|
|
271
283
|
* Take the nth root of a unit.
|
|
272
284
|
*
|
|
273
285
|
* @group Unit Functions
|
|
274
286
|
*/
|
|
275
|
-
export type Root<
|
|
287
|
+
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;
|
|
276
288
|
/**
|
|
277
289
|
* Take the nth root of each subvalue of a unit.
|
|
278
290
|
*
|
|
279
291
|
* @group Unit Subvalue Functions
|
|
280
292
|
*/
|
|
281
|
-
export type RootUnitSubvalues<
|
|
282
|
-
[S in keyof
|
|
293
|
+
export type RootUnitSubvalues<B extends UnitSubvalues, E extends Exponent> = ExcludeUnitZeroSubvalues<{
|
|
294
|
+
[S in keyof B]: DivideExponents<GetExponent<B, S>, E>;
|
|
283
295
|
}>;
|
|
284
296
|
export type SiUnitKeys = "Second" | "Meter" | "Kilogram" | "Mole" | "Ampere" | "Candela" | "Kelvin" | "Radian";
|
|
285
297
|
/**
|
|
@@ -4256,43 +4268,38 @@ export declare function modSafe<T extends number>(a: OperationIO<T>, b: Operatio
|
|
|
4256
4268
|
* @returns A function that takes a integer and returns an integer between zero (inclusive) and `b` (exclusive).
|
|
4257
4269
|
*/
|
|
4258
4270
|
export declare function modSafe<T extends number>(b: OperationIO<T>): (a: OperationIO<T>) => OperationIO<T>;
|
|
4259
|
-
export type
|
|
4271
|
+
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;
|
|
4272
|
+
export type PowFunction<B extends number, E extends number> = (b: B) => PowResult<B, E>;
|
|
4273
|
+
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;
|
|
4274
|
+
export type RootFunction<B extends number, E extends number> = (b: B) => RootResult<B, E>;
|
|
4260
4275
|
/**
|
|
4261
4276
|
* Raise a number to the power of another.
|
|
4262
4277
|
*
|
|
4263
4278
|
* @category Math
|
|
4264
4279
|
* @returns `base ** exponent`
|
|
4265
4280
|
*/
|
|
4266
|
-
export declare function pow<B extends number, E extends number>(base: B, exponent: E
|
|
4267
|
-
/**
|
|
4268
|
-
* Put a number to the power of 1/2.
|
|
4269
|
-
*
|
|
4270
|
-
* @category Math
|
|
4271
|
-
* @returns `base ** 0.5`
|
|
4272
|
-
*/
|
|
4273
|
-
export declare function pow<B extends number>(base: B, exponent: 0.5): Root<B, 2>;
|
|
4281
|
+
export declare function pow<B extends number, E extends number>(base: B, exponent: E): PowResult<B, E>;
|
|
4274
4282
|
/**
|
|
4275
4283
|
* Put a number to the power of the given value.
|
|
4276
4284
|
*
|
|
4277
4285
|
* @category Math
|
|
4278
4286
|
* @returns `(base) => base ** exponent`
|
|
4279
4287
|
*/
|
|
4280
|
-
export declare function pow<E extends number>(exponent: E): <B extends number>(base: Parameters<PowFunction<
|
|
4281
|
-
export type RootFunction<E extends number, B extends number> = E extends UnknownUnit ? never : E extends UnknownAbstractUnit ? never : E extends PosExponent ? (b: B) => Root<B, E> : (b: B) => number;
|
|
4288
|
+
export declare function pow<E extends number>(exponent: E): <B extends number>(base: Parameters<PowFunction<B, E>>[0]) => ReturnType<PowFunction<B, E>>;
|
|
4282
4289
|
/**
|
|
4283
4290
|
* Take the nth root of a number.
|
|
4284
4291
|
*
|
|
4285
4292
|
* @category Math
|
|
4286
4293
|
* @returns `base ** (1 / exponent)`
|
|
4287
4294
|
*/
|
|
4288
|
-
export declare function root<B extends number, E extends number>(base: B, exponent: E
|
|
4295
|
+
export declare function root<B extends number, E extends number>(base: B, exponent: E): RootResult<B, E>;
|
|
4289
4296
|
/**
|
|
4290
4297
|
* Take the nth root of a number.
|
|
4291
4298
|
*
|
|
4292
4299
|
* @category Math
|
|
4293
4300
|
* @returns `(base) => base ** (1 / exponent)`
|
|
4294
4301
|
*/
|
|
4295
|
-
export declare function root<E extends number>(exponent: E): <B extends number>(base: Parameters<RootFunction<
|
|
4302
|
+
export declare function root<E extends number>(exponent: E): <B extends number>(base: Parameters<RootFunction<B, E>>[0]) => ReturnType<RootFunction<B, E>>;
|
|
4296
4303
|
/**
|
|
4297
4304
|
* Take the square root of the given value.
|
|
4298
4305
|
*
|
package/dist/index.d.mts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// Generated by dts-bundle-generator v9.
|
|
1
|
+
// Generated by dts-bundle-generator v9.5.1
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
4
|
* @file Autogenerated File - Don't manually edit.
|
|
@@ -41,6 +41,35 @@ 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 {
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Brand with the unit meta.
|
|
51
|
+
*/
|
|
52
|
+
export type BrandUnitMeta<UM extends UnknownUnitMeta> = Brand & {
|
|
53
|
+
__uom_types: {
|
|
54
|
+
unitMeta: UM;
|
|
55
|
+
};
|
|
56
|
+
};
|
|
57
|
+
/**
|
|
58
|
+
* Brand with the unit class.
|
|
59
|
+
*/
|
|
60
|
+
export type BrandUnitClass<UC extends UnknownUnitClass> = Brand & {
|
|
61
|
+
__uom_types: {
|
|
62
|
+
unitClass: UC;
|
|
63
|
+
};
|
|
64
|
+
};
|
|
65
|
+
/**
|
|
66
|
+
* Brand that it is a unit class.
|
|
67
|
+
*/
|
|
68
|
+
export type BrandUnitClassType = Brand & {
|
|
69
|
+
__uom_types: {
|
|
70
|
+
unitClassType: true;
|
|
71
|
+
};
|
|
72
|
+
};
|
|
44
73
|
/**
|
|
45
74
|
* Remove all key from the object that are `never`.
|
|
46
75
|
*/
|
|
@@ -83,9 +112,7 @@ export type Exactify<T, U extends T> = T & {
|
|
|
83
112
|
*
|
|
84
113
|
* @group Abstract Unit Generators
|
|
85
114
|
*/
|
|
86
|
-
export type AbstractUnit<C extends UnitSubvalues> = number &
|
|
87
|
-
__uom_types__unit_class: UnitClass<C>;
|
|
88
|
-
}>;
|
|
115
|
+
export type AbstractUnit<C extends UnitSubvalues> = number & BrandUnitClass<UnitClass<C>>;
|
|
89
116
|
/**
|
|
90
117
|
* Create a unit without meta data from an already existing {@link UnitClass}.
|
|
91
118
|
*
|
|
@@ -97,10 +124,7 @@ export type AbstractUnitFrom<C extends UnknownUnitClass> = C extends UnitClass<i
|
|
|
97
124
|
*
|
|
98
125
|
* @group Unit Generators
|
|
99
126
|
*/
|
|
100
|
-
export type Unit<C extends UnitSubvalues, M extends UnitSubvalues = {}> = number &
|
|
101
|
-
__uom_types__unit_class: UnitClass<C>;
|
|
102
|
-
__uom_types__unit_meta: UnitMeta<M>;
|
|
103
|
-
}>;
|
|
127
|
+
export type Unit<C extends UnitSubvalues, M extends UnitSubvalues = {}> = number & BrandUnitClass<UnitClass<C>> & BrandUnitMeta<UnitMeta<M>>;
|
|
104
128
|
/**
|
|
105
129
|
* Create a {@link Unit} from already existing {@link UnitClass} and {@link UnitMeta}.
|
|
106
130
|
*
|
|
@@ -114,9 +138,7 @@ export type UnitFrom<C extends UnknownUnitClass, M extends UnknownUnitMeta = Uni
|
|
|
114
138
|
*
|
|
115
139
|
* @group Unit Generators
|
|
116
140
|
*/
|
|
117
|
-
export type UnitConversionRate<M extends UnitSubvalues> = number &
|
|
118
|
-
__uom_types__unit_meta: UnitMeta<M>;
|
|
119
|
-
}>;
|
|
141
|
+
export type UnitConversionRate<M extends UnitSubvalues> = number & BrandUnitMeta<UnitMeta<M>>;
|
|
120
142
|
/**
|
|
121
143
|
* Create a {@link UnitConversionRate} from already existing {@link UnitMeta}.
|
|
122
144
|
*
|
|
@@ -128,9 +150,7 @@ export type UnitConversionRateFrom<M extends UnknownUnitMeta> = M extends UnitMe
|
|
|
128
150
|
*
|
|
129
151
|
* @group Unit Components
|
|
130
152
|
*/
|
|
131
|
-
export type UnitClass<T extends UnitSubvalues> = UnitKeyValues<T> &
|
|
132
|
-
__uno_types__unit_class_type: true;
|
|
133
|
-
}>;
|
|
153
|
+
export type UnitClass<T extends UnitSubvalues> = UnitKeyValues<T> & BrandUnitClassType;
|
|
134
154
|
/**
|
|
135
155
|
* Used to state how units of the same {@link UnitClass} differ from one another.
|
|
136
156
|
* For example, by a scale factor.
|
|
@@ -145,33 +165,25 @@ export type UnitMeta<T extends UnitSubvalues> = UnitKeyValues<T> & Readonly<{
|
|
|
145
165
|
*
|
|
146
166
|
* @group Unknown Units
|
|
147
167
|
*/
|
|
148
|
-
export type UnknownUnit = UnknownAbstractUnit &
|
|
149
|
-
__uom_types__unit_meta: UnknownUnitMeta;
|
|
150
|
-
}>;
|
|
168
|
+
export type UnknownUnit = UnknownAbstractUnit & BrandUnitMeta<UnknownUnitMeta>;
|
|
151
169
|
/**
|
|
152
170
|
* An {@link AbstractUnit} that we don't know anything about.
|
|
153
171
|
*
|
|
154
172
|
* @group Unknown Units
|
|
155
173
|
*/
|
|
156
|
-
export type UnknownAbstractUnit = number &
|
|
157
|
-
__uom_types__unit_class: UnknownUnitClass;
|
|
158
|
-
}>;
|
|
174
|
+
export type UnknownAbstractUnit = number & BrandUnitClass<UnknownUnitClass>;
|
|
159
175
|
/**
|
|
160
176
|
* An {@link UnitConversionRate} that we don't know anything about.
|
|
161
177
|
*
|
|
162
178
|
* @group Unknown Units
|
|
163
179
|
*/
|
|
164
|
-
export type UnknownUnitConversionRate = number &
|
|
165
|
-
__uom_types__unit_meta: UnknownUnitMeta;
|
|
166
|
-
}>;
|
|
180
|
+
export type UnknownUnitConversionRate = number & BrandUnitMeta<UnknownUnitMeta>;
|
|
167
181
|
/**
|
|
168
182
|
* A {@link UnitClass} that we don't know anything about.
|
|
169
183
|
*
|
|
170
184
|
* @group Unknown Units
|
|
171
185
|
*/
|
|
172
|
-
export type UnknownUnitClass = UnknownUnitKeyValues &
|
|
173
|
-
__uno_types__unit_class_type: true;
|
|
174
|
-
}>;
|
|
186
|
+
export type UnknownUnitClass = UnknownUnitKeyValues & BrandUnitClassType;
|
|
175
187
|
/**
|
|
176
188
|
* A {@link UnitMeta} that we don't know anything about.
|
|
177
189
|
*
|
|
@@ -258,28 +270,28 @@ export type DivideUnitSubvalues<A extends UnitSubvalues, B extends UnitSubvalues
|
|
|
258
270
|
*
|
|
259
271
|
* @group Unit Functions
|
|
260
272
|
*/
|
|
261
|
-
export type Pow<
|
|
273
|
+
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;
|
|
262
274
|
/**
|
|
263
275
|
* Put each subvalue of a unit to the power of an exponent.
|
|
264
276
|
*
|
|
265
277
|
* @group Unit Subvalue Functions
|
|
266
278
|
*/
|
|
267
|
-
export type PowUnitSubvalues<
|
|
268
|
-
[S in keyof
|
|
279
|
+
export type PowUnitSubvalues<B extends UnitSubvalues, E extends Exponent> = ExcludeUnitZeroSubvalues<{
|
|
280
|
+
[S in keyof B]: MultiplyExponents<GetExponent<B, S>, E>;
|
|
269
281
|
}>;
|
|
270
282
|
/**
|
|
271
283
|
* Take the nth root of a unit.
|
|
272
284
|
*
|
|
273
285
|
* @group Unit Functions
|
|
274
286
|
*/
|
|
275
|
-
export type Root<
|
|
287
|
+
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;
|
|
276
288
|
/**
|
|
277
289
|
* Take the nth root of each subvalue of a unit.
|
|
278
290
|
*
|
|
279
291
|
* @group Unit Subvalue Functions
|
|
280
292
|
*/
|
|
281
|
-
export type RootUnitSubvalues<
|
|
282
|
-
[S in keyof
|
|
293
|
+
export type RootUnitSubvalues<B extends UnitSubvalues, E extends Exponent> = ExcludeUnitZeroSubvalues<{
|
|
294
|
+
[S in keyof B]: DivideExponents<GetExponent<B, S>, E>;
|
|
283
295
|
}>;
|
|
284
296
|
export type SiUnitKeys = "Second" | "Meter" | "Kilogram" | "Mole" | "Ampere" | "Candela" | "Kelvin" | "Radian";
|
|
285
297
|
/**
|
|
@@ -4256,43 +4268,38 @@ export declare function modSafe<T extends number>(a: OperationIO<T>, b: Operatio
|
|
|
4256
4268
|
* @returns A function that takes a integer and returns an integer between zero (inclusive) and `b` (exclusive).
|
|
4257
4269
|
*/
|
|
4258
4270
|
export declare function modSafe<T extends number>(b: OperationIO<T>): (a: OperationIO<T>) => OperationIO<T>;
|
|
4259
|
-
export type
|
|
4271
|
+
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;
|
|
4272
|
+
export type PowFunction<B extends number, E extends number> = (b: B) => PowResult<B, E>;
|
|
4273
|
+
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;
|
|
4274
|
+
export type RootFunction<B extends number, E extends number> = (b: B) => RootResult<B, E>;
|
|
4260
4275
|
/**
|
|
4261
4276
|
* Raise a number to the power of another.
|
|
4262
4277
|
*
|
|
4263
4278
|
* @category Math
|
|
4264
4279
|
* @returns `base ** exponent`
|
|
4265
4280
|
*/
|
|
4266
|
-
export declare function pow<B extends number, E extends number>(base: B, exponent: E
|
|
4267
|
-
/**
|
|
4268
|
-
* Put a number to the power of 1/2.
|
|
4269
|
-
*
|
|
4270
|
-
* @category Math
|
|
4271
|
-
* @returns `base ** 0.5`
|
|
4272
|
-
*/
|
|
4273
|
-
export declare function pow<B extends number>(base: B, exponent: 0.5): Root<B, 2>;
|
|
4281
|
+
export declare function pow<B extends number, E extends number>(base: B, exponent: E): PowResult<B, E>;
|
|
4274
4282
|
/**
|
|
4275
4283
|
* Put a number to the power of the given value.
|
|
4276
4284
|
*
|
|
4277
4285
|
* @category Math
|
|
4278
4286
|
* @returns `(base) => base ** exponent`
|
|
4279
4287
|
*/
|
|
4280
|
-
export declare function pow<E extends number>(exponent: E): <B extends number>(base: Parameters<PowFunction<
|
|
4281
|
-
export type RootFunction<E extends number, B extends number> = E extends UnknownUnit ? never : E extends UnknownAbstractUnit ? never : E extends PosExponent ? (b: B) => Root<B, E> : (b: B) => number;
|
|
4288
|
+
export declare function pow<E extends number>(exponent: E): <B extends number>(base: Parameters<PowFunction<B, E>>[0]) => ReturnType<PowFunction<B, E>>;
|
|
4282
4289
|
/**
|
|
4283
4290
|
* Take the nth root of a number.
|
|
4284
4291
|
*
|
|
4285
4292
|
* @category Math
|
|
4286
4293
|
* @returns `base ** (1 / exponent)`
|
|
4287
4294
|
*/
|
|
4288
|
-
export declare function root<B extends number, E extends number>(base: B, exponent: E
|
|
4295
|
+
export declare function root<B extends number, E extends number>(base: B, exponent: E): RootResult<B, E>;
|
|
4289
4296
|
/**
|
|
4290
4297
|
* Take the nth root of a number.
|
|
4291
4298
|
*
|
|
4292
4299
|
* @category Math
|
|
4293
4300
|
* @returns `(base) => base ** (1 / exponent)`
|
|
4294
4301
|
*/
|
|
4295
|
-
export declare function root<E extends number>(exponent: E): <B extends number>(base: Parameters<RootFunction<
|
|
4302
|
+
export declare function root<E extends number>(exponent: E): <B extends number>(base: Parameters<RootFunction<B, E>>[0]) => ReturnType<RootFunction<B, E>>;
|
|
4296
4303
|
/**
|
|
4297
4304
|
* Take the square root of the given value.
|
|
4298
4305
|
*
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "uom-types",
|
|
3
|
-
"version": "4.
|
|
3
|
+
"version": "4.1.1",
|
|
4
4
|
"description": "Typesafe units with no runtime overhead.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"uom",
|
|
@@ -82,7 +82,7 @@
|
|
|
82
82
|
"typecheck": "tsc -p tsconfig.build.json --noEmit"
|
|
83
83
|
},
|
|
84
84
|
"resolutions": {
|
|
85
|
-
"dts-bundle-generator": "9.
|
|
85
|
+
"dts-bundle-generator": "9.5.1"
|
|
86
86
|
},
|
|
87
87
|
"devDependencies": {
|
|
88
88
|
"@commitlint/cli": "19.5.0",
|
|
@@ -101,12 +101,12 @@
|
|
|
101
101
|
"@semantic-release/release-notes-generator": "14.0.1",
|
|
102
102
|
"@stylistic/eslint-plugin": "2.9.0",
|
|
103
103
|
"@types/node": "16.18.113",
|
|
104
|
-
"@typescript-eslint/eslint-plugin": "8.
|
|
105
|
-
"@typescript-eslint/parser": "8.
|
|
104
|
+
"@typescript-eslint/eslint-plugin": "8.9.0",
|
|
105
|
+
"@typescript-eslint/parser": "8.9.0",
|
|
106
106
|
"@vitest/coverage-v8": "2.1.2",
|
|
107
107
|
"@vitest/eslint-plugin": "1.1.7",
|
|
108
108
|
"commitizen": "4.3.1",
|
|
109
|
-
"cspell": "8.15.
|
|
109
|
+
"cspell": "8.15.3",
|
|
110
110
|
"cz-conventional-changelog": "3.3.0",
|
|
111
111
|
"eslint": "9.12.0",
|
|
112
112
|
"eslint-config-prettier": "9.1.0",
|
|
@@ -117,7 +117,7 @@
|
|
|
117
117
|
"eslint-plugin-format": "0.1.2",
|
|
118
118
|
"eslint-plugin-functional": "7.0.2",
|
|
119
119
|
"eslint-plugin-import-x": "4.3.1",
|
|
120
|
-
"eslint-plugin-jsdoc": "50.
|
|
120
|
+
"eslint-plugin-jsdoc": "50.4.1",
|
|
121
121
|
"eslint-plugin-jsonc": "2.16.0",
|
|
122
122
|
"eslint-plugin-markdown": "5.1.0",
|
|
123
123
|
"eslint-plugin-n": "17.11.1",
|