web_lib

Common web application libraries
git clone https://radroots.dev/git/web_lib.git
Log | Files | Refs | LICENSE

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 };