index.ts (1444B)
1 import { z } from "zod"; 2 import { zf_area_unit, zf_mass_unit } from "../validation/schema.js"; 3 4 export type AreaUnit = z.infer<typeof zf_area_unit>; 5 export const area_units: AreaUnit[] = [`ac`, `ha`, `ft2`, `m2`] as const; 6 7 export type MassUnit = z.infer<typeof zf_mass_unit>; 8 export const mass_units: MassUnit[] = [`kg`, `lb`, `g`] as const; 9 10 export function parse_mass_unit_default(val?: string): MassUnit { 11 const unit = parse_mass_unit(val); 12 return unit ?? `kg` 13 } 14 15 export function parse_mass_unit(val?: string): MassUnit | undefined { 16 switch (val) { 17 case `kg`: 18 case `lb`: 19 case `g`: 20 return val; 21 default: 22 return undefined; 23 }; 24 }; 25 26 export function mass_to_g(val: number, unit: string): number { 27 const mass_unit = parse_mass_unit(unit); 28 switch (mass_unit) { 29 case `kg`: 30 return val * 1000; 31 case `lb`: 32 return val * 453.592; 33 case `g`: 34 return val; 35 default: 36 throw new Error(`unsupported unit ${unit}`); 37 } 38 } 39 40 41 export function parse_area_unit_default(val?: string): AreaUnit { 42 const unit = parse_area_unit(val); 43 return unit ?? `ac` 44 } 45 46 export function parse_area_unit(val?: string): AreaUnit | undefined { 47 switch (val) { 48 case `ac`: 49 case `ha`: 50 case `ft2`: 51 case `m2`: 52 return val; 53 default: 54 return undefined; 55 }; 56 };