bson
Version:
A bson parser for node.js and the browser
34 lines (28 loc) • 1.29 kB
text/typescript
import { BSONError } from './error';
import { ByteUtils } from './utils/byte_utils';
// Validation regex for v4 uuid (validates with or without dashes)
const VALIDATION_REGEX =
/^(?:[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|[0-9a-f]{12}4[0-9a-f]{3}[89ab][0-9a-f]{15})$/i;
export const uuidValidateString = (str: string): boolean =>
typeof str === 'string' && VALIDATION_REGEX.test(str);
export const uuidHexStringToBuffer = (hexString: string): Uint8Array => {
if (!uuidValidateString(hexString)) {
throw new BSONError(
'UUID string representations must be a 32 or 36 character hex string (dashes excluded/included). Format: "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" or "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx".'
);
}
const sanitizedHexString = hexString.replace(/-/g, '');
return ByteUtils.fromHex(sanitizedHexString);
};
export function bufferToUuidHexString(buffer: Uint8Array, includeDashes = true): string {
if (includeDashes) {
return [
ByteUtils.toHex(buffer.subarray(0, 4)),
ByteUtils.toHex(buffer.subarray(4, 6)),
ByteUtils.toHex(buffer.subarray(6, 8)),
ByteUtils.toHex(buffer.subarray(8, 10)),
ByteUtils.toHex(buffer.subarray(10, 16))
].join('-');
}
return ByteUtils.toHex(buffer);
}