shelving
Version:
Toolkit for using data in JavaScript.
24 lines (23 loc) • 893 B
JavaScript
import { RequiredError } from "../error/RequiredError.js";
const R_NOT_LOWERCHAR = /[^0-9a-f]/g;
/** Return a random UUID (v4) */
export function randomUUID() {
return crypto.randomUUID().replace(R_NOT_LOWERCHAR, "");
}
/** Convert/validate a unknown value as as UUID. */
export function getUUID(value) {
if (typeof value !== "string" || !value)
return;
// Strip any non-hex characters (including existing dashes), then normalize to lowercase.
const cleaned = value.toLowerCase().replace(R_NOT_LOWERCHAR, "");
if (cleaned.length !== 32)
return;
return `${cleaned.slice(0, 8)}${cleaned.slice(8, 12)}${cleaned.slice(12, 16)}${cleaned.slice(16, 20)}${cleaned.slice(20)}`;
}
/** Require a valid UUID. */
export function requireUUID(value) {
const uuid = getUUID(value);
if (!uuid)
throw new RequiredError("Invalid UUID");
return uuid;
}