OverviewFilesCommitsIssuesDocsReleasesPeers

keet-deobfuscated / @holepunchto / emojis / index.js

143 lines · javascript ref:
import t from "lodash.toarray"
import o from "./data/raw-emojis-base.js"
import e from "./data/raw-emojis-custom.js"
import s from "./data/raw-emojis-overwrite.js"
import r from "./data/messages.js"
import n from "./data/skin-tones.js"
export { default as emoji_categories } from "./emoji_categories.json" with { type: "json" }
export const EMOJI_CATEGORY = {
  RECENTS: "recents",
  CUSTOM: "custom",
  COMPONENT: "component",
  SMILEYS_EMOTION: "smileys-emotion",
  PEOPLE_BODY: "people-body",
  ANIMALS_NATURE: "animals-nature",
  FOOD_DRINK: "food-drink",
  TRAVEL_PLACES: "travel-places",
  ACTIVITIES: "activities",
  OBJECTS: "objects",
  SYMBOLS: "symbols",
  FLAGS: "flags",
  OTHER: "other",
}
export const SKIN_TONE_EMPTY = 0
export const SKIN_TONE_LIST_COLORED = [1, 2, 3, 4, 5]
export const SKIN_TONE_LIST = [0, ...SKIN_TONE_LIST_COLORED]
const i = new Map(),
  a = new Map(),
  m = new Map(),
  c = [],
  u = [],
  p = {},
  f = [],
  E = {},
  h = (t, { emojisPath: o }) => {
    const { label: e, tags: s, shortCodes: r, emoji: n, path: i } = t
    return { custom: !0, label: e, tags: s, shortCodes: r, emoji: n, url: i ? `${o}${i}` : "" }
  }
function j(t) {
  for (const o of t.shortCodes) i.set(o, t)
  ;(a.set(t.emoji, t), m.set(t.hexcode, t), t.skins?.forEach(j))
}
function g(t, o) {
  const e = []
  for (const s of t) for (const t of s) if ((e.push(t), e.length === o)) return e
  return e
}
export function initEmojis({ emojisPath: t = "/assets/emojis/" }) {
  ;(e.forEach((o) => {
    const e = h(o, { emojisPath: t })
    ;(j(e), c.push(e), u.push(e))
  }),
    o.forEach((t) => {
      ;(s[t.hexcode] && (t = { ...t, ...s[t.hexcode] }), j(t), u.push(t))
    }),
    f.push(EMOJI_CATEGORY.RECENTS),
    f.push(EMOJI_CATEGORY.CUSTOM),
    r.groups.forEach(({ key: t, order: o }) => {
      ;(f.push(t), (E[o] = t))
    }))
}
export function getEmojiData(t) {
  return m.get(t) || i.get(t) || a.get(t)
}
export const getEmojiBySkinTone = (t, o) => {
  const { skins: e } = t
  return (e && e[o - 1]) || t
}
export function getDataOfSkin(t) {
  return Number.isInteger(t) && t >= 1 && t <= 5
    ? (p[t] || (p[t] = u.map((o) => o.skins?.find((o) => o.tone === t) || o)), p[t])
    : u
}
export function emojify(t, o) {
  return t
    .split(/:([a-zA-Z0-9_\-+]+):/g)
    .map((t, e) => {
      if (e % 2 == 0) return t
      if (!i.has(t)) return `:${t}:`
      const s = i.get(t),
        { emoji: r, alt: n } = s
      return o ? o(r, t, s) : n || r
    })
    .join("")
}
export function unemojify(o) {
  return t(o)
    .map((t) => {
      if (a.has(t)) return `:${a.get(t).shortCodes[0]}:`
      const o = t.codePointAt(0).toString(16).toUpperCase()
      return m.has(o) ? `:${m.get(o).shortCodes[0]}:` : t
    })
    .join("")
}
export function getAllEmojisData() {
  return u
}
export function getCustomEmojisData() {
  return c
}
export function getEmojiMessages() {
  return r
}
export function getCategories() {
  return f
}
export function getCategoryByGroup() {
  return E
}
export function getSkinTones() {
  return n
}
export function getSkinToneSelectorEmoji() {
  return getEmojiData("1F91A")
}
export const emojiSearch = (t, o, e) => {
  const { maxResults: s = 20 } = e || {}
  if (!o) return t.slice(0, s)
  const r = `:${o}`,
    n = o.toLowerCase(),
    i = [[], [], [], [], [], [], [], []]
  for (const o of t) {
    let t = -1
    const { emoticon: e, shortCodes: s, tags: a } = o
    ;(e?.some((t) => t === n || t === r)
      ? (t = 0)
      : e?.some((t) => t.startsWith(n) || t.startsWith(r))
        ? (t = 1)
        : s?.some((t) => t === n)
          ? (t = 2)
          : s?.some((t) => t.startsWith(n))
            ? (t = 3)
            : s?.some((t) => t.includes(n))
              ? (t = 4)
              : a?.some((t) => t === n)
                ? (t = 5)
                : a?.some((t) => t.startsWith(n))
                  ? (t = 6)
                  : a?.some((t) => t.includes(n)) && (t = 7),
      t > -1 && i[t].push(o))
  }
  return g(i, s)
}