astro-ghostcms/.pnpm-store/v3/files/1f/70907220d5058c8f54f83bc4d4f...

100 lines
2.7 KiB
Plaintext

'use strict';
const emoji_cleanup = require('../cleanup.cjs');
const emoji_data = require('../data.cjs');
const emoji_format = require('../format.cjs');
const emoji_test_components = require('./components.cjs');
require('../convert.cjs');
function findMissingEmojis(sequences, testDataTree) {
const results = [];
const existingItems = /* @__PURE__ */ Object.create(null);
const copiedItems = /* @__PURE__ */ Object.create(null);
sequences.forEach((item) => {
const sequence = emoji_cleanup.getUnqualifiedEmojiSequence(item.sequence);
const key = emoji_format.getEmojiSequenceKeyword(sequence);
if (!existingItems[key] || // If multiple matches for same sequence exist, use longest version
existingItems[key].sequence.length < item.sequence.length) {
existingItems[key] = item;
}
});
const iterate = (type, parentTree, parentValues, parentItem, deep) => {
const childTree = parentTree.children?.[type];
if (!childTree) {
return;
}
const range = emoji_data.emojiComponents[type];
for (let number = range[0]; number < range[1]; number++) {
const values = {
"hair-style": [...parentValues["hair-style"]],
"skin-tone": [...parentValues["skin-tone"]]
};
values[type].push(number);
const sequence = emoji_test_components.replaceEmojiComponentsInCombinedSequence(
childTree.item.sequence,
values
);
const key = emoji_format.getEmojiSequenceKeyword(
emoji_cleanup.getUnqualifiedEmojiSequence(sequence)
);
const oldItem = existingItems[key];
let item;
if (oldItem) {
item = oldItem;
} else {
item = copiedItems[key];
if (!item) {
item = {
...parentItem,
sequence
};
if (item.sequenceKey) {
item.sequenceKey = key;
}
copiedItems[key] = item;
results.push(item);
}
}
if (deep || oldItem) {
for (const key2 in values) {
iterate(
key2,
childTree,
values,
item,
deep
);
}
}
}
};
const parse = (key, deep) => {
const treeItem = testDataTree[key];
const sequenceKey = treeItem.item.sequenceKey;
const rootItem = existingItems[sequenceKey];
if (!rootItem) {
return;
}
const values = {
"skin-tone": [],
"hair-style": []
};
for (const key2 in values) {
iterate(
key2,
treeItem,
values,
rootItem,
deep
);
}
};
for (const key in testDataTree) {
parse(key, false);
parse(key, true);
}
return results;
}
exports.findMissingEmojis = findMissingEmojis;