Typed sizes of a piece of equipment
64-bitChecks the values a person typed and gives the sizes the equipment is built from.
length = round(v, 3), 10 ≤ v ≤ 20000
A length outside 10 to 20000 mm is refused with a message, not replaced. An accepted length is rounded to 3 decimals of a millimeter before anything is built from it.
export function equipmentValues(kind, values = {}) {
const def = EQUIPMENT[kind];
if (!def) refuse('mep.eq.err.kind');
const out = {};
for (const [k, type, d] of def.fields) {
let v = values[k] ?? d;
if (type === 'len') { v = Number(v); if (!(v >= 10 && v <= 20000)) refuse('mep.eq.err.value', { what: k }); v = round(v, 3); }
else if (type === 'nps') { v = String(v); if (!NPS.includes(v)) refuse('mep.eq.err.value', { what: k }); }
else if (type.startsWith('sys:')) { v = String(v); if (!(type === 'sys:pipe' ? PIPE_SYSTEMS : DUCT_SYSTEMS)[v]) refuse('mep.eq.err.value', { what: k }); }
else if (type.startsWith('choice:')) { v = String(v); if (!type.slice(7).split(',').includes(v)) refuse('mep.eq.err.value', { what: k }); }
out[k] = v;
}
return out;
}