|
|
- /* eslint-disable @typescript-eslint/no-var-requires */
- const fs = require('fs');
- const https = require('https');
- const path = require('path');
-
- async function generate() {
- /**
- * @type {{ [code: string]: string }}
- */
- let map = Object.create(null);
-
- // Get emoji data from https://github.com/milesj/emojibase
- // https://github.com/milesj/emojibase/blob/master/packages/data/en/raw.json
- await download('https://raw.githubusercontent.com/milesj/emojibase/master/packages/data/en/raw.json', 'raw.json');
-
- /**
- * @type {({ emoji: string; shortcodes: string[] })[]}
- */
- // eslint-disable-next-line import/no-dynamic-require
- const emojis = require(path.join(process.cwd(), 'raw.json'));
- for (const emoji of emojis) {
- if (emoji.shortcodes == null || emoji.shortcodes.length === 0) continue;
-
- for (let code of emoji.shortcodes) {
- if (code.startsWith(':') && code.endsWith(':')) {
- code = code.substring(1, code.length - 2);
- }
-
- if (map[code] !== undefined) {
- console.warn(code);
- }
- map[code] = emoji.emoji;
- }
- }
-
- fs.unlink('raw.json', () => {});
-
- // 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/src/data/gitmojis.json',
- 'gitmojis.json',
- );
-
- /**
- * @type {({ code: string; emoji: string })[]}
- */
- // eslint-disable-next-line import/no-dynamic-require
- const gitmojis = require(path.join(process.cwd(), 'gitmojis.json')).gitmojis;
- for (const emoji of gitmojis) {
- if (emoji.code.startsWith(':') && emoji.code.endsWith(':')) {
- emoji.code = emoji.code.substring(1, emoji.code.length - 2);
- }
-
- if (map[emoji.code] !== undefined) {
- console.warn(emoji.code);
- continue;
- }
- map[emoji.code] = emoji.emoji;
- }
-
- fs.unlink('gitmojis.json', () => {});
-
- // Sort the emojis for easier diff checking
- /**
- * @type { [string, string][] }}
- */
- const list = Object.entries(map);
- list.sort();
-
- map = list.reduce((m, [key, value]) => {
- m[key] = value;
- return m;
- }, Object.create(null));
-
- fs.writeFileSync(path.join(process.cwd(), 'src/emojis.json'), JSON.stringify(map), 'utf8');
- }
-
- function download(url, destination) {
- return new Promise((resolve, reject) => {
- const stream = fs.createWriteStream(destination);
- https.get(url, rsp => {
- rsp.pipe(stream);
- stream.on('finish', () => {
- stream.close();
- resolve();
- });
- });
- });
- }
-
- generate();
|