@breadstone-infrastructure/nx-tasks 0.0.12-beta.9 → 0.0.14

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 (185) hide show
  1. package/Index.d.ts +21 -24
  2. package/Index.d.ts.map +1 -1
  3. package/Index.js +43 -39
  4. package/Index.js.map +1 -1
  5. package/executors/alias-replace/executor.d.ts +3 -3
  6. package/executors/alias-replace/executor.d.ts.map +1 -1
  7. package/executors/alias-replace/executor.js +25 -2
  8. package/executors/alias-replace/executor.js.map +1 -1
  9. package/executors/alias-replace/executor.task.d.ts +74 -0
  10. package/executors/alias-replace/executor.task.d.ts.map +1 -0
  11. package/executors/alias-replace/executor.task.js +256 -0
  12. package/executors/alias-replace/executor.task.js.map +1 -0
  13. package/executors/clean/executor.d.ts +3 -3
  14. package/executors/clean/executor.d.ts.map +1 -1
  15. package/executors/clean/executor.js +25 -2
  16. package/executors/clean/executor.js.map +1 -1
  17. package/executors/clean/executor.task.d.ts +17 -0
  18. package/executors/clean/executor.task.d.ts.map +1 -0
  19. package/executors/clean/executor.task.js +41 -0
  20. package/executors/clean/executor.task.js.map +1 -0
  21. package/executors/copy/executor.d.ts +3 -3
  22. package/executors/copy/executor.d.ts.map +1 -1
  23. package/executors/copy/executor.js +25 -2
  24. package/executors/copy/executor.js.map +1 -1
  25. package/executors/copy/executor.task.d.ts +36 -0
  26. package/executors/copy/executor.task.d.ts.map +1 -0
  27. package/executors/copy/executor.task.js +53 -0
  28. package/executors/copy/executor.task.js.map +1 -0
  29. package/executors/docs/executor.d.ts +1 -1
  30. package/executors/docs/executor.d.ts.map +1 -1
  31. package/executors/docs/executor.js +25 -2
  32. package/executors/docs/executor.js.map +1 -1
  33. package/executors/docs/executor.task.d.ts +23 -0
  34. package/executors/docs/executor.task.d.ts.map +1 -0
  35. package/executors/docs/executor.task.js +74 -0
  36. package/executors/docs/executor.task.js.map +1 -0
  37. package/executors/doppler-config-sync/executor.d.ts +1 -1
  38. package/executors/doppler-config-sync/executor.d.ts.map +1 -1
  39. package/executors/doppler-config-sync/executor.js +25 -2
  40. package/executors/doppler-config-sync/executor.js.map +1 -1
  41. package/executors/doppler-config-sync/executor.task.d.ts +23 -0
  42. package/executors/doppler-config-sync/executor.task.d.ts.map +1 -0
  43. package/executors/doppler-config-sync/executor.task.js +163 -0
  44. package/executors/doppler-config-sync/executor.task.js.map +1 -0
  45. package/executors/icon-collection-builder/executor.d.ts +1 -1
  46. package/executors/icon-collection-builder/executor.d.ts.map +1 -1
  47. package/executors/icon-collection-builder/executor.js +25 -2
  48. package/executors/icon-collection-builder/executor.js.map +1 -1
  49. package/executors/icon-collection-builder/executor.task.d.ts +14 -0
  50. package/executors/icon-collection-builder/executor.task.d.ts.map +1 -0
  51. package/executors/icon-collection-builder/executor.task.js +69 -0
  52. package/executors/icon-collection-builder/executor.task.js.map +1 -0
  53. package/executors/icon-collection-downloader/executor.d.ts +2 -2
  54. package/executors/icon-collection-downloader/executor.d.ts.map +1 -1
  55. package/executors/icon-collection-downloader/executor.js +25 -2
  56. package/executors/icon-collection-downloader/executor.js.map +1 -1
  57. package/executors/icon-collection-downloader/executor.task.d.ts +10 -0
  58. package/executors/icon-collection-downloader/executor.task.d.ts.map +1 -0
  59. package/executors/icon-collection-downloader/executor.task.js +122 -0
  60. package/executors/icon-collection-downloader/executor.task.js.map +1 -0
  61. package/executors/lit-docs/JSDocChecker.d.ts +104 -0
  62. package/executors/lit-docs/JSDocChecker.d.ts.map +1 -0
  63. package/executors/lit-docs/JSDocChecker.js +240 -0
  64. package/executors/lit-docs/JSDocChecker.js.map +1 -0
  65. package/executors/lit-docs/executor.d.ts +3 -3
  66. package/executors/lit-docs/executor.d.ts.map +1 -1
  67. package/executors/lit-docs/executor.js +28 -3
  68. package/executors/lit-docs/executor.js.map +1 -1
  69. package/executors/lit-docs/executor.task.d.ts +12 -0
  70. package/executors/lit-docs/executor.task.d.ts.map +1 -0
  71. package/executors/lit-docs/executor.task.js +233 -0
  72. package/executors/lit-docs/executor.task.js.map +1 -0
  73. package/executors/lit-style-transform/executor.d.ts +2 -2
  74. package/executors/lit-style-transform/executor.d.ts.map +1 -1
  75. package/executors/lit-style-transform/executor.js +30 -7
  76. package/executors/lit-style-transform/executor.js.map +1 -1
  77. package/executors/lit-style-transform/executor.task.d.ts +37 -0
  78. package/executors/lit-style-transform/executor.task.d.ts.map +1 -0
  79. package/executors/lit-style-transform/executor.task.js +351 -0
  80. package/executors/lit-style-transform/executor.task.js.map +1 -0
  81. package/executors/localizator/executor.d.ts +1 -1
  82. package/executors/localizator/executor.d.ts.map +1 -1
  83. package/executors/localizator/executor.js +26 -5
  84. package/executors/localizator/executor.js.map +1 -1
  85. package/executors/localizator/executor.task.d.ts +8 -0
  86. package/executors/localizator/executor.task.d.ts.map +1 -0
  87. package/executors/localizator/executor.task.js +153 -0
  88. package/executors/localizator/executor.task.js.map +1 -0
  89. package/executors/markdown-to-typescript-transform/MarkdownRenderer.d.ts +20 -0
  90. package/executors/markdown-to-typescript-transform/MarkdownRenderer.d.ts.map +1 -0
  91. package/executors/markdown-to-typescript-transform/MarkdownRenderer.js +74 -0
  92. package/executors/markdown-to-typescript-transform/MarkdownRenderer.js.map +1 -0
  93. package/executors/markdown-to-typescript-transform/executor.d.ts +1 -1
  94. package/executors/markdown-to-typescript-transform/executor.d.ts.map +1 -1
  95. package/executors/markdown-to-typescript-transform/executor.js +25 -2
  96. package/executors/markdown-to-typescript-transform/executor.js.map +1 -1
  97. package/executors/markdown-to-typescript-transform/executor.task.d.ts +25 -0
  98. package/executors/markdown-to-typescript-transform/executor.task.d.ts.map +1 -0
  99. package/executors/markdown-to-typescript-transform/executor.task.js +97 -0
  100. package/executors/markdown-to-typescript-transform/executor.task.js.map +1 -0
  101. package/executors/ng-packagr-build/executor.d.ts +3 -3
  102. package/executors/ng-packagr-build/executor.d.ts.map +1 -1
  103. package/executors/ng-packagr-build/executor.js +25 -2
  104. package/executors/ng-packagr-build/executor.js.map +1 -1
  105. package/executors/ng-packagr-build/executor.task.d.ts +11 -0
  106. package/executors/ng-packagr-build/executor.task.d.ts.map +1 -0
  107. package/executors/ng-packagr-build/executor.task.js +43 -0
  108. package/executors/ng-packagr-build/executor.task.js.map +1 -0
  109. package/executors/ng-proxy-transform/executor.d.ts +3 -3
  110. package/executors/ng-proxy-transform/executor.d.ts.map +1 -1
  111. package/executors/ng-proxy-transform/executor.js +25 -2
  112. package/executors/ng-proxy-transform/executor.js.map +1 -1
  113. package/executors/ng-proxy-transform/executor.task.d.ts +49 -0
  114. package/executors/ng-proxy-transform/executor.task.d.ts.map +1 -0
  115. package/executors/ng-proxy-transform/executor.task.js +386 -0
  116. package/executors/ng-proxy-transform/executor.task.js.map +1 -0
  117. package/executors/openapi-generator/executor.d.ts +1 -1
  118. package/executors/openapi-generator/executor.d.ts.map +1 -1
  119. package/executors/openapi-generator/executor.js +25 -2
  120. package/executors/openapi-generator/executor.js.map +1 -1
  121. package/executors/openapi-generator/executor.task.d.ts +20 -0
  122. package/executors/openapi-generator/executor.task.d.ts.map +1 -0
  123. package/executors/openapi-generator/executor.task.js +29 -0
  124. package/executors/openapi-generator/executor.task.js.map +1 -0
  125. package/executors/react-proxy-transform/executor.d.ts +3 -3
  126. package/executors/react-proxy-transform/executor.d.ts.map +1 -1
  127. package/executors/react-proxy-transform/executor.js +25 -2
  128. package/executors/react-proxy-transform/executor.js.map +1 -1
  129. package/executors/react-proxy-transform/executor.task.d.ts +44 -0
  130. package/executors/react-proxy-transform/executor.task.d.ts.map +1 -0
  131. package/executors/react-proxy-transform/executor.task.js +217 -0
  132. package/executors/react-proxy-transform/executor.task.js.map +1 -0
  133. package/executors/release-package/executor.d.ts +3 -3
  134. package/executors/release-package/executor.d.ts.map +1 -1
  135. package/executors/release-package/executor.js +25 -2
  136. package/executors/release-package/executor.js.map +1 -1
  137. package/executors/release-package/executor.task.d.ts +17 -0
  138. package/executors/release-package/executor.task.d.ts.map +1 -0
  139. package/executors/release-package/executor.task.js +177 -0
  140. package/executors/release-package/executor.task.js.map +1 -0
  141. package/executors/release-package-json/executor.d.ts +3 -3
  142. package/executors/release-package-json/executor.d.ts.map +1 -1
  143. package/executors/release-package-json/executor.js +25 -2
  144. package/executors/release-package-json/executor.js.map +1 -1
  145. package/executors/release-package-json/executor.task.d.ts +29 -0
  146. package/executors/release-package-json/executor.task.d.ts.map +1 -0
  147. package/executors/release-package-json/executor.task.js +167 -0
  148. package/executors/release-package-json/executor.task.js.map +1 -0
  149. package/executors/styles-bundle/executor.d.ts +3 -3
  150. package/executors/styles-bundle/executor.d.ts.map +1 -1
  151. package/executors/styles-bundle/executor.js +25 -2
  152. package/executors/styles-bundle/executor.js.map +1 -1
  153. package/executors/styles-bundle/executor.task.d.ts +20 -0
  154. package/executors/styles-bundle/executor.task.d.ts.map +1 -0
  155. package/executors/styles-bundle/executor.task.js +78 -0
  156. package/executors/styles-bundle/executor.task.js.map +1 -0
  157. package/executors/unrelease-package/executor.d.ts +3 -3
  158. package/executors/unrelease-package/executor.d.ts.map +1 -1
  159. package/executors/unrelease-package/executor.js +25 -2
  160. package/executors/unrelease-package/executor.js.map +1 -1
  161. package/executors/unrelease-package/executor.task.d.ts +13 -0
  162. package/executors/unrelease-package/executor.task.d.ts.map +1 -0
  163. package/executors/unrelease-package/executor.task.js +101 -0
  164. package/executors/unrelease-package/executor.task.js.map +1 -0
  165. package/executors/vercel-edge-config-sync/executor.d.ts +1 -1
  166. package/executors/vercel-edge-config-sync/executor.d.ts.map +1 -1
  167. package/executors/vercel-edge-config-sync/executor.js +25 -2
  168. package/executors/vercel-edge-config-sync/executor.js.map +1 -1
  169. package/executors/vercel-edge-config-sync/executor.task.d.ts +7 -0
  170. package/executors/vercel-edge-config-sync/executor.task.d.ts.map +1 -0
  171. package/executors/vercel-edge-config-sync/executor.task.js +46 -0
  172. package/executors/vercel-edge-config-sync/executor.task.js.map +1 -0
  173. package/executors/vue-proxy-transform/executor.d.ts +3 -3
  174. package/executors/vue-proxy-transform/executor.d.ts.map +1 -1
  175. package/executors/vue-proxy-transform/executor.js +25 -2
  176. package/executors/vue-proxy-transform/executor.js.map +1 -1
  177. package/executors/vue-proxy-transform/executor.task.d.ts +43 -0
  178. package/executors/vue-proxy-transform/executor.task.d.ts.map +1 -0
  179. package/executors/vue-proxy-transform/executor.task.js +201 -0
  180. package/executors/vue-proxy-transform/executor.task.js.map +1 -0
  181. package/package.json +24 -5
  182. package/utils/TaskBase.d.ts +13 -0
  183. package/utils/TaskBase.d.ts.map +1 -0
  184. package/utils/TaskBase.js +27 -0
  185. package/utils/TaskBase.js.map +1 -0
