76 lines
2.3 KiB
Plaintext
76 lines
2.3 KiB
Plaintext
import { emojiComponents } from '../data.mjs';
|
|
import { getEmojiSequenceKeyword } from '../format.mjs';
|
|
import '../convert.mjs';
|
|
|
|
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;
|
|
}
|
|
function emojiSequenceWithComponentsToString(sequence) {
|
|
return sequence.map((item) => typeof item === "number" ? item.toString(16) : item).join("-");
|
|
}
|
|
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;
|
|
}
|
|
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 };
|