import type { LmsRow } from '../types.js'; /** Table name to file mapping */ type TableName = | 'wfa-boys-0-5' | 'wfa-girls-0-5' | 'lhfa-boys-0-5' | 'lhfa-girls-0-5' | 'bfa-boys-0-5' | 'bfa-girls-0-5' | 'hcfa-boys-0-5' | 'hcfa-girls-0-5' | 'wfa-boys-5-10' | 'wfa-girls-5-10' | 'hfa-boys-5-19' | 'hfa-girls-5-19' | 'bfa-boys-5-19' | 'bfa-girls-5-19' | 'wfl-boys' | 'wfl-girls' | 'wfh-boys' | 'wfh-girls' // Down syndrome (CDC/Zemel 2015) | 'ds-wfa-boys-0-18' | 'ds-wfa-girls-0-18' | 'ds-lhfa-boys-0-18' | 'ds-lhfa-girls-0-18' | 'ds-bfa-boys-0-18' | 'ds-bfa-girls-0-18' | 'ds-hcfa-boys-0-18' | 'ds-hcfa-girls-0-18'; /** Cache for loaded tables */ const cache = new Map(); /** Dynamic import loaders for each table */ const loaders: Record Promise<{ default: LmsRow[] }>> = { 'wfa-boys-0-5': () => import('./wfa-boys-0-5.json'), 'wfa-girls-0-5': () => import('./wfa-girls-0-5.json'), 'lhfa-boys-0-5': () => import('./lhfa-boys-0-5.json'), 'lhfa-girls-0-5': () => import('./lhfa-girls-0-5.json'), 'bfa-boys-0-5': () => import('./bfa-boys-0-5.json'), 'bfa-girls-0-5': () => import('./bfa-girls-0-5.json'), 'hcfa-boys-0-5': () => import('./hcfa-boys-0-5.json'), 'hcfa-girls-0-5': () => import('./hcfa-girls-0-5.json'), 'wfa-boys-5-10': () => import('./wfa-boys-5-10.json'), 'wfa-girls-5-10': () => import('./wfa-girls-5-10.json'), 'hfa-boys-5-19': () => import('./hfa-boys-5-19.json'), 'hfa-girls-5-19': () => import('./hfa-girls-5-19.json'), 'bfa-boys-5-19': () => import('./bfa-boys-5-19.json'), 'bfa-girls-5-19': () => import('./bfa-girls-5-19.json'), 'wfl-boys': () => import('./wfl-boys.json'), 'wfl-girls': () => import('./wfl-girls.json'), 'wfh-boys': () => import('./wfh-boys.json'), 'wfh-girls': () => import('./wfh-girls.json'), // Down syndrome 'ds-wfa-boys-0-18': () => import('./ds-wfa-boys-0-18.json'), 'ds-wfa-girls-0-18': () => import('./ds-wfa-girls-0-18.json'), 'ds-lhfa-boys-0-18': () => import('./ds-lhfa-boys-0-18.json'), 'ds-lhfa-girls-0-18': () => import('./ds-lhfa-girls-0-18.json'), 'ds-bfa-boys-0-18': () => import('./ds-bfa-boys-0-18.json'), 'ds-bfa-girls-0-18': () => import('./ds-bfa-girls-0-18.json'), 'ds-hcfa-boys-0-18': () => import('./ds-hcfa-boys-0-18.json'), 'ds-hcfa-girls-0-18': () => import('./ds-hcfa-girls-0-18.json'), }; /** * Load an LMS table by name. Tables are lazily loaded and cached. */ export async function loadTable(name: TableName): Promise { const cached = cache.get(name); if (cached) return cached; const loader = loaders[name]; if (!loader) throw new Error(`Unknown table: ${name}`); const module = await loader(); // Handle both { default: [...] } and direct array exports const data: LmsRow[] = Array.isArray(module) ? module : module.default; cache.set(name, data); return data; } /** Clear the cache (useful for testing) */ export function clearCache(): void { cache.clear(); }