@@ -0,0 +1,163 @@
1
+ "use strict";
2
+ // #region Imports
3
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
4
+ if (k2 === undefined) k2 = k;
5
+ var desc = Object.getOwnPropertyDescriptor(m, k);
6
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
7
+ desc = { enumerable: true, get: function() { return m[k]; } };
8
+ }
9
+ Object.defineProperty(o, k2, desc);
10
+ }) : (function(o, m, k, k2) {
11
+ if (k2 === undefined) k2 = k;
12
+ o[k2] = m[k];
13
+ }));
14
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
15
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
16
+ }) : function(o, v) {
17
+ o["default"] = v;
18
+ });
19
+ var __importStar = (this && this.__importStar) || function (mod) {
20
+ if (mod && mod.__esModule) return mod;
21
+ var result = {};
22
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
23
+ __setModuleDefault(result, mod);
24
+ return result;
25
+ };
26
+ Object.defineProperty(exports, "__esModule", { value: true });
27
+ exports.DopplerConfigSyncTask = void 0;
28
+ const utilities_1 = require("@breadstone-infrastructure/utilities");
29
+ const dotenv = __importStar(require("dotenv"));
30
+ const enquirer_1 = require("enquirer");
31
+ // #endregion
32
+ var DopplerConfigSyncTask;
33
+ (function (DopplerConfigSyncTask) {
34
+ // #region Interfaces
35
+ // #endregion
36
+ // #region Functions
37
+ /**
38
+ * Gets the Doppler API key from the user.
39
+ *
40
+ * @returns The Doppler API key.
41
+ */
42
+ async function authenticate(token) {
43
+ if (token) {
44
+ return token;
45
+ }
46
+ const credentials = await (0, enquirer_1.prompt)([
47
+ {
48
+ type: 'input',
49
+ name: 'apiKey',
50
+ message: 'Enter your Doppler api key:\nYou can find it in your Doppler account settings.'
51
+ }
52
+ ]);
53
+ return credentials.apiKey;
54
+ }
55
+ /**
56
+ * Fetches secrets from Doppler.
57
+ *
58
+ * @param token The authentication token.
59
+ * @param project The project name in Doppler.
60
+ * @param config The configuration name in Doppler.
61
+ * @returns A record of secrets.
62
+ */
63
+ async function fetchSecrets(token, project, config, logger) {
64
+ const apiUrl = `https://api.doppler.com/v3/configs/config/secrets?project=${project}&config=${config}&include_dynamic_secrets=false&include_managed_secrets=true`;
65
+ const response = await fetch(apiUrl, {
66
+ headers: { Authorization: `Bearer ${token}` }
67
+ });
68
+ if (!response.ok) {
69
+ throw new Error(`Failed to fetch Doppler secrets: ${response.statusText}`);
70
+ }
71
+ const data = await response.json();
72
+ logger.log(`Fetched ${Object.keys(data.secrets).length} secrets from Doppler.`);
73
+ return Object.fromEntries(Object.entries(data.secrets).map(([key, value]) => [key, value.raw]));
74
+ }
75
+ /**
76
+ * Loads the existing environment variables from the .env file.
77
+ *
78
+ * @param envFilePath Path to the .env file.
79
+ * @returns A record of environment variables.
80
+ */
81
+ function loadEnvFile(envFilePath, logger) {
82
+ if (!utilities_1.File.exists(envFilePath)) {
83
+ return {};
84
+ }
85
+ logger.log(`Loading .env file from: ${envFilePath}`);
86
+ const envConfig = dotenv.config({ path: envFilePath });
87
+ if (envConfig.error) {
88
+ throw new Error(`Error loading .env file: ${envConfig.error.message}`);
89
+ }
90
+ return envConfig.parsed ?? {};
91
+ }
92
+ /**
93
+ * Logs the changes between current env and fetched secrets.
94
+ *
95
+ * @param currentEnv The current environment variables.
96
+ * @param secrets The fetched secrets from Doppler.
97
+ */
98
+ function logEnvChanges(currentEnv, secrets, logger) {
99
+ const changes = Object.keys(secrets).reduce((acc, key) => {
100
+ if (currentEnv[key] !== secrets[key]) {
101
+ acc[key] = {
102
+ old: currentEnv[key] || 'undefined',
103
+ new: secrets[key]
104
+ };
105
+ }
106
+ return acc;
107
+ }, {});
108
+ if (Object.keys(changes).length > 0) {
109
+ logger.log('The following ENV variables will be updated:');
110
+ for (const [key, { old, new: newVal }] of Object.entries(changes)) {
111
+ logger.log(` ${key}: [Old: ${old}] -> [New: ${newVal}]`);
112
+ }
113
+ }
114
+ else {
115
+ logger.log('No changes detected in ENV variables.');
116
+ }
117
+ }
118
+ /**
119
+ * Writes updated secrets to the .env file.
120
+ *
121
+ * @param envFilePath Path to the .env file.
122
+ * @param updatedEnv The updated environment variables.
123
+ */
124
+ function updateEnvFile(envFilePath, updatedEnv) {
125
+ const envContent = Object.entries(updatedEnv)
126
+ .map(([key, value]) => `${key}="${value}"`)
127
+ .join('\n');
128
+ utilities_1.File.writeAllText(envFilePath, envContent);
129
+ }
130
+ // #endregion
131
+ // #region Main Task
132
+ async function run(options) {
133
+ const logger = new utilities_1.ConsoleLogger();
134
+ try {
135
+ // Step 1: Authenticate and get the API token
136
+ logger.log('Authenticating with Doppler...');
137
+ const token = options.apiKey ?? await authenticate(options.apiKey);
138
+ // Step 2: Fetch secrets from Doppler
139
+ logger.log('Fetching secrets from Doppler...');
140
+ const secrets = await fetchSecrets(token, options.project, options.config, logger);
141
+ // Step 3: Load the current environment file
142
+ logger.log('Loading current .env file...');
143
+ const envPath = utilities_1.Path.combine(options.cwd, options.envFile);
144
+ const currentEnv = loadEnvFile(envPath, logger);
145
+ // Step 4: Log the changes between current env and secrets
146
+ logEnvChanges(currentEnv, secrets, logger);
147
+ // Step 5: Merge and update the .env file with new secrets
148
+ const mergedEnv = {
149
+ ...currentEnv,
150
+ ...secrets
151
+ };
152
+ updateEnvFile(envPath, mergedEnv);
153
+ logger.log('Successfully wrote updated secrets to .env file.');
154
+ }
155
+ catch (error) {
156
+ logger.error(`Error: ${error.message}`);
157
+ throw error;
158
+ }
159
+ }
160
+ DopplerConfigSyncTask.run = run;
161
+ // #endregion
162
+ })(DopplerConfigSyncTask || (exports.DopplerConfigSyncTask = DopplerConfigSyncTask = {}));
163
+ //# sourceMappingURL=executor.task.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"executor.task.js","sourceRoot":"","sources":["../../../src/executors/doppler-config-sync/executor.task.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
- import { IconCollectionBuilderTask } from '@breadstone-infrastructure/tasks';
2
1
  import type { ExecutorContext } from '@nx/devkit';
