adicionado uuid

This commit is contained in:
Luiz Silva 2025-08-03 11:44:39 -03:00
parent e3c5642027
commit c19d8bc40f
5 changed files with 81 additions and 23 deletions

View file

@ -18,19 +18,31 @@ var __copyProps = (to, from, except, desc) => {
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
var uuid_exports = {};
__export(uuid_exports, {
uuid: () => uuid
erUuid: () => erUuid,
uuidV3: () => uuidV3,
uuidV4: () => uuidV4,
validarUuid: () => validarUuid
});
module.exports = __toCommonJS(uuid_exports);
const letras = "0123456789abcdef".split("");
const uuid = () => {
letras.sort(() => Math.random() - 0.5);
const modelo = "xxxxxxxx-xxxx-4xxx-xxxx-xxxxxxxxxxxx".split("");
const retorno = modelo.map(
(letra) => letra === "x" ? letras[(1e3 * Math.random() | 0) % letras.length] : letra
).join("");
var import_uuid = require("uuid");
const erUuid = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
const validarUuid = (uuid) => {
const retorno = erUuid.test(String(uuid || ""));
return retorno;
};
const uuidV3 = (chave, grupo) => {
return (0, import_uuid.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) : import_uuid.NIL
);
};
const uuidV4 = import_uuid.v4;
// Annotate the CommonJS export names for ESM import in node:
0 && (module.exports = {
uuid
erUuid,
uuidV3,
uuidV4,
validarUuid
});

File diff suppressed because one or more lines are too long

View file

@ -1,6 +1,6 @@
{
"name": "p-comuns",
"version": "0.207.0",
"version": "0.208.0",
"description": "",
"main": "./dist-back/index.js",
"module": "./dist-front/index.mjs",
@ -26,6 +26,7 @@
"dependencies": {
"cross-fetch": "4.1.0",
"dayjs": "^1.11.13",
"uuid": "^11.1.0",
"zod": "3.24.1"
},
"devDependencies": {

9
pnpm-lock.yaml generated
View file

@ -14,6 +14,9 @@ importers:
dayjs:
specifier: ^1.11.13
version: 1.11.13
uuid:
specifier: ^11.1.0
version: 11.1.0
zod:
specifier: 3.24.1
version: 3.24.1
@ -709,6 +712,10 @@ packages:
undici-types@6.21.0:
resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==}
uuid@11.1.0:
resolution: {integrity: sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A==}
hasBin: true
webidl-conversions@3.0.1:
resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==}
@ -1279,6 +1286,8 @@ snapshots:
undici-types@6.21.0: {}
uuid@11.1.0: {}
webidl-conversions@3.0.1: {}
webidl-conversions@4.0.2: {}

View file

@ -1,15 +1,51 @@
//Gerar uma uuid V4
const letras = "0123456789abcdef".split("")
export const uuid = () => {
letras.sort(() => Math.random() - 0.5)
const modelo = "xxxxxxxx-xxxx-4xxx-xxxx-xxxxxxxxxxxx".split("")
const retorno = modelo
.map((letra) =>
letra === "x"
? letras[((1000 * Math.random()) | 0) % letras.length]
: letra,
)
.join("")
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