forked from mvdicarlo/postybirb
-
Notifications
You must be signed in to change notification settings - Fork 1
/
generate-icons.ts
46 lines (36 loc) · 1.3 KB
/
generate-icons.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
import { typeToPathMap } from '@elastic/eui/lib/components/icon/icon_map';
import { writeFileSync } from 'fs';
const iconsMap: Record<string, string> = typeToPathMap;
function escapeName(name: string) {
if (['package', 'function'].includes(name)) {
return `euiIcon${name}`;
} else return name;
}
let code = `
/* eslint-disable import/no-duplicates */
// NOTE: This file exists because of a known issue with EUI icons dynamic import.
// https://github.com/elastic/eui/issues/5463#issuecomment-1107665339
//
// GENERATED by tools/generateIcons.ts
//
import { ICON_TYPES } from '@elastic/eui';
import { appendIconComponentCache } from '@elastic/eui/es/components/icon/icon';
`;
for (const [name, path] of Object.entries(iconsMap)) {
code += `import { icon as ${escapeName(
name
)} } from '@elastic/eui/es/components/icon/assets/${path}';\n`;
}
code += `
type IconComponentNameType = typeof ICON_TYPES[0];
type IconComponentCacheType = Record<IconComponentNameType, unknown>;
const cachedIcons: IconComponentCacheType = {
`;
for (const name of Object.keys(iconsMap)) {
const escaped = escapeName(name);
code += escaped === name ? `\n ${name},` : `\n ${name}: ${escaped},`;
}
code += `
};
appendIconComponentCache(cachedIcons);`;
writeFileSync('./apps/postybirb-ui/src/icons/icons.ts', code.trim());