Skip to content

Commit 2a239ec

Browse files
committed
Add generator
- Add `dataGenerator` - Add `listOfIconsAndVersionsGenerator` - Add `ts-node` library
1 parent 93d6e3e commit 2a239ec

12 files changed

Lines changed: 1974 additions & 14 deletions

File tree

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -240,6 +240,7 @@ https://deviconapi.vercel.app/?
240240
## 3. Dependencies
241241
* [**axios**](https://www.npmjs.com/package/axios)
242242
* [**text-to-svg**](https://www.npmjs.com/package/text-to-svg)
243+
* [**ts-node**](https://www.npmjs.com/package/ts-node)
243244

244245
<div align="center">
245246

docs/list-of-icons-and-versions/README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@
6060
* **django**: `plain`, `plain-wordmark`
6161
* **docker**: `plain`, `plain-wordmark`
6262
* **doctrine**: `plain`, `line`, `plain-wordmark`, `line-wordmark`
63-
* **dot**: `net-plain-wordmark`, `net-plain`
63+
* **dotnet**: `plain-wordmark`, `plain`
6464
* **dotnetcore**: `plain`
6565
* **dropwizard**: `plain`
6666
* **drupal**: `plain`, `plain-wordmark`
@@ -281,5 +281,5 @@
281281
<div align="center">
282282

283283
**Based in [Devicon](https://github.com/devicons/devicon) and powered by [Vercel](https://vercel.com/)**\
284-
**Made with ❤ by [Josélio Júnior (Lunatic Fox)](https://github.com/lunatic-fox)**
284+
**Made with ❤**
285285
</div>

docs/ptbr/README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -238,6 +238,7 @@ https://deviconapi.vercel.app/?
238238
## 3. Dependências
239239
* [**axios**](https://www.npmjs.com/package/axios)
240240
* [**text-to-svg**](https://www.npmjs.com/package/text-to-svg)
241+
* [**ts-node**](https://www.npmjs.com/package/ts-node)
241242

242243
<div align="center">
243244

docs/ptbr/list-of-icons-and-versions/README.md

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@
6060
* **django**: `plain`, `plain-wordmark`
6161
* **docker**: `plain`, `plain-wordmark`
6262
* **doctrine**: `plain`, `line`, `plain-wordmark`, `line-wordmark`
63-
* **dot**: `net-plain-wordmark`, `net-plain`
63+
* **dotnet**: `plain-wordmark`, `plain`
6464
* **dotnetcore**: `plain`
6565
* **dropwizard**: `plain`
6666
* **drupal**: `plain`, `plain-wordmark`
@@ -278,9 +278,8 @@
278278
* **zend**: `plain`, `plain-wordmark`
279279
* **zig**: `original`, `plain-wordmark`
280280

281-
282281
<div align="center">
283282

284283
**Baseado em [Devicon](https://github.com/devicons/devicon) e distribuído por [Vercel](https://vercel.com/)**\
285-
**Feito com ❤ por [Josélio Júnior (Lunatic Fox)](https://github.com/lunatic-fox)**
286-
</div>
284+
**Feito com ❤**
285+
</div>

generator/@generator/index.ts

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
import { IconVersions } from '../../src/@builder';
2+
3+
export type DeviconsArray = [{
4+
name: string,
5+
color: string
6+
}];
7+
8+
export type IconsObj = {
9+
[k: string]: {
10+
defaults: {
11+
icon: number;
12+
color: string;
13+
};
14+
versions: IconVersions;
15+
};
16+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
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 fs from 'fs';
8+
import path from 'path';
9+
import { IconsObj } from '../@generator';
10+
11+
const dataGenerator = (iconsObj: IconsObj) => {
12+
if (!fs.existsSync(path.join(__dirname, '../../src/data')))
13+
fs.mkdirSync(path.join(__dirname, '../../src/data'), { recursive: true });
14+
fs.writeFileSync(path.join(__dirname, '../../src/data/index.json'), JSON.stringify(iconsObj, null, 2));
15+
};
16+
17+
export default dataGenerator;
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
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 fs from 'fs';
8+
import path from 'path';
9+
import { IconsObj } from '../@generator';
10+
11+
const listOfIconsAndVersionsGenerator = (iconsObj: IconsObj) => {
12+
if (!fs.existsSync(path.join(__dirname, '../../docs/ptbr/list-of-icons-and-versions')))
13+
[
14+
'../../docs/list-of-icons-and-versions',
15+
'../../docs/ptbr/list-of-icons-and-versions'
16+
].forEach(e => fs.mkdirSync(path.join(__dirname, e), { recursive: true }));
17+
18+
const doc = (ptbr?: boolean) => [
19+
ptbr ?
20+
'# Lista das versões de ícone suportadas'
21+
: '# List of supported icon versions',
22+
'',
23+
Object.entries(iconsObj).map(([k, v]) =>
24+
`* **${k}**: ${
25+
Object.keys(v.versions)
26+
.map(e => `\`${e}\``)
27+
.join(', ')
28+
}`
29+
).join('\n'),
30+
'',
31+
'<div align="center">',
32+
'',
33+
ptbr ?
34+
[
35+
'**Baseado em [Devicon](https://github.com/devicons/devicon) e distribuído por [Vercel](https://vercel.com/)**\\',
36+
'**Feito com ❤**'
37+
].join('\n')
38+
: [
39+
'**Based in [Devicon](https://github.com/devicons/devicon) and powered by [Vercel](https://vercel.com/)**\\',
40+
'**Made with ❤**'
41+
].join('\n'),
42+
'</div>'
43+
].join('\n');
44+
45+
fs.writeFileSync(path.join(__dirname, '../../docs/list-of-icons-and-versions/README.md'), doc());
46+
fs.writeFileSync(path.join(__dirname, '../../docs/ptbr/list-of-icons-and-versions/README.md'), doc(true));
47+
};
48+
49+
export default listOfIconsAndVersionsGenerator;

generator/index.ts

Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
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

Comments
 (0)