@piki.me/random-username-go
Version:
Generate random usernames.
47 lines (46 loc) • 1.53 kB
JavaScript
import data from './data';
const languagues = new Set([
'zh-Hans',
'en'
]);
const separators = new Map([
['zh-Hans', '的'],
['en', ' ']
]);
const nameGenerators = new Map();
export function getLocaledNameElements(language = 'zh-Hans') {
if (!languagues.has(language)) {
throw new Error(`Language ${language} is not supported.`);
}
return data[language];
}
function createRandomGenerator(elements) {
const els = new Set(elements);
return () => {
const index = Math.floor(Math.random() * els.size);
return [...els.values()][index];
};
}
function CreateNameGenerator(localedNameElements, language = 'zh-Hans') {
const adjectiveGenerator = createRandomGenerator(localedNameElements.adjectives);
const nounGenerator = createRandomGenerator(localedNameElements.nouns);
if (language === 'en') {
return () => {
return `${adjectiveGenerator()} ${nounGenerator()}`;
};
}
return () => {
return `${adjectiveGenerator()}${separators.get(language)}${nounGenerator()}`;
};
}
export function random(language = 'zh-Hans') {
if (nameGenerators.has(language)) {
return nameGenerators.get(language)();
}
else {
const localedNameElements = getLocaledNameElements(language);
const nameGenerator = CreateNameGenerator(localedNameElements, language);
nameGenerators.set(language, nameGenerator);
return nameGenerator();
}
}