@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
@@ -1,5 +1,8 @@
1
1
  import { sendAPIQuery } from '../../download/api/index.mjs';
2
2
  import { apiCacheKey, getAPICache, clearAPICache } from '../../download/api/cache.mjs';
3
+ import { runConcurrentQueries } from '../../download/api/queue.mjs';
4
+ import 'axios';
5
+ import '../../download/api/config.mjs';
3
6
  import 'fs';
4
7
  import 'crypto';
5
8
  import '../../misc/scan.mjs';
@@ -111,78 +114,92 @@ async function figmaImagesQuery(options, nodes, cache) {
111
114
  const uri = "https://api.figma.com/v1/images/" + options.file;
112
115
  const maxLength = 2048 - uri.length;
113
116
  const svgOptions = options.svgOptions || {};
114
- let ids = [];
115
- let idsLength = 0;
116
- let lastError;
117
- let found = 0;
118
- const query = async () => {
119
- const params = new URLSearchParams({
120
- ids: ids.join(","),
121
- format: "svg"
122
- });
123
- if (options.version) {
124
- params.set("version", options.version);
125
- }
126
- if (svgOptions.includeID) {
127
- params.set("svg_include_id", "true");
128
- }
129
- if (svgOptions.simplifyStroke) {
130
- params.set("svg_simplify_stroke", "true");
131
- }
132
- if (svgOptions.useAbsoluteBounds) {
133
- params.set("use_absolute_bounds", "true");
134
- }
135
- const data = await sendAPIQuery(
136
- {
137
- uri,
138
- params,
139
- headers: {
140
- "X-FIGMA-TOKEN": options.token
117
+ const query = (ids2) => {
118
+ return new Promise((resolve, reject) => {
119
+ const params = new URLSearchParams({
120
+ ids: ids2.join(","),
121
+ format: "svg"
122
+ });
123
+ if (options.version) {
124
+ params.set("version", options.version);
125
+ }
126
+ if (svgOptions.includeID) {
127
+ params.set("svg_include_id", "true");
128
+ }
129
+ if (svgOptions.simplifyStroke) {
130
+ params.set("svg_simplify_stroke", "true");
131
+ }
132
+ if (svgOptions.useAbsoluteBounds) {
133
+ params.set("use_absolute_bounds", "true");
134
+ }
135
+ sendAPIQuery(
136
+ {
137
+ uri,
138
+ params,
139
+ headers: {
140
+ "X-FIGMA-TOKEN": options.token
141
+ }
142
+ },
143
+ cache
144
+ ).then((data) => {
145
+ if (typeof data === "number") {
146
+ reject(data);
147
+ return;
141
148
  }
142
- },
143
- cache
144
- );
145
- if (typeof data === "number") {
146
- lastError = data;
147
- return;
148
- }
149
- try {
150
- const parsedData = JSON.parse(data);
151
- const images = parsedData.images;
152
- for (const id in images) {
153
- const node = nodes.icons[id];
154
- const target = images[id];
155
- if (node && target) {
156
- node.url = target;
157
- found++;
149
+ let parsedData;
150
+ try {
151
+ parsedData = JSON.parse(data);
152
+ } catch {
153
+ reject("Bad API response");
154
+ return;
158
155
  }
159
- }
160
- } catch (err) {
161
- return;
162
- }
156
+ resolve(parsedData);
157
+ }).catch(reject);
158
+ });
163
159
  };
160
+ let ids = [];
161
+ let idsLength = 0;
164
162
  const allKeys = Object.keys(nodes.icons);
163
+ const queue = [];
165
164
  for (let i = 0; i < allKeys.length; i++) {
166
165
  const id = allKeys[i];
167
166
  ids.push(id);
168
167
  idsLength += id.length + 1;
169
168
  if (idsLength >= maxLength) {
170
- await query();
169
+ queue.push(ids.slice(0));
171
170
  ids = [];
172
171
  idsLength = 0;
173
172
  }
174
173
  }
175
174
  if (idsLength) {
176
- await query();
175
+ queue.push(ids.slice(0));
177
176
  }
178
- if (!found) {
179
- if (lastError) {
180
- throw new Error(
181
- `Error retrieving image data from API${lastError ? ": " + lastError.toString() : ""}`
182
- );
183
- } else {
184
- throw new Error("No valid icon layers were found");
177
+ const queryParams = {
178
+ // Params
179
+ total: queue.length,
180
+ callback: (index) => query(queue[index]),
181
+ // Payload to identify failed items in onfail callback
182
+ function: "figmaImagesQuery",
183
+ payload: queue
184
+ };
185
+ const results = await runConcurrentQueries(queryParams);
186
+ let found = 0;
187
+ results.forEach((data) => {
188
+ if (!data) {
189
+ return;
190
+ }
191
+ const images = data.images;
192
+ for (const id in images) {
193
+ const node = nodes.icons[id];
194
+ const target = images[id];
195
+ if (node && target) {
196
+ node.url = target;
197
+ found++;
198
+ }
185
199
  }
200
+ });
201
+ if (!found) {
202
+ throw new Error("No valid icon layers were found");
186
203
  }
187
204
  nodes.generatedIconsCount = found;
188
205
  return nodes;
@@ -191,32 +208,43 @@ async function figmaDownloadImages(nodes, cache) {
191
208
  const icons = nodes.icons;
192
209
  const ids = Object.keys(icons);
193
210
  let count = 0;
194
- let lastError;
211
+ const filtered = [];
195
212
  for (let i = 0; i < ids.length; i++) {
196
213
  const id = ids[i];
197
214
  const item = icons[id];
198
- if (!item.url) {
199
- continue;
200
- }
201
- const result = await sendAPIQuery(
202
- {
203
- uri: item.url
204
- },
205
- cache
206
- );
207
- if (typeof result === "number") {
208
- lastError = result;
209
- continue;
210
- }
211
- if (typeof result === "string") {
212
- count++;
213
- item.content = result;
214
- }
215
- }
215
+ if (item.url) {
216
+ filtered.push(item);
217
+ }
218
+ }
219
+ const params = {
220
+ // Params
221
+ total: filtered.length,
222
+ callback: (index) => {
223
+ return new Promise((resolve, reject) => {
224
+ const item = filtered[index];
225
+ sendAPIQuery(
226
+ {
227
+ uri: item.url
228
+ },
229
+ cache
230
+ ).then((data) => {
231
+ if (typeof data === "string") {
232
+ count++;
233
+ item.content = data;
234
+ resolve(void 0);
235
+ } else {
236
+ reject(data);
237
+ }
238
+ }).catch(reject);
239
+ });
240
+ },
241
+ // Payload to identify failed items in onfail callback
242
+ function: "figmaDownloadImages",
243
+ payload: filtered
244
+ };
245
+ await runConcurrentQueries(params);
216
246
  if (!count) {
217
- throw new Error(
218
- `Error retrieving images${lastError ? ": " + lastError.toString() : ""}`
219
- );
247
+ throw new Error("Error retrieving images");
220
248
  }
221
249
  nodes.downloadedIconsCount = count;
222
250
  return nodes;
@@ -0,0 +1,53 @@
1
+ /**
2
+ * Basic document structure
3
+ */
4
+ interface FigmaBoundingBox {
5
+ x: number;
6
+ y: number;
7
+ width: number;
8
+ height: number;
9
+ }
10
+ interface BaseFigmaNode {
11
+ id: string;
12
+ name: string;
13
+ }
14
+ interface GenericFigmaNode extends BaseFigmaNode {
15
+ type: string;
16
+ children?: FigmaNode[];
17
+ }
18
+ interface IconFigmaNode extends BaseFigmaNode {
19
+ type: 'FRAME' | 'COMPONENT' | 'INSTANCE';
20
+ clipsContent?: boolean;
21
+ absoluteBoundingBox?: FigmaBoundingBox;
22
+ children: FigmaNode[];
23
+ }
24
+ interface FigmaDocumentNode extends BaseFigmaNode {
25
+ type: 'DOCUMENT';
26
+ children: FigmaNode[];
27
+ }
28
+ type FigmaNode = GenericFigmaNode | IconFigmaNode;
29
+ /**
30
+ * Document response from API
31
+ */
32
+ interface FigmaDocument {
33
+ document: FigmaDocumentNode;
34
+ name: string;
35
+ version: string;
36
+ lastModified: string;
37
+ thumbnailUrl: string;
38
+ role: string;
39
+ editorType: 'figma' | 'figjam';
40
+ }
41
+ interface FigmaAPIError {
42
+ status: number;
43
+ err: string;
44
+ }
45
+ /**
46
+ * Result for retrieved icons
47
+ */
48
+ interface FigmaAPIImagesResponse {
49
+ err?: string | null;
50
+ images: Record<string, string | null>;
51
+ }
52
+
53
+ export type { FigmaAPIError, FigmaAPIImagesResponse, FigmaDocument, FigmaDocumentNode, FigmaNode, IconFigmaNode };
@@ -0,0 +1,53 @@
1
+ /**
2
+ * Basic document structure
3
+ */
4
+ interface FigmaBoundingBox {
5
+ x: number;
6
+ y: number;
7
+ width: number;
8
+ height: number;
9
+ }
10
+ interface BaseFigmaNode {
11
+ id: string;
12
+ name: string;
13
+ }
14
+ interface GenericFigmaNode extends BaseFigmaNode {
15
+ type: string;
16
+ children?: FigmaNode[];
17
+ }
18
+ interface IconFigmaNode extends BaseFigmaNode {
19
+ type: 'FRAME' | 'COMPONENT' | 'INSTANCE';
20
+ clipsContent?: boolean;
21
+ absoluteBoundingBox?: FigmaBoundingBox;
22
+ children: FigmaNode[];
23
+ }
24
+ interface FigmaDocumentNode extends BaseFigmaNode {
25
+ type: 'DOCUMENT';
26
+ children: FigmaNode[];
27
+ }
28
+ type FigmaNode = GenericFigmaNode | IconFigmaNode;
29
+ /**
30
+ * Document response from API
31
+ */
32
+ interface FigmaDocument {
33
+ document: FigmaDocumentNode;
34
+ name: string;
35
+ version: string;
36
+ lastModified: string;
37
+ thumbnailUrl: string;
38
+ role: string;
39
+ editorType: 'figma' | 'figjam';
40
+ }
41
+ interface FigmaAPIError {
42
+ status: number;
43
+ err: string;
44
+ }
45
+ /**
46
+ * Result for retrieved icons
47
+ */
48
+ interface FigmaAPIImagesResponse {
49
+ err?: string | null;
50
+ images: Record<string, string | null>;
51
+ }
52
+
53
+ export type { FigmaAPIError, FigmaAPIImagesResponse, FigmaDocument, FigmaDocumentNode, FigmaNode, IconFigmaNode };
@@ -50,4 +50,4 @@ interface FigmaAPIImagesResponse {
50
50
  images: Record<string, string | null>;
51
51
  }
52
52
 
53
- export { FigmaAPIError, FigmaAPIImagesResponse, FigmaDocument, FigmaDocumentNode, FigmaNode, IconFigmaNode };
53
+ export type { FigmaAPIError, FigmaAPIImagesResponse, FigmaDocument, FigmaDocumentNode, FigmaNode, IconFigmaNode };
@@ -0,0 +1,44 @@
1
+ import { IconFigmaNode, FigmaDocument } from './api.cjs';
2
+ import { FigmaNodesImportResult, FigmaIconNode } from './result.cjs';
3
+ import '../../../icon-set/index.cjs';
4
+ import '@iconify/types';
5
+ import '@iconify/utils/lib/customisations/defaults';
6
+ import '../../../icon-set/types.cjs';
7
+ import '../../../svg/index.cjs';
8
+ import 'cheerio';
9
+ import '@iconify/utils/lib/icon-set/tree';
10
+
11
+ type FigmaImportParentNodeType = 'CANVAS' | 'FRAME' | 'GROUP' | 'SECTION';
12
+ type FigmaImportIconNodeType = IconFigmaNode['type'];
13
+ /**
14
+ * Node information passed to callback
15
+ */
16
+ interface FigmaParentNodeData {
17
+ id: string;
18
+ type: FigmaImportParentNodeType;
19
+ name: string;
20
+ }
21
+ interface FigmaImportNodeData {
22
+ id: string;
23
+ type: FigmaImportIconNodeType;
24
+ name: string;
25
+ width: number;
26
+ height: number;
27
+ parents: FigmaParentNodeData[];
28
+ }
29
+ /**
30
+ * Callback to check if node needs to be checked for icons
31
+ *
32
+ * Used to speed up processing by eleminating pages, frames and groups that do not need processing
33
+ */
34
+ type FigmaImportParentNodeFilter = (node: FigmaParentNodeData[], document: FigmaDocument) => boolean;
35
+ /**
36
+ * Check if node is an icon.
37
+ *
38
+ * Returns icon name on success, null or undefined if not should be ignored.
39
+ * Function can also return FigmaIconNode object, where it can put extra properties that can be used later
40
+ */
41
+ type FigmaIconNodeWithKeyword = Partial<FigmaIconNode> & Pick<FigmaIconNode, 'keyword'>;
42
+ type FigmaImportNodeFilter = (node: FigmaImportNodeData, nodes: FigmaNodesImportResult, document: FigmaDocument) => string | FigmaIconNodeWithKeyword | null | undefined;
43
+
44
+ export type { FigmaImportIconNodeType, FigmaImportNodeData, FigmaImportNodeFilter, FigmaImportParentNodeFilter, FigmaImportParentNodeType, FigmaParentNodeData };
@@ -0,0 +1,44 @@
1
+ import { IconFigmaNode, FigmaDocument } from './api.mjs';
2
+ import { FigmaNodesImportResult, FigmaIconNode } from './result.mjs';
3
+ import '../../../icon-set/index.mjs';
4
+ import '@iconify/types';
5
+ import '@iconify/utils/lib/customisations/defaults';
6
+ import '../../../icon-set/types.mjs';
7
+ import '../../../svg/index.mjs';
8
+ import 'cheerio';
9
+ import '@iconify/utils/lib/icon-set/tree';
10
+
11
+ type FigmaImportParentNodeType = 'CANVAS' | 'FRAME' | 'GROUP' | 'SECTION';
12
+ type FigmaImportIconNodeType = IconFigmaNode['type'];
13
+ /**
14
+ * Node information passed to callback
15
+ */
16
+ interface FigmaParentNodeData {
17
+ id: string;
18
+ type: FigmaImportParentNodeType;
19
+ name: string;
20
+ }
21
+ interface FigmaImportNodeData {
22
+ id: string;
23
+ type: FigmaImportIconNodeType;
24
+ name: string;
25
+ width: number;
26
+ height: number;
27
+ parents: FigmaParentNodeData[];
28
+ }
29
+ /**
30
+ * Callback to check if node needs to be checked for icons
31
+ *
32
+ * Used to speed up processing by eleminating pages, frames and groups that do not need processing
33
+ */
34
+ type FigmaImportParentNodeFilter = (node: FigmaParentNodeData[], document: FigmaDocument) => boolean;
35
+ /**
36
+ * Check if node is an icon.
37
+ *
38
+ * Returns icon name on success, null or undefined if not should be ignored.
39
+ * Function can also return FigmaIconNode object, where it can put extra properties that can be used later
40
+ */
41
+ type FigmaIconNodeWithKeyword = Partial<FigmaIconNode> & Pick<FigmaIconNode, 'keyword'>;
42
+ type FigmaImportNodeFilter = (node: FigmaImportNodeData, nodes: FigmaNodesImportResult, document: FigmaDocument) => string | FigmaIconNodeWithKeyword | null | undefined;
43
+
44
+ export type { FigmaImportIconNodeType, FigmaImportNodeData, FigmaImportNodeFilter, FigmaImportParentNodeFilter, FigmaImportParentNodeType, FigmaParentNodeData };
@@ -41,4 +41,4 @@ type FigmaImportParentNodeFilter = (node: FigmaParentNodeData[], document: Figma
41
41
  type FigmaIconNodeWithKeyword = Partial<FigmaIconNode> & Pick<FigmaIconNode, 'keyword'>;
42
42
  type FigmaImportNodeFilter = (node: FigmaImportNodeData, nodes: FigmaNodesImportResult, document: FigmaDocument) => string | FigmaIconNodeWithKeyword | null | undefined;
43
43
 
44
- export { FigmaImportIconNodeType, FigmaImportNodeData, FigmaImportNodeFilter, FigmaImportParentNodeFilter, FigmaImportParentNodeType, FigmaParentNodeData };
44
+ export type { FigmaImportIconNodeType, FigmaImportNodeData, FigmaImportNodeFilter, FigmaImportParentNodeFilter, FigmaImportParentNodeType, FigmaParentNodeData };
@@ -0,0 +1,59 @@
1
+ import { IconSet } from '../../../icon-set/index.cjs';
2
+ import { FigmaImportParentNodeFilter, FigmaImportNodeFilter } from './nodes.cjs';
3
+ import { FigmaIconNode } from './result.cjs';
4
+ import '@iconify/types';
5
+ import '@iconify/utils/lib/customisations/defaults';
6
+ import '../../../icon-set/types.cjs';
7
+ import '../../../svg/index.cjs';
8
+ import 'cheerio';
9
+ import '@iconify/utils/lib/icon-set/tree';
10
+ import './api.cjs';
11
+
12
+ /**
13
+ * Options for importing SVG
14
+ */
15
+ interface FigmaImportSVGOptions {
16
+ includeID?: boolean;
17
+ simplifyStroke?: boolean;
18
+ useAbsoluteBounds?: boolean;
19
+ }
20
+ /**
21
+ * Options
22
+ */
23
+ interface FigmaImportCommonOptions {
24
+ token: string;
25
+ file: string;
26
+ version?: string;
27
+ }
28
+ interface FigmaIfModifiedSinceOption {
29
+ ifModifiedSince: string | Date | true;
30
+ }
31
+ interface FigmaFilesQueryOptions extends FigmaImportCommonOptions, Partial<FigmaIfModifiedSinceOption> {
32
+ ids?: string[];
33
+ depth?: number;
34
+ }
35
+ interface FigmaImagesQueryOptions extends FigmaImportCommonOptions {
36
+ svgOptions?: FigmaImportSVGOptions;
37
+ }
38
+ interface FigmaGetIconNodesOptions {
39
+ pages?: string[];
40
+ filterParentNode?: FigmaImportParentNodeFilter;
41
+ iconNameForNode: FigmaImportNodeFilter;
42
+ }
43
+ /**
44
+ * Callback to call before or after importing icon
45
+ */
46
+ type FigmaImportedIconCallback = (node: FigmaIconNode, iconSet: IconSet) => void | Promise<void>;
47
+ /**
48
+ * Options for main import function
49
+ */
50
+ interface FigmaImportOptions extends FigmaFilesQueryOptions, FigmaImagesQueryOptions, FigmaGetIconNodesOptions {
51
+ prefix: string;
52
+ cacheDir?: string;
53
+ cacheAPITTL?: number;
54
+ cacheSVGTTL?: number;
55
+ beforeImportingIcon?: FigmaImportedIconCallback;
56
+ afterImportingIcon?: FigmaImportedIconCallback;
57
+ }
58
+
59
+ export type { FigmaFilesQueryOptions, FigmaGetIconNodesOptions, FigmaIfModifiedSinceOption, FigmaImagesQueryOptions, FigmaImportOptions, FigmaImportSVGOptions };
@@ -0,0 +1,59 @@
1
+ import { IconSet } from '../../../icon-set/index.mjs';
2
+ import { FigmaImportParentNodeFilter, FigmaImportNodeFilter } from './nodes.mjs';
3
+ import { FigmaIconNode } from './result.mjs';
4
+ import '@iconify/types';
5
+ import '@iconify/utils/lib/customisations/defaults';
6
+ import '../../../icon-set/types.mjs';
7
+ import '../../../svg/index.mjs';
8
+ import 'cheerio';
9
+ import '@iconify/utils/lib/icon-set/tree';
10
+ import './api.mjs';
11
+
12
+ /**
13
+ * Options for importing SVG
14
+ */
15
+ interface FigmaImportSVGOptions {
16
+ includeID?: boolean;
17
+ simplifyStroke?: boolean;
18
+ useAbsoluteBounds?: boolean;
19
+ }
20
+ /**
21
+ * Options
22
+ */
23
+ interface FigmaImportCommonOptions {
24
+ token: string;
25
+ file: string;
26
+ version?: string;
27
+ }
28
+ interface FigmaIfModifiedSinceOption {
29
+ ifModifiedSince: string | Date | true;
30
+ }
31
+ interface FigmaFilesQueryOptions extends FigmaImportCommonOptions, Partial<FigmaIfModifiedSinceOption> {
32
+ ids?: string[];
33
+ depth?: number;
34
+ }
35
+ interface FigmaImagesQueryOptions extends FigmaImportCommonOptions {
36
+ svgOptions?: FigmaImportSVGOptions;
37
+ }
38
+ interface FigmaGetIconNodesOptions {
39
+ pages?: string[];
40
+ filterParentNode?: FigmaImportParentNodeFilter;
41
+ iconNameForNode: FigmaImportNodeFilter;
42
+ }
43
+ /**
44
+ * Callback to call before or after importing icon
45
+ */
46
+ type FigmaImportedIconCallback = (node: FigmaIconNode, iconSet: IconSet) => void | Promise<void>;
47
+ /**
48
+ * Options for main import function
49
+ */
50
+ interface FigmaImportOptions extends FigmaFilesQueryOptions, FigmaImagesQueryOptions, FigmaGetIconNodesOptions {
51
+ prefix: string;
52
+ cacheDir?: string;
53
+ cacheAPITTL?: number;
54
+ cacheSVGTTL?: number;
55
+ beforeImportingIcon?: FigmaImportedIconCallback;
56
+ afterImportingIcon?: FigmaImportedIconCallback;
57
+ }
58
+
59
+ export type { FigmaFilesQueryOptions, FigmaGetIconNodesOptions, FigmaIfModifiedSinceOption, FigmaImagesQueryOptions, FigmaImportOptions, FigmaImportSVGOptions };
@@ -56,4 +56,4 @@ interface FigmaImportOptions extends FigmaFilesQueryOptions, FigmaImagesQueryOpt
56
56
  afterImportingIcon?: FigmaImportedIconCallback;
57
57
  }
58
58
 
59
- export { FigmaFilesQueryOptions, FigmaGetIconNodesOptions, FigmaIfModifiedSinceOption, FigmaImagesQueryOptions, FigmaImportOptions, FigmaImportSVGOptions };
59
+ export type { FigmaFilesQueryOptions, FigmaGetIconNodesOptions, FigmaIfModifiedSinceOption, FigmaImagesQueryOptions, FigmaImportOptions, FigmaImportSVGOptions };
@@ -0,0 +1,44 @@
1
+ import { IconSet } from '../../../icon-set/index.cjs';
2
+ import '@iconify/types';
3
+ import '@iconify/utils/lib/customisations/defaults';
4
+ import '../../../icon-set/types.cjs';
5
+ import '../../../svg/index.cjs';
6
+ import 'cheerio';
7
+ import '@iconify/utils/lib/icon-set/tree';
8
+
9
+ /**
10
+ * Result for found icons
11
+ */
12
+ interface FigmaIconNode {
13
+ id: string;
14
+ name: string;
15
+ keyword: string;
16
+ url?: string;
17
+ content?: string;
18
+ }
19
+ /**
20
+ * Nodes count
21
+ */
22
+ interface FigmaNodesCount {
23
+ nodesCount: number;
24
+ generatedIconsCount: number;
25
+ downloadedIconsCount: number;
26
+ }
27
+ /**
28
+ * Import result for icons
29
+ */
30
+ interface FigmaNodesImportResult extends Partial<FigmaNodesCount> {
31
+ icons: Record<string, FigmaIconNode>;
32
+ }
33
+ /**
34
+ * Import result
35
+ */
36
+ interface FigmaImportResult extends FigmaNodesCount {
37
+ name: string;
38
+ version: string;
39
+ lastModified: string;
40
+ iconSet: IconSet;
41
+ missing: FigmaIconNode[];
42
+ }
43
+
44
+ export type { FigmaIconNode, FigmaImportResult, FigmaNodesCount, FigmaNodesImportResult };
@@ -0,0 +1,44 @@
1
+ import { IconSet } from '../../../icon-set/index.mjs';
2
+ import '@iconify/types';
3
+ import '@iconify/utils/lib/customisations/defaults';
4
+ import '../../../icon-set/types.mjs';
5
+ import '../../../svg/index.mjs';
6
+ import 'cheerio';
7
+ import '@iconify/utils/lib/icon-set/tree';
8
+
9
+ /**
10
+ * Result for found icons
11
+ */
12
+ interface FigmaIconNode {
13
+ id: string;
14
+ name: string;
15
+ keyword: string;
16
+ url?: string;
17
+ content?: string;
18
+ }
19
+ /**
20
+ * Nodes count
21
+ */
22
+ interface FigmaNodesCount {
23
+ nodesCount: number;
24
+ generatedIconsCount: number;
25
+ downloadedIconsCount: number;
26
+ }
27
+ /**
28
+ * Import result for icons
29
+ */
30
+ interface FigmaNodesImportResult extends Partial<FigmaNodesCount> {
31
+ icons: Record<string, FigmaIconNode>;
32
+ }
33
+ /**
34
+ * Import result
35
+ */
36
+ interface FigmaImportResult extends FigmaNodesCount {
37
+ name: string;
38
+ version: string;
39
+ lastModified: string;
40
+ iconSet: IconSet;
41
+ missing: FigmaIconNode[];
42
+ }
43
+
44
+ export type { FigmaIconNode, FigmaImportResult, FigmaNodesCount, FigmaNodesImportResult };
@@ -41,4 +41,4 @@ interface FigmaImportResult extends FigmaNodesCount {
41
41
  missing: FigmaIconNode[];
42
42
  }
43
43
 
44
- export { FigmaIconNode, FigmaImportResult, FigmaNodesCount, FigmaNodesImportResult };
44
+ export type { FigmaIconNode, FigmaImportResult, FigmaNodesCount, FigmaNodesImportResult };