@iconify/tools 4.0.0-dev.1 → 4.0.1

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 (301) hide show
  1. package/lib/colors/attribs.d.cts +27 -0
  2. package/lib/colors/attribs.d.mts +27 -0
  3. package/lib/colors/attribs.d.ts +1 -1
  4. package/lib/colors/detect.cjs +2 -2
  5. package/lib/colors/detect.d.cts +16 -0
  6. package/lib/colors/detect.d.mts +16 -0
  7. package/lib/colors/detect.mjs +3 -3
  8. package/lib/colors/parse.cjs +132 -276
  9. package/lib/colors/parse.d.cts +60 -0
  10. package/lib/colors/parse.d.mts +60 -0
  11. package/lib/colors/parse.d.ts +7 -15
  12. package/lib/colors/parse.mjs +136 -279
  13. package/lib/colors/validate.cjs +2 -11
  14. package/lib/colors/validate.d.cts +20 -0
  15. package/lib/colors/validate.d.mts +20 -0
  16. package/lib/colors/validate.d.ts +4 -11
  17. package/lib/colors/validate.mjs +4 -12
  18. package/lib/css/parse.d.cts +6 -0
  19. package/lib/css/parse.d.mts +6 -0
  20. package/lib/css/parser/error.d.cts +13 -0
  21. package/lib/css/parser/error.d.mts +13 -0
  22. package/lib/css/parser/error.d.ts +1 -1
  23. package/lib/css/parser/export.d.cts +8 -0
  24. package/lib/css/parser/export.d.mts +8 -0
  25. package/lib/css/parser/strings.d.cts +16 -0
  26. package/lib/css/parser/strings.d.mts +16 -0
  27. package/lib/css/parser/text.d.cts +20 -0
  28. package/lib/css/parser/text.d.mts +20 -0
  29. package/lib/css/parser/tokens.d.cts +9 -0
  30. package/lib/css/parser/tokens.d.mts +9 -0
  31. package/lib/css/parser/tree.d.cts +8 -0
  32. package/lib/css/parser/tree.d.mts +8 -0
  33. package/lib/css/parser/types.d.cts +52 -0
  34. package/lib/css/parser/types.d.mts +52 -0
  35. package/lib/css/parser/types.d.ts +1 -1
  36. package/lib/download/api/cache.d.cts +20 -0
  37. package/lib/download/api/cache.d.mts +20 -0
  38. package/lib/download/api/config.cjs +11 -0
  39. package/lib/download/api/config.d.cts +18 -0
  40. package/lib/download/api/config.d.mts +18 -0
  41. package/lib/download/api/config.d.ts +18 -0
  42. package/lib/download/api/config.mjs +8 -0
  43. package/lib/download/api/download.cjs +15 -7
  44. package/lib/download/api/download.d.cts +8 -0
  45. package/lib/download/api/download.d.mts +8 -0
  46. package/lib/download/api/download.mjs +11 -7
  47. package/lib/download/api/index.cjs +23 -7
  48. package/lib/download/api/index.d.cts +8 -0
  49. package/lib/download/api/index.d.mts +8 -0
  50. package/lib/download/api/index.mjs +19 -7
  51. package/lib/download/api/queue.cjs +104 -0
  52. package/lib/download/api/queue.d.cts +32 -0
  53. package/lib/download/api/queue.d.mts +32 -0
  54. package/lib/download/api/queue.d.ts +32 -0
  55. package/lib/download/api/queue.mjs +101 -0
  56. package/lib/download/api/types.d.cts +17 -0
  57. package/lib/download/api/types.d.mts +17 -0
  58. package/lib/download/api/types.d.ts +1 -1
  59. package/lib/download/git/branch.d.cts +8 -0
  60. package/lib/download/git/branch.d.mts +8 -0
  61. package/lib/download/git/hash.d.cts +8 -0
  62. package/lib/download/git/hash.d.mts +8 -0
  63. package/lib/download/git/index.cjs +2 -4
  64. package/lib/download/git/index.d.cts +29 -0
  65. package/lib/download/git/index.d.mts +29 -0
  66. package/lib/download/git/index.d.ts +1 -1
  67. package/lib/download/git/index.mjs +2 -4
  68. package/lib/download/git/reset.cjs +2 -4
  69. package/lib/download/git/reset.d.cts +6 -0
  70. package/lib/download/git/reset.d.mts +6 -0
  71. package/lib/download/git/reset.mjs +2 -4
  72. package/lib/download/github/hash.cjs +2 -0
  73. package/lib/download/github/hash.d.cts +8 -0
  74. package/lib/download/github/hash.d.mts +8 -0
  75. package/lib/download/github/hash.mjs +2 -0
  76. package/lib/download/github/index.cjs +2 -2
  77. package/lib/download/github/index.d.cts +31 -0
  78. package/lib/download/github/index.d.mts +31 -0
  79. package/lib/download/github/index.d.ts +1 -1
  80. package/lib/download/github/index.mjs +2 -2
  81. package/lib/download/github/types.d.cts +11 -0
  82. package/lib/download/github/types.d.mts +11 -0
  83. package/lib/download/github/types.d.ts +1 -1
  84. package/lib/download/gitlab/hash.cjs +2 -0
  85. package/lib/download/gitlab/hash.d.cts +8 -0
  86. package/lib/download/gitlab/hash.d.mts +8 -0
  87. package/lib/download/gitlab/hash.mjs +2 -0
  88. package/lib/download/gitlab/index.cjs +2 -2
  89. package/lib/download/gitlab/index.d.cts +31 -0
  90. package/lib/download/gitlab/index.d.mts +31 -0
  91. package/lib/download/gitlab/index.d.ts +1 -1
  92. package/lib/download/gitlab/index.mjs +2 -2
  93. package/lib/download/gitlab/types.d.cts +15 -0
  94. package/lib/download/gitlab/types.d.mts +15 -0
  95. package/lib/download/gitlab/types.d.ts +1 -1
  96. package/lib/download/helpers/untar.d.cts +6 -0
  97. package/lib/download/helpers/untar.d.mts +6 -0
  98. package/lib/download/helpers/unzip.d.cts +6 -0
  99. package/lib/download/helpers/unzip.d.mts +6 -0
  100. package/lib/download/index.cjs +2 -2
  101. package/lib/download/index.d.cts +48 -0
  102. package/lib/download/index.d.mts +48 -0
  103. package/lib/download/index.d.ts +1 -1
  104. package/lib/download/index.mjs +2 -2
  105. package/lib/download/npm/index.cjs +2 -2
  106. package/lib/download/npm/index.d.cts +30 -0
  107. package/lib/download/npm/index.d.mts +30 -0
  108. package/lib/download/npm/index.d.ts +1 -1
  109. package/lib/download/npm/index.mjs +2 -2
  110. package/lib/download/npm/types.d.cts +9 -0
  111. package/lib/download/npm/types.d.mts +9 -0
  112. package/lib/download/npm/types.d.ts +1 -1
  113. package/lib/download/npm/version.d.cts +16 -0
  114. package/lib/download/npm/version.d.mts +16 -0
  115. package/lib/download/npm/version.d.ts +1 -1
  116. package/lib/download/types/modified.d.cts +6 -0
  117. package/lib/download/types/modified.d.mts +6 -0
  118. package/lib/download/types/modified.d.ts +1 -1
  119. package/lib/download/types/sources.d.cts +12 -0
  120. package/lib/download/types/sources.d.mts +12 -0
  121. package/lib/download/types/sources.d.ts +1 -1
  122. package/lib/export/directory.d.cts +26 -0
  123. package/lib/export/directory.d.mts +26 -0
  124. package/lib/export/directory.d.ts +1 -1
  125. package/lib/export/helpers/custom-files.d.cts +12 -0
  126. package/lib/export/helpers/custom-files.d.mts +12 -0
  127. package/lib/export/helpers/custom-files.d.ts +1 -1
  128. package/lib/export/helpers/prepare.d.cts +19 -0
  129. package/lib/export/helpers/prepare.d.mts +19 -0
  130. package/lib/export/helpers/prepare.d.ts +1 -1
  131. package/lib/export/helpers/types-version.d.cts +6 -0
  132. package/lib/export/helpers/types-version.d.mts +6 -0
  133. package/lib/export/icon-package.d.cts +26 -0
  134. package/lib/export/icon-package.d.mts +26 -0
  135. package/lib/export/icon-package.d.ts +2 -2
  136. package/lib/export/json-package.cjs +1 -0
  137. package/lib/export/json-package.d.cts +25 -0
  138. package/lib/export/json-package.d.mts +25 -0
  139. package/lib/export/json-package.d.ts +2 -1
  140. package/lib/export/json-package.mjs +1 -0
  141. package/lib/icon-set/index.cjs +25 -4
  142. package/lib/icon-set/index.d.cts +162 -0
  143. package/lib/icon-set/index.d.mts +162 -0
  144. package/lib/icon-set/index.mjs +25 -4
  145. package/lib/icon-set/match.d.cts +15 -0
  146. package/lib/icon-set/match.d.mts +15 -0
  147. package/lib/icon-set/merge.d.cts +14 -0
  148. package/lib/icon-set/merge.d.mts +14 -0
  149. package/lib/icon-set/modified.d.cts +16 -0
  150. package/lib/icon-set/modified.d.mts +16 -0
  151. package/lib/icon-set/props.d.cts +13 -0
  152. package/lib/icon-set/props.d.mts +13 -0
  153. package/lib/icon-set/tags.d.cts +23 -0
  154. package/lib/icon-set/tags.d.mts +23 -0
  155. package/lib/icon-set/types.d.cts +75 -0
  156. package/lib/icon-set/types.d.mts +75 -0
  157. package/lib/icon-set/types.d.ts +1 -1
  158. package/lib/import/directory.d.cts +52 -0
  159. package/lib/import/directory.d.mts +52 -0
  160. package/lib/import/directory.d.ts +1 -1
  161. package/lib/import/figma/index.cjs +3 -0
  162. package/lib/import/figma/index.d.cts +20 -0
  163. package/lib/import/figma/index.d.mts +20 -0
  164. package/lib/import/figma/index.mjs +3 -0
  165. package/lib/import/figma/nodes.cjs +1 -1
  166. package/lib/import/figma/nodes.d.cts +18 -0
  167. package/lib/import/figma/nodes.d.mts +18 -0
  168. package/lib/import/figma/nodes.mjs +1 -1
  169. package/lib/import/figma/query.cjs +104 -76
  170. package/lib/import/figma/query.d.cts +42 -0
  171. package/lib/import/figma/query.d.mts +42 -0
  172. package/lib/import/figma/query.d.ts +15 -2
  173. package/lib/import/figma/query.mjs +106 -78
  174. package/lib/import/figma/types/api.d.cts +53 -0
  175. package/lib/import/figma/types/api.d.mts +53 -0
  176. package/lib/import/figma/types/api.d.ts +1 -1
  177. package/lib/import/figma/types/nodes.d.cts +44 -0
  178. package/lib/import/figma/types/nodes.d.mts +44 -0
  179. package/lib/import/figma/types/nodes.d.ts +1 -1
  180. package/lib/import/figma/types/options.d.cts +59 -0
  181. package/lib/import/figma/types/options.d.mts +59 -0
  182. package/lib/import/figma/types/options.d.ts +1 -1
  183. package/lib/import/figma/types/result.d.cts +44 -0
  184. package/lib/import/figma/types/result.d.mts +44 -0
  185. package/lib/import/figma/types/result.d.ts +1 -1
  186. package/lib/index.cjs +15 -13
  187. package/lib/index.d.cts +78 -0
  188. package/lib/index.d.mts +78 -0
  189. package/lib/index.d.ts +8 -5
  190. package/lib/index.mjs +14 -12
  191. package/lib/misc/bump-version.d.cts +6 -0
  192. package/lib/misc/bump-version.d.mts +6 -0
  193. package/lib/misc/cheerio.d.cts +9 -0
  194. package/lib/misc/cheerio.d.mts +9 -0
  195. package/lib/misc/cheerio.d.ts +1 -1
  196. package/lib/misc/compare-dirs.cjs +3 -3
  197. package/lib/misc/compare-dirs.d.cts +11 -0
  198. package/lib/misc/compare-dirs.d.mts +11 -0
  199. package/lib/misc/compare-dirs.d.ts +1 -1
  200. package/lib/misc/compare-dirs.mjs +3 -3
  201. package/lib/misc/exec.d.cts +12 -0
  202. package/lib/misc/exec.d.mts +12 -0
  203. package/lib/misc/exec.d.ts +1 -1
  204. package/lib/misc/keyword.d.cts +6 -0
  205. package/lib/misc/keyword.d.mts +6 -0
  206. package/lib/misc/scan.d.cts +33 -0
  207. package/lib/misc/scan.d.mts +33 -0
  208. package/lib/misc/scan.d.ts +3 -3
  209. package/lib/misc/write-json.d.cts +6 -0
  210. package/lib/misc/write-json.d.mts +6 -0
  211. package/lib/optimise/figma.cjs +55 -33
  212. package/lib/optimise/figma.d.cts +13 -0
  213. package/lib/optimise/figma.d.mts +13 -0
  214. package/lib/optimise/figma.d.ts +3 -1
  215. package/lib/optimise/figma.mjs +55 -33
  216. package/lib/optimise/flags.cjs +3 -3
  217. package/lib/optimise/flags.d.cts +11 -0
  218. package/lib/optimise/flags.d.mts +11 -0
  219. package/lib/optimise/flags.d.ts +1 -1
  220. package/lib/optimise/flags.mjs +3 -3
  221. package/lib/optimise/global-style.cjs +7 -7
  222. package/lib/optimise/global-style.d.cts +11 -0
  223. package/lib/optimise/global-style.d.mts +11 -0
  224. package/lib/optimise/global-style.d.ts +1 -1
  225. package/lib/optimise/global-style.mjs +7 -7
  226. package/lib/optimise/mask.cjs +1 -1
  227. package/lib/optimise/mask.d.cts +24 -0
  228. package/lib/optimise/mask.d.mts +24 -0
  229. package/lib/optimise/mask.mjs +2 -2
  230. package/lib/optimise/origin.d.cts +11 -0
  231. package/lib/optimise/origin.d.mts +11 -0
  232. package/lib/optimise/scale.d.cts +11 -0
  233. package/lib/optimise/scale.d.mts +11 -0
  234. package/lib/optimise/svgo.cjs +1 -1
  235. package/lib/optimise/svgo.d.cts +37 -0
  236. package/lib/optimise/svgo.d.mts +37 -0
  237. package/lib/optimise/svgo.mjs +1 -1
  238. package/lib/optimise/unwrap.cjs +31 -0
  239. package/lib/optimise/unwrap.d.cts +11 -0
  240. package/lib/optimise/unwrap.d.mts +11 -0
  241. package/lib/optimise/unwrap.d.ts +11 -0
  242. package/lib/optimise/unwrap.mjs +29 -0
  243. package/lib/svg/analyse/error.d.cts +10 -0
  244. package/lib/svg/analyse/error.d.mts +10 -0
  245. package/lib/svg/analyse/error.d.ts +1 -0
  246. package/lib/svg/analyse/types.d.cts +92 -0
  247. package/lib/svg/analyse/types.d.mts +92 -0
  248. package/lib/svg/analyse/types.d.ts +4 -3
  249. package/lib/svg/analyse.cjs +2 -2
  250. package/lib/svg/analyse.d.cts +15 -0
  251. package/lib/svg/analyse.d.mts +15 -0
  252. package/lib/svg/analyse.d.ts +1 -0
  253. package/lib/svg/analyse.mjs +4 -4
  254. package/lib/svg/cleanup/attribs.cjs +1 -1
  255. package/lib/svg/cleanup/attribs.d.cts +11 -0
  256. package/lib/svg/cleanup/attribs.d.mts +11 -0
  257. package/lib/svg/cleanup/attribs.mjs +2 -2
  258. package/lib/svg/cleanup/bad-tags.cjs +1 -1
  259. package/lib/svg/cleanup/bad-tags.d.cts +17 -0
  260. package/lib/svg/cleanup/bad-tags.d.mts +17 -0
  261. package/lib/svg/cleanup/bad-tags.d.ts +1 -1
  262. package/lib/svg/cleanup/bad-tags.mjs +2 -2
  263. package/lib/svg/cleanup/inline-style.cjs +1 -1
  264. package/lib/svg/cleanup/inline-style.d.cts +11 -0
  265. package/lib/svg/cleanup/inline-style.d.mts +11 -0
  266. package/lib/svg/cleanup/inline-style.mjs +2 -2
  267. package/lib/svg/cleanup/root-style.cjs +1 -1
  268. package/lib/svg/cleanup/root-style.d.cts +17 -0
  269. package/lib/svg/cleanup/root-style.d.mts +17 -0
  270. package/lib/svg/cleanup/root-style.mjs +2 -2
  271. package/lib/svg/cleanup/root-svg.cjs +3 -3
  272. package/lib/svg/cleanup/root-svg.d.cts +11 -0
  273. package/lib/svg/cleanup/root-svg.d.mts +11 -0
  274. package/lib/svg/cleanup/root-svg.mjs +3 -3
  275. package/lib/svg/cleanup/svgo-style.cjs +2 -2
  276. package/lib/svg/cleanup/svgo-style.d.cts +11 -0
  277. package/lib/svg/cleanup/svgo-style.d.mts +11 -0
  278. package/lib/svg/cleanup/svgo-style.mjs +3 -3
  279. package/lib/svg/cleanup.d.cts +16 -0
  280. package/lib/svg/cleanup.d.mts +16 -0
  281. package/lib/svg/cleanup.d.ts +1 -1
  282. package/lib/svg/data/attributes.d.cts +77 -0
  283. package/lib/svg/data/attributes.d.mts +77 -0
  284. package/lib/svg/data/tags.d.cts +95 -0
  285. package/lib/svg/data/tags.d.mts +95 -0
  286. package/lib/svg/index.cjs +18 -1
  287. package/lib/svg/index.d.cts +52 -0
  288. package/lib/svg/index.d.mts +52 -0
  289. package/lib/svg/index.d.ts +5 -1
  290. package/lib/svg/index.mjs +19 -2
  291. package/lib/svg/parse-style.cjs +178 -235
  292. package/lib/svg/parse-style.d.cts +58 -0
  293. package/lib/svg/parse-style.d.mts +58 -0
  294. package/lib/svg/parse-style.d.ts +3 -9
  295. package/lib/svg/parse-style.mjs +180 -236
  296. package/lib/svg/parse.cjs +27 -59
  297. package/lib/svg/parse.d.cts +30 -0
  298. package/lib/svg/parse.d.mts +30 -0
  299. package/lib/svg/parse.d.ts +3 -10
  300. package/lib/svg/parse.mjs +28 -59
  301. package/package.json +34 -24
