"use strict"; const request = require("request"); const path = require("path"); const fs = require("fs"); const fuzzy = require("fuzzy"); request.get({ url: "https://raw.githubusercontent.com/emojione/emojione/master/emoji_strategy.json", json: true, }, (error, response, emojiStrategy) => { const emojiMap = {}; for (const key in emojiStrategy) { if (emojiStrategy.hasOwnProperty(key)) { const shortname = prepareShortName(emojiStrategy[key].shortname); // Skip tones, at least for now if (shortname.includes("tone")) { continue; } const unicode = stringToUnicode(emojiStrategy[key].unicode_output); emojiMap[shortname] = unicode; for (let alternative of emojiStrategy[key].shortname_alternates) { alternative = prepareShortName(alternative); if (fuzzy.test(shortname, alternative) || fuzzy.test(alternative, shortname)) { continue; } emojiMap[alternative] = unicode; } } } const output = JSON.stringify(emojiMap, null, 2) + "\n"; fs.writeFileSync(path.resolve(path.join( __dirname, "..", "client", "js", "libs", "simplemap.json" )), output); }); function stringToUnicode(key) { return key .split("-") .map((c) => String.fromCodePoint(`0x${c}`)) .join(""); } function prepareShortName(shortname) { if (shortname === ":-1:") { // We replace dashes, but should keep :-1: working return "-1"; } else if (shortname === ":e-mail:") { // :email: exists as an alternative, should figure out how to use it instead return "email"; } return shortname .slice(1, -1) .replace("-", "_"); }