diff --git a/packages/dim-si/README.md b/packages/dim-si/README.md index 86d3739..dbefc40 100644 --- a/packages/dim-si/README.md +++ b/packages/dim-si/README.md @@ -95,6 +95,31 @@ const speed = divide(kilometer(100), hour(2)); _\* [Affine quantity](../dim-unit/README.md#affine-units) — zero point is arbitrary, which restricts valid operations._ +## Type Annotations + +Each quantity module exports a type for use in function signatures: + +```typescript +import type { Length } from "@isentropic/dim-si/length"; +import type { Time } from "@isentropic/dim-si/time"; +import type { Velocity } from "@isentropic/dim-si/velocity"; +import { divide } from "@isentropic/dim-si/ops"; + +function speed(d: Length, t: Time): Velocity { + return divide(d, t); +} +``` + +Temperature has two types — `Temperature` for absolute values (affine) and +`TemperatureDifference` for deltas (linear): + +```typescript +import type { + Temperature, + TemperatureDifference, +} from "@isentropic/dim-si/temperature"; +``` + ## Custom Scaled Units Use SI prefixes to create units not provided out of the box: @@ -127,15 +152,18 @@ dimension: * @module */ - import type { Jerk } from "@isentropic/dim-isq"; + import type { Jerk as JerkDim } from "@isentropic/dim-isq"; + import type { Linear } from "@isentropic/dim-unit"; import { jerk } from "@isentropic/dim-isq"; - import type { BaseUnit } from "./system.ts"; + import type { BaseUnit } from "./types.ts"; + import type { Si } from "./system.ts"; import { si } from "./system.ts"; - export type { Jerk } from "@isentropic/dim-isq"; + /** An SI jerk quantity. */ + export type Jerk = Linear; /** Meter per second cubed (m/s³) — SI unit of jerk. */ - export const meterPerSecondCubed: BaseUnit = si.unit(jerk); + export const meterPerSecondCubed: BaseUnit = si.unit(jerk); ``` > **Note:** The quantity (`jerk`) must exist in `dim-isq` first. See the diff --git a/packages/dim-si/src/absorbed-dose.ts b/packages/dim-si/src/absorbed-dose.ts index 52173ee..9825997 100644 --- a/packages/dim-si/src/absorbed-dose.ts +++ b/packages/dim-si/src/absorbed-dose.ts @@ -17,15 +17,18 @@ * @module */ -import type { AbsorbedDose } from "@isentropic/dim-isq"; +import type { AbsorbedDose as AbsorbedDoseDim } from "@isentropic/dim-isq"; +import type { Linear } from "@isentropic/dim-unit"; import { absorbedDose } from "@isentropic/dim-isq"; import type { BaseUnit } from "./types.ts"; +import type { Si } from "./system.ts"; import { si } from "./system.ts"; -export type { AbsorbedDose } from "@isentropic/dim-isq"; +/** An SI absorbed dose quantity. */ +export type AbsorbedDose = Linear; /** Gray (Gy) — SI unit of absorbed dose. */ -export const gray: BaseUnit = si.unit(absorbedDose); +export const gray: BaseUnit = si.unit(absorbedDose); /** Sievert (Sv) — SI unit of equivalent dose (same dimension as gray). */ -export const sievert: BaseUnit = si.unit(absorbedDose); +export const sievert: BaseUnit = si.unit(absorbedDose); diff --git a/packages/dim-si/src/acceleration.ts b/packages/dim-si/src/acceleration.ts index 44b9a9d..3507e78 100644 --- a/packages/dim-si/src/acceleration.ts +++ b/packages/dim-si/src/acceleration.ts @@ -13,14 +13,17 @@ * @module */ -import type { Acceleration } from "@isentropic/dim-isq"; +import type { Acceleration as AccelerationDim } from "@isentropic/dim-isq"; +import type { Linear } from "@isentropic/dim-unit"; import { acceleration } from "@isentropic/dim-isq"; import type { BaseUnit } from "./types.ts"; +import type { Si } from "./system.ts"; import { si } from "./system.ts"; -export type { Acceleration } from "@isentropic/dim-isq"; +/** An SI acceleration quantity. */ +export type Acceleration = Linear; /** Meter per second squared (m/s²) — SI unit of acceleration. */ -export const meterPerSecondSquared: BaseUnit = si.unit( +export const meterPerSecondSquared: BaseUnit = si.unit( acceleration, ); diff --git a/packages/dim-si/src/amount.ts b/packages/dim-si/src/amount.ts index 9486ebd..fad336e 100644 --- a/packages/dim-si/src/amount.ts +++ b/packages/dim-si/src/amount.ts @@ -15,19 +15,22 @@ * @module */ -import type { Amount } from "@isentropic/dim-isq"; +import type { Amount as AmountDim } from "@isentropic/dim-isq"; +import type { Linear } from "@isentropic/dim-unit"; import { amount } from "@isentropic/dim-isq"; import type { BaseUnit, ScaledUnit } from "./types.ts"; +import type { Si } from "./system.ts"; import { si } from "./system.ts"; import { MICRO, MILLI } from "./prefixes.ts"; -export type { Amount } from "@isentropic/dim-isq"; +/** An SI amount quantity. */ +export type Amount = Linear; /** Mole (mol) — SI unit of amount of substance. */ -export const mole: BaseUnit = si.unit(amount); +export const mole: BaseUnit = si.unit(amount); /** Millimole (mmol) — 10⁻³ moles. */ -export const millimole: ScaledUnit = mole.scaled(MILLI); +export const millimole: ScaledUnit = mole.scaled(MILLI); /** Micromole (μmol) — 10⁻⁶ moles. */ -export const micromole: ScaledUnit = mole.scaled(MICRO); +export const micromole: ScaledUnit = mole.scaled(MICRO); diff --git a/packages/dim-si/src/area.ts b/packages/dim-si/src/area.ts index b7c592a..ecee908 100644 --- a/packages/dim-si/src/area.ts +++ b/packages/dim-si/src/area.ts @@ -15,15 +15,18 @@ * @module */ -import type { Area } from "@isentropic/dim-isq"; +import type { Area as AreaDim } from "@isentropic/dim-isq"; +import type { Linear } from "@isentropic/dim-unit"; import { area } from "@isentropic/dim-isq"; import type { BaseUnit, ScaledUnit } from "./types.ts"; +import type { Si } from "./system.ts"; import { si } from "./system.ts"; -export type { Area } from "@isentropic/dim-isq"; +/** An SI area quantity. */ +export type Area = Linear; /** Square meter (m²) — SI unit of area. */ -export const squareMeter: BaseUnit = si.unit(area); +export const squareMeter: BaseUnit = si.unit(area); /** Hectare (ha) — 10000 square meters. */ -export const hectare: ScaledUnit = squareMeter.scaled(10000); +export const hectare: ScaledUnit = squareMeter.scaled(10000); diff --git a/packages/dim-si/src/capacitance.ts b/packages/dim-si/src/capacitance.ts index 66781b8..6b8ab1f 100644 --- a/packages/dim-si/src/capacitance.ts +++ b/packages/dim-si/src/capacitance.ts @@ -16,22 +16,25 @@ * @module */ -import type { Capacitance } from "@isentropic/dim-isq"; +import type { Capacitance as CapacitanceDim } from "@isentropic/dim-isq"; +import type { Linear } from "@isentropic/dim-unit"; import { capacitance } from "@isentropic/dim-isq"; import type { BaseUnit, ScaledUnit } from "./types.ts"; +import type { Si } from "./system.ts"; import { si } from "./system.ts"; import { MICRO, NANO, PICO } from "./prefixes.ts"; -export type { Capacitance } from "@isentropic/dim-isq"; +/** An SI capacitance quantity. */ +export type Capacitance = Linear; /** Farad (F) — SI unit of capacitance. */ -export const farad: BaseUnit = si.unit(capacitance); +export const farad: BaseUnit = si.unit(capacitance); /** Microfarad (μF) — 10⁻⁶ farads. */ -export const microfarad: ScaledUnit = farad.scaled(MICRO); +export const microfarad: ScaledUnit = farad.scaled(MICRO); /** Nanofarad (nF) — 10⁻⁹ farads. */ -export const nanofarad: ScaledUnit = farad.scaled(NANO); +export const nanofarad: ScaledUnit = farad.scaled(NANO); /** Picofarad (pF) — 10⁻¹² farads. */ -export const picofarad: ScaledUnit = farad.scaled(PICO); +export const picofarad: ScaledUnit = farad.scaled(PICO); diff --git a/packages/dim-si/src/catalytic-activity.ts b/packages/dim-si/src/catalytic-activity.ts index 8070088..178a43f 100644 --- a/packages/dim-si/src/catalytic-activity.ts +++ b/packages/dim-si/src/catalytic-activity.ts @@ -13,12 +13,15 @@ * @module */ -import type { CatalyticActivity } from "@isentropic/dim-isq"; +import type { CatalyticActivity as CatalyticActivityDim } from "@isentropic/dim-isq"; +import type { Linear } from "@isentropic/dim-unit"; import { catalyticActivity } from "@isentropic/dim-isq"; import type { BaseUnit } from "./types.ts"; +import type { Si } from "./system.ts"; import { si } from "./system.ts"; -export type { CatalyticActivity } from "@isentropic/dim-isq"; +/** An SI catalytic activity quantity. */ +export type CatalyticActivity = Linear; /** Katal (kat) — SI unit of catalytic activity. */ -export const katal: BaseUnit = si.unit(catalyticActivity); +export const katal: BaseUnit = si.unit(catalyticActivity); diff --git a/packages/dim-si/src/charge.ts b/packages/dim-si/src/charge.ts index 9c4d70b..fc88adc 100644 --- a/packages/dim-si/src/charge.ts +++ b/packages/dim-si/src/charge.ts @@ -17,12 +17,15 @@ * @module */ -import type { Charge } from "@isentropic/dim-isq"; +import type { Charge as ChargeDim } from "@isentropic/dim-isq"; +import type { Linear } from "@isentropic/dim-unit"; import { charge } from "@isentropic/dim-isq"; import type { BaseUnit } from "./types.ts"; +import type { Si } from "./system.ts"; import { si } from "./system.ts"; -export type { Charge } from "@isentropic/dim-isq"; +/** An SI charge quantity. */ +export type Charge = Linear; /** Coulomb (C) — SI unit of electric charge. */ -export const coulomb: BaseUnit = si.unit(charge); +export const coulomb: BaseUnit = si.unit(charge); diff --git a/packages/dim-si/src/conductance.ts b/packages/dim-si/src/conductance.ts index a6fb2f0..3f4b2d8 100644 --- a/packages/dim-si/src/conductance.ts +++ b/packages/dim-si/src/conductance.ts @@ -13,12 +13,15 @@ * @module */ -import type { Conductance } from "@isentropic/dim-isq"; +import type { Conductance as ConductanceDim } from "@isentropic/dim-isq"; +import type { Linear } from "@isentropic/dim-unit"; import { conductance } from "@isentropic/dim-isq"; import type { BaseUnit } from "./types.ts"; +import type { Si } from "./system.ts"; import { si } from "./system.ts"; -export type { Conductance } from "@isentropic/dim-isq"; +/** An SI conductance quantity. */ +export type Conductance = Linear; /** Siemens (S) — SI unit of electrical conductance. */ -export const siemens: BaseUnit = si.unit(conductance); +export const siemens: BaseUnit = si.unit(conductance); diff --git a/packages/dim-si/src/current.ts b/packages/dim-si/src/current.ts index a0f6aba..b091803 100644 --- a/packages/dim-si/src/current.ts +++ b/packages/dim-si/src/current.ts @@ -15,19 +15,22 @@ * @module */ -import type { Current } from "@isentropic/dim-isq"; +import type { Current as CurrentDim } from "@isentropic/dim-isq"; +import type { Linear } from "@isentropic/dim-unit"; import { current } from "@isentropic/dim-isq"; import type { BaseUnit, ScaledUnit } from "./types.ts"; +import type { Si } from "./system.ts"; import { si } from "./system.ts"; import { MICRO, MILLI } from "./prefixes.ts"; -export type { Current } from "@isentropic/dim-isq"; +/** An SI current quantity. */ +export type Current = Linear; /** Ampere (A) — SI unit of electric current. */ -export const ampere: BaseUnit = si.unit(current); +export const ampere: BaseUnit = si.unit(current); /** Milliampere (mA) — 10⁻³ amperes. */ -export const milliampere: ScaledUnit = ampere.scaled(MILLI); +export const milliampere: ScaledUnit = ampere.scaled(MILLI); /** Microampere (μA) — 10⁻⁶ amperes. */ -export const microampere: ScaledUnit = ampere.scaled(MICRO); +export const microampere: ScaledUnit = ampere.scaled(MICRO); diff --git a/packages/dim-si/src/energy.ts b/packages/dim-si/src/energy.ts index 4f8cec1..7ddf54d 100644 --- a/packages/dim-si/src/energy.ts +++ b/packages/dim-si/src/energy.ts @@ -16,27 +16,30 @@ * @module */ -import type { Energy } from "@isentropic/dim-isq"; +import type { Energy as EnergyDim } from "@isentropic/dim-isq"; +import type { Linear } from "@isentropic/dim-unit"; import { energy } from "@isentropic/dim-isq"; import type { BaseUnit, ScaledUnit } from "./types.ts"; +import type { Si } from "./system.ts"; import { si } from "./system.ts"; import { KILO, MEGA } from "./prefixes.ts"; import { kilowatt } from "./power.ts"; import { hour } from "./time.ts"; -export type { Energy } from "@isentropic/dim-isq"; +/** An SI energy quantity. */ +export type Energy = Linear; /** Joule (J) — SI unit of energy. */ -export const joule: BaseUnit = si.unit(energy); +export const joule: BaseUnit = si.unit(energy); /** Kilojoule (kJ) — 1000 joules. */ -export const kilojoule: ScaledUnit = joule.scaled(KILO); +export const kilojoule: ScaledUnit = joule.scaled(KILO); /** Megajoule (MJ) — 10⁶ joules. */ -export const megajoule: ScaledUnit = joule.scaled(MEGA); +export const megajoule: ScaledUnit = joule.scaled(MEGA); /** Kilowatt-hour (kWh) — 3.6 megajoules. */ // 1 kWh = 1 kW × 1 hour = 3.6 MJ -export const kilowattHour: ScaledUnit = joule.scaled( +export const kilowattHour: ScaledUnit = joule.scaled( kilowatt.scale * hour.scale, ); diff --git a/packages/dim-si/src/force.ts b/packages/dim-si/src/force.ts index 1b78086..a9fbce4 100644 --- a/packages/dim-si/src/force.ts +++ b/packages/dim-si/src/force.ts @@ -17,12 +17,15 @@ * @module */ -import type { Force } from "@isentropic/dim-isq"; +import type { Force as ForceDim } from "@isentropic/dim-isq"; +import type { Linear } from "@isentropic/dim-unit"; import { force } from "@isentropic/dim-isq"; import type { BaseUnit } from "./types.ts"; +import type { Si } from "./system.ts"; import { si } from "./system.ts"; -export type { Force } from "@isentropic/dim-isq"; +/** An SI force quantity. */ +export type Force = Linear; /** Newton (N) — SI unit of force. */ -export const newton: BaseUnit = si.unit(force); +export const newton: BaseUnit = si.unit(force); diff --git a/packages/dim-si/src/frequency.ts b/packages/dim-si/src/frequency.ts index 4367cac..8a203fe 100644 --- a/packages/dim-si/src/frequency.ts +++ b/packages/dim-si/src/frequency.ts @@ -19,25 +19,28 @@ * @module */ -import type { Frequency } from "@isentropic/dim-isq"; +import type { Frequency as FrequencyDim } from "@isentropic/dim-isq"; +import type { Linear } from "@isentropic/dim-unit"; import { frequency } from "@isentropic/dim-isq"; import type { BaseUnit, ScaledUnit } from "./types.ts"; +import type { Si } from "./system.ts"; import { si } from "./system.ts"; import { GIGA, KILO, MEGA } from "./prefixes.ts"; -export type { Frequency } from "@isentropic/dim-isq"; +/** An SI frequency quantity. */ +export type Frequency = Linear; /** Hertz (Hz) — SI unit of frequency. */ -export const hertz: BaseUnit = si.unit(frequency); +export const hertz: BaseUnit = si.unit(frequency); /** Becquerel (Bq) — SI unit of radioactivity (same dimension as hertz). */ -export const becquerel: BaseUnit = si.unit(frequency); +export const becquerel: BaseUnit = si.unit(frequency); /** Kilohertz (kHz) — 1000 hertz. */ -export const kilohertz: ScaledUnit = hertz.scaled(KILO); +export const kilohertz: ScaledUnit = hertz.scaled(KILO); /** Megahertz (MHz) — 10⁶ hertz. */ -export const megahertz: ScaledUnit = hertz.scaled(MEGA); +export const megahertz: ScaledUnit = hertz.scaled(MEGA); /** Gigahertz (GHz) — 10⁹ hertz. */ -export const gigahertz: ScaledUnit = hertz.scaled(GIGA); +export const gigahertz: ScaledUnit = hertz.scaled(GIGA); diff --git a/packages/dim-si/src/illuminance.ts b/packages/dim-si/src/illuminance.ts index df7d064..d524d4f 100644 --- a/packages/dim-si/src/illuminance.ts +++ b/packages/dim-si/src/illuminance.ts @@ -13,12 +13,15 @@ * @module */ -import type { Illuminance } from "@isentropic/dim-isq"; +import type { Illuminance as IlluminanceDim } from "@isentropic/dim-isq"; +import type { Linear } from "@isentropic/dim-unit"; import { illuminance } from "@isentropic/dim-isq"; import type { BaseUnit } from "./types.ts"; +import type { Si } from "./system.ts"; import { si } from "./system.ts"; -export type { Illuminance } from "@isentropic/dim-isq"; +/** An SI illuminance quantity. */ +export type Illuminance = Linear; /** Lux (lx) — SI unit of illuminance. */ -export const lux: BaseUnit = si.unit(illuminance); +export const lux: BaseUnit = si.unit(illuminance); diff --git a/packages/dim-si/src/inductance.ts b/packages/dim-si/src/inductance.ts index c8f9494..c6ff01e 100644 --- a/packages/dim-si/src/inductance.ts +++ b/packages/dim-si/src/inductance.ts @@ -16,19 +16,22 @@ * @module */ -import type { Inductance } from "@isentropic/dim-isq"; +import type { Inductance as InductanceDim } from "@isentropic/dim-isq"; +import type { Linear } from "@isentropic/dim-unit"; import { inductance } from "@isentropic/dim-isq"; import type { BaseUnit, ScaledUnit } from "./types.ts"; +import type { Si } from "./system.ts"; import { si } from "./system.ts"; import { MICRO, MILLI } from "./prefixes.ts"; -export type { Inductance } from "@isentropic/dim-isq"; +/** An SI inductance quantity. */ +export type Inductance = Linear; /** Henry (H) — SI unit of inductance. */ -export const henry: BaseUnit = si.unit(inductance); +export const henry: BaseUnit = si.unit(inductance); /** Millihenry (mH) — 10⁻³ henrys. */ -export const millihenry: ScaledUnit = henry.scaled(MILLI); +export const millihenry: ScaledUnit = henry.scaled(MILLI); /** Microhenry (μH) — 10⁻⁶ henrys. */ -export const microhenry: ScaledUnit = henry.scaled(MICRO); +export const microhenry: ScaledUnit = henry.scaled(MICRO); diff --git a/packages/dim-si/src/length.ts b/packages/dim-si/src/length.ts index b67bca7..10ac863 100644 --- a/packages/dim-si/src/length.ts +++ b/packages/dim-si/src/length.ts @@ -16,31 +16,34 @@ * @module */ -import type { Length } from "@isentropic/dim-isq"; +import type { Length as LengthDim } from "@isentropic/dim-isq"; import { length } from "@isentropic/dim-isq"; +import type { Linear } from "@isentropic/dim-unit"; import type { BaseUnit, ScaledUnit } from "./types.ts"; +import type { Si } from "./system.ts"; import { si } from "./system.ts"; import { CENTI, KILO, MICRO, MILLI, NANO, PICO } from "./prefixes.ts"; -export type { Length } from "@isentropic/dim-isq"; +/** An SI length quantity. */ +export type Length = Linear; /** Meter (m) — SI unit of length. */ -export const meter: BaseUnit = si.unit(length); +export const meter: BaseUnit = si.unit(length); /** Kilometer (km) — 1000 meters. */ -export const kilometer: ScaledUnit = meter.scaled(KILO); +export const kilometer: ScaledUnit = meter.scaled(KILO); /** Centimeter (cm) — 0.01 meters. */ -export const centimeter: ScaledUnit = meter.scaled(CENTI); +export const centimeter: ScaledUnit = meter.scaled(CENTI); /** Millimeter (mm) — 0.001 meters. */ -export const millimeter: ScaledUnit = meter.scaled(MILLI); +export const millimeter: ScaledUnit = meter.scaled(MILLI); /** Micrometer (μm) — 10⁻⁶ meters. */ -export const micrometer: ScaledUnit = meter.scaled(MICRO); +export const micrometer: ScaledUnit = meter.scaled(MICRO); /** Nanometer (nm) — 10⁻⁹ meters. */ -export const nanometer: ScaledUnit = meter.scaled(NANO); +export const nanometer: ScaledUnit = meter.scaled(NANO); /** Picometer (pm) — 10⁻¹² meters. */ -export const picometer: ScaledUnit = meter.scaled(PICO); +export const picometer: ScaledUnit = meter.scaled(PICO); diff --git a/packages/dim-si/src/luminosity.ts b/packages/dim-si/src/luminosity.ts index ae87bdf..9f925a6 100644 --- a/packages/dim-si/src/luminosity.ts +++ b/packages/dim-si/src/luminosity.ts @@ -13,12 +13,15 @@ * @module */ -import type { Luminosity } from "@isentropic/dim-isq"; +import type { Luminosity as LuminosityDim } from "@isentropic/dim-isq"; +import type { Linear } from "@isentropic/dim-unit"; import { luminosity } from "@isentropic/dim-isq"; import type { BaseUnit } from "./types.ts"; +import type { Si } from "./system.ts"; import { si } from "./system.ts"; -export type { Luminosity } from "@isentropic/dim-isq"; +/** An SI luminosity quantity. */ +export type Luminosity = Linear; /** Candela (cd) — SI unit of luminous intensity. */ -export const candela: BaseUnit = si.unit(luminosity); +export const candela: BaseUnit = si.unit(luminosity); diff --git a/packages/dim-si/src/luminous-flux.ts b/packages/dim-si/src/luminous-flux.ts index c53278b..c25c9a0 100644 --- a/packages/dim-si/src/luminous-flux.ts +++ b/packages/dim-si/src/luminous-flux.ts @@ -13,12 +13,15 @@ * @module */ -import type { LuminousFlux } from "@isentropic/dim-isq"; +import type { LuminousFlux as LuminousFluxDim } from "@isentropic/dim-isq"; +import type { Linear } from "@isentropic/dim-unit"; import { luminousFlux } from "@isentropic/dim-isq"; import type { BaseUnit } from "./types.ts"; +import type { Si } from "./system.ts"; import { si } from "./system.ts"; -export type { LuminousFlux } from "@isentropic/dim-isq"; +/** An SI luminous flux quantity. */ +export type LuminousFlux = Linear; /** Lumen (lm) — SI unit of luminous flux. */ -export const lumen: BaseUnit = si.unit(luminousFlux); +export const lumen: BaseUnit = si.unit(luminousFlux); diff --git a/packages/dim-si/src/magnetic-flux-density.ts b/packages/dim-si/src/magnetic-flux-density.ts index 3263d74..e50cb78 100644 --- a/packages/dim-si/src/magnetic-flux-density.ts +++ b/packages/dim-si/src/magnetic-flux-density.ts @@ -13,14 +13,17 @@ * @module */ -import type { MagneticFluxDensity } from "@isentropic/dim-isq"; +import type { MagneticFluxDensity as MagneticFluxDensityDim } from "@isentropic/dim-isq"; +import type { Linear } from "@isentropic/dim-unit"; import { magneticFluxDensity } from "@isentropic/dim-isq"; import type { BaseUnit } from "./types.ts"; +import type { Si } from "./system.ts"; import { si } from "./system.ts"; -export type { MagneticFluxDensity } from "@isentropic/dim-isq"; +/** An SI magnetic flux density quantity. */ +export type MagneticFluxDensity = Linear; /** Tesla (T) — SI unit of magnetic flux density. */ -export const tesla: BaseUnit = si.unit( +export const tesla: BaseUnit = si.unit( magneticFluxDensity, ); diff --git a/packages/dim-si/src/magnetic-flux.ts b/packages/dim-si/src/magnetic-flux.ts index da49d01..b5a7974 100644 --- a/packages/dim-si/src/magnetic-flux.ts +++ b/packages/dim-si/src/magnetic-flux.ts @@ -13,12 +13,15 @@ * @module */ -import type { MagneticFlux } from "@isentropic/dim-isq"; +import type { MagneticFlux as MagneticFluxDim } from "@isentropic/dim-isq"; +import type { Linear } from "@isentropic/dim-unit"; import { magneticFlux } from "@isentropic/dim-isq"; import type { BaseUnit } from "./types.ts"; +import type { Si } from "./system.ts"; import { si } from "./system.ts"; -export type { MagneticFlux } from "@isentropic/dim-isq"; +/** An SI magnetic flux quantity. */ +export type MagneticFlux = Linear; /** Weber (Wb) — SI unit of magnetic flux. */ -export const weber: BaseUnit = si.unit(magneticFlux); +export const weber: BaseUnit = si.unit(magneticFlux); diff --git a/packages/dim-si/src/mass.ts b/packages/dim-si/src/mass.ts index 6e6f111..2677b22 100644 --- a/packages/dim-si/src/mass.ts +++ b/packages/dim-si/src/mass.ts @@ -16,28 +16,31 @@ * @module */ -import type { Mass } from "@isentropic/dim-isq"; +import type { Mass as MassDim } from "@isentropic/dim-isq"; +import type { Linear } from "@isentropic/dim-unit"; import { mass } from "@isentropic/dim-isq"; import type { BaseUnit, ScaledUnit } from "./types.ts"; +import type { Si } from "./system.ts"; import { si } from "./system.ts"; import { KILO, MICRO, MILLI, NANO } from "./prefixes.ts"; -export type { Mass } from "@isentropic/dim-isq"; +/** An SI mass quantity. */ +export type Mass = Linear; /** Kilogram (kg) — SI unit of mass. */ -export const kilogram: BaseUnit = si.unit(mass); +export const kilogram: BaseUnit = si.unit(mass); /** Gram (g) — 0.001 kilograms. */ -export const gram: ScaledUnit = kilogram.scaled(MILLI); +export const gram: ScaledUnit = kilogram.scaled(MILLI); /** Milligram (mg) — 10⁻³ grams. */ -export const milligram: ScaledUnit = gram.scaled(MILLI); +export const milligram: ScaledUnit = gram.scaled(MILLI); /** Microgram (μg) — 10⁻⁶ grams. */ -export const microgram: ScaledUnit = gram.scaled(MICRO); +export const microgram: ScaledUnit = gram.scaled(MICRO); /** Nanogram (ng) — 10⁻⁹ grams. */ -export const nanogram: ScaledUnit = gram.scaled(NANO); +export const nanogram: ScaledUnit = gram.scaled(NANO); /** Tonne (t) — 1000 kilograms. */ -export const tonne: ScaledUnit = kilogram.scaled(KILO); +export const tonne: ScaledUnit = kilogram.scaled(KILO); diff --git a/packages/dim-si/src/power.ts b/packages/dim-si/src/power.ts index a7c25aa..8f954d3 100644 --- a/packages/dim-si/src/power.ts +++ b/packages/dim-si/src/power.ts @@ -16,28 +16,31 @@ * @module */ -import type { Power } from "@isentropic/dim-isq"; +import type { Power as PowerDim } from "@isentropic/dim-isq"; +import type { Linear } from "@isentropic/dim-unit"; import { power } from "@isentropic/dim-isq"; import type { BaseUnit, ScaledUnit } from "./types.ts"; +import type { Si } from "./system.ts"; import { si } from "./system.ts"; import { GIGA, KILO, MEGA, MILLI, TERA } from "./prefixes.ts"; -export type { Power } from "@isentropic/dim-isq"; +/** An SI power quantity. */ +export type Power = Linear; /** Watt (W) — SI unit of power. */ -export const watt: BaseUnit = si.unit(power); +export const watt: BaseUnit = si.unit(power); /** Milliwatt (mW) — 10⁻³ watts. */ -export const milliwatt: ScaledUnit = watt.scaled(MILLI); +export const milliwatt: ScaledUnit = watt.scaled(MILLI); /** Kilowatt (kW) — 1000 watts. */ -export const kilowatt: ScaledUnit = watt.scaled(KILO); +export const kilowatt: ScaledUnit = watt.scaled(KILO); /** Megawatt (MW) — 10⁶ watts. */ -export const megawatt: ScaledUnit = watt.scaled(MEGA); +export const megawatt: ScaledUnit = watt.scaled(MEGA); /** Gigawatt (GW) — 10⁹ watts. */ -export const gigawatt: ScaledUnit = watt.scaled(GIGA); +export const gigawatt: ScaledUnit = watt.scaled(GIGA); /** Terawatt (TW) — 10¹² watts. */ -export const terawatt: ScaledUnit = watt.scaled(TERA); +export const terawatt: ScaledUnit = watt.scaled(TERA); diff --git a/packages/dim-si/src/pressure.ts b/packages/dim-si/src/pressure.ts index 68ea4f6..5e954b8 100644 --- a/packages/dim-si/src/pressure.ts +++ b/packages/dim-si/src/pressure.ts @@ -16,19 +16,22 @@ * @module */ -import type { Pressure } from "@isentropic/dim-isq"; +import type { Pressure as PressureDim } from "@isentropic/dim-isq"; +import type { Linear } from "@isentropic/dim-unit"; import { pressure } from "@isentropic/dim-isq"; import type { BaseUnit, ScaledUnit } from "./types.ts"; +import type { Si } from "./system.ts"; import { si } from "./system.ts"; import { MILLI } from "./prefixes.ts"; -export type { Pressure } from "@isentropic/dim-isq"; +/** An SI pressure quantity. */ +export type Pressure = Linear; /** Pascal (Pa) — SI unit of pressure. */ -export const pascal: BaseUnit = si.unit(pressure); +export const pascal: BaseUnit = si.unit(pressure); /** Bar — 100000 pascals. */ -export const bar: ScaledUnit = pascal.scaled(100000); +export const bar: ScaledUnit = pascal.scaled(100000); /** Millibar (mbar) — 100 pascals. */ -export const millibar: ScaledUnit = bar.scaled(MILLI); +export const millibar: ScaledUnit = bar.scaled(MILLI); diff --git a/packages/dim-si/src/resistance.ts b/packages/dim-si/src/resistance.ts index b768c54..faa0cb6 100644 --- a/packages/dim-si/src/resistance.ts +++ b/packages/dim-si/src/resistance.ts @@ -15,22 +15,25 @@ * @module */ -import type { Resistance } from "@isentropic/dim-isq"; +import type { Resistance as ResistanceDim } from "@isentropic/dim-isq"; +import type { Linear } from "@isentropic/dim-unit"; import { resistance } from "@isentropic/dim-isq"; import type { BaseUnit, ScaledUnit } from "./types.ts"; +import type { Si } from "./system.ts"; import { si } from "./system.ts"; import { KILO, MEGA, MILLI } from "./prefixes.ts"; -export type { Resistance } from "@isentropic/dim-isq"; +/** An SI resistance quantity. */ +export type Resistance = Linear; /** Ohm (Ω) — SI unit of electrical resistance. */ -export const ohm: BaseUnit = si.unit(resistance); +export const ohm: BaseUnit = si.unit(resistance); /** Milliohm (mΩ) — 10⁻³ ohms. */ -export const milliohm: ScaledUnit = ohm.scaled(MILLI); +export const milliohm: ScaledUnit = ohm.scaled(MILLI); /** Kilohm (kΩ) — 1000 ohms. */ -export const kilohm: ScaledUnit = ohm.scaled(KILO); +export const kilohm: ScaledUnit = ohm.scaled(KILO); /** Megohm (MΩ) — 10⁶ ohms. */ -export const megohm: ScaledUnit = ohm.scaled(MEGA); +export const megohm: ScaledUnit = ohm.scaled(MEGA); diff --git a/packages/dim-si/src/scalar.ts b/packages/dim-si/src/scalar.ts index bb81d88..e57a021 100644 --- a/packages/dim-si/src/scalar.ts +++ b/packages/dim-si/src/scalar.ts @@ -6,4 +6,9 @@ * @module */ -export type { Scalar } from "@isentropic/dim-isq"; +import type { Scalar as ScalarDim } from "@isentropic/dim-isq"; +import type { Linear } from "@isentropic/dim-unit"; +import type { Si } from "./system.ts"; + +/** An SI scalar (dimensionless) quantity. */ +export type Scalar = Linear; diff --git a/packages/dim-si/src/temperature.ts b/packages/dim-si/src/temperature.ts index 82ea360..afe8776 100644 --- a/packages/dim-si/src/temperature.ts +++ b/packages/dim-si/src/temperature.ts @@ -28,15 +28,21 @@ * @module */ -import type { Temperature } from "@isentropic/dim-isq"; +import type { Temperature as TemperatureDim } from "@isentropic/dim-isq"; +import type { Affine, Linear } from "@isentropic/dim-unit"; import { temperature } from "@isentropic/dim-isq"; import type { AffineUnit, BaseUnit } from "./types.ts"; +import type { Si } from "./system.ts"; import { si } from "./system.ts"; -export type { Temperature } from "@isentropic/dim-isq"; +/** An SI absolute temperature quantity (affine). */ +export type Temperature = Affine; + +/** An SI temperature difference quantity (linear). */ +export type TemperatureDifference = Linear; /** Kelvin (K) — SI unit of thermodynamic temperature. */ -export const kelvin: BaseUnit = si.unit(temperature); +export const kelvin: BaseUnit = si.unit(temperature); /** * Celsius (°C) — temperature offset from kelvin by 273.15. @@ -47,7 +53,7 @@ export const kelvin: BaseUnit = si.unit(temperature); * const newTemp = add(celsius(20), rise); // 30°C * ``` */ -export const celsius: AffineUnit = kelvin.offset(273.15); +export const celsius: AffineUnit = kelvin.offset(273.15); /** * Fahrenheit (°F) — temperature with scale 5/9 and offset from kelvin. @@ -59,6 +65,7 @@ export const celsius: AffineUnit = kelvin.offset(273.15); */ // Fahrenheit to Kelvin: K = (°F + 459.67) × 5/9 // 459.67 is the offset in Rankine scale (0°R = 0K, 0°F = 459.67°R) -export const fahrenheit: AffineUnit = kelvin.scaled(5 / 9).offset( - 459.67 * 5 / 9, -); +export const fahrenheit: AffineUnit = kelvin.scaled(5 / 9) + .offset( + 459.67 * 5 / 9, + ); diff --git a/packages/dim-si/src/thermal-conductance.ts b/packages/dim-si/src/thermal-conductance.ts index 49838f9..e81824a 100644 --- a/packages/dim-si/src/thermal-conductance.ts +++ b/packages/dim-si/src/thermal-conductance.ts @@ -13,23 +13,28 @@ * @module */ -import type { ThermalConductance } from "@isentropic/dim-isq"; +import type { ThermalConductance as ThermalConductanceDim } from "@isentropic/dim-isq"; +import type { Linear } from "@isentropic/dim-unit"; import { thermalConductance } from "@isentropic/dim-isq"; import type { BaseUnit, ScaledUnit } from "./types.ts"; +import type { Si } from "./system.ts"; import { si } from "./system.ts"; import { KILO, MILLI } from "./prefixes.ts"; -export type { ThermalConductance } from "@isentropic/dim-isq"; +/** An SI thermal conductance quantity. */ +export type ThermalConductance = Linear; /** Watt per kelvin (W/K) — SI unit of thermal conductance. */ -export const wattPerKelvin: BaseUnit = si.unit( +export const wattPerKelvin: BaseUnit = si.unit( thermalConductance, ); /** Milliwatt per kelvin (mW/K) — 10⁻³ watts per kelvin. */ -export const milliwattPerKelvin: ScaledUnit = wattPerKelvin - .scaled(MILLI); +export const milliwattPerKelvin: ScaledUnit = + wattPerKelvin + .scaled(MILLI); /** Kilowatt per kelvin (kW/K) — 1000 watts per kelvin. */ -export const kilowattPerKelvin: ScaledUnit = wattPerKelvin - .scaled(KILO); +export const kilowattPerKelvin: ScaledUnit = + wattPerKelvin + .scaled(KILO); diff --git a/packages/dim-si/src/time.ts b/packages/dim-si/src/time.ts index 697049d..672da87 100644 --- a/packages/dim-si/src/time.ts +++ b/packages/dim-si/src/time.ts @@ -16,34 +16,37 @@ * @module */ -import type { Time } from "@isentropic/dim-isq"; +import type { Time as TimeDim } from "@isentropic/dim-isq"; +import type { Linear } from "@isentropic/dim-unit"; import { time } from "@isentropic/dim-isq"; import type { BaseUnit, ScaledUnit } from "./types.ts"; +import type { Si } from "./system.ts"; import { si } from "./system.ts"; import { MICRO, MILLI, NANO, PICO } from "./prefixes.ts"; -export type { Time } from "@isentropic/dim-isq"; +/** An SI time quantity. */ +export type Time = Linear; /** Second (s) — SI unit of time. */ -export const second: BaseUnit