code icon Code

Generate UUID

Generate UUIDs (v1, v4, v5)

Source Code

import fs from "fs";
import path from "path";
import { v4 as uuidv4, v5 as uuidv5, v1 as uuidv1 } from "uuid";

const [version = "v4", countStr = "1", outputPath = "", namespace = "", name = ""] = process.argv.slice(2);

// Well-known namespace UUIDs
const NAMESPACES = {
  DNS: "6ba7b810-9dad-11d1-80b4-00c04fd430c8",
  URL: "6ba7b811-9dad-11d1-80b4-00c04fd430c8",
  OID: "6ba7b812-9dad-11d1-80b4-00c04fd430c8",
  X500: "6ba7b814-9dad-11d1-80b4-00c04fd430c8",
};

try {
  console.log(`Generating UUIDs...`);

  const count = parseInt(countStr, 10);
  if (isNaN(count) || count < 1) {
    console.error("Count must be a positive integer");
    process.exit(1);
  }

  console.log(`  Version: ${version}`);
  console.log(`  Count: ${count}`);

  const uuids = [];

  for (let i = 0; i < count; i++) {
    let uuid;

    switch (version.toLowerCase()) {
      case "v1":
      case "1":
        uuid = uuidv1();
        break;

      case "v4":
      case "4":
        uuid = uuidv4();
        break;

      case "v5":
      case "5":
        if (!namespace || !name) {
          console.error("v5 requires namespace and name arguments");
          process.exit(1);
        }

        // Resolve namespace
        let ns = namespace.toUpperCase();
        if (ns in NAMESPACES) {
          ns = NAMESPACES[ns];
        }

        // For generating multiple v5 UUIDs, append index to name
        const nameToUse = count > 1 ? `${name}-${i}` : name;
        uuid = uuidv5(nameToUse, ns);
        break;

      default:
        console.error(`Unknown version: ${version}. Use: v1, v4, v5`);
        process.exit(1);
    }

    uuids.push(uuid);
  }

  // Output to file if specified
  if (outputPath) {
    const dir = path.dirname(outputPath);
    if (dir && dir !== ".") {
      fs.mkdirSync(dir, { recursive: true });
    }

    const ext = path.extname(outputPath).toLowerCase();
    if (ext === ".json") {
      fs.writeFileSync(outputPath, JSON.stringify(uuids, null, 2));
    } else {
      fs.writeFileSync(outputPath, uuids.join("\n"));
    }
    console.log(`  Written to: ${outputPath}`);
  }

  // Show generated UUIDs
  console.log(`\nāœ“ Generated ${count} UUID${count > 1 ? "s" : ""}`);
  for (const uuid of uuids.slice(0, 5)) {
    console.log(`  ${uuid}`);
  }
  if (uuids.length > 5) {
    console.log(`  ... and ${uuids.length - 5} more`);
  }

  console.log(
    JSON.stringify({
      success: true,
      version,
      count: uuids.length,
      uuids: uuids.length <= 10 ? uuids : uuids.slice(0, 10),
      outputPath: outputPath || null,
    })
  );
} catch (error) {
  console.error("Error:", error.message);
  process.exit(1);
}