diff --git a/apps/desktop/package.json b/apps/desktop/package.json index e665c56def8..3237a6683be 100644 --- a/apps/desktop/package.json +++ b/apps/desktop/package.json @@ -83,6 +83,7 @@ "superjson": "^2.2.5", "tailwind-merge": "^3.4.0", "trpc-electron": "^0.1.2", + "unique-names-generator": "^4.7.1", "zod": "^4.1.12", "zustand": "^5.0.8" }, diff --git a/apps/desktop/src/lib/trpc/routers/workspaces/utils/git.ts b/apps/desktop/src/lib/trpc/routers/workspaces/utils/git.ts index c49a2a9cf75..8e32b93405f 100644 --- a/apps/desktop/src/lib/trpc/routers/workspaces/utils/git.ts +++ b/apps/desktop/src/lib/trpc/routers/workspaces/utils/git.ts @@ -1,49 +1,23 @@ +import { randomBytes } from "node:crypto"; import { mkdir } from "node:fs/promises"; import { join } from "node:path"; import simpleGit from "simple-git"; +import { + adjectives, + animals, + uniqueNamesGenerator, +} from "unique-names-generator"; export function generateBranchName(): string { - const adjectives = [ - "azure", - "crimson", - "emerald", - "golden", - "indigo", - "jade", - "lavender", - "magenta", - "navy", - "olive", - "pearl", - "rose", - "silver", - "teal", - "violet", - ]; - - const nouns = [ - "cloud", - "forest", - "mountain", - "ocean", - "river", - "storm", - "sunset", - "thunder", - "wave", - "wind", - "meadow", - "canyon", - "glacier", - "valley", - "peak", - ]; - - const adjective = adjectives[Math.floor(Math.random() * adjectives.length)]; - const noun = nouns[Math.floor(Math.random() * nouns.length)]; - const number = Math.floor(Math.random() * 100); - - return `${adjective}-${noun}-${number}`; + const name = uniqueNamesGenerator({ + dictionaries: [adjectives, animals], + separator: "-", + length: 2, + style: "lowerCase", + }); + const suffix = randomBytes(3).toString("hex"); + + return `${name}-${suffix}`; } export async function createWorktree( diff --git a/bun.lock b/bun.lock index a7f17a50519..e2bdc6bb9a5 100644 --- a/bun.lock +++ b/bun.lock @@ -69,7 +69,7 @@ }, "apps/desktop": { "name": "@superset/desktop", - "version": "0.0.1", + "version": "0.0.3", "dependencies": { "@dnd-kit/core": "^6.3.1", "@dnd-kit/sortable": "^10.0.0", @@ -124,6 +124,7 @@ "superjson": "^2.2.5", "tailwind-merge": "^3.4.0", "trpc-electron": "^0.1.2", + "unique-names-generator": "^4.7.1", "zod": "^4.1.12", "zustand": "^5.0.8", }, @@ -2751,6 +2752,8 @@ "unique-filename": ["unique-filename@2.0.1", "", { "dependencies": { "unique-slug": "^3.0.0" } }, "sha512-ODWHtkkdx3IAR+veKxFV+VBkUMcN+FaqzUUd7IZzt+0zhDZFPFxhlqwPF3YQvMHx1TD0tdgYl+kuPnJ8E6ql7A=="], + "unique-names-generator": ["unique-names-generator@4.7.1", "", {}, "sha512-lMx9dX+KRmG8sq6gulYYpKWZc9RlGsgBR6aoO8Qsm3qvkSJ+3rAymr+TnV8EDMrIrwuFJ4kruzMWM/OpYzPoow=="], + "unique-slug": ["unique-slug@3.0.0", "", { "dependencies": { "imurmurhash": "^0.1.4" } }, "sha512-8EyMynh679x/0gqE9fT9oilG+qEt+ibFyqjuVTsZn1+CMxH+XLlpvr2UZx4nVcCwTpx81nICr2JQFkM+HPLq4w=="], "unist-util-find-after": ["unist-util-find-after@5.0.0", "", { "dependencies": { "@types/unist": "^3.0.0", "unist-util-is": "^6.0.0" } }, "sha512-amQa0Ep2m6hE2g72AugUItjbuM8X8cGQnFoHk0pGfrFeT9GZhzN5SW8nRsiGKK7Aif4CrACPENkA6P/Lw6fHGQ=="],