material-icon-theme 4.18.0 → 4.20.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (208) hide show
  1. package/.eslintrc.json +51 -51
  2. package/.github/FUNDING.yml +3 -3
  3. package/.github/ISSUE_TEMPLATE/bug_report.md +34 -34
  4. package/.github/ISSUE_TEMPLATE/icon_request.md +27 -27
  5. package/.github/workflows/build.yml +45 -45
  6. package/.github/workflows/color-check.yml +22 -22
  7. package/.github/workflows/release.yml +73 -73
  8. package/.prettierrc +7 -7
  9. package/.vscode/extensions.json +3 -3
  10. package/.vscode/launch.json +43 -43
  11. package/.vscode/settings.json +14 -14
  12. package/.vscode/tasks.json +32 -32
  13. package/.vscodeignore +20 -20
  14. package/CHANGELOG.md +1213 -1171
  15. package/CONTRIBUTING.md +62 -62
  16. package/LICENSE.md +8 -8
  17. package/README.md +208 -208
  18. package/build/web-extension.webpack.config.js +62 -62
  19. package/build/webpack.config.js +39 -39
  20. package/changelog.config.json +4 -4
  21. package/icons/architecture.svg +4 -4
  22. package/icons/astyle.svg +4 -4
  23. package/icons/auto.svg +10 -0
  24. package/icons/auto_light.svg +10 -0
  25. package/icons/azure.svg +9 -9
  26. package/icons/blitz.svg +4 -4
  27. package/icons/buildkite.svg +8 -8
  28. package/icons/cypress.svg +4 -4
  29. package/icons/dart_generated.svg +9 -9
  30. package/icons/dependabot.svg +4 -4
  31. package/icons/dinophp.svg +16 -16
  32. package/icons/figma.svg +10 -10
  33. package/icons/folder-angular-open.svg +2 -2
  34. package/icons/folder-angular.svg +2 -2
  35. package/icons/folder-buildkite-open.svg +8 -8
  36. package/icons/folder-buildkite.svg +7 -7
  37. package/icons/folder-cypress-open.svg +5 -5
  38. package/icons/folder-cypress.svg +5 -5
  39. package/icons/folder-gitlab-open.svg +2 -1
  40. package/icons/folder-gitlab.svg +2 -1
  41. package/icons/folder-java-open.svg +2 -2
  42. package/icons/folder-java.svg +2 -2
  43. package/icons/folder-next-open.svg +2 -2
  44. package/icons/folder-next.svg +2 -2
  45. package/icons/folder-nuxt-open.svg +2 -2
  46. package/icons/folder-nuxt.svg +2 -2
  47. package/icons/folder-queue-open.svg +2 -2
  48. package/icons/folder-queue.svg +2 -2
  49. package/icons/folder-resolver-open.svg +2 -2
  50. package/icons/folder-resolver.svg +2 -2
  51. package/icons/folder-serverless-open.svg +5 -5
  52. package/icons/folder-serverless.svg +5 -5
  53. package/icons/folder-shader-open.svg +7 -7
  54. package/icons/folder-shader.svg +6 -6
  55. package/icons/folder-target-open.svg +2 -2
  56. package/icons/folder-target.svg +2 -2
  57. package/icons/folder-unity-open.svg +2 -2
  58. package/icons/folder-unity.svg +2 -2
  59. package/icons/folder-vercel-open.svg +4 -4
  60. package/icons/folder-vercel.svg +4 -4
  61. package/icons/folder-verdaccio-open.svg +8 -8
  62. package/icons/folder-verdaccio.svg +8 -8
  63. package/icons/gitlab.svg +1 -1
  64. package/icons/gleam.svg +4 -4
  65. package/icons/gridsome.svg +4 -4
  66. package/icons/hardhat.svg +3 -3
  67. package/icons/lighthouse.svg +2 -2
  68. package/icons/mdsvex.svg +5 -0
  69. package/icons/ndst.svg +7 -7
  70. package/icons/next.svg +3 -3
  71. package/icons/next_light.svg +2 -2
  72. package/icons/nuxt.svg +5 -5
  73. package/icons/odin.svg +6 -6
  74. package/icons/otne.svg +16 -16
  75. package/icons/parcel.svg +4 -4
  76. package/icons/playwright.svg +7 -7
  77. package/icons/plop.svg +4 -4
  78. package/icons/pnpm.svg +9 -9
  79. package/icons/pnpm_light.svg +7 -7
  80. package/icons/poetry.svg +1 -1
  81. package/icons/processing.svg +10 -10
  82. package/icons/remix.svg +4 -4
  83. package/icons/remix_light.svg +4 -4
  84. package/icons/rescript-interface.svg +5 -5
  85. package/icons/rome.svg +5 -5
  86. package/icons/serverless.svg +4 -4
  87. package/icons/shader.svg +4 -4
  88. package/icons/siyuan.svg +9 -9
  89. package/icons/steadybit.svg +1 -1
  90. package/icons/svgr.svg +4 -4
  91. package/icons/tauri.svg +9 -9
  92. package/icons/template.svg +4 -4
  93. package/icons/tobi.svg +4 -4
  94. package/icons/tobimake.svg +14 -14
  95. package/icons/tree.svg +2 -0
  96. package/icons/turborepo.svg +12 -12
  97. package/icons/turborepo_light.svg +12 -12
  98. package/icons/verdaccio.svg +5 -5
  99. package/images/contributors.png +0 -0
  100. package/images/fileIcons.png +0 -0
  101. package/images/folderIcons.png +0 -0
  102. package/logo.svg +21 -21
  103. package/material-colors.yml +257 -257
  104. package/package.json +267 -264
  105. package/package.nls.de.json +35 -35
  106. package/package.nls.es.json +32 -32
  107. package/package.nls.fr.json +32 -32
  108. package/package.nls.ja.json +35 -35
  109. package/package.nls.json +35 -35
  110. package/package.nls.nl.json +35 -35
  111. package/package.nls.pl.json +35 -35
  112. package/package.nls.pt-BR.json +32 -32
  113. package/package.nls.pt-PT.json +32 -32
  114. package/package.nls.ru.json +32 -32
  115. package/package.nls.zh-CN.json +32 -32
  116. package/package.nls.zh-TW.json +32 -32
  117. package/src/commands/activate.ts +26 -26
  118. package/src/commands/explorerArrows.ts +55 -55
  119. package/src/commands/folderColor.ts +96 -96
  120. package/src/commands/folders.ts +55 -55
  121. package/src/commands/grayscale.ts +55 -55
  122. package/src/commands/iconPacks.ts +68 -68
  123. package/src/commands/index.ts +30 -30
  124. package/src/commands/opacity.ts +46 -46
  125. package/src/commands/restoreConfig.ts +14 -14
  126. package/src/commands/saturation.ts +46 -46
  127. package/src/extension.ts +42 -42
  128. package/src/helpers/changeDetection.ts +109 -73
  129. package/src/helpers/customIcons.ts +8 -8
  130. package/src/helpers/fileConfig.ts +37 -37
  131. package/src/helpers/index.ts +100 -100
  132. package/src/helpers/objects.ts +58 -58
  133. package/src/helpers/types.ts +7 -7
  134. package/src/helpers/versioning.ts +73 -73
  135. package/src/i18n/index.ts +78 -78
  136. package/src/i18n/lang-de.ts +54 -54
  137. package/src/i18n/lang-en.ts +53 -53
  138. package/src/i18n/lang-es.ts +53 -53
  139. package/src/i18n/lang-fr.ts +53 -53
  140. package/src/i18n/lang-ja.ts +54 -54
  141. package/src/i18n/lang-nl.ts +54 -54
  142. package/src/i18n/lang-pl.ts +52 -52
  143. package/src/i18n/lang-pt-br.ts +53 -53
  144. package/src/i18n/lang-pt-pt.ts +53 -53
  145. package/src/i18n/lang-ru.ts +52 -52
  146. package/src/i18n/lang-uk.ts +54 -54
  147. package/src/i18n/lang-zh-cn.ts +52 -52
  148. package/src/i18n/lang-zh-tw.ts +52 -52
  149. package/src/icons/fileIcons.ts +2095 -2046
  150. package/src/icons/folderIcons.ts +781 -773
  151. package/src/icons/generator/constants.ts +29 -29
  152. package/src/icons/generator/fileGenerator.ts +216 -216
  153. package/src/icons/generator/folderGenerator.ts +340 -340
  154. package/src/icons/generator/iconOpacity.ts +111 -111
  155. package/src/icons/generator/iconSaturation.ts +140 -140
  156. package/src/icons/generator/index.ts +7 -7
  157. package/src/icons/generator/jsonGenerator.ts +187 -187
  158. package/src/icons/generator/languageGenerator.ts +127 -127
  159. package/src/icons/index.ts +4 -4
  160. package/src/icons/languageIcons.ts +137 -136
  161. package/src/messages/outdated.ts +33 -33
  162. package/src/messages/reload.ts +32 -32
  163. package/src/messages/start.ts +12 -12
  164. package/src/messages/update.ts +48 -48
  165. package/src/messages/welcome.ts +47 -47
  166. package/src/models/helpers/index.ts +1 -1
  167. package/src/models/helpers/themeStatus.ts +5 -5
  168. package/src/models/i18n/index.ts +1 -1
  169. package/src/models/i18n/translation.ts +50 -50
  170. package/src/models/iconConfiguration.ts +37 -37
  171. package/src/models/icons/defaultIcon.ts +16 -16
  172. package/src/models/icons/files/fileIcon.ts +49 -49
  173. package/src/models/icons/files/fileTypes.ts +14 -14
  174. package/src/models/icons/files/index.ts +2 -2
  175. package/src/models/icons/folders/folderIcon.ts +34 -34
  176. package/src/models/icons/folders/folderTheme.ts +23 -23
  177. package/src/models/icons/folders/index.ts +2 -2
  178. package/src/models/icons/iconJsonOptions.ts +23 -23
  179. package/src/models/icons/iconPack.ts +12 -12
  180. package/src/models/icons/index.ts +6 -6
  181. package/src/models/icons/languages/index.ts +1 -1
  182. package/src/models/icons/languages/languageIdentifier.ts +26 -26
  183. package/src/models/index.ts +4 -4
  184. package/src/models/scripts/contributors/contributor.ts +22 -22
  185. package/src/models/scripts/contributors/contributorsConfig.ts +10 -10
  186. package/src/scripts/contributors/contributors.css +24 -24
  187. package/src/scripts/contributors/index.ts +138 -138
  188. package/src/scripts/helpers/painter.ts +5 -5
  189. package/src/scripts/helpers/screenshots.ts +32 -32
  190. package/src/scripts/helpers/similarity.ts +47 -47
  191. package/src/scripts/helpers/titleCase.ts +7 -7
  192. package/src/scripts/icons/checks/checkIconAvailability.ts +215 -215
  193. package/src/scripts/icons/checks/checkIconConflicts.ts +154 -154
  194. package/src/scripts/icons/checks/checkIconUsage.ts +141 -141
  195. package/src/scripts/icons/checks/index.ts +7 -7
  196. package/src/scripts/icons/generateJson.ts +11 -11
  197. package/src/scripts/preview/index.ts +40 -40
  198. package/src/scripts/preview/preview.ts +165 -165
  199. package/src/scripts/preview/style.css +48 -48
  200. package/src/test/runTest.ts +26 -26
  201. package/src/test/spec/i18n/i18n.spec.ts +61 -61
  202. package/src/test/spec/icons/fileIcons.spec.ts +250 -250
  203. package/src/test/spec/icons/folderIcons.spec.ts +418 -418
  204. package/src/test/spec/icons/languageIcons.spec.ts +184 -184
  205. package/src/test/spec/index.ts +36 -36
  206. package/src/web/extension.ts +10 -10
  207. package/svgo.config.js +11 -11
  208. package/tsconfig.json +23 -23
