material-icon-theme 4.20.0 → 4.22.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/.vscodeignore +2 -1
- package/CHANGELOG.md +54 -0
- package/README.md +7 -16
- package/icons/actionscript.svg +1 -1
- package/icons/android.svg +1 -1
- package/icons/antlr.svg +1 -0
- package/icons/architecture.svg +1 -5
- package/icons/asciidoc.svg +1 -1
- package/icons/assembly.svg +1 -1
- package/icons/astyle.svg +1 -4
- package/icons/aurelia.svg +1 -1
- package/icons/auto.svg +1 -10
- package/icons/auto_light.svg +1 -10
- package/icons/autohotkey.svg +1 -1
- package/icons/autoit.svg +1 -1
- package/icons/azure-pipelines.svg +1 -1
- package/icons/azure.svg +1 -10
- package/icons/ballerina.svg +1 -1
- package/icons/bazel.svg +1 -1
- package/icons/bitbucket.svg +1 -1
- package/icons/blink.svg +1 -1
- package/icons/blink_light.svg +1 -1
- package/icons/blitz.svg +1 -4
- package/icons/brainfuck.svg +1 -1
- package/icons/buck.svg +1 -1
- package/icons/bucklescript.svg +1 -1
- package/icons/buildkite.svg +1 -9
- package/icons/caddy.svg +1 -0
- package/icons/cadence.svg +1 -0
- package/icons/cloudfoundry.svg +1 -1
- package/icons/coala.svg +1 -1
- package/icons/codecov.svg +1 -1
- package/icons/coldfusion.svg +1 -1
- package/icons/commitlint.svg +1 -1
- package/icons/crystal.svg +1 -1
- package/icons/crystal_light.svg +1 -1
- package/icons/cucumber.svg +1 -1
- package/icons/cuda.svg +1 -1
- package/icons/cypress.svg +1 -4
- package/icons/dart_generated.svg +1 -9
- package/icons/dependabot.svg +1 -4
- package/icons/dinophp.svg +1 -16
- package/icons/docker.svg +1 -1
- package/icons/drawio.svg +1 -1
- package/icons/drone.svg +1 -1
- package/icons/drone_light.svg +1 -1
- package/icons/editorconfig.svg +1 -1
- package/icons/elm.svg +1 -1
- package/icons/figma.svg +1 -10
- package/icons/folder-angular-open.svg +1 -2
- package/icons/folder-angular.svg +1 -2
- package/icons/folder-ansible-open.svg +1 -1
- package/icons/folder-ansible.svg +1 -1
- package/icons/folder-apollo.svg +1 -1
- package/icons/folder-aurelia-open.svg +1 -1
- package/icons/folder-aurelia.svg +1 -1
- package/icons/folder-bower-open.svg +1 -1
- package/icons/folder-bower.svg +1 -1
- package/icons/folder-buildkite-open.svg +1 -9
- package/icons/folder-buildkite.svg +1 -8
- package/icons/folder-cart-open.svg +1 -1
- package/icons/folder-cart.svg +1 -1
- package/icons/folder-ci-open.svg +1 -1
- package/icons/folder-ci.svg +1 -1
- package/icons/folder-cobol-open.svg +1 -1
- package/icons/folder-cobol.svg +1 -1
- package/icons/folder-config-open.svg +1 -1
- package/icons/folder-config.svg +1 -1
- package/icons/folder-container-open.svg +1 -1
- package/icons/folder-container.svg +1 -1
- package/icons/folder-controller-open.svg +1 -1
- package/icons/folder-controller.svg +1 -1
- package/icons/folder-cypress-open.svg +1 -5
- package/icons/folder-cypress.svg +1 -5
- package/icons/folder-decorators-open.svg +2 -0
- package/icons/folder-decorators.svg +5 -0
- package/icons/folder-docker-open.svg +1 -1
- package/icons/folder-docker.svg +1 -1
- package/icons/folder-expo.svg +1 -1
- package/icons/folder-fastlane-open.svg +1 -1
- package/icons/folder-fastlane.svg +1 -1
- package/icons/folder-generator-open.svg +1 -1
- package/icons/folder-generator.svg +1 -1
- package/icons/folder-gitlab-open.svg +1 -2
- package/icons/folder-gitlab.svg +1 -2
- package/icons/folder-gradle-open.svg +1 -1
- package/icons/folder-gradle.svg +1 -1
- package/icons/folder-helper-open.svg +1 -1
- package/icons/folder-helper.svg +1 -1
- package/icons/folder-ios-open.svg +1 -1
- package/icons/folder-ios.svg +1 -1
- package/icons/folder-java-open.svg +1 -2
- package/icons/folder-java.svg +1 -2
- package/icons/folder-kubernetes-open.svg +1 -1
- package/icons/folder-kubernetes.svg +1 -1
- package/icons/folder-less-open.svg +1 -1
- package/icons/folder-less.svg +1 -1
- package/icons/folder-lib-open.svg +1 -1
- package/icons/folder-lib.svg +1 -1
- package/icons/folder-lua-open.svg +1 -1
- package/icons/folder-lua.svg +1 -1
- package/icons/folder-markdown-open.svg +1 -1
- package/icons/folder-markdown.svg +1 -1
- package/icons/folder-mjml.svg +1 -1
- package/icons/folder-netlify-open.svg +1 -0
- package/icons/folder-netlify.svg +1 -0
- package/icons/folder-next-open.svg +1 -2
- package/icons/folder-next.svg +1 -2
- package/icons/folder-nuxt-open.svg +1 -2
- package/icons/folder-nuxt.svg +1 -2
- package/icons/folder-pdf-open.svg +1 -0
- package/icons/folder-pdf.svg +1 -0
- package/icons/folder-php-open.svg +1 -1
- package/icons/folder-php.svg +1 -1
- package/icons/folder-pipe.svg +1 -1
- package/icons/folder-proto-open.svg +1 -0
- package/icons/folder-proto.svg +1 -0
- package/icons/folder-public-open.svg +1 -1
- package/icons/folder-python-open.svg +1 -1
- package/icons/folder-python.svg +1 -1
- package/icons/folder-queue-open.svg +1 -2
- package/icons/folder-queue.svg +1 -2
- package/icons/folder-react-components-open.svg +1 -1
- package/icons/folder-react-components.svg +1 -1
- package/icons/folder-redux-actions-open.svg +1 -1
- package/icons/folder-redux-actions.svg +1 -1
- package/icons/folder-redux-reducer-open.svg +1 -1
- package/icons/folder-redux-reducer.svg +1 -1
- package/icons/folder-redux-selector-open.svg +1 -1
- package/icons/folder-redux-selector.svg +1 -1
- package/icons/folder-redux-store-open.svg +1 -1
- package/icons/folder-redux-store.svg +1 -1
- package/icons/folder-resolver-open.svg +1 -2
- package/icons/folder-resolver.svg +1 -2
- package/icons/folder-resource-open.svg +1 -1
- package/icons/folder-resource.svg +1 -1
- package/icons/folder-sass-open.svg +1 -1
- package/icons/folder-sass.svg +1 -1
- package/icons/folder-scala-open.svg +1 -1
- package/icons/folder-scala.svg +1 -1
- package/icons/folder-server-open.svg +1 -1
- package/icons/folder-server.svg +1 -1
- package/icons/folder-serverless-open.svg +1 -5
- package/icons/folder-serverless.svg +1 -5
- package/icons/folder-shader-open.svg +1 -8
- package/icons/folder-shader.svg +1 -7
- package/icons/folder-src-open.svg +1 -1
- package/icons/folder-src.svg +1 -1
- package/icons/folder-stencil-open.svg +1 -1
- package/icons/folder-stencil.svg +1 -1
- package/icons/folder-supabase-open.svg +5 -0
- package/icons/folder-supabase.svg +2 -0
- package/icons/folder-svelte-open.svg +1 -1
- package/icons/folder-target-open.svg +1 -2
- package/icons/folder-target.svg +1 -2
- package/icons/folder-terraform-open.svg +1 -1
- package/icons/folder-terraform.svg +1 -1
- package/icons/folder-typescript-open.svg +1 -1
- package/icons/folder-typescript.svg +1 -1
- package/icons/folder-unity-open.svg +1 -2
- package/icons/folder-unity.svg +1 -2
- package/icons/folder-vercel-open.svg +1 -4
- package/icons/folder-vercel.svg +1 -4
- package/icons/folder-verdaccio-open.svg +1 -8
- package/icons/folder-verdaccio.svg +1 -8
- package/icons/folder-vue-directives-open.svg +1 -1
- package/icons/folder-vue-directives.svg +1 -1
- package/icons/folder-vue-open.svg +1 -1
- package/icons/folder-vue.svg +1 -1
- package/icons/folder-vuepress-open.svg +1 -1
- package/icons/folder-wakatime-open.svg +1 -1
- package/icons/folder-wakatime.svg +1 -1
- package/icons/folder-wordpress-open.svg +1 -1
- package/icons/folder-wordpress.svg +1 -1
- package/icons/forth.svg +1 -1
- package/icons/foxpro.svg +1 -1
- package/icons/fusebox.svg +1 -1
- package/icons/gatsby.svg +1 -1
- package/icons/gcp.svg +1 -1
- package/icons/gitlab.svg +1 -1
- package/icons/gleam.svg +1 -4
- package/icons/go-mod.svg +1 -1
- package/icons/go.svg +1 -1
- package/icons/graphcool.svg +1 -1
- package/icons/graphql.svg +1 -1
- package/icons/gridsome.svg +1 -4
- package/icons/grunt.svg +1 -1
- package/icons/hack.svg +1 -1
- package/icons/haml.svg +1 -1
- package/icons/hardhat.svg +1 -4
- package/icons/helm.svg +1 -1
- package/icons/heroku.svg +1 -1
- package/icons/hex.svg +1 -1
- package/icons/idris.svg +1 -1
- package/icons/jenkins.svg +1 -1
- package/icons/jest.svg +1 -1
- package/icons/jinja.svg +1 -1
- package/icons/jinja_light.svg +1 -1
- package/icons/kivy.svg +1 -1
- package/icons/kl.svg +1 -1
- package/icons/kusto.svg +1 -1
- package/icons/laravel.svg +1 -1
- package/icons/less.svg +1 -1
- package/icons/lighthouse.svg +1 -3
- package/icons/livescript.svg +1 -1
- package/icons/mdsvex.svg +1 -5
- package/icons/merlin.svg +1 -1
- package/icons/mjml.svg +1 -1
- package/icons/mocha.svg +1 -1
- package/icons/modernizr.svg +1 -1
- package/icons/nano-staged.svg +1 -0
- package/icons/nano-staged_light.svg +1 -0
- package/icons/ndst.svg +1 -7
- package/icons/netlify.svg +1 -1
- package/icons/next.svg +1 -3
- package/icons/next_light.svg +1 -3
- package/icons/npm.svg +1 -1
- package/icons/nrwl.svg +1 -1
- package/icons/nunjucks.svg +1 -1
- package/icons/nuxt.svg +1 -5
- package/icons/odin.svg +1 -6
- package/icons/otne.svg +1 -16
- package/icons/parcel.svg +1 -4
- package/icons/pdf.svg +1 -1
- package/icons/percy.svg +1 -1
- package/icons/pinejs.svg +1 -0
- package/icons/playwright.svg +1 -7
- package/icons/plop.svg +1 -4
- package/icons/pnpm.svg +1 -9
- package/icons/pnpm_light.svg +1 -7
- package/icons/poetry.svg +1 -1
- package/icons/postcss.svg +1 -1
- package/icons/posthtml.svg +1 -1
- package/icons/processing.svg +1 -10
- package/icons/prolog.svg +1 -1
- package/icons/protractor.svg +1 -1
- package/icons/pug.svg +1 -1
- package/icons/puppet.svg +1 -1
- package/icons/purescript.svg +1 -1
- package/icons/python.svg +1 -1
- package/icons/racket.svg +1 -1
- package/icons/red.svg +1 -1
- package/icons/remix.svg +1 -4
- package/icons/remix_light.svg +1 -4
- package/icons/replit.svg +1 -1
- package/icons/rescript-interface.svg +1 -5
- package/icons/restql.svg +1 -1
- package/icons/roadmap.svg +1 -1
- package/icons/robot.svg +1 -1
- package/icons/rollup.svg +1 -1
- package/icons/rome.svg +1 -5
- package/icons/rubocop.svg +1 -1
- package/icons/rubocop_light.svg +1 -1
- package/icons/ruby.svg +1 -1
- package/icons/san.svg +1 -1
- package/icons/sass.svg +1 -1
- package/icons/scala.svg +1 -1
- package/icons/sequelize.svg +1 -1
- package/icons/serverless.svg +1 -4
- package/icons/shader.svg +1 -4
- package/icons/silverstripe.svg +1 -1
- package/icons/siyuan.svg +1 -9
- package/icons/sketch.svg +1 -1
- package/icons/snyk.svg +1 -1
- package/icons/sonarcloud.svg +4 -0
- package/icons/steadybit.svg +1 -1
- package/icons/stencil.svg +1 -1
- package/icons/stitches.svg +1 -1
- package/icons/stitches_light.svg +1 -1
- package/icons/stylable.svg +10 -0
- package/icons/supabase.svg +4 -0
- package/icons/svgr.svg +1 -4
- package/icons/tauri.svg +1 -9
- package/icons/template.svg +1 -4
- package/icons/tobi.svg +1 -4
- package/icons/tobimake.svg +1 -14
- package/icons/tree.svg +1 -2
- package/icons/tsconfig.svg +1 -1
- package/icons/turborepo.svg +1 -12
- package/icons/turborepo_light.svg +1 -12
- package/icons/twine.svg +1 -1
- package/icons/vagrant.svg +1 -1
- package/icons/verdaccio.svg +1 -5
- package/icons/vscode.svg +1 -1
- package/icons/vue-config.svg +1 -1
- package/icons/vue.svg +1 -1
- package/icons/webhint.svg +1 -1
- package/icons/zig.svg +1 -1
- package/images/contributors.png +0 -0
- package/images/fileIcons.png +0 -0
- package/images/folderIcons.png +0 -0
- package/package.json +2 -17
- package/package.nls.de.json +0 -3
- package/package.nls.es.json +0 -3
- package/package.nls.fr.json +0 -3
- package/package.nls.ja.json +0 -3
- package/package.nls.json +0 -3
- package/package.nls.nl.json +0 -3
- package/package.nls.pl.json +0 -3
- package/package.nls.pt-BR.json +0 -3
- package/package.nls.pt-PT.json +0 -3
- package/package.nls.ru.json +0 -3
- package/package.nls.zh-CN.json +0 -3
- package/package.nls.zh-TW.json +0 -3
- package/src/commands/activate.ts +11 -9
- package/src/commands/explorerArrows.ts +18 -18
- package/src/commands/folderColor.ts +12 -12
- package/src/commands/folders.ts +17 -17
- package/src/commands/grayscale.ts +17 -17
- package/src/commands/iconPacks.ts +12 -16
- package/src/commands/index.ts +5 -5
- package/src/commands/opacity.ts +8 -8
- package/src/commands/saturation.ts +8 -8
- package/src/extension.ts +8 -13
- package/src/helpers/customIcons.ts +2 -2
- package/src/helpers/index.ts +10 -22
- package/src/i18n/index.ts +2 -2
- package/src/i18n/lang-de.ts +0 -11
- package/src/i18n/lang-en.ts +5 -15
- package/src/i18n/lang-es.ts +0 -10
- package/src/i18n/lang-fr.ts +0 -10
- package/src/i18n/lang-ja.ts +0 -11
- package/src/i18n/lang-nl.ts +0 -11
- package/src/i18n/lang-pl.ts +0 -9
- package/src/i18n/lang-pt-br.ts +0 -10
- package/src/i18n/lang-pt-pt.ts +0 -10
- package/src/i18n/lang-ru.ts +0 -9
- package/src/i18n/lang-uk.ts +0 -11
- package/src/i18n/lang-zh-cn.ts +0 -9
- package/src/i18n/lang-zh-tw.ts +0 -9
- package/src/icons/fileIcons.ts +68 -4
- package/src/icons/folderIcons.ts +24 -1
- package/src/icons/generator/folderGenerator.ts +7 -7
- package/src/icons/generator/iconOpacity.ts +10 -10
- package/src/icons/generator/iconSaturation.ts +10 -10
- package/src/icons/generator/jsonGenerator.ts +21 -17
- package/src/icons/languageIcons.ts +4 -0
- package/src/models/i18n/translation.ts +0 -9
- package/src/models/iconConfiguration.ts +1 -1
- package/src/models/icons/iconJsonOptions.ts +0 -2
- package/src/models/index.ts +0 -1
- package/src/scripts/contributors/index.ts +14 -14
- package/src/scripts/helpers/screenshots.ts +4 -4
- package/src/scripts/icons/checks/checkIconAvailability.ts +12 -12
- package/src/scripts/icons/checks/checkIconConflicts.ts +6 -8
- package/src/scripts/icons/checks/checkIconUsage.ts +9 -13
- package/src/scripts/icons/checks/index.ts +6 -6
- package/src/scripts/preview/preview.ts +8 -10
- package/src/test/runTest.ts +3 -3
- package/src/test/spec/i18n/i18n.spec.ts +13 -20
- package/src/test/spec/icons/fileIcons.spec.ts +5 -5
- package/src/test/spec/icons/folderIcons.spec.ts +8 -8
- package/src/test/spec/icons/languageIcons.spec.ts +6 -6
- package/images/oneclickactivation.png +0 -0
- package/src/helpers/versioning.ts +0 -73
- package/src/messages/outdated.ts +0 -33
- package/src/messages/reload.ts +0 -32
- package/src/messages/start.ts +0 -12
- package/src/messages/update.ts +0 -48
- package/src/messages/welcome.ts +0 -47
- package/src/models/helpers/index.ts +0 -1
- package/src/models/helpers/themeStatus.ts +0 -5
|
@@ -1,6 +1,12 @@
|
|
|
1
|
-
import
|
|
1
|
+
import {
|
|
2
|
+
existsSync,
|
|
3
|
+
readdirSync,
|
|
4
|
+
renameSync,
|
|
5
|
+
unlinkSync,
|
|
6
|
+
writeFileSync,
|
|
7
|
+
} from 'fs';
|
|
2
8
|
import merge from 'lodash.merge';
|
|
3
|
-
import
|
|
9
|
+
import { basename, join } from 'path';
|
|
4
10
|
import { getCustomIconPaths } from '../../helpers/customIcons';
|
|
5
11
|
import { getFileConfigHash } from '../../helpers/fileConfig';
|
|
6
12
|
import { IconConfiguration, IconJsonOptions } from '../../models/index';
|
|
@@ -91,8 +97,8 @@ export const createIconFile = (
|
|
|
91
97
|
try {
|
|
92
98
|
let iconJsonPath = __dirname;
|
|
93
99
|
// if executed via script
|
|
94
|
-
if (
|
|
95
|
-
iconJsonPath =
|
|
100
|
+
if (basename(__dirname) !== 'dist') {
|
|
101
|
+
iconJsonPath = join(__dirname, '..', '..', '..', 'dist');
|
|
96
102
|
}
|
|
97
103
|
if (!updatedConfigs || (updatedConfigs.folders || {}).color) {
|
|
98
104
|
// if updatedConfigs do not exist (because of initial setup)
|
|
@@ -119,11 +125,11 @@ export const createIconFile = (
|
|
|
119
125
|
try {
|
|
120
126
|
let iconJsonPath = __dirname;
|
|
121
127
|
// if executed via script
|
|
122
|
-
if (
|
|
123
|
-
iconJsonPath =
|
|
128
|
+
if (basename(__dirname) !== 'dist') {
|
|
129
|
+
iconJsonPath = join(__dirname, '..', '..', '..', 'dist');
|
|
124
130
|
}
|
|
125
|
-
|
|
126
|
-
|
|
131
|
+
writeFileSync(
|
|
132
|
+
join(iconJsonPath, iconJsonName),
|
|
127
133
|
JSON.stringify(json, undefined, 2),
|
|
128
134
|
'utf-8'
|
|
129
135
|
);
|
|
@@ -149,8 +155,6 @@ export const getDefaultIconOptions = (): Required<IconJsonOptions> => ({
|
|
|
149
155
|
saturation: 1,
|
|
150
156
|
files: { associations: {} },
|
|
151
157
|
languages: { associations: {} },
|
|
152
|
-
showUpdateMessage: false,
|
|
153
|
-
showWelcomeMessage: false,
|
|
154
158
|
});
|
|
155
159
|
|
|
156
160
|
/**
|
|
@@ -160,27 +164,27 @@ export const getDefaultIconOptions = (): Required<IconJsonOptions> => ({
|
|
|
160
164
|
*/
|
|
161
165
|
const renameIconFiles = (iconJsonPath: string, options: IconJsonOptions) => {
|
|
162
166
|
const customPaths = getCustomIconPaths(options);
|
|
163
|
-
const defaultIconPath =
|
|
167
|
+
const defaultIconPath = join(iconJsonPath, '..', 'icons');
|
|
164
168
|
const iconPaths = [defaultIconPath, ...customPaths];
|
|
165
169
|
|
|
166
170
|
iconPaths.forEach((iconPath) => {
|
|
167
|
-
|
|
171
|
+
readdirSync(iconPath)
|
|
168
172
|
.filter((f) => f.match(/\.svg/gi))
|
|
169
173
|
.forEach((f) => {
|
|
170
|
-
const filePath =
|
|
174
|
+
const filePath = join(iconPath, f);
|
|
171
175
|
const fileConfigHash = getFileConfigHash(options);
|
|
172
176
|
|
|
173
177
|
// append file config to file name
|
|
174
|
-
const newFilePath =
|
|
178
|
+
const newFilePath = join(
|
|
175
179
|
iconPath,
|
|
176
180
|
f.replace(/(^[^\.~]+)(.*)\.svg/, `$1${fileConfigHash}.svg`)
|
|
177
181
|
);
|
|
178
182
|
|
|
179
183
|
// if generated files are already in place, do not overwrite them
|
|
180
|
-
if (filePath !== newFilePath &&
|
|
181
|
-
|
|
184
|
+
if (filePath !== newFilePath && existsSync(newFilePath)) {
|
|
185
|
+
unlinkSync(filePath);
|
|
182
186
|
} else {
|
|
183
|
-
|
|
187
|
+
renameSync(filePath, newFilePath);
|
|
184
188
|
}
|
|
185
189
|
});
|
|
186
190
|
});
|
|
@@ -134,4 +134,8 @@ export const languageIcons: LanguageIcon[] = [
|
|
|
134
134
|
{ icon: { name: 'wolframlanguage' }, ids: ['wolfram'] },
|
|
135
135
|
{ icon: { name: 'shader' }, ids: ['hlsl', 'glsl', 'wgsl'] },
|
|
136
136
|
{ icon: { name: 'tree' }, ids: ['tree'] },
|
|
137
|
+
{ icon: { name: 'svelte' }, ids: ['svelte'] },
|
|
138
|
+
{ icon: { name: 'dart' }, ids: ['dart'] },
|
|
139
|
+
{ icon: { name: 'cadence' }, ids: ['cadence'] },
|
|
140
|
+
{ icon: { name: 'stylable' }, ids: ['stylable'] },
|
|
137
141
|
];
|
|
@@ -1,11 +1,6 @@
|
|
|
1
1
|
export interface Translation {
|
|
2
|
-
themeInstalled: string;
|
|
3
|
-
howToActivate: string;
|
|
4
2
|
activate: string;
|
|
5
3
|
activated: string;
|
|
6
|
-
neverShowAgain: string;
|
|
7
|
-
themeUpdated: string;
|
|
8
|
-
readChangelog: string;
|
|
9
4
|
iconPacks: {
|
|
10
5
|
selectPack: string;
|
|
11
6
|
description: string;
|
|
@@ -34,10 +29,6 @@ export interface Translation {
|
|
|
34
29
|
enable: string;
|
|
35
30
|
disable: string;
|
|
36
31
|
};
|
|
37
|
-
confirmReload: string;
|
|
38
|
-
reload: string;
|
|
39
|
-
outdatedVersion: string;
|
|
40
|
-
updateVSCode: string;
|
|
41
32
|
grayscale: {
|
|
42
33
|
toggle: string;
|
|
43
34
|
enable: string;
|
package/src/models/index.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
3
|
-
import
|
|
1
|
+
import { writeFileSync } from 'fs';
|
|
2
|
+
import { request, RequestOptions } from 'https';
|
|
3
|
+
import { join } from 'path';
|
|
4
4
|
import { Contributor } from '../../models/scripts/contributors/contributor';
|
|
5
|
-
import
|
|
5
|
+
import { green, red, yellow } from '../helpers/painter';
|
|
6
6
|
import { createScreenshot } from '../helpers/screenshots';
|
|
7
7
|
|
|
8
8
|
/**
|
|
@@ -29,7 +29,7 @@ const fetchContributors = (
|
|
|
29
29
|
page: string
|
|
30
30
|
): Promise<{ contributorsOfPage: Contributor[]; nextPage: string }> => {
|
|
31
31
|
return new Promise((resolve, reject) => {
|
|
32
|
-
const requestOptions:
|
|
32
|
+
const requestOptions: RequestOptions = {
|
|
33
33
|
method: 'GET',
|
|
34
34
|
hostname: 'api.github.com',
|
|
35
35
|
path: `/repos/pkief/vscode-material-icon-theme/contributors?page=${page}`,
|
|
@@ -41,13 +41,13 @@ const fetchContributors = (
|
|
|
41
41
|
},
|
|
42
42
|
};
|
|
43
43
|
|
|
44
|
-
const req =
|
|
44
|
+
const req = request(requestOptions, (res) => {
|
|
45
45
|
const { nextPage, lastPage, prevPage } = parseLinkHeader(
|
|
46
46
|
res.headers?.link?.toString() ?? ''
|
|
47
47
|
);
|
|
48
48
|
console.log(
|
|
49
49
|
'> Material Icon Theme:',
|
|
50
|
-
|
|
50
|
+
yellow(
|
|
51
51
|
`[${page}/${
|
|
52
52
|
lastPage ? lastPage[1] : +prevPage[1] + 1
|
|
53
53
|
}] Loading contributors from GitHub...`
|
|
@@ -90,8 +90,8 @@ const createContributorsList = (contributors: Contributor[]) => {
|
|
|
90
90
|
const styling = '<link rel="stylesheet" href="contributors.css">';
|
|
91
91
|
const generatedHtml = `${htmlDoctype}${styling}<ul>${list}</ul>`;
|
|
92
92
|
|
|
93
|
-
const outputPath =
|
|
94
|
-
|
|
93
|
+
const outputPath = join(__dirname, 'contributors.html');
|
|
94
|
+
writeFileSync(outputPath, generatedHtml);
|
|
95
95
|
return outputPath;
|
|
96
96
|
};
|
|
97
97
|
|
|
@@ -109,29 +109,29 @@ const init = async () => {
|
|
|
109
109
|
if (contributorsList.length > 0) {
|
|
110
110
|
console.log(
|
|
111
111
|
'> Material Icon Theme:',
|
|
112
|
-
|
|
112
|
+
green('Successfully fetched all contributors from GitHub!')
|
|
113
113
|
);
|
|
114
114
|
} else {
|
|
115
115
|
console.log(
|
|
116
116
|
'> Material Icon Theme:',
|
|
117
|
-
|
|
117
|
+
red('Error: Could not fetch contributors from GitHub!')
|
|
118
118
|
);
|
|
119
119
|
throw Error();
|
|
120
120
|
}
|
|
121
121
|
const outputPath = createContributorsList(contributorsList);
|
|
122
122
|
|
|
123
123
|
// create the image
|
|
124
|
-
console.log('> Material Icon Theme:',
|
|
124
|
+
console.log('> Material Icon Theme:', yellow('Creating image...'));
|
|
125
125
|
const fileName = 'contributors';
|
|
126
126
|
createScreenshot(outputPath, fileName)
|
|
127
127
|
.then(() => {
|
|
128
128
|
console.log(
|
|
129
129
|
'> Material Icon Theme:',
|
|
130
|
-
|
|
130
|
+
green(`Successfully created ${fileName} image!`)
|
|
131
131
|
);
|
|
132
132
|
})
|
|
133
133
|
.catch(() => {
|
|
134
|
-
throw Error(
|
|
134
|
+
throw Error(red(`Error while creating ${fileName} image`));
|
|
135
135
|
});
|
|
136
136
|
};
|
|
137
137
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
1
|
+
import { join } from 'path';
|
|
2
|
+
import Puppeteer from 'puppeteer';
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
5
|
* Create a screenshot from an HTML file and save it as image.
|
|
@@ -8,8 +8,8 @@ import puppeteer from 'puppeteer';
|
|
|
8
8
|
*/
|
|
9
9
|
export const createScreenshot = async (filePath: string, fileName: string) => {
|
|
10
10
|
try {
|
|
11
|
-
const htmlFilePath =
|
|
12
|
-
const browser = await
|
|
11
|
+
const htmlFilePath = join('file:', filePath);
|
|
12
|
+
const browser = await Puppeteer.launch();
|
|
13
13
|
const page = await browser.newPage();
|
|
14
14
|
await page.setViewport({
|
|
15
15
|
height: 10,
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
1
|
+
import { readdir } from 'fs';
|
|
2
|
+
import { join, parse } from 'path';
|
|
3
3
|
import {
|
|
4
4
|
DefaultIcon,
|
|
5
5
|
FileIcon,
|
|
6
6
|
FolderIcon,
|
|
7
7
|
FolderTheme,
|
|
8
8
|
} from '../../../models/index';
|
|
9
|
-
import
|
|
9
|
+
import { green, red } from '../../helpers/painter';
|
|
10
10
|
import { similarity } from '../../helpers/similarity';
|
|
11
11
|
import {
|
|
12
12
|
fileIcons,
|
|
@@ -20,7 +20,7 @@ import {
|
|
|
20
20
|
/**
|
|
21
21
|
* Defines the folder where all icon files are located.
|
|
22
22
|
*/
|
|
23
|
-
const folderPath =
|
|
23
|
+
const folderPath = join('icons');
|
|
24
24
|
|
|
25
25
|
/**
|
|
26
26
|
* Defines an array with all icons that can be found in the file system.
|
|
@@ -49,7 +49,7 @@ const fsReadAllIconFiles = (
|
|
|
49
49
|
|
|
50
50
|
files.forEach((file) => {
|
|
51
51
|
const fileName = file;
|
|
52
|
-
const iconName =
|
|
52
|
+
const iconName = parse(file).name;
|
|
53
53
|
availableIcons[iconName] = fileName;
|
|
54
54
|
});
|
|
55
55
|
|
|
@@ -63,7 +63,7 @@ const fsReadAllIconFiles = (
|
|
|
63
63
|
};
|
|
64
64
|
|
|
65
65
|
// read from the file system
|
|
66
|
-
export const check = () =>
|
|
66
|
+
export const check = () => readdir(folderPath, fsReadAllIconFiles);
|
|
67
67
|
|
|
68
68
|
/**
|
|
69
69
|
* Check if the file icons from the configuration are available on the file system.
|
|
@@ -152,12 +152,12 @@ const handleErrors = () => {
|
|
|
152
152
|
if (amountOfErrors > 0) {
|
|
153
153
|
console.log(
|
|
154
154
|
'> Material Icon Theme:',
|
|
155
|
-
|
|
155
|
+
red(`Found ${amountOfErrors} error(s) in the icon configuration!`)
|
|
156
156
|
);
|
|
157
157
|
} else {
|
|
158
158
|
console.log(
|
|
159
159
|
'> Material Icon Theme:',
|
|
160
|
-
|
|
160
|
+
green('Passed icon availability checks!')
|
|
161
161
|
);
|
|
162
162
|
}
|
|
163
163
|
logIconInformation(wrongIconNames.fileIcons, 'File icons');
|
|
@@ -179,11 +179,11 @@ const logIconInformation = (wrongIcons: string[], title: string) => {
|
|
|
179
179
|
return similarity(icon, i) > 0.75;
|
|
180
180
|
});
|
|
181
181
|
const suggestionString = suggestion
|
|
182
|
-
? ` (Did you mean ${
|
|
182
|
+
? ` (Did you mean ${green(suggestion)}?)`
|
|
183
183
|
: '';
|
|
184
184
|
const isWrongLightVersion = icon.endsWith(lightColorFileEnding);
|
|
185
185
|
const isWrongLightVersionString = isWrongLightVersion
|
|
186
|
-
? ` (There is no light icon for ${
|
|
186
|
+
? ` (There is no light icon for ${green(
|
|
187
187
|
icon.slice(0, -6)
|
|
188
188
|
)}! Set the light option to false!)`
|
|
189
189
|
: '';
|
|
@@ -191,12 +191,12 @@ const logIconInformation = (wrongIcons: string[], title: string) => {
|
|
|
191
191
|
highContrastColorFileEnding
|
|
192
192
|
);
|
|
193
193
|
const isWrongHighContrastVersionString = isWrongHighContrastVersion
|
|
194
|
-
? ` (There is no high contrast icon for ${
|
|
194
|
+
? ` (There is no high contrast icon for ${green(
|
|
195
195
|
icon.slice(0, -13)
|
|
196
196
|
)}! Set the highContrast option to false!)`
|
|
197
197
|
: '';
|
|
198
198
|
console.log(
|
|
199
|
-
|
|
199
|
+
red(`Icon not found: ${icon}.svg`) +
|
|
200
200
|
`${suggestionString}${isWrongLightVersionString}${isWrongHighContrastVersionString}`
|
|
201
201
|
);
|
|
202
202
|
});
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { green, red } from '../../helpers/painter';
|
|
2
2
|
import { fileIcons, folderIcons, languageIcons } from './../../../icons';
|
|
3
3
|
|
|
4
4
|
/**
|
|
@@ -119,22 +119,20 @@ const handleErrors = () => {
|
|
|
119
119
|
...Object.keys(allConflicts.languageIcons),
|
|
120
120
|
].length > 0
|
|
121
121
|
) {
|
|
122
|
-
console.log('> Material Icon Theme:',
|
|
123
|
-
console.log(
|
|
122
|
+
console.log('> Material Icon Theme:', red('Icon conflicts:'));
|
|
123
|
+
console.log(red('--------------------------------------'));
|
|
124
124
|
|
|
125
125
|
printErrorMessage(allConflicts.fileIcons.fileExtensions, 'fileExtension');
|
|
126
126
|
printErrorMessage(allConflicts.fileIcons.fileNames, 'fileName');
|
|
127
127
|
printErrorMessage(allConflicts.folderIcons, 'folderName');
|
|
128
128
|
printErrorMessage(allConflicts.languageIcons, 'languageId');
|
|
129
129
|
|
|
130
|
-
console.log(
|
|
131
|
-
'\n' + painter.red('Please check the wrong icon configurations!\n')
|
|
132
|
-
);
|
|
130
|
+
console.log('\n' + red('Please check the wrong icon configurations!\n'));
|
|
133
131
|
process.exit(1);
|
|
134
132
|
} else {
|
|
135
133
|
console.log(
|
|
136
134
|
'> Material Icon Theme:',
|
|
137
|
-
|
|
135
|
+
green('Passed icon conflict checks!')
|
|
138
136
|
);
|
|
139
137
|
}
|
|
140
138
|
};
|
|
@@ -144,7 +142,7 @@ const printErrorMessage = (icons: any, definitionType: string) => {
|
|
|
144
142
|
keys.forEach((key) => {
|
|
145
143
|
const conflictIcons = icons[key];
|
|
146
144
|
console.log(
|
|
147
|
-
|
|
145
|
+
red(
|
|
148
146
|
`For ${definitionType} "${key}" are ${
|
|
149
147
|
conflictIcons.length
|
|
150
148
|
} icons defined: [${conflictIcons.join(', ')}]`
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
1
|
+
import { readdir } from 'fs';
|
|
2
|
+
import { join, parse } from 'path';
|
|
3
3
|
import { DefaultIcon, FolderIcon, FolderTheme } from '../../../models/index';
|
|
4
|
+
import { green, red } from '../../helpers/painter';
|
|
4
5
|
import {
|
|
5
6
|
fileIcons,
|
|
6
7
|
folderIcons,
|
|
@@ -9,12 +10,11 @@ import {
|
|
|
9
10
|
lightColorFileEnding,
|
|
10
11
|
openedFolder,
|
|
11
12
|
} from './../../../icons';
|
|
12
|
-
import * as painter from './../../helpers/painter';
|
|
13
13
|
|
|
14
14
|
/**
|
|
15
15
|
* Defines the folder where all icon files are located.
|
|
16
16
|
*/
|
|
17
|
-
const folderPath =
|
|
17
|
+
const folderPath = join('icons');
|
|
18
18
|
|
|
19
19
|
/**
|
|
20
20
|
* Defines an array with all icons that can be found in the file system.
|
|
@@ -34,7 +34,7 @@ const fsReadAllIconFiles = (
|
|
|
34
34
|
|
|
35
35
|
files.forEach((file) => {
|
|
36
36
|
const fileName = file;
|
|
37
|
-
const iconName =
|
|
37
|
+
const iconName = parse(file).name;
|
|
38
38
|
availableIcons[iconName] = fileName;
|
|
39
39
|
});
|
|
40
40
|
|
|
@@ -57,24 +57,20 @@ const checkUsageOfAllIcons = () => {
|
|
|
57
57
|
const handleErrors = () => {
|
|
58
58
|
const amountOfUnusedIcons = Object.keys(availableIcons).length;
|
|
59
59
|
if (amountOfUnusedIcons === 0) {
|
|
60
|
-
console.log(
|
|
61
|
-
'> Material Icon Theme:',
|
|
62
|
-
painter.green('Passed icon usage checks!')
|
|
63
|
-
);
|
|
60
|
+
console.log('> Material Icon Theme:', green('Passed icon usage checks!'));
|
|
64
61
|
} else {
|
|
65
62
|
console.log(
|
|
66
|
-
'> Material Icon Theme: ' +
|
|
67
|
-
painter.red(`${amountOfUnusedIcons} unused icon(s):`)
|
|
63
|
+
'> Material Icon Theme: ' + red(`${amountOfUnusedIcons} unused icon(s):`)
|
|
68
64
|
);
|
|
69
65
|
Object.keys(availableIcons).forEach((icon) => {
|
|
70
|
-
console.log(
|
|
66
|
+
console.log(red(`- ${availableIcons[icon]}`));
|
|
71
67
|
});
|
|
72
68
|
throw new Error('Found unused icon files!');
|
|
73
69
|
}
|
|
74
70
|
};
|
|
75
71
|
|
|
76
72
|
// read from the file system
|
|
77
|
-
export const check = () =>
|
|
73
|
+
export const check = () => readdir(folderPath, fsReadAllIconFiles);
|
|
78
74
|
|
|
79
75
|
const getAllUsedFileIcons = (): string[] => {
|
|
80
76
|
return [
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
3
|
-
import
|
|
1
|
+
import { check as checkAvailability } from './checkIconAvailability';
|
|
2
|
+
import { check as checkIconConflicts } from './checkIconConflicts';
|
|
3
|
+
import { check as checkIconUsage } from './checkIconUsage';
|
|
4
4
|
|
|
5
|
-
checkAvailability
|
|
6
|
-
checkIconUsage
|
|
7
|
-
checkIconConflicts
|
|
5
|
+
checkAvailability();
|
|
6
|
+
checkIconUsage();
|
|
7
|
+
checkIconConflicts();
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
1
|
+
import { writeFileSync } from 'fs';
|
|
2
|
+
import { join } from 'path';
|
|
3
|
+
import { green, red } from '../helpers/painter';
|
|
3
4
|
import { createScreenshot } from '../helpers/screenshots';
|
|
4
|
-
import * as painter from './../helpers/painter';
|
|
5
5
|
import { toTitleCase } from './../helpers/titleCase';
|
|
6
6
|
|
|
7
7
|
const htmlDoctype = '<!DOCTYPE html>';
|
|
8
|
-
const cssFilePath =
|
|
8
|
+
const cssFilePath = 'style.css';
|
|
9
9
|
const styling = `<link rel="stylesheet" href="${cssFilePath}">`;
|
|
10
10
|
|
|
11
11
|
const createHTMLTableHeadRow = (amount: number) => {
|
|
@@ -69,23 +69,21 @@ const savePreview = (
|
|
|
69
69
|
size: number,
|
|
70
70
|
icons: IconDefinition[][]
|
|
71
71
|
) => {
|
|
72
|
-
const filePath =
|
|
72
|
+
const filePath = join(__dirname, fileName + '.html');
|
|
73
73
|
|
|
74
74
|
// write the html file with the icon table
|
|
75
|
-
|
|
75
|
+
writeFileSync(filePath, createPreviewTable(icons, size));
|
|
76
76
|
|
|
77
77
|
// create the image
|
|
78
78
|
createScreenshot(filePath, fileName)
|
|
79
79
|
.then(() => {
|
|
80
80
|
console.log(
|
|
81
81
|
'> Material Icon Theme:',
|
|
82
|
-
|
|
82
|
+
green(`Successfully created ${fileName} preview image!`)
|
|
83
83
|
);
|
|
84
84
|
})
|
|
85
85
|
.catch(() => {
|
|
86
|
-
throw Error(
|
|
87
|
-
painter.red(`Error while creating ${fileName} preview image`)
|
|
88
|
-
);
|
|
86
|
+
throw Error(red(`Error while creating ${fileName} preview image`));
|
|
89
87
|
});
|
|
90
88
|
};
|
|
91
89
|
|
package/src/test/runTest.ts
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { resolve } from 'path';
|
|
2
2
|
import { runTests } from 'vscode-test';
|
|
3
3
|
|
|
4
4
|
const main = async () => {
|
|
5
5
|
try {
|
|
6
6
|
// The folder containing the Extension Manifest package.json
|
|
7
7
|
// Passed to `--extensionDevelopmentPath`
|
|
8
|
-
const extensionDevelopmentPath =
|
|
8
|
+
const extensionDevelopmentPath = resolve(__dirname, '../../');
|
|
9
9
|
|
|
10
10
|
// The path to the extension test script
|
|
11
11
|
// Passed to --extensionTestsPath
|
|
12
|
-
const extensionTestsPath =
|
|
12
|
+
const extensionTestsPath = resolve(__dirname, './spec/index');
|
|
13
13
|
|
|
14
14
|
// Download VS Code, unzip it and run the integration test
|
|
15
15
|
await runTests({
|
|
@@ -1,34 +1,30 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { equal } from 'assert';
|
|
2
2
|
import { getObjectPropertyValue } from '../../../helpers/objects';
|
|
3
|
-
import
|
|
3
|
+
import { getTranslationValue, initTranslations, replace } from '../../../i18n';
|
|
4
4
|
import { Translation } from '../../../models';
|
|
5
5
|
|
|
6
6
|
describe('i18n', () => {
|
|
7
7
|
it('should initialize translations', () => {
|
|
8
|
-
return
|
|
8
|
+
return initTranslations();
|
|
9
9
|
});
|
|
10
10
|
|
|
11
11
|
it('should translate key', () => {
|
|
12
|
-
|
|
13
|
-
|
|
12
|
+
equal(
|
|
13
|
+
getTranslationValue('activate', { activate: 'b' } as Translation),
|
|
14
14
|
'b'
|
|
15
15
|
);
|
|
16
16
|
});
|
|
17
17
|
|
|
18
18
|
it('should return undefined if translation is not defined', () => {
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
'activate',
|
|
22
|
-
{} as Translation,
|
|
23
|
-
{} as Translation
|
|
24
|
-
),
|
|
19
|
+
equal(
|
|
20
|
+
getTranslationValue('activate', {} as Translation, {} as Translation),
|
|
25
21
|
undefined
|
|
26
22
|
);
|
|
27
23
|
});
|
|
28
24
|
|
|
29
25
|
it('should use fallback if translation is not defined', () => {
|
|
30
|
-
|
|
31
|
-
|
|
26
|
+
equal(
|
|
27
|
+
getTranslationValue(
|
|
32
28
|
'activate',
|
|
33
29
|
{} as Translation,
|
|
34
30
|
{ activate: 'fb' } as Translation
|
|
@@ -45,16 +41,13 @@ describe('i18n', () => {
|
|
|
45
41
|
},
|
|
46
42
|
},
|
|
47
43
|
};
|
|
48
|
-
|
|
44
|
+
equal(getObjectPropertyValue(translation, 'a.b.c'), 'c');
|
|
49
45
|
});
|
|
50
46
|
|
|
51
47
|
it('should use placeholder in translation', () => {
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
'
|
|
55
|
-
);
|
|
56
|
-
assert.equal(
|
|
57
|
-
i18n.replace('%0 with %1', 'test', 'placeholder'),
|
|
48
|
+
equal(replace('%0 with placeholder', 'test'), 'test with placeholder');
|
|
49
|
+
equal(
|
|
50
|
+
replace('%0 with %1', 'test', 'placeholder'),
|
|
58
51
|
'test with placeholder'
|
|
59
52
|
);
|
|
60
53
|
});
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { deepStrictEqual } from 'assert';
|
|
2
2
|
import merge from 'lodash.merge';
|
|
3
3
|
import {
|
|
4
4
|
getDefaultIconOptions,
|
|
@@ -60,7 +60,7 @@ describe('file icons', () => {
|
|
|
60
60
|
'filename.js': 'javascript',
|
|
61
61
|
};
|
|
62
62
|
|
|
63
|
-
|
|
63
|
+
deepStrictEqual(iconDefinitions, expectedConfig);
|
|
64
64
|
});
|
|
65
65
|
|
|
66
66
|
it('should disable icon packs', () => {
|
|
@@ -108,7 +108,7 @@ describe('file icons', () => {
|
|
|
108
108
|
// disable default icon pack by using empty string
|
|
109
109
|
expectedConfig.options!.activeIconPack = '';
|
|
110
110
|
|
|
111
|
-
|
|
111
|
+
deepStrictEqual(iconDefinitions, expectedConfig);
|
|
112
112
|
});
|
|
113
113
|
|
|
114
114
|
it('should configure custom icon associations', () => {
|
|
@@ -165,7 +165,7 @@ describe('file icons', () => {
|
|
|
165
165
|
'sample.js': 'javascript',
|
|
166
166
|
};
|
|
167
167
|
|
|
168
|
-
|
|
168
|
+
deepStrictEqual(iconDefinitions, expectedConfig);
|
|
169
169
|
});
|
|
170
170
|
|
|
171
171
|
it('should configure language icons for light and high contrast', () => {
|
|
@@ -245,6 +245,6 @@ describe('file icons', () => {
|
|
|
245
245
|
'filename.js': 'javascript',
|
|
246
246
|
};
|
|
247
247
|
/* eslint-enable camelcase */
|
|
248
|
-
|
|
248
|
+
deepStrictEqual(iconDefinitions, expectedConfig);
|
|
249
249
|
});
|
|
250
250
|
});
|