material-icon-theme 4.14.0 → 4.16.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.
- package/.eslintrc.json +51 -51
- package/.github/FUNDING.yml +3 -3
- package/.github/ISSUE_TEMPLATE/bug_report.md +34 -34
- package/.github/ISSUE_TEMPLATE/icon_request.md +27 -27
- package/.github/workflows/build.yml +45 -45
- package/.github/workflows/color-check.yml +22 -22
- package/.github/workflows/release.yml +73 -73
- package/.prettierrc +7 -7
- package/.vscode/extensions.json +3 -3
- package/.vscode/launch.json +43 -43
- package/.vscode/settings.json +14 -14
- package/.vscode/tasks.json +32 -32
- package/.vscodeignore +20 -20
- package/CHANGELOG.md +1135 -1101
- package/CONTRIBUTING.md +62 -62
- package/LICENSE.md +8 -8
- package/README.md +209 -209
- package/build/web-extension.webpack.config.js +62 -62
- package/build/webpack.config.js +39 -39
- package/changelog.config.json +4 -4
- package/icons/astyle.svg +4 -4
- package/icons/blitz.svg +4 -4
- package/icons/cypress.svg +4 -4
- package/icons/dependabot.svg +4 -4
- package/icons/dinophp.svg +16 -16
- package/icons/figma.svg +10 -10
- package/icons/folder-angular-open.svg +2 -2
- package/icons/folder-angular.svg +2 -2
- package/icons/folder-cypress-open.svg +5 -5
- package/icons/folder-cypress.svg +5 -5
- package/icons/folder-java-open.svg +2 -2
- package/icons/folder-java.svg +2 -2
- package/icons/folder-next-open.svg +2 -2
- package/icons/folder-next.svg +2 -2
- package/icons/folder-queue-open.svg +2 -2
- package/icons/folder-queue.svg +2 -2
- package/icons/folder-resolver-open.svg +2 -2
- package/icons/folder-resolver.svg +2 -2
- package/icons/folder-serverless-open.svg +5 -5
- package/icons/folder-serverless.svg +5 -5
- package/icons/folder-target-open.svg +2 -2
- package/icons/folder-target.svg +2 -2
- package/icons/folder-unity-open.svg +2 -0
- package/icons/folder-unity.svg +2 -0
- package/icons/folder-vercel-open.svg +4 -4
- package/icons/folder-vercel.svg +4 -4
- package/icons/gleam.svg +4 -4
- package/icons/gridsome.svg +4 -4
- package/icons/hardhat.svg +3 -3
- package/icons/lighthouse.svg +2 -2
- package/icons/ndst.svg +7 -7
- package/icons/next.svg +3 -3
- package/icons/next_light.svg +2 -2
- package/icons/odin.svg +6 -6
- package/icons/parcel.svg +4 -4
- package/icons/playwright.svg +7 -7
- package/icons/pnpm.svg +9 -9
- package/icons/pnpm_light.svg +7 -7
- package/icons/poetry.svg +1 -0
- package/icons/processing.svg +10 -1
- package/icons/remix.svg +4 -4
- package/icons/remix_light.svg +4 -4
- package/icons/rome.svg +5 -5
- package/icons/serverless.svg +4 -4
- package/icons/siyuan.svg +9 -9
- package/icons/steadybit.svg +1 -0
- package/icons/svgr.svg +4 -4
- package/icons/tauri.svg +9 -9
- package/icons/template.svg +4 -4
- package/icons/tobi.svg +4 -4
- package/icons/tobimake.svg +14 -14
- package/icons/turborepo.svg +12 -0
- package/icons/turborepo_light.svg +12 -0
- package/images/contributors.png +0 -0
- package/images/fileIcons.png +0 -0
- package/images/folderIcons.png +0 -0
- package/logo.svg +21 -21
- package/material-colors.yml +257 -257
- package/package.json +264 -264
- package/package.nls.de.json +35 -35
- package/package.nls.es.json +32 -32
- package/package.nls.fr.json +32 -32
- package/package.nls.ja.json +35 -35
- package/package.nls.json +35 -35
- package/package.nls.nl.json +35 -35
- package/package.nls.pl.json +35 -35
- package/package.nls.pt-BR.json +32 -32
- package/package.nls.pt-PT.json +32 -32
- package/package.nls.ru.json +32 -32
- package/package.nls.zh-CN.json +32 -32
- package/package.nls.zh-TW.json +32 -32
- package/src/commands/activate.ts +26 -26
- package/src/commands/explorerArrows.ts +55 -55
- package/src/commands/folderColor.ts +96 -96
- package/src/commands/folders.ts +55 -55
- package/src/commands/grayscale.ts +55 -55
- package/src/commands/iconPacks.ts +68 -68
- package/src/commands/index.ts +30 -30
- package/src/commands/opacity.ts +46 -46
- package/src/commands/restoreConfig.ts +14 -14
- package/src/commands/saturation.ts +46 -46
- package/src/extension.ts +35 -35
- package/src/helpers/changeDetection.ts +68 -68
- package/src/helpers/customIcons.ts +8 -8
- package/src/helpers/fileConfig.ts +37 -37
- package/src/helpers/index.ts +100 -100
- package/src/helpers/objects.ts +58 -58
- package/src/helpers/types.ts +7 -7
- package/src/helpers/versioning.ts +73 -73
- package/src/i18n/index.ts +78 -78
- package/src/i18n/lang-de.ts +54 -54
- package/src/i18n/lang-en.ts +53 -53
- package/src/i18n/lang-es.ts +53 -53
- package/src/i18n/lang-fr.ts +53 -53
- package/src/i18n/lang-ja.ts +54 -54
- package/src/i18n/lang-nl.ts +54 -54
- package/src/i18n/lang-pl.ts +52 -52
- package/src/i18n/lang-pt-br.ts +53 -53
- package/src/i18n/lang-pt-pt.ts +53 -53
- package/src/i18n/lang-ru.ts +52 -52
- package/src/i18n/lang-uk.ts +54 -54
- package/src/i18n/lang-zh-cn.ts +52 -52
- package/src/i18n/lang-zh-tw.ts +52 -52
- package/src/icons/fileIcons.ts +1854 -1782
- package/src/icons/folderIcons.ts +754 -711
- package/src/icons/generator/constants.ts +29 -29
- package/src/icons/generator/fileGenerator.ts +216 -216
- package/src/icons/generator/folderGenerator.ts +340 -340
- package/src/icons/generator/iconOpacity.ts +111 -111
- package/src/icons/generator/iconSaturation.ts +140 -140
- package/src/icons/generator/index.ts +7 -7
- package/src/icons/generator/jsonGenerator.ts +187 -187
- package/src/icons/generator/languageGenerator.ts +127 -127
- package/src/icons/index.ts +4 -4
- package/src/icons/languageIcons.ts +134 -134
- package/src/messages/outdated.ts +33 -33
- package/src/messages/reload.ts +32 -32
- package/src/messages/start.ts +12 -12
- package/src/messages/update.ts +48 -48
- package/src/messages/welcome.ts +47 -47
- package/src/models/helpers/index.ts +1 -1
- package/src/models/helpers/themeStatus.ts +5 -5
- package/src/models/i18n/index.ts +1 -1
- package/src/models/i18n/translation.ts +50 -50
- package/src/models/iconConfiguration.ts +37 -37
- package/src/models/icons/defaultIcon.ts +16 -16
- package/src/models/icons/files/fileIcon.ts +49 -49
- package/src/models/icons/files/fileTypes.ts +14 -14
- package/src/models/icons/files/index.ts +2 -2
- package/src/models/icons/folders/folderIcon.ts +34 -34
- package/src/models/icons/folders/folderTheme.ts +23 -23
- package/src/models/icons/folders/index.ts +2 -2
- package/src/models/icons/iconJsonOptions.ts +23 -23
- package/src/models/icons/iconPack.ts +12 -12
- package/src/models/icons/index.ts +6 -6
- package/src/models/icons/languages/index.ts +1 -1
- package/src/models/icons/languages/languageIdentifier.ts +26 -26
- package/src/models/index.ts +4 -4
- package/src/models/scripts/contributors/contributor.ts +22 -22
- package/src/models/scripts/contributors/contributorsConfig.ts +10 -10
- package/src/scripts/contributors/contributors.css +24 -24
- package/src/scripts/contributors/index.ts +138 -138
- package/src/scripts/helpers/painter.ts +5 -5
- package/src/scripts/helpers/screenshots.ts +32 -32
- package/src/scripts/helpers/similarity.ts +47 -47
- package/src/scripts/helpers/titleCase.ts +7 -7
- package/src/scripts/icons/checks/checkIconAvailability.ts +215 -215
- package/src/scripts/icons/checks/checkIconConflicts.ts +154 -154
- package/src/scripts/icons/checks/checkIconUsage.ts +141 -141
- package/src/scripts/icons/checks/index.ts +7 -7
- package/src/scripts/icons/generateJson.ts +11 -11
- package/src/scripts/preview/index.ts +40 -40
- package/src/scripts/preview/preview.ts +165 -165
- package/src/scripts/preview/style.css +48 -48
- package/src/test/runTest.ts +26 -26
- package/src/test/spec/i18n/i18n.spec.ts +61 -61
- package/src/test/spec/icons/fileIcons.spec.ts +250 -250
- package/src/test/spec/icons/folderIcons.spec.ts +418 -418
- package/src/test/spec/icons/languageIcons.spec.ts +184 -184
- package/src/test/spec/index.ts +36 -36
- package/src/web/extension.ts +10 -10
- package/svgo.config.js +11 -11
- package/tsconfig.json +23 -23
- package/.github/workflows/greetings.yml +0 -17
- package/icons/processing_light.svg +0 -1
|
@@ -1,154 +1,154 @@
|
|
|
1
|
-
import * as painter from '../../helpers/painter';
|
|
2
|
-
import { fileIcons, folderIcons, languageIcons } from './../../../icons';
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* Store all icons that are wrong configured
|
|
6
|
-
*/
|
|
7
|
-
const allConflicts: {
|
|
8
|
-
fileIcons: {
|
|
9
|
-
fileExtensions: Record<string, string[]>;
|
|
10
|
-
fileNames: Record<string, string[]>;
|
|
11
|
-
};
|
|
12
|
-
folderIcons: Record<string, string[]>;
|
|
13
|
-
languageIcons: Record<string, string[]>;
|
|
14
|
-
} = {
|
|
15
|
-
fileIcons: {
|
|
16
|
-
fileExtensions: {},
|
|
17
|
-
fileNames: {},
|
|
18
|
-
},
|
|
19
|
-
folderIcons: {},
|
|
20
|
-
languageIcons: {},
|
|
21
|
-
};
|
|
22
|
-
|
|
23
|
-
export const check = () => {
|
|
24
|
-
checkFolderIcons();
|
|
25
|
-
checkFileIcons();
|
|
26
|
-
checkLanguageIcons();
|
|
27
|
-
|
|
28
|
-
handleErrors();
|
|
29
|
-
};
|
|
30
|
-
|
|
31
|
-
const checkFileIcons = () => {
|
|
32
|
-
checkForConflictsInFileIcons('fileExtensions');
|
|
33
|
-
checkForConflictsInFileIcons('fileNames');
|
|
34
|
-
};
|
|
35
|
-
|
|
36
|
-
const checkForConflictsInFileIcons = (
|
|
37
|
-
fileIconDefinitionType: 'fileExtensions' | 'fileNames'
|
|
38
|
-
) => {
|
|
39
|
-
const icons: Record<string, string> = {};
|
|
40
|
-
fileIcons.icons.forEach((icon) => {
|
|
41
|
-
if (!icon[fileIconDefinitionType]) return;
|
|
42
|
-
(icon[fileIconDefinitionType] ?? [])
|
|
43
|
-
.map((d) => d.toLowerCase())
|
|
44
|
-
.forEach((definition) => {
|
|
45
|
-
if (
|
|
46
|
-
!icons[definition] ||
|
|
47
|
-
(icon.enabledFor && icon.enabledFor.length > 0)
|
|
48
|
-
) {
|
|
49
|
-
icons[definition] = icon.name;
|
|
50
|
-
} else {
|
|
51
|
-
if (!allConflicts.fileIcons[fileIconDefinitionType][definition]) {
|
|
52
|
-
allConflicts.fileIcons[fileIconDefinitionType][definition] = [
|
|
53
|
-
icons[definition],
|
|
54
|
-
icon.name,
|
|
55
|
-
];
|
|
56
|
-
} else {
|
|
57
|
-
allConflicts.fileIcons[fileIconDefinitionType][definition].push(
|
|
58
|
-
icon.name
|
|
59
|
-
);
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
});
|
|
63
|
-
});
|
|
64
|
-
};
|
|
65
|
-
|
|
66
|
-
const checkFolderIcons = () => {
|
|
67
|
-
folderIcons.forEach((theme) => {
|
|
68
|
-
if (!theme.icons) return;
|
|
69
|
-
const icons: Record<string, string> = {};
|
|
70
|
-
theme.icons.forEach((icon) => {
|
|
71
|
-
icon.folderNames
|
|
72
|
-
.map((f) => f.toLowerCase())
|
|
73
|
-
.forEach((folderName) => {
|
|
74
|
-
if (
|
|
75
|
-
!icons[folderName] ||
|
|
76
|
-
(icon.enabledFor && icon.enabledFor.length > 0)
|
|
77
|
-
) {
|
|
78
|
-
icons[folderName] = icon.name;
|
|
79
|
-
} else {
|
|
80
|
-
if (!allConflicts.folderIcons[folderName]) {
|
|
81
|
-
allConflicts.folderIcons[folderName] = [
|
|
82
|
-
icons[folderName],
|
|
83
|
-
icon.name,
|
|
84
|
-
];
|
|
85
|
-
} else {
|
|
86
|
-
allConflicts.folderIcons[folderName].push(icon.name);
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
});
|
|
90
|
-
});
|
|
91
|
-
});
|
|
92
|
-
};
|
|
93
|
-
|
|
94
|
-
const checkLanguageIcons = () => {
|
|
95
|
-
const icons: Record<string, string> = {};
|
|
96
|
-
languageIcons.forEach((langIcon) => {
|
|
97
|
-
langIcon.ids
|
|
98
|
-
.map((id) => id.toLowerCase())
|
|
99
|
-
.forEach((id) => {
|
|
100
|
-
if (!icons[id]) {
|
|
101
|
-
icons[id] = langIcon.icon.name;
|
|
102
|
-
} else {
|
|
103
|
-
if (!allConflicts.languageIcons[id]) {
|
|
104
|
-
allConflicts.languageIcons[id] = [icons[id], langIcon.icon.name];
|
|
105
|
-
} else {
|
|
106
|
-
allConflicts.languageIcons[id].push(langIcon.icon.name);
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
|
-
});
|
|
110
|
-
});
|
|
111
|
-
};
|
|
112
|
-
|
|
113
|
-
const handleErrors = () => {
|
|
114
|
-
if (
|
|
115
|
-
[
|
|
116
|
-
...Object.keys(allConflicts.fileIcons.fileExtensions),
|
|
117
|
-
...Object.keys(allConflicts.fileIcons.fileNames),
|
|
118
|
-
...Object.keys(allConflicts.folderIcons),
|
|
119
|
-
...Object.keys(allConflicts.languageIcons),
|
|
120
|
-
].length > 0
|
|
121
|
-
) {
|
|
122
|
-
console.log('> Material Icon Theme:', painter.red('Icon conflicts:'));
|
|
123
|
-
console.log(painter.red('--------------------------------------'));
|
|
124
|
-
|
|
125
|
-
printErrorMessage(allConflicts.fileIcons.fileExtensions, 'fileExtension');
|
|
126
|
-
printErrorMessage(allConflicts.fileIcons.fileNames, 'fileName');
|
|
127
|
-
printErrorMessage(allConflicts.folderIcons, 'folderName');
|
|
128
|
-
printErrorMessage(allConflicts.languageIcons, 'languageId');
|
|
129
|
-
|
|
130
|
-
console.log(
|
|
131
|
-
'\n' + painter.red('Please check the wrong icon configurations!\n')
|
|
132
|
-
);
|
|
133
|
-
process.exit(1);
|
|
134
|
-
} else {
|
|
135
|
-
console.log(
|
|
136
|
-
'> Material Icon Theme:',
|
|
137
|
-
painter.green('Passed icon conflict checks!')
|
|
138
|
-
);
|
|
139
|
-
}
|
|
140
|
-
};
|
|
141
|
-
|
|
142
|
-
const printErrorMessage = (icons: any, definitionType: string) => {
|
|
143
|
-
const keys = Object.keys(icons);
|
|
144
|
-
keys.forEach((key) => {
|
|
145
|
-
const conflictIcons = icons[key];
|
|
146
|
-
console.log(
|
|
147
|
-
painter.red(
|
|
148
|
-
`For ${definitionType} "${key}" are ${
|
|
149
|
-
conflictIcons.length
|
|
150
|
-
} icons defined: [${conflictIcons.join(', ')}]`
|
|
151
|
-
)
|
|
152
|
-
);
|
|
153
|
-
});
|
|
154
|
-
};
|
|
1
|
+
import * as painter from '../../helpers/painter';
|
|
2
|
+
import { fileIcons, folderIcons, languageIcons } from './../../../icons';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Store all icons that are wrong configured
|
|
6
|
+
*/
|
|
7
|
+
const allConflicts: {
|
|
8
|
+
fileIcons: {
|
|
9
|
+
fileExtensions: Record<string, string[]>;
|
|
10
|
+
fileNames: Record<string, string[]>;
|
|
11
|
+
};
|
|
12
|
+
folderIcons: Record<string, string[]>;
|
|
13
|
+
languageIcons: Record<string, string[]>;
|
|
14
|
+
} = {
|
|
15
|
+
fileIcons: {
|
|
16
|
+
fileExtensions: {},
|
|
17
|
+
fileNames: {},
|
|
18
|
+
},
|
|
19
|
+
folderIcons: {},
|
|
20
|
+
languageIcons: {},
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
export const check = () => {
|
|
24
|
+
checkFolderIcons();
|
|
25
|
+
checkFileIcons();
|
|
26
|
+
checkLanguageIcons();
|
|
27
|
+
|
|
28
|
+
handleErrors();
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
const checkFileIcons = () => {
|
|
32
|
+
checkForConflictsInFileIcons('fileExtensions');
|
|
33
|
+
checkForConflictsInFileIcons('fileNames');
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
const checkForConflictsInFileIcons = (
|
|
37
|
+
fileIconDefinitionType: 'fileExtensions' | 'fileNames'
|
|
38
|
+
) => {
|
|
39
|
+
const icons: Record<string, string> = {};
|
|
40
|
+
fileIcons.icons.forEach((icon) => {
|
|
41
|
+
if (!icon[fileIconDefinitionType]) return;
|
|
42
|
+
(icon[fileIconDefinitionType] ?? [])
|
|
43
|
+
.map((d) => d.toLowerCase())
|
|
44
|
+
.forEach((definition) => {
|
|
45
|
+
if (
|
|
46
|
+
!icons[definition] ||
|
|
47
|
+
(icon.enabledFor && icon.enabledFor.length > 0)
|
|
48
|
+
) {
|
|
49
|
+
icons[definition] = icon.name;
|
|
50
|
+
} else {
|
|
51
|
+
if (!allConflicts.fileIcons[fileIconDefinitionType][definition]) {
|
|
52
|
+
allConflicts.fileIcons[fileIconDefinitionType][definition] = [
|
|
53
|
+
icons[definition],
|
|
54
|
+
icon.name,
|
|
55
|
+
];
|
|
56
|
+
} else {
|
|
57
|
+
allConflicts.fileIcons[fileIconDefinitionType][definition].push(
|
|
58
|
+
icon.name
|
|
59
|
+
);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
});
|
|
63
|
+
});
|
|
64
|
+
};
|
|
65
|
+
|
|
66
|
+
const checkFolderIcons = () => {
|
|
67
|
+
folderIcons.forEach((theme) => {
|
|
68
|
+
if (!theme.icons) return;
|
|
69
|
+
const icons: Record<string, string> = {};
|
|
70
|
+
theme.icons.forEach((icon) => {
|
|
71
|
+
icon.folderNames
|
|
72
|
+
.map((f) => f.toLowerCase())
|
|
73
|
+
.forEach((folderName) => {
|
|
74
|
+
if (
|
|
75
|
+
!icons[folderName] ||
|
|
76
|
+
(icon.enabledFor && icon.enabledFor.length > 0)
|
|
77
|
+
) {
|
|
78
|
+
icons[folderName] = icon.name;
|
|
79
|
+
} else {
|
|
80
|
+
if (!allConflicts.folderIcons[folderName]) {
|
|
81
|
+
allConflicts.folderIcons[folderName] = [
|
|
82
|
+
icons[folderName],
|
|
83
|
+
icon.name,
|
|
84
|
+
];
|
|
85
|
+
} else {
|
|
86
|
+
allConflicts.folderIcons[folderName].push(icon.name);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
});
|
|
90
|
+
});
|
|
91
|
+
});
|
|
92
|
+
};
|
|
93
|
+
|
|
94
|
+
const checkLanguageIcons = () => {
|
|
95
|
+
const icons: Record<string, string> = {};
|
|
96
|
+
languageIcons.forEach((langIcon) => {
|
|
97
|
+
langIcon.ids
|
|
98
|
+
.map((id) => id.toLowerCase())
|
|
99
|
+
.forEach((id) => {
|
|
100
|
+
if (!icons[id]) {
|
|
101
|
+
icons[id] = langIcon.icon.name;
|
|
102
|
+
} else {
|
|
103
|
+
if (!allConflicts.languageIcons[id]) {
|
|
104
|
+
allConflicts.languageIcons[id] = [icons[id], langIcon.icon.name];
|
|
105
|
+
} else {
|
|
106
|
+
allConflicts.languageIcons[id].push(langIcon.icon.name);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
});
|
|
110
|
+
});
|
|
111
|
+
};
|
|
112
|
+
|
|
113
|
+
const handleErrors = () => {
|
|
114
|
+
if (
|
|
115
|
+
[
|
|
116
|
+
...Object.keys(allConflicts.fileIcons.fileExtensions),
|
|
117
|
+
...Object.keys(allConflicts.fileIcons.fileNames),
|
|
118
|
+
...Object.keys(allConflicts.folderIcons),
|
|
119
|
+
...Object.keys(allConflicts.languageIcons),
|
|
120
|
+
].length > 0
|
|
121
|
+
) {
|
|
122
|
+
console.log('> Material Icon Theme:', painter.red('Icon conflicts:'));
|
|
123
|
+
console.log(painter.red('--------------------------------------'));
|
|
124
|
+
|
|
125
|
+
printErrorMessage(allConflicts.fileIcons.fileExtensions, 'fileExtension');
|
|
126
|
+
printErrorMessage(allConflicts.fileIcons.fileNames, 'fileName');
|
|
127
|
+
printErrorMessage(allConflicts.folderIcons, 'folderName');
|
|
128
|
+
printErrorMessage(allConflicts.languageIcons, 'languageId');
|
|
129
|
+
|
|
130
|
+
console.log(
|
|
131
|
+
'\n' + painter.red('Please check the wrong icon configurations!\n')
|
|
132
|
+
);
|
|
133
|
+
process.exit(1);
|
|
134
|
+
} else {
|
|
135
|
+
console.log(
|
|
136
|
+
'> Material Icon Theme:',
|
|
137
|
+
painter.green('Passed icon conflict checks!')
|
|
138
|
+
);
|
|
139
|
+
}
|
|
140
|
+
};
|
|
141
|
+
|
|
142
|
+
const printErrorMessage = (icons: any, definitionType: string) => {
|
|
143
|
+
const keys = Object.keys(icons);
|
|
144
|
+
keys.forEach((key) => {
|
|
145
|
+
const conflictIcons = icons[key];
|
|
146
|
+
console.log(
|
|
147
|
+
painter.red(
|
|
148
|
+
`For ${definitionType} "${key}" are ${
|
|
149
|
+
conflictIcons.length
|
|
150
|
+
} icons defined: [${conflictIcons.join(', ')}]`
|
|
151
|
+
)
|
|
152
|
+
);
|
|
153
|
+
});
|
|
154
|
+
};
|
|
@@ -1,141 +1,141 @@
|
|
|
1
|
-
import * as fs from 'fs';
|
|
2
|
-
import * as path from 'path';
|
|
3
|
-
import { DefaultIcon, FolderIcon, FolderTheme } from '../../../models/index';
|
|
4
|
-
import {
|
|
5
|
-
fileIcons,
|
|
6
|
-
folderIcons,
|
|
7
|
-
highContrastColorFileEnding,
|
|
8
|
-
languageIcons,
|
|
9
|
-
lightColorFileEnding,
|
|
10
|
-
openedFolder,
|
|
11
|
-
} from './../../../icons';
|
|
12
|
-
import * as painter from './../../helpers/painter';
|
|
13
|
-
|
|
14
|
-
/**
|
|
15
|
-
* Defines the folder where all icon files are located.
|
|
16
|
-
*/
|
|
17
|
-
const folderPath = path.join('icons');
|
|
18
|
-
|
|
19
|
-
/**
|
|
20
|
-
* Defines an array with all icons that can be found in the file system.
|
|
21
|
-
*/
|
|
22
|
-
const availableIcons: { [s: string]: string } = {};
|
|
23
|
-
|
|
24
|
-
/**
|
|
25
|
-
* Get all icon file names from the file system.
|
|
26
|
-
*/
|
|
27
|
-
const fsReadAllIconFiles = (
|
|
28
|
-
error: NodeJS.ErrnoException | null,
|
|
29
|
-
files: string[]
|
|
30
|
-
) => {
|
|
31
|
-
if (error) {
|
|
32
|
-
throw Error(error.message);
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
files.forEach((file) => {
|
|
36
|
-
const fileName = file;
|
|
37
|
-
const iconName = path.parse(file).name;
|
|
38
|
-
availableIcons[iconName] = fileName;
|
|
39
|
-
});
|
|
40
|
-
|
|
41
|
-
checkUsageOfAllIcons();
|
|
42
|
-
handleErrors();
|
|
43
|
-
};
|
|
44
|
-
|
|
45
|
-
const checkUsageOfAllIcons = () => {
|
|
46
|
-
const usedFileIcons: string[] = getAllUsedFileIcons();
|
|
47
|
-
const usedFolderIcons: string[] = getAllUsedFolderIcons();
|
|
48
|
-
const usedLanguageIcons: string[] = getAllUsedLanguageIcons();
|
|
49
|
-
|
|
50
|
-
[...usedFileIcons, ...usedFolderIcons, ...usedLanguageIcons].forEach(
|
|
51
|
-
(icon) => {
|
|
52
|
-
delete availableIcons[icon];
|
|
53
|
-
}
|
|
54
|
-
);
|
|
55
|
-
};
|
|
56
|
-
|
|
57
|
-
const handleErrors = () => {
|
|
58
|
-
const amountOfUnusedIcons = Object.keys(availableIcons).length;
|
|
59
|
-
if (amountOfUnusedIcons === 0) {
|
|
60
|
-
console.log(
|
|
61
|
-
'> Material Icon Theme:',
|
|
62
|
-
painter.green('Passed icon usage checks!')
|
|
63
|
-
);
|
|
64
|
-
} else {
|
|
65
|
-
console.log(
|
|
66
|
-
'> Material Icon Theme: ' +
|
|
67
|
-
painter.red(`${amountOfUnusedIcons} unused icon(s):`)
|
|
68
|
-
);
|
|
69
|
-
Object.keys(availableIcons).forEach((icon) => {
|
|
70
|
-
console.log(painter.red(`- ${availableIcons[icon]}`));
|
|
71
|
-
});
|
|
72
|
-
throw new Error('Found unused icon files!');
|
|
73
|
-
}
|
|
74
|
-
};
|
|
75
|
-
|
|
76
|
-
// read from the file system
|
|
77
|
-
export const check = () => fs.readdir(folderPath, fsReadAllIconFiles);
|
|
78
|
-
|
|
79
|
-
const getAllUsedFileIcons = (): string[] => {
|
|
80
|
-
return [
|
|
81
|
-
fileIcons.defaultIcon.name,
|
|
82
|
-
fileIcons.defaultIcon.light
|
|
83
|
-
? fileIcons.defaultIcon.name + lightColorFileEnding
|
|
84
|
-
: '',
|
|
85
|
-
fileIcons.defaultIcon.highContrast
|
|
86
|
-
? fileIcons.defaultIcon.name + highContrastColorFileEnding
|
|
87
|
-
: '',
|
|
88
|
-
...fileIcons.icons.map((icon) => icon.name),
|
|
89
|
-
...fileIcons.icons
|
|
90
|
-
.filter((icon) => icon.light)
|
|
91
|
-
.map((icon) => icon.name + lightColorFileEnding),
|
|
92
|
-
...fileIcons.icons
|
|
93
|
-
.filter((icon) => icon.highContrast)
|
|
94
|
-
.map((icon) => icon.name + highContrastColorFileEnding),
|
|
95
|
-
].filter((f) => f !== '');
|
|
96
|
-
};
|
|
97
|
-
|
|
98
|
-
const getAllUsedFolderIcons = (): string[] => {
|
|
99
|
-
const icons = folderIcons
|
|
100
|
-
.map((theme) => (theme.name === 'none' ? [] : getAllFolderIcons(theme)))
|
|
101
|
-
.reduce((a, b) => a.concat(b));
|
|
102
|
-
return icons
|
|
103
|
-
.map((icon) => {
|
|
104
|
-
return [
|
|
105
|
-
icon.name,
|
|
106
|
-
icon.name + openedFolder,
|
|
107
|
-
icon.light ? icon.name + lightColorFileEnding : '',
|
|
108
|
-
icon.light ? icon.name + openedFolder + lightColorFileEnding : '',
|
|
109
|
-
icon.highContrast ? icon.name + highContrastColorFileEnding : '',
|
|
110
|
-
icon.highContrast
|
|
111
|
-
? icon.name + openedFolder + highContrastColorFileEnding
|
|
112
|
-
: '',
|
|
113
|
-
];
|
|
114
|
-
})
|
|
115
|
-
.filter((icon) => icon !== undefined)
|
|
116
|
-
.reduce((a, b) => a.concat(b));
|
|
117
|
-
};
|
|
118
|
-
|
|
119
|
-
const getAllFolderIcons = (
|
|
120
|
-
theme: FolderTheme
|
|
121
|
-
): (FolderIcon | DefaultIcon)[] => {
|
|
122
|
-
const icons = theme.icons || [];
|
|
123
|
-
const allFolderIcons = [theme.defaultIcon, ...icons];
|
|
124
|
-
if (theme.rootFolder) {
|
|
125
|
-
allFolderIcons.push(theme.rootFolder);
|
|
126
|
-
}
|
|
127
|
-
return allFolderIcons;
|
|
128
|
-
};
|
|
129
|
-
|
|
130
|
-
const getAllUsedLanguageIcons = (): string[] => {
|
|
131
|
-
const icons = [
|
|
132
|
-
...languageIcons.map((lang) => lang.icon.name),
|
|
133
|
-
...languageIcons
|
|
134
|
-
.filter((lang) => lang.icon.light)
|
|
135
|
-
.map((lang) => lang.icon.name + lightColorFileEnding),
|
|
136
|
-
...languageIcons
|
|
137
|
-
.filter((lang) => lang.icon.highContrast)
|
|
138
|
-
.map((lang) => lang.icon.name + highContrastColorFileEnding),
|
|
139
|
-
];
|
|
140
|
-
return icons;
|
|
141
|
-
};
|
|
1
|
+
import * as fs from 'fs';
|
|
2
|
+
import * as path from 'path';
|
|
3
|
+
import { DefaultIcon, FolderIcon, FolderTheme } from '../../../models/index';
|
|
4
|
+
import {
|
|
5
|
+
fileIcons,
|
|
6
|
+
folderIcons,
|
|
7
|
+
highContrastColorFileEnding,
|
|
8
|
+
languageIcons,
|
|
9
|
+
lightColorFileEnding,
|
|
10
|
+
openedFolder,
|
|
11
|
+
} from './../../../icons';
|
|
12
|
+
import * as painter from './../../helpers/painter';
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Defines the folder where all icon files are located.
|
|
16
|
+
*/
|
|
17
|
+
const folderPath = path.join('icons');
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Defines an array with all icons that can be found in the file system.
|
|
21
|
+
*/
|
|
22
|
+
const availableIcons: { [s: string]: string } = {};
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Get all icon file names from the file system.
|
|
26
|
+
*/
|
|
27
|
+
const fsReadAllIconFiles = (
|
|
28
|
+
error: NodeJS.ErrnoException | null,
|
|
29
|
+
files: string[]
|
|
30
|
+
) => {
|
|
31
|
+
if (error) {
|
|
32
|
+
throw Error(error.message);
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
files.forEach((file) => {
|
|
36
|
+
const fileName = file;
|
|
37
|
+
const iconName = path.parse(file).name;
|
|
38
|
+
availableIcons[iconName] = fileName;
|
|
39
|
+
});
|
|
40
|
+
|
|
41
|
+
checkUsageOfAllIcons();
|
|
42
|
+
handleErrors();
|
|
43
|
+
};
|
|
44
|
+
|
|
45
|
+
const checkUsageOfAllIcons = () => {
|
|
46
|
+
const usedFileIcons: string[] = getAllUsedFileIcons();
|
|
47
|
+
const usedFolderIcons: string[] = getAllUsedFolderIcons();
|
|
48
|
+
const usedLanguageIcons: string[] = getAllUsedLanguageIcons();
|
|
49
|
+
|
|
50
|
+
[...usedFileIcons, ...usedFolderIcons, ...usedLanguageIcons].forEach(
|
|
51
|
+
(icon) => {
|
|
52
|
+
delete availableIcons[icon];
|
|
53
|
+
}
|
|
54
|
+
);
|
|
55
|
+
};
|
|
56
|
+
|
|
57
|
+
const handleErrors = () => {
|
|
58
|
+
const amountOfUnusedIcons = Object.keys(availableIcons).length;
|
|
59
|
+
if (amountOfUnusedIcons === 0) {
|
|
60
|
+
console.log(
|
|
61
|
+
'> Material Icon Theme:',
|
|
62
|
+
painter.green('Passed icon usage checks!')
|
|
63
|
+
);
|
|
64
|
+
} else {
|
|
65
|
+
console.log(
|
|
66
|
+
'> Material Icon Theme: ' +
|
|
67
|
+
painter.red(`${amountOfUnusedIcons} unused icon(s):`)
|
|
68
|
+
);
|
|
69
|
+
Object.keys(availableIcons).forEach((icon) => {
|
|
70
|
+
console.log(painter.red(`- ${availableIcons[icon]}`));
|
|
71
|
+
});
|
|
72
|
+
throw new Error('Found unused icon files!');
|
|
73
|
+
}
|
|
74
|
+
};
|
|
75
|
+
|
|
76
|
+
// read from the file system
|
|
77
|
+
export const check = () => fs.readdir(folderPath, fsReadAllIconFiles);
|
|
78
|
+
|
|
79
|
+
const getAllUsedFileIcons = (): string[] => {
|
|
80
|
+
return [
|
|
81
|
+
fileIcons.defaultIcon.name,
|
|
82
|
+
fileIcons.defaultIcon.light
|
|
83
|
+
? fileIcons.defaultIcon.name + lightColorFileEnding
|
|
84
|
+
: '',
|
|
85
|
+
fileIcons.defaultIcon.highContrast
|
|
86
|
+
? fileIcons.defaultIcon.name + highContrastColorFileEnding
|
|
87
|
+
: '',
|
|
88
|
+
...fileIcons.icons.map((icon) => icon.name),
|
|
89
|
+
...fileIcons.icons
|
|
90
|
+
.filter((icon) => icon.light)
|
|
91
|
+
.map((icon) => icon.name + lightColorFileEnding),
|
|
92
|
+
...fileIcons.icons
|
|
93
|
+
.filter((icon) => icon.highContrast)
|
|
94
|
+
.map((icon) => icon.name + highContrastColorFileEnding),
|
|
95
|
+
].filter((f) => f !== '');
|
|
96
|
+
};
|
|
97
|
+
|
|
98
|
+
const getAllUsedFolderIcons = (): string[] => {
|
|
99
|
+
const icons = folderIcons
|
|
100
|
+
.map((theme) => (theme.name === 'none' ? [] : getAllFolderIcons(theme)))
|
|
101
|
+
.reduce((a, b) => a.concat(b));
|
|
102
|
+
return icons
|
|
103
|
+
.map((icon) => {
|
|
104
|
+
return [
|
|
105
|
+
icon.name,
|
|
106
|
+
icon.name + openedFolder,
|
|
107
|
+
icon.light ? icon.name + lightColorFileEnding : '',
|
|
108
|
+
icon.light ? icon.name + openedFolder + lightColorFileEnding : '',
|
|
109
|
+
icon.highContrast ? icon.name + highContrastColorFileEnding : '',
|
|
110
|
+
icon.highContrast
|
|
111
|
+
? icon.name + openedFolder + highContrastColorFileEnding
|
|
112
|
+
: '',
|
|
113
|
+
];
|
|
114
|
+
})
|
|
115
|
+
.filter((icon) => icon !== undefined)
|
|
116
|
+
.reduce((a, b) => a.concat(b));
|
|
117
|
+
};
|
|
118
|
+
|
|
119
|
+
const getAllFolderIcons = (
|
|
120
|
+
theme: FolderTheme
|
|
121
|
+
): (FolderIcon | DefaultIcon)[] => {
|
|
122
|
+
const icons = theme.icons || [];
|
|
123
|
+
const allFolderIcons = [theme.defaultIcon, ...icons];
|
|
124
|
+
if (theme.rootFolder) {
|
|
125
|
+
allFolderIcons.push(theme.rootFolder);
|
|
126
|
+
}
|
|
127
|
+
return allFolderIcons;
|
|
128
|
+
};
|
|
129
|
+
|
|
130
|
+
const getAllUsedLanguageIcons = (): string[] => {
|
|
131
|
+
const icons = [
|
|
132
|
+
...languageIcons.map((lang) => lang.icon.name),
|
|
133
|
+
...languageIcons
|
|
134
|
+
.filter((lang) => lang.icon.light)
|
|
135
|
+
.map((lang) => lang.icon.name + lightColorFileEnding),
|
|
136
|
+
...languageIcons
|
|
137
|
+
.filter((lang) => lang.icon.highContrast)
|
|
138
|
+
.map((lang) => lang.icon.name + highContrastColorFileEnding),
|
|
139
|
+
];
|
|
140
|
+
return icons;
|
|
141
|
+
};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import * as checkAvailability from './checkIconAvailability';
|
|
2
|
-
import * as checkIconConflicts from './checkIconConflicts';
|
|
3
|
-
import * as checkIconUsage from './checkIconUsage';
|
|
4
|
-
|
|
5
|
-
checkAvailability.check();
|
|
6
|
-
checkIconUsage.check();
|
|
7
|
-
checkIconConflicts.check();
|
|
1
|
+
import * as checkAvailability from './checkIconAvailability';
|
|
2
|
+
import * as checkIconConflicts from './checkIconConflicts';
|
|
3
|
+
import * as checkIconUsage from './checkIconUsage';
|
|
4
|
+
|
|
5
|
+
checkAvailability.check();
|
|
6
|
+
checkIconUsage.check();
|
|
7
|
+
checkIconConflicts.check();
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* This file is meant to be executed exclusively by npm scripts.
|
|
3
|
-
*/
|
|
4
|
-
import { createIconFile } from './../../icons/index';
|
|
5
|
-
|
|
6
|
-
try {
|
|
7
|
-
createIconFile();
|
|
8
|
-
} catch (error) {
|
|
9
|
-
console.error(error);
|
|
10
|
-
throw Error('Could not create icon file!');
|
|
11
|
-
}
|
|
1
|
+
/**
|
|
2
|
+
* This file is meant to be executed exclusively by npm scripts.
|
|
3
|
+
*/
|
|
4
|
+
import { createIconFile } from './../../icons/index';
|
|
5
|
+
|
|
6
|
+
try {
|
|
7
|
+
createIconFile();
|
|
8
|
+
} catch (error) {
|
|
9
|
+
console.error(error);
|
|
10
|
+
throw Error('Could not create icon file!');
|
|
11
|
+
}
|