@iconify/tools 2.0.12 → 2.0.15

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 (308) hide show
  1. package/lib/colors/attribs.cjs +30 -0
  2. package/lib/colors/attribs.d.ts +13 -10
  3. package/lib/colors/attribs.mjs +7 -13
  4. package/lib/colors/parse.cjs +269 -0
  5. package/lib/colors/parse.d.ts +15 -11
  6. package/lib/colors/parse.mjs +27 -31
  7. package/lib/colors/validate.cjs +52 -0
  8. package/lib/colors/validate.d.ts +11 -4
  9. package/lib/colors/validate.mjs +19 -6
  10. package/lib/css/parse.cjs +26 -0
  11. package/lib/css/parse.d.ts +3 -1
  12. package/lib/css/parse.mjs +8 -6
  13. package/lib/css/parser/error.cjs +25 -0
  14. package/lib/css/parser/error.d.ts +4 -2
  15. package/lib/css/parser/error.mjs +2 -4
  16. package/lib/css/parser/export.cjs +48 -0
  17. package/lib/css/parser/export.d.ts +5 -2
  18. package/lib/css/parser/export.mjs +4 -6
  19. package/lib/css/parser/strings.cjs +77 -0
  20. package/lib/css/parser/strings.d.ts +6 -3
  21. package/lib/css/parser/strings.mjs +4 -6
  22. package/lib/css/parser/text.cjs +135 -0
  23. package/lib/css/parser/text.d.ts +8 -5
  24. package/lib/css/parser/text.mjs +3 -8
  25. package/lib/css/parser/tokens.cjs +184 -0
  26. package/lib/css/parser/tokens.d.ts +6 -3
  27. package/lib/css/parser/tokens.mjs +7 -13
  28. package/lib/css/parser/tree.cjs +42 -0
  29. package/lib/css/parser/tree.d.ts +5 -2
  30. package/lib/css/parser/tree.mjs +2 -4
  31. package/lib/css/parser/types.cjs +2 -0
  32. package/lib/css/parser/types.d.ts +13 -11
  33. package/lib/css/parser/types.mjs +1 -0
  34. package/lib/download/api/cache.cjs +86 -0
  35. package/lib/download/api/cache.d.ts +8 -5
  36. package/lib/download/api/cache.mjs +14 -19
  37. package/lib/download/api/download.cjs +28 -0
  38. package/lib/download/api/download.d.ts +5 -2
  39. package/lib/download/api/download.mjs +8 -9
  40. package/lib/download/api/index.cjs +51 -0
  41. package/lib/download/api/index.d.ts +5 -2
  42. package/lib/download/api/index.mjs +8 -6
  43. package/lib/download/api/types.cjs +2 -0
  44. package/lib/download/api/types.d.ts +4 -2
  45. package/lib/download/api/types.mjs +1 -0
  46. package/lib/download/git/branch.cjs +22 -0
  47. package/lib/download/git/branch.d.ts +5 -2
  48. package/lib/download/git/branch.mjs +5 -5
  49. package/lib/download/git/hash.cjs +15 -0
  50. package/lib/download/git/hash.d.ts +5 -2
  51. package/lib/download/git/hash.mjs +5 -5
  52. package/lib/download/git/index.cjs +76 -0
  53. package/lib/download/git/index.d.ts +10 -8
  54. package/lib/download/git/index.mjs +42 -20
  55. package/lib/download/git/reset.cjs +41 -0
  56. package/lib/download/git/reset.d.ts +6 -0
  57. package/lib/download/git/reset.mjs +37 -0
  58. package/lib/download/github/hash.cjs +32 -0
  59. package/lib/download/github/hash.d.ts +5 -2
  60. package/lib/download/github/hash.mjs +10 -7
  61. package/lib/download/github/index.cjs +98 -0
  62. package/lib/download/github/index.d.ts +11 -9
  63. package/lib/download/github/index.mjs +23 -17
  64. package/lib/download/github/types.cjs +2 -0
  65. package/lib/download/github/types.d.ts +3 -1
  66. package/lib/download/github/types.mjs +1 -0
  67. package/lib/download/gitlab/hash.cjs +32 -0
  68. package/lib/download/gitlab/hash.d.ts +5 -2
  69. package/lib/download/gitlab/hash.mjs +10 -6
  70. package/lib/download/gitlab/index.cjs +98 -0
  71. package/lib/download/gitlab/index.d.ts +11 -9
  72. package/lib/download/gitlab/index.mjs +24 -18
  73. package/lib/download/gitlab/types.cjs +7 -0
  74. package/lib/download/gitlab/types.d.ts +4 -2
  75. package/lib/download/gitlab/types.mjs +3 -5
  76. package/lib/download/helpers/untar.cjs +14 -0
  77. package/lib/download/helpers/untar.d.ts +3 -1
  78. package/lib/download/helpers/untar.mjs +4 -5
  79. package/lib/download/helpers/unzip.cjs +19 -0
  80. package/lib/download/helpers/unzip.d.ts +3 -1
  81. package/lib/download/helpers/unzip.mjs +6 -7
  82. package/lib/download/index.cjs +64 -0
  83. package/lib/download/index.d.ts +18 -13
  84. package/lib/download/index.mjs +46 -19
  85. package/lib/download/npm/index.cjs +82 -0
  86. package/lib/download/npm/index.d.ts +10 -8
  87. package/lib/download/npm/index.mjs +16 -13
  88. package/lib/download/npm/types.cjs +2 -0
  89. package/lib/download/npm/types.d.ts +3 -1
  90. package/lib/download/npm/types.mjs +1 -0
  91. package/lib/download/npm/version.cjs +23 -0
  92. package/lib/download/npm/version.d.ts +7 -4
  93. package/lib/download/npm/version.mjs +8 -10
  94. package/lib/download/types/modified.cjs +2 -0
  95. package/lib/download/types/modified.d.ts +3 -1
  96. package/lib/download/types/modified.mjs +1 -0
  97. package/lib/download/types/sources.cjs +2 -0
  98. package/lib/download/types/sources.d.ts +4 -2
  99. package/lib/download/types/sources.mjs +1 -0
  100. package/lib/export/directory.cjs +45 -0
  101. package/lib/export/directory.d.ts +11 -4
  102. package/lib/export/directory.mjs +8 -8
  103. package/lib/export/helpers/custom-files.cjs +28 -0
  104. package/lib/export/helpers/custom-files.d.ts +4 -2
  105. package/lib/export/helpers/custom-files.mjs +8 -9
  106. package/lib/export/helpers/prepare.cjs +36 -0
  107. package/lib/export/helpers/prepare.d.ts +5 -3
  108. package/lib/export/helpers/prepare.mjs +7 -9
  109. package/lib/export/helpers/types-version.cjs +22 -0
  110. package/lib/export/helpers/types-version.d.ts +3 -1
  111. package/lib/export/helpers/types-version.mjs +15 -37
  112. package/lib/export/icon-package.cjs +59 -0
  113. package/lib/export/icon-package.d.ts +12 -5
  114. package/lib/export/icon-package.mjs +15 -16
  115. package/lib/export/json-package.cjs +133 -0
  116. package/lib/export/json-package.d.ts +12 -5
  117. package/lib/export/json-package.mjs +24 -22
  118. package/lib/icon-set/index.cjs +589 -0
  119. package/lib/icon-set/index.d.ts +9 -6
  120. package/lib/icon-set/index.mjs +47 -57
  121. package/lib/icon-set/match.cjs +58 -0
  122. package/lib/icon-set/match.d.ts +10 -3
  123. package/lib/icon-set/match.mjs +5 -6
  124. package/lib/icon-set/merge.cjs +83 -0
  125. package/lib/icon-set/merge.d.ts +9 -2
  126. package/lib/icon-set/merge.mjs +15 -10
  127. package/lib/icon-set/props.cjs +28 -0
  128. package/lib/icon-set/props.d.ts +8 -4
  129. package/lib/icon-set/props.mjs +9 -12
  130. package/lib/icon-set/types.cjs +2 -0
  131. package/lib/icon-set/types.d.ts +19 -17
  132. package/lib/icon-set/types.mjs +1 -0
  133. package/lib/import/directory.cjs +76 -0
  134. package/lib/import/directory.d.ts +11 -5
  135. package/lib/import/directory.mjs +36 -11
  136. package/lib/import/figma/index.cjs +105 -0
  137. package/lib/import/figma/index.d.ts +15 -5
  138. package/lib/import/figma/index.mjs +40 -13
  139. package/lib/import/figma/nodes.cjs +86 -0
  140. package/lib/import/figma/nodes.d.ts +13 -4
  141. package/lib/import/figma/nodes.mjs +6 -16
  142. package/lib/import/figma/query.cjs +218 -0
  143. package/lib/import/figma/query.d.ts +18 -9
  144. package/lib/import/figma/query.mjs +9 -12
  145. package/lib/import/figma/types/api.cjs +2 -0
  146. package/lib/import/figma/types/api.d.ts +8 -7
  147. package/lib/import/figma/types/api.mjs +1 -0
  148. package/lib/import/figma/types/nodes.cjs +2 -0
  149. package/lib/import/figma/types/nodes.d.ts +16 -9
  150. package/lib/import/figma/types/nodes.mjs +1 -0
  151. package/lib/import/figma/types/options.cjs +2 -0
  152. package/lib/import/figma/types/options.d.ts +17 -10
  153. package/lib/import/figma/types/options.mjs +1 -0
  154. package/lib/import/figma/types/result.cjs +2 -0
  155. package/lib/import/figma/types/result.d.ts +12 -5
  156. package/lib/import/figma/types/result.mjs +1 -0
  157. package/lib/index.cjs +137 -0
  158. package/lib/index.d.ts +65 -43
  159. package/lib/index.mjs +83 -92
  160. package/lib/misc/bump-version.cjs +17 -0
  161. package/lib/misc/bump-version.d.ts +3 -1
  162. package/lib/misc/bump-version.mjs +2 -4
  163. package/lib/misc/compare-dirs.cjs +75 -0
  164. package/lib/misc/compare-dirs.d.ts +4 -2
  165. package/lib/misc/compare-dirs.mjs +12 -12
  166. package/lib/misc/exec.cjs +25 -0
  167. package/lib/misc/exec.d.ts +6 -4
  168. package/lib/misc/exec.mjs +4 -5
  169. package/lib/misc/keyword.cjs +19 -0
  170. package/lib/misc/keyword.d.ts +3 -1
  171. package/lib/misc/keyword.mjs +2 -4
  172. package/lib/misc/scan.cjs +51 -0
  173. package/lib/misc/scan.d.ts +7 -6
  174. package/lib/misc/scan.mjs +6 -7
  175. package/lib/misc/write-json.cjs +11 -0
  176. package/lib/misc/write-json.d.ts +3 -1
  177. package/lib/misc/write-json.mjs +5 -6
  178. package/lib/optimise/flags.cjs +252 -0
  179. package/lib/optimise/flags.d.ts +7 -2
  180. package/lib/optimise/flags.mjs +18 -19
  181. package/lib/optimise/global-style.cjs +154 -0
  182. package/lib/optimise/global-style.d.ts +7 -2
  183. package/lib/optimise/global-style.mjs +68 -47
  184. package/lib/optimise/scale.cjs +26 -0
  185. package/lib/optimise/scale.d.ts +7 -2
  186. package/lib/optimise/scale.mjs +5 -5
  187. package/lib/optimise/svgo.cjs +83 -0
  188. package/lib/optimise/svgo.d.ts +10 -6
  189. package/lib/optimise/svgo.mjs +6 -9
  190. package/lib/svg/analyse/error.cjs +18 -0
  191. package/lib/svg/analyse/error.d.ts +5 -2
  192. package/lib/svg/analyse/error.mjs +2 -4
  193. package/lib/svg/analyse/types.cjs +2 -0
  194. package/lib/svg/analyse/types.d.ts +11 -11
  195. package/lib/svg/analyse/types.mjs +1 -0
  196. package/lib/svg/analyse.cjs +291 -0
  197. package/lib/svg/analyse.d.ts +8 -3
  198. package/lib/svg/analyse.mjs +15 -30
  199. package/lib/svg/cleanup/attribs.cjs +41 -0
  200. package/lib/svg/cleanup/attribs.d.ts +7 -2
  201. package/lib/svg/cleanup/attribs.mjs +6 -12
  202. package/lib/svg/cleanup/bad-tags.cjs +51 -0
  203. package/lib/svg/cleanup/bad-tags.d.ts +7 -2
  204. package/lib/svg/cleanup/bad-tags.mjs +10 -25
  205. package/lib/svg/cleanup/inline-style.cjs +64 -0
  206. package/lib/svg/cleanup/inline-style.d.ts +7 -2
  207. package/lib/svg/cleanup/inline-style.mjs +14 -19
  208. package/lib/svg/cleanup/root-svg.cjs +81 -0
  209. package/lib/svg/cleanup/root-svg.d.ts +7 -2
  210. package/lib/svg/cleanup/root-svg.mjs +7 -18
  211. package/lib/svg/cleanup/svgo-style.cjs +38 -0
  212. package/lib/svg/cleanup/svgo-style.d.ts +7 -2
  213. package/lib/svg/cleanup/svgo-style.mjs +16 -11
  214. package/lib/svg/cleanup.cjs +32 -0
  215. package/lib/svg/cleanup.d.ts +7 -2
  216. package/lib/svg/cleanup.mjs +21 -9
  217. package/lib/svg/data/attributes.cjs +355 -0
  218. package/lib/svg/data/attributes.d.ts +27 -25
  219. package/lib/svg/data/attributes.mjs +90 -115
  220. package/lib/svg/data/tags.cjs +137 -0
  221. package/lib/svg/data/tags.d.ts +25 -23
  222. package/lib/svg/data/tags.mjs +25 -49
  223. package/lib/svg/index.cjs +130 -0
  224. package/lib/svg/index.d.ts +16 -5
  225. package/lib/svg/index.mjs +48 -11
  226. package/lib/svg/parse-style.cjs +134 -0
  227. package/lib/svg/parse-style.d.ts +12 -8
  228. package/lib/svg/parse-style.mjs +11 -9
  229. package/lib/svg/parse.cjs +42 -0
  230. package/lib/svg/parse.d.ts +11 -7
  231. package/lib/svg/parse.mjs +2 -4
  232. package/package.json +102 -93
  233. package/lib/colors/attribs.js +0 -26
  234. package/lib/colors/parse.js +0 -341
  235. package/lib/colors/validate.js +0 -48
  236. package/lib/css/parse.js +0 -23
  237. package/lib/css/parser/error.js +0 -27
  238. package/lib/css/parser/export.js +0 -69
  239. package/lib/css/parser/strings.js +0 -93
  240. package/lib/css/parser/text.js +0 -171
  241. package/lib/css/parser/tokens.js +0 -200
  242. package/lib/css/parser/tree.js +0 -44
  243. package/lib/css/parser/types.js +0 -2
  244. package/lib/download/api/cache.js +0 -108
  245. package/lib/download/api/download.js +0 -27
  246. package/lib/download/api/index.js +0 -52
  247. package/lib/download/api/types.js +0 -2
  248. package/lib/download/git/branch.js +0 -22
  249. package/lib/download/git/hash.js +0 -14
  250. package/lib/download/git/index.js +0 -63
  251. package/lib/download/github/hash.js +0 -28
  252. package/lib/download/github/index.js +0 -116
  253. package/lib/download/github/types.js +0 -2
  254. package/lib/download/gitlab/hash.js +0 -27
  255. package/lib/download/gitlab/index.js +0 -115
  256. package/lib/download/gitlab/types.js +0 -7
  257. package/lib/download/helpers/untar.js +0 -14
  258. package/lib/download/helpers/unzip.js +0 -18
  259. package/lib/download/index.js +0 -27
  260. package/lib/download/npm/index.js +0 -91
  261. package/lib/download/npm/types.js +0 -2
  262. package/lib/download/npm/version.js +0 -27
  263. package/lib/download/types/modified.js +0 -2
  264. package/lib/download/types/sources.js +0 -2
  265. package/lib/export/directory.js +0 -52
  266. package/lib/export/helpers/custom-files.js +0 -32
  267. package/lib/export/helpers/prepare.js +0 -49
  268. package/lib/export/helpers/types-version.js +0 -12
  269. package/lib/export/icon-package.js +0 -77
  270. package/lib/export/json-package.js +0 -151
  271. package/lib/icon-set/index.js +0 -746
  272. package/lib/icon-set/match.js +0 -66
  273. package/lib/icon-set/merge.js +0 -90
  274. package/lib/icon-set/props.js +0 -33
  275. package/lib/icon-set/types.js +0 -2
  276. package/lib/import/directory.js +0 -59
  277. package/lib/import/figma/index.js +0 -90
  278. package/lib/import/figma/nodes.js +0 -108
  279. package/lib/import/figma/query.js +0 -244
  280. package/lib/import/figma/types/api.js +0 -12
  281. package/lib/import/figma/types/nodes.js +0 -2
  282. package/lib/import/figma/types/options.js +0 -2
  283. package/lib/import/figma/types/result.js +0 -2
  284. package/lib/index.js +0 -101
  285. package/lib/misc/bump-version.js +0 -19
  286. package/lib/misc/compare-dirs.js +0 -84
  287. package/lib/misc/exec.js +0 -26
  288. package/lib/misc/keyword.js +0 -31
  289. package/lib/misc/scan.js +0 -55
  290. package/lib/misc/write-json.js +0 -11
  291. package/lib/optimise/flags.js +0 -312
  292. package/lib/optimise/global-style.js +0 -158
  293. package/lib/optimise/scale.js +0 -42
  294. package/lib/optimise/svgo.js +0 -99
  295. package/lib/svg/analyse/error.js +0 -22
  296. package/lib/svg/analyse/types.js +0 -2
  297. package/lib/svg/analyse.js +0 -352
  298. package/lib/svg/cleanup/attribs.js +0 -51
  299. package/lib/svg/cleanup/bad-tags.js +0 -65
  300. package/lib/svg/cleanup/inline-style.js +0 -77
  301. package/lib/svg/cleanup/root-svg.js +0 -107
  302. package/lib/svg/cleanup/svgo-style.js +0 -35
  303. package/lib/svg/cleanup.js +0 -24
  304. package/lib/svg/data/attributes.js +0 -403
  305. package/lib/svg/data/tags.js +0 -188
  306. package/lib/svg/index.js +0 -125
  307. package/lib/svg/parse-style.js +0 -151
  308. package/lib/svg/parse.js +0 -49
