Files
infocom-systems-design/node_modules/@iconify/utils/lib/emoji/test/components.js
2025-10-03 22:27:28 +03:00

78 lines
2.2 KiB
JavaScript

import { emojiComponents } from "../data.js";
import { getEmojiSequenceKeyword } from "../format.js";
/**
* Map components from test data
*/
function mapEmojiTestDataComponents(testSequences) {
const results = {
converted: /* @__PURE__ */ new Map(),
items: /* @__PURE__ */ new Map(),
names: /* @__PURE__ */ new Map(),
types: {},
keywords: {}
};
for (const key in emojiComponents) {
const type = key;
const range = emojiComponents[type];
for (let number = range[0]; number < range[1]; number++) {
const keyword = getEmojiSequenceKeyword([number]);
const item = testSequences[keyword];
if (!item) throw new Error(`Missing emoji component in test sequence: "${keyword}"`);
results.converted.set(number, keyword);
results.items.set(number, item);
results.items.set(keyword, item);
const name = item.name;
results.names.set(number, name);
results.names.set(keyword, name);
results.types[name] = type;
results.keywords[name] = keyword;
}
}
return results;
}
/**
* Convert to string
*/
function emojiSequenceWithComponentsToString(sequence) {
return sequence.map((item) => typeof item === "number" ? item.toString(16) : item).join("-");
}
/**
* Find variations in sequence
*/
function findEmojiComponentsInSequence(sequence) {
const components = [];
for (let index = 0; index < sequence.length; index++) {
const code = sequence[index];
for (const key in emojiComponents) {
const type = key;
const range = emojiComponents[type];
if (code >= range[0] && code < range[1]) {
components.push({
index,
type
});
break;
}
}
}
return components;
}
/**
* Replace components in sequence
*/
function replaceEmojiComponentsInCombinedSequence(sequence, values) {
const indexes = {
"hair-style": 0,
"skin-tone": 0
};
return sequence.map((item) => {
if (typeof item === "number") return item;
const index = indexes[item]++;
const list = values[item];
if (!list || !list.length) throw new Error(`Cannot replace ${item}: no valid values provided`);
return list[index >= list.length ? list.length - 1 : index];
});
}
export { emojiSequenceWithComponentsToString, findEmojiComponentsInSequence, mapEmojiTestDataComponents, replaceEmojiComponentsInCombinedSequence };