UNPKG

shelving

Version:

Toolkit for using data in JavaScript.

24 lines (23 loc) 893 B
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; }