@iconify/tools 2.0.14 → 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 (309) 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 +41 -26
  55. package/lib/download/git/reset.cjs +41 -0
  56. package/lib/download/git/reset.d.ts +3 -1
  57. package/lib/download/git/reset.mjs +29 -5
  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 +20 -21
  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 +40 -53
  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 +7 -10
  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 +3 -11
  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 -44
  159. package/lib/index.mjs +83 -94
  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 +18 -15
  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 -14
  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 +99 -94
  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 -75
  251. package/lib/download/git/reset.js +0 -16
  252. package/lib/download/github/hash.js +0 -28
  253. package/lib/download/github/index.js +0 -116
  254. package/lib/download/github/types.js +0 -2
  255. package/lib/download/gitlab/hash.js +0 -27
  256. package/lib/download/gitlab/index.js +0 -115
  257. package/lib/download/gitlab/types.js +0 -7
  258. package/lib/download/helpers/untar.js +0 -14
  259. package/lib/download/helpers/unzip.js +0 -18
  260. package/lib/download/index.js +0 -27
  261. package/lib/download/npm/index.js +0 -91
  262. package/lib/download/npm/types.js +0 -2
  263. package/lib/download/npm/version.js +0 -27
  264. package/lib/download/types/modified.js +0 -2
  265. package/lib/download/types/sources.js +0 -2
  266. package/lib/export/directory.js +0 -52
  267. package/lib/export/helpers/custom-files.js +0 -32
  268. package/lib/export/helpers/prepare.js +0 -49
  269. package/lib/export/helpers/types-version.js +0 -12
  270. package/lib/export/icon-package.js +0 -77
  271. package/lib/export/json-package.js +0 -156
  272. package/lib/icon-set/index.js +0 -749
  273. package/lib/icon-set/match.js +0 -66
  274. package/lib/icon-set/merge.js +0 -90
  275. package/lib/icon-set/props.js +0 -34
  276. package/lib/icon-set/types.js +0 -2
  277. package/lib/import/directory.js +0 -59
  278. package/lib/import/figma/index.js +0 -90
  279. package/lib/import/figma/nodes.js +0 -106
  280. package/lib/import/figma/query.js +0 -244
  281. package/lib/import/figma/types/api.js +0 -12
  282. package/lib/import/figma/types/nodes.js +0 -2
  283. package/lib/import/figma/types/options.js +0 -2
  284. package/lib/import/figma/types/result.js +0 -2
  285. package/lib/index.js +0 -103
  286. package/lib/misc/bump-version.js +0 -19
  287. package/lib/misc/compare-dirs.js +0 -84
  288. package/lib/misc/exec.js +0 -26
  289. package/lib/misc/keyword.js +0 -31
  290. package/lib/misc/scan.js +0 -55
  291. package/lib/misc/write-json.js +0 -11
  292. package/lib/optimise/flags.js +0 -312
  293. package/lib/optimise/global-style.js +0 -185
  294. package/lib/optimise/scale.js +0 -42
  295. package/lib/optimise/svgo.js +0 -99
  296. package/lib/svg/analyse/error.js +0 -22
  297. package/lib/svg/analyse/types.js +0 -2
  298. package/lib/svg/analyse.js +0 -352
  299. package/lib/svg/cleanup/attribs.js +0 -51
  300. package/lib/svg/cleanup/bad-tags.js +0 -65
  301. package/lib/svg/cleanup/inline-style.js +0 -77
  302. package/lib/svg/cleanup/root-svg.js +0 -107
  303. package/lib/svg/cleanup/svgo-style.js +0 -35
  304. package/lib/svg/cleanup.js +0 -24
  305. package/lib/svg/data/attributes.js +0 -403
  306. package/lib/svg/data/tags.js +0 -188
  307. package/lib/svg/index.js +0 -134
  308. package/lib/svg/parse-style.js +0 -151
  309. package/lib/svg/parse.js +0 -49
