@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.
- package/Index.d.ts +21 -24
- package/Index.d.ts.map +1 -1
- package/Index.js +43 -39
- package/Index.js.map +1 -1
- package/executors/alias-replace/executor.d.ts +3 -3
- package/executors/alias-replace/executor.d.ts.map +1 -1
- package/executors/alias-replace/executor.js +25 -2
- package/executors/alias-replace/executor.js.map +1 -1
- package/executors/alias-replace/executor.task.d.ts +74 -0
- package/executors/alias-replace/executor.task.d.ts.map +1 -0
- package/executors/alias-replace/executor.task.js +256 -0
- package/executors/alias-replace/executor.task.js.map +1 -0
- package/executors/clean/executor.d.ts +3 -3
- package/executors/clean/executor.d.ts.map +1 -1
- package/executors/clean/executor.js +25 -2
- package/executors/clean/executor.js.map +1 -1
- package/executors/clean/executor.task.d.ts +17 -0
- package/executors/clean/executor.task.d.ts.map +1 -0
- package/executors/clean/executor.task.js +41 -0
- package/executors/clean/executor.task.js.map +1 -0
- package/executors/copy/executor.d.ts +3 -3
- package/executors/copy/executor.d.ts.map +1 -1
- package/executors/copy/executor.js +25 -2
- package/executors/copy/executor.js.map +1 -1
- package/executors/copy/executor.task.d.ts +36 -0
- package/executors/copy/executor.task.d.ts.map +1 -0
- package/executors/copy/executor.task.js +53 -0
- package/executors/copy/executor.task.js.map +1 -0
- package/executors/docs/executor.d.ts +1 -1
- package/executors/docs/executor.d.ts.map +1 -1
- package/executors/docs/executor.js +25 -2
- package/executors/docs/executor.js.map +1 -1
- package/executors/docs/executor.task.d.ts +23 -0
- package/executors/docs/executor.task.d.ts.map +1 -0
- package/executors/docs/executor.task.js +74 -0
- package/executors/docs/executor.task.js.map +1 -0
- package/executors/doppler-config-sync/executor.d.ts +1 -1
- package/executors/doppler-config-sync/executor.d.ts.map +1 -1
- package/executors/doppler-config-sync/executor.js +25 -2
- package/executors/doppler-config-sync/executor.js.map +1 -1
- package/executors/doppler-config-sync/executor.task.d.ts +23 -0
- package/executors/doppler-config-sync/executor.task.d.ts.map +1 -0
- package/executors/doppler-config-sync/executor.task.js +163 -0
- package/executors/doppler-config-sync/executor.task.js.map +1 -0
- package/executors/icon-collection-builder/executor.d.ts +1 -1
- package/executors/icon-collection-builder/executor.d.ts.map +1 -1
- package/executors/icon-collection-builder/executor.js +25 -2
- package/executors/icon-collection-builder/executor.js.map +1 -1
- package/executors/icon-collection-builder/executor.task.d.ts +14 -0
- package/executors/icon-collection-builder/executor.task.d.ts.map +1 -0
- package/executors/icon-collection-builder/executor.task.js +69 -0
- package/executors/icon-collection-builder/executor.task.js.map +1 -0
- package/executors/icon-collection-downloader/executor.d.ts +2 -2
- package/executors/icon-collection-downloader/executor.d.ts.map +1 -1
- package/executors/icon-collection-downloader/executor.js +25 -2
- package/executors/icon-collection-downloader/executor.js.map +1 -1
- package/executors/icon-collection-downloader/executor.task.d.ts +10 -0
- package/executors/icon-collection-downloader/executor.task.d.ts.map +1 -0
- package/executors/icon-collection-downloader/executor.task.js +122 -0
- package/executors/icon-collection-downloader/executor.task.js.map +1 -0
- package/executors/lit-docs/JSDocChecker.d.ts +104 -0
- package/executors/lit-docs/JSDocChecker.d.ts.map +1 -0
- package/executors/lit-docs/JSDocChecker.js +240 -0
- package/executors/lit-docs/JSDocChecker.js.map +1 -0
- package/executors/lit-docs/executor.d.ts +3 -3
- package/executors/lit-docs/executor.d.ts.map +1 -1
- package/executors/lit-docs/executor.js +28 -3
- package/executors/lit-docs/executor.js.map +1 -1
- package/executors/lit-docs/executor.task.d.ts +12 -0
- package/executors/lit-docs/executor.task.d.ts.map +1 -0
- package/executors/lit-docs/executor.task.js +233 -0
- package/executors/lit-docs/executor.task.js.map +1 -0
- package/executors/lit-style-transform/executor.d.ts +2 -2
- package/executors/lit-style-transform/executor.d.ts.map +1 -1
- package/executors/lit-style-transform/executor.js +30 -7
- package/executors/lit-style-transform/executor.js.map +1 -1
- package/executors/lit-style-transform/executor.task.d.ts +37 -0
- package/executors/lit-style-transform/executor.task.d.ts.map +1 -0
- package/executors/lit-style-transform/executor.task.js +351 -0
- package/executors/lit-style-transform/executor.task.js.map +1 -0
- package/executors/localizator/executor.d.ts +1 -1
- package/executors/localizator/executor.d.ts.map +1 -1
- package/executors/localizator/executor.js +26 -5
- package/executors/localizator/executor.js.map +1 -1
- package/executors/localizator/executor.task.d.ts +8 -0
- package/executors/localizator/executor.task.d.ts.map +1 -0
- package/executors/localizator/executor.task.js +153 -0
- package/executors/localizator/executor.task.js.map +1 -0
- package/executors/markdown-to-typescript-transform/MarkdownRenderer.d.ts +20 -0
- package/executors/markdown-to-typescript-transform/MarkdownRenderer.d.ts.map +1 -0
- package/executors/markdown-to-typescript-transform/MarkdownRenderer.js +74 -0
- package/executors/markdown-to-typescript-transform/MarkdownRenderer.js.map +1 -0
- package/executors/markdown-to-typescript-transform/executor.d.ts +1 -1
- package/executors/markdown-to-typescript-transform/executor.d.ts.map +1 -1
- package/executors/markdown-to-typescript-transform/executor.js +25 -2
- package/executors/markdown-to-typescript-transform/executor.js.map +1 -1
- package/executors/markdown-to-typescript-transform/executor.task.d.ts +25 -0
- package/executors/markdown-to-typescript-transform/executor.task.d.ts.map +1 -0
- package/executors/markdown-to-typescript-transform/executor.task.js +97 -0
- package/executors/markdown-to-typescript-transform/executor.task.js.map +1 -0
- package/executors/ng-packagr-build/executor.d.ts +3 -3
- package/executors/ng-packagr-build/executor.d.ts.map +1 -1
- package/executors/ng-packagr-build/executor.js +25 -2
- package/executors/ng-packagr-build/executor.js.map +1 -1
- package/executors/ng-packagr-build/executor.task.d.ts +11 -0
- package/executors/ng-packagr-build/executor.task.d.ts.map +1 -0
- package/executors/ng-packagr-build/executor.task.js +43 -0
- package/executors/ng-packagr-build/executor.task.js.map +1 -0
- package/executors/ng-proxy-transform/executor.d.ts +3 -3
- package/executors/ng-proxy-transform/executor.d.ts.map +1 -1
- package/executors/ng-proxy-transform/executor.js +25 -2
- package/executors/ng-proxy-transform/executor.js.map +1 -1
- package/executors/ng-proxy-transform/executor.task.d.ts +49 -0
- package/executors/ng-proxy-transform/executor.task.d.ts.map +1 -0
- package/executors/ng-proxy-transform/executor.task.js +386 -0
- package/executors/ng-proxy-transform/executor.task.js.map +1 -0
- package/executors/openapi-generator/executor.d.ts +1 -1
- package/executors/openapi-generator/executor.d.ts.map +1 -1
- package/executors/openapi-generator/executor.js +25 -2
- package/executors/openapi-generator/executor.js.map +1 -1
- package/executors/openapi-generator/executor.task.d.ts +20 -0
- package/executors/openapi-generator/executor.task.d.ts.map +1 -0
- package/executors/openapi-generator/executor.task.js +29 -0
- package/executors/openapi-generator/executor.task.js.map +1 -0
- package/executors/react-proxy-transform/executor.d.ts +3 -3
- package/executors/react-proxy-transform/executor.d.ts.map +1 -1
- package/executors/react-proxy-transform/executor.js +25 -2
- package/executors/react-proxy-transform/executor.js.map +1 -1
- package/executors/react-proxy-transform/executor.task.d.ts +44 -0
- package/executors/react-proxy-transform/executor.task.d.ts.map +1 -0
- package/executors/react-proxy-transform/executor.task.js +217 -0
- package/executors/react-proxy-transform/executor.task.js.map +1 -0
- package/executors/release-package/executor.d.ts +3 -3
- package/executors/release-package/executor.d.ts.map +1 -1
- package/executors/release-package/executor.js +25 -2
- package/executors/release-package/executor.js.map +1 -1
- package/executors/release-package/executor.task.d.ts +17 -0
- package/executors/release-package/executor.task.d.ts.map +1 -0
- package/executors/release-package/executor.task.js +177 -0
- package/executors/release-package/executor.task.js.map +1 -0
- package/executors/release-package-json/executor.d.ts +3 -3
- package/executors/release-package-json/executor.d.ts.map +1 -1
- package/executors/release-package-json/executor.js +25 -2
- package/executors/release-package-json/executor.js.map +1 -1
- package/executors/release-package-json/executor.task.d.ts +29 -0
- package/executors/release-package-json/executor.task.d.ts.map +1 -0
- package/executors/release-package-json/executor.task.js +167 -0
- package/executors/release-package-json/executor.task.js.map +1 -0
- package/executors/styles-bundle/executor.d.ts +3 -3
- package/executors/styles-bundle/executor.d.ts.map +1 -1
- package/executors/styles-bundle/executor.js +25 -2
- package/executors/styles-bundle/executor.js.map +1 -1
- package/executors/styles-bundle/executor.task.d.ts +20 -0
- package/executors/styles-bundle/executor.task.d.ts.map +1 -0
- package/executors/styles-bundle/executor.task.js +78 -0
- package/executors/styles-bundle/executor.task.js.map +1 -0
- package/executors/unrelease-package/executor.d.ts +3 -3
- package/executors/unrelease-package/executor.d.ts.map +1 -1
- package/executors/unrelease-package/executor.js +25 -2
- package/executors/unrelease-package/executor.js.map +1 -1
- package/executors/unrelease-package/executor.task.d.ts +13 -0
- package/executors/unrelease-package/executor.task.d.ts.map +1 -0
- package/executors/unrelease-package/executor.task.js +101 -0
- package/executors/unrelease-package/executor.task.js.map +1 -0
- package/executors/vercel-edge-config-sync/executor.d.ts +1 -1
- package/executors/vercel-edge-config-sync/executor.d.ts.map +1 -1
- package/executors/vercel-edge-config-sync/executor.js +25 -2
- package/executors/vercel-edge-config-sync/executor.js.map +1 -1
- package/executors/vercel-edge-config-sync/executor.task.d.ts +7 -0
- package/executors/vercel-edge-config-sync/executor.task.d.ts.map +1 -0
- package/executors/vercel-edge-config-sync/executor.task.js +46 -0
- package/executors/vercel-edge-config-sync/executor.task.js.map +1 -0
- package/executors/vue-proxy-transform/executor.d.ts +3 -3
- package/executors/vue-proxy-transform/executor.d.ts.map +1 -1
- package/executors/vue-proxy-transform/executor.js +25 -2
- package/executors/vue-proxy-transform/executor.js.map +1 -1
- package/executors/vue-proxy-transform/executor.task.d.ts +43 -0
- package/executors/vue-proxy-transform/executor.task.d.ts.map +1 -0
- package/executors/vue-proxy-transform/executor.task.js +201 -0
- package/executors/vue-proxy-transform/executor.task.js.map +1 -0
- package/package.json +24 -5
- package/utils/TaskBase.d.ts +13 -0
- package/utils/TaskBase.d.ts.map +1 -0
- package/utils/TaskBase.js +27 -0
- 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":";AAAA,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;AAElB,oEAA+F;AAC/F,+CAAiC;AACjC,uCAAkC;AAElC,aAAa;AAEb,IAAiB,qBAAqB,CAkLrC;AAlLD,WAAiB,qBAAqB;IAElC,qBAAqB;IAuBrB,aAAa;IAEb,oBAAoB;IAEpB;;;;OAIG;IACH,KAAK,UAAU,YAAY,CAAC,KAAc;QACtC,IAAI,KAAK,EAAE,CAAC;YACR,OAAO,KAAK,CAAC;QACjB,CAAC;QAED,MAAM,WAAW,GAAG,MAAM,IAAA,iBAAM,EAE7B;YACC;gBACI,IAAI,EAAE,OAAO;gBACb,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,gFAAgF;aAC5F;SACJ,CAAC,CAAC;QAEH,OAAO,WAAW,CAAC,MAAM,CAAC;IAC9B,CAAC;IAED;;;;;;;OAOG;IACH,KAAK,UAAU,YAAY,CAAC,KAAa,EAAE,OAAe,EAAE,MAAc,EAAE,MAAe;QACvF,MAAM,MAAM,GAAG,6DAA6D,OAAO,WAAW,MAAM,6DAA6D,CAAC;QAElK,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,MAAM,EAAE;YACjC,OAAO,EAAE,EAAE,aAAa,EAAE,UAAU,KAAK,EAAE,EAAE;SAChD,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CAAC,oCAAoC,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;QAC/E,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAA6B,CAAC;QAE9D,MAAM,CAAC,GAAG,CAAC,WAAW,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,wBAAwB,CAAC,CAAC;QAChF,OAAO,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACpG,CAAC;IAED;;;;;OAKG;IACH,SAAS,WAAW,CAAC,WAAmB,EAAE,MAAe;QACrD,IAAI,CAAC,gBAAI,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC;YAC5B,OAAO,EAAE,CAAC;QACd,CAAC;QAED,MAAM,CAAC,GAAG,CAAC,2BAA2B,WAAW,EAAE,CAAC,CAAC;QACrD,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC;QACvD,IAAI,SAAS,CAAC,KAAK,EAAE,CAAC;YAClB,MAAM,IAAI,KAAK,CAAC,4BAA4B,SAAS,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QAC3E,CAAC;QACD,OAAO,SAAS,CAAC,MAAM,IAAI,EAAE,CAAC;IAClC,CAAC;IAED;;;;;OAKG;IACH,SAAS,aAAa,CAAC,UAAkC,EAAE,OAA+B,EAAE,MAAe;QACvG,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,CAGvC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;YACb,IAAI,UAAU,CAAC,GAAG,CAAC,KAAK,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;gBACnC,GAAG,CAAC,GAAG,CAAC,GAAG;oBACP,GAAG,EAAE,UAAU,CAAC,GAAG,CAAC,IAAI,WAAW;oBACnC,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC;iBACpB,CAAC;YACN,CAAC;YACD,OAAO,GAAG,CAAC;QACf,CAAC,EAAE,EAAE,CAAC,CAAC;QAEP,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAClC,MAAM,CAAC,GAAG,CAAC,8CAA8C,CAAC,CAAC;YAC3D,KAAK,MAAM,CAAC,GAAG,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;gBAChE,MAAM,CAAC,GAAG,CAAC,KAAK,GAAG,WAAW,GAAG,cAAc,MAAM,GAAG,CAAC,CAAC;YAC9D,CAAC;QACL,CAAC;aAAM,CAAC;YACJ,MAAM,CAAC,GAAG,CAAC,uCAAuC,CAAC,CAAC;QACxD,CAAC;IACL,CAAC;IAED;;;;;OAKG;IACH,SAAS,aAAa,CAAC,WAAmB,EAAE,UAAkC;QAC1E,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC;aACxC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,KAAK,KAAK,GAAG,CAAC;aAC1C,IAAI,CAAC,IAAI,CAAC,CAAC;QAChB,gBAAI,CAAC,YAAY,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;IAC/C,CAAC;IAED,aAAa;IAEb,oBAAoB;IAEb,KAAK,UAAU,GAAG,CAAC,OAAsC;QAC5D,MAAM,MAAM,GAAG,IAAI,yBAAa,EAAE,CAAC;QAEnC,IAAI,CAAC;YACD,6CAA6C;YAC7C,MAAM,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC;YAC7C,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,IAAI,MAAM,YAAY,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YAEnE,qCAAqC;YACrC,MAAM,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAC;YAC/C,MAAM,OAAO,GAAG,MAAM,YAAY,CAAC,KAAK,EAAE,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YAEnF,4CAA4C;YAC5C,MAAM,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC;YAC3C,MAAM,OAAO,GAAG,gBAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;YAC3D,MAAM,UAAU,GAAG,WAAW,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;YAEhD,0DAA0D;YAC1D,aAAa,CAAC,UAAU,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;YAE3C,0DAA0D;YAC1D,MAAM,SAAS,GAAG;gBACd,GAAG,UAAU;gBACb,GAAG,OAAO;aACb,CAAC;YACF,aAAa,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;YAElC,MAAM,CAAC,GAAG,CAAC,kDAAkD,CAAC,CAAC;QACnE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,MAAM,CAAC,KAAK,CAAC,UAAU,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;YACxC,MAAM,KAAK,CAAC;QAChB,CAAC;IACL,CAAC;IAhCqB,yBAAG,MAgCxB,CAAA;IAED,aAAa;AACjB,CAAC,EAlLgB,qBAAqB,qCAArB,qBAAqB,QAkLrC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"executor.d.ts","sourceRoot":"","sources":["../../../src/executors/icon-collection-builder/executor.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,
|
|
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
|
|
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
|
|
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":";AAAA,kBAAkB;;;;;;AAElB,oEAA6G;AAC7G,gDAAwB;AAExB,aAAa;AAEb,IAAiB,yBAAyB,CAsFzC;AAtFD,WAAiB,yBAAyB;IAsB/B,KAAK,UAAU,GAAG,CAAC,OAA0C;QAChE,MAAM,MAAM,GAAG,IAAI,yBAAa,EAAE,CAAC;QAEnC,IAAA,wBAAY,EAAC,MAAM,EAAE,aAAa,CAAC,CAAC;QAEpC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;YACzB,MAAM,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;YAElD,IAAI,CAAC;gBACD,MAAM,CAAC,GAAG,gBAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC;gBAE5C,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;oBACvB,MAAM,YAAY,GAAiB,IAAI,KAAK,EAAW,CAAC;oBAExD,KAAK,MAAM,WAAW,IAAI,gBAAI,CAAC,IAAI,CAAC,gBAAI,CAAC,OAAO,CAAC,CAAC,EAAE,QAAQ,IAAI,MAAM,CAAC,CAAC,EAAE,CAAC;wBACvE,wBAAwB;wBACxB,MAAM,QAAQ,GAAG,kBAAkB,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;wBACzD,4DAA4D;wBAC5D,YAAY,CAAC,IAAI,CAAC;4BACd,IAAI,EAAE,cAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,0BAA0B,EAAE,EAAE,CAAC;4BAChF,QAAQ,EAAE,cAAI,CAAC,QAAQ,CAAC,cAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;4BAClD,aAAa,EAAE,cAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;4BACjG,IAAI,EAAE,QAAQ,IAAI,EAAE;yBACvB,CAAC,CAAC;oBACP,CAAC;oBAED,MAAM,WAAW,GAAG,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;oBAC/D,gDAAgD;oBAChD,gBAAI,CAAC,YAAY,CAAC,gBAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;oBACzG,MAAM,CAAC,GAAG,CAAC,mBAAmB,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;oBACzC,MAAM,CAAC,GAAG,CAAC,mBAAmB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;oBAC5C,MAAM,CAAC,GAAG,CAAC,+BAA+B,WAAW,EAAE,CAAC,CAAC;oBAEzD,8DAA8D;oBAC9D,gEAAgE;oBAChE,+FAA+F;oBAC/F,uFAAuF;gBAC3F,CAAC,CAAC,CAAC;YACP,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACb,MAAM,CAAC,KAAK,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;YACxC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,IAAA,wBAAY,EAAC,MAAM,CAAC,CAAC;QAErB,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;IAC7B,CAAC;IA9CqB,6BAAG,MA8CxB,CAAA;IAED,SAAS,kBAAkB,CAAC,WAAmB,EAAE,MAAe;QAC5D,IAAI,CAAC;YACD,MAAM,UAAU,GAAG,gBAAI,CAAC,WAAW,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;YAC1D,MAAM,KAAK,GAAG,yBAAyB,CAAC;YACxC,MAAM,OAAO,GAAG,CAAC,GAAG,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;YAChD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACvB,OAAO,IAAI,CAAC;YAChB,CAAC;YAED,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACtD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,MAAM,CAAC,KAAK,CAAC,qBAAqB,WAAW,GAAG,EAAE,KAAK,CAAC,CAAC;YACzD,OAAO,IAAI,CAAC;QAChB,CAAC;IACL,CAAC;AAEL,CAAC,EAtFgB,yBAAyB,yCAAzB,yBAAyB,QAsFzC"}
|
|
@@ -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.
|
|
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,
|
|
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
|
|
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
|
|
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":";AAAA,kBAAkB;;;;;;AAElB,oEAAmK;AACnK,4CAAoB;AACpB,kDAA0B;AAC1B,gDAAwB;AAExB,aAAa;AAEb,IAAiB,4BAA4B,CAuI5C;AAvID,WAAiB,4BAA4B;IAEzC,MAAM,cAAc,GAAG,oFAAoF,CAAC;IAC5G,MAAM,eAAe,GAAG,oEAAoE,CAAC;IAQtF,KAAK,UAAU,GAAG,CAAC,OAA6C;QACnE,MAAM,MAAM,GAAG,IAAI,yBAAa,EAAE,CAAC;QAEnC,IAAA,wBAAY,EAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;QAEvC,MAAM,SAAS,GAAG,IAAI,qBAAS,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAE/C,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;YACzB,IAAA,qBAAS,EAAC,MAAM,EAAE,SAAS,EAAE,qBAAqB,EAAE;gBAChD,iBAAiB,EAAE,CAAC;aACvB,CAAC,CAAC;QACP,CAAC;QAED,IAAI,CAAC;YACD,MAAM,IAAI,GAAG,MAAM,SAAS,CAAC,cAAc,CAK1C,CAAC;YAEF,4DAA4D;YAC5D,MAAM,CAAC,GAAG,gBAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;YACrD,IAAI,CAAC,qBAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;gBACvB,qBAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YACxB,CAAC;YAED,qEAAqE;YACrE,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,qBAAqB,CAAC,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;YAE/I,IAAI,KAAK,GAAG,CAAC,CAAC;YACd,IAAI,eAAe,GAAG,CAAC,CAAC;YACxB,IAAI,WAAW,GAAG,CAAC,CAAC;YACpB,MAAM,UAAU,GAAG,QAAQ,CAAC,MAAM,CAAC;YAEnC,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;gBAC1B,MAAM,OAAO,GAAG,GAAG,eAAe,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;gBACjD,MAAM,QAAQ,GAAG,cAAI,CAAC,IAAI,CAAC,CAAC,EAAE,cAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;gBACxD,4CAA4C;gBAC5C,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,OAAO,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;gBAEhE,KAAK,EAAE,CAAC;gBAER,IAAI,MAAM,EAAE,CAAC;oBACT,WAAW,EAAE,CAAC;oBACd,MAAM,CAAC,GAAG,CAAC,MAAM,KAAK,IAAI,UAAU,MAAM,IAAI,CAAC,IAAI,GAAG,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;gBAC/E,CAAC;qBAAM,CAAC;oBACJ,eAAe,EAAE,CAAC;oBAClB,MAAM,CAAC,GAAG,CAAC,MAAM,KAAK,IAAI,UAAU,MAAM,IAAI,CAAC,IAAI,GAAG,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;gBAClF,CAAC;YACL,CAAC;YAED,MAAM,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC;YAC5C,MAAM,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;YACzB,MAAM,CAAC,GAAG,CAAC,OAAO,eAAe,oBAAoB,CAAC,CAAC;YACvD,MAAM,CAAC,GAAG,CAAC,OAAO,WAAW,gBAAgB,CAAC,CAAC;QACnD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,MAAM,CAAC,KAAK,CAAC,4BAA4B,KAAK,EAAE,CAAC,CAAC;QACtD,CAAC;QAED,IAAA,wBAAY,EAAC,MAAM,CAAC,CAAC;QAErB,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;IAC7B,CAAC;IA/DqB,gCAAG,MA+DxB,CAAA;IAED,KAAK,UAAU,SAAS,CAAC,GAAW;QAChC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACnC,eAAK,CAAC,GAAG,CAAC,GAAG,EAAE;gBACX,OAAO,EAAE;oBACL,YAAY,EAAE,SAAS;iBAC1B;aACJ,EAAE,CAAC,GAAG,EAAE,EAAE;gBACP,IAAI,IAAI,GAAG,EAAE,CAAC;gBAEd,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE;oBACrB,IAAI,IAAI,KAAK,CAAC;gBAClB,CAAC,CAAC,CAAC;gBAEH,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE;oBACf,IAAI,GAAG,CAAC,UAAU,IAAI,GAAG,CAAC,UAAU,IAAI,GAAG,IAAI,GAAG,CAAC,UAAU,GAAG,GAAG,EAAE,CAAC;wBAClE,IAAI,CAAC;4BACD,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;wBAC9B,CAAC;wBAAC,OAAO,KAAK,EAAE,CAAC;4BACb,MAAM,CAAC,2BAA2B,GAAG,KAAK,KAAK,EAAE,CAAC,CAAC;wBACvD,CAAC;oBACL,CAAC;yBAAM,CAAC;wBACJ,MAAM,CAAC,8BAA8B,GAAG,CAAC,UAAU,QAAQ,GAAG,EAAE,CAAC,CAAC;oBACtE,CAAC;gBACL,CAAC,CAAC,CAAC;YACP,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;gBACrB,MAAM,CAAC,KAAK,CAAC,CAAC;YAClB,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;IACP,CAAC;IAED,KAAK,UAAU,YAAY,CAAC,GAAW,EAAE,QAAgB,EAAE,SAAqB;QAC5E,MAAM,YAAY,GAAG,MAAM,SAAS,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;QAE5D,IAAI,CAAC,YAAY,EAAE,CAAC;YAChB,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;gBACxC,MAAM,IAAI,GAAG,YAAE,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC;gBAE5C,eAAK,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE;oBACnB,IAAI,GAAG,CAAC,UAAU,IAAI,GAAG,CAAC,UAAU,IAAI,GAAG,IAAI,GAAG,CAAC,UAAU,GAAG,GAAG,EAAE,CAAC;wBAClE,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;wBAEf,IAAI,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE;4BACnB,IAAI,CAAC,KAAK,EAAE,CAAC;4BACb,OAAO,EAAE,CAAC;wBACd,CAAC,CAAC,CAAC;oBACP,CAAC;yBAAM,CAAC;wBACJ,IAAI,CAAC,KAAK,EAAE,CAAC;wBACb,YAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,sBAAsB;wBAC/C,MAAM,CAAC,+BAA+B,GAAG,CAAC,UAAU,QAAQ,GAAG,EAAE,CAAC,CAAC;oBACvE,CAAC;gBACL,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;oBACrB,YAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,sBAAsB;oBAC/C,MAAM,CAAC,KAAK,CAAC,CAAC;gBAClB,CAAC,CAAC,CAAC;YACP,CAAC,CAAC,CAAC;QACP,CAAC;QAED,OAAO,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;IACzC,CAAC;AACL,CAAC,EAvIgB,4BAA4B,4CAA5B,4BAA4B,QAuI5C"}
|