_comuns/src/uuid.ts
2025-08-10 17:33:25 -03:00

57 lines
1.7 KiB
TypeScript

import { NIL, v3, v4 } from "uuid"
/**
* Valida se uma string é um UUID válido (qualquer versão).
*
* @param valor - A string que será validada.
* @returns booleano indicando se é um UUID válido.
*/
export const erUuid =
/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i
export const validarUuid = (uuid: string | number | undefined | null) => {
const retorno = erUuid.test(String(uuid || ""))
return retorno
}
/**
* Gera um UUID determinístico (versão 3) com base em uma chave e um grupo (namespace).
*
* - Usa o algoritmo MD5 (RFC 4122).
* - Sempre retorna o mesmo UUID para a mesma combinação chave + grupo.
* - Caso o grupo não seja informado, usa o UUID "nil" como namespace.
*
* @param chave - Qualquer valor que será convertido em string para gerar o UUID (ex: número, string ou objeto).
* @param grupo - Opcional. Namespace para separar domínios diferentes de UUIDs.
* @returns UUID v3 (determinístico)
*/
export const uuidV3 = (chave: any, grupo?: string | number): string => {
return v3(
// Converte a chave para string (de forma segura)
typeof chave === "string"
? chave
: typeof chave === "number"
? String(chave)
: JSON.stringify(chave),
// Se um grupo foi fornecido, gera um UUID v3 recursivamente com base nele, senão usa NIL
grupo
? typeof grupo == "string" && validarUuid(grupo)
? grupo
: uuidV3(grupo)
: NIL,
)
}
/**
* Gera um UUID v4 (aleatório, não determinístico).
*
* - Usado quando unicidade é necessária, mas não se exige que seja previsível.
*/
export const uuidV4 = v4
/**
* @deprecated Esta variável será descontinuada em versões futuras.
* Use a função `uuidV4()` diretamente.
*/
export const uuid = uuidV4