@@ -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
  * Scale icon
4
7
  */
5
- export declare function scaleSVG(svg: SVG, scale: number): Promise<void>;
8
+ declare function scaleSVG(svg: SVG, scale: number): Promise<void>;
9
+
10
+ export { scaleSVG };
@@ -1,5 +1,6 @@
1
- // src/optimise/scale.ts
2
- import { runSVGO } from "./svgo.mjs";
1
+ import { runSVGO } from './svgo.mjs';
2
+ import 'svgo';
3
+
3
4
  async function scaleSVG(svg, scale) {
4
5
  const viewBox = svg.viewBox;
5
6
  const width = viewBox.width * scale;
@@ -17,6 +18,5 @@ async function scaleSVG(svg, scale) {
17
18
  ]
18
19
  });
19
20
  }
20
- export {
21
- scaleSVG
22
- };
21
+
22
+ export { scaleSVG };
@@ -0,0 +1,83 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ const svgo = require('svgo');
6
+
7
+ const defaultSVGOPlugins = [
8
+ "cleanupAttrs",
9
+ "mergeStyles",
10
+ "inlineStyles",
11
+ "removeComments",
12
+ "removeUselessDefs",
13
+ "removeEditorsNSData",
14
+ "removeEmptyAttrs",
15
+ "removeEmptyContainers",
16
+ "convertStyleToAttrs",
17
+ "convertColors",
18
+ "convertTransform",
19
+ "removeUnknownsAndDefaults",
20
+ "removeNonInheritableGroupAttrs",
21
+ "removeUselessStrokeAndFill",
22
+ "removeUnusedNS",
23
+ "cleanupNumericValues",
24
+ "cleanupListOfValues",
25
+ "moveElemsAttrsToGroup",
26
+ "moveGroupAttrsToElems",
27
+ "collapseGroups",
28
+ "sortDefsChildren",
29
+ "sortAttrs"
30
+ ];
31
+ const shapeModifiyingSVGOPlugins = [
32
+ "removeHiddenElems",
33
+ "convertShapeToPath",
34
+ "convertEllipseToCircle",
35
+ {
36
+ name: "convertPathData",
37
+ params: {
38
+ noSpaceAfterFlags: true
39
+ }
40
+ },
41
+ {
42
+ name: "mergePaths",
43
+ params: {
44
+ noSpaceAfterFlags: true
45
+ }
46
+ },
47
+ "reusePaths"
48
+ ];
49
+ async function runSVGO(svg, options = {}) {
50
+ const code = svg.toString();
51
+ const multipass = options.multipass !== false;
52
+ let plugins;
53
+ if (options.plugins) {
54
+ plugins = options.plugins;
55
+ } else {
56
+ let keepShapes = options.keepShapes;
57
+ if (keepShapes === void 0 && (code.indexOf("<animate") !== -1 || code.indexOf("<set") !== -1)) {
58
+ keepShapes = true;
59
+ }
60
+ plugins = defaultSVGOPlugins.concat(keepShapes ? [] : shapeModifiyingSVGOPlugins, options.cleanupIDs !== false ? [
61
+ {
62
+ name: "cleanupIDs",
63
+ params: {
64
+ prefix: typeof options.cleanupIDs === "string" ? options.cleanupIDs : "svgID"
65
+ }
66
+ }
67
+ ] : []);
68
+ }
69
+ const pluginOptions = {
70
+ plugins,
71
+ multipass
72
+ };
73
+ const result = svgo.optimize(code, pluginOptions);
74
+ if (typeof result.error === "string") {
75
+ throw new Error(result.error);
76
+ }
77
+ const content = result.data.replace(/<defs\/>/g, "");
78
+ svg.load(content);
79
+ }
80
+
81
+ exports.defaultSVGOPlugins = defaultSVGOPlugins;
82
+ exports.runSVGO = runSVGO;
83
+ exports.shapeModifiyingSVGOPlugins = shapeModifiyingSVGOPlugins;
@@ -1,10 +1,13 @@
1
- import type { Plugin } from 'svgo';
2
- import type { SVG } from '../svg';
3
- export declare const defaultSVGOPlugins: Plugin[];
1
+ import { Plugin } from 'svgo';
2
+ import { SVG } from '../svg/index.js';
3
+ import '@iconify/types';
4
+ import '@iconify/utils/lib/customisations';
5
+
6
+ declare const defaultSVGOPlugins: Plugin[];
4
7
  /**
5
8
  * Plugins that modify shapes. Added to plugins list, unless 'keepShapes' option is enabled
6
9
  */
