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
package/src/extension.ts CHANGED
@@ -1,42 +1,42 @@
1
- 'use strict';
2
-
3
- import * as vscode from 'vscode';
4
- import * as commands from './commands';
5
- import { detectConfigChanges } from './helpers/changeDetection';
6
- import { checkThemeStatus, versionKey } from './helpers/versioning';
7
- import * as i18n from './i18n';
8
- import { showStartMessages } from './messages/start';
9
-
10
- /**
11
- * This method is called when the extension is activated.
12
- * It initializes the core functionality of the extension.
13
- */
14
- export const activate = async (context: vscode.ExtensionContext) => {
15
- try {
16
- await i18n.initTranslations();
17
- context.globalState.setKeysForSync([versionKey]);
18
- const status = await checkThemeStatus(context.globalState);
19
- showStartMessages(status);
20
-
21
- // Subscribe to the extension commands
22
- context.subscriptions.push(...commands.registered);
23
-
24
- // Initially trigger the config change detection
25
- detectConfigChanges();
26
-
27
- // Observe changes in the config
28
- vscode.workspace.onDidChangeConfiguration(detectConfigChanges);
29
-
30
- // Observe if the window got focused to trigger config changes
31
- vscode.window.onDidChangeWindowState((state) => {
32
- if (state.focused) {
33
- detectConfigChanges();
34
- }
35
- });
36
- } catch (error) {
37
- console.error(error);
38
- }
39
- };
40
-
41
- /** This method is called when the extension is deactivated */
42
- export const deactivate = () => {};
1
+ 'use strict';
2
+
3
+ import * as vscode from 'vscode';
4
+ import * as commands from './commands';
5
+ import { detectConfigChanges } from './helpers/changeDetection';
6
+ import { checkThemeStatus, versionKey } from './helpers/versioning';
7
+ import * as i18n from './i18n';
8
+ import { showStartMessages } from './messages/start';
9
+
10
+ /**
11
+ * This method is called when the extension is activated.
12
+ * It initializes the core functionality of the extension.
13
+ */
14
+ export const activate = async (context: vscode.ExtensionContext) => {
15
+ try {
16
+ await i18n.initTranslations();
17
+ context.globalState.setKeysForSync([versionKey]);
18
+ const status = await checkThemeStatus(context.globalState);
19
+ showStartMessages(status);
20
+
21
+ // Subscribe to the extension commands
22
+ context.subscriptions.push(...commands.registered);
23
+
24
+ // Initially trigger the config change detection
25
+ detectConfigChanges();
26
+
27
+ // Observe changes in the config
28
+ vscode.workspace.onDidChangeConfiguration(detectConfigChanges);
29
+
30
+ // Observe if the window got focused to trigger config changes
31
+ vscode.window.onDidChangeWindowState((state) => {
32
+ if (state.focused) {
33
+ detectConfigChanges();
34
+ }
35
+ });
36
+ } catch (error) {
37
+ console.error(error);
38
+ }
39
+ };
40
+
41
+ /** This method is called when the extension is deactivated */
42
+ export const deactivate = () => {};
@@ -1,73 +1,109 @@
1
- import { getConfigProperties, getMaterialIconsJSON, getThemeConfig } from '.';
2
- import { createIconFile } from '../icons/index';
3
- import { IconJsonOptions } from '../models';
4
- import { getObjectPropertyValue, setObjectPropertyValue } from './objects';
5
-
6
- /** Compare the workspace and the user configurations with the current setup of the icons. */
7
- export const detectConfigChanges = () => {
8
- const changes = compareConfigs();
9
-
10
- // if there's nothing to update
11
- if (Object.keys(changes.updatedConfigs).length === 0) return;
12
-
13
- try {
14
- // update icon json file with new options
15
- createIconFile(changes.updatedConfigs, changes.updatedJSONConfig);
16
- } catch (error) {
17
- console.error(error);
18
- }
19
- };
20
-
21
- /**
22
- * Compares a specific configuration in the settings with a current configuration state.
23
- * The current configuration state is read from the icons json file.
24
- * @returns List of configurations that needs to be updated.
25
- */
26
- const compareConfigs = (): {
27
- updatedConfigs: IconJsonOptions;
28
- updatedJSONConfig: IconJsonOptions;
29
- } => {
30
- const configPropertyNames = Object.keys(getConfigProperties())
31
- .map((c) => c.split('.').slice(1).join('.'))
32
- // remove configurable notification messages
33
- .filter((c) => !/show(Welcome|Update|Reload)Message/g.test(c));
34
-
35
- const json = getMaterialIconsJSON();
36
- return configPropertyNames.reduce(
37
- (result, configName) => {
38
- try {
39
- const themeConfig = getThemeConfig(configName) ?? {
40
- globalValue: '',
41
- workspaceValue: '',
42
- defaultValue: '',
43
- };
44
- const configValue =
45
- themeConfig.workspaceValue ??
46
- themeConfig.globalValue ??
47
- themeConfig.defaultValue;
48
-
49
- const currentState = getObjectPropertyValue(
50
- json.options ?? {},
51
- configName
52
- );
53
-
54
- if (JSON.stringify(configValue) !== JSON.stringify(currentState)) {
55
- setObjectPropertyValue(json.options as {}, configName, configValue);
56
- setObjectPropertyValue(
57
- result.updatedConfigs,
58
- configName,
59
- configValue
60
- );
61
- }
62
- } catch (error) {
63
- console.error(error);
64
- }
65
-
66
- return result;
67
- },
68
- {
69
- updatedConfigs: {} as IconJsonOptions,
70
- updatedJSONConfig: json.options as IconJsonOptions,
71
- }
72
- );
73
- };
1
+ import merge from 'lodash.merge';
2
+ import { getConfigProperties, getMaterialIconsJSON, getThemeConfig } from '.';
3
+ import { createIconFile } from '../icons/index';
4
+ import { IconJsonOptions } from '../models';
5
+ import { getObjectPropertyValue, setObjectPropertyValue } from './objects';
6
+
7
+ /** Compare the workspace and the user configurations with the current setup of the icons. */
8
+ export const detectConfigChanges = () => {
9
+ const changes = compareConfigs();
10
+
11
+ // if there's nothing to update
12
+ if (Object.keys(changes.updatedConfigs).length === 0) return;
13
+
14
+ try {
15
+ // update icon json file with new options
16
+ createIconFile(changes.updatedConfigs, changes.updatedJSONConfig);
17
+ } catch (error) {
18
+ console.error(error);
19
+ }
20
+ };
21
+
22
+ /**
23
+ * Compares a specific configuration in the settings with a current configuration state.
24
+ * The current configuration state is read from the icons json file.
25
+ * @returns List of configurations that needs to be updated.
26
+ */
27
+ const compareConfigs = (): {
28
+ updatedConfigs: IconJsonOptions;
29
+ updatedJSONConfig: IconJsonOptions;
30
+ } => {
31
+ const configPropertyNames = Object.keys(getConfigProperties())
32
+ .map((c) => c.split('.').slice(1).join('.'))
33
+ // remove configurable notification messages
34
+ .filter((c) => !/show(Welcome|Update|Reload)Message/g.test(c));
35
+
36
+ const json = getMaterialIconsJSON();
37
+ return configPropertyNames.reduce(
38
+ (result, configName) => {
39
+ try {
40
+ const themeConfig = getThemeConfig(configName) ?? {
41
+ globalValue: '',
42
+ workspaceValue: '',
43
+ defaultValue: '',
44
+ };
45
+
46
+ const configValue = getConfigValue(
47
+ themeConfig as {
48
+ globalValue: unknown;
49
+ workspaceValue: unknown;
50
+ defaultValue: unknown;
51
+ }
52
+ );
53
+
54
+ const currentState = getObjectPropertyValue(
55
+ json.options ?? {},
56
+ configName
57
+ );
58
+
59
+ if (JSON.stringify(configValue) !== JSON.stringify(currentState)) {
60
+ setObjectPropertyValue(json.options as {}, configName, configValue);
61
+ setObjectPropertyValue(
62
+ result.updatedConfigs,
63
+ configName,
64
+ configValue
65
+ );
66
+ }
67
+ } catch (error) {
68
+ console.error(error);
69
+ }
70
+
71
+ return result;
72
+ },
73
+ {
74
+ updatedConfigs: {} as IconJsonOptions,
75
+ updatedJSONConfig: json.options as IconJsonOptions,
76
+ }
77
+ );
78
+ };
79
+
80
+ /**
81
+ * Returns the value of a specific configuration by checking the workspace and the user configuration and fallback to the default value.
82
+ *
83
+ * @param themeConfig Theme configuration
84
+ * @returns Actual theme configuration value
85
+ */
86
+ const getConfigValue = (themeConfig: {
87
+ globalValue: unknown;
88
+ workspaceValue: unknown;
89
+ defaultValue: unknown;
90
+ }) => {
91
+ let configValue;
92
+ if (
93
+ typeof themeConfig.workspaceValue === 'object' &&
94
+ themeConfig.workspaceValue &&
95
+ themeConfig.globalValue
96
+ ) {
97
+ configValue = merge(
98
+ {},
99
+ themeConfig.workspaceValue,
100
+ themeConfig.globalValue
101
+ );
102
+ } else {
103
+ configValue =
104
+ themeConfig.workspaceValue ??
105
+ themeConfig.globalValue ??
106
+ themeConfig.defaultValue;
107
+ }
108
+ return configValue;
109
+ };
@@ -1,8 +1,8 @@
1
- import { IconJsonOptions } from '../models';
2
- import * as path from 'path';
3
-
4
- export const getCustomIconPaths = (options: IconJsonOptions) => {
5
- return Object.values(options?.files?.associations ?? {})
6
- .filter((v) => v.match(/^[.\/]+/)) // <- custom dirs have a relative path to the dist folder
7
- .map((v) => path.dirname(path.join(__dirname, v)));
8
- };
1
+ import { IconJsonOptions } from '../models';
2
+ import * as path from 'path';
3
+
4
+ export const getCustomIconPaths = (options: IconJsonOptions) => {
5
+ return Object.values(options?.files?.associations ?? {})
6
+ .filter((v) => v.match(/^[.\/]+/)) // <- custom dirs have a relative path to the dist folder
7
+ .map((v) => path.dirname(path.join(__dirname, v)));
8
+ };
@@ -1,37 +1,37 @@
1
- import { getDefaultIconOptions } from '../icons';
2
- import { IconJsonOptions } from '../models';
3
-
4
- /**
5
- * Generate a config hashed string that is appended to each icon file name.
6
- * @param config Icon Configuration object
7
- */
8
- export const getFileConfigHash = (options: IconJsonOptions): string => {
9
- try {
10
- const defaults = getDefaultIconOptions();
11
- let fileConfigString = '';
12
- if (
13
- options.saturation !== defaults.saturation ||
14
- options.opacity !== defaults.opacity ||
15
- options.folders?.color !== defaults.folders.color
16
- ) {
17
- fileConfigString += `~${getHash(JSON.stringify(options))}`;
18
- }
19
- return fileConfigString;
20
- } catch (error) {
21
- console.error(error);
22
- return '';
23
- }
24
- };
25
-
26
- const getHash = (value: string) => {
27
- let hash = 0;
28
- let chr = 0;
29
-
30
- if (value.length === 0) return hash;
31
- for (let i = 0; i < value.length; i++) {
32
- chr = value.charCodeAt(i);
33
- hash = (hash << 5) - hash + chr;
34
- hash |= 0; // Convert to 32bit integer
35
- }
36
- return hash;
37
- };
1
+ import { getDefaultIconOptions } from '../icons';
2
+ import { IconJsonOptions } from '../models';
3
+
4
+ /**
5
+ * Generate a config hashed string that is appended to each icon file name.
6
+ * @param config Icon Configuration object
7
+ */
8
+ export const getFileConfigHash = (options: IconJsonOptions): string => {
9
+ try {
10
+ const defaults = getDefaultIconOptions();
11
+ let fileConfigString = '';
12
+ if (
13
+ options.saturation !== defaults.saturation ||
14
+ options.opacity !== defaults.opacity ||
15
+ options.folders?.color !== defaults.folders.color
16
+ ) {
17
+ fileConfigString += `~${getHash(JSON.stringify(options))}`;
18
+ }
19
+ return fileConfigString;
20
+ } catch (error) {
21
+ console.error(error);
22
+ return '';
23
+ }
24
+ };
25
+
26
+ const getHash = (value: string) => {
27
+ let hash = 0;
28
+ let chr = 0;
29
+
30
+ if (value.length === 0) return hash;
31
+ for (let i = 0; i < value.length; i++) {
32
+ chr = value.charCodeAt(i);
33
+ hash = (hash << 5) - hash + chr;
34
+ hash |= 0; // Convert to 32bit integer
35
+ }
36
+ return hash;
37
+ };
@@ -1,100 +1,100 @@
1
- import * as fs from 'fs';
2
- import * as path from 'path';
3
- import * as vscode from 'vscode';
4
- import { iconJsonName } from '../icons/index';
5
- import { IconConfiguration } from '../models/index';
6
- import * as reloadMessages from './../messages/reload';
7
-
8
- /** Get configuration of vs code. */
9
- export const getConfig = (section?: string) => {
10
- return vscode.workspace.getConfiguration(section);
11
- };
12
-
13
- /** Get list of configuration entries of package.json */
14
- export const getConfigProperties = (): { [config: string]: unknown } => {
15
- return vscode.extensions.getExtension('PKief.material-icon-theme')
16
- ?.packageJSON?.contributes?.configuration?.properties;
17
- };
18
-
19
- /** Update configuration of vs code. */
20
- export const setConfig = (
21
- section: string,
22
- value: any,
23
- global: boolean = false
24
- ) => {
25
- return getConfig().update(section, value, global);
26
- };
27
-
28
- export const getThemeConfig = (section: string) => {
29
- return getConfig('material-icon-theme').inspect(section);
30
- };
31
-
32
- /** Set the config of the theme. */
33
- export const setThemeConfig = (
34
- section: string,
35
- value: any,
36
- global: boolean = false
37
- ) => {
38
- return getConfig('material-icon-theme').update(section, value, global);
39
- };
40
-
41
- /**
42
- * Checks if the theme is the active icon theme
43
- * @param{boolean} global false by default
44
- */
45
- export const isThemeActivated = (global: boolean = false): boolean => {
46
- return global
47
- ? getConfig().inspect('workbench.iconTheme')?.globalValue ===
48
- 'material-icon-theme'
49
- : getConfig().inspect('workbench.iconTheme')?.workspaceValue ===
50
- 'material-icon-theme';
51
- };
52
-
53
- /** Checks if the theme is not the active icon theme */
54
- export const isThemeNotVisible = (): boolean => {
55
- const config = getConfig().inspect('workbench.iconTheme');
56
- return (
57
- (!isThemeActivated(true) && !config?.workspaceValue) || // no workspace and not global
58
- (!isThemeActivated() && !!config?.workspaceValue)
59
- );
60
- };
61
-
62
- /** Return the path of the extension in the file system. */
63
- export const getExtensionPath = () =>
64
- vscode.extensions.getExtension('PKief.material-icon-theme')?.extensionPath ??
65
- '';
66
-
67
- /** Get the configuration of the icons as JSON Object */
68
- export const getMaterialIconsJSON = (): IconConfiguration => {
69
- const iconJSONPath = path.join(getExtensionPath(), 'dist', iconJsonName);
70
-
71
- try {
72
- const data = fs.readFileSync(iconJSONPath, 'utf8');
73
- return JSON.parse(data);
74
- } catch (error) {
75
- console.error(error);
76
- return {};
77
- }
78
- };
79
-
80
- /** Reload vs code window */
81
- export const promptToReload = async () => {
82
- const result = await reloadMessages.showConfirmToReloadMessage();
83
- if (result) reloadWindow();
84
- };
85
-
86
- const reloadWindow = () => {
87
- return vscode.commands.executeCommand('workbench.action.reloadWindow');
88
- };
89
-
90
- /** Capitalize the first letter of a string */
91
- export const capitalizeFirstLetter = (name: string): string =>
92
- name.charAt(0).toUpperCase() + name.slice(1);
93
-
94
- /** TitleCase all words in a string */
95
- export const toTitleCase = (value: string) => {
96
- return value.replace(
97
- /\w\S*/g,
98
- (text) => text.charAt(0).toUpperCase() + text.substr(1).toLowerCase()
99
- );
100
- };
1
+ import * as fs from 'fs';
2
+ import * as path from 'path';
3
+ import * as vscode from 'vscode';
4
+ import { iconJsonName } from '../icons/index';
5
+ import { IconConfiguration } from '../models/index';
6
+ import * as reloadMessages from './../messages/reload';
7
+
8
+ /** Get configuration of vs code. */
9
+ export const getConfig = (section?: string) => {
10
+ return vscode.workspace.getConfiguration(section);
11
+ };
12
+
13
+ /** Get list of configuration entries of package.json */
14
+ export const getConfigProperties = (): { [config: string]: unknown } => {
15
+ return vscode.extensions.getExtension('PKief.material-icon-theme')
16
+ ?.packageJSON?.contributes?.configuration?.properties;
17
+ };
18
+
19
+ /** Update configuration of vs code. */
20
+ export const setConfig = (
21
+ section: string,
22
+ value: any,
23
+ global: boolean = false
24
+ ) => {
25
+ return getConfig().update(section, value, global);
26
+ };
27
+
28
+ export const getThemeConfig = (section: string) => {
29
+ return getConfig('material-icon-theme').inspect(section);
30
+ };
31
+
32
+ /** Set the config of the theme. */
33
+ export const setThemeConfig = (
34
+ section: string,
35
+ value: any,
36
+ global: boolean = false
37
+ ) => {
38
+ return getConfig('material-icon-theme').update(section, value, global);
39
+ };
40
+
41
+ /**
42
+ * Checks if the theme is the active icon theme
43
+ * @param{boolean} global false by default
44
+ */
45
+ export const isThemeActivated = (global: boolean = false): boolean => {
46
+ return global
47
+ ? getConfig().inspect('workbench.iconTheme')?.globalValue ===
48
+ 'material-icon-theme'
49
+ : getConfig().inspect('workbench.iconTheme')?.workspaceValue ===
50
+ 'material-icon-theme';
51
+ };
52
+
53
+ /** Checks if the theme is not the active icon theme */
54
+ export const isThemeNotVisible = (): boolean => {
55
+ const config = getConfig().inspect('workbench.iconTheme');
56
+ return (
57
+ (!isThemeActivated(true) && !config?.workspaceValue) || // no workspace and not global
58
+ (!isThemeActivated() && !!config?.workspaceValue)
59
+ );
60
+ };
61
+
62
+ /** Return the path of the extension in the file system. */
63
+ export const getExtensionPath = () =>
64
+ vscode.extensions.getExtension('PKief.material-icon-theme')?.extensionPath ??
65
+ '';
66
+
67
+ /** Get the configuration of the icons as JSON Object */
68
+ export const getMaterialIconsJSON = (): IconConfiguration => {
69
+ const iconJSONPath = path.join(getExtensionPath(), 'dist', iconJsonName);
70
+
71
+ try {
72
+ const data = fs.readFileSync(iconJSONPath, 'utf8');
73
+ return JSON.parse(data);
74
+ } catch (error) {
75
+ console.error(error);
76
+ return {};
77
+ }
78
+ };
79
+
80
+ /** Reload vs code window */
81
+ export const promptToReload = async () => {
82
+ const result = await reloadMessages.showConfirmToReloadMessage();
83
+ if (result) reloadWindow();
84
+ };
85
+
86
+ const reloadWindow = () => {
87
+ return vscode.commands.executeCommand('workbench.action.reloadWindow');
88
+ };
89
+
90
+ /** Capitalize the first letter of a string */
91
+ export const capitalizeFirstLetter = (name: string): string =>
92
+ name.charAt(0).toUpperCase() + name.slice(1);
93
+
94
+ /** TitleCase all words in a string */
95
+ export const toTitleCase = (value: string) => {
96
+ return value.replace(
97
+ /\w\S*/g,
98
+ (text) => text.charAt(0).toUpperCase() + text.substr(1).toLowerCase()
99
+ );
100
+ };