mirror of
https://github.com/Shik3i/KoalaSync.git
synced 2026-07-26 20:18:14 +00:00
eca259281a
- Create shared/names.js as single source of truth for emoji maps, noun
lists, adjectives, and username generation (215 animal emoji entries)
- Remove duplicated inline lists from popup.js and background.js; both
now import getAvatarForName / generateUsername from shared/names.js
- Add names.js to the build script sync list so it stays DRY across
extension builds
- Fix missing cat emoji: CoolCat now correctly resolves to 🐱
- Sort emoji map keys by length at lookup time to prevent substring
false-matches (e.g. 'caterpillar' before 'cat')
282 lines
7.4 KiB
JavaScript
282 lines
7.4 KiB
JavaScript
/**
|
|
* KoalaSync Shared Name Generation & Emoji Mapping
|
|
*
|
|
* ⚠️ WARNING: This is the SINGLE SOURCE OF TRUTH.
|
|
* If you edit this file, you MUST run: node scripts/build-extension.js
|
|
* to propagate changes to the extension.
|
|
*
|
|
* The emoji map covers every animal/creature that has a Unicode emoji.
|
|
* Entries are sorted by key length (longest first) at lookup time to
|
|
* prevent substring false-matches (e.g. "caterpillar" must be checked
|
|
* before "cat").
|
|
*
|
|
* If you add a new animal noun to USERNAME_NOUNS, ensure it has a
|
|
* corresponding entry in ANIMAL_EMOJI_MAP (or a substring that already
|
|
* maps to a suitable emoji).
|
|
*/
|
|
|
|
export const USERNAME_ADJECTIVES = [
|
|
'Happy', 'Cool', 'Fast', 'Smart', 'Brave', 'Calm', 'Sneaky', 'Lazy',
|
|
'Wild', 'Chill', 'Lucky', 'Epic', 'Swift', 'Bold', 'Mighty',
|
|
'Cosmic', 'Neon', 'Shadow', 'Crystal', 'Thunder', 'Silent', 'Golden',
|
|
'Fierce', 'Noble', 'Mystic', 'Frozen', 'Blazing', 'Sapphire', 'Iron', 'Crimson'
|
|
];
|
|
|
|
export const USERNAME_NOUNS = [
|
|
'Koala', 'Panda', 'Tiger', 'Eagle', 'Fox', 'Bear', 'Wolf', 'Lion',
|
|
'Hawk', 'Seal', 'Owl', 'Shark', 'Dragon', 'Phoenix', 'Falcon',
|
|
'Panther', 'Raven', 'Cobra', 'Lynx', 'Jaguar', 'Orca', 'Mantis',
|
|
'Viper', 'Condor', 'Badger', 'Otter', 'Rhino', 'Crane', 'Mongoose',
|
|
'Specter',
|
|
'Cat', 'Dog', 'Deer', 'Bat', 'Gorilla', 'Monkey', 'Rabbit',
|
|
'Horse', 'Unicorn', 'Zebra', 'Leopard', 'Cheetah', 'Puma',
|
|
'Ram', 'Goat', 'Bull', 'Donkey', 'Moose',
|
|
'Elephant', 'Giraffe', 'Hippo', 'Sloth', 'Kangaroo',
|
|
'Raccoon', 'Hamster', 'Hedgehog', 'Skunk', 'Beaver', 'Bison',
|
|
'Camel', 'Llama', 'Hyena', 'Coyote',
|
|
'Mouse', 'Pig', 'Boar', 'Polar', 'Orangutan', 'Mammoth',
|
|
'Crow', 'Duck', 'Swan', 'Penguin', 'Parrot', 'Peacock',
|
|
'Dove', 'Dodo', 'Turkey', 'Flamingo', 'Chicken', 'Rooster', 'Goose',
|
|
'Dolphin', 'Whale', 'Crab', 'Lobster', 'Octopus', 'Squid',
|
|
'Jellyfish', 'Turtle',
|
|
'Crocodile', 'Lizard', 'Snake', 'Frog', 'Toad', 'Gecko',
|
|
'Bee', 'Ant', 'Spider', 'Scorpion', 'Butterfly', 'Ladybug',
|
|
'Beetle', 'Snail', 'Dragonfly', 'Caterpillar',
|
|
'Alien', 'Robot', 'Mermaid', 'Ghoul', 'Sprite', 'Cyborg',
|
|
'Dinosaur', 'Reaper', 'Wraith', 'Sphinx',
|
|
];
|
|
|
|
export const ANIMAL_EMOJI_MAP = {
|
|
'hippopotamus': '🦛',
|
|
'rhinoceros': '🦏',
|
|
'caterpillar': '🐛',
|
|
'chimpanzee': '🐵',
|
|
'orangutan': '🦧',
|
|
'blackbird': '🐦⬛',
|
|
'bumblebee': '🐝',
|
|
'cockatoo': '🦜',
|
|
'cockroach': '🪳',
|
|
'dragonfly': '🐉',
|
|
'grasshopper': '🦗',
|
|
'hedgehog': '🦔',
|
|
'jellyfish': '🪼',
|
|
'kangaroo': '🦘',
|
|
'ladybird': '🐞',
|
|
'ladybug': '🐞',
|
|
'porcupine': '🦔',
|
|
'scorpion': '🦂',
|
|
'tarantula': '🕷️',
|
|
'alligator': '🐊',
|
|
'anaconda': '🐍',
|
|
'antelope': '🦌',
|
|
'blowfish': '🐡',
|
|
'butterfly': '🦋',
|
|
'chameleon': '🦎',
|
|
'chipmunk': '🐿️',
|
|
'crocodile': '🐊',
|
|
'dinosaur': '🦖',
|
|
'elephant': '🐘',
|
|
'flamingo': '🦩',
|
|
'giraffe': '🦒',
|
|
'hamster': '🐹',
|
|
'leopard': '🐆',
|
|
'lobster': '🦞',
|
|
'mermaid': '🧜♀️',
|
|
'mongoose': '🦦',
|
|
'mosquito': '🦟',
|
|
'pangolin': '🦔',
|
|
'peacock': '🦚',
|
|
'penguin': '🐧',
|
|
'phoenix': '🐦🔥',
|
|
'raccoon': '🦝',
|
|
'seahorse': '🐴',
|
|
'sealion': '🦭',
|
|
'unicorn': '🦄',
|
|
'vampire': '🦇',
|
|
'warthog': '🐗',
|
|
'wolverine': '🦡',
|
|
'mammoth': '🦣',
|
|
'meerkat': '🦦',
|
|
'octopus': '🐙',
|
|
'opposum': '🐭',
|
|
'ostrich': '🐦',
|
|
'panther': '🐆',
|
|
'pelican': '🦩',
|
|
'rooster': '🐓',
|
|
'serpent': '🐍',
|
|
'specter': '👻',
|
|
'spectre': '👻',
|
|
'sparrow': '🐦',
|
|
'spider': '🕷️',
|
|
'sphinx': '🦁',
|
|
'squirrel': '🐿️',
|
|
'stingray': '🦈',
|
|
'termite': '🐜',
|
|
'tortoise': '🐢',
|
|
'turkey': '🦃',
|
|
'walrus': '🦭',
|
|
'wombat': '🦡',
|
|
'woodpecker': '🐦',
|
|
'alien': '👾',
|
|
'badger': '🦡',
|
|
'beaver': '🦫',
|
|
'beetle': '🪲',
|
|
'beluga': '🐋',
|
|
'bison': '🦬',
|
|
'bobcat': '🐱',
|
|
'buffalo': '🦬',
|
|
'bunny': '🐰',
|
|
'camel': '🐪',
|
|
'cheetah': '🐆',
|
|
'chicken': '🐔',
|
|
'cobra': '🐍',
|
|
'condor': '🦅',
|
|
'cougar': '🐆',
|
|
'coyote': '🐺',
|
|
'crane': '🦩',
|
|
'cricket': '🦗',
|
|
'crow': '🐦⬛',
|
|
'cyborg': '🤖',
|
|
'dolphin': '🐬',
|
|
'donkey': '🫏',
|
|
'dragon': '🐉',
|
|
'drake': '🐉',
|
|
'eagle': '🦅',
|
|
'falcon': '🦅',
|
|
'ferret': '🦦',
|
|
'gazelle': '🦌',
|
|
'gecko': '🦎',
|
|
'gerbil': '🐹',
|
|
'ghost': '👻',
|
|
'ghoul': '👻',
|
|
'goose': '🪿',
|
|
'gopher': '🐹',
|
|
'gorilla': '🦍',
|
|
'grizzly': '🐻',
|
|
'heron': '🦩',
|
|
'hippo': '🦛',
|
|
'hornet': '🐝',
|
|
'hyena': '🐺',
|
|
'iguana': '🦎',
|
|
'jackal': '🐺',
|
|
'jaguar': '🐆',
|
|
'kitten': '🐱',
|
|
'koala': '🐨',
|
|
'lemur': '🐒',
|
|
'lizard': '🦎',
|
|
'llama': '🦙',
|
|
'locust': '🦗',
|
|
'lynx': '🐱',
|
|
'macaw': '🦜',
|
|
'mantis': '🦗',
|
|
'mink': '🦦',
|
|
'monkey': '🐵',
|
|
'moose': '🦌',
|
|
'mouse': '🐭',
|
|
'orca': '🐋',
|
|
'otter': '🦦',
|
|
'oyster': '🦪',
|
|
'panda': '🐼',
|
|
'parrot': '🦜',
|
|
'pigeon': '🕊️',
|
|
'polar': '🐻❄️',
|
|
'poodle': '🐩',
|
|
'puffin': '🐧',
|
|
'puma': '🐆',
|
|
'rabbit': '🐰',
|
|
'raptor': '🦖',
|
|
'raven': '🐦⬛',
|
|
'reaper': '👻',
|
|
'rhino': '🦏',
|
|
'robin': '🐦',
|
|
'robot': '🤖',
|
|
'salmon': '🐟',
|
|
'shrimp': '🦐',
|
|
'skunk': '🦨',
|
|
'sloth': '🦥',
|
|
'snail': '🐌',
|
|
'snake': '🐍',
|
|
'sprite': '🧚',
|
|
'squid': '🦑',
|
|
'swan': '🦢',
|
|
'tapir': '🐗',
|
|
'tiger': '🐯',
|
|
'toad': '🐸',
|
|
'trout': '🐟',
|
|
'tuna': '🐟',
|
|
'turtle': '🐢',
|
|
'viper': '🐍',
|
|
'vulture': '🦅',
|
|
'weasel': '🦦',
|
|
'whale': '🐋',
|
|
'wolf': '🐺',
|
|
'wraith': '👻',
|
|
'zebra': '🦓',
|
|
'ape': '🦍',
|
|
'ant': '🐜',
|
|
'bat': '🦇',
|
|
'bee': '🐝',
|
|
'bug': '🐛',
|
|
'cat': '🐱',
|
|
'cow': '🐮',
|
|
'crab': '🦀',
|
|
'dog': '🐶',
|
|
'duck': '🦆',
|
|
'elk': '🦌',
|
|
'fly': '🪰',
|
|
'fox': '🦊',
|
|
'frog': '🐸',
|
|
'goat': '🐐',
|
|
'hawk': '🦅',
|
|
'hen': '🐔',
|
|
'hog': '🐷',
|
|
'lion': '🦁',
|
|
'mole': '🐭',
|
|
'moth': '🦋',
|
|
'mule': '🫏',
|
|
'owl': '🦉',
|
|
'pig': '🐷',
|
|
'ram': '🐏',
|
|
'rat': '🐀',
|
|
'seal': '🦭',
|
|
'shark': '🦈',
|
|
'wasp': '🐝',
|
|
'yak': '🐂',
|
|
'doe': '🦌',
|
|
'ewe': '🐑',
|
|
'buck': '🦌',
|
|
'ox': '🐂',
|
|
'bull': '🐂',
|
|
'dodo': '🦤',
|
|
'boar': '🐗',
|
|
'bear': '🐻',
|
|
'deer': '🦌',
|
|
'dove': '🕊️',
|
|
'fish': '🐟',
|
|
'hare': '🐰',
|
|
'horse': '🐴',
|
|
'lamb': '🐑',
|
|
'mare': '🐴',
|
|
'pony': '🐴',
|
|
'pup': '🐶',
|
|
'croc': '🐊',
|
|
'gnat': '🦟',
|
|
'gnu': '🦬',
|
|
};
|
|
|
|
export function getAvatarForName(username) {
|
|
if (!username) return '\u{1F464}';
|
|
const lower = username.toLowerCase();
|
|
const sorted = Object.entries(ANIMAL_EMOJI_MAP).sort((a, b) => b[0].length - a[0].length);
|
|
for (const [key, emoji] of sorted) {
|
|
if (lower.includes(key)) return emoji;
|
|
}
|
|
return '\u{1F464}';
|
|
}
|
|
|
|
export function generateUsername() {
|
|
const adj = USERNAME_ADJECTIVES[Math.floor(Math.random() * USERNAME_ADJECTIVES.length)];
|
|
const noun = USERNAME_NOUNS[Math.floor(Math.random() * USERNAME_NOUNS.length)];
|
|
return `${adj}${noun}`;
|
|
}
|