kaneo (minimalist kanban) fork to experiment adding a tangled integration github.com/usekaneo/kaneo
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

at 9a620ba2f31238f03cd28f1da5ef3838d67e4e8a 47 lines 1.2 kB view raw
1import { createSlug } from "./create-slug"; 2 3const RANDOM_SUFFIX_LENGTH = 12; 4 5export function createWorkspaceBaseSlug(value: string): string { 6 return createSlug(value) || "workspace"; 7} 8 9function createRandomSuffix(): string { 10 return crypto.randomUUID().replace(/-/g, "").slice(0, RANDOM_SUFFIX_LENGTH); 11} 12 13export function createUniqueWorkspaceSlug( 14 value: string, 15 existingSlugs: Iterable<string | null | undefined>, 16): string { 17 const baseSlug = createWorkspaceBaseSlug(value); 18 const usedSlugs = new Set( 19 Array.from(existingSlugs, (slug) => slug?.toLowerCase()).filter(Boolean), 20 ); 21 22 if (!usedSlugs.has(baseSlug.toLowerCase())) { 23 return baseSlug; 24 } 25 26 let slug = `${baseSlug}-${createRandomSuffix()}`; 27 28 while (usedSlugs.has(slug.toLowerCase())) { 29 slug = `${baseSlug}-${createRandomSuffix()}`; 30 } 31 32 return slug; 33} 34 35export function isWorkspaceSlugCollisionError(error: unknown): boolean { 36 if (!(error instanceof Error)) { 37 return false; 38 } 39 40 const message = error.message.toLowerCase(); 41 42 return ( 43 message.includes("already exists") || 44 message.includes("workspace exists") || 45 message.includes("slug") 46 ); 47}