UNPKG

taglib-wasm

Version:

TagLib-Wasm is the universal tagging library for TypeScript/JavaScript platforms: Browsers, Node.js, Deno, Bun, Cloudflare Workers, and Electron apps

68 lines (67 loc) 1.93 kB
const MIRROR_FIELDS = [ { raw: "date", numeric: "year" }, { raw: "trackNumber", numeric: "track" } ]; function parseLeadingInt(raw) { const parsed = Number.parseInt(raw, 10); return Number.isNaN(parsed) ? void 0 : parsed; } const DATE_MIRROR = MIRROR_FIELDS[0]; const TRACK_MIRROR = MIRROR_FIELDS[1]; function mirrorForRawKey(key) { return MIRROR_FIELDS.find((f) => f.raw === key); } function mirrorForNumericKey(key) { return MIRROR_FIELDS.find((f) => f.numeric === key); } function hasValue(v) { if (Array.isArray(v)) return v.length > 0; return v !== void 0 && v !== null && v !== ""; } function firstValueString(v) { if (Array.isArray(v)) return v[0] ?? ""; return v === void 0 || v === null ? "" : String(v); } function isShadowedNumericMirror(data, key) { const field = mirrorForNumericKey(key); return field !== void 0 && hasValue(data[field.raw]); } function stageRawWrite(target, field, values) { const first = values[0] ?? ""; if (values.length === 0 || first === "") { delete target[field.raw]; delete target[field.numeric]; return; } target[field.raw] = [...values]; const narrowed = parseLeadingInt(first); if (narrowed === void 0) delete target[field.numeric]; else target[field.numeric] = narrowed; } function stageNumericWrite(target, field, value) { if (value > 0) { target[field.numeric] = value; target[field.raw] = [String(value)]; } else { delete target[field.numeric]; delete target[field.raw]; } } function readNumericMirror(data, field) { const mirror = data[field.numeric]; if (typeof mirror === "number" && mirror !== 0) return mirror; return parseLeadingInt(firstValueString(data[field.raw])) ?? 0; } export { DATE_MIRROR, MIRROR_FIELDS, TRACK_MIRROR, firstValueString, isShadowedNumericMirror, mirrorForNumericKey, mirrorForRawKey, parseLeadingInt, readNumericMirror, stageNumericWrite, stageRawWrite };