uom-types 4.1.0 → 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 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
+ ## [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
+
4
11
  # [4.1.0](https://github.com/RebeccaStevens/uom-types/compare/v4.0.1...v4.1.0) (2024-10-18)
5
12
 
6
13
 
package/dist/index.d.cts CHANGED
@@ -270,28 +270,28 @@ export type DivideUnitSubvalues<A extends UnitSubvalues, B extends UnitSubvalues
270
270
  *
271
271
  * @group Unit Functions
272
272
  */
273
- export type Pow<T extends number, N extends Exponent> = T extends Unit<infer Class, infer Meta> ? Unit<FlatternAlias<PowUnitSubvalues<Class, N>>, FlatternAlias<PowUnitSubvalues<Meta, N>>> : T extends AbstractUnit<infer Class> ? AbstractUnit<FlatternAlias<PowUnitSubvalues<Class, N>>> : T extends UnitConversionRate<infer Meta> ? UnitConversionRate<FlatternAlias<PowUnitSubvalues<Meta, N>>> : number;
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;
274
274
  /**
275
275
  * Put each subvalue of a unit to the power of an exponent.
276
276
  *
277
277
  * @group Unit Subvalue Functions
278
278
  */
279
- export type PowUnitSubvalues<T extends UnitSubvalues, E extends Exponent> = ExcludeUnitZeroSubvalues<{
280
- [S in keyof T]: MultiplyExponents<GetExponent<T, S>, E>;
279
+ export type PowUnitSubvalues<B extends UnitSubvalues, E extends Exponent> = ExcludeUnitZeroSubvalues<{
280
+ [S in keyof B]: MultiplyExponents<GetExponent<B, S>, E>;
281
281
  }>;
282
282
  /**
283
283
  * Take the nth root of a unit.
284
284
  *
285
285
  * @group Unit Functions
286
286
  */
287
- export type Root<T extends number, N extends Exponent> = T extends Unit<infer Class, infer Meta> ? Unit<FlatternAlias<RootUnitSubvalues<Class, N>>, FlatternAlias<RootUnitSubvalues<Meta, N>>> : T extends AbstractUnit<infer Class> ? AbstractUnit<FlatternAlias<RootUnitSubvalues<Class, N>>> : T extends UnitConversionRate<infer Meta> ? UnitConversionRate<FlatternAlias<RootUnitSubvalues<Meta, N>>> : number;
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;
288
288
  /**
289
289
  * Take the nth root of each subvalue of a unit.
290
290
  *
291
291
  * @group Unit Subvalue Functions
292
292
  */
293
- export type RootUnitSubvalues<T extends UnitSubvalues, E extends Exponent> = ExcludeUnitZeroSubvalues<{
294
- [S in keyof T]: DivideExponents<GetExponent<T, S>, E>;
293
+ export type RootUnitSubvalues<B extends UnitSubvalues, E extends Exponent> = ExcludeUnitZeroSubvalues<{
294
+ [S in keyof B]: DivideExponents<GetExponent<B, S>, E>;
295
295
  }>;
296
296
  export type SiUnitKeys = "Second" | "Meter" | "Kilogram" | "Mole" | "Ampere" | "Candela" | "Kelvin" | "Radian";
297
297
  /**
@@ -4268,43 +4268,38 @@ export declare function modSafe<T extends number>(a: OperationIO<T>, b: Operatio
4268
4268
  * @returns A function that takes a integer and returns an integer between zero (inclusive) and `b` (exclusive).
4269
4269
  */
4270
4270
  export declare function modSafe<T extends number>(b: OperationIO<T>): (a: OperationIO<T>) => OperationIO<T>;
4271
- export type PowFunction<E extends number, B extends number> = E extends UnknownUnit ? never : E extends UnknownAbstractUnit ? never : E extends Exponent ? (b: B) => Pow<B, E> : E extends 0.5 ? (b: B) => Root<B, 2> : (b: B) => number;
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>;
4272
4275
  /**
4273
4276
  * Raise a number to the power of another.
4274
4277
  *
4275
4278
  * @category Math
4276
4279
  * @returns `base ** exponent`
4277
4280
  */
4278
- export declare function pow<B extends number, E extends number>(base: B, exponent: E extends UnknownUnit ? never : E extends UnknownAbstractUnit ? never : E): E extends Exponent ? Pow<B, E> : number;
4279
- /**
4280
- * Put a number to the power of 1/2.
4281
- *
4282
- * @category Math
4283
- * @returns `base ** 0.5`
4284
- */
4285
- 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>;
4286
4282
  /**
4287
4283
  * Put a number to the power of the given value.
4288
4284
  *
4289
4285
  * @category Math
4290
4286
  * @returns `(base) => base ** exponent`
4291
4287
  */
4292
- export declare function pow<E extends number>(exponent: E): <B extends number>(base: Parameters<PowFunction<E, B>>[0]) => ReturnType<PowFunction<E, B>>;
4293
- 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>>;
4294
4289
  /**
4295
4290
  * Take the nth root of a number.
4296
4291
  *
4297
4292
  * @category Math
4298
4293
  * @returns `base ** (1 / exponent)`
4299
4294
  */
4300
- export declare function root<B extends number, E extends number>(base: B, exponent: E extends UnknownUnit ? never : E extends UnknownAbstractUnit ? never : E): E extends PosExponent ? Root<B, E> : number;
4295
+ export declare function root<B extends number, E extends number>(base: B, exponent: E): RootResult<B, E>;
4301
4296
  /**
4302
4297
  * Take the nth root of a number.
4303
4298
  *
4304
4299
  * @category Math
4305
4300
  * @returns `(base) => base ** (1 / exponent)`
4306
4301
  */
4307
- export declare function root<E extends number>(exponent: E): <B extends number>(base: Parameters<RootFunction<E, B>>[0]) => ReturnType<RootFunction<E, B>>;
4302
+ export declare function root<E extends number>(exponent: E): <B extends number>(base: Parameters<RootFunction<B, E>>[0]) => ReturnType<RootFunction<B, E>>;
4308
4303
  /**
4309
4304
  * Take the square root of the given value.
4310
4305
  *
package/dist/index.d.mts CHANGED
@@ -270,28 +270,28 @@ export type DivideUnitSubvalues<A extends UnitSubvalues, B extends UnitSubvalues
270
270
  *
271
271
  * @group Unit Functions
272
272
  */
273
- export type Pow<T extends number, N extends Exponent> = T extends Unit<infer Class, infer Meta> ? Unit<FlatternAlias<PowUnitSubvalues<Class, N>>, FlatternAlias<PowUnitSubvalues<Meta, N>>> : T extends AbstractUnit<infer Class> ? AbstractUnit<FlatternAlias<PowUnitSubvalues<Class, N>>> : T extends UnitConversionRate<infer Meta> ? UnitConversionRate<FlatternAlias<PowUnitSubvalues<Meta, N>>> : number;
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;
274
274
  /**
275
275
  * Put each subvalue of a unit to the power of an exponent.
276
276
  *
277
277
  * @group Unit Subvalue Functions
278
278
  */
279
- export type PowUnitSubvalues<T extends UnitSubvalues, E extends Exponent> = ExcludeUnitZeroSubvalues<{
280
- [S in keyof T]: MultiplyExponents<GetExponent<T, S>, E>;
279
+ export type PowUnitSubvalues<B extends UnitSubvalues, E extends Exponent> = ExcludeUnitZeroSubvalues<{
280
+ [S in keyof B]: MultiplyExponents<GetExponent<B, S>, E>;
281
281
  }>;
282
282
  /**
283
283
  * Take the nth root of a unit.
284
284
  *
285
285
  * @group Unit Functions
286
286
  */
287
- export type Root<T extends number, N extends Exponent> = T extends Unit<infer Class, infer Meta> ? Unit<FlatternAlias<RootUnitSubvalues<Class, N>>, FlatternAlias<RootUnitSubvalues<Meta, N>>> : T extends AbstractUnit<infer Class> ? AbstractUnit<FlatternAlias<RootUnitSubvalues<Class, N>>> : T extends UnitConversionRate<infer Meta> ? UnitConversionRate<FlatternAlias<RootUnitSubvalues<Meta, N>>> : number;
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;
288
288
  /**
289
289
  * Take the nth root of each subvalue of a unit.
290
290
  *
291
291
  * @group Unit Subvalue Functions
292
292
  */
293
- export type RootUnitSubvalues<T extends UnitSubvalues, E extends Exponent> = ExcludeUnitZeroSubvalues<{
294
- [S in keyof T]: DivideExponents<GetExponent<T, S>, E>;
293
+ export type RootUnitSubvalues<B extends UnitSubvalues, E extends Exponent> = ExcludeUnitZeroSubvalues<{
294
+ [S in keyof B]: DivideExponents<GetExponent<B, S>, E>;
295
295
  }>;
296
296
  export type SiUnitKeys = "Second" | "Meter" | "Kilogram" | "Mole" | "Ampere" | "Candela" | "Kelvin" | "Radian";
297
297
  /**
@@ -4268,43 +4268,38 @@ export declare function modSafe<T extends number>(a: OperationIO<T>, b: Operatio
4268
4268
  * @returns A function that takes a integer and returns an integer between zero (inclusive) and `b` (exclusive).
4269
4269
  */
4270
4270
  export declare function modSafe<T extends number>(b: OperationIO<T>): (a: OperationIO<T>) => OperationIO<T>;
4271
- export type PowFunction<E extends number, B extends number> = E extends UnknownUnit ? never : E extends UnknownAbstractUnit ? never : E extends Exponent ? (b: B) => Pow<B, E> : E extends 0.5 ? (b: B) => Root<B, 2> : (b: B) => number;
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>;
4272
4275
  /**
4273
4276
  * Raise a number to the power of another.
4274
4277
  *
4275
4278
  * @category Math
4276
4279
  * @returns `base ** exponent`
4277
4280
  */
4278
- export declare function pow<B extends number, E extends number>(base: B, exponent: E extends UnknownUnit ? never : E extends UnknownAbstractUnit ? never : E): E extends Exponent ? Pow<B, E> : number;
4279
- /**
4280
- * Put a number to the power of 1/2.
4281
- *
4282
- * @category Math
4283
- * @returns `base ** 0.5`
4284
- */
4285
- 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>;
4286
4282
  /**
4287
4283
  * Put a number to the power of the given value.
4288
4284
  *
4289
4285
  * @category Math
4290
4286
  * @returns `(base) => base ** exponent`
4291
4287
  */
4292
- export declare function pow<E extends number>(exponent: E): <B extends number>(base: Parameters<PowFunction<E, B>>[0]) => ReturnType<PowFunction<E, B>>;
4293
- 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>>;
4294
4289
  /**
4295
4290
  * Take the nth root of a number.
4296
4291
  *
4297
4292
  * @category Math
4298
4293
  * @returns `base ** (1 / exponent)`
4299
4294
  */
4300
- export declare function root<B extends number, E extends number>(base: B, exponent: E extends UnknownUnit ? never : E extends UnknownAbstractUnit ? never : E): E extends PosExponent ? Root<B, E> : number;
4295
+ export declare function root<B extends number, E extends number>(base: B, exponent: E): RootResult<B, E>;
4301
4296
  /**
4302
4297
  * Take the nth root of a number.
4303
4298
  *
4304
4299
  * @category Math
4305
4300
  * @returns `(base) => base ** (1 / exponent)`
4306
4301
  */
4307
- export declare function root<E extends number>(exponent: E): <B extends number>(base: Parameters<RootFunction<E, B>>[0]) => ReturnType<RootFunction<E, B>>;
4302
+ export declare function root<E extends number>(exponent: E): <B extends number>(base: Parameters<RootFunction<B, E>>[0]) => ReturnType<RootFunction<B, E>>;
4308
4303
  /**
4309
4304
  * Take the square root of the given value.
4310
4305
  *
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "uom-types",
3
- "version": "4.1.0",
3
+ "version": "4.1.1",
4
4
  "description": "Typesafe units with no runtime overhead.",
5
5
  "keywords": [
6
6
  "uom",