7
- export declare const shapeModifiyingSVGOPlugins: Plugin[];
10
+ declare const shapeModifiyingSVGOPlugins: Plugin[];
8
11
  /**
9
12
  * Options
10
13
  */
@@ -23,5 +26,6 @@ declare type SVGOOptions = SVGOOptionsWithPlugin | SVGOptionsWithoutPlugin;
23
26
  /**
24
27
  * Run SVGO on icon
25
28
  */
26
- export declare function runSVGO(svg: SVG, options?: SVGOOptions): Promise<void>;
27
- export {};
29
+ declare function runSVGO(svg: SVG, options?: SVGOOptions): Promise<void>;
30
+
31
+ export { defaultSVGOPlugins, runSVGO, shapeModifiyingSVGOPlugins };
@@ -1,6 +1,6 @@
1
- // src/optimise/svgo.ts
2
- import { optimize } from "svgo";
3
- var defaultSVGOPlugins = [
1
+ import { optimize } from 'svgo';
2
+
3
+ const defaultSVGOPlugins = [
4
4
  "cleanupAttrs",
5
5
  "mergeStyles",
6
6
  "inlineStyles",
@@ -24,7 +24,7 @@ var defaultSVGOPlugins = [
24
24
  "sortDefsChildren",
25
25
  "sortAttrs"
26
26
  ];
27
- var shapeModifiyingSVGOPlugins = [
27
+ const shapeModifiyingSVGOPlugins = [
28
28
  "removeHiddenElems",
29
29
  "convertShapeToPath",
30
30
  "convertEllipseToCircle",
@@ -73,8 +73,5 @@ async function runSVGO(svg, options = {}) {
73
73
  const content = result.data.replace(/<defs\/>/g, "");
74
74
  svg.load(content);
75
75
  }
76
- export {
77
- defaultSVGOPlugins,
78
- runSVGO,
79
- shapeModifiyingSVGOPlugins
80
- };
76
+
77
+ export { defaultSVGOPlugins, runSVGO, shapeModifiyingSVGOPlugins };
@@ -0,0 +1,18 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ function analyseTagError(element) {
6
+ let result = "<" + element.tagName;
7
+ if (element._id) {
8
+ result += ' id="' + element._id + '"';
9
+ }
10
+ const attribs = element.attribs;
11
+ if (attribs["d"]) {
12
+ const value = attribs["d"];
13
+ result += ' d="' + (value.length > 16 ? value.slice(0, 12) + "..." : value) + '"';
14
+ }
15
+ return result + ">";
16
+ }
17
+
18
+ exports.analyseTagError = analyseTagError;
@@ -1,5 +1,8 @@
1
- import type { ExtendedTagElement } from './types';
1
+ import { ExtendedTagElement } from './types.js';
2
+
2
3
  /**
3
4
  * Get tag for error message
4
5
  */
5
- export declare function analyseTagError(element: ExtendedTagElement): string;
6
+ declare function analyseTagError(element: ExtendedTagElement): string;
7
+
8
+ export { analyseTagError };
@@ -1,4 +1,3 @@
1
- // src/svg/analyse/error.ts
2
1
  function analyseTagError(element) {
3
2
  let result = "<" + element.tagName;
4
3
  if (element._id) {
@@ -11,6 +10,5 @@ function analyseTagError(element) {
11
10
  }
12
11
  return result + ">";
13
12
  }
14
- export {
15
- analyseTagError
16
- };
13
+
14
+ export { analyseTagError };
@@ -0,0 +1,2 @@
1
+ 'use strict';
2
+
@@ -1,8 +1,7 @@
1
- /// <reference types="cheerio" />
2
1
  /**
3
2
  * Options
4
3
  */
5
- export interface AnalyseSVGStructureOptions {
4
+ interface AnalyseSVGStructureOptions {
6
5
  fixErrors?: boolean;
7
6
  }
8
7
  /**
@@ -11,7 +10,7 @@ export interface AnalyseSVGStructureOptions {
11
10
  /**
12
11
  * Link to element
13
12
  */
14
- export interface LinkToElementWithID {
13
+ interface LinkToElementWithID {
15
14
  id: string;
16
15
  usedAsMask: boolean;
17
16
  usedByIndex: number;
@@ -19,7 +18,7 @@ export interface LinkToElementWithID {
19
18
  /**
20
19
  * How element is used by parent elements
21
20
  */
22
- export interface ExtendedTagElementUses {
21
+ interface ExtendedTagElementUses {
23
22
  _usedAsMask: boolean;
24
23
  _usedAsPaint: boolean;
25
24
  }
@@ -36,7 +35,7 @@ interface ReusableElement {
36
35
  *
37
36
  * Similar to ReusableElement, but not necessary a definition - any element with id. Also contains list of child elements
38
37
  */
39
- export interface ElementWithID {
38
+ interface ElementWithID {
40
39
  id: string;
41
40
  isMask: boolean;
42
41
  indexes: Set<number>;
@@ -51,7 +50,7 @@ interface ExtendedTagElementRelations {
51
50
  /**
52
51
  * Extended tag
53
52
  */
54
- export interface ExtendedTagElement extends cheerio.TagElement, ExtendedTagElementUses, ExtendedTagElementRelations {
53
+ interface ExtendedTagElement extends cheerio.TagElement, ExtendedTagElementUses, ExtendedTagElementRelations {
55
54
  _index: number;
56
55
  _id?: string;
57
56
  _belongsTo?: ElementWithID[];
@@ -61,13 +60,13 @@ export interface ExtendedTagElement extends cheerio.TagElement, ExtendedTagEleme
61
60
  /**
62
61
  * Additional stuff for <svg>
63
62
  */
64
- export interface ExtendedRootTagElement extends ExtendedTagElement {
63
+ interface ExtendedRootTagElement extends ExtendedTagElement {
65
64
  _parsed?: boolean;
66
65
  }
67
66
  /**
68
67
  * Tree
69
68
  */
70
- export interface ElementsTreeItem {
69
+ interface ElementsTreeItem {
71
70
  index: number;
72
71
  usedAsMask: boolean;
73
72
  parent?: ElementsTreeItem;
@@ -76,14 +75,15 @@ export interface ElementsTreeItem {
76
75
  /**
77
76
  * Elements map
78
77
  */
79
- export declare type ElementsMap = Map<number, ExtendedTagElement>;
78
+ declare type ElementsMap = Map<number, ExtendedTagElement>;
80
79
  /**
81
80
  * Result
82
81
  */
83
- export interface AnalyseSVGStructureResult {
82
+ interface AnalyseSVGStructureResult {
84
83
  elements: ElementsMap;
85
84
  ids: Record<string, number>;
86
85
  links: LinkToElementWithID[];
87
86
  tree: ElementsTreeItem;
88
87
  }
89
- export {};
88
+
89
+ export { AnalyseSVGStructureOptions, AnalyseSVGStructureResult, ElementWithID, ElementsMap, ElementsTreeItem, ExtendedRootTagElement, ExtendedTagElement, ExtendedTagElementUses, LinkToElementWithID };
@@ -0,0 +1 @@
1
+
@@ -0,0 +1,291 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ const svg_parse = require('./parse.cjs');
6
+ const svg_data_attributes = require('./data/attributes.cjs');
7
+ const svg_data_tags = require('./data/tags.cjs');
8
+ const svg_analyse_error = require('./analyse/error.cjs');
9
+
10
+ async function analyseSVGStructure(svg, options = {}) {
11
+ const fixErrors = options.fixErrors;
12
+ let root = svg.$svg(":root").get(0);
13
+ if (root._parsed) {
14
+ svg.load(svg.toString());
15
+ root = svg.$svg(":root").get(0);
16
+ }
17
+ root._parsed = true;
18
+ const cheerio = svg.$svg;
19
+ const elements = /* @__PURE__ */ new Map();
20
+ const ids = /* @__PURE__ */ Object.create(null);
21
+ let links = [];
22
+ function addID(element, id) {
23
+ if (ids[id]) {
24
+ throw new Error(`Duplicate id "${id}"`);
25
+ }
26
+ element._id = id;
27
+ ids[id] = element._index;
28
+ return true;
29
+ }
30
+ function gotElementWithID(element, id, isMask) {
31
+ addID(element, id);
32
+ if (!element._belongsTo) {
33
+ element._belongsTo = [];
34
+ }
35
+ element._belongsTo.push({
36
+ id,
37
+ isMask,
38
+ indexes: /* @__PURE__ */ new Set([element._index])
39
+ });
40
+ return;
41
+ }
42
+ function gotReusableElement(item, isMask) {
43
+ const element = item.element;
44
+ const attribs = element.attribs;
45
+ const index2 = element._index;
46
+ const id = attribs["id"];
47
+ if (typeof id !== "string") {
48
+ const message = `Definition element ${svg_analyse_error.analyseTagError(element)} does not have id`;
49
+ if (fixErrors) {
50
+ item.removeNode = true;
51
+ item.testChildren = false;
52
+ console.warn(message);
53
+ return false;
54
+ }
55
+ throw new Error(message);
56
+ }
57
+ if (ids[id] && fixErrors) {
58
+ console.warn(`Duplicate id "${id}"`);
59
+ item.removeNode = true;
60
+ item.testChildren = false;
61
+ return false;
62
+ }
63
+ element._reusableElement = {
64
+ id,
65
+ isMask,
66
+ index: index2
67
+ };
68
+ gotElementWithID(element, id, isMask);
69
+ return true;
70
+ }
71
+ function gotElementReference(item, id, usedAsMask) {
72
+ const element = item.element;
73
+ const usedByIndex = element._index;
74
+ const link = {
75
+ id,
76
+ usedByIndex,
77
+ usedAsMask
78
+ };
79
+ links.push(link);
80
+ if (!element._linksTo) {
81
+ element._linksTo = [];
82
+ }
83
+ element._linksTo.push(link);
84
+ }
85
+ let index = 0;
86
+ await svg_parse.parseSVG(svg, (item) => {
87
+ const { tagName, parents } = item;
88
+ if (svg_data_tags.styleTag.has(tagName)) {
89
+ item.testChildren = false;
90
+ return;
91
+ }
92
+ const element = item.element;
93
+ const attribs = element.attribs;
94
+ index++;
95
+ element._index = index;
96
+ elements.set(index, element);
97
+ if (!parents.length) {
98
+ element._usedAsMask = false;
99
+ element._usedAsPaint = true;
100
+ return;
101
+ }
102
+ element._usedAsMask = false;
103
+ element._usedAsPaint = false;
104
+ const parentItem = parents[0];
105
+ const parentElement = parentItem.element;
106
+ if (svg_data_tags.maskTags.has(tagName)) {
107
+ if (!gotReusableElement(item, true)) {
108
+ return;
109
+ }
110
+ } else if (svg_data_tags.reusableElementsWithPalette.has(tagName)) {
111
+ if (!gotReusableElement(item, false)) {
112
+ return;
113
+ }
114
+ } else if (svg_data_tags.defsTag.has(parentItem.tagName)) {
115
+ if (!gotReusableElement(item, false)) {
116
+ return;
117
+ }
118
+ } else if (!svg_data_tags.defsTag.has(tagName)) {
119
+ element._usedAsMask = parentElement._usedAsMask;
120
+ element._usedAsPaint = parentElement._usedAsPaint;
121
+ element._parentElement = parentElement._index;
122
+ if (!parentElement._childElements) {
123
+ parentElement._childElements = [];
124
+ }
125
+ parentElement._childElements.push(index);
126
+ const parentReusableElement = parentElement._reusableElement;
127
+ if (parentReusableElement) {
128
+ if (element._reusableElement) {
129
+ throw new Error(`Reusable element ${svg_analyse_error.analyseTagError(element)} is inside another reusable element id="${parentReusableElement.id}"`);
130
+ }
131
+ element._reusableElement = parentReusableElement;
132
+ }
133
+ const parentBelongsTo = parentElement._belongsTo;
134
+ if (parentBelongsTo) {
135
+ const list = element._belongsTo || (element._belongsTo = []);
136
+ parentBelongsTo.forEach((item2) => {
137
+ item2.indexes.add(index);
138
+ list.push(item2);
139
+ });
140
+ }
141
+ if (element._id === void 0) {
142
+ const id = attribs["id"];
143
+ if (typeof id === "string") {
144
+ if (ids[id] && fixErrors) {
145
+ console.warn(`Duplicate id "${id}"`);
146
+ cheerio(element).removeAttr("id");
147
+ } else {
148
+ gotElementWithID(element, id, false);
149
+ }
150
+ }
151
+ }
152
+ }
153
+ if (svg_data_attributes.tagSpecificNonPresentationalAttributes[tagName]?.has("href")) {
154
+ const href = attribs["href"] || attribs["xlink:href"];
155
+ if (typeof href === "string") {
156
+ if (href.slice(0, 1) !== "#") {
157
+ throw new Error(`Invalid link in ${svg_analyse_error.analyseTagError(element)}`);
158
+ }
159
+ const id = href.slice(1);
160
+ gotElementReference(item, id, false);
161
+ }
162
+ }
163
+ Object.keys(attribs).forEach((attr) => {
164
+ let value = attribs[attr];
165
+ if (value.slice(0, 5).toLowerCase() !== "url(#") {
166
+ return;
167
+ }
168
+ value = value.slice(5);
169
+ if (value.slice(-1) !== ")") {
170
+ return;
171
+ }
172
+ const id = value.slice(0, value.length - 1).trim();
173
+ if (svg_data_attributes.urlPresentationalAttributes.has(attr)) {
174
+ gotElementReference(item, id, attr !== "filter");
175
+ return;
176
+ }
177
+ if (svg_data_attributes.commonColorPresentationalAttributes.has(attr) || svg_data_attributes.markerAttributes.has(attr)) {
178
+ gotElementReference(item, id, false);
179
+ return;
180
+ }
181
+ });
182
+ });
183
+ links = links.filter((item) => {
184
+ const id = item.id;
185
+ if (ids[id]) {
186
+ return true;
187
+ }
188
+ function fix() {
189
+ const index2 = item.usedByIndex;
190
+ const element = elements.get(index2);
191
+ const tagName = element.tagName;
192
+ function remove() {
193
+ const $element = cheerio(element);
194
+ const parent = element.parent;
195
+ if (parent) {
196
+ if (parent._childElements) {
197
+ parent._childElements = parent._childElements.filter((num) => num !== index2);
198
+ }
199
+ parent._belongsTo?.forEach((list) => {
200
+ list.indexes.delete(index2);
201
+ });
202
+ }
203
+ $element.remove();
204
+ }
205
+ if (element._linksTo) {
206
+ element._linksTo = element._linksTo.filter((item2) => item2.id !== id);
207
+ }
208
+ if (!element.children.length) {
209
+ if (svg_data_tags.useTag.has(tagName)) {
210
+ remove();
211
+ return;
212
+ }
213
+ }
214
+ const matches = /* @__PURE__ */ new Set(["#" + id, "url(#" + id + ")"]);
215
+ const attribs = element.attribs;
216
+ for (const attr in attribs) {
217
+ if (matches.has(attribs[attr])) {
218
+ cheerio(element).removeAttr(attr);
219
+ }
220
+ }
221
+ }
222
+ const message = `Missing element with id="${id}"`;
223
+ if (fixErrors) {
224
+ fix();
225
+ console.warn(message);
226
+ } else {
227
+ throw new Error(message);
228
+ }
229
+ return false;
230
+ });
231
+ function hasChildItem(tree2, child, canThrow) {
232
+ const item = tree2.children.find((item2) => item2.index === child.index && item2.usedAsMask === child.usedAsMask);
233
+ if (item && canThrow) {
234
+ throw new Error("Recursion");
235
+ }
236
+ return !!item;
237
+ }
238
+ const tree = {
239
+ index: 1,
240
+ usedAsMask: false,
241
+ children: []
242
+ };
243
+ function parseTreeItem(tree2, usedItems, inMask) {
244
+ const element = elements.get(tree2.index);
245
+ if (tree2.usedAsMask || inMask) {
246
+ element._usedAsMask = true;
247
+ inMask = true;
248
+ } else {
249
+ element._usedAsPaint = true;
250
+ }
251
+ usedItems = usedItems.slice(0);
252
+ usedItems.push(element._index);
253
+ element._childElements?.forEach((childIndex) => {
254
+ if (usedItems.indexOf(childIndex) !== -1) {
255
+ throw new Error("Recursion");
256
+ }
257
+ const childItem = {
258
+ index: childIndex,
259
+ usedAsMask: false,
260
+ children: [],
261
+ parent: tree2
262
+ };
263
+ tree2.children.push(childItem);
264
+ parseTreeItem(childItem, usedItems, inMask);
265
+ });
266
+ element._linksTo?.forEach((link) => {
267
+ const linkIndex = ids[link.id];
268
+ const usedAsMask = link.usedAsMask;
269
+ const childItem = {
270
+ index: linkIndex,
271
+ usedAsMask,
272
+ children: [],
273
+ parent: tree2
274
+ };
275
+ if (hasChildItem(tree2, childItem, false)) {
276
+ return;
277
+ }
278
+ tree2.children.push(childItem);
279
+ parseTreeItem(childItem, usedItems, inMask || usedAsMask);
280
+ });
281
+ }
282
+ parseTreeItem(tree, [0], false);
283
+ return {
284
+ elements,
285
+ ids,
286
+ links,
287
+ tree
288
+ };
289
+ }
290
+
291
+ exports.analyseSVGStructure = analyseSVGStructure;
@@ -1,8 +1,13 @@
1
- import type { SVG } from './index';
2
- import type { AnalyseSVGStructureResult, AnalyseSVGStructureOptions } from './analyse/types';
1
+ import { SVG } from './index.js';
2
+ import { AnalyseSVGStructureOptions, AnalyseSVGStructureResult } from './analyse/types.js';
3
+ import '@iconify/types';
4
+ import '@iconify/utils/lib/customisations';
5
+
3
6
  /**
4
7
  * Find all IDs, links, which elements use palette, which items aren't used
5
8
  *
6
9
  * Before running this function run cleanup functions to change inline style to attributes and fix attributes
7
10
  */
8
- export declare function analyseSVGStructure(svg: SVG, options?: AnalyseSVGStructureOptions): Promise<AnalyseSVGStructureResult>;
11
+ declare function analyseSVGStructure(svg: SVG, options?: AnalyseSVGStructureOptions): Promise<AnalyseSVGStructureResult>;
12
+
13
+ export { analyseSVGStructure };