2
+ import type { IconCollectionBuilderTask } from './executor.task';
3
3
  /**
4
4
  * @private
5
5
  */
@@ -1 +1 @@
1
- {"version":3,"file":"executor.d.ts","sourceRoot":"","sources":["../../../src/executors/icon-collection-builder/executor.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,yBAAyB,EAAE,MAAM,kCAAkC,CAAC;AAC7E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAKlD;;GAEG;AACH,KAAK,eAAe,GAAG,IAAI,CAAC,yBAAyB,CAAC,iCAAiC,EAAE,KAAK,GAAG,aAAa,GAAG,cAAc,CAAC,CAAC;AAEjI;;GAEG;AACH,wBAA8B,WAAW,CAAC,OAAO,EAAE,eAAe,EAAE,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAA;CAAE,CAAC,CAgC3H"}
1
+ {"version":3,"file":"executor.d.ts","sourceRoot":"","sources":["../../../src/executors/icon-collection-builder/executor.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAElD,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,iBAAiB,CAAC;AAIjE;;GAEG;AACH,KAAK,eAAe,GAAG,IAAI,CAAC,yBAAyB,CAAC,iCAAiC,EAAE,KAAK,GAAG,aAAa,GAAG,cAAc,CAAC,CAAC;AAEjI;;GAEG;AACH,wBAA8B,WAAW,CAAC,OAAO,EAAE,eAAe,EAAE,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAA;CAAE,CAAC,CAkC3H"}
@@ -1,15 +1,38 @@
1
1
  "use strict";
2
2
  // #region Imports
3
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
4
+ if (k2 === undefined) k2 = k;
5
+ var desc = Object.getOwnPropertyDescriptor(m, k);
6
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
7
+ desc = { enumerable: true, get: function() { return m[k]; } };
8
+ }
9
+ Object.defineProperty(o, k2, desc);
10
+ }) : (function(o, m, k, k2) {
11
+ if (k2 === undefined) k2 = k;
12
+ o[k2] = m[k];
13
+ }));
14
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
15
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
16
+ }) : function(o, v) {
17
+ o["default"] = v;
18
+ });
19
+ var __importStar = (this && this.__importStar) || function (mod) {
20
+ if (mod && mod.__esModule) return mod;
21
+ var result = {};
22
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
23
+ __setModuleDefault(result, mod);
24
+ return result;
25
+ };
3
26
  Object.defineProperty(exports, "__esModule", { value: true });