@@ -1,5 +1,5 @@
1
- /// <reference types="node" />
2
- import type { Stats } from 'fs';
1
+ import { Stats } from 'fs';
2
+
3
3
  /**
4
4
  * Callback
5
5
  *
@@ -17,10 +17,11 @@ declare type ScanDirectoryCallbackFalseResult = boolean | null | undefined;
17
17
  declare type ScanDirectoryCallbackStringResult = ScanDirectoryCallbackFalseResult | string;
18
18
  declare type ScanDirectoryCallbackAsString = (ext: string, file: string, subdir: string, path: string, stat: Stats) => ScanDirectoryCallbackStringResult | Promise<ScanDirectoryCallbackStringResult>;
19
19
  declare type ScanDirectoryCallbackAsCustom<T> = (ext: string, file: string, subdir: string, path: string, stat: Stats) => T | ScanDirectoryCallbackFalseResult | Promise<T | ScanDirectoryCallbackFalseResult>;
20
- export declare type ScanDirectoryCallback = ScanDirectoryCallbackAsCustom<unknown> | ScanDirectoryCallbackAsString;
20
+ declare type ScanDirectoryCallback = ScanDirectoryCallbackAsCustom<unknown> | ScanDirectoryCallbackAsString;
21
21
  /**
22
22
  * Find all files in directory
23
23
  */
