mirror of
https://github.com/langgenius/dify.git
synced 2026-07-16 09:58:42 +08:00
34 lines
1.1 KiB
TypeScript
34 lines
1.1 KiB
TypeScript
const RANDOM_SUFFIX_ALPHABET = 'abcdefghijklmnopqrstuvwxyz'
|
|
const RANDOM_SUFFIX_LENGTH = 4
|
|
const RANDOM_SUFFIX_FALLBACK_LENGTH = 6
|
|
const RANDOM_SUFFIX_MAX_ATTEMPTS = 16
|
|
|
|
function randomLetterCombination(length: number) {
|
|
const randomValues = new Uint8Array(length)
|
|
|
|
if (globalThis.crypto) {
|
|
globalThis.crypto.getRandomValues(randomValues)
|
|
}
|
|
else {
|
|
randomValues.forEach((_, index) => {
|
|
randomValues[index] = Math.floor(Math.random() * 256)
|
|
})
|
|
}
|
|
|
|
return Array.from(randomValues, value => RANDOM_SUFFIX_ALPHABET[value % RANDOM_SUFFIX_ALPHABET.length]).join('')
|
|
}
|
|
|
|
export function availableInstanceName(baseName: string, existingNames: readonly string[]) {
|
|
const existingNameSet = new Set(existingNames)
|
|
if (!existingNameSet.has(baseName))
|
|
return baseName
|
|
|
|
for (let attempt = 0; attempt < RANDOM_SUFFIX_MAX_ATTEMPTS; attempt++) {
|
|
const candidate = `${baseName}-${randomLetterCombination(RANDOM_SUFFIX_LENGTH)}`
|
|
if (!existingNameSet.has(candidate))
|
|
return candidate
|
|
}
|
|
|
|
return `${baseName}-${randomLetterCombination(RANDOM_SUFFIX_FALLBACK_LENGTH)}`
|
|
}
|