material-icon-theme 4.18.0 → 4.18.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (202) hide show
  1. package/.eslintrc.json +51 -51
  2. package/.github/FUNDING.yml +3 -3
  3. package/.github/ISSUE_TEMPLATE/bug_report.md +34 -34
  4. package/.github/ISSUE_TEMPLATE/icon_request.md +27 -27
  5. package/.github/workflows/build.yml +45 -45
  6. package/.github/workflows/color-check.yml +22 -22
  7. package/.github/workflows/release.yml +73 -73
  8. package/.prettierrc +7 -7
  9. package/.vscode/extensions.json +3 -3
  10. package/.vscode/launch.json +43 -43
  11. package/.vscode/settings.json +14 -14
  12. package/.vscode/tasks.json +32 -32
  13. package/.vscodeignore +20 -20
  14. package/CHANGELOG.md +1179 -1171
  15. package/CONTRIBUTING.md +62 -62
  16. package/LICENSE.md +8 -8
  17. package/README.md +208 -208
  18. package/build/web-extension.webpack.config.js +62 -62
  19. package/build/webpack.config.js +39 -39
  20. package/changelog.config.json +4 -4
  21. package/icons/architecture.svg +4 -4
  22. package/icons/astyle.svg +4 -4
  23. package/icons/auto.svg +10 -0
  24. package/icons/auto_light.svg +10 -0
  25. package/icons/azure.svg +9 -9
  26. package/icons/blitz.svg +4 -4
  27. package/icons/buildkite.svg +8 -8
  28. package/icons/cypress.svg +4 -4
  29. package/icons/dart_generated.svg +9 -9
  30. package/icons/dependabot.svg +4 -4
  31. package/icons/dinophp.svg +16 -16
  32. package/icons/figma.svg +10 -10
  33. package/icons/folder-angular-open.svg +2 -2
  34. package/icons/folder-angular.svg +2 -2
  35. package/icons/folder-buildkite-open.svg +8 -8
  36. package/icons/folder-buildkite.svg +7 -7
  37. package/icons/folder-cypress-open.svg +5 -5
  38. package/icons/folder-cypress.svg +5 -5
  39. package/icons/folder-java-open.svg +2 -2
  40. package/icons/folder-java.svg +2 -2
  41. package/icons/folder-next-open.svg +2 -2
  42. package/icons/folder-next.svg +2 -2
  43. package/icons/folder-nuxt-open.svg +2 -2
  44. package/icons/folder-nuxt.svg +2 -2
  45. package/icons/folder-queue-open.svg +2 -2
  46. package/icons/folder-queue.svg +2 -2
  47. package/icons/folder-resolver-open.svg +2 -2
  48. package/icons/folder-resolver.svg +2 -2
  49. package/icons/folder-serverless-open.svg +5 -5
  50. package/icons/folder-serverless.svg +5 -5
  51. package/icons/folder-shader-open.svg +7 -7
  52. package/icons/folder-shader.svg +6 -6
  53. package/icons/folder-target-open.svg +2 -2
  54. package/icons/folder-target.svg +2 -2
  55. package/icons/folder-unity-open.svg +2 -2
  56. package/icons/folder-unity.svg +2 -2
  57. package/icons/folder-vercel-open.svg +4 -4
  58. package/icons/folder-vercel.svg +4 -4
  59. package/icons/folder-verdaccio-open.svg +8 -8
  60. package/icons/folder-verdaccio.svg +8 -8
  61. package/icons/gleam.svg +4 -4
  62. package/icons/gridsome.svg +4 -4
  63. package/icons/hardhat.svg +3 -3
  64. package/icons/lighthouse.svg +2 -2
  65. package/icons/ndst.svg +7 -7
  66. package/icons/next.svg +3 -3
  67. package/icons/next_light.svg +2 -2
  68. package/icons/nuxt.svg +5 -5
  69. package/icons/odin.svg +6 -6
  70. package/icons/otne.svg +16 -16
  71. package/icons/parcel.svg +4 -4
  72. package/icons/playwright.svg +7 -7
  73. package/icons/plop.svg +4 -4
  74. package/icons/pnpm.svg +9 -9
  75. package/icons/pnpm_light.svg +7 -7
  76. package/icons/poetry.svg +1 -1
  77. package/icons/processing.svg +10 -10
  78. package/icons/remix.svg +4 -4
  79. package/icons/remix_light.svg +4 -4
  80. package/icons/rescript-interface.svg +5 -5
  81. package/icons/rome.svg +5 -5
  82. package/icons/serverless.svg +4 -4
  83. package/icons/shader.svg +4 -4
  84. package/icons/siyuan.svg +9 -9
  85. package/icons/steadybit.svg +1 -1
  86. package/icons/svgr.svg +4 -4
  87. package/icons/tauri.svg +9 -9
  88. package/icons/template.svg +4 -4
  89. package/icons/tobi.svg +4 -4
  90. package/icons/tobimake.svg +14 -14
  91. package/icons/turborepo.svg +12 -12
  92. package/icons/turborepo_light.svg +12 -12
  93. package/icons/verdaccio.svg +5 -5
  94. package/images/contributors.png +0 -0
  95. package/images/fileIcons.png +0 -0
  96. package/logo.svg +21 -21
  97. package/material-colors.yml +257 -257
  98. package/package.json +267 -264
  99. package/package.nls.de.json +35 -35
  100. package/package.nls.es.json +32 -32
  101. package/package.nls.fr.json +32 -32
  102. package/package.nls.ja.json +35 -35
  103. package/package.nls.json +35 -35
  104. package/package.nls.nl.json +35 -35
  105. package/package.nls.pl.json +35 -35
  106. package/package.nls.pt-BR.json +32 -32
  107. package/package.nls.pt-PT.json +32 -32
  108. package/package.nls.ru.json +32 -32
  109. package/package.nls.zh-CN.json +32 -32
  110. package/package.nls.zh-TW.json +32 -32
  111. package/src/commands/activate.ts +26 -26
  112. package/src/commands/explorerArrows.ts +55 -55
  113. package/src/commands/folderColor.ts +96 -96
  114. package/src/commands/folders.ts +55 -55
  115. package/src/commands/grayscale.ts +55 -55
  116. package/src/commands/iconPacks.ts +68 -68
  117. package/src/commands/index.ts +30 -30
  118. package/src/commands/opacity.ts +46 -46
  119. package/src/commands/restoreConfig.ts +14 -14
  120. package/src/commands/saturation.ts +46 -46
  121. package/src/extension.ts +42 -42
  122. package/src/helpers/changeDetection.ts +105 -73
  123. package/src/helpers/customIcons.ts +8 -8
  124. package/src/helpers/fileConfig.ts +37 -37
  125. package/src/helpers/index.ts +100 -100
  126. package/src/helpers/objects.ts +58 -58
  127. package/src/helpers/types.ts +7 -7
  128. package/src/helpers/versioning.ts +73 -73
  129. package/src/i18n/index.ts +78 -78
  130. package/src/i18n/lang-de.ts +54 -54
  131. package/src/i18n/lang-en.ts +53 -53
  132. package/src/i18n/lang-es.ts +53 -53
  133. package/src/i18n/lang-fr.ts +53 -53
  134. package/src/i18n/lang-ja.ts +54 -54
  135. package/src/i18n/lang-nl.ts +54 -54
  136. package/src/i18n/lang-pl.ts +52 -52
  137. package/src/i18n/lang-pt-br.ts +53 -53
  138. package/src/i18n/lang-pt-pt.ts +53 -53
  139. package/src/i18n/lang-ru.ts +52 -52
  140. package/src/i18n/lang-uk.ts +54 -54
  141. package/src/i18n/lang-zh-cn.ts +52 -52
  142. package/src/i18n/lang-zh-tw.ts +52 -52
  143. package/src/icons/fileIcons.ts +2060 -2046
  144. package/src/icons/folderIcons.ts +773 -773
  145. package/src/icons/generator/constants.ts +29 -29
  146. package/src/icons/generator/fileGenerator.ts +216 -216
  147. package/src/icons/generator/folderGenerator.ts +340 -340
  148. package/src/icons/generator/iconOpacity.ts +111 -111
  149. package/src/icons/generator/iconSaturation.ts +140 -140
  150. package/src/icons/generator/index.ts +7 -7
  151. package/src/icons/generator/jsonGenerator.ts +187 -187
  152. package/src/icons/generator/languageGenerator.ts +127 -127
  153. package/src/icons/index.ts +4 -4
  154. package/src/icons/languageIcons.ts +136 -136
  155. package/src/messages/outdated.ts +33 -33
  156. package/src/messages/reload.ts +32 -32
  157. package/src/messages/start.ts +12 -12
  158. package/src/messages/update.ts +48 -48
  159. package/src/messages/welcome.ts +47 -47
  160. package/src/models/helpers/index.ts +1 -1
  161. package/src/models/helpers/themeStatus.ts +5 -5
  162. package/src/models/i18n/index.ts +1 -1
  163. package/src/models/i18n/translation.ts +50 -50
  164. package/src/models/iconConfiguration.ts +37 -37
  165. package/src/models/icons/defaultIcon.ts +16 -16
  166. package/src/models/icons/files/fileIcon.ts +49 -49
  167. package/src/models/icons/files/fileTypes.ts +14 -14
  168. package/src/models/icons/files/index.ts +2 -2
  169. package/src/models/icons/folders/folderIcon.ts +34 -34
  170. package/src/models/icons/folders/folderTheme.ts +23 -23
  171. package/src/models/icons/folders/index.ts +2 -2
  172. package/src/models/icons/iconJsonOptions.ts +23 -23
  173. package/src/models/icons/iconPack.ts +12 -12
  174. package/src/models/icons/index.ts +6 -6
  175. package/src/models/icons/languages/index.ts +1 -1
  176. package/src/models/icons/languages/languageIdentifier.ts +26 -26
  177. package/src/models/index.ts +4 -4
  178. package/src/models/scripts/contributors/contributor.ts +22 -22
  179. package/src/models/scripts/contributors/contributorsConfig.ts +10 -10
  180. package/src/scripts/contributors/contributors.css +24 -24
  181. package/src/scripts/contributors/index.ts +138 -138
  182. package/src/scripts/helpers/painter.ts +5 -5
  183. package/src/scripts/helpers/screenshots.ts +32 -32
  184. package/src/scripts/helpers/similarity.ts +47 -47
  185. package/src/scripts/helpers/titleCase.ts +7 -7
  186. package/src/scripts/icons/checks/checkIconAvailability.ts +215 -215
  187. package/src/scripts/icons/checks/checkIconConflicts.ts +154 -154
  188. package/src/scripts/icons/checks/checkIconUsage.ts +141 -141
  189. package/src/scripts/icons/checks/index.ts +7 -7
  190. package/src/scripts/icons/generateJson.ts +11 -11
  191. package/src/scripts/preview/index.ts +40 -40
  192. package/src/scripts/preview/preview.ts +165 -165
  193. package/src/scripts/preview/style.css +48 -48
  194. package/src/test/runTest.ts +26 -26
  195. package/src/test/spec/i18n/i18n.spec.ts +61 -61
  196. package/src/test/spec/icons/fileIcons.spec.ts +250 -250
  197. package/src/test/spec/icons/folderIcons.spec.ts +418 -418
  198. package/src/test/spec/icons/languageIcons.spec.ts +184 -184
  199. package/src/test/spec/index.ts +36 -36
  200. package/src/web/extension.ts +10 -10
  201. package/svgo.config.js +11 -11
  202. package/tsconfig.json +23 -23
