material-icon-theme 4.18.0 → 4.20.0

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 (208) 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 +1213 -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-gitlab-open.svg +2 -1
  40. package/icons/folder-gitlab.svg +2 -1
  41. package/icons/folder-java-open.svg +2 -2
  42. package/icons/folder-java.svg +2 -2
  43. package/icons/folder-next-open.svg +2 -2
  44. package/icons/folder-next.svg +2 -2
  45. package/icons/folder-nuxt-open.svg +2 -2
  46. package/icons/folder-nuxt.svg +2 -2
  47. package/icons/folder-queue-open.svg +2 -2
  48. package/icons/folder-queue.svg +2 -2
  49. package/icons/folder-resolver-open.svg +2 -2
  50. package/icons/folder-resolver.svg +2 -2
  51. package/icons/folder-serverless-open.svg +5 -5
  52. package/icons/folder-serverless.svg +5 -5
  53. package/icons/folder-shader-open.svg +7 -7
  54. package/icons/folder-shader.svg +6 -6
  55. package/icons/folder-target-open.svg +2 -2
  56. package/icons/folder-target.svg +2 -2
  57. package/icons/folder-unity-open.svg +2 -2
  58. package/icons/folder-unity.svg +2 -2
  59. package/icons/folder-vercel-open.svg +4 -4
  60. package/icons/folder-vercel.svg +4 -4
  61. package/icons/folder-verdaccio-open.svg +8 -8
  62. package/icons/folder-verdaccio.svg +8 -8
  63. package/icons/gitlab.svg +1 -1
  64. package/icons/gleam.svg +4 -4
  65. package/icons/gridsome.svg +4 -4
  66. package/icons/hardhat.svg +3 -3
  67. package/icons/lighthouse.svg +2 -2
  68. package/icons/mdsvex.svg +5 -0
  69. package/icons/ndst.svg +7 -7
  70. package/icons/next.svg +3 -3
  71. package/icons/next_light.svg +2 -2
  72. package/icons/nuxt.svg +5 -5
  73. package/icons/odin.svg +6 -6
  74. package/icons/otne.svg +16 -16
  75. package/icons/parcel.svg +4 -4
  76. package/icons/playwright.svg +7 -7
  77. package/icons/plop.svg +4 -4
  78. package/icons/pnpm.svg +9 -9
  79. package/icons/pnpm_light.svg +7 -7
  80. package/icons/poetry.svg +1 -1
  81. package/icons/processing.svg +10 -10
  82. package/icons/remix.svg +4 -4
  83. package/icons/remix_light.svg +4 -4
  84. package/icons/rescript-interface.svg +5 -5
  85. package/icons/rome.svg +5 -5
  86. package/icons/serverless.svg +4 -4
  87. package/icons/shader.svg +4 -4
  88. package/icons/siyuan.svg +9 -9
  89. package/icons/steadybit.svg +1 -1
  90. package/icons/svgr.svg +4 -4
  91. package/icons/tauri.svg +9 -9
  92. package/icons/template.svg +4 -4
  93. package/icons/tobi.svg +4 -4
  94. package/icons/tobimake.svg +14 -14
  95. package/icons/tree.svg +2 -0
  96. package/icons/turborepo.svg +12 -12
  97. package/icons/turborepo_light.svg +12 -12
  98. package/icons/verdaccio.svg +5 -5
  99. package/images/contributors.png +0 -0
  100. package/images/fileIcons.png +0 -0
  101. package/images/folderIcons.png +0 -0
  102. package/logo.svg +21 -21
  103. package/material-colors.yml +257 -257
  104. package/package.json +267 -264
  105. package/package.nls.de.json +35 -35
  106. package/package.nls.es.json +32 -32
  107. package/package.nls.fr.json +32 -32
  108. package/package.nls.ja.json +35 -35
  109. package/package.nls.json +35 -35
  110. package/package.nls.nl.json +35 -35
  111. package/package.nls.pl.json +35 -35
  112. package/package.nls.pt-BR.json +32 -32
  113. package/package.nls.pt-PT.json +32 -32
  114. package/package.nls.ru.json +32 -32
  115. package/package.nls.zh-CN.json +32 -32
  116. package/package.nls.zh-TW.json +32 -32
  117. package/src/commands/activate.ts +26 -26
  118. package/src/commands/explorerArrows.ts +55 -55
  119. package/src/commands/folderColor.ts +96 -96
  120. package/src/commands/folders.ts +55 -55
  121. package/src/commands/grayscale.ts +55 -55
  122. package/src/commands/iconPacks.ts +68 -68
  123. package/src/commands/index.ts +30 -30
  124. package/src/commands/opacity.ts +46 -46
  125. package/src/commands/restoreConfig.ts +14 -14
  126. package/src/commands/saturation.ts +46 -46
  127. package/src/extension.ts +42 -42
  128. package/src/helpers/changeDetection.ts +109 -73
  129. package/src/helpers/customIcons.ts +8 -8
  130. package/src/helpers/fileConfig.ts +37 -37
  131. package/src/helpers/index.ts +100 -100
  132. package/src/helpers/objects.ts +58 -58
  133. package/src/helpers/types.ts +7 -7
  134. package/src/helpers/versioning.ts +73 -73
  135. package/src/i18n/index.ts +78 -78
  136. package/src/i18n/lang-de.ts +54 -54
  137. package/src/i18n/lang-en.ts +53 -53
  138. package/src/i18n/lang-es.ts +53 -53
  139. package/src/i18n/lang-fr.ts +53 -53
  140. package/src/i18n/lang-ja.ts +54 -54
  141. package/src/i18n/lang-nl.ts +54 -54
  142. package/src/i18n/lang-pl.ts +52 -52
  143. package/src/i18n/lang-pt-br.ts +53 -53
  144. package/src/i18n/lang-pt-pt.ts +53 -53
  145. package/src/i18n/lang-ru.ts +52 -52
  146. package/src/i18n/lang-uk.ts +54 -54
  147. package/src/i18n/lang-zh-cn.ts +52 -52
  148. package/src/i18n/lang-zh-tw.ts +52 -52
  149. package/src/icons/fileIcons.ts +2095 -2046
  150. package/src/icons/folderIcons.ts +781 -773
  151. package/src/icons/generator/constants.ts +29 -29
  152. package/src/icons/generator/fileGenerator.ts +216 -216
  153. package/src/icons/generator/folderGenerator.ts +340 -340
  154. package/src/icons/generator/iconOpacity.ts +111 -111
  155. package/src/icons/generator/iconSaturation.ts +140 -140
  156. package/src/icons/generator/index.ts +7 -7
  157. package/src/icons/generator/jsonGenerator.ts +187 -187
  158. package/src/icons/generator/languageGenerator.ts +127 -127
  159. package/src/icons/index.ts +4 -4
  160. package/src/icons/languageIcons.ts +137 -136
  161. package/src/messages/outdated.ts +33 -33
  162. package/src/messages/reload.ts +32 -32
  163. package/src/messages/start.ts +12 -12
  164. package/src/messages/update.ts +48 -48
  165. package/src/messages/welcome.ts +47 -47
  166. package/src/models/helpers/index.ts +1 -1
  167. package/src/models/helpers/themeStatus.ts +5 -5
  168. package/src/models/i18n/index.ts +1 -1
  169. package/src/models/i18n/translation.ts +50 -50
  170. package/src/models/iconConfiguration.ts +37 -37
  171. package/src/models/icons/defaultIcon.ts +16 -16
  172. package/src/models/icons/files/fileIcon.ts +49 -49
  173. package/src/models/icons/files/fileTypes.ts +14 -14
  174. package/src/models/icons/files/index.ts +2 -2
  175. package/src/models/icons/folders/folderIcon.ts +34 -34
  176. package/src/models/icons/folders/folderTheme.ts +23 -23
  177. package/src/models/icons/folders/index.ts +2 -2
  178. package/src/models/icons/iconJsonOptions.ts +23 -23
  179. package/src/models/icons/iconPack.ts +12 -12
  180. package/src/models/icons/index.ts +6 -6
  181. package/src/models/icons/languages/index.ts +1 -1
  182. package/src/models/icons/languages/languageIdentifier.ts +26 -26
  183. package/src/models/index.ts +4 -4
  184. package/src/models/scripts/contributors/contributor.ts +22 -22
  185. package/src/models/scripts/contributors/contributorsConfig.ts +10 -10
  186. package/src/scripts/contributors/contributors.css +24 -24
  187. package/src/scripts/contributors/index.ts +138 -138
  188. package/src/scripts/helpers/painter.ts +5 -5
  189. package/src/scripts/helpers/screenshots.ts +32 -32
  190. package/src/scripts/helpers/similarity.ts +47 -47
  191. package/src/scripts/helpers/titleCase.ts +7 -7
  192. package/src/scripts/icons/checks/checkIconAvailability.ts +215 -215
  193. package/src/scripts/icons/checks/checkIconConflicts.ts +154 -154
  194. package/src/scripts/icons/checks/checkIconUsage.ts +141 -141
  195. package/src/scripts/icons/checks/index.ts +7 -7
  196. package/src/scripts/icons/generateJson.ts +11 -11
  197. package/src/scripts/preview/index.ts +40 -40
  198. package/src/scripts/preview/preview.ts +165 -165
  199. package/src/scripts/preview/style.css +48 -48
  200. package/src/test/runTest.ts +26 -26
  201. package/src/test/spec/i18n/i18n.spec.ts +61 -61
  202. package/src/test/spec/icons/fileIcons.spec.ts +250 -250
  203. package/src/test/spec/icons/folderIcons.spec.ts +418 -418
  204. package/src/test/spec/icons/languageIcons.spec.ts +184 -184
  205. package/src/test/spec/index.ts +36 -36
  206. package/src/web/extension.ts +10 -10
  207. package/svgo.config.js +11 -11
  208. package/tsconfig.json +23 -23
