- import * as fs from 'fs';
- import * as https from 'https';
- import * as path from 'path';
- import LZString from 'lz-string';
-
- async function generate() {
- /**
- * @type {Map<string, string>}
- */
- const shortcodeMap = new Map();
-
- // Get emoji data from https://github.com/milesj/emojibase
- // https://github.com/milesj/emojibase/
-
- const files = ['github.raw.json', 'emojibase.raw.json']; //, 'iamcal.raw.json', 'joypixels.raw.json'];
-
- for (const file of files) {
- await download(
- `https://raw.githubusercontent.com/milesj/emojibase/master/packages/data/en/shortcodes/${file}`,
- file,
- );
-
- /**
- * @type {Record<string, string | string[]>}}
- */
- const data = JSON.parse(fs.readFileSync(path.join(process.cwd(), file), 'utf8'));
- for (const [emojis, codes] of Object.entries(data)) {
- const emoji = emojis
- .split('-')
- .map(c => String.fromCodePoint(parseInt(c, 16)))
- .join('');
- for (const code of Array.isArray(codes) ? codes : [codes]) {
- if (shortcodeMap.has(code)) {
- // console.warn(`${file}: ${code}`);
- continue;
- }
- shortcodeMap.set(code, emoji);
- }
- }
-
- fs.unlink(file, () => {});
- }
-
- // Get gitmoji data from https://github.com/carloscuesta/gitmoji
- // https://github.com/carloscuesta/gitmoji/blob/master/src/data/gitmojis.json
- await download(
- 'https://raw.githubusercontent.com/carloscuesta/gitmoji/master/packages/gitmojis/src/gitmojis.json',
- 'gitmojis.json',
- );
-
- /**
- * @type {({ code: string; emoji: string })[]}
- */
- const gitmojis = JSON.parse(fs.readFileSync(path.join(process.cwd(), 'gitmojis.json'), 'utf8')).gitmojis;
- for (const emoji of gitmojis) {
- if (emoji.code.startsWith(':') && emoji.code.endsWith(':')) {
- emoji.code = emoji.code.substring(1, emoji.code.length - 2);
- }
-
- if (shortcodeMap.has(emoji.code)) {
- // console.warn(`GitHub: ${emoji.code}`);
- continue;
- }
- shortcodeMap.set(emoji.code, emoji.emoji);
- }
-
- fs.unlink('gitmojis.json', () => {});
-
- // Sort the emojis for easier diff checking
- const list = [...shortcodeMap.entries()];
- list.sort();
-
- const map = list.reduce((m, [key, value]) => {
- m[key] = value;
- return m;
- }, Object.create(null));
-
- fs.writeFileSync(
- path.join(process.cwd(), 'src/emojis.compressed.ts'),
- `export const emojis = '${LZString.compressToBase64(JSON.stringify(map))}';\n`,
- 'utf8',
- );
- }
-
- function download(url, destination) {
- return new Promise(resolve => {
- const stream = fs.createWriteStream(destination);
- https.get(url, rsp => {
- rsp.pipe(stream);
- stream.on('finish', () => {
- stream.close();
- resolve();
- });
- });
- });
- }
-
- void generate();
|