import type { BestKind, MeasureKind } from "../conversions/types.js"; import type { BestUnits as BestUnitsGenerated } from "../generated/best-units.js"; import type { UnitsByMeasure as UnitsByMeasureGenerated } from "../generated/types.js"; /** * Get the units for a given measure. * @public */ export type UnitsByMeasure = T extends keyof UnitsByMeasureGenerated ? UnitsByMeasureGenerated[T] : never; /** @public */ export type MeasureKindByUnit = { [K in MeasureKind]: T extends UnitsByMeasureGenerated[K] ? K : never; }[MeasureKind]; /** * A type that gives all the units compatible with the same measure as a given unit. * @public */ export type MeasuresByUnit = UnitsByMeasure> | (T extends 'm' ? Time : never) | (T extends Time ? 'm' : never); /** * A supported unit you can convert. * @public */ export type Unit = UnitsByMeasure; /** * All possible best units for a given {@link BestKind | kind}. * @public */ export type BestUnits = BestUnitsGenerated[T]; /** * Get the best units for a given measure. * @public */ export type BestUnitsForMeasure = BestUnitsForUnit, K>; /** * Get the best units for a given unit. * @public */ export type BestUnitsForUnit = (Time | Length extends U ? Exclude : Time | 'm' extends U ? Exclude : U) & BestUnits; /** * Valid angle units. * @public */ export type Angle = UnitsByMeasure; /** * Valid area units. * @public */ export type Area = UnitsByMeasure; /** * Valid data units. * @public */ export type Data = UnitsByMeasure; /** * Valid energy units. * @public */ export type Energy = UnitsByMeasure; /** * Valid force units. * @public */ export type Force = UnitsByMeasure; /** * Valid length units. * @public */ export type Length = UnitsByMeasure; /** * Valid mass units. * @public */ export type Mass = UnitsByMeasure; /** * Valid power units. * @public */ export type Power = UnitsByMeasure; /** * Valid pressure units. * @public */ export type Pressure = UnitsByMeasure; /** * Valid temperature units. * @public */ export type Temperature = UnitsByMeasure; /** * Valid time units. * @public */ export type Time = UnitsByMeasure; /** * Valid volume units. * @public */ export type Volume = UnitsByMeasure;