|
| 1 | +/** |
| 2 | + @author Josélio Júnior <joseliojrx25@gmail.com> |
| 3 | + @copyright Josélio Júnior (Lunatic Fox) 2022 |
| 4 | + @license MIT |
| 5 | +*//***/ |
| 6 | + |
| 7 | +import axios from 'axios'; |
| 8 | +import dataGenerator from './generators/dataGenerator'; |
| 9 | +import listOfIconsAndVersionsGenerator from './generators/listOfIconsAndVersionsGenerator'; |
| 10 | +import { DeviconsArray, IconsObj } from './@generator'; |
| 11 | + |
| 12 | +const baseURL = `https://cdn.jsdelivr.net/gh/devicons/devicon@master/`; |
| 13 | + |
| 14 | +const generator = async () => { |
| 15 | + const versionPriority = [ |
| 16 | + 'original', |
| 17 | + 'plain', |
| 18 | + 'line', |
| 19 | + 'original-wordmark', |
| 20 | + 'plain-wordmark', |
| 21 | + 'line-wordmark' |
| 22 | + ]; |
| 23 | + |
| 24 | + const deviconBase = (await axios.get(`${baseURL}devicon-base.css`)).data; |
| 25 | + const deviconsArray: DeviconsArray = (await axios.get(`${baseURL}devicon.json`)).data; |
| 26 | + const defaultColors = Object.fromEntries(deviconsArray.map(e => [e.name, e.color])); |
| 27 | + |
| 28 | + const stringToObj = Object.fromEntries( |
| 29 | + deviconBase |
| 30 | + .replace(/^(?!\.devicon|\s+content).+/gm, '') |
| 31 | + .replace(/.devicon-|\{|:before|content:/gm, '') |
| 32 | + .replace(/^(.+?)\s?\n\s+(".+");/gm, '$1: $2') |
| 33 | + .replace(/"|[ ]|\\/gm, '') |
| 34 | + .split('\n') |
| 35 | + .filter((e: string) => e) |
| 36 | + .map((e: string) => { |
| 37 | + const [k, v] = e.split(':'); |
| 38 | + return [k, parseInt(v, 16)]; |
| 39 | + }) |
| 40 | + ); |
| 41 | + |
| 42 | + const iconsObj: IconsObj = Object.fromEntries( |
| 43 | + [...new Set(Object.keys(stringToObj).map(e => e.split('-')[0]))] |
| 44 | + .map(e => { |
| 45 | + const versions = Object.entries(stringToObj) |
| 46 | + .filter(([k, _]) => k.split('-')[0] === e) |
| 47 | + .map(([k, v]) => [k.split('-').slice(1).join('-'), v]) |
| 48 | + .filter(f => f[0]) |
| 49 | + .sort((a, b) => versionPriority.indexOf(a[0]) - versionPriority.indexOf(b[0])); |
| 50 | + |
| 51 | + return [ |
| 52 | + e === 'dot' ? 'dotnet' : e, |
| 53 | + e === 'dot' ? { |
| 54 | + defaults: { |
| 55 | + icon: versions[0][1], |
| 56 | + color: '#1384c8'.toUpperCase() |
| 57 | + }, |
| 58 | + versions: { |
| 59 | + 'plain-wordmark': 59091, |
| 60 | + 'plain': 59092 |
| 61 | + } |
| 62 | + } |
| 63 | + : { |
| 64 | + defaults: { |
| 65 | + icon: versions[0][1], |
| 66 | + color: defaultColors[e]?.toUpperCase() |
| 67 | + }, |
| 68 | + versions: Object.fromEntries(versions) |
| 69 | + } |
| 70 | + ]; |
| 71 | + }) |
| 72 | + .sort() |
| 73 | + ); |
| 74 | + |
| 75 | + return iconsObj; |
| 76 | +}; |
| 77 | + |
| 78 | +generator() |
| 79 | + .then(iconsObj => { |
| 80 | + dataGenerator(iconsObj); |
| 81 | + listOfIconsAndVersionsGenerator(iconsObj); |
| 82 | + }); |
0 commit comments