Вам больше не нужен UUID… ну, в некоторых случаях. Давайте обсудим это!

Существует несколько способов и популярных пакетов для создания уникальных идентификаторов, и одним из них является пакет uuid», который ежедневно скачивают миллионы раз. Он предлагает различные типы подходов к созданию идентификаторов, ранжированных по версиям:

  • v1 — создает UUID версии 1 (отметка времени).
  • v3 — создает UUID версии 3 (пространство имен с MD5).
  • v4 — создает UUID версии 4 (случайный).
  • v5 — создает UUID версии 5 (пространство имен с SHA-1).

По моему опыту, v4 — наиболее часто используемая версия UUID, когда вам просто нужно случайное значение. Раньше для генерации UUID в Node.js мне приходилось устанавливать этот внешний пакет и потенциально добавлять типизации, так как репозиторий написан на чистом JavaScript. Однако недавно я обнаружил интересное обновление в сборках Node.js. Несколько релизов назад был добавлен новый метод crypto.randomUUID, который сейчас используется в реализации самого пакета «uuid. Ниже дайджест из репозитория:

// https://github.com/uuidjs/uuid/blob/main/src/native.js

import crypto from 'crypto';

export default { randomUUID: crypto.randomUUID };

// https://github.com/uuidjs/uuid/blob/main/src/v4.js

import native from './native.js';
import rng from './rng.js';
import { unsafeStringify } from './stringify.js';

function v4(options, buf, offset) {
  if (native.randomUUID && !buf && !options) {
    return native.randomUUID();
  }

  options = options || {};

  const rnds = options.random || (options.rng || rng)();

  // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`
  rnds[6] = (rnds[6] & 0x0f) | 0x40;
  rnds[8] = (rnds[8] & 0x3f) | 0x80;

  // Copy bytes to buffer, if provided
  if (buf) {
    offset = offset || 0;

    for (let i = 0; i < 16; ++i) {
      buf[offset + i] = rnds[i];
    }

    return buf;
  }

  return unsafeStringify(rnds);
}

export default v4;

Таким образом, если ваш код работает на стороне сервера, а ваш дистрибутив Node.js имеет версию 15.6.0 или выше, вам может больше не понадобиться эта дополнительная зависимость, и вы можете просто использовать скрытый драгоценный камень из модуля crypto.

Если вы нашли эту статью полезной, пожалуйста, ставьте аплодисменты или комментарии, чтобы побудить меня продолжать писать. Я также приветствую любые ваши отзывы. Спасибо, и до встречи в следующей статье!