components.cjs 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. 'use strict';
  2. const emoji_data = require('../data.cjs');
  3. const emoji_format = require('../format.cjs');
  4. require('../convert.cjs');
  5. function mapEmojiTestDataComponents(testSequences) {
  6. const results = {
  7. converted: /* @__PURE__ */ new Map(),
  8. items: /* @__PURE__ */ new Map(),
  9. names: /* @__PURE__ */ new Map(),
  10. types: {},
  11. keywords: {}
  12. };
  13. for (const key in emoji_data.emojiComponents) {
  14. const type = key;
  15. const range = emoji_data.emojiComponents[type];
  16. for (let number = range[0]; number < range[1]; number++) {
  17. const keyword = emoji_format.getEmojiSequenceKeyword([number]);
  18. const item = testSequences[keyword];
  19. if (!item) {
  20. throw new Error(
  21. `Missing emoji component in test sequence: "${keyword}"`
  22. );
  23. }
  24. results.converted.set(number, keyword);
  25. results.items.set(number, item);
  26. results.items.set(keyword, item);
  27. const name = item.name;
  28. results.names.set(number, name);
  29. results.names.set(keyword, name);
  30. results.types[name] = type;
  31. results.keywords[name] = keyword;
  32. }
  33. }
  34. return results;
  35. }
  36. function emojiSequenceWithComponentsToString(sequence) {
  37. return sequence.map((item) => typeof item === "number" ? item.toString(16) : item).join("-");
  38. }
  39. function findEmojiComponentsInSequence(sequence) {
  40. const components = [];
  41. for (let index = 0; index < sequence.length; index++) {
  42. const code = sequence[index];
  43. for (const key in emoji_data.emojiComponents) {
  44. const type = key;
  45. const range = emoji_data.emojiComponents[type];
  46. if (code >= range[0] && code < range[1]) {
  47. components.push({
  48. index,
  49. type
  50. });
  51. break;
  52. }
  53. }
  54. }
  55. return components;
  56. }
  57. function replaceEmojiComponentsInCombinedSequence(sequence, values) {
  58. const indexes = {
  59. "hair-style": 0,
  60. "skin-tone": 0
  61. };
  62. return sequence.map((item) => {
  63. if (typeof item === "number") {
  64. return item;
  65. }
  66. const index = indexes[item]++;
  67. const list = values[item];
  68. if (!list || !list.length) {
  69. throw new Error(`Cannot replace ${item}: no valid values provided`);
  70. }
  71. return list[index >= list.length ? list.length - 1 : index];
  72. });
  73. }
  74. exports.emojiSequenceWithComponentsToString = emojiSequenceWithComponentsToString;
  75. exports.findEmojiComponentsInSequence = findEmojiComponentsInSequence;
  76. exports.mapEmojiTestDataComponents = mapEmojiTestDataComponents;
  77. exports.replaceEmojiComponentsInCombinedSequence = replaceEmojiComponentsInCombinedSequence;