@@ -1,10 +1,10 @@
1
- export interface ContributorsConfig {
2
- /** Owner of the repository */
3
- owner: string;
4
-
5
- /** Name of the repository */
6
- repo: string;
7
-
8
- /** Size of a contributor's profile image in pixels */
9
- imageSize: number;
10
- }
1
+ export interface ContributorsConfig {
2
+ /** Owner of the repository */
3
+ owner: string;
4
+
5
+ /** Name of the repository */
6
+ repo: string;
7
+
8
+ /** Size of a contributor's profile image in pixels */
9
+ imageSize: number;
10
+ }
@@ -1,24 +1,24 @@
1
- body {
2
- margin: 0;
3
- padding: 0;
4
- }
5
-
6
- ul {
7
- list-style: none;
8
- margin: 0;
9
- padding: 0;
10
- width: 100%;
11
- }
12
-
13
- li {
14
- width: 40px;
15
- height: 40px;
16
- float: left;
17
- margin: 3px;
18
- }
19
-
20
- img {
21
- width: 100%;
22
- height: 100%;
23
- border-radius: 5px;
24
- }
1
+ body {
2
+ margin: 0;
3
+ padding: 0;
4
+ }
5
+
6
+ ul {
7
+ list-style: none;
8
+ margin: 0;
9
+ padding: 0;
10
+ width: 100%;
11
+ }
12
+
13
+ li {
14
+ width: 40px;
15
+ height: 40px;
16
+ float: left;
17
+ margin: 3px;
18
+ }
19
+
20
+ img {
21
+ width: 100%;
22
+ height: 100%;
23
+ border-radius: 5px;
24
+ }
@@ -1,138 +1,138 @@
1
- import * as fs from 'fs';
2
- import * as https from 'https';
3
- import * as path from 'path';
4
- import { Contributor } from '../../models/scripts/contributors/contributor';
5
- import * as painter from '../helpers/painter';
6
- import { createScreenshot } from '../helpers/screenshots';
7
-
8
- /**
9
- * Parse link header
10
- * @param linkHeader Link header as string
11
- * @returns Object that contains the page numbers of `prev`, `next` and `last`.
12
- */
13
- const parseLinkHeader = (linkHeader: string) => {
14
- const nextPagePattern = new RegExp(/\bpage=(\d)[^>]*>;\srel="next"/);
15
- const lastPagePattern = new RegExp(/\bpage=(\d)[^>]*>;\srel="last"/);
16
- const prevPagePattern = new RegExp(/\bpage=(\d)[^>]*>;\srel="prev"/);
17
-
18
- const nextPage = nextPagePattern.exec(linkHeader) ?? '';
19
- const lastPage = lastPagePattern.exec(linkHeader) ?? '';
20
- const prevPage = prevPagePattern.exec(linkHeader) ?? '';
21
-
22
- return { nextPage, lastPage, prevPage };
23
- };
24
-
25
- /**
26
- * Get all contributors from GitHub API.
27
- */
28
- const fetchContributors = (
29
- page: string
30
- ): Promise<{ contributorsOfPage: Contributor[]; nextPage: string }> => {
31
- return new Promise((resolve, reject) => {
32
- const requestOptions: https.RequestOptions = {
33
- method: 'GET',
34
- hostname: 'api.github.com',
35
- path: `/repos/pkief/vscode-material-icon-theme/contributors?page=${page}`,
36
- port: 443,
37
- headers: {
38
- link: 'next',
39
- accept: 'application/json',
40
- 'User-Agent': 'Contributors script',
41
- },
42
- };
43
-
44
- const req = https.request(requestOptions, (res) => {
45
- const { nextPage, lastPage, prevPage } = parseLinkHeader(
46
- res.headers?.link?.toString() ?? ''
47
- );
48
- console.log(
49
- '> Material Icon Theme:',
50
- painter.yellow(
51
- `[${page}/${
52
- lastPage ? lastPage[1] : +prevPage[1] + 1
53
- }] Loading contributors from GitHub...`
54
- )
55
- );
56
- const result: Uint8Array[] = [];
57
- res.on('data', (data: Buffer) => {
58
- result.push(data);
59
- });
60
-
61
- res.on('end', () => {
62
- try {
63
- const buffer = Buffer.concat(result);
64
- const bufferAsString = buffer.toString('utf8');
65
- const contributorsOfPage = JSON.parse(bufferAsString);
66
- resolve({ contributorsOfPage, nextPage: nextPage?.[1] });
67
- } catch (error) {
68
- reject(error);
69
- }
70
- });
71
- });
72
-
73
- req.on('error', (error) => {
74
- console.error(error);
75
- reject(error);
76
- });
77
-
78
- req.end();
79
- });
80
- };
81
-
82
- const createContributorsList = (contributors: Contributor[]) => {
83
- const list = contributors
84
- .map((c) => {
85
- return `<li title="${c.login}"><img src="${c.avatar_url}" alt="${c.login}"/></li>`;
86
- })
87
- .join('\n');
88
-
89
- const htmlDoctype = '<!DOCTYPE html>';
90
- const styling = '<link rel="stylesheet" href="contributors.css">';
91
- const generatedHtml = `${htmlDoctype}${styling}<ul>${list}</ul>`;
92
-
93
- const outputPath = path.join(__dirname, 'contributors.html');
94
- fs.writeFileSync(outputPath, generatedHtml);
95
- return outputPath;
96
- };
97
-
98
- const init = async () => {
99
- const contributorsList: Contributor[] = [];
100
- let page = '1';
101
-
102
- // iterate over the pages of GitHub API
103
- while (page !== undefined) {
104
- const result = await fetchContributors(page);
105
- contributorsList.push(...result.contributorsOfPage);
106
- page = result.nextPage;
107
- }
108
-
109
- if (contributorsList.length > 0) {
110
- console.log(
111
- '> Material Icon Theme:',
112
- painter.green('Successfully fetched all contributors from GitHub!')
113
- );
114
- } else {
115
- console.log(
116
- '> Material Icon Theme:',
117
- painter.red('Error: Could not fetch contributors from GitHub!')
118
- );
119
- throw Error();
120
- }
121
- const outputPath = createContributorsList(contributorsList);
122
-
123
- // create the image
124
- console.log('> Material Icon Theme:', painter.yellow('Creating image...'));
125
- const fileName = 'contributors';
126
- createScreenshot(outputPath, fileName)
127
- .then(() => {
128
- console.log(
129
- '> Material Icon Theme:',
130
- painter.green(`Successfully created ${fileName} image!`)
131
- );
132
- })
133
- .catch(() => {
134
- throw Error(painter.red(`Error while creating ${fileName} image`));
135
- });
136
- };
137
-
138
- init();
1
+ import * as fs from 'fs';
2
+ import * as https from 'https';
3
+ import * as path from 'path';
4
+ import { Contributor } from '../../models/scripts/contributors/contributor';
5
+ import * as painter from '../helpers/painter';
6
+ import { createScreenshot } from '../helpers/screenshots';
7
+
8
+ /**
9
+ * Parse link header
10
+ * @param linkHeader Link header as string
11
+ * @returns Object that contains the page numbers of `prev`, `next` and `last`.
12
+ */
13
+ const parseLinkHeader = (linkHeader: string) => {
14
+ const nextPagePattern = new RegExp(/\bpage=(\d)[^>]*>;\srel="next"/);
15
+ const lastPagePattern = new RegExp(/\bpage=(\d)[^>]*>;\srel="last"/);
16
+ const prevPagePattern = new RegExp(/\bpage=(\d)[^>]*>;\srel="prev"/);
17
+
18
+ const nextPage = nextPagePattern.exec(linkHeader) ?? '';
19
+ const lastPage = lastPagePattern.exec(linkHeader) ?? '';
20
+ const prevPage = prevPagePattern.exec(linkHeader) ?? '';
21
+
22
+ return { nextPage, lastPage, prevPage };
23
+ };
24
+
25
+ /**
26
+ * Get all contributors from GitHub API.
27
+ */
28
+ const fetchContributors = (
29
+ page: string
30
+ ): Promise<{ contributorsOfPage: Contributor[]; nextPage: string }> => {
31
+ return new Promise((resolve, reject) => {
32
+ const requestOptions: https.RequestOptions = {
33
+ method: 'GET',
34
+ hostname: 'api.github.com',
35
+ path: `/repos/pkief/vscode-material-icon-theme/contributors?page=${page}`,
36
+ port: 443,
37
+ headers: {
38
+ link: 'next',
39
+ accept: 'application/json',
40
+ 'User-Agent': 'Contributors script',
41
+ },
42
+ };
43
+
44
+ const req = https.request(requestOptions, (res) => {
45
+ const { nextPage, lastPage, prevPage } = parseLinkHeader(
46
+ res.headers?.link?.toString() ?? ''
47
+ );
48
+ console.log(
49
+ '> Material Icon Theme:',
50
+ painter.yellow(
51
+ `[${page}/${
52
+ lastPage ? lastPage[1] : +prevPage[1] + 1
53
+ }] Loading contributors from GitHub...`
54
+ )
55
+ );
56
+ const result: Uint8Array[] = [];
57
+ res.on('data', (data: Buffer) => {
58
+ result.push(data);
59
+ });
60
+
61
+ res.on('end', () => {
62
+ try {
63
+ const buffer = Buffer.concat(result);
64
+ const bufferAsString = buffer.toString('utf8');
65
+ const contributorsOfPage = JSON.parse(bufferAsString);
66
+ resolve({ contributorsOfPage, nextPage: nextPage?.[1] });
67
+ } catch (error) {
68
+ reject(error);
69
+ }
70
+ });
71
+ });
72
+
73
+ req.on('error', (error) => {
74
+ console.error(error);
75
+ reject(error);
76
+ });
77
+
78
+ req.end();
79
+ });
80
+ };
81
+
82
+ const createContributorsList = (contributors: Contributor[]) => {
83
+ const list = contributors
84
+ .map((c) => {
85
+ return `<li title="${c.login}"><img src="${c.avatar_url}" alt="${c.login}"/></li>`;
86
+ })
87
+ .join('\n');
88
+
89
+ const htmlDoctype = '<!DOCTYPE html>';
90
+ const styling = '<link rel="stylesheet" href="contributors.css">';
91
+ const generatedHtml = `${htmlDoctype}${styling}<ul>${list}</ul>`;
92
+
93
+ const outputPath = path.join(__dirname, 'contributors.html');
94
+ fs.writeFileSync(outputPath, generatedHtml);
95
+ return outputPath;
96
+ };
97
+
98
+ const init = async () => {
99
+ const contributorsList: Contributor[] = [];
100
+ let page = '1';
101
+
102
+ // iterate over the pages of GitHub API
103
+ while (page !== undefined) {
104
+ const result = await fetchContributors(page);
105
+ contributorsList.push(...result.contributorsOfPage);
106
+ page = result.nextPage;
107
+ }
108
+
109
+ if (contributorsList.length > 0) {
110
+ console.log(
111
+ '> Material Icon Theme:',
112
+ painter.green('Successfully fetched all contributors from GitHub!')
113
+ );
114
+ } else {
115
+ console.log(
116
+ '> Material Icon Theme:',
117
+ painter.red('Error: Could not fetch contributors from GitHub!')
118
+ );
119
+ throw Error();
120
+ }
121
+ const outputPath = createContributorsList(contributorsList);
122
+
123
+ // create the image
124
+ console.log('> Material Icon Theme:', painter.yellow('Creating image...'));
125
+ const fileName = 'contributors';
126
+ createScreenshot(outputPath, fileName)
127
+ .then(() => {
128
+ console.log(
129
+ '> Material Icon Theme:',
130
+ painter.green(`Successfully created ${fileName} image!`)
131
+ );
132
+ })
133
+ .catch(() => {
134
+ throw Error(painter.red(`Error while creating ${fileName} image`));
135
+ });
136
+ };
137
+
138
+ init();
@@ -1,5 +1,5 @@
1
- // colored console output
2
-
3
- export const red = (value: string) => `\x1b[31m${value}\x1b[0m`;
4
- export const green = (value: string) => `\x1b[32m${value}\x1b[0m`;
5
- export const yellow = (value: string) => `\x1b[33m${value}\x1b[0m`;
1
+ // colored console output
2
+
3
+ export const red = (value: string) => `\x1b[31m${value}\x1b[0m`;
4
+ export const green = (value: string) => `\x1b[32m${value}\x1b[0m`;
5
+ export const yellow = (value: string) => `\x1b[33m${value}\x1b[0m`;
@@ -1,32 +1,32 @@
1
- import path from 'path';
2
- import puppeteer from 'puppeteer';
3
-
4
- /**
5
- * Create a screenshot from an HTML file and save it as image.
6
- * @param filePath Path of an HTML file
7
- * @param fileName Name of the output image
8
- */
9
- export const createScreenshot = async (filePath: string, fileName: string) => {
10
- try {
11
- const htmlFilePath = path.join('file:', filePath);
12
- const browser = await puppeteer.launch();
13
- const page = await browser.newPage();
14
- await page.setViewport({
15
- height: 10,
16
- width: 1000,
17
- });
18
-
19
- await page.goto(htmlFilePath);
20
-
21
- await page.screenshot({
22
- path: `images/${fileName}.png`,
23
- omitBackground: true,
24
- fullPage: true,
25
- });
26
-
27
- await browser.close();
28
- } catch (error) {
29
- console.error(error);
30
- throw Error('Could not create screenshot for a preview');
31
- }
32
- };
1
+ import path from 'path';
2
+ import puppeteer from 'puppeteer';
3
+
4
+ /**
5
+ * Create a screenshot from an HTML file and save it as image.
6
+ * @param filePath Path of an HTML file
7
+ * @param fileName Name of the output image
8
+ */
9
+ export const createScreenshot = async (filePath: string, fileName: string) => {
10
+ try {
11
+ const htmlFilePath = path.join('file:', filePath);
12
+ const browser = await puppeteer.launch();
13
+ const page = await browser.newPage();
14
+ await page.setViewport({
15
+ height: 10,
16
+ width: 1000,
17
+ });
18
+
19
+ await page.goto(htmlFilePath);
20
+
21
+ await page.screenshot({
22
+ path: `images/${fileName}.png`,
23
+ omitBackground: true,
24
+ fullPage: true,
25
+ });
26
+
27
+ await browser.close();
28
+ } catch (error) {
29
+ console.error(error);
30
+ throw Error('Could not create screenshot for a preview');
31
+ }
32
+ };
@@ -1,47 +1,47 @@
1
- /**
2
- * Compares two strings and returns the Levenshtein distance
3
- * @see https://stackoverflow.com/a/36566052/6942210
4
- * @param s1 Text string
5
- * @param s2 text string
6
- */
7
- export const similarity = (s1: string, s2: string) => {
8
- let longer = s1;
9
- let shorter = s2;
10
- if (s1.length < s2.length) {
11
- longer = s2;
12
- shorter = s1;
13
- }
14
- const longerLength = longer.length;
15
- if (longerLength === 0) {
16
- return 1.0;
17
- }
18
- return (longerLength - editDistance(longer, shorter)) / longerLength;
19
- };
20
-
21
- const editDistance = (s1: string, s2: string) => {
22
- s1 = s1.toLowerCase();
23
- s2 = s2.toLowerCase();
24
-
25
- const costs = new Array<number>();
26
- for (let i = 0; i <= s1.length; i++) {
27
- let lastValue = i;
28
- for (let j = 0; j <= s2.length; j++) {
29
- if (i === 0) {
30
- costs[j] = j;
31
- } else {
32
- if (j > 0) {
33
- let newValue = costs[j - 1];
34
- if (s1.charAt(i - 1) !== s2.charAt(j - 1)) {
35
- newValue = Math.min(Math.min(newValue, lastValue), costs[j]) + 1;
36
- }
37
- costs[j - 1] = lastValue;
38
- lastValue = newValue;
39
- }
40
- }
41
- }
42
- if (i > 0) {
43
- costs[s2.length] = lastValue;
44
- }
45
- }
46
- return costs[s2.length];
47
- };
1
+ /**
2
+ * Compares two strings and returns the Levenshtein distance
3
+ * @see https://stackoverflow.com/a/36566052/6942210
4
+ * @param s1 Text string
5
+ * @param s2 text string
6
+ */
7
+ export const similarity = (s1: string, s2: string) => {
8
+ let longer = s1;
9
+ let shorter = s2;
10
+ if (s1.length < s2.length) {
11
+ longer = s2;
12
+ shorter = s1;
13
+ }
14
+ const longerLength = longer.length;
15
+ if (longerLength === 0) {
16
+ return 1.0;
17
+ }
18
+ return (longerLength - editDistance(longer, shorter)) / longerLength;
19
+ };
20
+
21
+ const editDistance = (s1: string, s2: string) => {
22
+ s1 = s1.toLowerCase();
23
+ s2 = s2.toLowerCase();
24
+
25
+ const costs = new Array<number>();
26
+ for (let i = 0; i <= s1.length; i++) {
27
+ let lastValue = i;
28
+ for (let j = 0; j <= s2.length; j++) {
29
+ if (i === 0) {
30
+ costs[j] = j;
31
+ } else {
32
+ if (j > 0) {
33
+ let newValue = costs[j - 1];
34
+ if (s1.charAt(i - 1) !== s2.charAt(j - 1)) {
35
+ newValue = Math.min(Math.min(newValue, lastValue), costs[j]) + 1;
36
+ }
37
+ costs[j - 1] = lastValue;
38
+ lastValue = newValue;
39
+ }
40
+ }
41
+ }
42
+ if (i > 0) {
43
+ costs[s2.length] = lastValue;
44
+ }
45
+ }
46
+ return costs[s2.length];
47
+ };
@@ -1,7 +1,7 @@
1
- /** TitleCase all words in a string */
2
- export const toTitleCase = (str: string): string => {
3
- return str.replace(
4
- /\w\S*/g,
5
- (txt) => txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase()
6
- );
7
- };
1
+ /** TitleCase all words in a string */
2
+ export const toTitleCase = (str: string): string => {
3
+ return str.replace(
4
+ /\w\S*/g,
5
+ (txt) => txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase()
6
+ );
7
+ };