4
27
  exports.default = runExecutor;
5
- const tasks_1 = require("@breadstone-infrastructure/tasks");
6
28
  const getProjectRoot_1 = require("../../utils/getProjectRoot");
7
29
  /**
8
30
  * @public
9
31
  */
10
32
  async function runExecutor(options, context) {
11
33
  try {
12
- await tasks_1.IconCollectionBuilderTask.run({
34
+ const task = (await Promise.resolve().then(() => __importStar(require('./executor.task')))).IconCollectionBuilderTask;
35
+ await task.run({
13
36
  sets: [
14
37
  {
15
38
  cwd: (0, getProjectRoot_1.getProjectRoot)(context),
@@ -1 +1 @@
1
- {"version":3,"file":"executor.js","sourceRoot":"","sources":["../../../src/executors/icon-collection-builder/executor.ts"],"names":[],"mappings":";AACA,kBAAkB;;AAgBlB,8BAgCC;AA9CD,4DAA6E;AAE7E,+DAA4D;AAS5D;;GAEG;AACY,KAAK,UAAU,WAAW,CAAC,OAAwB,EAAE,OAAwB;IACxF,IAAI,CAAC;QACD,MAAM,iCAAyB,CAAC,GAAG,CAAC;YAChC,IAAI,EAAE;gBACF;oBACI,GAAG,EAAE,IAAA,+BAAc,EAAC,OAAO,CAAC;oBAC5B,IAAI,EAAE,QAAQ;oBACd,KAAK,EAAE,sBAAsB;oBAC7B,MAAM,EAAE,eAAe;oBACvB,KAAK,EAAE,CAAC,QAAQ,EAAE,SAAS,CAAC;oBAC5B,UAAU,EAAE;wBACR,MAAM,EAAE,oBAAoB;wBAC5B,OAAO,EAAE,sBAAsB;qBAClC;iBACJ;gBACD;oBACI,GAAG,EAAE,IAAA,+BAAc,EAAC,OAAO,CAAC;oBAC5B,IAAI,EAAE,QAAQ;oBACd,KAAK,EAAE,sBAAsB;oBAC7B,MAAM,EAAE,eAAe;oBACvB,KAAK,EAAE,CAAC,QAAQ,CAAC;oBACjB,UAAU,EAAE;wBACR,MAAM,EAAE,oBAAoB;qBAC/B;iBACJ;aACJ;SACJ,CAAC,CAAC;QACH,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAC7B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACrB,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IAC9B,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"executor.js","sourceRoot":"","sources":["../../../src/executors/icon-collection-builder/executor.ts"],"names":[],"mappings":";AACA,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;AAgBlB,8BAkCC;AA/CD,+DAA4D;AAU5D;;GAEG;AACY,KAAK,UAAU,WAAW,CAAC,OAAwB,EAAE,OAAwB;IACxF,IAAI,CAAC;QACD,MAAM,IAAI,GAAG,CAAC,wDAAa,iBAAiB,GAAC,CAAC,CAAC,yBAAyB,CAAC;QAEzE,MAAM,IAAI,CAAC,GAAG,CAAC;YACX,IAAI,EAAE;gBACF;oBACI,GAAG,EAAE,IAAA,+BAAc,EAAC,OAAO,CAAC;oBAC5B,IAAI,EAAE,QAAQ;oBACd,KAAK,EAAE,sBAAsB;oBAC7B,MAAM,EAAE,eAAe;oBACvB,KAAK,EAAE,CAAC,QAAQ,EAAE,SAAS,CAAC;oBAC5B,UAAU,EAAE;wBACR,MAAM,EAAE,oBAAoB;wBAC5B,OAAO,EAAE,sBAAsB;qBAClC;iBACJ;gBACD;oBACI,GAAG,EAAE,IAAA,+BAAc,EAAC,OAAO,CAAC;oBAC5B,IAAI,EAAE,QAAQ;oBACd,KAAK,EAAE,sBAAsB;oBAC7B,MAAM,EAAE,eAAe;oBACvB,KAAK,EAAE,CAAC,QAAQ,CAAC;oBACjB,UAAU,EAAE;wBACR,MAAM,EAAE,oBAAoB;qBAC/B;iBACJ;aACJ;SACJ,CAAC,CAAC;QACH,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAC7B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACrB,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IAC9B,CAAC;AACL,CAAC"}
@@ -0,0 +1,14 @@
1
+ export declare namespace IconCollectionBuilderTask {
2
+ interface IIconCollectionBuilderTaksOptions {
3
+ sets: Array<{
4
+ name: string;
5
+ cwd: string;
6
+ inDir: string;
7
+ outDir: string;
8
+ types: Array<'filled' | 'regular'>;
9
+ outFileMap?: Record<string, string>;
10
+ }>;
11
+ }
12
+ function run(options: IIconCollectionBuilderTaksOptions): Promise<void>;
13
+ }
14
+ //# sourceMappingURL=executor.task.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"executor.task.d.ts","sourceRoot":"","sources":["../../../src/executors/icon-collection-builder/executor.task.ts"],"names":[],"mappings":"AAOA,yBAAiB,yBAAyB,CAAC;IAWvC,UAAiB,iCAAiC;QAC9C,IAAI,EAAE,KAAK,CAAC;YACR,IAAI,EAAE,MAAM,CAAC;YACb,GAAG,EAAE,MAAM,CAAC;YACZ,KAAK,EAAE,MAAM,CAAC;YACd,MAAM,EAAE,MAAM,CAAC;YACf,KAAK,EAAE,KAAK,CAAC,QAAQ,GAAG,SAAS,CAAC,CAAC;YACnC,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;SACvC,CAAC,CAAC;KACN;IAED,SAAsB,GAAG,CAAC,OAAO,EAAE,iCAAiC,GAAG,OAAO,CAAC,IAAI,CAAC,CA8CnF;CAkBJ"}
@@ -0,0 +1,69 @@
1
+ "use strict";
2
+ // #region Imports
3
+ var __importDefault = (this && this.__importDefault) || function (mod) {
4
+ return (mod && mod.__esModule) ? mod : { "default": mod };
5
+ };
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.IconCollectionBuilderTask = void 0;
8
+ const utilities_1 = require("@breadstone-infrastructure/utilities");
9
+ const path_1 = __importDefault(require("path"));
10
+ // #endregion
11
+ var IconCollectionBuilderTask;
12
+ (function (IconCollectionBuilderTask) {
13
+ async function run(options) {
14
+ const logger = new utilities_1.ConsoleLogger();
15
+ (0, utilities_1.logSeparator)(logger, 'Build icons');
16
+ options.sets.forEach((set) => {
17
+ logger.log(` ${set.name}`, { color: 'magenta' });
18
+ try {
19
+ const p = utilities_1.Path.relative(set.cwd, set.inDir);
20
+ set.types.forEach((type) => {
21
+ const svgDataPaths = new Array();
22
+ for (const svgFilePath of utilities_1.File.glob(utilities_1.Path.combine(p, `**/*_${type}.svg`))) {
23
+ // Extract SVG data path
24
+ const dataPath = extractSVGDataPath(svgFilePath, logger);
25
+ // const name = path.basename(svgFilePath, '.svg').replace()
26
+ svgDataPaths.push({
27
+ name: path_1.default.basename(svgFilePath, '.svg').replace(/^ic_fluent_|_24_filled$/g, ''),
28
+ category: path_1.default.basename(path_1.default.dirname(svgFilePath)),
29
+ componentName: path_1.default.basename(svgFilePath, '.svg').replace(/-([a-z])/g, (g) => g[1].toUpperCase()),
30
+ data: dataPath ?? ''
31
+ });
32
+ }
33
+ const outFileName = set.outFileMap ? set.outFileMap[type] : '';
34
+ // Save the SVG data paths to a common JSON file
35
+ utilities_1.File.writeAllText(utilities_1.Path.combine(set.cwd, set.outDir, outFileName), JSON.stringify(svgDataPaths, null, 4));
36
+ logger.log(' - SVG data cwd:', set.cwd);
37
+ logger.log(' - SVG data dir:', set.outDir);
38
+ logger.log(` - SVG data paths saved to ${outFileName}`);
39
+ // Logger.instance().logInfo(' Icon download successfully.');
40
+ // Logger.instance().logInfo(' Summary:', { color: 'magenta' })
41
+ // Logger.instance().logInfo(` - ${downloadedCount} icons downloaded.`, { color: 'magenta' });
42
+ // Logger.instance().logInfo(` - ${cachedCount} icons cached.`, { color: 'magenta' });
43
+ });
44
+ }
45
+ catch (error) {
46
+ logger.error('Error icons:', error);
47
+ }
48
+ });
49
+ (0, utilities_1.logSeparator)(logger);
50
+ return Promise.resolve();
51
+ }
52
+ IconCollectionBuilderTask.run = run;
53
+ function extractSVGDataPath(svgFilePath, logger) {
54
+ try {
55
+ const svgContent = utilities_1.File.readAllText(svgFilePath, 'utf-8');
56
+ const regex = /<path[^>]*d="([^"]+)"/ig;
57
+ const matches = [...svgContent.matchAll(regex)];
58
+ if (matches.length === 0) {
59
+ return null;
60
+ }
61
+ return matches.map((match) => match[1]).join(' ');
62
+ }
63
+ catch (error) {
64
+ logger.error(`Error parsing SVG ${svgFilePath}:`, error);
65
+ return null;
66
+ }
67
+ }
68
+ })(IconCollectionBuilderTask || (exports.IconCollectionBuilderTask = IconCollectionBuilderTask = {}));
69
+ //# sourceMappingURL=executor.task.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"executor.task.js","sourceRoot":"","sources":["../../../src/executors/icon-collection-builder/executor.task.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,9 @@
1
- import { IconCollectionDownloaderTask } from '@breadstone-infrastructure/tasks';
2
1
  import type { ExecutorContext } from '@nx/devkit';
2
+ import type { IconCollectionDownloaderTask } from './executor.task';
3
3
  /**
4
4
  * @private
5
5
  */
6
- type ExecutorOptions = Omit<IconCollectionDownloaderTask.IIconCollectionDownloaderTaksOptions, 'cwd' | 'packageJson' | 'tsConfigJson'>;
6
+ type ExecutorOptions = Omit<IconCollectionDownloaderTask.IIconCollectionDownloaderTaskOptions, 'cwd' | 'packageJson' | 'tsConfigJson'>;
7
7
  /**
8
8
  * @public
9
9
  */
@@ -1 +1 @@
1
- {"version":3,"file":"executor.d.ts","sourceRoot":"","sources":["../../../src/executors/icon-collection-downloader/executor.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,4BAA4B,EAAE,MAAM,kCAAkC,CAAC;AAChF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAKlD;;GAEG;AACH,KAAK,eAAe,GAAG,IAAI,CAAC,4BAA4B,CAAC,oCAAoC,EAAE,KAAK,GAAG,aAAa,GAAG,cAAc,CAAC,CAAC;AAEvI;;GAEG;AACH,wBAA8B,WAAW,CAAC,OAAO,EAAE,eAAe,EAAE,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAA;CAAE,CAAC,CAe3H"}
1
+ {"version":3,"file":"executor.d.ts","sourceRoot":"","sources":["../../../src/executors/icon-collection-downloader/executor.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAElD,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,iBAAiB,CAAC;AAIpE;;GAEG;AACH,KAAK,eAAe,GAAG,IAAI,CAAC,4BAA4B,CAAC,oCAAoC,EAAE,KAAK,GAAG,aAAa,GAAG,cAAc,CAAC,CAAC;AAEvI;;GAEG;AACH,wBAA8B,WAAW,CAAC,OAAO,EAAE,eAAe,EAAE,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAA;CAAE,CAAC,CAiB3H"}
@@ -1,15 +1,38 @@
1
1
  "use strict";
2
2
  // #region Imports
3
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
4
+ if (k2 === undefined) k2 = k;
5
+ var desc = Object.getOwnPropertyDescriptor(m, k);
6
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
7
+ desc = { enumerable: true, get: function() { return m[k]; } };
8
+ }
9
+ Object.defineProperty(o, k2, desc);
10
+ }) : (function(o, m, k, k2) {
11
+ if (k2 === undefined) k2 = k;
12
+ o[k2] = m[k];
13
+ }));
14
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
15
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
16
+ }) : function(o, v) {
17
+ o["default"] = v;
18
+ });
19
+ var __importStar = (this && this.__importStar) || function (mod) {
20
+ if (mod && mod.__esModule) return mod;
21
+ var result = {};
22
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
23
+ __setModuleDefault(result, mod);
24
+ return result;
25
+ };
3
26
  Object.defineProperty(exports, "__esModule", { value: true });
4
27
  exports.default = runExecutor;
5
- const tasks_1 = require("@breadstone-infrastructure/tasks");
6
28
  const getProjectRoot_1 = require("../../utils/getProjectRoot");
7
29
  /**
8
30
  * @public
9
31
  */
10
32
  async function runExecutor(options, context) {
11
33
  try {
12
- await tasks_1.IconCollectionDownloaderTask.run({
34
+ const task = (await Promise.resolve().then(() => __importStar(require('./executor.task')))).IconCollectionDownloaderTask;
35
+ await task.run({
13
36
  cwd: (0, getProjectRoot_1.getProjectRoot)(context),
14
37
  outDir: options.outDir,
15
38
  cache: {
@@ -1 +1 @@
1
- {"version":3,"file":"executor.js","sourceRoot":"","sources":["../../../src/executors/icon-collection-downloader/executor.ts"],"names":[],"mappings":";AAAA,kBAAkB;;AAgBlB,8BAeC;AA7BD,4DAAgF;AAEhF,+DAA4D;AAS5D;;GAEG;AACY,KAAK,UAAU,WAAW,CAAC,OAAwB,EAAE,OAAwB;IACxF,IAAI,CAAC;QACD,MAAM,oCAA4B,CAAC,GAAG,CAAC;YACnC,GAAG,EAAE,IAAA,+BAAc,EAAC,OAAO,CAAC;YAC5B,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,KAAK,EAAE;gBACH,OAAO,EAAE,OAAO,CAAC,MAAM,EAAE,KAAK;gBAC9B,OAAO,EAAE,UAAU;aACtB;SACJ,CAAC,CAAC;QACH,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAC7B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACrB,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IAC9B,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"executor.js","sourceRoot":"","sources":["../../../src/executors/icon-collection-downloader/executor.ts"],"names":[],"mappings":";AAAA,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;AAgBlB,8BAiBC;AA9BD,+DAA4D;AAU5D;;GAEG;AACY,KAAK,UAAU,WAAW,CAAC,OAAwB,EAAE,OAAwB;IACxF,IAAI,CAAC;QACD,MAAM,IAAI,GAAG,CAAC,wDAAa,iBAAiB,GAAC,CAAC,CAAC,4BAA4B,CAAC;QAE5E,MAAM,IAAI,CAAC,GAAG,CAAC;YACX,GAAG,EAAE,IAAA,+BAAc,EAAC,OAAO,CAAC;YAC5B,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,KAAK,EAAE;gBACH,OAAO,EAAE,OAAO,CAAC,MAAM,EAAE,KAAK;gBAC9B,OAAO,EAAE,UAAU;aACtB;SACJ,CAAC,CAAC;QACH,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAC7B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACrB,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IAC9B,CAAC;AACL,CAAC"}
@@ -0,0 +1,10 @@
1
+ import { type IFileCacheOptions } from '@breadstone-infrastructure/utilities';
2
+ export declare namespace IconCollectionDownloaderTask {
3
+ interface IIconCollectionDownloaderTaskOptions {
4
+ cwd: string;
5
+ outDir: string;
6
+ cache: IFileCacheOptions;
7
+ }
8
+ function run(options: IIconCollectionDownloaderTaskOptions): Promise<void>;
9
+ }
10
+ //# sourceMappingURL=executor.task.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"executor.task.d.ts","sourceRoot":"","sources":["../../../src/executors/icon-collection-downloader/executor.task.ts"],"names":[],"mappings":"AAEA,OAAO,EAAwD,KAAK,iBAAiB,EAAiC,MAAM,sCAAsC,CAAC;AAOnK,yBAAiB,4BAA4B,CAAC;IAK1C,UAAiB,oCAAoC;QACjD,GAAG,EAAE,MAAM,CAAC;QACZ,MAAM,EAAE,MAAM,CAAC;QACf,KAAK,EAAE,iBAAiB,CAAC;KAC5B;IAED,SAAsB,GAAG,CAAC,OAAO,EAAE,oCAAoC,GAAG,OAAO,CAAC,IAAI,CAAC,CA+DtF;CA6DJ"}
@@ -0,0 +1,122 @@
1
+ "use strict";
2
+ // #region Imports
3
+ var __importDefault = (this && this.__importDefault) || function (mod) {
4
+ return (mod && mod.__esModule) ? mod : { "default": mod };
5
+ };
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.IconCollectionDownloaderTask = void 0;
8
+ const utilities_1 = require("@breadstone-infrastructure/utilities");
9
+ const fs_1 = __importDefault(require("fs"));
10
+ const https_1 = __importDefault(require("https"));
11
+ const path_1 = __importDefault(require("path"));
12
+ // #endregion
13
+ var IconCollectionDownloaderTask;
14
+ (function (IconCollectionDownloaderTask) {
15
+ const GITHUB_API_URL = 'https://api.github.com/repos/coltongriffith/fluenticons/git/trees/main?recursive=1';
16
+ const RAW_CONTENT_URL = 'https://raw.githubusercontent.com/coltongriffith/fluenticons/main/';
17
+ async function run(options) {
18
+ const logger = new utilities_1.ConsoleLogger();
19
+ (0, utilities_1.logSeparator)(logger, 'Download icons');
20
+ const fileCache = new utilities_1.FileCache(options.cache);
21
+ if (!options.cache.enabled) {
22
+ (0, utilities_1.logBanner)(logger, 'warning', 'Caching is disabled', {
23
+ prefixSpaceLength: 2
24
+ });
25
+ }
26
+ try {
27
+ const data = await fetchJson(GITHUB_API_URL);
28
+ // Create a directory to store the icons if it doesn't exist
29
+ const p = utilities_1.Path.relative(options.cwd, options.outDir);
30
+ if (!utilities_1.Directory.exists(p)) {
31
+ utilities_1.Directory.create(p);
32
+ }
33
+ // Filter the tree to get only SVG files from the specified directory
34
+ const svgFiles = data.tree.filter((item) => item.path.startsWith('static/icons/fluent') && item.type === 'blob' && item.path.endsWith('.svg'));
35
+ let count = 0;
36
+ let downloadedCount = 0;
37
+ let cachedCount = 0;
38
+ const totalCount = svgFiles.length;
39
+ for (const file of svgFiles) {
40
+ const fileUrl = `${RAW_CONTENT_URL}${file.path}`;
41
+ const destPath = path_1.default.join(p, path_1.default.basename(file.path));
42
+ // eslint-disable-next-line no-await-in-loop
43
+ const cached = await downloadFile(fileUrl, destPath, fileCache);
44
+ count++;
45
+ if (cached) {
46
+ cachedCount++;
47
+ logger.log(`- [${count}/${totalCount}] '${file.path}'`, { color: 'gray' });
48
+ }
49
+ else {
50
+ downloadedCount++;
51
+ logger.log(`- [${count}/${totalCount}] '${file.path}'`, { color: 'magenta' });
52
+ }
53
+ }
54
+ logger.log(' Icon download successfully.');
55
+ logger.log(' Summary:');
56
+ logger.log(` - ${downloadedCount} icons downloaded.`);
57
+ logger.log(` - ${cachedCount} icons cached.`);
58
+ }
59
+ catch (error) {
60
+ logger.error(`Error downloading icons: ${error}`);
61
+ }
62
+ (0, utilities_1.logSeparator)(logger);
63
+ return Promise.resolve();
64
+ }
65
+ IconCollectionDownloaderTask.run = run;
66
+ async function fetchJson(url) {
67
+ return new Promise((resolve, reject) => {
68
+ https_1.default.get(url, {
69
+ headers: {
70
+ 'User-Agent': 'Node.js'
71
+ }
72
+ }, (res) => {
73
+ let data = '';
74
+ res.on('data', (chunk) => {
75
+ data += chunk;
76
+ });
77
+ res.on('end', () => {
78
+ if (res.statusCode && res.statusCode >= 200 && res.statusCode < 300) {
79
+ try {
80
+ resolve(JSON.parse(data));
81
+ }
82
+ catch (error) {
83
+ reject(`Error parsing JSON from ${url}: ${error}`);
84
+ }
85
+ }
86
+ else {
87
+ reject(`Request failed with status ${res.statusCode} for ${url}`);
88
+ }
89
+ });
90
+ }).on('error', (error) => {
91
+ reject(error);
92
+ });
93
+ });
94
+ }
95
+ async function downloadFile(url, destPath, fileCache) {
96
+ const isFileCached = await fileCache.isFileCached(destPath);
97
+ if (!isFileCached) {
98
+ await new Promise((resolve, reject) => {
99
+ const file = fs_1.default.createWriteStream(destPath);
100
+ https_1.default.get(url, (res) => {
101
+ if (res.statusCode && res.statusCode >= 200 && res.statusCode < 300) {
102
+ res.pipe(file);
103
+ file.on('finish', () => {
104
+ file.close();
105
+ resolve();
106
+ });
107
+ }
108
+ else {
109
+ file.close();
110
+ fs_1.default.unlinkSync(destPath); // Delete partial file
111
+ reject(`Download failed with status ${res.statusCode} for ${url}`);
112
+ }
113
+ }).on('error', (error) => {
114
+ fs_1.default.unlinkSync(destPath); // Delete partial file
115
+ reject(error);
116
+ });
117
+ });
118
+ }
119
+ return Promise.resolve(isFileCached);
120
+ }
121
+ })(IconCollectionDownloaderTask || (exports.IconCollectionDownloaderTask = IconCollectionDownloaderTask = {}));
122
+ //# sourceMappingURL=executor.task.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"executor.task.js","sourceRoot":"","sources":["../../../src/executors/icon-collection-downloader/executor.task.ts"],"names":[],"mappings":"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"}