@@ -1,215 +1,215 @@
1
- import * as fs from 'fs';
2
- import * as path from 'path';
3
- import {
4
- DefaultIcon,
5
- FileIcon,
6
- FolderIcon,
7
- FolderTheme,
8
- } from '../../../models/index';
9
- import * as painter from '../../helpers/painter';
10
- import { similarity } from '../../helpers/similarity';
11
- import {
12
- fileIcons,
13
- folderIcons,
14
- highContrastColorFileEnding,
15
- languageIcons,
16
- lightColorFileEnding,
17
- openedFolder,
18
- } from './../../../icons';
19
-
20
- /**
21
- * Defines the folder where all icon files are located.
22
- */
23
- const folderPath = path.join('icons');
24
-
25
- /**
26
- * Defines an array with all icons that can be found in the file system.
27
- */
28
- const availableIcons: Record<string, string> = {};
29
-
30
- /**
31
- * Save the misconfigured icons.
32
- */
33
- const wrongIconNames: Record<string, string[]> = {
34
- fileIcons: [],
35
- folderIcons: [],
36
- languageIcons: [],
37
- };
38
-
39
- /**
40
- * Get all icon file names from the file system.
41
- */
42
- const fsReadAllIconFiles = (
43
- err: NodeJS.ErrnoException | null,
44
- files: string[]
45
- ) => {
46
- if (err) {
47
- throw Error(err.message);
48
- }
49
-
50
- files.forEach((file) => {
51
- const fileName = file;
52
- const iconName = path.parse(file).name;
53
- availableIcons[iconName] = fileName;
54
- });
55
-
56
- // check icon configurations
57
- checkFileIcons();
58
- checkFolderIcons();
59
- checkLanguageIcons();
60
-
61
- // show error messages
62
- handleErrors();
63
- };
64
-
65
- // read from the file system
66
- export const check = () => fs.readdir(folderPath, fsReadAllIconFiles);
67
-
68
- /**
69
- * Check if the file icons from the configuration are available on the file system.
70
- */
71
- const checkFileIcons = () => {
72
- [...fileIcons.icons, fileIcons.defaultIcon].forEach((icon) => {
73
- isIconAvailable(icon, IconType.fileIcons, IconColor.default);
74
- isIconAvailable(icon, IconType.fileIcons, IconColor.light);
75
- isIconAvailable(icon, IconType.fileIcons, IconColor.highContrast);
76
- });
77
- };
78
-
79
- const isIconAvailable = (
80
- icon: FileIcon | FolderIcon | DefaultIcon,
81
- iconType: IconType,
82
- iconColor: IconColor,
83
- hasOpenedFolder?: boolean
84
- ) => {
85
- let iconName = `${icon.name}${hasOpenedFolder ? openedFolder : ''}`;
86
- if (icon.light && iconColor === IconColor.light) {
87
- iconName += lightColorFileEnding;
88
- }
89
- if (icon.highContrast && iconColor === IconColor.highContrast) {
90
- iconName += highContrastColorFileEnding;
91
- }
92
-
93
- if (
94
- !availableIcons[iconName] &&
95
- wrongIconNames[iconType].indexOf(iconName) === -1
96
- ) {
97
- wrongIconNames[iconType].push(iconName);
98
- }
99
- };
100
-
101
- /**
102
- * Check if the folder icons from the configuration are available on the file system.
103
- */
104
- const checkFolderIcons = () => {
105
- folderIcons
106
- .map((theme) => (theme.name === 'none' ? [] : getAllFolderIcons(theme)))
107
- .reduce((a, b) => a.concat(b))
108
- .forEach((icon) => {
109
- if (icon) {
110
- isIconAvailable(icon, IconType.folderIcons, IconColor.default);
111
- isIconAvailable(icon, IconType.folderIcons, IconColor.default, true);
112
- isIconAvailable(icon, IconType.folderIcons, IconColor.light);
113
- isIconAvailable(icon, IconType.folderIcons, IconColor.light, true);
114
- isIconAvailable(icon, IconType.folderIcons, IconColor.highContrast);
115
- isIconAvailable(
116
- icon,
117
- IconType.folderIcons,
118
- IconColor.highContrast,
119
- true
120
- );
121
- }
122
- });
123
- };
124
-
125
- const getAllFolderIcons = (theme: FolderTheme) => {
126
- const icons = theme.icons ? theme.icons : [];
127
- return [theme.defaultIcon, theme.rootFolder, ...icons].filter(
128
- (icon) => icon !== undefined
129
- ); // filter undefined root folder icons
130
- };
131
-
132
- /**
133
- * Check if the language icons from the configuration are available on the file system.
134
- */
135
- const checkLanguageIcons = () => {
136
- languageIcons.forEach((lang) => {
137
- const icon = lang.icon;
138
- isIconAvailable(icon, IconType.languageIcons, IconColor.default);
139
- isIconAvailable(icon, IconType.languageIcons, IconColor.light);
140
- isIconAvailable(icon, IconType.languageIcons, IconColor.highContrast);
141
- });
142
- };
143
-
144
- /**
145
- * Show error messages in the terminal.
146
- */
147
- const handleErrors = () => {
148
- const amountOfErrors =
149
- wrongIconNames.fileIcons.length +
150
- wrongIconNames.folderIcons.length +
151
- wrongIconNames.languageIcons.length;
152
- if (amountOfErrors > 0) {
153
- console.log(
154
- '> Material Icon Theme:',
155
- painter.red(`Found ${amountOfErrors} error(s) in the icon configuration!`)
156
- );
157
- } else {
158
- console.log(
159
- '> Material Icon Theme:',
160
- painter.green('Passed icon availability checks!')
161
- );
162
- }
163
- logIconInformation(wrongIconNames.fileIcons, 'File icons');
164
- logIconInformation(wrongIconNames.folderIcons, 'Folder icons');
165
- logIconInformation(wrongIconNames.languageIcons, 'Language icons');
166
-
167
- if (amountOfErrors > 0) {
168
- throw new Error(
169
- 'Found some wrong file definitions in the icon configuration.'
170
- );
171
- }
172
- };
173
-
174
- const logIconInformation = (wrongIcons: string[], title: string) => {
175
- if (wrongIcons.length === 0) return;
176
- console.log(`\n${title}:\n--------------------------------`);
177
- wrongIcons.forEach((icon) => {
178
- const suggestion = Object.keys(availableIcons).find((i) => {
179
- return similarity(icon, i) > 0.75;
180
- });
181
- const suggestionString = suggestion
182
- ? ` (Did you mean ${painter.green(suggestion)}?)`
183
- : '';
184
- const isWrongLightVersion = icon.endsWith(lightColorFileEnding);
185
- const isWrongLightVersionString = isWrongLightVersion
186
- ? ` (There is no light icon for ${painter.green(
187
- icon.slice(0, -6)
188
- )}! Set the light option to false!)`
189
- : '';
190
- const isWrongHighContrastVersion = icon.endsWith(
191
- highContrastColorFileEnding
192
- );
193
- const isWrongHighContrastVersionString = isWrongHighContrastVersion
194
- ? ` (There is no high contrast icon for ${painter.green(
195
- icon.slice(0, -13)
196
- )}! Set the highContrast option to false!)`
197
- : '';
198
- console.log(
199
- painter.red(`Icon not found: ${icon}.svg`) +
200
- `${suggestionString}${isWrongLightVersionString}${isWrongHighContrastVersionString}`
201
- );
202
- });
203
- };
204
-
205
- enum IconType {
206
- fileIcons = 'fileIcons',
207
- folderIcons = 'folderIcons',
208
- languageIcons = 'languageIcons',
209
- }
210
-
211
- enum IconColor {
212
- default = 'default',
213
- light = 'light',
214
- highContrast = 'highContrast',
215
- }
1
+ import * as fs from 'fs';
2
+ import * as path from 'path';
3
+ import {
4
+ DefaultIcon,
5
+ FileIcon,
6
+ FolderIcon,
7
+ FolderTheme,
8
+ } from '../../../models/index';
9
+ import * as painter from '../../helpers/painter';
10
+ import { similarity } from '../../helpers/similarity';
11
+ import {
12
+ fileIcons,
13
+ folderIcons,
14
+ highContrastColorFileEnding,
15
+ languageIcons,
16
+ lightColorFileEnding,
17
+ openedFolder,
18
+ } from './../../../icons';
19
+
20
+ /**
21
+ * Defines the folder where all icon files are located.
22
+ */
23
+ const folderPath = path.join('icons');
24
+
25
+ /**
26
+ * Defines an array with all icons that can be found in the file system.
27
+ */
28
+ const availableIcons: Record<string, string> = {};
29
+
30
+ /**
31
+ * Save the misconfigured icons.
32
+ */
33
+ const wrongIconNames: Record<string, string[]> = {
34
+ fileIcons: [],
35
+ folderIcons: [],
36
+ languageIcons: [],
37
+ };
38
+
39
+ /**
40
+ * Get all icon file names from the file system.
41
+ */
42
+ const fsReadAllIconFiles = (
43
+ err: NodeJS.ErrnoException | null,
44
+ files: string[]
45
+ ) => {
46
+ if (err) {
47
+ throw Error(err.message);
48
+ }
49
+
50
+ files.forEach((file) => {
51
+ const fileName = file;
52
+ const iconName = path.parse(file).name;
53
+ availableIcons[iconName] = fileName;
54
+ });
55
+
56
+ // check icon configurations
57
+ checkFileIcons();
58
+ checkFolderIcons();
59
+ checkLanguageIcons();
60
+
61
+ // show error messages
62
+ handleErrors();
63
+ };
64
+
65
+ // read from the file system
66
+ export const check = () => fs.readdir(folderPath, fsReadAllIconFiles);
67
+
68
+ /**
69
+ * Check if the file icons from the configuration are available on the file system.
70
+ */
71
+ const checkFileIcons = () => {
72
+ [...fileIcons.icons, fileIcons.defaultIcon].forEach((icon) => {
73
+ isIconAvailable(icon, IconType.fileIcons, IconColor.default);
74
+ isIconAvailable(icon, IconType.fileIcons, IconColor.light);
75
+ isIconAvailable(icon, IconType.fileIcons, IconColor.highContrast);
76
+ });
77
+ };
78
+
79
+ const isIconAvailable = (
80
+ icon: FileIcon | FolderIcon | DefaultIcon,
81
+ iconType: IconType,
82
+ iconColor: IconColor,
83
+ hasOpenedFolder?: boolean
84
+ ) => {
85
+ let iconName = `${icon.name}${hasOpenedFolder ? openedFolder : ''}`;
86
+ if (icon.light && iconColor === IconColor.light) {
87
+ iconName += lightColorFileEnding;
88
+ }
89
+ if (icon.highContrast && iconColor === IconColor.highContrast) {
90
+ iconName += highContrastColorFileEnding;
91
+ }
92
+
93
+ if (
94
+ !availableIcons[iconName] &&
95
+ wrongIconNames[iconType].indexOf(iconName) === -1
96
+ ) {
97
+ wrongIconNames[iconType].push(iconName);
98
+ }
99
+ };
100
+
101
+ /**
102
+ * Check if the folder icons from the configuration are available on the file system.
103
+ */
104
+ const checkFolderIcons = () => {
105
+ folderIcons
106
+ .map((theme) => (theme.name === 'none' ? [] : getAllFolderIcons(theme)))
107
+ .reduce((a, b) => a.concat(b))
108
+ .forEach((icon) => {
109
+ if (icon) {
110
+ isIconAvailable(icon, IconType.folderIcons, IconColor.default);
111
+ isIconAvailable(icon, IconType.folderIcons, IconColor.default, true);
112
+ isIconAvailable(icon, IconType.folderIcons, IconColor.light);
113
+ isIconAvailable(icon, IconType.folderIcons, IconColor.light, true);
114
+ isIconAvailable(icon, IconType.folderIcons, IconColor.highContrast);
115
+ isIconAvailable(
116
+ icon,
117
+ IconType.folderIcons,
118
+ IconColor.highContrast,
119
+ true
120
+ );
121
+ }
122
+ });
123
+ };
124
+
125
+ const getAllFolderIcons = (theme: FolderTheme) => {
126
+ const icons = theme.icons ? theme.icons : [];
127
+ return [theme.defaultIcon, theme.rootFolder, ...icons].filter(
128
+ (icon) => icon !== undefined
129
+ ); // filter undefined root folder icons
130
+ };
131
+
132
+ /**
133
+ * Check if the language icons from the configuration are available on the file system.
134
+ */
135
+ const checkLanguageIcons = () => {
136
+ languageIcons.forEach((lang) => {
137
+ const icon = lang.icon;
138
+ isIconAvailable(icon, IconType.languageIcons, IconColor.default);
139
+ isIconAvailable(icon, IconType.languageIcons, IconColor.light);
140
+ isIconAvailable(icon, IconType.languageIcons, IconColor.highContrast);
141
+ });
142
+ };
143
+
144
+ /**
145
+ * Show error messages in the terminal.
146
+ */
147
+ const handleErrors = () => {
148
+ const amountOfErrors =
149
+ wrongIconNames.fileIcons.length +
150
+ wrongIconNames.folderIcons.length +
151
+ wrongIconNames.languageIcons.length;
152
+ if (amountOfErrors > 0) {
153
+ console.log(
154
+ '> Material Icon Theme:',
155
+ painter.red(`Found ${amountOfErrors} error(s) in the icon configuration!`)
156
+ );
157
+ } else {
158
+ console.log(
159
+ '> Material Icon Theme:',
160
+ painter.green('Passed icon availability checks!')
161
+ );
162
+ }
163
+ logIconInformation(wrongIconNames.fileIcons, 'File icons');
164
+ logIconInformation(wrongIconNames.folderIcons, 'Folder icons');
165
+ logIconInformation(wrongIconNames.languageIcons, 'Language icons');
166
+
167
+ if (amountOfErrors > 0) {
168
+ throw new Error(
169
+ 'Found some wrong file definitions in the icon configuration.'
170
+ );
171
+ }
172
+ };
173
+
174
+ const logIconInformation = (wrongIcons: string[], title: string) => {
175
+ if (wrongIcons.length === 0) return;
176
+ console.log(`\n${title}:\n--------------------------------`);
177
+ wrongIcons.forEach((icon) => {
178
+ const suggestion = Object.keys(availableIcons).find((i) => {
179
+ return similarity(icon, i) > 0.75;
180
+ });
181
+ const suggestionString = suggestion
182
+ ? ` (Did you mean ${painter.green(suggestion)}?)`
183
+ : '';
184
+ const isWrongLightVersion = icon.endsWith(lightColorFileEnding);
185
+ const isWrongLightVersionString = isWrongLightVersion
186
+ ? ` (There is no light icon for ${painter.green(
187
+ icon.slice(0, -6)
188
+ )}! Set the light option to false!)`
189
+ : '';
190
+ const isWrongHighContrastVersion = icon.endsWith(
191
+ highContrastColorFileEnding
192
+ );
193
+ const isWrongHighContrastVersionString = isWrongHighContrastVersion
194
+ ? ` (There is no high contrast icon for ${painter.green(
195
+ icon.slice(0, -13)
196
+ )}! Set the highContrast option to false!)`
197
+ : '';
198
+ console.log(
199
+ painter.red(`Icon not found: ${icon}.svg`) +
200
+ `${suggestionString}${isWrongLightVersionString}${isWrongHighContrastVersionString}`
201
+ );
202
+ });
203
+ };
204
+
205
+ enum IconType {
206
+ fileIcons = 'fileIcons',
207
+ folderIcons = 'folderIcons',
208
+ languageIcons = 'languageIcons',
209
+ }
210
+
211
+ enum IconColor {
212
+ default = 'default',
213
+ light = 'light',
214
+ highContrast = 'highContrast',
215
+ }