24
- export declare function scanDirectory(path: string, callback?: ScanDirectoryCallbackAsString, subdirs?: boolean): Promise<string[]>;
25
- export declare function scanDirectory<T>(path: string, callback: ScanDirectoryCallbackAsCustom<T>, subdirs?: boolean): Promise<T[]>;
26
- export {};
24
+ declare function scanDirectory(path: string, callback?: ScanDirectoryCallbackAsString, subdirs?: boolean): Promise<string[]>;
25
+ declare function scanDirectory<T>(path: string, callback: ScanDirectoryCallbackAsCustom<T>, subdirs?: boolean): Promise<T[]>;
26
+
27
+ export { ScanDirectoryCallback, scanDirectory };
package/lib/misc/scan.mjs CHANGED
@@ -1,18 +1,18 @@
1
- // src/misc/scan.ts
2
- import { promises as fs } from "fs";
1
+ import { promises } from 'fs';
2
+
3
3
  async function scanDirectory(path, callback, subdirs = true) {
4
4
  const results = [];
5
5
  if (path.length && path.slice(-1) !== "/") {
6
6
  path += "/";
7
7
  }
8
8
  async function scan(subdir) {
9
- const files = await fs.readdir(path + subdir);
9
+ const files = await promises.readdir(path + subdir);
10
10
  for (let i = 0; i < files.length; i++) {
11
11
  const filename = files[i];
12
12
  if (filename.slice(0, 1) === ".") {
13
13
  continue;
14
14
  }
15
- const stat = await fs.stat(path + subdir + filename);
15
+ const stat = await promises.stat(path + subdir + filename);
16
16
  if (stat.isDirectory()) {
17
17
  if (subdirs) {
18
18
  await scan(subdir + filename + "/");
@@ -43,6 +43,5 @@ async function scanDirectory(path, callback, subdirs = true) {
43
43
  await scan("");
44
44
  return results;
45
45
  }
46
- export {
47
- scanDirectory
48
- };
46
+
47
+ export { scanDirectory };
@@ -0,0 +1,11 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ const fs = require('fs');
6
+
7
+ async function writeJSONFile(filename, data) {
8
+ return fs.promises.writeFile(filename, JSON.stringify(data, null, " ") + "\n");
9
+ }
10
+
11
+ exports.writeJSONFile = writeJSONFile;
@@ -1,4 +1,6 @@
1
1
  /**
2
2
  * Write JSON file
3
3
  */
4
- export declare function writeJSONFile(filename: string, data: unknown): Promise<void>;
4
+ declare function writeJSONFile(filename: string, data: unknown): Promise<void>;
5
+
6
+ export { writeJSONFile };
@@ -1,8 +1,7 @@
1
- // src/misc/write-json.ts
2
- import { promises as fs } from "fs";
1
+ import { promises } from 'fs';
2
+
3
3
  async function writeJSONFile(filename, data) {
4
- return fs.writeFile(filename, JSON.stringify(data, null, " ") + "\n");
4
+ return promises.writeFile(filename, JSON.stringify(data, null, " ") + "\n");
5
5
  }
6
- export {
7
- writeJSONFile
8
- };
6
+
7
+ export { writeJSONFile };
@@ -0,0 +1,252 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ const svg_parse = require('../svg/parse.cjs');
6
+
7
+ const CLOSE_PATH = 1;
8
+ const MOVE_TO = 2;
9
+ const HORIZ_LINE_TO = 4;
10
+ const VERT_LINE_TO = 8;
11
+ const LINE_TO = 16;
12
+ const CURVE_TO = 32;
13
+ const SMOOTH_CURVE_TO = 64;
14
+ const QUAD_TO = 128;
15
+ const SMOOTH_QUAD_TO = 256;
16
+ const ARC = 512;
17
+ const argCount = {
18
+ [MOVE_TO]: 2,
19
+ [LINE_TO]: 2,
20
+ [HORIZ_LINE_TO]: 1,
21
+ [VERT_LINE_TO]: 1,
22
+ [CLOSE_PATH]: 0,
23
+ [QUAD_TO]: 4,
24
+ [SMOOTH_QUAD_TO]: 2,
25
+ [CURVE_TO]: 6,
26
+ [SMOOTH_CURVE_TO]: 4,
27
+ [ARC]: 7
28
+ };
29
+ const isDigit = (num) => num >= 48 && num <= 57;
30
+ const isWhiteSpace = (num) => num === 32 || num === 9 || num === 13 || num === 10;
31
+ function cleanPath(path) {
32
+ const commands = [];
33
+ const length = path.length;
34
+ let currentNumber = "";
35
+ let currentNumberHasExp = false;
36
+ let currentNumberHasExpDigits = false;
37
+ let currentNumberHasDecimal = false;
38
+ let canParseCommandOrComma = true;
39
+ let currentCommand = null;
40
+ let currentCommandType = null;
41
+ let currentArgs = [];
42
+ let i = 0;
43
+ const finishCommand = () => {
44
+ if (currentCommand !== null) {
45
+ commands.push({
46
+ command: currentCommand,
47
+ params: currentArgs.slice(0)
48
+ });
49
+ currentArgs = [];
50
+ canParseCommandOrComma = true;
51
+ switch (currentCommand) {
52
+ case "M":
53
+ currentCommand = "L";
54
+ break;
55
+ case "m":
56
+ currentCommand = "l";
57
+ break;
58
+ }
59
+ }
60
+ };
61
+ const parseNumber = () => {
62
+ if (currentNumber !== "" && currentCommandType) {
63
+ let value = Number(currentNumber);
64
+ if (isNaN(value)) {
65
+ throw new Error('Invalid number "' + currentNumber + '" at ' + i);
66
+ }
67
+ if (currentCommandType === ARC) {
68
+ if (currentArgs.length < 2 && value <= 0) {
69
+ throw new Error('Expected positive number, got "' + value + '" at ' + i);
70
+ }
71
+ while (true) {
72
+ if (currentArgs.length < 3 || currentArgs.length > 4) {
73
+ break;
74
+ }
75
+ if (currentNumber === "0" || currentNumber === "1") {
76
+ break;
77
+ }
78
+ const slice = currentNumber.slice(0, 1);
79
+ const newNumber = currentNumber.slice(1);
80
+ const newValue = Number(newNumber);
81
+ if (slice === "0" || slice === "1") {
82
+ if (isNaN(newValue)) {
83
+ throw new Error('Invalid number "' + currentNumber + '" at ' + i);
84
+ }
85
+ currentArgs.push(slice);
86
+ currentNumber = newNumber;
87
+ value = newValue;
88
+ continue;
89
+ }
90
+ throw new Error('Expected a flag, got "' + currentNumber + '" at ' + i);
91
+ }
92
+ }
93
+ currentArgs.push(currentNumber);
94
+ if (currentArgs.length === argCount[currentCommandType]) {
95
+ finishCommand();
96
+ }
97
+ currentNumber = "";
98
+ currentNumberHasExpDigits = false;
99
+ currentNumberHasExp = false;
100
+ currentNumberHasDecimal = false;
101
+ canParseCommandOrComma = true;
102
+ }
103
+ };
104
+ for (i = 0; i < length; i++) {
105
+ const char = path[i];
106
+ const num = char.charCodeAt(0);
107
+ if (isDigit(num)) {
108
+ currentNumber += char;
109
+ currentNumberHasExpDigits = currentNumberHasExp;
110
+ continue;
111
+ }
112
+ if (char === "e" || char === "E") {
113
+ currentNumber += char;
114
+ currentNumberHasExp = true;
115
+ continue;
116
+ }
117
+ if ((char === "-" || char === "+") && currentNumberHasExp && !currentNumberHasExpDigits) {
118
+ currentNumber += char;
119
+ continue;
120
+ }
121
+ if (char === "." && !currentNumberHasExp && !currentNumberHasDecimal) {
122
+ currentNumber += char;
123
+ currentNumberHasDecimal = true;
124
+ continue;
125
+ }
126
+ parseNumber();
127
+ if (isWhiteSpace(num)) {
128
+ continue;
129
+ }
130
+ if (canParseCommandOrComma && char === ",") {
131
+ canParseCommandOrComma = false;
132
+ continue;
133
+ }
134
+ if (char === "+" || char === "-" || char === ".") {
135
+ currentNumber = char;
136
+ currentNumberHasDecimal = char === ".";
137
+ continue;
138
+ }
139
+ if (currentArgs.length > 0) {
140
+ throw new Error("Unexpected command at " + i);
141
+ }
142
+ if (!canParseCommandOrComma) {
143
+ throw new Error("Command cannot follow comma at " + i);
144
+ }
145
+ canParseCommandOrComma = false;
146
+ currentCommand = char;
147
+ switch (char) {
148
+ case "z":
149
+ case "Z":
150
+ commands.push({
151
+ command: char,
152
+ params: []
153
+ });
154
+ canParseCommandOrComma = true;
155
+ currentCommandType = null;
156
+ currentCommand = null;
157
+ break;
158
+ case "h":
159
+ case "H":
160
+ currentCommandType = HORIZ_LINE_TO;
161
+ break;
162
+ case "v":
163
+ case "V":
164
+ currentCommandType = VERT_LINE_TO;
165
+ break;
166
+ case "m":
167
+ case "M":
168
+ currentCommandType = MOVE_TO;
169
+ break;
170
+ case "l":
171
+ case "L":
172
+ currentCommandType = LINE_TO;
173
+ break;
174
+ case "c":
175
+ case "C":
176
+ currentCommandType = CURVE_TO;
177
+ break;
178
+ case "s":
179
+ case "S":
180
+ currentCommandType = SMOOTH_CURVE_TO;
181
+ break;
182
+ case "q":
183
+ case "Q":
184
+ currentCommandType = QUAD_TO;
185
+ break;
186
+ case "t":
187
+ case "T":
188
+ currentCommandType = SMOOTH_QUAD_TO;
189
+ break;
190
+ case "a":
191
+ case "A":
192
+ currentCommandType = ARC;
193
+ break;
194
+ default:
195
+ throw new Error('Unexpected character "' + char + '" at ' + i);
196
+ }
197
+ }
198
+ parseNumber();
199
+ if (currentArgs.length) {
200
+ if (!currentCommandType) {
201
+ throw new Error("Empty path");
202
+ }
203
+ if (currentArgs.length !== argCount[currentCommandType]) {
204
+ throw new Error("Unexpected end of path at " + i);
205
+ }
206
+ finishCommand();
207
+ }
208
+ let output = "";
209
+ commands.forEach((item) => {
210
+ output += item.command;
211
+ item.params.forEach((value, index) => {
212
+ if (index > 0) {
213
+ const char = value[0];
214
+ switch (char) {
215
+ case "-":
216
+ case "+":
217
+ break;
218
+ case ".":
219
+ if (index < 1) {
220
+ break;
221
+ }
222
+ if (item.params[index - 1].indexOf(".") !== -1) {
223
+ break;
224
+ }
225
+ default:
226
+ output += " ";
227
+ }
228
+ }
229
+ output += value;
230
+ });
231
+ });
232
+ return output;
233
+ }
234
+ async function deOptimisePaths(svg) {
235
+ await svg_parse.parseSVG(svg, (item) => {
236
+ if (item.tagName !== "path") {
237
+ return;
238
+ }
239
+ const d = item.element.attribs.d;
240
+ if (typeof d === "string") {
241
+ try {
242
+ const optimised = cleanPath(d);
243
+ if (optimised !== d) {
244
+ item.$element.attr("d", optimised);
245
+ }
246
+ } catch (err) {
247
+ }
248
+ }
249
+ });
250
+ }
251
+
252
+ exports.deOptimisePaths = deOptimisePaths;
@@ -1,5 +1,10 @@
1
- import type { SVG } from '../svg';
1
+ import { SVG } from '../svg/index.js';
2
+ import '@iconify/types';
3
+ import '@iconify/utils/lib/customisations';
4
+
2
5
  /**
3
6
  * De-optimise paths. Compressed paths are still not supported by some software.
4
7
  */
5
- export declare function deOptimisePaths(svg: SVG): Promise<void>;
8
+ declare function deOptimisePaths(svg: SVG): Promise<void>;
9
+
10
+ export { deOptimisePaths };
@@ -1,16 +1,16 @@
1
- // src/optimise/flags.ts
2
- import { parseSVG } from "../svg/parse.mjs";
3
- var CLOSE_PATH = 1;
4
- var MOVE_TO = 2;
5
- var HORIZ_LINE_TO = 4;
6
- var VERT_LINE_TO = 8;
7
- var LINE_TO = 16;
8
- var CURVE_TO = 32;
9
- var SMOOTH_CURVE_TO = 64;
10
- var QUAD_TO = 128;
11
- var SMOOTH_QUAD_TO = 256;
12
- var ARC = 512;
13
- var argCount = {
1
+ import { parseSVG } from '../svg/parse.mjs';
2
+
3
+ const CLOSE_PATH = 1;
4
+ const MOVE_TO = 2;
5
+ const HORIZ_LINE_TO = 4;
6
+ const VERT_LINE_TO = 8;
7
+ const LINE_TO = 16;
8
+ const CURVE_TO = 32;
9
+ const SMOOTH_CURVE_TO = 64;
10
+ const QUAD_TO = 128;
11
+ const SMOOTH_QUAD_TO = 256;
12
+ const ARC = 512;
13
+ const argCount = {
14
14
  [MOVE_TO]: 2,
15
15
  [LINE_TO]: 2,
16
16
  [HORIZ_LINE_TO]: 1,
@@ -22,8 +22,8 @@ var argCount = {
22
22
  [SMOOTH_CURVE_TO]: 4,
23
23
  [ARC]: 7
24
24
  };
25
- var isDigit = (num) => num >= 48 && num <= 57;
26
- var isWhiteSpace = (num) => num === 32 || num === 9 || num === 13 || num === 10;
25
+ const isDigit = (num) => num >= 48 && num <= 57;
26
+ const isWhiteSpace = (num) => num === 32 || num === 9 || num === 13 || num === 10;
27
27
  function cleanPath(path) {
28
28
  const commands = [];
29
29
  const length = path.length;
@@ -136,7 +136,7 @@ function cleanPath(path) {
136
136
  throw new Error("Unexpected command at " + i);
137
137
  }
138
138
  if (!canParseCommandOrComma) {
139
- throw new Error("Command cannot follow comma at " + i + "");
139
+ throw new Error("Command cannot follow comma at " + i);
140
140
  }
141
141
  canParseCommandOrComma = false;
142
142
  currentCommand = char;
@@ -244,6 +244,5 @@ async function deOptimisePaths(svg) {
244
244
  }
245
245
  });
246
246
  }
247
- export {
248
- deOptimisePaths
249
- };
247
+
248
+ export { deOptimisePaths };
@@ -0,0 +1,154 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ const svg_data_tags = require('../svg/data/tags.cjs');
6
+ const svg_parse = require('../svg/parse.cjs');
7
+ const svg_parseStyle = require('../svg/parse-style.cjs');
8
+ require('../css/parse.cjs');
9
+ require('../css/parser/tokens.cjs');
10
+ require('../css/parser/error.cjs');
11
+ require('../css/parser/strings.cjs');
12
+ require('../css/parser/text.cjs');
13
+ require('../css/parser/export.cjs');
14
+ require('../css/parser/tree.cjs');
15
+
16
+ function getClassList(value) {
17
+ return value?.split(/\s+/);
18
+ }
19
+ const tempDataAttrbiute = "data-gstyle-temp";
20
+ async function cleanupGlobalStyle(svg) {
21
+ const backup = svg.toString();
22
+ let containsTempAttr = false;
23
+ const animatedClasses = /* @__PURE__ */ new Set();
24
+ await svg_parse.parseSVG(svg, (item) => {
25
+ if (!svg_data_tags.animateTags.has(item.tagName)) {
26
+ return;
27
+ }
28
+ const $element = item.$element;
29
+ if ($element.attr("attributeName") !== "class") {
30
+ return;
31
+ }
32
+ ["from", "to", "values"].forEach((attr) => {
33
+ const value = $element.attr(attr);
34
+ if (typeof value !== "string") {
35
+ return;
36
+ }
37
+ value.split(";").forEach((item2) => {
38
+ getClassList(item2).forEach((className) => {
39
+ animatedClasses.add(className);
40
+ });
41
+ });
42
+ });
43
+ });
44
+ try {
45
+ await svg_parseStyle.parseSVGStyle(svg, async (styleItem) => {
46
+ const returnValue = styleItem.value;
47
+ if (styleItem.type !== "global") {
48
+ return returnValue;
49
+ }
50
+ const selectorTokens = styleItem.selectorTokens;
51
+ for (let i = 0; i < selectorTokens.length; i++) {
52
+ const selectorToken = selectorTokens[i];
53
+ if (selectorToken.type !== "selector") {
54
+ return returnValue;
55
+ }
56
+ }
57
+ const selectors = styleItem.selectors;
58
+ const matches = [];
59
+ for (let i = 0; i < selectors.length; i++) {
60
+ const selector = styleItem.selectors[i];
61
+ const firstChar = selector.charAt(0);
62
+ let matchType;
63
+ if (firstChar === ".") {
64
+ matchType = "class";
65
+ } else if (firstChar === "#") {
66
+ matchType = "id";
67
+ } else if (svg_data_tags.allValidTags.has(selector)) {
68
+ matchType = "tag";
69
+ } else {
70
+ return returnValue;
71
+ }
72
+ const valueMatch = matchType === "tag" ? selector : selector.slice(1);
73
+ if (matchType === "class" && animatedClasses.has(valueMatch)) {
74
+ return returnValue;
75
+ }
76
+ matches.push({
77
+ type: matchType,
78
+ value: valueMatch
79
+ });
80
+ }
81
+ const isMatch = (tagName, $element) => {
82
+ for (let i = 0; i < matches.length; i++) {
83
+ const { type, value } = matches[i];
84
+ switch (type) {
85
+ case "id":
86
+ if ($element.attr("id") === value) {
87
+ return true;
88
+ }
89
+ break;
90
+ case "tag":
91
+ if (tagName === value) {
92
+ return true;
93
+ }
94
+ break;
95
+ case "class": {
96
+ const className = $element.attr("class");
97
+ if (className && getClassList(className).indexOf(value) !== -1) {
98
+ return true;
99
+ }
100
+ }
101
+ }
102
+ }
103
+ return false;
104
+ };
105
+ await svg_parse.parseSVG(svg, (svgItem) => {
106
+ const tagName = svgItem.tagName;
107
+ const $element = svgItem.$element;
108
+ if (!isMatch(tagName, $element)) {
109
+ return;
110
+ }
111
+ const addedAttributes = new Set($element.attr(tempDataAttrbiute)?.split(/\s+/));
112
+ const prop = styleItem.prop;
113
+ if ($element.attr(prop) !== void 0) {
114
+ if (addedAttributes.has(prop)) {
115
+ throw new Error("Duplicate attribute");
116
+ }
117
+ }
118
+ $element.attr(prop, styleItem.value);
119
+ addedAttributes.add(prop);
120
+ $element.attr(tempDataAttrbiute, Array.from(addedAttributes).join(" "));
121
+ containsTempAttr = true;
122
+ });
123
+ const classMatches = matches.filter((item) => item.type === "class").map((item) => item.value);
124
+ if (classMatches.length && styleItem.nextTokens[0]?.type === "close") {
125
+ await svg_parse.parseSVG(svg, (svgItem) => {
126
+ const $element = svgItem.$element;
127
+ if (!isMatch("", $element)) {
128
+ return;
129
+ }
130
+ const classList = getClassList($element.attr("class"));
131
+ if (!classList) {
132
+ return;
133
+ }
134
+ const filtered = classList.filter((item) => classMatches.indexOf(item) === -1);
135
+ if (!filtered.length) {
136
+ $element.removeAttr("class");
137
+ } else {
138
+ $element.attr("class", filtered.join(" "));
139
+ }
140
+ });
141
+ }
142
+ return;
143
+ });
144
+ if (containsTempAttr) {
145
+ await svg_parse.parseSVG(svg, (item) => {
146
+ item.$element.removeAttr(tempDataAttrbiute);
147
+ });
148
+ }
149
+ } catch (err) {
150
+ svg.load(backup);
151
+ }
152
+ }
153
+
154
+ exports.cleanupGlobalStyle = cleanupGlobalStyle;
@@ -1,5 +1,10 @@
1
- import type { SVG } from '../svg';
1
+ import { SVG } from '../svg/index.js';
2
+ import '@iconify/types';
3
+ import '@iconify/utils/lib/customisations';
4
+
2
5
  /**
3
6
  * Expand global style
4
7
  */
5
- export declare function cleanupGlobalStyle(svg: SVG): Promise<void>;
8
+ declare function cleanupGlobalStyle(svg: SVG): Promise<void>;
9
+
10
+ export { cleanupGlobalStyle };