Files
SHiNE-server/shine-UI/emoji-catalog-diagnostic.mjs
T

32 lines
1.2 KiB
JavaScript

import { TWEMOJI_GROUPS } from './js/components/twemoji-catalog.js?diagnostic=202607151545';
const items = TWEMOJI_GROUPS.flatMap((group) =>
group.items.map((item) => ({ ...item, category: group.id })),
);
function duplicateValues(key) {
return Object.entries(
items.reduce((groups, item) => {
const value = item[key];
(groups[value] ||= []).push(item.file);
return groups;
}, {}),
)
.filter(([, files]) => files.length > 1)
.map(([value, files]) => ({ value, files }));
}
const missing = items
.filter((item) => !item.emoji || !item.file || !item.name || !item.category || !item.previewUrl || !item.animatedUrl)
.map((item) => ({ file: item.file, missing: ['emoji', 'file', 'name', 'category', 'previewUrl', 'animatedUrl'].filter((field) => !item[field]) }));
console.log(JSON.stringify({
categories: TWEMOJI_GROUPS.map((group) => ({ id: group.id, label: group.label, count: group.items.length })),
total: items.length,
uniqueUnicode: new Set(items.map((item) => item.emoji)).size,
uniqueUrl: new Set(items.map((item) => item.file)).size,
duplicateUnicode: duplicateValues('emoji'),
duplicateUrl: duplicateValues('file'),
missing,
}, null, 2));