@@ -1,29 +1,29 @@
1
- /**
2
- * Path where the icons are located.
3
- */
4
- export const iconFolderPath: string = './../icons/';
5
-
6
- /**
7
- * File name of the JSON file that will be generated to the out folder.
8
- */
9
- export const iconJsonName: string = 'material-icons.json';
10
-
11
- /**
12
- * File ending for opened folders.
13
- */
14
- export const openedFolder: string = '-open';
15
-
16
- /**
17
- * File ending for light icons.
18
- */
19
- export const lightColorFileEnding: string = '_light';
20
-
21
- /**
22
- * File ending for high contrast icons.
23
- */
24
- export const highContrastColorFileEnding: string = '_highContrast';
25
-
26
- /**
27
- * Pattern to match wildcards for custom file icon mappings.
28
- */
29
- export const wildcardPattern = new RegExp(/^\*{1,2}\./);
1
+ /**
2
+ * Path where the icons are located.
3
+ */
4
+ export const iconFolderPath: string = './../icons/';
5
+
6
+ /**
7
+ * File name of the JSON file that will be generated to the out folder.
8
+ */
9
+ export const iconJsonName: string = 'material-icons.json';
10
+
11
+ /**
12
+ * File ending for opened folders.
13
+ */
14
+ export const openedFolder: string = '-open';
15
+
16
+ /**
17
+ * File ending for light icons.
18
+ */
19
+ export const lightColorFileEnding: string = '_light';
20
+
21
+ /**
22
+ * File ending for high contrast icons.
23
+ */
24
+ export const highContrastColorFileEnding: string = '_highContrast';
25
+
26
+ /**
27
+ * Pattern to match wildcards for custom file icon mappings.
28
+ */
29
+ export const wildcardPattern = new RegExp(/^\*{1,2}\./);
@@ -1,216 +1,216 @@
1
- import merge from 'lodash.merge';
2
- import { getFileConfigHash } from '../../helpers/fileConfig';
3
- import {
4
- FileIcon,
5
- FileIcons,
6
- IconAssociations,
7
- IconConfiguration,
8
- IconJsonOptions,
9
- } from '../../models/index';
10
- import {
11
- highContrastColorFileEnding,
12
- iconFolderPath,
13
- lightColorFileEnding,
14
- wildcardPattern,
15
- } from './constants';
16
-
17
- /**
18
- * Get all file icons that can be used in this theme.
19
- */
20
- export const loadFileIconDefinitions = (
21
- fileIcons: FileIcons,
22
- config: IconConfiguration,
23
- options: IconJsonOptions
24
- ): IconConfiguration => {
25
- config = merge({}, config);
26
- const enabledIcons = disableIconsByPack(
27
- fileIcons,
28
- options.activeIconPack ?? ''
29
- );
30
- const customIcons = getCustomIcons(options.files?.associations);
31
- const allFileIcons = [...enabledIcons, ...customIcons];
32
-
33
- allFileIcons.forEach((icon) => {
34
- if (icon.disabled) return;
35
- config = merge({}, config, setIconDefinition(config, icon.name));
36
-
37
- if (icon.light) {
38
- config = merge(
39
- {},
40
- config,
41
- setIconDefinition(config, icon.name, lightColorFileEnding)
42
- );
43
- }
44
- if (icon.highContrast) {
45
- config = merge(
46
- {},
47
- config,
48
- setIconDefinition(config, icon.name, highContrastColorFileEnding)
49
- );
50
- }
51
-
52
- if (icon.fileExtensions) {
53
- config = merge(
54
- {},
55
- config,
56
- mapSpecificFileIcons(icon, FileMappingType.FileExtensions)
57
- );
58
- }
59
- if (icon.fileNames) {
60
- config = merge(
61
- {},
62
- config,
63
- mapSpecificFileIcons(
64
- icon,
65
- FileMappingType.FileNames,
66
- options.files?.associations
67
- )
68
- );
69
- }
70
- });
71
-
72
- // set default file icon
73
- config = merge(
74
- {},
75
- config,
76
- setIconDefinition(config, fileIcons.defaultIcon.name)
77
- );
78
- config.file = fileIcons.defaultIcon.name;
79
-
80
- if (fileIcons.defaultIcon.light && config.light) {
81
- config = merge(
82
- {},
83
- config,
84
- setIconDefinition(
85
- config,
86
- fileIcons.defaultIcon.name,
87
- lightColorFileEnding
88
- )
89
- );
90
- if (config.light) {
91
- config.light.file = fileIcons.defaultIcon.name + lightColorFileEnding;
92
- }
93
- }
94
-
95
- if (fileIcons.defaultIcon.highContrast) {
96
- config = merge(
97
- {},
98
- config,
99
- setIconDefinition(
100
- config,
101
- fileIcons.defaultIcon.name,
102
- highContrastColorFileEnding
103
- )
104
- );
105
- if (config.highContrast) {
106
- config.highContrast.file =
107
- fileIcons.defaultIcon.name + highContrastColorFileEnding;
108
- }
109
- }
110
-
111
- return config;
112
- };
113
-
114
- /**
115
- * Map the file extensions and the filenames to the related icons.
116
- */
117
- const mapSpecificFileIcons = (
118
- icon: FileIcon,
119
- mappingType: FileMappingType,
120
- customFileAssociation: IconAssociations = {}
121
- ) => {
122
- const config = new IconConfiguration();
123
- const iconMappingType = icon[mappingType as keyof FileIcon] as string[];
124
- if (iconMappingType === undefined) {
125
- return;
126
- }
127
- iconMappingType.forEach((name) => {
128
- // if the custom file extension should also overwrite the file names
129
- const shouldOverwriteFileNames = Object.keys(customFileAssociation).some(
130
- (key) => {
131
- // overwrite is enabled if there are two asterisks in the wildcard
132
- if (!/^\*{2}\./.test(key)) return false;
133
- const fileExtension = key.replace(wildcardPattern, '.');
134
-
135
- // check if the file name contains the particular file extension
136
- // (e.g. extension ".md" in "Readme.md" -> then overwrite it with the *.md icon)
137
- return name.toLowerCase().indexOf(fileExtension.toLowerCase()) !== -1;
138
- }
139
- );
140
-
141
- // if overwrite is enabled then do not continue to set the icons for file names containing the file extension
142
- const configMappingType = config[mappingType];
143
- const configLightMappingType = config.light?.[mappingType];
144
- const configHighContrastMappingType = config.highContrast?.[mappingType];
145
-
146
- if (
147
- shouldOverwriteFileNames ||
148
- !configMappingType ||
149
- !configLightMappingType ||
150
- !configHighContrastMappingType
151
- )
152
- return;
153
-
154
- configMappingType[name] = icon.name;
155
- if (icon.light) {
156
- configLightMappingType[name] = `${icon.name}${lightColorFileEnding}`;
157
- }
158
- if (icon.highContrast) {
159
- configHighContrastMappingType[
160
- name
161
- ] = `${icon.name}${highContrastColorFileEnding}`;
162
- }
163
- });
164
- return config;
165
- };
166
-
167
- /**
168
- * Disable all file icons that are in a pack which is disabled.
169
- */
170
- const disableIconsByPack = (
171
- fileIcons: FileIcons,
172
- activatedIconPack: string
173
- ): FileIcon[] => {
174
- return fileIcons.icons.filter((icon) => {
175
- return !icon.enabledFor
176
- ? true
177
- : icon.enabledFor.some((p) => p === activatedIconPack);
178
- });
179
- };
180
-
181
- const setIconDefinition = (
182
- config: IconConfiguration,
183
- iconName: string,
184
- appendix: string = ''
185
- ) => {
186
- const obj: Partial<IconConfiguration> = { iconDefinitions: {} };
187
- if (config.options) {
188
- const fileConfigHash = getFileConfigHash(config.options);
189
- obj.iconDefinitions![`${iconName}${appendix}`] = {
190
- iconPath: `${iconFolderPath}${iconName}${appendix}${fileConfigHash}.svg`,
191
- };
192
- }
193
- return obj;
194
- };
195
-
196
- const getCustomIcons = (fileAssociations: IconAssociations | undefined) => {
197
- if (!fileAssociations) return [];
198
-
199
- const icons: FileIcon[] = Object.keys(fileAssociations).map((fa) => {
200
- const icon: Partial<FileIcon> = {
201
- name: fileAssociations[fa].toLowerCase(),
202
- };
203
- if (wildcardPattern.test(fa)) {
204
- icon.fileExtensions = [fa.toLowerCase().replace(wildcardPattern, '')];
205
- } else {
206
- icon.fileNames = [fa.toLowerCase()];
207
- }
208
- return icon as FileIcon;
209
- });
210
- return icons;
211
- };
212
-
213
- const enum FileMappingType {
214
- FileExtensions = 'fileExtensions',
215
- FileNames = 'fileNames',
216
- }
1
+ import merge from 'lodash.merge';
2
+ import { getFileConfigHash } from '../../helpers/fileConfig';
3
+ import {
4
+ FileIcon,
5
+ FileIcons,
6
+ IconAssociations,
7
+ IconConfiguration,
8
+ IconJsonOptions,
9
+ } from '../../models/index';
10
+ import {
11
+ highContrastColorFileEnding,
12
+ iconFolderPath,
13
+ lightColorFileEnding,
14
+ wildcardPattern,
15
+ } from './constants';
16
+
17
+ /**
18
+ * Get all file icons that can be used in this theme.
19
+ */
20
+ export const loadFileIconDefinitions = (
21
+ fileIcons: FileIcons,
22
+ config: IconConfiguration,
23
+ options: IconJsonOptions
24
+ ): IconConfiguration => {
25
+ config = merge({}, config);
26
+ const enabledIcons = disableIconsByPack(
27
+ fileIcons,
28
+ options.activeIconPack ?? ''
29
+ );
30
+ const customIcons = getCustomIcons(options.files?.associations);
31
+ const allFileIcons = [...enabledIcons, ...customIcons];
32
+
33
+ allFileIcons.forEach((icon) => {
34
+ if (icon.disabled) return;
35
+ config = merge({}, config, setIconDefinition(config, icon.name));
36
+
37
+ if (icon.light) {
38
+ config = merge(
39
+ {},
40
+ config,
41
+ setIconDefinition(config, icon.name, lightColorFileEnding)
42
+ );
43
+ }
44
+ if (icon.highContrast) {
45
+ config = merge(
46
+ {},
47
+ config,
48
+ setIconDefinition(config, icon.name, highContrastColorFileEnding)
49
+ );
50
+ }
51
+
52
+ if (icon.fileExtensions) {
53
+ config = merge(
54
+ {},
55
+ config,
56
+ mapSpecificFileIcons(icon, FileMappingType.FileExtensions)
57
+ );
58
+ }
59
+ if (icon.fileNames) {
60
+ config = merge(
61
+ {},
62
+ config,
63
+ mapSpecificFileIcons(
64
+ icon,
65
+ FileMappingType.FileNames,
66
+ options.files?.associations
67
+ )
68
+ );
69
+ }
70
+ });
71
+
72
+ // set default file icon
73
+ config = merge(
74
+ {},
75
+ config,
76
+ setIconDefinition(config, fileIcons.defaultIcon.name)
77
+ );
78
+ config.file = fileIcons.defaultIcon.name;
79
+
80
+ if (fileIcons.defaultIcon.light && config.light) {
81
+ config = merge(
82
+ {},
83
+ config,
84
+ setIconDefinition(
85
+ config,
86
+ fileIcons.defaultIcon.name,
87
+ lightColorFileEnding
88
+ )
89
+ );
90
+ if (config.light) {
91
+ config.light.file = fileIcons.defaultIcon.name + lightColorFileEnding;
92
+ }
93
+ }
94
+
95
+ if (fileIcons.defaultIcon.highContrast) {
96
+ config = merge(
97
+ {},
98
+ config,
99
+ setIconDefinition(
100
+ config,
101
+ fileIcons.defaultIcon.name,
102
+ highContrastColorFileEnding
103
+ )
104
+ );
105
+ if (config.highContrast) {
106
+ config.highContrast.file =
107
+ fileIcons.defaultIcon.name + highContrastColorFileEnding;
108
+ }
109
+ }
110
+
111
+ return config;
112
+ };
113
+
114
+ /**
115
+ * Map the file extensions and the filenames to the related icons.
116
+ */
117
+ const mapSpecificFileIcons = (
118
+ icon: FileIcon,
119
+ mappingType: FileMappingType,
120
+ customFileAssociation: IconAssociations = {}
121
+ ) => {
122
+ const config = new IconConfiguration();
123
+ const iconMappingType = icon[mappingType as keyof FileIcon] as string[];
124
+ if (iconMappingType === undefined) {
125
+ return;
126
+ }
127
+ iconMappingType.forEach((name) => {
128
+ // if the custom file extension should also overwrite the file names
129
+ const shouldOverwriteFileNames = Object.keys(customFileAssociation).some(
130
+ (key) => {
131
+ // overwrite is enabled if there are two asterisks in the wildcard
132
+ if (!/^\*{2}\./.test(key)) return false;
133
+ const fileExtension = key.replace(wildcardPattern, '.');
134
+
135
+ // check if the file name contains the particular file extension
136
+ // (e.g. extension ".md" in "Readme.md" -> then overwrite it with the *.md icon)
137
+ return name.toLowerCase().indexOf(fileExtension.toLowerCase()) !== -1;
138
+ }
139
+ );
140
+
141
+ // if overwrite is enabled then do not continue to set the icons for file names containing the file extension
142
+ const configMappingType = config[mappingType];
143
+ const configLightMappingType = config.light?.[mappingType];
144
+ const configHighContrastMappingType = config.highContrast?.[mappingType];
145
+
146
+ if (
147
+ shouldOverwriteFileNames ||
148
+ !configMappingType ||
149
+ !configLightMappingType ||
150
+ !configHighContrastMappingType
151
+ )
152
+ return;
153
+
154
+ configMappingType[name] = icon.name;
155
+ if (icon.light) {
156
+ configLightMappingType[name] = `${icon.name}${lightColorFileEnding}`;
157
+ }
158
+ if (icon.highContrast) {
159
+ configHighContrastMappingType[
160
+ name
161
+ ] = `${icon.name}${highContrastColorFileEnding}`;
162
+ }
163
+ });
164
+ return config;
165
+ };
166
+
167
+ /**
168
+ * Disable all file icons that are in a pack which is disabled.
169
+ */
170
+ const disableIconsByPack = (
171
+ fileIcons: FileIcons,
172
+ activatedIconPack: string
173
+ ): FileIcon[] => {
174
+ return fileIcons.icons.filter((icon) => {
175
+ return !icon.enabledFor
176
+ ? true
177
+ : icon.enabledFor.some((p) => p === activatedIconPack);
178
+ });
179
+ };
180
+
181
+ const setIconDefinition = (
182
+ config: IconConfiguration,
183
+ iconName: string,
184
+ appendix: string = ''
185
+ ) => {
186
+ const obj: Partial<IconConfiguration> = { iconDefinitions: {} };
187
+ if (config.options) {
188
+ const fileConfigHash = getFileConfigHash(config.options);
189
+ obj.iconDefinitions![`${iconName}${appendix}`] = {
190
+ iconPath: `${iconFolderPath}${iconName}${appendix}${fileConfigHash}.svg`,
191
+ };
192
+ }
193
+ return obj;
194
+ };
195
+
196
+ const getCustomIcons = (fileAssociations: IconAssociations | undefined) => {
197
+ if (!fileAssociations) return [];
198
+
199
+ const icons: FileIcon[] = Object.keys(fileAssociations).map((fa) => {
200
+ const icon: Partial<FileIcon> = {
201
+ name: fileAssociations[fa].toLowerCase(),
202
+ };
203
+ if (wildcardPattern.test(fa)) {
204
+ icon.fileExtensions = [fa.toLowerCase().replace(wildcardPattern, '')];
205
+ } else {
206
+ icon.fileNames = [fa.toLowerCase()];
207
+ }
208
+ return icon as FileIcon;
209
+ });
210
+ return icons;
211
+ };
212
+
213
+ const enum FileMappingType {
214
+ FileExtensions = 'fileExtensions',
215
+ FileNames = 'fileNames',
216
+ }