format.mjs 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. import { convertEmojiSequenceToUTF16, convertEmojiSequenceToUTF32 } from './convert.mjs';
  2. import './data.mjs';
  3. const defaultUnicodeOptions = {
  4. prefix: "",
  5. separator: "",
  6. case: "lower",
  7. format: "utf-32",
  8. add0: false,
  9. throwOnError: true
  10. };
  11. function convert(sequence, options) {
  12. const prefix = options.prefix;
  13. const func = options.case === "upper" ? "toUpperCase" : "toLowerCase";
  14. const cleanSequence = options.format === "utf-16" ? convertEmojiSequenceToUTF16(sequence) : convertEmojiSequenceToUTF32(sequence, options.throwOnError);
  15. return cleanSequence.map((code) => {
  16. let str = code.toString(16);
  17. if (options.add0 && str.length < 4) {
  18. str = "0".repeat(4 - str.length) + str;
  19. }
  20. return prefix + str[func]();
  21. }).join(options.separator);
  22. }
  23. function getEmojiUnicodeString(code, options = {}) {
  24. return convert([code], {
  25. ...defaultUnicodeOptions,
  26. ...options
  27. });
  28. }
  29. const defaultSequenceOptions = {
  30. ...defaultUnicodeOptions,
  31. separator: "-"
  32. };
  33. function getEmojiSequenceString(sequence, options = {}) {
  34. return convert(sequence, {
  35. ...defaultSequenceOptions,
  36. ...options
  37. });
  38. }
  39. function getEmojiSequenceKeyword(sequence) {
  40. return sequence.map((code) => code.toString(16)).join("-");
  41. }
  42. export { getEmojiSequenceKeyword, getEmojiSequenceString, getEmojiUnicodeString };