uom-types 5.0.1 → 5.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +7 -0
- package/dist/chunks/B2m_qd8-.mjs +252 -0
- package/dist/chunks/Cm6vkgfO.cjs +289 -0
- package/dist/chunks/nRDIxMhl.mjs +483 -0
- package/dist/chunks/ph65nozB.cjs +564 -0
- package/dist/converters.cjs +87 -0
- package/dist/converters.d.cts +569 -0
- package/dist/converters.d.mts +569 -0
- package/dist/converters.mjs +2 -0
- package/dist/index.cjs +118 -844
- package/dist/index.d.cts +72 -72
- package/dist/index.d.mts +72 -72
- package/dist/index.mjs +2 -732
- package/dist/math.cjs +42 -0
- package/dist/math.d.cts +458 -0
- package/dist/math.d.mts +458 -0
- package/dist/math.mjs +1 -0
- package/dist/types.d.cts +247 -0
- package/dist/types.d.mts +247 -0
- package/dist/units.d.cts +3603 -0
- package/dist/units.d.mts +3603 -0
- package/package.json +92 -71
package/dist/index.d.cts
CHANGED
|
@@ -174,78 +174,6 @@ type UnknownUnitKeyValues = BrandUnitKeyValues<string, {}>;
|
|
|
174
174
|
* @group Unit Components
|
|
175
175
|
*/
|
|
176
176
|
export type UnitSubvalues = Record<string, Exponent>;
|
|
177
|
-
/**
|
|
178
|
-
* Take the inverse of a unit.
|
|
179
|
-
*
|
|
180
|
-
* @group Unit Functions
|
|
181
|
-
* @returns `1/X`.
|
|
182
|
-
*/
|
|
183
|
-
export type Inverse<X extends number> = Pow<X, -1>;
|
|
184
|
-
/**
|
|
185
|
-
* Inverses each of the subvalues.
|
|
186
|
-
*
|
|
187
|
-
* @group Unit Subvalue Functions
|
|
188
|
-
*/
|
|
189
|
-
export type InverseUnitSubvalues<T extends UnitSubvalues> = PowUnitSubvalues<T, -1>;
|
|
190
|
-
/**
|
|
191
|
-
* Multiply a unit by another unit.
|
|
192
|
-
*
|
|
193
|
-
* @group Unit Functions
|
|
194
|
-
* @returns `A⋅B`
|
|
195
|
-
*/
|
|
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;
|
|
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;
|
|
200
|
-
/**
|
|
201
|
-
* Multiply each of the subvalues from a unit with the corresponding once from another unit.
|
|
202
|
-
*
|
|
203
|
-
* @group Unit Subvalue Functions
|
|
204
|
-
*/
|
|
205
|
-
export type MultiplyUnitSubvalues<A extends UnitSubvalues, B extends UnitSubvalues> = ExcludeUnitZeroSubvalues<{
|
|
206
|
-
[S in keyof A | keyof B]: SumExponents<GetExponent<A, S>, GetExponent<B, S>>;
|
|
207
|
-
}>;
|
|
208
|
-
/**
|
|
209
|
-
* Divide a unit by another unit.
|
|
210
|
-
*
|
|
211
|
-
* @group Unit Functions
|
|
212
|
-
* @returns `A/B`
|
|
213
|
-
*/
|
|
214
|
-
export type Divide<A extends number, B extends number> = Multiply<A, Inverse<B>>;
|
|
215
|
-
/**
|
|
216
|
-
* Divide each of the subvalues from a unit with the corresponding once from another unit.
|
|
217
|
-
*
|
|
218
|
-
* @group Unit Subvalue Functions
|
|
219
|
-
*/
|
|
220
|
-
export type DivideUnitSubvalues<A extends UnitSubvalues, B extends UnitSubvalues> = MultiplyUnitSubvalues<A, InverseUnitSubvalues<B>>;
|
|
221
|
-
/**
|
|
222
|
-
* Put a unit to the power of an exponent.
|
|
223
|
-
*
|
|
224
|
-
* @group Unit Functions
|
|
225
|
-
*/
|
|
226
|
-
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;
|
|
227
|
-
/**
|
|
228
|
-
* Put each subvalue of a unit to the power of an exponent.
|
|
229
|
-
*
|
|
230
|
-
* @group Unit Subvalue Functions
|
|
231
|
-
*/
|
|
232
|
-
export type PowUnitSubvalues<B extends UnitSubvalues, E extends Exponent> = ExcludeUnitZeroSubvalues<{
|
|
233
|
-
[S in keyof B]: MultiplyExponents<GetExponent<B, S>, E>;
|
|
234
|
-
}>;
|
|
235
|
-
/**
|
|
236
|
-
* Take the nth root of a unit.
|
|
237
|
-
*
|
|
238
|
-
* @group Unit Functions
|
|
239
|
-
*/
|
|
240
|
-
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;
|
|
241
|
-
/**
|
|
242
|
-
* Take the nth root of each subvalue of a unit.
|
|
243
|
-
*
|
|
244
|
-
* @group Unit Subvalue Functions
|
|
245
|
-
*/
|
|
246
|
-
export type RootUnitSubvalues<B extends UnitSubvalues, E extends Exponent> = ExcludeUnitZeroSubvalues<{
|
|
247
|
-
[S in keyof B]: DivideExponents<GetExponent<B, S>, E>;
|
|
248
|
-
}>;
|
|
249
177
|
type SiUnitKeys = "Second" | "Meter" | "Kilogram" | "Mole" | "Ampere" | "Candela" | "Kelvin" | "Radian";
|
|
250
178
|
/**
|
|
251
179
|
* The {@link UnitClass} that is the base of all {@link Unit}s defined by this library.
|
|
@@ -1174,6 +1102,78 @@ export type MagneticPermeabilityUnitFrom<M extends UnknownUnitMeta> = UnitFrom<M
|
|
|
1174
1102
|
* @symbol `H/m`
|
|
1175
1103
|
*/
|
|
1176
1104
|
export type HenryPerMeter = MagneticPermeabilityUnit<{}>;
|
|
1105
|
+
/**
|
|
1106
|
+
* Take the inverse of a unit.
|
|
1107
|
+
*
|
|
1108
|
+
* @group Unit Functions
|
|
1109
|
+
* @returns `1/X`.
|
|
1110
|
+
*/
|
|
1111
|
+
export type Inverse<X extends number> = Pow<X, -1>;
|
|
1112
|
+
/**
|
|
1113
|
+
* Inverses each of the subvalues.
|
|
1114
|
+
*
|
|
1115
|
+
* @group Unit Subvalue Functions
|
|
1116
|
+
*/
|
|
1117
|
+
export type InverseUnitSubvalues<T extends UnitSubvalues> = PowUnitSubvalues<T, -1>;
|
|
1118
|
+
/**
|
|
1119
|
+
* Multiply a unit by another unit.
|
|
1120
|
+
*
|
|
1121
|
+
* @group Unit Functions
|
|
1122
|
+
* @returns `A⋅B`
|
|
1123
|
+
*/
|
|
1124
|
+
export type Multiply<A extends number, B extends number> = A extends UnknownUnit ? MultiplyHelperUnit<A, B> : B extends UnknownUnit ? MultiplyHelperUnit<B, A> : A extends UnknownAbstractUnit ? MultiplyHelperAbstractUnit<A, B> : B extends UnknownAbstractUnit ? MultiplyHelperAbstractUnit<B, A> : A extends UnknownUnitConversionRate ? MultiplyHelperUnitConversionRate<A, B> : B extends UnknownUnitConversionRate ? MultiplyHelperUnitConversionRate<B, A> : number;
|
|
1125
|
+
type MultiplyHelperUnit<A extends UnknownUnit, B extends number> = A extends Unit<infer AClass, infer AMeta> ? B extends Unit<infer BClass, infer BMeta> ? Unit<FlatternAlias<MultiplyUnitSubvalues<AClass, BClass>>, FlatternAlias<MultiplyUnitSubvalues<AMeta, BMeta>>> : B extends AbstractUnit<infer BClass> ? Unit<FlatternAlias<MultiplyUnitSubvalues<AClass, BClass>>, AMeta> : B extends UnitConversionRate<infer BMeta> ? Unit<AClass, FlatternAlias<MultiplyUnitSubvalues<AMeta, BMeta>>> : A : never;
|
|
1126
|
+
type MultiplyHelperAbstractUnit<A extends UnknownAbstractUnit, B extends number> = A extends AbstractUnit<infer AClass> ? B extends AbstractUnit<infer BClass> ? AbstractUnit<FlatternAlias<MultiplyUnitSubvalues<AClass, BClass>>> : B extends UnitConversionRate<infer BMeta> ? Unit<AClass, BMeta> : A : never;
|
|
1127
|
+
type MultiplyHelperUnitConversionRate<A extends UnknownUnitConversionRate, B extends number> = A extends UnitConversionRate<infer AMeta> ? B extends UnitConversionRate<infer BMeta> ? UnitConversionRate<FlatternAlias<MultiplyUnitSubvalues<AMeta, BMeta>>> : A : never;
|
|
1128
|
+
/**
|
|
1129
|
+
* Multiply each of the subvalues from a unit with the corresponding once from another unit.
|
|
1130
|
+
*
|
|
1131
|
+
* @group Unit Subvalue Functions
|
|
1132
|
+
*/
|
|
1133
|
+
export type MultiplyUnitSubvalues<A extends UnitSubvalues, B extends UnitSubvalues> = ExcludeUnitZeroSubvalues<{
|
|
1134
|
+
[S in keyof A | keyof B]: SumExponents<GetExponent<A, S>, GetExponent<B, S>>;
|
|
1135
|
+
}>;
|
|
1136
|
+
/**
|
|
1137
|
+
* Divide a unit by another unit.
|
|
1138
|
+
*
|
|
1139
|
+
* @group Unit Functions
|
|
1140
|
+
* @returns `A/B`
|
|
1141
|
+
*/
|
|
1142
|
+
export type Divide<A extends number, B extends number> = Multiply<A, Inverse<B>>;
|
|
1143
|
+
/**
|
|
1144
|
+
* Divide each of the subvalues from a unit with the corresponding once from another unit.
|
|
1145
|
+
*
|
|
1146
|
+
* @group Unit Subvalue Functions
|
|
1147
|
+
*/
|
|
1148
|
+
export type DivideUnitSubvalues<A extends UnitSubvalues, B extends UnitSubvalues> = MultiplyUnitSubvalues<A, InverseUnitSubvalues<B>>;
|
|
1149
|
+
/**
|
|
1150
|
+
* Put a unit to the power of an exponent.
|
|
1151
|
+
*
|
|
1152
|
+
* @group Unit Functions
|
|
1153
|
+
*/
|
|
1154
|
+
export type Pow<B extends number, E extends Exponent> = B extends Unit<infer Class, infer Meta> ? Unit<FlatternAlias<PowUnitSubvalues<Class, E>>, FlatternAlias<PowUnitSubvalues<Meta, E>>> : B extends AbstractUnit<infer Class> ? AbstractUnit<FlatternAlias<PowUnitSubvalues<Class, E>>> : B extends UnitConversionRate<infer Meta> ? UnitConversionRate<FlatternAlias<PowUnitSubvalues<Meta, E>>> : number;
|
|
1155
|
+
/**
|
|
1156
|
+
* Put each subvalue of a unit to the power of an exponent.
|
|
1157
|
+
*
|
|
1158
|
+
* @group Unit Subvalue Functions
|
|
1159
|
+
*/
|
|
1160
|
+
export type PowUnitSubvalues<B extends UnitSubvalues, E extends Exponent> = ExcludeUnitZeroSubvalues<{
|
|
1161
|
+
[S in keyof B]: MultiplyExponents<GetExponent<B, S>, E>;
|
|
1162
|
+
}>;
|
|
1163
|
+
/**
|
|
1164
|
+
* Take the nth root of a unit.
|
|
1165
|
+
*
|
|
1166
|
+
* @group Unit Functions
|
|
1167
|
+
*/
|
|
1168
|
+
export type Root<B extends number, E extends Exponent> = B extends Unit<infer Class, infer Meta> ? Unit<FlatternAlias<RootUnitSubvalues<Class, E>>, FlatternAlias<RootUnitSubvalues<Meta, E>>> : B extends AbstractUnit<infer Class> ? AbstractUnit<FlatternAlias<RootUnitSubvalues<Class, E>>> : B extends UnitConversionRate<infer Meta> ? UnitConversionRate<FlatternAlias<RootUnitSubvalues<Meta, E>>> : number;
|
|
1169
|
+
/**
|
|
1170
|
+
* Take the nth root of each subvalue of a unit.
|
|
1171
|
+
*
|
|
1172
|
+
* @group Unit Subvalue Functions
|
|
1173
|
+
*/
|
|
1174
|
+
export type RootUnitSubvalues<B extends UnitSubvalues, E extends Exponent> = ExcludeUnitZeroSubvalues<{
|
|
1175
|
+
[S in keyof B]: DivideExponents<GetExponent<B, S>, E>;
|
|
1176
|
+
}>;
|
|
1177
1177
|
/**
|
|
1178
1178
|
* Put the given {@link Unit} to the power of 2.
|
|
1179
1179
|
*
|
package/dist/index.d.mts
CHANGED
|
@@ -174,78 +174,6 @@ type UnknownUnitKeyValues = BrandUnitKeyValues<string, {}>;
|
|
|
174
174
|
* @group Unit Components
|
|
175
175
|
*/
|
|
176
176
|
export type UnitSubvalues = Record<string, Exponent>;
|
|
177
|
-
/**
|
|
178
|
-
* Take the inverse of a unit.
|
|
179
|
-
*
|
|
180
|
-
* @group Unit Functions
|
|
181
|
-
* @returns `1/X`.
|
|
182
|
-
*/
|
|
183
|
-
export type Inverse<X extends number> = Pow<X, -1>;
|
|
184
|
-
/**
|
|
185
|
-
* Inverses each of the subvalues.
|
|
186
|
-
*
|
|
187
|
-
* @group Unit Subvalue Functions
|
|
188
|
-
*/
|
|
189
|
-
export type InverseUnitSubvalues<T extends UnitSubvalues> = PowUnitSubvalues<T, -1>;
|
|
190
|
-
/**
|
|
191
|
-
* Multiply a unit by another unit.
|
|
192
|
-
*
|
|
193
|
-
* @group Unit Functions
|
|
194
|
-
* @returns `A⋅B`
|
|
195
|
-
*/
|
|
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;
|
|
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;
|
|
200
|
-
/**
|
|
201
|
-
* Multiply each of the subvalues from a unit with the corresponding once from another unit.
|
|
202
|
-
*
|
|
203
|
-
* @group Unit Subvalue Functions
|
|
204
|
-
*/
|
|
205
|
-
export type MultiplyUnitSubvalues<A extends UnitSubvalues, B extends UnitSubvalues> = ExcludeUnitZeroSubvalues<{
|
|
206
|
-
[S in keyof A | keyof B]: SumExponents<GetExponent<A, S>, GetExponent<B, S>>;
|
|
207
|
-
}>;
|
|
208
|
-
/**
|
|
209
|
-
* Divide a unit by another unit.
|
|
210
|
-
*
|
|
211
|
-
* @group Unit Functions
|
|
212
|
-
* @returns `A/B`
|
|
213
|
-
*/
|
|
214
|
-
export type Divide<A extends number, B extends number> = Multiply<A, Inverse<B>>;
|
|
215
|
-
/**
|
|
216
|
-
* Divide each of the subvalues from a unit with the corresponding once from another unit.
|
|
217
|
-
*
|
|
218
|
-
* @group Unit Subvalue Functions
|
|
219
|
-
*/
|
|
220
|
-
export type DivideUnitSubvalues<A extends UnitSubvalues, B extends UnitSubvalues> = MultiplyUnitSubvalues<A, InverseUnitSubvalues<B>>;
|
|
221
|
-
/**
|
|
222
|
-
* Put a unit to the power of an exponent.
|
|
223
|
-
*
|
|
224
|
-
* @group Unit Functions
|
|
225
|
-
*/
|
|
226
|
-
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;
|
|
227
|
-
/**
|
|
228
|
-
* Put each subvalue of a unit to the power of an exponent.
|
|
229
|
-
*
|
|
230
|
-
* @group Unit Subvalue Functions
|
|
231
|
-
*/
|
|
232
|
-
export type PowUnitSubvalues<B extends UnitSubvalues, E extends Exponent> = ExcludeUnitZeroSubvalues<{
|
|
233
|
-
[S in keyof B]: MultiplyExponents<GetExponent<B, S>, E>;
|
|
234
|
-
}>;
|
|
235
|
-
/**
|
|
236
|
-
* Take the nth root of a unit.
|
|
237
|
-
*
|
|
238
|
-
* @group Unit Functions
|
|
239
|
-
*/
|
|
240
|
-
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;
|
|
241
|
-
/**
|
|
242
|
-
* Take the nth root of each subvalue of a unit.
|
|
243
|
-
*
|
|
244
|
-
* @group Unit Subvalue Functions
|
|
245
|
-
*/
|
|
246
|
-
export type RootUnitSubvalues<B extends UnitSubvalues, E extends Exponent> = ExcludeUnitZeroSubvalues<{
|
|
247
|
-
[S in keyof B]: DivideExponents<GetExponent<B, S>, E>;
|
|
248
|
-
}>;
|
|
249
177
|
type SiUnitKeys = "Second" | "Meter" | "Kilogram" | "Mole" | "Ampere" | "Candela" | "Kelvin" | "Radian";
|
|
250
178
|
/**
|
|
251
179
|
* The {@link UnitClass} that is the base of all {@link Unit}s defined by this library.
|
|
@@ -1174,6 +1102,78 @@ export type MagneticPermeabilityUnitFrom<M extends UnknownUnitMeta> = UnitFrom<M
|
|
|
1174
1102
|
* @symbol `H/m`
|
|
1175
1103
|
*/
|
|
1176
1104
|
export type HenryPerMeter = MagneticPermeabilityUnit<{}>;
|
|
1105
|
+
/**
|
|
1106
|
+
* Take the inverse of a unit.
|
|
1107
|
+
*
|
|
1108
|
+
* @group Unit Functions
|
|
1109
|
+
* @returns `1/X`.
|
|
1110
|
+
*/
|
|
1111
|
+
export type Inverse<X extends number> = Pow<X, -1>;
|
|
1112
|
+
/**
|
|
1113
|
+
* Inverses each of the subvalues.
|
|
1114
|
+
*
|
|
1115
|
+
* @group Unit Subvalue Functions
|
|
1116
|
+
*/
|
|
1117
|
+
export type InverseUnitSubvalues<T extends UnitSubvalues> = PowUnitSubvalues<T, -1>;
|
|
1118
|
+
/**
|
|
1119
|
+
* Multiply a unit by another unit.
|
|
1120
|
+
*
|
|
1121
|
+
* @group Unit Functions
|
|
1122
|
+
* @returns `A⋅B`
|
|
1123
|
+
*/
|
|
1124
|
+
export type Multiply<A extends number, B extends number> = A extends UnknownUnit ? MultiplyHelperUnit<A, B> : B extends UnknownUnit ? MultiplyHelperUnit<B, A> : A extends UnknownAbstractUnit ? MultiplyHelperAbstractUnit<A, B> : B extends UnknownAbstractUnit ? MultiplyHelperAbstractUnit<B, A> : A extends UnknownUnitConversionRate ? MultiplyHelperUnitConversionRate<A, B> : B extends UnknownUnitConversionRate ? MultiplyHelperUnitConversionRate<B, A> : number;
|
|
1125
|
+
type MultiplyHelperUnit<A extends UnknownUnit, B extends number> = A extends Unit<infer AClass, infer AMeta> ? B extends Unit<infer BClass, infer BMeta> ? Unit<FlatternAlias<MultiplyUnitSubvalues<AClass, BClass>>, FlatternAlias<MultiplyUnitSubvalues<AMeta, BMeta>>> : B extends AbstractUnit<infer BClass> ? Unit<FlatternAlias<MultiplyUnitSubvalues<AClass, BClass>>, AMeta> : B extends UnitConversionRate<infer BMeta> ? Unit<AClass, FlatternAlias<MultiplyUnitSubvalues<AMeta, BMeta>>> : A : never;
|
|
1126
|
+
type MultiplyHelperAbstractUnit<A extends UnknownAbstractUnit, B extends number> = A extends AbstractUnit<infer AClass> ? B extends AbstractUnit<infer BClass> ? AbstractUnit<FlatternAlias<MultiplyUnitSubvalues<AClass, BClass>>> : B extends UnitConversionRate<infer BMeta> ? Unit<AClass, BMeta> : A : never;
|
|
1127
|
+
type MultiplyHelperUnitConversionRate<A extends UnknownUnitConversionRate, B extends number> = A extends UnitConversionRate<infer AMeta> ? B extends UnitConversionRate<infer BMeta> ? UnitConversionRate<FlatternAlias<MultiplyUnitSubvalues<AMeta, BMeta>>> : A : never;
|
|
1128
|
+
/**
|
|
1129
|
+
* Multiply each of the subvalues from a unit with the corresponding once from another unit.
|
|
1130
|
+
*
|
|
1131
|
+
* @group Unit Subvalue Functions
|
|
1132
|
+
*/
|
|
1133
|
+
export type MultiplyUnitSubvalues<A extends UnitSubvalues, B extends UnitSubvalues> = ExcludeUnitZeroSubvalues<{
|
|
1134
|
+
[S in keyof A | keyof B]: SumExponents<GetExponent<A, S>, GetExponent<B, S>>;
|
|
1135
|
+
}>;
|
|
1136
|
+
/**
|
|
1137
|
+
* Divide a unit by another unit.
|
|
1138
|
+
*
|
|
1139
|
+
* @group Unit Functions
|
|
1140
|
+
* @returns `A/B`
|
|
1141
|
+
*/
|
|
1142
|
+
export type Divide<A extends number, B extends number> = Multiply<A, Inverse<B>>;
|
|
1143
|
+
/**
|
|
1144
|
+
* Divide each of the subvalues from a unit with the corresponding once from another unit.
|
|
1145
|
+
*
|
|
1146
|
+
* @group Unit Subvalue Functions
|
|
1147
|
+
*/
|
|
1148
|
+
export type DivideUnitSubvalues<A extends UnitSubvalues, B extends UnitSubvalues> = MultiplyUnitSubvalues<A, InverseUnitSubvalues<B>>;
|
|
1149
|
+
/**
|
|
1150
|
+
* Put a unit to the power of an exponent.
|
|
1151
|
+
*
|
|
1152
|
+
* @group Unit Functions
|
|
1153
|
+
*/
|
|
1154
|
+
export type Pow<B extends number, E extends Exponent> = B extends Unit<infer Class, infer Meta> ? Unit<FlatternAlias<PowUnitSubvalues<Class, E>>, FlatternAlias<PowUnitSubvalues<Meta, E>>> : B extends AbstractUnit<infer Class> ? AbstractUnit<FlatternAlias<PowUnitSubvalues<Class, E>>> : B extends UnitConversionRate<infer Meta> ? UnitConversionRate<FlatternAlias<PowUnitSubvalues<Meta, E>>> : number;
|
|
1155
|
+
/**
|
|
1156
|
+
* Put each subvalue of a unit to the power of an exponent.
|
|
1157
|
+
*
|
|
1158
|
+
* @group Unit Subvalue Functions
|
|
1159
|
+
*/
|
|
1160
|
+
export type PowUnitSubvalues<B extends UnitSubvalues, E extends Exponent> = ExcludeUnitZeroSubvalues<{
|
|
1161
|
+
[S in keyof B]: MultiplyExponents<GetExponent<B, S>, E>;
|
|
1162
|
+
}>;
|
|
1163
|
+
/**
|
|
1164
|
+
* Take the nth root of a unit.
|
|
1165
|
+
*
|
|
1166
|
+
* @group Unit Functions
|
|
1167
|
+
*/
|
|
1168
|
+
export type Root<B extends number, E extends Exponent> = B extends Unit<infer Class, infer Meta> ? Unit<FlatternAlias<RootUnitSubvalues<Class, E>>, FlatternAlias<RootUnitSubvalues<Meta, E>>> : B extends AbstractUnit<infer Class> ? AbstractUnit<FlatternAlias<RootUnitSubvalues<Class, E>>> : B extends UnitConversionRate<infer Meta> ? UnitConversionRate<FlatternAlias<RootUnitSubvalues<Meta, E>>> : number;
|
|
1169
|
+
/**
|
|
1170
|
+
* Take the nth root of each subvalue of a unit.
|
|
1171
|
+
*
|
|
1172
|
+
* @group Unit Subvalue Functions
|
|
1173
|
+
*/
|
|
1174
|
+
export type RootUnitSubvalues<B extends UnitSubvalues, E extends Exponent> = ExcludeUnitZeroSubvalues<{
|
|
1175
|
+
[S in keyof B]: DivideExponents<GetExponent<B, S>, E>;
|
|
1176
|
+
}>;
|
|
1177
1177
|
/**
|
|
1178
1178
|
* Put the given {@link Unit} to the power of 2.
|
|
1179
1179
|
*
|