@aetherpush/cli 0.1.0

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.
@@ -0,0 +1,360 @@
1
+ "use strict";
2
+ const fs = require("fs");
3
+ const path = require("path");
4
+ const yazl = require("yazl");
5
+ const errors_1 = require("./errors");
6
+ const packageJson = require("../../package.json");
7
+ const SDK_USER_AGENT = `aether-management-sdk/${packageJson.version}`;
8
+ const DEFAULT_SERVER_URL = "http://localhost:3000";
9
+ const GATEWAY_TIMEOUT = 504;
10
+ const INTERNAL_SERVER_ERROR = 500;
11
+ function urlEncode(strings, ...values) {
12
+ let result = "";
13
+ for (let i = 0; i < strings.length; i++) {
14
+ result += strings[i];
15
+ if (i < values.length) {
16
+ result += encodeURIComponent(String(values[i]));
17
+ }
18
+ }
19
+ return result;
20
+ }
21
+ class AccountManager {
22
+ static AppPermission = {
23
+ OWNER: "Owner",
24
+ COLLABORATOR: "Collaborator",
25
+ };
26
+ static AetherError = errors_1.AetherError;
27
+ _accessKey;
28
+ _serverUrl;
29
+ _customHeaders;
30
+ constructor(accessKey, customHeaders, serverUrl) {
31
+ if (!accessKey) {
32
+ throw new Error("An access key must be specified.");
33
+ }
34
+ this._accessKey = accessKey;
35
+ this._customHeaders = customHeaders;
36
+ this._serverUrl = serverUrl || DEFAULT_SERVER_URL;
37
+ }
38
+ get accessKey() {
39
+ return this._accessKey;
40
+ }
41
+ async isAuthenticated(throwIfUnauthorized) {
42
+ try {
43
+ const res = await this.requestRaw("GET", "/v1/authenticated");
44
+ return res.status === 200;
45
+ }
46
+ catch (err) {
47
+ if (err instanceof errors_1.AetherError && err.statusCode === 401 && !throwIfUnauthorized) {
48
+ return false;
49
+ }
50
+ throw err;
51
+ }
52
+ }
53
+ async addAccessKey(friendlyName, ttl) {
54
+ if (!friendlyName) {
55
+ throw new Error("A name must be specified when adding an access key.");
56
+ }
57
+ const body = { friendlyName };
58
+ if (ttl !== undefined)
59
+ body.ttl = ttl;
60
+ const res = await this.request("POST", "/v1/access-keys", body, true);
61
+ return res.body.accessKey;
62
+ }
63
+ async getAccessKey(name) {
64
+ const res = await this.request("GET", urlEncode `/v1/access-keys/${name}`, undefined, true);
65
+ return res.body.accessKey;
66
+ }
67
+ async getAccessKeys() {
68
+ const res = await this.request("GET", "/v1/access-keys", undefined, true);
69
+ return res.body.accessKeys.filter((k) => !k.isSession);
70
+ }
71
+ async getSessions() {
72
+ const res = await this.request("GET", "/v1/access-keys", undefined, true);
73
+ const sessionMap = {};
74
+ const now = Date.now();
75
+ for (const k of res.body.accessKeys) {
76
+ if (k.isSession && k.createdBy && k.createdTime !== undefined && k.expires > now) {
77
+ sessionMap[k.createdBy] = {
78
+ loggedInTime: k.createdTime,
79
+ createdBy: k.createdBy,
80
+ };
81
+ }
82
+ }
83
+ return Object.values(sessionMap);
84
+ }
85
+ async patchAccessKey(oldName, newName, ttl) {
86
+ const body = {};
87
+ if (newName !== undefined)
88
+ body.friendlyName = newName;
89
+ if (ttl !== undefined)
90
+ body.ttl = ttl;
91
+ const res = await this.request("PATCH", urlEncode `/v1/access-keys/${oldName}`, body, true);
92
+ return res.body.accessKey;
93
+ }
94
+ async removeAccessKey(name) {
95
+ await this.request("DELETE", urlEncode `/v1/access-keys/${name}`, undefined, false);
96
+ }
97
+ async removeSessions(createdBy) {
98
+ await this.request("DELETE", urlEncode `/v1/sessions/${createdBy}`, undefined, false);
99
+ }
100
+ async getAccountInfo() {
101
+ const res = await this.request("GET", "/v1/account", undefined, true);
102
+ return res.body.account;
103
+ }
104
+ async getApps() {
105
+ const res = await this.request("GET", "/v1/apps", undefined, true);
106
+ return res.body.apps;
107
+ }
108
+ async getApp(appName) {
109
+ const res = await this.request("GET", urlEncode `/v1/apps/${appName}`, undefined, true);
110
+ return res.body.app;
111
+ }
112
+ async addApp(appName, manuallyProvisionDeployments) {
113
+ const body = { name: appName };
114
+ if (manuallyProvisionDeployments !== undefined) {
115
+ body.manuallyProvisionDeployments = manuallyProvisionDeployments;
116
+ }
117
+ const res = await this.request("POST", "/v1/apps", body, true);
118
+ return res.body.app;
119
+ }
120
+ async removeApp(appName) {
121
+ await this.request("DELETE", urlEncode `/v1/apps/${appName}`, undefined, false);
122
+ }
123
+ async renameApp(oldAppName, newAppName) {
124
+ await this.request("PATCH", urlEncode `/v1/apps/${oldAppName}`, { name: newAppName }, false);
125
+ }
126
+ async transferApp(appName, email) {
127
+ await this.request("POST", urlEncode `/v1/apps/${appName}/transfers`, { email }, false);
128
+ }
129
+ async getCollaborators(appName) {
130
+ const res = await this.request("GET", urlEncode `/v1/apps/${appName}/collaborators`, undefined, true);
131
+ return res.body.collaborators;
132
+ }
133
+ async addCollaborator(appName, email) {
134
+ await this.request("POST", urlEncode `/v1/apps/${appName}/collaborators`, { email }, false);
135
+ }
136
+ async removeCollaborator(appName, email) {
137
+ await this.request("DELETE", urlEncode `/v1/apps/${appName}/collaborators/${email}`, undefined, false);
138
+ }
139
+ async addDeployment(appName, deploymentName, deploymentKey) {
140
+ const body = { name: deploymentName };
141
+ if (deploymentKey)
142
+ body.key = deploymentKey;
143
+ const res = await this.request("POST", urlEncode `/v1/apps/${appName}/deployments`, body, true);
144
+ return res.body.deployment;
145
+ }
146
+ async clearDeploymentHistory(appName, deploymentName) {
147
+ await this.request("DELETE", urlEncode `/v1/apps/${appName}/deployments/${deploymentName}/history`, undefined, false);
148
+ }
149
+ async getDeployments(appName) {
150
+ const res = await this.request("GET", urlEncode `/v1/apps/${appName}/deployments`, undefined, true);
151
+ return res.body.deployments;
152
+ }
153
+ async getDeployment(appName, deploymentName) {
154
+ const res = await this.request("GET", urlEncode `/v1/apps/${appName}/deployments/${deploymentName}`, undefined, true);
155
+ return res.body.deployment;
156
+ }
157
+ async renameDeployment(appName, oldDeploymentName, newDeploymentName) {
158
+ await this.request("PATCH", urlEncode `/v1/apps/${appName}/deployments/${oldDeploymentName}`, { name: newDeploymentName }, false);
159
+ }
160
+ async removeDeployment(appName, deploymentName) {
161
+ await this.request("DELETE", urlEncode `/v1/apps/${appName}/deployments/${deploymentName}`, undefined, false);
162
+ }
163
+ async getDeploymentMetrics(appName, deploymentName) {
164
+ const res = await this.request("GET", urlEncode `/v1/apps/${appName}/deployments/${deploymentName}/metrics`, undefined, true);
165
+ return res.body.metrics;
166
+ }
167
+ async getDeploymentHistory(appName, deploymentName) {
168
+ const res = await this.request("GET", urlEncode `/v1/apps/${appName}/deployments/${deploymentName}/history`, undefined, true);
169
+ return res.body.history;
170
+ }
171
+ async release(appName, deploymentName, filePath, targetBinaryVersion, updateMetadata) {
172
+ const metadata = { ...updateMetadata, appVersion: targetBinaryVersion };
173
+ const packageFile = await this.packageFileFromPath(filePath);
174
+ try {
175
+ const url = this._serverUrl + urlEncode `/v1/apps/${appName}/deployments/${deploymentName}/release`;
176
+ const blob = await fs.openAsBlob(packageFile.path);
177
+ const form = new FormData();
178
+ form.append("package", blob, path.basename(packageFile.path));
179
+ form.append("packageInfo", JSON.stringify(metadata));
180
+ const headers = this.buildHeaders(false);
181
+ let res;
182
+ try {
183
+ res = await fetch(url, { method: "POST", headers, body: form });
184
+ }
185
+ catch (err) {
186
+ throw this.networkError(err);
187
+ }
188
+ const parsed = await this.parseResponse(res, true);
189
+ return parsed.body.package;
190
+ }
191
+ finally {
192
+ if (packageFile.isTemporary) {
193
+ try {
194
+ await fs.promises.unlink(packageFile.path);
195
+ }
196
+ catch {
197
+ /* swallow */
198
+ }
199
+ }
200
+ }
201
+ }
202
+ async patchRelease(appName, deploymentName, label, updateMetadata) {
203
+ const body = { packageInfo: { ...updateMetadata, label } };
204
+ await this.request("PATCH", urlEncode `/v1/apps/${appName}/deployments/${deploymentName}/release`, body, false);
205
+ }
206
+ async promote(appName, sourceDeploymentName, destinationDeploymentName, updateMetadata) {
207
+ const body = {
208
+ destination: destinationDeploymentName,
209
+ };
210
+ if (updateMetadata)
211
+ body.packageInfo = updateMetadata;
212
+ const res = await this.request("POST", urlEncode `/v1/apps/${appName}/deployments/${sourceDeploymentName}/promotions`, body, true);
213
+ return res.body.package;
214
+ }
215
+ async rollback(appName, deploymentName, targetRelease) {
216
+ const body = {};
217
+ if (targetRelease)
218
+ body.targetRelease = targetRelease;
219
+ const res = await this.request("POST", urlEncode `/v1/apps/${appName}/deployments/${deploymentName}/rollbacks`, body, true);
220
+ return res.body.package;
221
+ }
222
+ async getApiKeys(includeRevoked) {
223
+ const qs = includeRevoked ? "?include_revoked=true" : "";
224
+ const res = await this.request("GET", `/v1/api-keys${qs}`, undefined, true);
225
+ return res.body.api_keys;
226
+ }
227
+ async addApiKey(request) {
228
+ const res = await this.request("POST", "/v1/api-keys", request, true);
229
+ return res.body;
230
+ }
231
+ async patchApiKey(id, updates) {
232
+ const res = await this.request("PATCH", urlEncode `/v1/api-keys/${id}`, updates, true);
233
+ return res.body;
234
+ }
235
+ async revokeApiKey(id) {
236
+ const res = await this.request("DELETE", urlEncode `/v1/api-keys/${id}`, undefined, true);
237
+ return res.body;
238
+ }
239
+ buildHeaders(includeContentType) {
240
+ const headers = {
241
+ Accept: "application/json",
242
+ Authorization: `Bearer ${this._accessKey}`,
243
+ "User-Agent": SDK_USER_AGENT,
244
+ };
245
+ if (this._customHeaders) {
246
+ for (const k of Object.keys(this._customHeaders)) {
247
+ headers[k] = this._customHeaders[k];
248
+ }
249
+ }
250
+ if (includeContentType) {
251
+ headers["Content-Type"] = "application/json;charset=UTF-8";
252
+ }
253
+ return headers;
254
+ }
255
+ async requestRaw(method, endpoint) {
256
+ const url = this._serverUrl + endpoint;
257
+ const headers = this.buildHeaders(false);
258
+ try {
259
+ return await fetch(url, { method, headers });
260
+ }
261
+ catch (err) {
262
+ throw this.networkError(err);
263
+ }
264
+ }
265
+ async request(method, endpoint, body, expectResponseBody) {
266
+ const url = this._serverUrl + endpoint;
267
+ const hasBody = body !== undefined && body !== null;
268
+ const headers = this.buildHeaders(hasBody);
269
+ const init = { method, headers };
270
+ if (hasBody) {
271
+ init.body = JSON.stringify(body);
272
+ }
273
+ let res;
274
+ try {
275
+ res = await fetch(url, init);
276
+ }
277
+ catch (err) {
278
+ throw this.networkError(err);
279
+ }
280
+ return this.parseResponse(res, expectResponseBody);
281
+ }
282
+ async parseResponse(res, expectResponseBody) {
283
+ const text = await res.text();
284
+ let parsed;
285
+ if (text) {
286
+ try {
287
+ parsed = JSON.parse(text);
288
+ }
289
+ catch {
290
+ /* not JSON */
291
+ }
292
+ }
293
+ const requestId = res.headers.get("x-request-id") || (parsed && parsed.requestId) || undefined;
294
+ if (res.ok) {
295
+ if (expectResponseBody && parsed === undefined) {
296
+ throw new errors_1.AetherError(`Could not parse response: ${text}`, INTERNAL_SERVER_ERROR, requestId);
297
+ }
298
+ return { headers: this.headersToObject(res.headers), body: parsed };
299
+ }
300
+ const message = (parsed && (parsed.error || parsed.message)) || text || res.statusText || "Request failed";
301
+ throw new errors_1.AetherError(message, res.status, requestId);
302
+ }
303
+ headersToObject(h) {
304
+ const obj = {};
305
+ h.forEach((value, key) => {
306
+ obj[key] = value;
307
+ });
308
+ return obj;
309
+ }
310
+ networkError(err) {
311
+ const message = err instanceof Error
312
+ ? `Unable to connect to the Aether server. Are you offline, or behind a firewall or proxy?\n(${err.message})`
313
+ : "Unable to connect to the Aether server.";
314
+ return new errors_1.AetherError(message, GATEWAY_TIMEOUT);
315
+ }
316
+ async packageFileFromPath(filePath) {
317
+ const stat = await fs.promises.lstat(filePath);
318
+ if (!stat.isDirectory()) {
319
+ return { isTemporary: false, path: filePath };
320
+ }
321
+ const baseDirectoryPath = path.dirname(filePath);
322
+ const fileName = this.generateRandomFilename(15) + ".zip";
323
+ const outPath = path.join(process.cwd(), fileName);
324
+ const files = await this.walkDirectory(filePath);
325
+ return new Promise((resolve, reject) => {
326
+ const zipFile = new yazl.ZipFile();
327
+ const writeStream = fs.createWriteStream(outPath);
328
+ zipFile.outputStream
329
+ .pipe(writeStream)
330
+ .on("error", reject)
331
+ .on("close", () => resolve({ isTemporary: true, path: outPath }));
332
+ for (const file of files) {
333
+ const relativePath = path.relative(baseDirectoryPath, file).split(path.sep).join("/");
334
+ zipFile.addFile(file, relativePath);
335
+ }
336
+ zipFile.end();
337
+ });
338
+ }
339
+ async walkDirectory(dir) {
340
+ const entries = await fs.promises.readdir(dir, { recursive: true, withFileTypes: true });
341
+ const out = [];
342
+ for (const entry of entries) {
343
+ if (entry.isFile()) {
344
+ const parent = entry.parentPath ?? entry.path ?? dir;
345
+ out.push(path.join(parent, entry.name));
346
+ }
347
+ }
348
+ return out;
349
+ }
350
+ generateRandomFilename(length) {
351
+ const validChar = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
352
+ let filename = "";
353
+ for (let i = 0; i < length; i++) {
354
+ filename += validChar.charAt(Math.floor(Math.random() * validChar.length));
355
+ }
356
+ return filename;
357
+ }
358
+ }
359
+ module.exports = AccountManager;
360
+ //# sourceMappingURL=management-sdk.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"management-sdk.js","sourceRoot":"","sources":["../../script/management-sdk.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,264 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isValidVersion = isValidVersion;
4
+ exports.runHermesEmitBinaryCommand = runHermesEmitBinaryCommand;
5
+ exports.getAndroidHermesEnabled = getAndroidHermesEnabled;
6
+ exports.getiOSHermesEnabled = getiOSHermesEnabled;
7
+ exports.directoryExistsSync = directoryExistsSync;
8
+ exports.getReactNativeVersion = getReactNativeVersion;
9
+ const fs = require("fs");
10
+ const chalk = require("chalk");
11
+ const path = require("path");
12
+ const childProcess = require("child_process");
13
+ const semver_1 = require("semver");
14
+ const file_utils_1 = require("./utils/file-utils");
15
+ const g2js = require("gradle-to-js/lib/parser");
16
+ function isValidVersion(version) {
17
+ return !!(0, semver_1.valid)(version) || /^\d+\.\d+$/.test(version);
18
+ }
19
+ async function runHermesEmitBinaryCommand(bundleName, outputFolder, sourcemapOutput, extraHermesFlags, gradleFile) {
20
+ const hermesArgs = [];
21
+ const envNodeArgs = process.env.CODE_PUSH_NODE_ARGS;
22
+ if (typeof envNodeArgs !== "undefined") {
23
+ Array.prototype.push.apply(hermesArgs, envNodeArgs.trim().split(/\s+/));
24
+ }
25
+ Array.prototype.push.apply(hermesArgs, [
26
+ "-emit-binary",
27
+ "-out",
28
+ path.join(outputFolder, bundleName + ".hbc"),
29
+ path.join(outputFolder, bundleName),
30
+ ...extraHermesFlags,
31
+ ]);
32
+ if (sourcemapOutput) {
33
+ hermesArgs.push("-output-source-map");
34
+ }
35
+ console.log(chalk.cyan("Converting JS bundle to byte code via Hermes, running command:\n"));
36
+ const hermesCommand = await getHermesCommand(gradleFile);
37
+ const hermesProcess = childProcess.spawn(hermesCommand, hermesArgs);
38
+ console.log(`${hermesCommand} ${hermesArgs.join(" ")}`);
39
+ return new Promise((resolve, reject) => {
40
+ hermesProcess.stdout.on("data", (data) => {
41
+ console.log(data.toString().trim());
42
+ });
43
+ hermesProcess.stderr.on("data", (data) => {
44
+ console.error(data.toString().trim());
45
+ });
46
+ hermesProcess.on("close", (exitCode, signal) => {
47
+ if (exitCode !== 0) {
48
+ reject(new Error(`"hermes" command failed (exitCode=${exitCode}, signal=${signal}).`));
49
+ return;
50
+ }
51
+ // Copy HBC bundle to overwrite JS bundle
52
+ const source = path.join(outputFolder, bundleName + ".hbc");
53
+ const destination = path.join(outputFolder, bundleName);
54
+ fs.copyFile(source, destination, (err) => {
55
+ if (err) {
56
+ console.error(err);
57
+ reject(new Error(`Copying file ${source} to ${destination} failed. "hermes" previously exited with code ${exitCode}.`));
58
+ return;
59
+ }
60
+ fs.unlink(source, (err) => {
61
+ if (err) {
62
+ console.error(err);
63
+ reject(err);
64
+ return;
65
+ }
66
+ resolve();
67
+ });
68
+ });
69
+ });
70
+ }).then(() => {
71
+ if (!sourcemapOutput) {
72
+ // skip source map compose if source map is not enabled
73
+ return;
74
+ }
75
+ const composeSourceMapsPath = getComposeSourceMapsPath();
76
+ if (!composeSourceMapsPath) {
77
+ throw new Error("react-native compose-source-maps.js scripts is not found");
78
+ }
79
+ const jsCompilerSourceMapFile = path.join(outputFolder, bundleName + ".hbc" + ".map");
80
+ if (!fs.existsSync(jsCompilerSourceMapFile)) {
81
+ throw new Error(`sourcemap file ${jsCompilerSourceMapFile} is not found`);
82
+ }
83
+ return new Promise((resolve, reject) => {
84
+ const composeSourceMapsArgs = [composeSourceMapsPath, sourcemapOutput, jsCompilerSourceMapFile, "-o", sourcemapOutput];
85
+ // https://github.com/facebook/react-native/blob/master/react.gradle#L211
86
+ // https://github.com/facebook/react-native/blob/master/scripts/react-native-xcode.sh#L178
87
+ // packager.sourcemap.map + hbc.sourcemap.map = sourcemap.map
88
+ const composeSourceMapsProcess = childProcess.spawn("node", composeSourceMapsArgs);
89
+ console.log(`${composeSourceMapsPath} ${composeSourceMapsArgs.join(" ")}`);
90
+ composeSourceMapsProcess.stdout.on("data", (data) => {
91
+ console.log(data.toString().trim());
92
+ });
93
+ composeSourceMapsProcess.stderr.on("data", (data) => {
94
+ console.error(data.toString().trim());
95
+ });
96
+ composeSourceMapsProcess.on("close", (exitCode, signal) => {
97
+ if (exitCode !== 0) {
98
+ reject(new Error(`"compose-source-maps" command failed (exitCode=${exitCode}, signal=${signal}).`));
99
+ return;
100
+ }
101
+ // Delete the HBC sourceMap, otherwise it will be included in the Aether bundle as well
102
+ fs.unlink(jsCompilerSourceMapFile, (err) => {
103
+ if (err) {
104
+ console.error(err);
105
+ reject(err);
106
+ return;
107
+ }
108
+ resolve(undefined);
109
+ });
110
+ });
111
+ });
112
+ });
113
+ }
114
+ async function parseBuildGradleFile(gradleFile) {
115
+ let buildGradlePath = path.join("android", "app");
116
+ if (gradleFile) {
117
+ buildGradlePath = gradleFile;
118
+ }
119
+ let isDir = false;
120
+ try {
121
+ isDir = fs.lstatSync(buildGradlePath).isDirectory();
122
+ }
123
+ catch {
124
+ // Path doesn't exist, fall through to the descriptive error below.
125
+ }
126
+ if (isDir) {
127
+ buildGradlePath = path.join(buildGradlePath, "build.gradle");
128
+ }
129
+ if ((0, file_utils_1.fileDoesNotExistOrIsDirectory)(buildGradlePath)) {
130
+ throw new Error(`Unable to find gradle file "${buildGradlePath}".`);
131
+ }
132
+ try {
133
+ return await g2js.parseFile(buildGradlePath);
134
+ }
135
+ catch {
136
+ throw new Error(`Unable to parse the "${buildGradlePath}" file. Please ensure it is a well-formed Gradle file.`);
137
+ }
138
+ }
139
+ async function getHermesCommandFromGradle(gradleFile) {
140
+ const buildGradle = await parseBuildGradleFile(gradleFile);
141
+ const hermesCommandProperty = Array.from(buildGradle["project.ext.react"] || []).find((prop) => prop.trim().startsWith("hermesCommand:"));
142
+ if (hermesCommandProperty) {
143
+ return hermesCommandProperty.replace("hermesCommand:", "").trim().slice(1, -1);
144
+ }
145
+ else {
146
+ return "";
147
+ }
148
+ }
149
+ function getAndroidHermesEnabled(gradleFile) {
150
+ return parseBuildGradleFile(gradleFile).then((buildGradle) => {
151
+ return Array.from(buildGradle["project.ext.react"] || []).some((line) => /^enableHermes\s{0,}:\s{0,}true/.test(line));
152
+ });
153
+ }
154
+ function getiOSHermesEnabled(podFile) {
155
+ let podPath = path.join("ios", "Podfile");
156
+ if (podFile) {
157
+ podPath = podFile;
158
+ }
159
+ if ((0, file_utils_1.fileDoesNotExistOrIsDirectory)(podPath)) {
160
+ throw new Error(`Unable to find Podfile file "${podPath}".`);
161
+ }
162
+ try {
163
+ const podFileContents = fs.readFileSync(podPath).toString();
164
+ return /^[^#\n]*:?hermes_enabled(\s+|\n+)?(=>|:)(\s+|\n+)?true/m.test(podFileContents);
165
+ }
166
+ catch (error) {
167
+ throw error;
168
+ }
169
+ }
170
+ function getHermesOSBin() {
171
+ switch (process.platform) {
172
+ case "win32":
173
+ return "win64-bin";
174
+ case "darwin":
175
+ return "osx-bin";
176
+ case "freebsd":
177
+ case "linux":
178
+ case "sunos":
179
+ default:
180
+ return "linux64-bin";
181
+ }
182
+ }
183
+ function getHermesOSExe() {
184
+ const react63orAbove = (0, semver_1.compare)((0, semver_1.coerce)(getReactNativeVersion()).version, "0.63.0") !== -1;
185
+ const hermesExecutableName = react63orAbove ? "hermesc" : "hermes";
186
+ switch (process.platform) {
187
+ case "win32":
188
+ return hermesExecutableName + ".exe";
189
+ default:
190
+ return hermesExecutableName;
191
+ }
192
+ }
193
+ async function getHermesCommand(gradleFile) {
194
+ const fileExists = (file) => {
195
+ try {
196
+ return fs.statSync(file).isFile();
197
+ }
198
+ catch (e) {
199
+ return false;
200
+ }
201
+ };
202
+ // Hermes is bundled with react-native since 0.69
203
+ const bundledHermesEngine = path.join(getReactNativePackagePath(), "sdks", "hermesc", getHermesOSBin(), getHermesOSExe());
204
+ if (fileExists(bundledHermesEngine)) {
205
+ return bundledHermesEngine;
206
+ }
207
+ const gradleHermesCommand = await getHermesCommandFromGradle(gradleFile);
208
+ if (gradleHermesCommand) {
209
+ return path.join("android", "app", gradleHermesCommand.replace("%OS-BIN%", getHermesOSBin()));
210
+ }
211
+ else {
212
+ // assume if hermes-engine exists it should be used instead of hermesvm
213
+ const hermesEngine = path.join("node_modules", "hermes-engine", getHermesOSBin(), getHermesOSExe());
214
+ if (fileExists(hermesEngine)) {
215
+ return hermesEngine;
216
+ }
217
+ return path.join("node_modules", "hermesvm", getHermesOSBin(), "hermes");
218
+ }
219
+ }
220
+ function getComposeSourceMapsPath() {
221
+ // detect if compose-source-maps.js script exists
222
+ const composeSourceMaps = path.join(getReactNativePackagePath(), "scripts", "compose-source-maps.js");
223
+ if (fs.existsSync(composeSourceMaps)) {
224
+ return composeSourceMaps;
225
+ }
226
+ return null;
227
+ }
228
+ function getReactNativePackagePath() {
229
+ const result = childProcess.spawnSync("node", ["--print", "require.resolve('react-native/package.json')"]);
230
+ const packagePath = path.dirname(result.stdout.toString());
231
+ if (result.status === 0 && directoryExistsSync(packagePath)) {
232
+ return packagePath;
233
+ }
234
+ return path.join("node_modules", "react-native");
235
+ }
236
+ function directoryExistsSync(dirname) {
237
+ try {
238
+ return fs.statSync(dirname).isDirectory();
239
+ }
240
+ catch (err) {
241
+ if (err.code !== "ENOENT") {
242
+ throw err;
243
+ }
244
+ }
245
+ return false;
246
+ }
247
+ function getReactNativeVersion() {
248
+ let packageJsonFilename;
249
+ let projectPackageJson;
250
+ try {
251
+ packageJsonFilename = path.join(process.cwd(), "package.json");
252
+ projectPackageJson = JSON.parse(fs.readFileSync(packageJsonFilename, "utf-8"));
253
+ }
254
+ catch (error) {
255
+ throw new Error(`Unable to find or read "package.json" in the CWD. The "release-react" command must be executed in a React Native project folder.`);
256
+ }
257
+ const projectName = projectPackageJson.name;
258
+ if (!projectName) {
259
+ throw new Error(`The "package.json" file in the CWD does not have the "name" field set.`);
260
+ }
261
+ return ((projectPackageJson.dependencies && projectPackageJson.dependencies["react-native"]) ||
262
+ (projectPackageJson.devDependencies && projectPackageJson.devDependencies["react-native"]));
263
+ }
264
+ //# sourceMappingURL=react-native-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"react-native-utils.js","sourceRoot":"","sources":["../../script/react-native-utils.ts"],"names":[],"mappings":";;AASA,wCAEC;AAED,gEAkHC;AAsCD,0DAIC;AAED,kDAeC;AAyED,kDASC;AAED,sDAqBC;AAnSD,yBAAyB;AACzB,+BAA+B;AAC/B,6BAA6B;AAC7B,8CAA8C;AAC9C,mCAAgD;AAChD,mDAAmE;AAEnE,MAAM,IAAI,GAAG,OAAO,CAAC,yBAAyB,CAAC,CAAC;AAEhD,SAAgB,cAAc,CAAC,OAAe;IAC5C,OAAO,CAAC,CAAC,IAAA,cAAK,EAAC,OAAO,CAAC,IAAI,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACxD,CAAC;AAEM,KAAK,UAAU,0BAA0B,CAC9C,UAAkB,EAClB,YAAoB,EACpB,eAAuB,EACvB,gBAA0B,EAC1B,UAAkB;IAElB,MAAM,UAAU,GAAa,EAAE,CAAC;IAChC,MAAM,WAAW,GAAW,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC;IAE5D,IAAI,OAAO,WAAW,KAAK,WAAW,EAAE,CAAC;QACvC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,WAAW,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;IAC1E,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE;QACrC,cAAc;QACd,MAAM;QACN,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,UAAU,GAAG,MAAM,CAAC;QAC5C,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,UAAU,CAAC;QACnC,GAAG,gBAAgB;KACpB,CAAC,CAAC;IAEH,IAAI,eAAe,EAAE,CAAC;QACpB,UAAU,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;IACxC,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,kEAAkE,CAAC,CAAC,CAAC;IAC5F,MAAM,aAAa,GAAG,MAAM,gBAAgB,CAAC,UAAU,CAAC,CAAC;IACzD,MAAM,aAAa,GAAG,YAAY,CAAC,KAAK,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC;IACpE,OAAO,CAAC,GAAG,CAAC,GAAG,aAAa,IAAI,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAExD,OAAO,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QAC3C,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAY,EAAE,EAAE;YAC/C,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;QACtC,CAAC,CAAC,CAAC;QAEH,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAY,EAAE,EAAE;YAC/C,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;QACxC,CAAC,CAAC,CAAC;QAEH,aAAa,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,QAAgB,EAAE,MAAc,EAAE,EAAE;YAC7D,IAAI,QAAQ,KAAK,CAAC,EAAE,CAAC;gBACnB,MAAM,CAAC,IAAI,KAAK,CAAC,qCAAqC,QAAQ,YAAY,MAAM,IAAI,CAAC,CAAC,CAAC;gBACvF,OAAO;YACT,CAAC;YACD,yCAAyC;YACzC,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,UAAU,GAAG,MAAM,CAAC,CAAC;YAC5D,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;YACxD,EAAE,CAAC,QAAQ,CAAC,MAAM,EAAE,WAAW,EAAE,CAAC,GAAG,EAAE,EAAE;gBACvC,IAAI,GAAG,EAAE,CAAC;oBACR,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;oBACnB,MAAM,CAAC,IAAI,KAAK,CAAC,gBAAgB,MAAM,OAAO,WAAW,iDAAiD,QAAQ,GAAG,CAAC,CAAC,CAAC;oBACxH,OAAO;gBACT,CAAC;gBACD,EAAE,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE;oBACxB,IAAI,GAAG,EAAE,CAAC;wBACR,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;wBACnB,MAAM,CAAC,GAAG,CAAC,CAAC;wBACZ,OAAO;oBACT,CAAC;oBACD,OAAO,EAAE,CAAC;gBACZ,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE;QACX,IAAI,CAAC,eAAe,EAAE,CAAC;YACrB,uDAAuD;YACvD,OAAO;QACT,CAAC;QAED,MAAM,qBAAqB,GAAG,wBAAwB,EAAE,CAAC;QACzD,IAAI,CAAC,qBAAqB,EAAE,CAAC;YAC3B,MAAM,IAAI,KAAK,CAAC,0DAA0D,CAAC,CAAC;QAC9E,CAAC;QAED,MAAM,uBAAuB,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,UAAU,GAAG,MAAM,GAAG,MAAM,CAAC,CAAC;QACtF,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,uBAAuB,CAAC,EAAE,CAAC;YAC5C,MAAM,IAAI,KAAK,CAAC,kBAAkB,uBAAuB,eAAe,CAAC,CAAC;QAC5E,CAAC;QAED,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,MAAM,qBAAqB,GAAG,CAAC,qBAAqB,EAAE,eAAe,EAAE,uBAAuB,EAAE,IAAI,EAAE,eAAe,CAAC,CAAC;YAEvH,yEAAyE;YACzE,0FAA0F;YAC1F,6DAA6D;YAC7D,MAAM,wBAAwB,GAAG,YAAY,CAAC,KAAK,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAC;YACnF,OAAO,CAAC,GAAG,CAAC,GAAG,qBAAqB,IAAI,qBAAqB,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAE3E,wBAAwB,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAY,EAAE,EAAE;gBAC1D,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;YACtC,CAAC,CAAC,CAAC;YAEH,wBAAwB,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAY,EAAE,EAAE;gBAC1D,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;YACxC,CAAC,CAAC,CAAC;YAEH,wBAAwB,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,QAAgB,EAAE,MAAc,EAAE,EAAE;gBACxE,IAAI,QAAQ,KAAK,CAAC,EAAE,CAAC;oBACnB,MAAM,CAAC,IAAI,KAAK,CAAC,kDAAkD,QAAQ,YAAY,MAAM,IAAI,CAAC,CAAC,CAAC;oBACpG,OAAO;gBACT,CAAC;gBACD,uFAAuF;gBACvF,EAAE,CAAC,MAAM,CAAC,uBAAuB,EAAE,CAAC,GAAG,EAAE,EAAE;oBACzC,IAAI,GAAG,EAAE,CAAC;wBACR,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;wBACnB,MAAM,CAAC,GAAG,CAAC,CAAC;wBACZ,OAAO;oBACT,CAAC;oBACD,OAAO,CAAC,SAAS,CAAC,CAAC;gBACrB,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED,KAAK,UAAU,oBAAoB,CAAC,UAAkB;IACpD,IAAI,eAAe,GAAW,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;IAC1D,IAAI,UAAU,EAAE,CAAC;QACf,eAAe,GAAG,UAAU,CAAC;IAC/B,CAAC;IACD,IAAI,KAAK,GAAG,KAAK,CAAC;IAClB,IAAI,CAAC;QACH,KAAK,GAAG,EAAE,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC,WAAW,EAAE,CAAC;IACtD,CAAC;IAAC,MAAM,CAAC;QACP,mEAAmE;IACrE,CAAC;IACD,IAAI,KAAK,EAAE,CAAC;QACV,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,cAAc,CAAC,CAAC;IAC/D,CAAC;IACD,IAAI,IAAA,0CAA6B,EAAC,eAAe,CAAC,EAAE,CAAC;QACnD,MAAM,IAAI,KAAK,CAAC,+BAA+B,eAAe,IAAI,CAAC,CAAC;IACtE,CAAC;IACD,IAAI,CAAC;QACH,OAAO,MAAM,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC;IAC/C,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,KAAK,CAAC,wBAAwB,eAAe,wDAAwD,CAAC,CAAC;IACnH,CAAC;AACH,CAAC;AAED,KAAK,UAAU,0BAA0B,CAAC,UAAkB;IAC1D,MAAM,WAAW,GAAQ,MAAM,oBAAoB,CAAC,UAAU,CAAC,CAAC;IAChE,MAAM,qBAAqB,GAAQ,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,mBAAmB,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,IAAY,EAAE,EAAE,CAC1G,IAAI,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,gBAAgB,CAAC,CACzC,CAAC;IACF,IAAI,qBAAqB,EAAE,CAAC;QAC1B,OAAO,qBAAqB,CAAC,OAAO,CAAC,gBAAgB,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACjF,CAAC;SAAM,CAAC;QACN,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,SAAgB,uBAAuB,CAAC,UAAkB;IACxD,OAAO,oBAAoB,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC,WAAgB,EAAE,EAAE;QAChE,OAAO,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,mBAAmB,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,IAAY,EAAE,EAAE,CAAC,gCAAgC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAChI,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAgB,mBAAmB,CAAC,OAAe;IACjD,IAAI,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;IAC1C,IAAI,OAAO,EAAE,CAAC;QACZ,OAAO,GAAG,OAAO,CAAC;IACpB,CAAC;IACD,IAAI,IAAA,0CAA6B,EAAC,OAAO,CAAC,EAAE,CAAC;QAC3C,MAAM,IAAI,KAAK,CAAC,gCAAgC,OAAO,IAAI,CAAC,CAAC;IAC/D,CAAC;IAED,IAAI,CAAC;QACH,MAAM,eAAe,GAAG,EAAE,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,CAAC;QAC5D,OAAO,yDAAyD,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IACzF,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAS,cAAc;IACrB,QAAQ,OAAO,CAAC,QAAQ,EAAE,CAAC;QACzB,KAAK,OAAO;YACV,OAAO,WAAW,CAAC;QACrB,KAAK,QAAQ;YACX,OAAO,SAAS,CAAC;QACnB,KAAK,SAAS,CAAC;QACf,KAAK,OAAO,CAAC;QACb,KAAK,OAAO,CAAC;QACb;YACE,OAAO,aAAa,CAAC;IACzB,CAAC;AACH,CAAC;AAED,SAAS,cAAc;IACrB,MAAM,cAAc,GAAG,IAAA,gBAAO,EAAC,IAAA,eAAM,EAAC,qBAAqB,EAAE,CAAC,CAAC,OAAO,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;IACzF,MAAM,oBAAoB,GAAG,cAAc,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC;IACnE,QAAQ,OAAO,CAAC,QAAQ,EAAE,CAAC;QACzB,KAAK,OAAO;YACV,OAAO,oBAAoB,GAAG,MAAM,CAAC;QACvC;YACE,OAAO,oBAAoB,CAAC;IAChC,CAAC;AACH,CAAC;AAED,KAAK,UAAU,gBAAgB,CAAC,UAAkB;IAChD,MAAM,UAAU,GAAG,CAAC,IAAY,EAAW,EAAE;QAC3C,IAAI,CAAC;YACH,OAAO,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC;QACpC,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC,CAAC;IACF,iDAAiD;IACjD,MAAM,mBAAmB,GAAG,IAAI,CAAC,IAAI,CAAC,yBAAyB,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,cAAc,EAAE,EAAE,cAAc,EAAE,CAAC,CAAC;IAC1H,IAAI,UAAU,CAAC,mBAAmB,CAAC,EAAE,CAAC;QACpC,OAAO,mBAAmB,CAAC;IAC7B,CAAC;IAED,MAAM,mBAAmB,GAAG,MAAM,0BAA0B,CAAC,UAAU,CAAC,CAAC;IACzE,IAAI,mBAAmB,EAAE,CAAC;QACxB,OAAO,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,EAAE,mBAAmB,CAAC,OAAO,CAAC,UAAU,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC;IAChG,CAAC;SAAM,CAAC;QACN,uEAAuE;QACvE,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,eAAe,EAAE,cAAc,EAAE,EAAE,cAAc,EAAE,CAAC,CAAC;QACpG,IAAI,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;YAC7B,OAAO,YAAY,CAAC;QACtB,CAAC;QACD,OAAO,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,UAAU,EAAE,cAAc,EAAE,EAAE,QAAQ,CAAC,CAAC;IAC3E,CAAC;AACH,CAAC;AAED,SAAS,wBAAwB;IAC/B,iDAAiD;IACjD,MAAM,iBAAiB,GAAG,IAAI,CAAC,IAAI,CAAC,yBAAyB,EAAE,EAAE,SAAS,EAAE,wBAAwB,CAAC,CAAC;IACtG,IAAI,EAAE,CAAC,UAAU,CAAC,iBAAiB,CAAC,EAAE,CAAC;QACrC,OAAO,iBAAiB,CAAC;IAC3B,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,yBAAyB;IAChC,MAAM,MAAM,GAAG,YAAY,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,SAAS,EAAE,8CAA8C,CAAC,CAAC,CAAC;IAC3G,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;IAC3D,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,mBAAmB,CAAC,WAAW,CAAC,EAAE,CAAC;QAC5D,OAAO,WAAW,CAAC;IACrB,CAAC;IAED,OAAO,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,cAAc,CAAC,CAAC;AACnD,CAAC;AAED,SAAgB,mBAAmB,CAAC,OAAe;IACjD,IAAI,CAAC;QACH,OAAO,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC;IAC5C,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC1B,MAAM,GAAG,CAAC;QACZ,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAgB,qBAAqB;IACnC,IAAI,mBAAmB,CAAC;IACxB,IAAI,kBAAkB,CAAC;IACvB,IAAI,CAAC;QACH,mBAAmB,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,cAAc,CAAC,CAAC;QAC/D,kBAAkB,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,mBAAmB,EAAE,OAAO,CAAC,CAAC,CAAC;IACjF,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CACb,kIAAkI,CACnI,CAAC;IACJ,CAAC;IAED,MAAM,WAAW,GAAW,kBAAkB,CAAC,IAAI,CAAC;IACpD,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CAAC,wEAAwE,CAAC,CAAC;IAC5F,CAAC;IAED,OAAO,CACL,CAAC,kBAAkB,CAAC,YAAY,IAAI,kBAAkB,CAAC,YAAY,CAAC,cAAc,CAAC,CAAC;QACpF,CAAC,kBAAkB,CAAC,eAAe,IAAI,kBAAkB,CAAC,eAAe,CAAC,cAAc,CAAC,CAAC,CAC3F,CAAC;AACJ,CAAC"}