package/lib/svg/index.cjs CHANGED
@@ -17,11 +17,21 @@ function _interopNamespaceCompat(e) {
17
17
 
18
18
  const cheerio__namespace = /*#__PURE__*/_interopNamespaceCompat(cheerio);
19
19
 
20
+ var __defProp = Object.defineProperty;
21
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
22
+ var __publicField = (obj, key, value) => {
23
+ __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
24
+ return value;
25
+ };
20
26
  class SVG {
21
27
  /**
22
28
  * Constructor
23
29
  */
24
30
  constructor(content) {
31
+ // Cheerio tree, initialized in load()
32
+ __publicField(this, "$svg");
33
+ // Dimensions, initialized in load()
34
+ __publicField(this, "viewBox");
25
35
  this.load(content);
26
36
  }
27
37
  /**
@@ -31,7 +41,7 @@ class SVG {
31
41
  if (customisations) {
32
42
  const data = utils.iconToSVG(this.getIcon(), customisations);
33
43
  let svgAttributes = ' xmlns="http://www.w3.org/2000/svg"';
34
- if (data.body.indexOf("xlink:") !== -1) {
44
+ if (data.body.includes("xlink:")) {
35
45
  svgAttributes += ' xmlns:xlink="http://www.w3.org/1999/xlink"';
36
46
  }
37
47
  for (const key in data.attributes) {
@@ -62,6 +72,13 @@ class SVG {
62
72
  toMinifiedString(customisations) {
63
73
  return utils.trimSVG(this.toString(customisations));
64
74
  }
75
+ /**
76
+ * Get SVG as string with whitespaces
77
+ */
78
+ toPrettyString(customisations) {
79
+ const str = this.toMinifiedString(customisations);
80
+ return utils.prettifySVG(str) ?? str;
81
+ }
65
82
  /**
66
83
  * Get body
67
84
  */
@@ -0,0 +1,52 @@
1
+ import * as cheerio from 'cheerio';
2
+ import { IconifyIcon } from '@iconify/types';
3
+ export { IconifyIcon } from '@iconify/types';
4
+ import { IconifyIconCustomisations } from '@iconify/utils/lib/customisations/defaults';
5
+ export { IconifyIconCustomisations } from '@iconify/utils/lib/customisations/defaults';
6
+
7
+ interface ViewBox {
8
+ left: number;
9
+ top: number;
10
+ width: number;
11
+ height: number;
12
+ }
13
+
14
+ /**
15
+ * SVG class, used to manipulate icon content.
16
+ */
17
+ declare class SVG {
18
+ $svg: cheerio.CheerioAPI;
19
+ viewBox: ViewBox;
20
+ /**
21
+ * Constructor
22
+ */
23
+ constructor(content: string);
24
+ /**
25
+ * Get SVG as string
26
+ */
27
+ toString(customisations?: IconifyIconCustomisations): string;
28
+ /**
29
+ * Get SVG as string without whitespaces
30
+ */
31
+ toMinifiedString(customisations?: IconifyIconCustomisations): string;
32
+ /**
33
+ * Get SVG as string with whitespaces
34
+ */
35
+ toPrettyString(customisations?: IconifyIconCustomisations): string;
36
+ /**
37
+ * Get body
38
+ */
39
+ getBody(): string;
40
+ /**
41
+ * Get icon as IconifyIcon
42
+ */
43
+ getIcon(): IconifyIcon;
44
+ /**
45
+ * Load SVG
46
+ *
47
+ * @param {string} content
48
+ */
49
+ load(content: string): void;
50
+ }
51
+
52
+ export { SVG, type ViewBox };
@@ -0,0 +1,52 @@
1
+ import * as cheerio from 'cheerio';
2
+ import { IconifyIcon } from '@iconify/types';
3
+ export { IconifyIcon } from '@iconify/types';
4
+ import { IconifyIconCustomisations } from '@iconify/utils/lib/customisations/defaults';
5
+ export { IconifyIconCustomisations } from '@iconify/utils/lib/customisations/defaults';
6
+
7
+ interface ViewBox {
8
+ left: number;
9
+ top: number;
10
+ width: number;
11
+ height: number;
12
+ }
13
+
14
+ /**
15
+ * SVG class, used to manipulate icon content.
16
+ */
17
+ declare class SVG {
18
+ $svg: cheerio.CheerioAPI;
19
+ viewBox: ViewBox;
20
+ /**
21
+ * Constructor
22
+ */
23
+ constructor(content: string);
24
+ /**
25
+ * Get SVG as string
26
+ */
27
+ toString(customisations?: IconifyIconCustomisations): string;
28
+ /**
29
+ * Get SVG as string without whitespaces
30
+ */
31
+ toMinifiedString(customisations?: IconifyIconCustomisations): string;
32
+ /**
33
+ * Get SVG as string with whitespaces
34
+ */
35
+ toPrettyString(customisations?: IconifyIconCustomisations): string;
36
+ /**
37
+ * Get body
38
+ */
39
+ getBody(): string;
40
+ /**
41
+ * Get icon as IconifyIcon
42
+ */
43
+ getIcon(): IconifyIcon;
44
+ /**
45
+ * Load SVG
46
+ *
47
+ * @param {string} content
48
+ */
49
+ load(content: string): void;
50
+ }
51
+
52
+ export { SVG, type ViewBox };
@@ -29,6 +29,10 @@ declare class SVG {
29
29
  * Get SVG as string without whitespaces
30
30
  */
31
31
  toMinifiedString(customisations?: IconifyIconCustomisations): string;
32
+ /**
33
+ * Get SVG as string with whitespaces
34
+ */
35
+ toPrettyString(customisations?: IconifyIconCustomisations): string;
32
36
  /**
33
37
  * Get body
34
38
  */
@@ -45,4 +49,4 @@ declare class SVG {
45
49
  load(content: string): void;
46
50
  }
47
51
 
48
- export { SVG, ViewBox };
52
+ export { SVG, type ViewBox };
package/lib/svg/index.mjs CHANGED
@@ -1,11 +1,21 @@
1
1
  import * as cheerio from 'cheerio';
2
- import { iconToSVG, trimSVG } from '@iconify/utils';
2
+ import { iconToSVG, trimSVG, prettifySVG } from '@iconify/utils';
3
3
 
4
+ var __defProp = Object.defineProperty;
5
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
6
+ var __publicField = (obj, key, value) => {
7
+ __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
8
+ return value;
9
+ };
4
10
  class SVG {
5
11
  /**
6
12
  * Constructor
7
13
  */
8
14
  constructor(content) {
15
+ // Cheerio tree, initialized in load()
16
+ __publicField(this, "$svg");
17
+ // Dimensions, initialized in load()
18
+ __publicField(this, "viewBox");
9
19
  this.load(content);
10
20
  }
11
21
  /**
@@ -15,7 +25,7 @@ class SVG {
15
25
  if (customisations) {
16
26
  const data = iconToSVG(this.getIcon(), customisations);
17
27
  let svgAttributes = ' xmlns="http://www.w3.org/2000/svg"';
18
- if (data.body.indexOf("xlink:") !== -1) {
28
+ if (data.body.includes("xlink:")) {
19
29
  svgAttributes += ' xmlns:xlink="http://www.w3.org/1999/xlink"';
20
30
  }
21
31
  for (const key in data.attributes) {
@@ -46,6 +56,13 @@ class SVG {
46
56
  toMinifiedString(customisations) {
47
57
  return trimSVG(this.toString(customisations));
48
58
  }
59
+ /**
60
+ * Get SVG as string with whitespaces
61
+ */
62
+ toPrettyString(customisations) {
63
+ const str = this.toMinifiedString(customisations);
64
+ return prettifySVG(str) ?? str;
65
+ }
49
66
  /**
50
67
  * Get body
51
68
  */
@@ -9,156 +9,147 @@ require('../css/parser/error.cjs');
9
9
  require('../css/parser/strings.cjs');
10
10
  require('../css/parser/text.cjs');
11
11
 
12
- function parseItem(item, callback, done) {
13
- const tagName = item.tagName;
14
- const $element = item.$element;
15
- function parseStyleItem(done2) {
16
- const content = $element.text();
17
- if (typeof content !== "string") {
18
- $element.remove();
19
- return done2();
20
- }
21
- const tokens = css_parser_tokens.getTokens(content);
22
- if (!(tokens instanceof Array)) {
23
- throw new Error("Error parsing style");
24
- }
25
- let changed2 = false;
26
- const selectorStart = [];
27
- let newTokens = [];
28
- const parsedTokens = () => {
29
- if (changed2) {
30
- const tree = css_parser_tree.tokensTree(
31
- newTokens.filter((token) => token !== null)
32
- );
33
- if (!tree.length) {
34
- $element.remove();
35
- } else {
36
- const newContent = css_parser_export.tokensToString(tree);
37
- item.$element.text("\n" + newContent);
38
- }
12
+ function assertNotOldCode(value) {
13
+ if (value instanceof Promise) {
14
+ throw new Error("parseSVGStyle does not support async callbacks");
15
+ }
16
+ }
17
+ function parseSVGStyle(svg, callback) {
18
+ svg_parse.parseSVG(svg, (item) => {
19
+ const tagName = item.tagName;
20
+ const $element = item.$element;
21
+ function parseStyleItem() {
22
+ const content = $element.text();
23
+ if (typeof content !== "string") {
24
+ $element.remove();
25
+ return;
39
26
  }
40
- done2();
41
- };
42
- const nextToken = () => {
43
- const token = tokens.shift();
44
- if (token === void 0) {
45
- return parsedTokens();
27
+ const tokens = css_parser_tokens.getTokens(content);
28
+ if (!(tokens instanceof Array)) {
29
+ throw new Error("Error parsing style");
46
30
  }
47
- switch (token.type) {
48
- case "selector":
49
- selectorStart.push(newTokens.length);
50
- newTokens.push(token);
51
- return nextToken();
52
- case "close":
53
- selectorStart.pop();
54
- newTokens.push(token);
55
- return nextToken();
56
- case "at-rule": {
57
- selectorStart.push(newTokens.length);
58
- const prop = token.rule;
59
- const value = token.value;
60
- const isAnimation = prop === "keyframes" || prop.slice(0, 1) === "-" && prop.split("-").pop() === "keyframes";
61
- const childTokens = [];
62
- const animationRules = /* @__PURE__ */ Object.create(null);
63
- let depth = 1;
64
- let index = 0;
65
- let isFrom = false;
66
- while (depth > 0) {
67
- const childToken = tokens[index];
68
- index++;
69
- if (!childToken) {
70
- throw new Error("Something went wrong parsing CSS");
71
- }
72
- childTokens.push(childToken);
73
- switch (childToken.type) {
74
- case "close": {
75
- depth--;
76
- isFrom = false;
77
- break;
31
+ let changed2 = false;
32
+ const selectorStart = [];
33
+ let newTokens = [];
34
+ while (tokens.length) {
35
+ const token = tokens.shift();
36
+ if (!token) {
37
+ break;
38
+ }
39
+ switch (token.type) {
40
+ case "selector":
41
+ selectorStart.push(newTokens.length);
42
+ newTokens.push(token);
43
+ break;
44
+ case "close":
45
+ selectorStart.pop();
46
+ newTokens.push(token);
47
+ break;
48
+ case "at-rule": {
49
+ selectorStart.push(newTokens.length);
50
+ const prop = token.rule;
51
+ const value = token.value;
52
+ const isAnimation = prop === "keyframes" || prop.slice(0, 1) === "-" && prop.split("-").pop() === "keyframes";
53
+ const childTokens = [];
54
+ const animationRules = /* @__PURE__ */ Object.create(null);
55
+ let depth = 1;
56
+ let index = 0;
57
+ let isFrom = false;
58
+ while (depth > 0) {
59
+ const childToken = tokens[index];
60
+ index++;
61
+ if (!childToken) {
62
+ throw new Error(
63
+ "Something went wrong parsing CSS"
64
+ );
78
65
  }
79
- case "selector": {
80
- depth++;
81
- if (isAnimation) {
82
- const rule = childToken.code;
83
- if (rule === "from" || rule === "0%") {
84
- isFrom = true;
66
+ childTokens.push(childToken);
67
+ switch (childToken.type) {
68
+ case "close": {
69
+ depth--;
70
+ isFrom = false;
71
+ break;
72
+ }
73
+ case "selector": {
74
+ depth++;
75
+ if (isAnimation) {
76
+ const rule = childToken.code;
77
+ if (rule === "from" || rule === "0%") {
78
+ isFrom = true;
79
+ }
85
80
  }
81
+ break;
86
82
  }
87
- break;
88
- }
89
- case "at-rule": {
90
- depth++;
91
- if (isAnimation) {
92
- throw new Error(
93
- "Nested at-rule in keyframes ???"
94
- );
83
+ case "at-rule": {
84
+ depth++;
85
+ if (isAnimation) {
86
+ throw new Error(
87
+ "Nested at-rule in keyframes ???"
88
+ );
89
+ }
90
+ break;
95
91
  }
96
- break;
97
- }
98
- case "rule": {
99
- if (isAnimation && isFrom) {
100
- animationRules[childToken.prop] = childToken.value;
92
+ case "rule": {
93
+ if (isAnimation && isFrom) {
94
+ animationRules[childToken.prop] = childToken.value;
95
+ }
96
+ break;
101
97
  }
102
- break;
103
98
  }
104
99
  }
105
- }
106
- const skipCount = childTokens.length;
107
- callback(
108
- isAnimation ? {
109
- type: "keyframes",
110
- prop,
111
- value,
112
- token,
113
- childTokens,
114
- from: animationRules,
115
- prevTokens: newTokens,
116
- nextTokens: tokens.slice(0)
117
- } : {
118
- type: "at-rule",
119
- prop,
120
- value,
121
- token,
122
- childTokens,
123
- prevTokens: newTokens,
124
- nextTokens: tokens.slice(0)
125
- },
126
- (result) => {
127
- if (result !== void 0) {
128
- if (isAnimation) {
129
- if (result !== value) {
130
- changed2 = true;
131
- token.value = result;
132
- }
133
- newTokens.push(token);
134
- for (let i = 0; i < skipCount; i++) {
135
- tokens.shift();
136
- }
137
- newTokens = newTokens.concat(childTokens);
138
- } else {
139
- if (result !== value) {
140
- throw new Error(
141
- "Changing value for at-rule is not supported"
142
- );
143
- }
144
- newTokens.push(token);
100
+ const skipCount = childTokens.length;
101
+ const result = callback(
102
+ isAnimation ? {
103
+ type: "keyframes",
104
+ prop,
105
+ value,
106
+ token,
107
+ childTokens,
108
+ from: animationRules,
109
+ prevTokens: newTokens,
110
+ nextTokens: tokens.slice(0)
111
+ } : {
112
+ type: "at-rule",
113
+ prop,
114
+ value,
115
+ token,
116
+ childTokens,
117
+ prevTokens: newTokens,
118
+ nextTokens: tokens.slice(0)
119
+ }
120
+ );
121
+ if (result !== void 0) {
122
+ assertNotOldCode(result);
123
+ if (isAnimation) {
124
+ if (result !== value) {
125
+ changed2 = true;
126
+ token.value = result;
145
127
  }
146
- } else {
147
- changed2 = true;
128
+ newTokens.push(token);
148
129
  for (let i = 0; i < skipCount; i++) {
149
130
  tokens.shift();
150
131
  }
132
+ newTokens = newTokens.concat(childTokens);
133
+ } else {
134
+ if (result !== value) {
135
+ throw new Error(
136
+ "Changing value for at-rule is not supported"
137
+ );
138
+ }
139
+ newTokens.push(token);
140
+ }
141
+ } else {
142
+ changed2 = true;
143
+ for (let i = 0; i < skipCount; i++) {
144
+ tokens.shift();
151
145
  }
152
- nextToken();
153
146
  }
154
- );
155
- return;
156
- }
157
- case "rule": {
158
- const value = token.value;
159
- const selectorTokens = selectorStart.map((index) => newTokens[index]).filter((item2) => item2 !== null);
160
- callback(
161
- {
147
+ break;
148
+ }
149
+ case "rule": {
150
+ const value = token.value;
151
+ const selectorTokens = selectorStart.map((index) => newTokens[index]).filter((item2) => item2 !== null);
152
+ const result = callback({
162
153
  type: "global",
163
154
  prop: token.prop,
164
155
  value,
@@ -179,122 +170,74 @@ function parseItem(item, callback, done) {
179
170
  ),
180
171
  prevTokens: newTokens,
181
172
  nextTokens: tokens.slice(0)
182
- },
183
- (result) => {
184
- if (result !== void 0) {
185
- if (result !== value) {
186
- changed2 = true;
187
- token.value = result;
188
- }
189
- newTokens.push(token);
190
- } else {
173
+ });
174
+ if (result !== void 0) {
175
+ assertNotOldCode(result);
176
+ if (result !== value) {
191
177
  changed2 = true;
178
+ token.value = result;
192
179
  }
193
- nextToken();
180
+ newTokens.push(token);
181
+ } else {
182
+ changed2 = true;
194
183
  }
195
- );
196
- return;
184
+ break;
185
+ }
197
186
  }
198
187
  }
199
- };
200
- nextToken();
201
- }
202
- if (tagName === "style") {
203
- return parseStyleItem(done);
204
- }
205
- const attribs = item.element.attribs;
206
- if (attribs.style === void 0) {
207
- return done();
208
- }
209
- const parsedStyle = css_parse.parseInlineStyle(attribs.style);
210
- if (parsedStyle === null) {
211
- $element.removeAttr("style");
212
- return done();
213
- }
214
- const propsQueue = Object.keys(parsedStyle);
215
- let changed = false;
216
- const parsedProps = () => {
217
- if (changed) {
218
- const newStyle = Object.keys(parsedStyle).map((key) => key + ":" + parsedStyle[key] + ";").join("");
219
- if (!newStyle.length) {
220
- $element.removeAttr("style");
221
- } else {
222
- $element.attr("style", newStyle);
188
+ if (changed2) {
189
+ const tree = css_parser_tree.tokensTree(
190
+ newTokens.filter((token) => token !== null)
191
+ );
192
+ if (!tree.length) {
193
+ $element.remove();
194
+ } else {
195
+ const newContent = css_parser_export.tokensToString(tree);
196
+ item.$element.text("\n" + newContent);
197
+ }
223
198
  }
224
199
  }
225
- done();
226
- };
227
- const nextProp = () => {
228
- const prop = propsQueue.shift();
229
- if (prop === void 0) {
230
- return parsedProps();
200
+ if (tagName === "style") {
201
+ parseStyleItem();
202
+ return;
203
+ }
204
+ const attribs = item.element.attribs;
205
+ if (attribs.style === void 0) {
206
+ return;
207
+ }
208
+ const parsedStyle = css_parse.parseInlineStyle(attribs.style);
209
+ if (parsedStyle === null) {
210
+ $element.removeAttr("style");
211
+ return;
231
212
  }
232
- const value = parsedStyle[prop];
233
- callback(
234
- {
213
+ let changed = false;
214
+ for (const prop in parsedStyle) {
215
+ const value = parsedStyle[prop];
216
+ const result = callback({
235
217
  type: "inline",
236
218
  prop,
237
219
  value,
238
220
  item
239
- },
240
- (result) => {
241
- if (result !== value) {
242
- changed = true;
243
- if (result === void 0) {
244
- delete parsedStyle[prop];
245
- } else {
246
- parsedStyle[prop] = result;
247
- }
221
+ });
222
+ assertNotOldCode(result);
223
+ if (result !== value) {
224
+ changed = true;
225
+ if (result === void 0) {
226
+ delete parsedStyle[prop];
227
+ } else {
228
+ parsedStyle[prop] = result;
248
229
  }
249
- nextProp();
250
- }
251
- );
252
- };
253
- nextProp();
254
- }
255
- async function parseSVGStyle(svg, callback) {
256
- return svg_parse.parseSVG(svg, (item) => {
257
- return new Promise((fulfill, reject) => {
258
- try {
259
- parseItem(
260
- item,
261
- (styleItem, done) => {
262
- try {
263
- const result = callback(styleItem);
264
- if (result instanceof Promise) {
265
- result.then(done).catch(reject);
266
- } else {
267
- done(result);
268
- }
269
- } catch (err) {
270
- reject(err);
271
- }
272
- },
273
- fulfill
274
- );
275
- } catch (err) {
276
- reject(err);
277
230
  }
278
- });
279
- });
280
- }
281
- function parseSVGStyleSync(svg, callback) {
282
- let isSync = true;
283
- svg_parse.parseSVGSync(svg, (item) => {
284
- parseItem(
285
- item,
286
- (styleItem, done) => {
287
- done(callback(styleItem));
288
- },
289
- () => {
290
- if (!isSync) {
291
- throw new Error("parseSVGStyleSync callback was async");
292
- }
231
+ }
232
+ if (changed) {
233
+ const newStyle = Object.keys(parsedStyle).map((key) => key + ":" + parsedStyle[key] + ";").join("");
234
+ if (!newStyle.length) {
235
+ $element.removeAttr("style");
236
+ } else {
237
+ $element.attr("style", newStyle);
293
238
  }
294
- );
239
+ }
295
240
  });
296
- isSync = false;
297
241
  }
298
242
 
299
243
  exports.parseSVGStyle = parseSVGStyle;
300
- exports.parseSVGStyleSync = parseSVGStyleSync;