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