runway-cli 1.2.0 → 1.3.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.
- package/dist/commands/deploy.js +63 -3
- package/dist/commands/login.d.ts +1 -0
- package/dist/commands/login.js +73 -0
- package/dist/commands/logs.d.ts +6 -0
- package/dist/commands/logs.js +112 -0
- package/dist/commands/update.d.ts +1 -0
- package/dist/commands/update.js +244 -0
- package/dist/index.js +21 -1
- package/dist/services/reactPatcher.d.ts +22 -0
- package/dist/services/reactPatcher.js +111 -0
- package/dist/services/uploadService.d.ts +1 -0
- package/dist/services/uploadService.js +1 -1
- package/package.json +1 -1
package/dist/commands/deploy.js
CHANGED
|
@@ -1,4 +1,37 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
2
35
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
36
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
37
|
};
|
|
@@ -124,6 +157,12 @@ async function deployCommand(options) {
|
|
|
124
157
|
logger_1.logger.error('CLI not configured. Run "runway init" first.');
|
|
125
158
|
return;
|
|
126
159
|
}
|
|
160
|
+
// Check token validity before proceeding
|
|
161
|
+
if ((0, config_1.isTokenExpired)()) {
|
|
162
|
+
logger_1.logger.error('Your authentication token has expired.');
|
|
163
|
+
logger_1.logger.info('Run "runway login" to re-authenticate.');
|
|
164
|
+
return;
|
|
165
|
+
}
|
|
127
166
|
const config = (0, config_1.getConfig)();
|
|
128
167
|
logger_1.logger.dim(`Server: ${config.serverUrl}`);
|
|
129
168
|
logger_1.logger.blank();
|
|
@@ -139,8 +178,13 @@ async function deployCommand(options) {
|
|
|
139
178
|
logger_1.logger.error(error instanceof Error ? error.message : 'Unknown error');
|
|
140
179
|
return;
|
|
141
180
|
}
|
|
142
|
-
// Determine project name
|
|
143
|
-
|
|
181
|
+
// Determine project name — sanitize from package.json
|
|
182
|
+
const suggestedName = (detectedProject.name || path_1.default.basename(process.cwd()))
|
|
183
|
+
.replace(/^@[^/]+\//, '') // Remove npm scope (@scope/name → name)
|
|
184
|
+
.replace(/[^a-zA-Z0-9-_]/g, '-') // Replace invalid chars with hyphens
|
|
185
|
+
.replace(/^-+|-+$/g, '') // Trim leading/trailing hyphens
|
|
186
|
+
.toLowerCase();
|
|
187
|
+
let projectName = options.name || suggestedName;
|
|
144
188
|
// Interactive mode if name not provided
|
|
145
189
|
if (!options.name) {
|
|
146
190
|
const answers = await inquirer_1.default.prompt([
|
|
@@ -249,6 +293,12 @@ async function deployCommand(options) {
|
|
|
249
293
|
let buildOutputDir = detectedProject.buildOutputDir;
|
|
250
294
|
if (buildMode === 'local') {
|
|
251
295
|
logger_1.logger.step(1, 4, 'Building project...');
|
|
296
|
+
// Patch React Router basename before build (if applicable)
|
|
297
|
+
let didPatch = false;
|
|
298
|
+
if (projectType === 'react') {
|
|
299
|
+
const { ReactPatcher } = await Promise.resolve().then(() => __importStar(require('../services/reactPatcher')));
|
|
300
|
+
didPatch = await ReactPatcher.patch(process.cwd());
|
|
301
|
+
}
|
|
252
302
|
const buildResult = await buildService_1.buildService.build({
|
|
253
303
|
projectPath: process.cwd(),
|
|
254
304
|
projectType,
|
|
@@ -256,6 +306,11 @@ async function deployCommand(options) {
|
|
|
256
306
|
packageManager: detectedProject.packageManager,
|
|
257
307
|
envFile: envFilePath,
|
|
258
308
|
});
|
|
309
|
+
// Revert patch after build (keep user's source clean)
|
|
310
|
+
if (didPatch) {
|
|
311
|
+
const { ReactPatcher } = await Promise.resolve().then(() => __importStar(require('../services/reactPatcher')));
|
|
312
|
+
await ReactPatcher.revert(process.cwd());
|
|
313
|
+
}
|
|
259
314
|
if (!buildResult.success) {
|
|
260
315
|
logger_1.logger.error(`Build failed: ${buildResult.error}`);
|
|
261
316
|
return;
|
|
@@ -382,6 +437,11 @@ async function deployCommand(options) {
|
|
|
382
437
|
logger_1.logger.blank();
|
|
383
438
|
logger_1.logger.info(`Your app is available at: ${config.serverUrl}/app/${safeName}`);
|
|
384
439
|
}
|
|
440
|
+
// Show health warning if service didn't respond on its allocated port
|
|
441
|
+
if (finalStatus.healthWarning) {
|
|
442
|
+
logger_1.logger.blank();
|
|
443
|
+
logger_1.logger.warn(`⚠ Health check: ${finalStatus.healthWarning}`);
|
|
444
|
+
}
|
|
385
445
|
}
|
|
386
446
|
else {
|
|
387
447
|
logger_1.logger.error(`Deployment failed: ${finalStatus.error || 'Unknown error'}`);
|
|
@@ -404,4 +464,4 @@ async function deployCommand(options) {
|
|
|
404
464
|
}
|
|
405
465
|
logger_1.logger.blank();
|
|
406
466
|
}
|
|
407
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVwbG95LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbW1hbmRzL2RlcGxveS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQXlJQSxzQ0FnVUM7QUF6Y0Qsd0RBQWdDO0FBQ2hDLDhDQUFzQjtBQUN0Qiw0Q0FBb0I7QUFDcEIsZ0RBQXdCO0FBQ3hCLGtEQUEwQjtBQUUxQixpRUFBNEQ7QUFDNUQsMkRBQXdEO0FBQ3hELCtEQUE0RDtBQUM1RCw2REFBZ0U7QUFDaEUsNENBQTBEO0FBQzFELDRDQUF5QztBQVl6Qzs7R0FFRztBQUNILFNBQVMsWUFBWSxDQUFDLFFBQWdCO0lBQ3BDLE1BQU0sT0FBTyxHQUFHLFlBQUUsQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ25ELE1BQU0sSUFBSSxHQUEyQixFQUFFLENBQUM7SUFFeEMsS0FBSyxNQUFNLElBQUksSUFBSSxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDdkMsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQzVCLGdDQUFnQztRQUNoQyxJQUFJLENBQUMsT0FBTyxJQUFJLE9BQU8sQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDO1lBQUUsU0FBUztRQUVsRCxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3JDLElBQUksT0FBTyxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ2hCLE1BQU0sR0FBRyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO1lBQzdDLElBQUksS0FBSyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO1lBQzlDLHVDQUF1QztZQUN2QyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUs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LE1BQU0sQ0FBQyxTQUFTLFFBQVEsUUFBUSxFQUFFLENBQUMsQ0FBQztnQkFDL0UsQ0FBQztZQUNILENBQUM7aUJBQU0sQ0FBQztnQkFDTixlQUFNLENBQUMsS0FBSyxDQUFDLHNCQUFzQixXQUFXLENBQUMsS0FBSyxJQUFJLGVBQWUsRUFBRSxDQUFDLENBQUM7Z0JBQzNFLElBQUksV0FBVyxDQUFDLElBQUksRUFBRSxDQUFDO29CQUNyQixlQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7b0JBQ2YsZUFBTSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztvQkFDcEIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ2hDLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixlQUFNLENBQUMsSUFBSSxDQUFDLG1DQUFtQyxDQUFDLENBQUM7WUFDakQsZUFBTSxDQUFDLEdBQUcsQ0FBQyx3Q0FBd0MsQ0FBQyxDQUFDO1FBQ3ZELENBQUM7SUFDSCxDQUFDO1NBQU0sQ0FBQztRQUNOLGVBQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNmLGVBQU0sQ0FBQyxPQUFPLENBQUMsb0JBQW9CLENBQUMsQ0FBQztRQUNyQyxlQUFNLENBQUMsR0FBRyxDQUFDLDZEQUE2RCxDQUFDLENBQUM7SUFDNUUsQ0FBQztJQUVELGVBQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUNqQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGlucXVpcmVyIGZyb20gJ2lucXVpcmVyJztcbmltcG9ydCBvcmEgZnJvbSAnb3JhJztcbmltcG9ydCBmcyBmcm9tICdmcyc7XG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCBheGlvcyBmcm9tICdheGlvcyc7XG5pbXBvcnQgeyBQcm9qZWN0VHlwZSwgQnVpbGRNb2RlIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgZGV0ZWN0UHJvamVjdCB9IGZyb20gJy4uL3NlcnZpY2VzL3Byb2plY3REZXRlY3Rvcic7XG5pbXBvcnQgeyBidWlsZFNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9idWlsZFNlcnZpY2UnO1xuaW1wb3J0IHsgcGFja2FnZVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9wYWNrYWdlU2VydmljZSc7XG5pbXBvcnQgeyBjcmVhdGVVcGxvYWRTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvdXBsb2FkU2VydmljZSc7XG5pbXBvcnQgeyBpc0NvbmZpZ3VyZWQsIGdldENvbmZpZyB9IGZyb20gJy4uL3V0aWxzL2NvbmZpZyc7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tICcuLi91dGlscy9sb2dnZXInO1xuXG5pbnRlcmZhY2UgRGVwbG95T3B0aW9ucyB7XG4gIG5hbWU/OiBzdHJpbmc7XG4gIHR5cGU/OiBQcm9qZWN0VHlwZTtcbiAgdmVyc2lvbj86IHN0cmluZztcbiAgYnVpbGRMb2NhbD86IGJvb2xlYW47XG4gIGJ1aWxkU2VydmVyPzogYm9vbGVhbjtcbiAgZW52RmlsZT86IHN0cmluZztcbiAgc2tpcEVudlByb21wdD86IGJvb2xlYW47XG59XG5cbi8qKlxuICogUGFyc2UgYSAuZW52IGZpbGUgaW50byBhIFJlY29yZFxuICovXG5mdW5jdGlvbiBwYXJzZUVudkZpbGUoZmlsZVBhdGg6IHN0cmluZyk6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4ge1xuICBjb25zdCBjb250ZW50ID0gZnMucmVhZEZpbGVTeW5jKGZpbGVQYXRoLCAndXRmLTgnKTtcbiAgY29uc3QgdmFyczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuXG4gIGZvciAoY29uc3QgbGluZSBvZiBjb250ZW50LnNwbGl0KCdcXG4nKSkge1xuICAgIGNvbnN0IHRyaW1tZWQgPSBsaW5lLnRyaW0oKTtcbiAgICAvLyBTa2lwIGVtcHR5IGxpbmVzIGFuZCBjb21tZW50c1xuICAgIGlmICghdHJpbW1lZCB8fCB0cmltbWVkLnN0YXJ0c1dpdGgoJyMnKSkgY29udGludWU7XG5cbiAgICBjb25zdCBlcUluZGV4ID0gdHJpbW1lZC5pbmRleE9mKCc9Jyk7XG4gICAgaWYgKGVxSW5kZXggPiAwKSB7XG4gICAgICBjb25zdCBrZXkgPSB0cmltbWVkLnNsaWNlKDAsIGVxSW5kZXgpLnRyaW0oKTtcbiAgICAgIGxldCB2YWx1ZSA9IHRyaW1tZWQuc2xpY2UoZXFJbmRleCArIDEpLnRyaW0oKTtcbiAgICAgIC8vIFJlbW92ZSBzdXJyb3VuZGluZyBxdW90ZXMgaWYgcHJlc2VudFxuICAgICAgaWYgKCh2YWx1ZS5zdGFydHNXaXRoKCdcIicpICYmIHZhbHVlLmVuZHNXaXRoKCdcIicpKSB8fFxuICAgICAgICAgICh2YWx1ZS5zdGFydHNXaXRoKFwiJ1wiKSAmJiB2YWx1ZS5lbmRzV2l0aChcIidcIikpKSB7XG4gICAgICAgIHZhbHVlID0gdmFsdWUuc2xpY2UoMSwgLTEpO1xuICAgICAgfVxuICAgICAgdmFyc1trZXldID0gdmFsdWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHZhcnM7XG59XG5cbi8qKlxuICogUHJvbXB0IHVzZXIgZm9yIG1hbnVhbCBFTlYgdmFyaWFibGUgZW50cnlcbiAqL1xuYXN5bmMgZnVuY3Rpb24gcHJvbXB0TWFudWFsRW52VmFycygpOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIHN0cmluZz4+IHtcbiAgY29uc3QgdmFyczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuXG4gIGxvZ2dlci5kaW0oJ0VudGVyIGVudmlyb25tZW50IHZhcmlhYmxlcyAoZW1wdHkgbmFtZSB0byBmaW5pc2gpOicpO1xuXG4gIHdoaWxlICh0cnVlKSB7XG4gICAgY29uc3QgeyBrZXkgfSA9IGF3YWl0IGlucXVpcmVyLnByb21wdChbXG4gICAgICB7XG4gICAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICAgIG5hbWU6ICdrZXknLFxuICAgICAgICBtZXNzYWdlOiAnVmFyaWFibGUgbmFtZTonLFxuICAgICAgfSxcbiAgICBdKTtcblxuICAgIGlmICgha2V5IHx8ICFrZXkudHJpbSgpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICBjb25zdCB7IHZhbHVlIH0gPSBhd2FpdCBpbnF1aXJlci5wcm9tcHQoW1xuICAgICAge1xuICAgICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgICBuYW1lOiAndmFsdWUnLFxuICAgICAgICBtZXNzYWdlOiBgVmFsdWUgZm9yICR7a2V5fTpgLFxuICAgICAgfSxcbiAgICBdKTtcblxuICAgIHZhcnNba2V5LnRvVXBwZXJDYXNlKCkucmVwbGFjZSgvW15BLVowLTlfXS9nLCAnJyldID0gdmFsdWU7XG4gIH1cblxuICByZXR1cm4gdmFycztcbn1cblxuLyoqXG4gKiBQcm9tcHQgdXNlciBmb3IgZW52aXJvbm1lbnQgdmFyaWFibGUgb3B0aW9ucyB3aGVuIG5vIC5lbnYgZmlsZSBleGlzdHNcbiAqL1xuYXN5bmMgZnVuY3Rpb24gcHJvbXB0RW52T3B0aW9ucygpOiBQcm9taXNlPHN0cmluZyB8IHVuZGVmaW5lZD4ge1xuICBjb25zdCB7IGVudkNob2ljZSB9ID0gYXdhaXQgaW5xdWlyZXIucHJvbXB0KFtcbiAgICB7XG4gICAgICB0eXBlOiAnbGlzdCcsXG4gICAgICBuYW1lOiAnZW52Q2hvaWNlJyxcbiAgICAgIG1lc3NhZ2U6ICdIb3cgd291bGQgeW91IGxpa2UgdG8gcHJvdmlkZSBlbnZpcm9ubWVudCB2YXJpYWJsZXM/JyxcbiAgICAgIGNob2ljZXM6IFtcbiAgICAgICAgeyBuYW1lOiAnU3BlY2lmeSBwYXRoIHRvIC5lbnYgZmlsZScsIHZhbHVlOiAncGF0aCcgfSxcbiAgICAgICAgeyBuYW1lOiAnRW50ZXIgdmFyaWFibGVzIG1hbnVhbGx5IChjcmVhdGVzIC5lbnYpJywgdmFsdWU6ICdtYW51YWwnIH0sXG4gICAgICAgIHsgbmFtZTogJ0NvbnRpbnVlIHdpdGhvdXQgZW52aXJvbm1lbnQgdmFyaWFibGVzJywgdmFsdWU6ICdza2lwJyB9LFxuICAgICAgXSxcbiAgICB9LFxuICBdKTtcblxuICBpZiAoZW52Q2hvaWNlID09PSAncGF0aCcpIHtcbiAgICBjb25zdCB7IGVudlBhdGggfSA9IGF3YWl0IGlucXVpcmVyLnByb21wdChbXG4gICAgICB7XG4gICAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICAgIG5hbWU6ICdlbnZQYXRoJyxcbiAgICAgICAgbWVzc2FnZTogJ1BhdGggdG8gZW52IGZpbGU6JyxcbiAgICAgICAgdmFsaWRhdGU6IChpbnB1dDogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgaWYgKCFpbnB1dC50cmltKCkpIHJldHVybiAnUGxlYXNlIGVudGVyIGEgcGF0aCc7XG4gICAgICAgICAgaWYgKCFmcy5leGlzdHNTeW5jKGlucHV0KSkgcmV0dXJuICdGaWxlIG5vdCBmb3VuZCc7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIF0pO1xuICAgIGxvZ2dlci5zdWNjZXNzKGBVc2luZyBlbnYgZmlsZTogJHtlbnZQYXRofWApO1xuICAgIHJldHVybiBlbnZQYXRoO1xuICB9XG5cbiAgaWYgKGVudkNob2ljZSA9PT0gJ21hbnVhbCcpIHtcbiAgICBjb25zdCB2YXJzID0gYXdhaXQgcHJvbXB0TWFudWFsRW52VmFycygpO1xuICAgIGlmIChPYmplY3Qua2V5cyh2YXJzKS5sZW5ndGggPiAwKSB7XG4gICAgICAvLyBXcml0ZSB0byAuZW52IGZpbGUgaW4gcHJvamVjdFxuICAgICAgY29uc3QgZW52Q29udGVudCA9IE9iamVjdC5lbnRyaWVzKHZhcnMpXG4gICAgICAgIC5tYXAoKFtrLCB2XSkgPT4gYCR7a309JHt2fWApXG4gICAgICAgIC5qb2luKCdcXG4nKTtcbiAgICAgIGNvbnN0IGVudlBhdGggPSBwYXRoLmpvaW4ocHJvY2Vzcy5jd2QoKSwgJy5lbnYnKTtcbiAgICAgIGZzLndyaXRlRmlsZVN5bmMoZW52UGF0aCwgZW52Q29udGVudCk7XG4gICAgICBsb2dnZXIuc3VjY2VzcyhgQ3JlYXRlZCAuZW52IHdpdGggJHtPYmplY3Qua2V5cyh2YXJzKS5sZW5ndGh9IHZhcmlhYmxlc2ApO1xuICAgICAgcmV0dXJuIGVudlBhdGg7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGRlcGxveUNvbW1hbmQob3B0aW9uczogRGVwbG95T3B0aW9ucyk6IFByb21pc2U8dm9pZD4ge1xuICBsb2dnZXIuaGVhZGVyKCdSdW53YXkgRGVwbG95Jyk7XG5cbiAgLy8gQ2hlY2sgY29uZmlndXJhdGlvblxuICBpZiAoIWlzQ29uZmlndXJlZCgpKSB7XG4gICAgbG9nZ2VyLmVycm9yKCdDTEkgbm90IGNvbmZpZ3VyZWQuIFJ1biBcInJ1bndheSBpbml0XCIgZmlyc3QuJyk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgY29uZmlnID0gZ2V0Q29uZmlnKCk7XG4gIGxvZ2dlci5kaW0oYFNlcnZlcjogJHtjb25maWcuc2VydmVyVXJsfWApO1xuICBsb2dnZXIuYmxhbmsoKTtcblxuICAvLyBEZXRlY3QgcHJvamVjdFxuICBjb25zdCBzcGlubmVyID0gb3JhKCdEZXRlY3RpbmcgcHJvamVjdC4uLicpLnN0YXJ0KCk7XG4gIGxldCBkZXRlY3RlZFByb2plY3Q7XG5cbiAgdHJ5IHtcbiAgICBkZXRlY3RlZFByb2plY3QgPSBhd2FpdCBkZXRlY3RQcm9qZWN0KCk7XG4gICAgc3Bpbm5lci5zdWNjZWVkKGBEZXRlY3RlZDogJHtkZXRlY3RlZFByb2plY3QudHlwZX0gcHJvamVjdCAoJHtkZXRlY3RlZFByb2plY3QucGFja2FnZU1hbmFnZXJ9KWApO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHNwaW5uZXIuZmFpbCgnRmFpbGVkIHRvIGRldGVjdCBwcm9qZWN0Jyk7XG4gICAgbG9nZ2VyLmVycm9yKGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogJ1Vua25vd24gZXJyb3InKTtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBEZXRlcm1pbmUgcHJvamVjdCBuYW1lXG4gIGxldCBwcm9qZWN0TmFtZSA9IG9wdGlvbnMubmFtZSB8fCBkZXRlY3RlZFByb2plY3QubmFtZTtcblxuICAvLyBJbnRlcmFjdGl2ZSBtb2RlIGlmIG5hbWUgbm90IHByb3ZpZGVkXG4gIGlmICghb3B0aW9ucy5uYW1lKSB7XG4gICAgY29uc3QgYW5zd2VycyA9IGF3YWl0IGlucXVpcmVyLnByb21wdChbXG4gICAgICB7XG4gICAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICAgIG5hbWU6ICduYW1lJyxcbiAgICAgICAgbWVzc2FnZTogJ1Byb2plY3QgbmFtZTonLFxuICAgICAgICBkZWZhdWx0OiBwcm9qZWN0TmFtZSxcbiAgICAgICAgdmFsaWRhdGU6IChpbnB1dDogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgaWYgKGlucHV0Lmxlbmd0aCA8IDIpIHJldHVybiAnTmFtZSBtdXN0IGJlIGF0IGxlYXN0IDIgY2hhcmFjdGVycyc7XG4gICAgICAgICAgaWYgKCEvXlthLXpBLVowLTktX10rJC8udGVzdChpbnB1dCkpIHJldHVybiAnTmFtZSBjYW4gb25seSBjb250YWluIGxldHRlcnMsIG51bWJlcnMsIGh5cGhlbnMsIGFuZCB1bmRlcnNjb3Jlcyc7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIF0pO1xuICAgIHByb2plY3ROYW1lID0gYW5zd2Vycy5uYW1lO1xuICB9XG5cbiAgLy8gQXNrIGlmIGVudmlyb25tZW50IHZhcmlhYmxlcyBhcmUgcmVxdWlyZWRcbiAgY29uc3QgeyBuZWVkc0VudiB9ID0gYXdhaXQgaW5xdWlyZXIucHJvbXB0KFtcbiAgICB7XG4gICAgICB0eXBlOiAnY29uZmlybScsXG4gICAgICBuYW1lOiAnbmVlZHNFbnYnLFxuICAgICAgbWVzc2FnZTogJ0RvZXMgdGhpcyBwcm9qZWN0IHJlcXVpcmUgZW52aXJvbm1lbnQgdmFyaWFibGVzPycsXG4gICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICB9LFxuICBdKTtcblxuICBsZXQgZW52RmlsZVBhdGg6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgbGV0IGVudlZhcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcbiAgbGV0IGVudkluamVjdGVkID0gZmFsc2U7XG5cbiAgaWYgKG5lZWRzRW52KSB7XG4gICAgY29uc3QgZGVmYXVsdEVudlBhdGggPSBwYXRoLmpvaW4ocHJvY2Vzcy5jd2QoKSwgJy5lbnYnKTtcbiAgICBjb25zdCBoYXNFbnZGaWxlID0gZnMuZXhpc3RzU3luYyhkZWZhdWx0RW52UGF0aCk7XG5cbiAgICBpZiAoaGFzRW52RmlsZSkge1xuICAgICAgLy8gLmVudiBmb3VuZCAtIGNvbmZpcm0gd2l0aCB1c2VyXG4gICAgICBjb25zdCB7IHVzZUV4aXN0aW5nIH0gPSBhd2FpdCBpbnF1aXJlci5wcm9tcHQoW1xuICAgICAgICB7XG4gICAgICAgICAgdHlwZTogJ2NvbmZpcm0nLFxuICAgICAgICAgIG5hbWU6ICd1c2VFeGlzdGluZycsXG4gICAgICAgICAgbWVzc2FnZTogJ0ZvdW5kIC5lbnYgZmlsZSBpbiBwcm9qZWN0LiBVc2UgaXQ/JyxcbiAgICAgICAgICBkZWZhdWx0OiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgXSk7XG5cbiAgICAgIGlmICh1c2VFeGlzdGluZykge1xuICAgICAgICBlbnZGaWxlUGF0aCA9IGRlZmF1bHRFbnZQYXRoO1xuICAgICAgICBlbnZWYXJzID0gcGFyc2VFbnZGaWxlKGRlZmF1bHRFbnZQYXRoKTtcbiAgICAgICAgZW52SW5qZWN0ZWQgPSBPYmplY3Qua2V5cyhlbnZWYXJzKS5sZW5ndGggPiAwO1xuICAgICAgICBsb2dnZXIuc3VjY2VzcyhgTG9hZGVkICR7T2JqZWN0LmtleXMoZW52VmFycykubGVuZ3RofSB2YXJpYWJsZXMgZnJvbSAuZW52YCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBVc2VyIGRlY2xpbmVkIGV4aXN0aW5nIC5lbnYgLSBzaG93IG90aGVyIG9wdGlvbnNcbiAgICAgICAgZW52RmlsZVBhdGggPSBhd2FpdCBwcm9tcHRFbnZPcHRpb25zKCk7XG4gICAgICAgIGlmIChlbnZGaWxlUGF0aCkge1xuICAgICAgICAgIGVudlZhcnMgPSBwYXJzZUVudkZpbGUoZW52RmlsZVBhdGgpO1xuICAgICAgICAgIGVudkluamVjdGVkID0gT2JqZWN0LmtleXMoZW52VmFycykubGVuZ3RoID4gMDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBObyAuZW52IGZvdW5kIC0gc2hvdyBvcHRpb25zXG4gICAgICBsb2dnZXIud2FybignTm8gLmVudiBmaWxlIGZvdW5kIGluIHByb2plY3QgZGlyZWN0b3J5LicpO1xuICAgICAgZW52RmlsZVBhdGggPSBhd2FpdCBwcm9tcHRFbnZPcHRpb25zKCk7XG4gICAgICBpZiAoZW52RmlsZVBhdGgpIHtcbiAgICAgICAgZW52VmFycyA9IHBhcnNlRW52RmlsZShlbnZGaWxlUGF0aCk7XG4gICAgICAgIGVudkluamVjdGVkID0gT2JqZWN0LmtleXMoZW52VmFycykubGVuZ3RoID4gMDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBEZXRlcm1pbmUgcHJvamVjdCB0eXBlXG4gIGNvbnN0IHByb2plY3RUeXBlID0gb3B0aW9ucy50eXBlIHx8IGRldGVjdGVkUHJvamVjdC50eXBlO1xuXG4gIC8vIERldGVybWluZSBidWlsZCBtb2RlXG4gIGxldCBidWlsZE1vZGU6IEJ1aWxkTW9kZTtcbiAgaWYgKG9wdGlvbnMuYnVpbGRTZXJ2ZXIpIHtcbiAgICBidWlsZE1vZGUgPSAnc2VydmVyJztcbiAgfSBlbHNlIGlmIChvcHRpb25zLmJ1aWxkTG9jYWwpIHtcbiAgICBidWlsZE1vZGUgPSAnbG9jYWwnO1xuICB9IGVsc2Uge1xuICAgIGJ1aWxkTW9kZSA9IGNvbmZpZy5kZWZhdWx0QnVpbGRNb2RlIHx8ICdsb2NhbCc7XG4gIH1cblxuICBsb2dnZXIuYmxhbmsoKTtcbiAgbG9nZ2VyLmluZm8oYFByb2plY3Q6ICR7cHJvamVjdE5hbWV9YCk7XG4gIGxvZ2dlci5pbmZvKGBUeXBlOiAke3Byb2plY3RUeXBlfWApO1xuICBsb2dnZXIuaW5mbyhgQnVpbGQgbW9kZTogJHtidWlsZE1vZGV9YCk7XG4gIGlmIChvcHRpb25zLnZlcnNpb24pIHtcbiAgICBsb2dnZXIuaW5mbyhgVmVyc2lvbjogJHtvcHRpb25zLnZlcnNpb259YCk7XG4gIH1cbiAgbG9nZ2VyLmJsYW5rKCk7XG5cbiAgLy8gQ29uZmlybSBkZXBsb3ltZW50XG4gIGNvbnN0IHsgY29uZmlybSB9ID0gYXdhaXQgaW5xdWlyZXIucHJvbXB0KFtcbiAgICB7XG4gICAgICB0eXBlOiAnY29uZmlybScsXG4gICAgICBuYW1lOiAnY29uZmlybScsXG4gICAgICBtZXNzYWdlOiAnUHJvY2VlZCB3aXRoIGRlcGxveW1lbnQ/JyxcbiAgICAgIGRlZmF1bHQ6IHRydWUsXG4gICAgfSxcbiAgXSk7XG5cbiAgaWYgKCFjb25maXJtKSB7XG4gICAgbG9nZ2VyLndhcm4oJ0RlcGxveW1lbnQgY2FuY2VsbGVkLicpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGxvZ2dlci5ibGFuaygpO1xuXG4gIC8vIFN0ZXAgMTogQnVpbGQgKGZvciBsb2NhbC1idWlsZCBtb2RlKVxuICBsZXQgYnVpbGRPdXRwdXREaXIgPSBkZXRlY3RlZFByb2plY3QuYnVpbGRPdXRwdXREaXI7XG5cbiAgaWYgKGJ1aWxkTW9kZSA9PT0gJ2xvY2FsJykge1xuICAgIGxvZ2dlci5zdGVwKDEsIDQsICdCdWlsZGluZyBwcm9qZWN0Li4uJyk7XG5cbiAgICBjb25zdCBidWlsZFJlc3VsdCA9IGF3YWl0IGJ1aWxkU2VydmljZS5idWlsZCh7XG4gICAgICBwcm9qZWN0UGF0aDogcHJvY2Vzcy5jd2QoKSxcbiAgICAgIHByb2plY3RUeXBlLFxuICAgICAgcHJvamVjdE5hbWUsXG4gICAgICBwYWNrYWdlTWFuYWdlcjogZGV0ZWN0ZWRQcm9qZWN0LnBhY2thZ2VNYW5hZ2VyLFxuICAgICAgZW52RmlsZTogZW52RmlsZVBhdGgsXG4gICAgfSk7XG5cbiAgICBpZiAoIWJ1aWxkUmVzdWx0LnN1Y2Nlc3MpIHtcbiAgICAgIGxvZ2dlci5lcnJvcihgQnVpbGQgZmFpbGVkOiAke2J1aWxkUmVzdWx0LmVycm9yfWApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGJ1aWxkT3V0cHV0RGlyID0gYnVpbGRSZXN1bHQub3V0cHV0RGlyO1xuICAgIGxvZ2dlci5zdWNjZXNzKGBCdWlsZCBjb21wbGV0ZWQgaW4gJHsoYnVpbGRSZXN1bHQuZHVyYXRpb24gLyAxMDAwKS50b0ZpeGVkKDEpfXNgKTtcbiAgICBsb2dnZXIuYmxhbmsoKTtcbiAgfVxuXG4gIC8vIFN0ZXAgMjogUGFja2FnZVxuICBjb25zdCBwYWNrYWdlU3RlcCA9IGJ1aWxkTW9kZSA9PT0gJ2xvY2FsJyA/IDIgOiAxO1xuICBjb25zdCB0b3RhbFN0ZXBzID0gYnVpbGRNb2RlID09PSAnbG9jYWwnID8gNCA6IDM7XG5cbiAgbG9nZ2VyLnN0ZXAocGFja2FnZVN0ZXAsIHRvdGFsU3RlcHMsICdDcmVhdGluZyBkZXBsb3ltZW50IHBhY2thZ2UuLi4nKTtcblxuICBsZXQgcGFja2FnZVJlc3VsdDtcbiAgdHJ5IHtcbiAgICBwYWNrYWdlUmVzdWx0ID0gYXdhaXQgcGFja2FnZVNlcnZpY2UucGFja2FnZSh7XG4gICAgICBwcm9qZWN0UGF0aDogcHJvY2Vzcy5jd2QoKSxcbiAgICAgIHByb2plY3RUeXBlLFxuICAgICAgYnVpbGRPdXRwdXREaXIsXG4gICAgICBpbmNsdWRlU291cmNlOiBidWlsZE1vZGUgPT09ICdzZXJ2ZXInLFxuICAgICAgZW52RmlsZTogcHJvamVjdFR5cGUgPT09ICdub2RlJyA/IGVudkZpbGVQYXRoIDogdW5kZWZpbmVkLFxuICAgIH0pO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGxvZ2dlci5lcnJvcihgUGFja2FnaW5nIGZhaWxlZDogJHtlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6ICdVbmtub3duIGVycm9yJ31gKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBsb2dnZXIuYmxhbmsoKTtcblxuICAvLyBTdGVwIDM6IEFuYWx5emUgJiBVcGxvYWRcbiAgbG9nZ2VyLnN0ZXAocGFja2FnZVN0ZXAgKyAxLCB0b3RhbFN0ZXBzLCAnQW5hbHl6aW5nIGFuZCB1cGxvYWRpbmcgdG8gc2VydmVyLi4uJyk7XG5cbiAgbGV0IHVwbG9hZFNlcnZpY2U7XG4gIHRyeSB7XG4gICAgdXBsb2FkU2VydmljZSA9IGNyZWF0ZVVwbG9hZFNlcnZpY2UoKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBsb2dnZXIuZXJyb3IoZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiAnVW5rbm93biBlcnJvcicpO1xuICAgIHBhY2thZ2VTZXJ2aWNlLmNsZWFudXAocGFja2FnZVJlc3VsdC56aXBQYXRoKTtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBBbmFseXplIHBhY2thZ2UgZmlyc3QgKGZvciBzZXJ2ZXItYnVpbGQgbW9kZSB0byBnZXQgd2FybmluZ3MpXG4gIGxldCBjb25maXJtU2VydmVyQnVpbGQgPSBmYWxzZTtcbiAgaWYgKGJ1aWxkTW9kZSA9PT0gJ3NlcnZlcicpIHtcbiAgICBjb25zdCBhbmFseXplUmVzdWx0ID0gYXdhaXQgdXBsb2FkU2VydmljZS5hbmFseXplUGFja2FnZShwYWNrYWdlUmVzdWx0LnppcFBhdGgsIHByb2plY3RUeXBlKTtcblxuICAgIGlmIChhbmFseXplUmVzdWx0LnN1Y2Nlc3MgJiYgYW5hbHl6ZVJlc3VsdC5hbmFseXNpcykge1xuICAgICAgY29uc3QgYW5hbHlzaXMgPSBhbmFseXplUmVzdWx0LmFuYWx5c2lzO1xuXG4gICAgICAvLyBEaXNwbGF5IHdhcm5pbmdzXG4gICAgICBpZiAoYW5hbHlzaXMud2FybmluZ3MgJiYgYW5hbHlzaXMud2FybmluZ3MubGVuZ3RoID4gMCkge1xuICAgICAgICBsb2dnZXIuYmxhbmsoKTtcbiAgICAgICAgbG9nZ2VyLndhcm4oJ1NlcnZlciBBbmFseXNpczonKTtcbiAgICAgICAgZm9yIChjb25zdCB3YXJuaW5nIG9mIGFuYWx5c2lzLndhcm5pbmdzKSB7XG4gICAgICAgICAgY29uc3QgcHJlZml4ID0gd2FybmluZy5sZXZlbCA9PT0gJ2NyaXRpY2FsJyA/ICfinYwnIDogd2FybmluZy5sZXZlbCA9PT0gJ3dhcm5pbmcnID8gJ+KaoO+4jycgOiAn4oS577iPJztcbiAgICAgICAgICBsb2dnZXIuZGltKGAgICR7cHJlZml4fSAke3dhcm5pbmcubWVzc2FnZX1gKTtcbiAgICAgICAgfVxuICAgICAgICBsb2dnZXIuYmxhbmsoKTtcbiAgICAgIH1cblxuICAgICAgLy8gSGFuZGxlIGNvbmZpcm1hdGlvbiBmb3Igc2VydmVyLXNpZGUgYnVpbGRcbiAgICAgIGlmIChhbmFseXNpcy5yZXF1aXJlc0NvbmZpcm1hdGlvbikge1xuICAgICAgICBjb25zdCB7IGNvbmZpcm1CdWlsZCB9ID0gYXdhaXQgaW5xdWlyZXIucHJvbXB0KFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0eXBlOiAnY29uZmlybScsXG4gICAgICAgICAgICBuYW1lOiAnY29uZmlybUJ1aWxkJyxcbiAgICAgICAgICAgIG1lc3NhZ2U6IGAke2FuYWx5c2lzLmNvbmZpcm1hdGlvblJlYXNvbiB8fCAnU2VydmVyLXNpZGUgYnVpbGQgcmVxdWlyZWQnfS4gVGhpcyBtYXkgY29uc3VtZSBzaWduaWZpY2FudCByZXNvdXJjZXMuIENvbnRpbnVlP2AsXG4gICAgICAgICAgICBkZWZhdWx0OiB0cnVlLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0pO1xuXG4gICAgICAgIGlmICghY29uZmlybUJ1aWxkKSB7XG4gICAgICAgICAgbG9nZ2VyLndhcm4oJ0RlcGxveW1lbnQgY2FuY2VsbGVkIGJ5IHVzZXIuJyk7XG4gICAgICAgICAgcGFja2FnZVNlcnZpY2UuY2xlYW51cChwYWNrYWdlUmVzdWx0LnppcFBhdGgpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25maXJtU2VydmVyQnVpbGQgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHVwbG9hZFJlc3VsdCA9IGF3YWl0IHVwbG9hZFNlcnZpY2UudXBsb2FkKHtcbiAgICB6aXBQYXRoOiBwYWNrYWdlUmVzdWx0LnppcFBhdGgsXG4gICAgcHJvamVjdE5hbWUsXG4gICAgcHJvamVjdFR5cGUsXG4gICAgdmVyc2lvbjogb3B0aW9ucy52ZXJzaW9uLFxuICAgIGJ1aWxkTW9kZSxcbiAgICBjb25maXJtU2VydmVyQnVpbGQsXG4gICAgLy8gRU5WIG11dGFiaWxpdHkgdHJhY2tpbmdcbiAgICBkZXBsb3ltZW50U291cmNlOiAnY2xpJyxcbiAgICBlbnZJbmplY3RlZCxcbiAgfSk7XG5cbiAgLy8gQ2xlYW51cCB6aXAgZmlsZVxuICBwYWNrYWdlU2VydmljZS5jbGVhbnVwKHBhY2thZ2VSZXN1bHQuemlwUGF0aCk7XG5cbiAgaWYgKCF1cGxvYWRSZXN1bHQuc3VjY2Vzcykge1xuICAgIGxvZ2dlci5lcnJvcihgVXBsb2FkIGZhaWxlZDogJHt1cGxvYWRSZXN1bHQuZXJyb3J9YCk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgbG9nZ2VyLnN1Y2Nlc3MoJ1VwbG9hZCBjb21wbGV0ZScpO1xuICBsb2dnZXIuYmxhbmsoKTtcblxuICAvLyBTdGVwIDQ6IFdhaXQgZm9yIGRlcGxveW1lbnQgKGlmIGRlcGxveW1lbnQgSUQgYXZhaWxhYmxlKVxuICBpZiAodXBsb2FkUmVzdWx0LmRlcGxveW1lbnRJZCkge1xuICAgIGxvZ2dlci5zdGVwKHBhY2thZ2VTdGVwICsgMiwgdG90YWxTdGVwcywgJ1dhaXRpbmcgZm9yIGRlcGxveW1lbnQgdG8gY29tcGxldGUuLi4nKTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBmaW5hbFN0YXR1cyA9IGF3YWl0IHVwbG9hZFNlcnZpY2UucG9sbERlcGxveW1lbnRTdGF0dXMoXG4gICAgICAgIHVwbG9hZFJlc3VsdC5kZXBsb3ltZW50SWQsXG4gICAgICAgIChzdGF0dXMpID0+IHtcbiAgICAgICAgICBpZiAoc3RhdHVzLnByb2dyZXNzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKGBcXHIgIFByb2dyZXNzOiAke3N0YXR1cy5wcm9ncmVzc30lYCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICApO1xuXG4gICAgICBwcm9jZXNzLnN0ZG91dC53cml0ZSgnXFxuJyk7XG5cbiAgICAgIGlmIChmaW5hbFN0YXR1cy5zdGF0dXMgPT09ICdzdWNjZXNzJykge1xuICAgICAgICBsb2dnZXIuYmxhbmsoKTtcbiAgICAgICAgbG9nZ2VyLnN1Y2Nlc3MoJ0RlcGxveW1lbnQgc3VjY2Vzc2Z1bCEnKTtcblxuICAgICAgICBjb25zdCBzYWZlTmFtZSA9IHByb2plY3ROYW1lLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvW15hLXowLTldL2csICctJyk7XG5cbiAgICAgICAgLy8gRmV0Y2ggZG9tYWluIGNvbmZpZyB0byBzaG93IHByb3BlciBVUkxcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBkb21haW5SZXNwb25zZSA9IGF3YWl0IGF4aW9zLmdldChgJHtjb25maWcuc2VydmVyVXJsfS9hcGkvZG9tYWluYCwge1xuICAgICAgICAgICAgaGVhZGVyczogY29uZmlnLnRva2VuID8geyBBdXRob3JpemF0aW9uOiBgQmVhcmVyICR7Y29uZmlnLnRva2VufWAgfSA6IHt9LFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGNvbnN0IGRvbWFpbkNvbmZpZyA9IGRvbWFpblJlc3BvbnNlLmRhdGE7XG5cbiAgICAgICAgICBpZiAoZG9tYWluQ29uZmlnLmRvbWFpbj8uYWN0aXZlICYmIGRvbWFpbkNvbmZpZy5zZWN1cml0eU1vZGUgPT09ICdkb21haW4taHR0cHMnKSB7XG4gICAgICAgICAgICBsb2dnZXIuYmxhbmsoKTtcbiAgICAgICAgICAgIGxvZ2dlci5pbmZvKGBZb3VyIGFwcCBpcyBhdmFpbGFibGUgYXQ6IGh0dHBzOi8vJHtkb21haW5Db25maWcuZG9tYWluLmRvbWFpbn0vYXBwLyR7c2FmZU5hbWV9YCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxvZ2dlci5ibGFuaygpO1xuICAgICAgICAgICAgbG9nZ2VyLmluZm8oYFlvdXIgYXBwIGlzIGF2YWlsYWJsZSBhdDogJHtjb25maWcuc2VydmVyVXJsfS9hcHAvJHtzYWZlTmFtZX1gKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgIC8vIEZhbGxiYWNrIHRvIHNlcnZlciBVUkwgaWYgZG9tYWluIGZldGNoIGZhaWxzXG4gICAgICAgICAgbG9nZ2VyLmJsYW5rKCk7XG4gICAgICAgICAgbG9nZ2VyLmluZm8oYFlvdXIgYXBwIGlzIGF2YWlsYWJsZSBhdDogJHtjb25maWcuc2VydmVyVXJsfS9hcHAvJHtzYWZlTmFtZX1gKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbG9nZ2VyLmVycm9yKGBEZXBsb3ltZW50IGZhaWxlZDogJHtmaW5hbFN0YXR1cy5lcnJvciB8fCAnVW5rbm93biBlcnJvcid9YCk7XG4gICAgICAgIGlmIChmaW5hbFN0YXR1cy5sb2dzKSB7XG4gICAgICAgICAgbG9nZ2VyLmJsYW5rKCk7XG4gICAgICAgICAgbG9nZ2VyLmRpbSgnTG9nczonKTtcbiAgICAgICAgICBjb25zb2xlLmxvZyhmaW5hbFN0YXR1cy5sb2dzKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dnZXIud2FybignQ291bGQgbm90IHRyYWNrIGRlcGxveW1lbnQgc3RhdHVzJyk7XG4gICAgICBsb2dnZXIuZGltKCdDaGVjayB0aGUgd2ViIFVJIGZvciBkZXBsb3ltZW50IHN0YXR1cycpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBsb2dnZXIuYmxhbmsoKTtcbiAgICBsb2dnZXIuc3VjY2VzcygnVXBsb2FkIHN1Y2Nlc3NmdWwhJyk7XG4gICAgbG9nZ2VyLmRpbSgnRGVwbG95bWVudCBpcyBiZWluZyBwcm9jZXNzZWQuIENoZWNrIHRoZSB3ZWIgVUkgZm9yIHN0YXR1cy4nKTtcbiAgfVxuXG4gIGxvZ2dlci5ibGFuaygpO1xufVxuIl19
|
|
467
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVwbG95LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbW1hbmRzL2RlcGxveS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQXlJQSxzQ0ErVkM7QUF4ZUQsd0RBQWdDO0FBQ2hDLDhDQUFzQjtBQUN0Qiw0Q0FBb0I7QUFDcEIsZ0RBQXdCO0FBQ3hCLGtEQUEwQjtBQUUxQixpRUFBNEQ7QUFDNUQsMkRBQXdEO0FBQ3hELCtEQUE0RDtBQUM1RCw2REFBZ0U7QUFDaEUsNENBQTBFO0FBQzFFLDRDQUF5QztBQVl6Qzs7R0FFRztBQUNILFNBQVMsWUFBWSxDQUFDLFFBQWdCO0lBQ3BDLE1BQU0sT0FBTyxHQUFHLFlBQUUsQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ25ELE1BQU0sSUFBSSxHQUEyQixFQUFFLENBQUM7SUFFeEMsS0FBSyxNQUFNLElBQUksSUFBSSxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDdkMsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQzVCLGdDQUFnQztRQUNoQyxJQUFJLENBQUMsT0FBTyxJQUFJLE9BQU8sQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDO1lBQUUsU0FBUztRQUVsRCxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3JDLElBQUksT0FBTyxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ2hCLE1BQU0sR0FBRyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO1lBQzdDLElBQUksS0FBSyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO1lBQzlDLHVDQUF1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QVcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztvQkFDOUIsZUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDO29CQUNmLGVBQU0sQ0FBQyxJQUFJLENBQUMsb0JBQW9CLFdBQVcsQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFDO2dCQUMvRCxDQUFDO1lBQ0gsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLGVBQU0sQ0FBQyxLQUFLLENBQUMsc0JBQXNCLFdBQVcsQ0FBQyxLQUFLLElBQUksZUFBZSxFQUFFLENBQUMsQ0FBQztnQkFDM0UsSUFBSSxXQUFXLENBQUMsSUFBSSxFQUFFLENBQUM7b0JBQ3JCLGVBQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQztvQkFDZixlQUFNLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO29CQUNwQixPQUFPLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDaEMsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLGVBQU0sQ0FBQyxJQUFJLENBQUMsbUNBQW1DLENBQUMsQ0FBQztZQUNqRCxlQUFNLENBQUMsR0FBRyxDQUFDLHdDQUF3QyxDQUFDLENBQUM7UUFDdkQsQ0FBQztJQUNILENBQUM7U0FBTSxDQUFDO1FBQ04sZUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ2YsZUFBTSxDQUFDLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1FBQ3JDLGVBQU0sQ0FBQyxHQUFHLENBQUMsNkRBQTZELENBQUMsQ0FBQztJQUM1RSxDQUFDO0lBRUQsZUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ2pCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgaW5xdWlyZXIgZnJvbSAnaW5xdWlyZXInO1xuaW1wb3J0IG9yYSBmcm9tICdvcmEnO1xuaW1wb3J0IGZzIGZyb20gJ2ZzJztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IGF4aW9zIGZyb20gJ2F4aW9zJztcbmltcG9ydCB7IFByb2plY3RUeXBlLCBCdWlsZE1vZGUgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyBkZXRlY3RQcm9qZWN0IH0gZnJvbSAnLi4vc2VydmljZXMvcHJvamVjdERldGVjdG9yJztcbmltcG9ydCB7IGJ1aWxkU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2J1aWxkU2VydmljZSc7XG5pbXBvcnQgeyBwYWNrYWdlU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3BhY2thZ2VTZXJ2aWNlJztcbmltcG9ydCB7IGNyZWF0ZVVwbG9hZFNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy91cGxvYWRTZXJ2aWNlJztcbmltcG9ydCB7IGlzQ29uZmlndXJlZCwgZ2V0Q29uZmlnLCBpc1Rva2VuRXhwaXJlZCB9IGZyb20gJy4uL3V0aWxzL2NvbmZpZyc7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tICcuLi91dGlscy9sb2dnZXInO1xuXG5pbnRlcmZhY2UgRGVwbG95T3B0aW9ucyB7XG4gIG5hbWU/OiBzdHJpbmc7XG4gIHR5cGU/OiBQcm9qZWN0VHlwZTtcbiAgdmVyc2lvbj86IHN0cmluZztcbiAgYnVpbGRMb2NhbD86IGJvb2xlYW47XG4gIGJ1aWxkU2VydmVyPzogYm9vbGVhbjtcbiAgZW52RmlsZT86IHN0cmluZztcbiAgc2tpcEVudlByb21wdD86IGJvb2xlYW47XG59XG5cbi8qKlxuICogUGFyc2UgYSAuZW52IGZpbGUgaW50byBhIFJlY29yZFxuICovXG5mdW5jdGlvbiBwYXJzZUVudkZpbGUoZmlsZVBhdGg6IHN0cmluZyk6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4ge1xuICBjb25zdCBjb250ZW50ID0gZnMucmVhZEZpbGVTeW5jKGZpbGVQYXRoLCAndXRmLTgnKTtcbiAgY29uc3QgdmFyczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuXG4gIGZvciAoY29uc3QgbGluZSBvZiBjb250ZW50LnNwbGl0KCdcXG4nKSkge1xuICAgIGNvbnN0IHRyaW1tZWQgPSBsaW5lLnRyaW0oKTtcbiAgICAvLyBTa2lwIGVtcHR5IGxpbmVzIGFuZCBjb21tZW50c1xuICAgIGlmICghdHJpbW1lZCB8fCB0cmltbWVkLnN0YXJ0c1dpdGgoJyMnKSkgY29udGludWU7XG5cbiAgICBjb25zdCBlcUluZGV4ID0gdHJpbW1lZC5pbmRleE9mKCc9Jyk7XG4gICAgaWYgKGVxSW5kZXggPiAwKSB7XG4gICAgICBjb25zdCBrZXkgPSB0cmltbWVkLnNsaWNlKDAsIGVxSW5kZXgpLnRyaW0oKTtcbiAgICAgIGxldCB2YWx1ZSA9IHRyaW1tZWQuc2xpY2UoZXFJbmRleCArIDEpLnRyaW0oKTtcbiAgICAgIC8vIFJlbW92ZSBzdXJyb3VuZGluZyBxdW90ZXMgaWYgcHJlc2VudFxuICAgICAgaWYgKCh2YWx1ZS5zdGFydHNXaXRoKCdcIicpICYmIHZhbHVlLmVuZHNXaXRoKCdcIicpKSB8fFxuICAgICAgICAgICh2YWx1ZS5zdGFydHNXaXRoKFwiJ1wiKSAmJiB2YWx1ZS5lbmRzV2l0aChcIidcIikpKSB7XG4gICAgICAgIHZhbHVlID0gdmFsdWUuc2xpY2UoMSwgLTEpO1xuICAgICAgfVxuICAgICAgdmFyc1trZXldID0gdmFsdWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHZhcnM7XG59XG5cbi8qKlxuICogUHJvbXB0IHVzZXIgZm9yIG1hbnVhbCBFTlYgdmFyaWFibGUgZW50cnlcbiAqL1xuYXN5bmMgZnVuY3Rpb24gcHJvbXB0TWFudWFsRW52VmFycygpOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIHN0cmluZz4+IHtcbiAgY29uc3QgdmFyczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuXG4gIGxvZ2dlci5kaW0oJ0VudGVyIGVudmlyb25tZW50IHZhcmlhYmxlcyAoZW1wdHkgbmFtZSB0byBmaW5pc2gpOicpO1xuXG4gIHdoaWxlICh0cnVlKSB7XG4gICAgY29uc3QgeyBrZXkgfSA9IGF3YWl0IGlucXVpcmVyLnByb21wdChbXG4gICAgICB7XG4gICAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICAgIG5hbWU6ICdrZXknLFxuICAgICAgICBtZXNzYWdlOiAnVmFyaWFibGUgbmFtZTonLFxuICAgICAgfSxcbiAgICBdKTtcblxuICAgIGlmICgha2V5IHx8ICFrZXkudHJpbSgpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICBjb25zdCB7IHZhbHVlIH0gPSBhd2FpdCBpbnF1aXJlci5wcm9tcHQoW1xuICAgICAge1xuICAgICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgICBuYW1lOiAndmFsdWUnLFxuICAgICAgICBtZXNzYWdlOiBgVmFsdWUgZm9yICR7a2V5fTpgLFxuICAgICAgfSxcbiAgICBdKTtcblxuICAgIHZhcnNba2V5LnRvVXBwZXJDYXNlKCkucmVwbGFjZSgvW15BLVowLTlfXS9nLCAnJyldID0gdmFsdWU7XG4gIH1cblxuICByZXR1cm4gdmFycztcbn1cblxuLyoqXG4gKiBQcm9tcHQgdXNlciBmb3IgZW52aXJvbm1lbnQgdmFyaWFibGUgb3B0aW9ucyB3aGVuIG5vIC5lbnYgZmlsZSBleGlzdHNcbiAqL1xuYXN5bmMgZnVuY3Rpb24gcHJvbXB0RW52T3B0aW9ucygpOiBQcm9taXNlPHN0cmluZyB8IHVuZGVmaW5lZD4ge1xuICBjb25zdCB7IGVudkNob2ljZSB9ID0gYXdhaXQgaW5xdWlyZXIucHJvbXB0KFtcbiAgICB7XG4gICAgICB0eXBlOiAnbGlzdCcsXG4gICAgICBuYW1lOiAnZW52Q2hvaWNlJyxcbiAgICAgIG1lc3NhZ2U6ICdIb3cgd291bGQgeW91IGxpa2UgdG8gcHJvdmlkZSBlbnZpcm9ubWVudCB2YXJpYWJsZXM/JyxcbiAgICAgIGNob2ljZXM6IFtcbiAgICAgICAgeyBuYW1lOiAnU3BlY2lmeSBwYXRoIHRvIC5lbnYgZmlsZScsIHZhbHVlOiAncGF0aCcgfSxcbiAgICAgICAgeyBuYW1lOiAnRW50ZXIgdmFyaWFibGVzIG1hbnVhbGx5IChjcmVhdGVzIC5lbnYpJywgdmFsdWU6ICdtYW51YWwnIH0sXG4gICAgICAgIHsgbmFtZTogJ0NvbnRpbnVlIHdpdGhvdXQgZW52aXJvbm1lbnQgdmFyaWFibGVzJywgdmFsdWU6ICdza2lwJyB9LFxuICAgICAgXSxcbiAgICB9LFxuICBdKTtcblxuICBpZiAoZW52Q2hvaWNlID09PSAncGF0aCcpIHtcbiAgICBjb25zdCB7IGVudlBhdGggfSA9IGF3YWl0IGlucXVpcmVyLnByb21wdChbXG4gICAgICB7XG4gICAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICAgIG5hbWU6ICdlbnZQYXRoJyxcbiAgICAgICAgbWVzc2FnZTogJ1BhdGggdG8gZW52IGZpbGU6JyxcbiAgICAgICAgdmFsaWRhdGU6IChpbnB1dDogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgaWYgKCFpbnB1dC50cmltKCkpIHJldHVybiAnUGxlYXNlIGVudGVyIGEgcGF0aCc7XG4gICAgICAgICAgaWYgKCFmcy5leGlzdHNTeW5jKGlucHV0KSkgcmV0dXJuICdGaWxlIG5vdCBmb3VuZCc7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIF0pO1xuICAgIGxvZ2dlci5zdWNjZXNzKGBVc2luZyBlbnYgZmlsZTogJHtlbnZQYXRofWApO1xuICAgIHJldHVybiBlbnZQYXRoO1xuICB9XG5cbiAgaWYgKGVudkNob2ljZSA9PT0gJ21hbnVhbCcpIHtcbiAgICBjb25zdCB2YXJzID0gYXdhaXQgcHJvbXB0TWFudWFsRW52VmFycygpO1xuICAgIGlmIChPYmplY3Qua2V5cyh2YXJzKS5sZW5ndGggPiAwKSB7XG4gICAgICAvLyBXcml0ZSB0byAuZW52IGZpbGUgaW4gcHJvamVjdFxuICAgICAgY29uc3QgZW52Q29udGVudCA9IE9iamVjdC5lbnRyaWVzKHZhcnMpXG4gICAgICAgIC5tYXAoKFtrLCB2XSkgPT4gYCR7a309JHt2fWApXG4gICAgICAgIC5qb2luKCdcXG4nKTtcbiAgICAgIGNvbnN0IGVudlBhdGggPSBwYXRoLmpvaW4ocHJvY2Vzcy5jd2QoKSwgJy5lbnYnKTtcbiAgICAgIGZzLndyaXRlRmlsZVN5bmMoZW52UGF0aCwgZW52Q29udGVudCk7XG4gICAgICBsb2dnZXIuc3VjY2VzcyhgQ3JlYXRlZCAuZW52IHdpdGggJHtPYmplY3Qua2V5cyh2YXJzKS5sZW5ndGh9IHZhcmlhYmxlc2ApO1xuICAgICAgcmV0dXJuIGVudlBhdGg7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGRlcGxveUNvbW1hbmQob3B0aW9uczogRGVwbG95T3B0aW9ucyk6IFByb21pc2U8dm9pZD4ge1xuICBsb2dnZXIuaGVhZGVyKCdSdW53YXkgRGVwbG95Jyk7XG5cbiAgLy8gQ2hlY2sgY29uZmlndXJhdGlvblxuICBpZiAoIWlzQ29uZmlndXJlZCgpKSB7XG4gICAgbG9nZ2VyLmVycm9yKCdDTEkgbm90IGNvbmZpZ3VyZWQuIFJ1biBcInJ1bndheSBpbml0XCIgZmlyc3QuJyk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gQ2hlY2sgdG9rZW4gdmFsaWRpdHkgYmVmb3JlIHByb2NlZWRpbmdcbiAgaWYgKGlzVG9rZW5FeHBpcmVkKCkpIHtcbiAgICBsb2dnZXIuZXJyb3IoJ1lvdXIgYXV0aGVudGljYXRpb24gdG9rZW4gaGFzIGV4cGlyZWQuJyk7XG4gICAgbG9nZ2VyLmluZm8oJ1J1biBcInJ1bndheSBsb2dpblwiIHRvIHJlLWF1dGhlbnRpY2F0ZS4nKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBjb25maWcgPSBnZXRDb25maWcoKTtcbiAgbG9nZ2VyLmRpbShgU2VydmVyOiAke2NvbmZpZy5zZXJ2ZXJVcmx9YCk7XG4gIGxvZ2dlci5ibGFuaygpO1xuXG4gIC8vIERldGVjdCBwcm9qZWN0XG4gIGNvbnN0IHNwaW5uZXIgPSBvcmEoJ0RldGVjdGluZyBwcm9qZWN0Li4uJykuc3RhcnQoKTtcbiAgbGV0IGRldGVjdGVkUHJvamVjdDtcblxuICB0cnkge1xuICAgIGRldGVjdGVkUHJvamVjdCA9IGF3YWl0IGRldGVjdFByb2plY3QoKTtcbiAgICBzcGlubmVyLnN1Y2NlZWQoYERldGVjdGVkOiAke2RldGVjdGVkUHJvamVjdC50eXBlfSBwcm9qZWN0ICgke2RldGVjdGVkUHJvamVjdC5wYWNrYWdlTWFuYWdlcn0pYCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgc3Bpbm5lci5mYWlsKCdGYWlsZWQgdG8gZGV0ZWN0IHByb2plY3QnKTtcbiAgICBsb2dnZXIuZXJyb3IoZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiAnVW5rbm93biBlcnJvcicpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIERldGVybWluZSBwcm9qZWN0IG5hbWUg4oCUIHNhbml0aXplIGZyb20gcGFja2FnZS5qc29uXG4gIGNvbnN0IHN1Z2dlc3RlZE5hbWUgPSAoZGV0ZWN0ZWRQcm9qZWN0Lm5hbWUgfHwgcGF0aC5iYXNlbmFtZShwcm9jZXNzLmN3ZCgpKSlcbiAgICAucmVwbGFjZSgvXkBbXi9dK1xcLy8sICcnKSAgICAgICAgLy8gUmVtb3ZlIG5wbSBzY29wZSAoQHNjb3BlL25hbWUg4oaSIG5hbWUpXG4gICAgLnJlcGxhY2UoL1teYS16QS1aMC05LV9dL2csICctJykgIC8vIFJlcGxhY2UgaW52YWxpZCBjaGFycyB3aXRoIGh5cGhlbnNcbiAgICAucmVwbGFjZSgvXi0rfC0rJC9nLCAnJykgICAgICAgICAgLy8gVHJpbSBsZWFkaW5nL3RyYWlsaW5nIGh5cGhlbnNcbiAgICAudG9Mb3dlckNhc2UoKTtcbiAgbGV0IHByb2plY3ROYW1lID0gb3B0aW9ucy5uYW1lIHx8IHN1Z2dlc3RlZE5hbWU7XG5cbiAgLy8gSW50ZXJhY3RpdmUgbW9kZSBpZiBuYW1lIG5vdCBwcm92aWRlZFxuICBpZiAoIW9wdGlvbnMubmFtZSkge1xuICAgIGNvbnN0IGFuc3dlcnMgPSBhd2FpdCBpbnF1aXJlci5wcm9tcHQoW1xuICAgICAge1xuICAgICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgICBuYW1lOiAnbmFtZScsXG4gICAgICAgIG1lc3NhZ2U6ICdQcm9qZWN0IG5hbWU6JyxcbiAgICAgICAgZGVmYXVsdDogcHJvamVjdE5hbWUsXG4gICAgICAgIHZhbGlkYXRlOiAoaW5wdXQ6IHN0cmluZykgPT4ge1xuICAgICAgICAgIGlmIChpbnB1dC5sZW5ndGggPCAyKSByZXR1cm4gJ05hbWUgbXVzdCBiZSBhdCBsZWFzdCAyIGNoYXJhY3RlcnMnO1xuICAgICAgICAgIGlmICghL15bYS16QS1aMC05LV9dKyQvLnRlc3QoaW5wdXQpKSByZXR1cm4gJ05hbWUgY2FuIG9ubHkgY29udGFpbiBsZXR0ZXJzLCBudW1iZXJzLCBoeXBoZW5zLCBhbmQgdW5kZXJzY29yZXMnO1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9LFxuICAgICAgfSxcbiAgICBdKTtcbiAgICBwcm9qZWN0TmFtZSA9IGFuc3dlcnMubmFtZTtcbiAgfVxuXG4gIC8vIEFzayBpZiBlbnZpcm9ubWVudCB2YXJpYWJsZXMgYXJlIHJlcXVpcmVkXG4gIGNvbnN0IHsgbmVlZHNFbnYgfSA9IGF3YWl0IGlucXVpcmVyLnByb21wdChbXG4gICAge1xuICAgICAgdHlwZTogJ2NvbmZpcm0nLFxuICAgICAgbmFtZTogJ25lZWRzRW52JyxcbiAgICAgIG1lc3NhZ2U6ICdEb2VzIHRoaXMgcHJvamVjdCByZXF1aXJlIGVudmlyb25tZW50IHZhcmlhYmxlcz8nLFxuICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgfSxcbiAgXSk7XG5cbiAgbGV0IGVudkZpbGVQYXRoOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIGxldCBlbnZWYXJzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG4gIGxldCBlbnZJbmplY3RlZCA9IGZhbHNlO1xuXG4gIGlmIChuZWVkc0Vudikge1xuICAgIGNvbnN0IGRlZmF1bHRFbnZQYXRoID0gcGF0aC5qb2luKHByb2Nlc3MuY3dkKCksICcuZW52Jyk7XG4gICAgY29uc3QgaGFzRW52RmlsZSA9IGZzLmV4aXN0c1N5bmMoZGVmYXVsdEVudlBhdGgpO1xuXG4gICAgaWYgKGhhc0VudkZpbGUpIHtcbiAgICAgIC8vIC5lbnYgZm91bmQgLSBjb25maXJtIHdpdGggdXNlclxuICAgICAgY29uc3QgeyB1c2VFeGlzdGluZyB9ID0gYXdhaXQgaW5xdWlyZXIucHJvbXB0KFtcbiAgICAgICAge1xuICAgICAgICAgIHR5cGU6ICdjb25maXJtJyxcbiAgICAgICAgICBuYW1lOiAndXNlRXhpc3RpbmcnLFxuICAgICAgICAgIG1lc3NhZ2U6ICdGb3VuZCAuZW52IGZpbGUgaW4gcHJvamVjdC4gVXNlIGl0PycsXG4gICAgICAgICAgZGVmYXVsdDogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgIF0pO1xuXG4gICAgICBpZiAodXNlRXhpc3RpbmcpIHtcbiAgICAgICAgZW52RmlsZVBhdGggPSBkZWZhdWx0RW52UGF0aDtcbiAgICAgICAgZW52VmFycyA9IHBhcnNlRW52RmlsZShkZWZhdWx0RW52UGF0aCk7XG4gICAgICAgIGVudkluamVjdGVkID0gT2JqZWN0LmtleXMoZW52VmFycykubGVuZ3RoID4gMDtcbiAgICAgICAgbG9nZ2VyLnN1Y2Nlc3MoYExvYWRlZCAke09iamVjdC5rZXlzKGVudlZhcnMpLmxlbmd0aH0gdmFyaWFibGVzIGZyb20gLmVudmApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gVXNlciBkZWNsaW5lZCBleGlzdGluZyAuZW52IC0gc2hvdyBvdGhlciBvcHRpb25zXG4gICAgICAgIGVudkZpbGVQYXRoID0gYXdhaXQgcHJvbXB0RW52T3B0aW9ucygpO1xuICAgICAgICBpZiAoZW52RmlsZVBhdGgpIHtcbiAgICAgICAgICBlbnZWYXJzID0gcGFyc2VFbnZGaWxlKGVudkZpbGVQYXRoKTtcbiAgICAgICAgICBlbnZJbmplY3RlZCA9IE9iamVjdC5rZXlzKGVudlZhcnMpLmxlbmd0aCA+IDA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gTm8gLmVudiBmb3VuZCAtIHNob3cgb3B0aW9uc1xuICAgICAgbG9nZ2VyLndhcm4oJ05vIC5lbnYgZmlsZSBmb3VuZCBpbiBwcm9qZWN0IGRpcmVjdG9yeS4nKTtcbiAgICAgIGVudkZpbGVQYXRoID0gYXdhaXQgcHJvbXB0RW52T3B0aW9ucygpO1xuICAgICAgaWYgKGVudkZpbGVQYXRoKSB7XG4gICAgICAgIGVudlZhcnMgPSBwYXJzZUVudkZpbGUoZW52RmlsZVBhdGgpO1xuICAgICAgICBlbnZJbmplY3RlZCA9IE9iamVjdC5rZXlzKGVudlZhcnMpLmxlbmd0aCA+IDA7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gRGV0ZXJtaW5lIHByb2plY3QgdHlwZVxuICBjb25zdCBwcm9qZWN0VHlwZSA9IG9wdGlvbnMudHlwZSB8fCBkZXRlY3RlZFByb2plY3QudHlwZTtcblxuICAvLyBEZXRlcm1pbmUgYnVpbGQgbW9kZVxuICBsZXQgYnVpbGRNb2RlOiBCdWlsZE1vZGU7XG4gIGlmIChvcHRpb25zLmJ1aWxkU2VydmVyKSB7XG4gICAgYnVpbGRNb2RlID0gJ3NlcnZlcic7XG4gIH0gZWxzZSBpZiAob3B0aW9ucy5idWlsZExvY2FsKSB7XG4gICAgYnVpbGRNb2RlID0gJ2xvY2FsJztcbiAgfSBlbHNlIHtcbiAgICBidWlsZE1vZGUgPSBjb25maWcuZGVmYXVsdEJ1aWxkTW9kZSB8fCAnbG9jYWwnO1xuICB9XG5cbiAgbG9nZ2VyLmJsYW5rKCk7XG4gIGxvZ2dlci5pbmZvKGBQcm9qZWN0OiAke3Byb2plY3ROYW1lfWApO1xuICBsb2dnZXIuaW5mbyhgVHlwZTogJHtwcm9qZWN0VHlwZX1gKTtcbiAgbG9nZ2VyLmluZm8oYEJ1aWxkIG1vZGU6ICR7YnVpbGRNb2RlfWApO1xuICBpZiAob3B0aW9ucy52ZXJzaW9uKSB7XG4gICAgbG9nZ2VyLmluZm8oYFZlcnNpb246ICR7b3B0aW9ucy52ZXJzaW9ufWApO1xuICB9XG4gIGxvZ2dlci5ibGFuaygpO1xuXG4gIC8vIENvbmZpcm0gZGVwbG95bWVudFxuICBjb25zdCB7IGNvbmZpcm0gfSA9IGF3YWl0IGlucXVpcmVyLnByb21wdChbXG4gICAge1xuICAgICAgdHlwZTogJ2NvbmZpcm0nLFxuICAgICAgbmFtZTogJ2NvbmZpcm0nLFxuICAgICAgbWVzc2FnZTogJ1Byb2NlZWQgd2l0aCBkZXBsb3ltZW50PycsXG4gICAgICBkZWZhdWx0OiB0cnVlLFxuICAgIH0sXG4gIF0pO1xuXG4gIGlmICghY29uZmlybSkge1xuICAgIGxvZ2dlci53YXJuKCdEZXBsb3ltZW50IGNhbmNlbGxlZC4nKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBsb2dnZXIuYmxhbmsoKTtcblxuICAvLyBTdGVwIDE6IEJ1aWxkIChmb3IgbG9jYWwtYnVpbGQgbW9kZSlcbiAgbGV0IGJ1aWxkT3V0cHV0RGlyID0gZGV0ZWN0ZWRQcm9qZWN0LmJ1aWxkT3V0cHV0RGlyO1xuXG4gIGlmIChidWlsZE1vZGUgPT09ICdsb2NhbCcpIHtcbiAgICBsb2dnZXIuc3RlcCgxLCA0LCAnQnVpbGRpbmcgcHJvamVjdC4uLicpO1xuXG4gICAgLy8gUGF0Y2ggUmVhY3QgUm91dGVyIGJhc2VuYW1lIGJlZm9yZSBidWlsZCAoaWYgYXBwbGljYWJsZSlcbiAgICBsZXQgZGlkUGF0Y2ggPSBmYWxzZTtcbiAgICBpZiAocHJvamVjdFR5cGUgPT09ICdyZWFjdCcpIHtcbiAgICAgIGNvbnN0IHsgUmVhY3RQYXRjaGVyIH0gPSBhd2FpdCBpbXBvcnQoJy4uL3NlcnZpY2VzL3JlYWN0UGF0Y2hlcicpO1xuICAgICAgZGlkUGF0Y2ggPSBhd2FpdCBSZWFjdFBhdGNoZXIucGF0Y2gocHJvY2Vzcy5jd2QoKSk7XG4gICAgfVxuXG4gICAgY29uc3QgYnVpbGRSZXN1bHQgPSBhd2FpdCBidWlsZFNlcnZpY2UuYnVpbGQoe1xuICAgICAgcHJvamVjdFBhdGg6IHByb2Nlc3MuY3dkKCksXG4gICAgICBwcm9qZWN0VHlwZSxcbiAgICAgIHByb2plY3ROYW1lLFxuICAgICAgcGFja2FnZU1hbmFnZXI6IGRldGVjdGVkUHJvamVjdC5wYWNrYWdlTWFuYWdlcixcbiAgICAgIGVudkZpbGU6IGVudkZpbGVQYXRoLFxuICAgIH0pO1xuXG4gICAgLy8gUmV2ZXJ0IHBhdGNoIGFmdGVyIGJ1aWxkIChrZWVwIHVzZXIncyBzb3VyY2UgY2xlYW4pXG4gICAgaWYgKGRpZFBhdGNoKSB7XG4gICAgICBjb25zdCB7IFJlYWN0UGF0Y2hlciB9ID0gYXdhaXQgaW1wb3J0KCcuLi9zZXJ2aWNlcy9yZWFjdFBhdGNoZXInKTtcbiAgICAgIGF3YWl0IFJlYWN0UGF0Y2hlci5yZXZlcnQocHJvY2Vzcy5jd2QoKSk7XG4gICAgfVxuXG4gICAgaWYgKCFidWlsZFJlc3VsdC5zdWNjZXNzKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoYEJ1aWxkIGZhaWxlZDogJHtidWlsZFJlc3VsdC5lcnJvcn1gKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBidWlsZE91dHB1dERpciA9IGJ1aWxkUmVzdWx0Lm91dHB1dERpcjtcbiAgICBsb2dnZXIuc3VjY2VzcyhgQnVpbGQgY29tcGxldGVkIGluICR7KGJ1aWxkUmVzdWx0LmR1cmF0aW9uIC8gMTAwMCkudG9GaXhlZCgxKX1zYCk7XG4gICAgbG9nZ2VyLmJsYW5rKCk7XG4gIH1cblxuICAvLyBTdGVwIDI6IFBhY2thZ2VcbiAgY29uc3QgcGFja2FnZVN0ZXAgPSBidWlsZE1vZGUgPT09ICdsb2NhbCcgPyAyIDogMTtcbiAgY29uc3QgdG90YWxTdGVwcyA9IGJ1aWxkTW9kZSA9PT0gJ2xvY2FsJyA/IDQgOiAzO1xuXG4gIGxvZ2dlci5zdGVwKHBhY2thZ2VTdGVwLCB0b3RhbFN0ZXBzLCAnQ3JlYXRpbmcgZGVwbG95bWVudCBwYWNrYWdlLi4uJyk7XG5cbiAgbGV0IHBhY2thZ2VSZXN1bHQ7XG4gIHRyeSB7XG4gICAgcGFja2FnZVJlc3VsdCA9IGF3YWl0IHBhY2thZ2VTZXJ2aWNlLnBhY2thZ2Uoe1xuICAgICAgcHJvamVjdFBhdGg6IHByb2Nlc3MuY3dkKCksXG4gICAgICBwcm9qZWN0VHlwZSxcbiAgICAgIGJ1aWxkT3V0cHV0RGlyLFxuICAgICAgaW5jbHVkZVNvdXJjZTogYnVpbGRNb2RlID09PSAnc2VydmVyJyxcbiAgICAgIGVudkZpbGU6IHByb2plY3RUeXBlID09PSAnbm9kZScgPyBlbnZGaWxlUGF0aCA6IHVuZGVmaW5lZCxcbiAgICB9KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBsb2dnZXIuZXJyb3IoYFBhY2thZ2luZyBmYWlsZWQ6ICR7ZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiAnVW5rbm93biBlcnJvcid9YCk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgbG9nZ2VyLmJsYW5rKCk7XG5cbiAgLy8gU3RlcCAzOiBBbmFseXplICYgVXBsb2FkXG4gIGxvZ2dlci5zdGVwKHBhY2thZ2VTdGVwICsgMSwgdG90YWxTdGVwcywgJ0FuYWx5emluZyBhbmQgdXBsb2FkaW5nIHRvIHNlcnZlci4uLicpO1xuXG4gIGxldCB1cGxvYWRTZXJ2aWNlO1xuICB0cnkge1xuICAgIHVwbG9hZFNlcnZpY2UgPSBjcmVhdGVVcGxvYWRTZXJ2aWNlKCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgbG9nZ2VyLmVycm9yKGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogJ1Vua25vd24gZXJyb3InKTtcbiAgICBwYWNrYWdlU2VydmljZS5jbGVhbnVwKHBhY2thZ2VSZXN1bHQuemlwUGF0aCk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gQW5hbHl6ZSBwYWNrYWdlIGZpcnN0IChmb3Igc2VydmVyLWJ1aWxkIG1vZGUgdG8gZ2V0IHdhcm5pbmdzKVxuICBsZXQgY29uZmlybVNlcnZlckJ1aWxkID0gZmFsc2U7XG4gIGlmIChidWlsZE1vZGUgPT09ICdzZXJ2ZXInKSB7XG4gICAgY29uc3QgYW5hbHl6ZVJlc3VsdCA9IGF3YWl0IHVwbG9hZFNlcnZpY2UuYW5hbHl6ZVBhY2thZ2UocGFja2FnZVJlc3VsdC56aXBQYXRoLCBwcm9qZWN0VHlwZSk7XG5cbiAgICBpZiAoYW5hbHl6ZVJlc3VsdC5zdWNjZXNzICYmIGFuYWx5emVSZXN1bHQuYW5hbHlzaXMpIHtcbiAgICAgIGNvbnN0IGFuYWx5c2lzID0gYW5hbHl6ZVJlc3VsdC5hbmFseXNpcztcblxuICAgICAgLy8gRGlzcGxheSB3YXJuaW5nc1xuICAgICAgaWYgKGFuYWx5c2lzLndhcm5pbmdzICYmIGFuYWx5c2lzLndhcm5pbmdzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgbG9nZ2VyLmJsYW5rKCk7XG4gICAgICAgIGxvZ2dlci53YXJuKCdTZXJ2ZXIgQW5hbHlzaXM6Jyk7XG4gICAgICAgIGZvciAoY29uc3Qgd2FybmluZyBvZiBhbmFseXNpcy53YXJuaW5ncykge1xuICAgICAgICAgIGNvbnN0IHByZWZpeCA9IHdhcm5pbmcubGV2ZWwgPT09ICdjcml0aWNhbCcgPyAn4p2MJyA6IHdhcm5pbmcubGV2ZWwgPT09ICd3YXJuaW5nJyA/ICfimqDvuI8nIDogJ+KEue+4jyc7XG4gICAgICAgICAgbG9nZ2VyLmRpbShgICAke3ByZWZpeH0gJHt3YXJuaW5nLm1lc3NhZ2V9YCk7XG4gICAgICAgIH1cbiAgICAgICAgbG9nZ2VyLmJsYW5rKCk7XG4gICAgICB9XG5cbiAgICAgIC8vIEhhbmRsZSBjb25maXJtYXRpb24gZm9yIHNlcnZlci1zaWRlIGJ1aWxkXG4gICAgICBpZiAoYW5hbHlzaXMucmVxdWlyZXNDb25maXJtYXRpb24pIHtcbiAgICAgICAgY29uc3QgeyBjb25maXJtQnVpbGQgfSA9IGF3YWl0IGlucXVpcmVyLnByb21wdChbXG4gICAgICAgICAge1xuICAgICAgICAgICAgdHlwZTogJ2NvbmZpcm0nLFxuICAgICAgICAgICAgbmFtZTogJ2NvbmZpcm1CdWlsZCcsXG4gICAgICAgICAgICBtZXNzYWdlOiBgJHthbmFseXNpcy5jb25maXJtYXRpb25SZWFzb24gfHwgJ1NlcnZlci1zaWRlIGJ1aWxkIHJlcXVpcmVkJ30uIFRoaXMgbWF5IGNvbnN1bWUgc2lnbmlmaWNhbnQgcmVzb3VyY2VzLiBDb250aW51ZT9gLFxuICAgICAgICAgICAgZGVmYXVsdDogdHJ1ZSxcbiAgICAgICAgICB9LFxuICAgICAgICBdKTtcblxuICAgICAgICBpZiAoIWNvbmZpcm1CdWlsZCkge1xuICAgICAgICAgIGxvZ2dlci53YXJuKCdEZXBsb3ltZW50IGNhbmNlbGxlZCBieSB1c2VyLicpO1xuICAgICAgICAgIHBhY2thZ2VTZXJ2aWNlLmNsZWFudXAocGFja2FnZVJlc3VsdC56aXBQYXRoKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uZmlybVNlcnZlckJ1aWxkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjb25zdCB1cGxvYWRSZXN1bHQgPSBhd2FpdCB1cGxvYWRTZXJ2aWNlLnVwbG9hZCh7XG4gICAgemlwUGF0aDogcGFja2FnZVJlc3VsdC56aXBQYXRoLFxuICAgIHByb2plY3ROYW1lLFxuICAgIHByb2plY3RUeXBlLFxuICAgIHZlcnNpb246IG9wdGlvbnMudmVyc2lvbixcbiAgICBidWlsZE1vZGUsXG4gICAgY29uZmlybVNlcnZlckJ1aWxkLFxuICAgIC8vIEVOViBtdXRhYmlsaXR5IHRyYWNraW5nXG4gICAgZGVwbG95bWVudFNvdXJjZTogJ2NsaScsXG4gICAgZW52SW5qZWN0ZWQsXG4gIH0pO1xuXG4gIC8vIENsZWFudXAgemlwIGZpbGVcbiAgcGFja2FnZVNlcnZpY2UuY2xlYW51cChwYWNrYWdlUmVzdWx0LnppcFBhdGgpO1xuXG4gIGlmICghdXBsb2FkUmVzdWx0LnN1Y2Nlc3MpIHtcbiAgICBsb2dnZXIuZXJyb3IoYFVwbG9hZCBmYWlsZWQ6ICR7dXBsb2FkUmVzdWx0LmVycm9yfWApO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGxvZ2dlci5zdWNjZXNzKCdVcGxvYWQgY29tcGxldGUnKTtcbiAgbG9nZ2VyLmJsYW5rKCk7XG5cbiAgLy8gU3RlcCA0OiBXYWl0IGZvciBkZXBsb3ltZW50IChpZiBkZXBsb3ltZW50IElEIGF2YWlsYWJsZSlcbiAgaWYgKHVwbG9hZFJlc3VsdC5kZXBsb3ltZW50SWQpIHtcbiAgICBsb2dnZXIuc3RlcChwYWNrYWdlU3RlcCArIDIsIHRvdGFsU3RlcHMsICdXYWl0aW5nIGZvciBkZXBsb3ltZW50IHRvIGNvbXBsZXRlLi4uJyk7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgZmluYWxTdGF0dXMgPSBhd2FpdCB1cGxvYWRTZXJ2aWNlLnBvbGxEZXBsb3ltZW50U3RhdHVzKFxuICAgICAgICB1cGxvYWRSZXN1bHQuZGVwbG95bWVudElkLFxuICAgICAgICAoc3RhdHVzKSA9PiB7XG4gICAgICAgICAgaWYgKHN0YXR1cy5wcm9ncmVzcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBwcm9jZXNzLnN0ZG91dC53cml0ZShgXFxyICBQcm9ncmVzczogJHtzdGF0dXMucHJvZ3Jlc3N9JWApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgKTtcblxuICAgICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUoJ1xcbicpO1xuXG4gICAgICBpZiAoZmluYWxTdGF0dXMuc3RhdHVzID09PSAnc3VjY2VzcycpIHtcbiAgICAgICAgbG9nZ2VyLmJsYW5rKCk7XG4gICAgICAgIGxvZ2dlci5zdWNjZXNzKCdEZXBsb3ltZW50IHN1Y2Nlc3NmdWwhJyk7XG5cbiAgICAgICAgY29uc3Qgc2FmZU5hbWUgPSBwcm9qZWN0TmFtZS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1teYS16MC05XS9nLCAnLScpO1xuXG4gICAgICAgIC8vIEZldGNoIGRvbWFpbiBjb25maWcgdG8gc2hvdyBwcm9wZXIgVVJMXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgZG9tYWluUmVzcG9uc2UgPSBhd2FpdCBheGlvcy5nZXQoYCR7Y29uZmlnLnNlcnZlclVybH0vYXBpL2RvbWFpbmAsIHtcbiAgICAgICAgICAgIGhlYWRlcnM6IGNvbmZpZy50b2tlbiA/IHsgQXV0aG9yaXphdGlvbjogYEJlYXJlciAke2NvbmZpZy50b2tlbn1gIH0gOiB7fSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBjb25zdCBkb21haW5Db25maWcgPSBkb21haW5SZXNwb25zZS5kYXRhO1xuXG4gICAgICAgICAgaWYgKGRvbWFpbkNvbmZpZy5kb21haW4/LmFjdGl2ZSAmJiBkb21haW5Db25maWcuc2VjdXJpdHlNb2RlID09PSAnZG9tYWluLWh0dHBzJykge1xuICAgICAgICAgICAgbG9nZ2VyLmJsYW5rKCk7XG4gICAgICAgICAgICBsb2dnZXIuaW5mbyhgWW91ciBhcHAgaXMgYXZhaWxhYmxlIGF0OiBodHRwczovLyR7ZG9tYWluQ29uZmlnLmRvbWFpbi5kb21haW59L2FwcC8ke3NhZmVOYW1lfWApO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsb2dnZXIuYmxhbmsoKTtcbiAgICAgICAgICAgIGxvZ2dlci5pbmZvKGBZb3VyIGFwcCBpcyBhdmFpbGFibGUgYXQ6ICR7Y29uZmlnLnNlcnZlclVybH0vYXBwLyR7c2FmZU5hbWV9YCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAvLyBGYWxsYmFjayB0byBzZXJ2ZXIgVVJMIGlmIGRvbWFpbiBmZXRjaCBmYWlsc1xuICAgICAgICAgIGxvZ2dlci5ibGFuaygpO1xuICAgICAgICAgIGxvZ2dlci5pbmZvKGBZb3VyIGFwcCBpcyBhdmFpbGFibGUgYXQ6ICR7Y29uZmlnLnNlcnZlclVybH0vYXBwLyR7c2FmZU5hbWV9YCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTaG93IGhlYWx0aCB3YXJuaW5nIGlmIHNlcnZpY2UgZGlkbid0IHJlc3BvbmQgb24gaXRzIGFsbG9jYXRlZCBwb3J0XG4gICAgICAgIGlmIChmaW5hbFN0YXR1cy5oZWFsdGhXYXJuaW5nKSB7XG4gICAgICAgICAgbG9nZ2VyLmJsYW5rKCk7XG4gICAgICAgICAgbG9nZ2VyLndhcm4oYOKaoCAgSGVhbHRoIGNoZWNrOiAke2ZpbmFsU3RhdHVzLmhlYWx0aFdhcm5pbmd9YCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxvZ2dlci5lcnJvcihgRGVwbG95bWVudCBmYWlsZWQ6ICR7ZmluYWxTdGF0dXMuZXJyb3IgfHwgJ1Vua25vd24gZXJyb3InfWApO1xuICAgICAgICBpZiAoZmluYWxTdGF0dXMubG9ncykge1xuICAgICAgICAgIGxvZ2dlci5ibGFuaygpO1xuICAgICAgICAgIGxvZ2dlci5kaW0oJ0xvZ3M6Jyk7XG4gICAgICAgICAgY29uc29sZS5sb2coZmluYWxTdGF0dXMubG9ncyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9nZ2VyLndhcm4oJ0NvdWxkIG5vdCB0cmFjayBkZXBsb3ltZW50IHN0YXR1cycpO1xuICAgICAgbG9nZ2VyLmRpbSgnQ2hlY2sgdGhlIHdlYiBVSSBmb3IgZGVwbG95bWVudCBzdGF0dXMnKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgbG9nZ2VyLmJsYW5rKCk7XG4gICAgbG9nZ2VyLnN1Y2Nlc3MoJ1VwbG9hZCBzdWNjZXNzZnVsIScpO1xuICAgIGxvZ2dlci5kaW0oJ0RlcGxveW1lbnQgaXMgYmVpbmcgcHJvY2Vzc2VkLiBDaGVjayB0aGUgd2ViIFVJIGZvciBzdGF0dXMuJyk7XG4gIH1cblxuICBsb2dnZXIuYmxhbmsoKTtcbn1cbiJdfQ==
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function loginCommand(): Promise<void>;
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.loginCommand = loginCommand;
|
|
7
|
+
const inquirer_1 = __importDefault(require("inquirer"));
|
|
8
|
+
const config_1 = require("../utils/config");
|
|
9
|
+
const logger_1 = require("../utils/logger");
|
|
10
|
+
const authService_1 = require("../services/authService");
|
|
11
|
+
async function loginCommand() {
|
|
12
|
+
logger_1.logger.header('Runway Login');
|
|
13
|
+
// Check if init has been run (we need a server URL at minimum)
|
|
14
|
+
const config = (0, config_1.getConfig)();
|
|
15
|
+
if (!config.serverUrl) {
|
|
16
|
+
logger_1.logger.error('CLI not configured. Run "runway init" first to set up your server URL.');
|
|
17
|
+
return;
|
|
18
|
+
}
|
|
19
|
+
logger_1.logger.dim(`Server: ${config.serverUrl}`);
|
|
20
|
+
logger_1.logger.blank();
|
|
21
|
+
// Initialize auth service
|
|
22
|
+
const authService = new authService_1.AuthService(config.serverUrl);
|
|
23
|
+
// Check security mode
|
|
24
|
+
let securityInfo;
|
|
25
|
+
try {
|
|
26
|
+
securityInfo = await authService.getSecurityMode();
|
|
27
|
+
}
|
|
28
|
+
catch (error) {
|
|
29
|
+
logger_1.logger.error('Failed to connect to server. Make sure it is running.');
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
if (securityInfo.securityMode === 'domain-https') {
|
|
33
|
+
logger_1.logger.success(`Server has HTTPS enabled: ${securityInfo.domain}`);
|
|
34
|
+
}
|
|
35
|
+
else {
|
|
36
|
+
logger_1.logger.warn('Server is running in HTTP mode.');
|
|
37
|
+
}
|
|
38
|
+
// Get credentials
|
|
39
|
+
logger_1.logger.blank();
|
|
40
|
+
const credentials = await inquirer_1.default.prompt([
|
|
41
|
+
{
|
|
42
|
+
type: 'input',
|
|
43
|
+
name: 'username',
|
|
44
|
+
message: 'Username:',
|
|
45
|
+
validate: (input) => input.length > 0 || 'Username is required',
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
type: 'password',
|
|
49
|
+
name: 'password',
|
|
50
|
+
message: 'Password:',
|
|
51
|
+
validate: (input) => input.length > 0 || 'Password is required',
|
|
52
|
+
},
|
|
53
|
+
]);
|
|
54
|
+
// Authenticate
|
|
55
|
+
logger_1.logger.info('Authenticating...');
|
|
56
|
+
try {
|
|
57
|
+
const authResult = await authService.authenticate(credentials.username, credentials.password);
|
|
58
|
+
// Save new auth data (keep existing server URL)
|
|
59
|
+
(0, config_1.setAuthData)(authResult.token, authResult.expiresAt, authResult.securityMode);
|
|
60
|
+
logger_1.logger.blank();
|
|
61
|
+
logger_1.logger.success('Authentication successful! Token updated.');
|
|
62
|
+
// Show token expiry warning for HTTP mode
|
|
63
|
+
if (authResult.securityMode === 'ip-http') {
|
|
64
|
+
logger_1.logger.warn('Note: Token expires in 15 minutes due to HTTP mode.');
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
catch (error) {
|
|
68
|
+
logger_1.logger.blank();
|
|
69
|
+
logger_1.logger.dim('Check your credentials and try again.');
|
|
70
|
+
}
|
|
71
|
+
logger_1.logger.blank();
|
|
72
|
+
}
|
|
73
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9naW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29tbWFuZHMvbG9naW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFLQSxvQ0F3RUM7QUE3RUQsd0RBQWdDO0FBQ2hDLDRDQUF1RTtBQUN2RSw0Q0FBeUM7QUFDekMseURBQXNEO0FBRS9DLEtBQUssVUFBVSxZQUFZO0lBQ2hDLGVBQU0sQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7SUFFOUIsK0RBQStEO0lBQy9ELE1BQU0sTUFBTSxHQUFHLElBQUEsa0JBQVMsR0FBRSxDQUFDO0lBQzNCLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDdEIsZUFBTSxDQUFDLEtBQUssQ0FBQyx3RUFBd0UsQ0FBQyxDQUFDO1FBQ3ZGLE9BQU87SUFDVCxDQUFDO0lBRUQsZUFBTSxDQUFDLEdBQUcsQ0FBQyxXQUFXLE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDO0lBQzFDLGVBQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUVmLDBCQUEwQjtJQUMxQixNQUFNLFdBQVcsR0FBRyxJQUFJLHlCQUFXLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBRXRELHNCQUFzQjtJQUN0QixJQUFJLFlBQVksQ0FBQztJQUNqQixJQUFJLENBQUM7UUFDSCxZQUFZLEdBQUcsTUFBTSxXQUFXLENBQUMsZUFBZSxFQUFFLENBQUM7SUFDckQsQ0FBQztJQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7UUFDZixlQUFNLENBQUMsS0FBSyxDQUFDLHVEQUF1RCxDQUFDLENBQUM7UUFDdEUsT0FBTztJQUNULENBQUM7SUFFRCxJQUFJLFlBQVksQ0FBQyxZQUFZLEtBQUssY0FBYyxFQUFFLENBQUM7UUFDakQsZUFBTSxDQUFDLE9BQU8sQ0FBQyw2QkFBNkIsWUFBWSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFDckUsQ0FBQztTQUFNLENBQUM7UUFDTixlQUFNLENBQUMsSUFBSSxDQUFDLGlDQUFpQyxDQUFDLENBQUM7SUFDakQsQ0FBQztJQUVELGtCQUFrQjtJQUNsQixlQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDZixNQUFNLFdBQVcsR0FBRyxNQUFNLGtCQUFRLENBQUMsTUFBTSxDQUFDO1FBQ3hDO1lBQ0UsSUFBSSxFQUFFLE9BQU87WUFDYixJQUFJLEVBQUUsVUFBVTtZQUNoQixPQUFPLEVBQUUsV0FBVztZQUNwQixRQUFRLEVBQUUsQ0FBQyxLQUFhLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLHNCQUFzQjtTQUN4RTtRQUNEO1lBQ0UsSUFBSSxFQUFFLFVBQVU7WUFDaEIsSUFBSSxFQUFFLFVBQVU7WUFDaEIsT0FBTyxFQUFFLFdBQVc7WUFDcEIsUUFBUSxFQUFFLENBQUMsS0FBYSxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxzQkFBc0I7U0FDeEU7S0FDRixDQUFDLENBQUM7SUFFSCxlQUFlO0lBQ2YsZUFBTSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0lBQ2pDLElBQUksQ0FBQztRQUNILE1BQU0sVUFBVSxHQUFHLE1BQU0sV0FBVyxDQUFDLFlBQVksQ0FDL0MsV0FBVyxDQUFDLFFBQVEsRUFDcEIsV0FBVyxDQUFDLFFBQVEsQ0FDckIsQ0FBQztRQUVGLGdEQUFnRDtRQUNoRCxJQUFBLG9CQUFXLEVBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxVQUFVLENBQUMsU0FBUyxFQUFFLFVBQVUsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUU3RSxlQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDZixlQUFNLENBQUMsT0FBTyxDQUFDLDJDQUEyQyxDQUFDLENBQUM7UUFFNUQsMENBQTBDO1FBQzFDLElBQUksVUFBVSxDQUFDLFlBQVksS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUMxQyxlQUFNLENBQUMsSUFBSSxDQUFDLHFEQUFxRCxDQUFDLENBQUM7UUFDckUsQ0FBQztJQUNILENBQUM7SUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1FBQ2YsZUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ2YsZUFBTSxDQUFDLEdBQUcsQ0FBQyx1Q0FBdUMsQ0FBQyxDQUFDO0lBQ3RELENBQUM7SUFFRCxlQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDakIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBpbnF1aXJlciBmcm9tICdpbnF1aXJlcic7XG5pbXBvcnQgeyBnZXRDb25maWcsIHNldEF1dGhEYXRhLCBpc0NvbmZpZ3VyZWQgfSBmcm9tICcuLi91dGlscy9jb25maWcnO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSAnLi4vdXRpbHMvbG9nZ2VyJztcbmltcG9ydCB7IEF1dGhTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvYXV0aFNlcnZpY2UnO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbG9naW5Db21tYW5kKCk6IFByb21pc2U8dm9pZD4ge1xuICBsb2dnZXIuaGVhZGVyKCdSdW53YXkgTG9naW4nKTtcblxuICAvLyBDaGVjayBpZiBpbml0IGhhcyBiZWVuIHJ1biAod2UgbmVlZCBhIHNlcnZlciBVUkwgYXQgbWluaW11bSlcbiAgY29uc3QgY29uZmlnID0gZ2V0Q29uZmlnKCk7XG4gIGlmICghY29uZmlnLnNlcnZlclVybCkge1xuICAgIGxvZ2dlci5lcnJvcignQ0xJIG5vdCBjb25maWd1cmVkLiBSdW4gXCJydW53YXkgaW5pdFwiIGZpcnN0IHRvIHNldCB1cCB5b3VyIHNlcnZlciBVUkwuJyk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgbG9nZ2VyLmRpbShgU2VydmVyOiAke2NvbmZpZy5zZXJ2ZXJVcmx9YCk7XG4gIGxvZ2dlci5ibGFuaygpO1xuXG4gIC8vIEluaXRpYWxpemUgYXV0aCBzZXJ2aWNlXG4gIGNvbnN0IGF1dGhTZXJ2aWNlID0gbmV3IEF1dGhTZXJ2aWNlKGNvbmZpZy5zZXJ2ZXJVcmwpO1xuXG4gIC8vIENoZWNrIHNlY3VyaXR5IG1vZGVcbiAgbGV0IHNlY3VyaXR5SW5mbztcbiAgdHJ5IHtcbiAgICBzZWN1cml0eUluZm8gPSBhd2FpdCBhdXRoU2VydmljZS5nZXRTZWN1cml0eU1vZGUoKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBsb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBjb25uZWN0IHRvIHNlcnZlci4gTWFrZSBzdXJlIGl0IGlzIHJ1bm5pbmcuJyk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKHNlY3VyaXR5SW5mby5zZWN1cml0eU1vZGUgPT09ICdkb21haW4taHR0cHMnKSB7XG4gICAgbG9nZ2VyLnN1Y2Nlc3MoYFNlcnZlciBoYXMgSFRUUFMgZW5hYmxlZDogJHtzZWN1cml0eUluZm8uZG9tYWlufWApO1xuICB9IGVsc2Uge1xuICAgIGxvZ2dlci53YXJuKCdTZXJ2ZXIgaXMgcnVubmluZyBpbiBIVFRQIG1vZGUuJyk7XG4gIH1cblxuICAvLyBHZXQgY3JlZGVudGlhbHNcbiAgbG9nZ2VyLmJsYW5rKCk7XG4gIGNvbnN0IGNyZWRlbnRpYWxzID0gYXdhaXQgaW5xdWlyZXIucHJvbXB0KFtcbiAgICB7XG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgbmFtZTogJ3VzZXJuYW1lJyxcbiAgICAgIG1lc3NhZ2U6ICdVc2VybmFtZTonLFxuICAgICAgdmFsaWRhdGU6IChpbnB1dDogc3RyaW5nKSA9PiBpbnB1dC5sZW5ndGggPiAwIHx8ICdVc2VybmFtZSBpcyByZXF1aXJlZCcsXG4gICAgfSxcbiAgICB7XG4gICAgICB0eXBlOiAncGFzc3dvcmQnLFxuICAgICAgbmFtZTogJ3Bhc3N3b3JkJyxcbiAgICAgIG1lc3NhZ2U6ICdQYXNzd29yZDonLFxuICAgICAgdmFsaWRhdGU6IChpbnB1dDogc3RyaW5nKSA9PiBpbnB1dC5sZW5ndGggPiAwIHx8ICdQYXNzd29yZCBpcyByZXF1aXJlZCcsXG4gICAgfSxcbiAgXSk7XG5cbiAgLy8gQXV0aGVudGljYXRlXG4gIGxvZ2dlci5pbmZvKCdBdXRoZW50aWNhdGluZy4uLicpO1xuICB0cnkge1xuICAgIGNvbnN0IGF1dGhSZXN1bHQgPSBhd2FpdCBhdXRoU2VydmljZS5hdXRoZW50aWNhdGUoXG4gICAgICBjcmVkZW50aWFscy51c2VybmFtZSxcbiAgICAgIGNyZWRlbnRpYWxzLnBhc3N3b3JkXG4gICAgKTtcblxuICAgIC8vIFNhdmUgbmV3IGF1dGggZGF0YSAoa2VlcCBleGlzdGluZyBzZXJ2ZXIgVVJMKVxuICAgIHNldEF1dGhEYXRhKGF1dGhSZXN1bHQudG9rZW4sIGF1dGhSZXN1bHQuZXhwaXJlc0F0LCBhdXRoUmVzdWx0LnNlY3VyaXR5TW9kZSk7XG5cbiAgICBsb2dnZXIuYmxhbmsoKTtcbiAgICBsb2dnZXIuc3VjY2VzcygnQXV0aGVudGljYXRpb24gc3VjY2Vzc2Z1bCEgVG9rZW4gdXBkYXRlZC4nKTtcblxuICAgIC8vIFNob3cgdG9rZW4gZXhwaXJ5IHdhcm5pbmcgZm9yIEhUVFAgbW9kZVxuICAgIGlmIChhdXRoUmVzdWx0LnNlY3VyaXR5TW9kZSA9PT0gJ2lwLWh0dHAnKSB7XG4gICAgICBsb2dnZXIud2FybignTm90ZTogVG9rZW4gZXhwaXJlcyBpbiAxNSBtaW51dGVzIGR1ZSB0byBIVFRQIG1vZGUuJyk7XG4gICAgfVxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGxvZ2dlci5ibGFuaygpO1xuICAgIGxvZ2dlci5kaW0oJ0NoZWNrIHlvdXIgY3JlZGVudGlhbHMgYW5kIHRyeSBhZ2Fpbi4nKTtcbiAgfVxuXG4gIGxvZ2dlci5ibGFuaygpO1xufVxuIl19
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.logsCommand = logsCommand;
|
|
7
|
+
const inquirer_1 = __importDefault(require("inquirer"));
|
|
8
|
+
const axios_1 = __importDefault(require("axios"));
|
|
9
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
10
|
+
const config_1 = require("../utils/config");
|
|
11
|
+
const uploadService_1 = require("../services/uploadService");
|
|
12
|
+
const logger_1 = require("../utils/logger");
|
|
13
|
+
async function logsCommand(project, options = {}) {
|
|
14
|
+
logger_1.logger.header('Runway Logs');
|
|
15
|
+
// Check configuration
|
|
16
|
+
if (!(0, config_1.isConfigured)()) {
|
|
17
|
+
logger_1.logger.error('CLI not configured. Run "runway init" first.');
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
20
|
+
// Check token validity
|
|
21
|
+
if ((0, config_1.isTokenExpired)()) {
|
|
22
|
+
logger_1.logger.error('Your authentication token has expired.');
|
|
23
|
+
logger_1.logger.info('Run "runway login" to re-authenticate.');
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
const config = (0, config_1.getConfig)();
|
|
27
|
+
// If no project specified, list and let user choose
|
|
28
|
+
let projectId = project;
|
|
29
|
+
let projectName = project;
|
|
30
|
+
if (!projectId) {
|
|
31
|
+
let uploadService;
|
|
32
|
+
try {
|
|
33
|
+
uploadService = (0, uploadService_1.createUploadService)();
|
|
34
|
+
}
|
|
35
|
+
catch (error) {
|
|
36
|
+
logger_1.logger.error(error instanceof Error ? error.message : 'Unknown error');
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
let projects;
|
|
40
|
+
try {
|
|
41
|
+
projects = await uploadService.listProjects();
|
|
42
|
+
}
|
|
43
|
+
catch (error) {
|
|
44
|
+
logger_1.logger.error('Failed to fetch projects');
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
if (projects.length === 0) {
|
|
48
|
+
logger_1.logger.warn('No projects deployed.');
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
// Filter to only PM2-managed projects (node, next)
|
|
52
|
+
const pm2Projects = projects.filter(p => p.type === 'node' || p.type === 'next');
|
|
53
|
+
if (pm2Projects.length === 0) {
|
|
54
|
+
logger_1.logger.warn('No Node.js or Next.js projects found. Logs are only available for PM2-managed projects.');
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
const { selected } = await inquirer_1.default.prompt([
|
|
58
|
+
{
|
|
59
|
+
type: 'list',
|
|
60
|
+
name: 'selected',
|
|
61
|
+
message: 'Select project to view logs:',
|
|
62
|
+
choices: pm2Projects.map(p => ({
|
|
63
|
+
name: `${p.name} (${p.type}) — ${p.status}`,
|
|
64
|
+
value: p,
|
|
65
|
+
})),
|
|
66
|
+
},
|
|
67
|
+
]);
|
|
68
|
+
projectId = selected.id;
|
|
69
|
+
projectName = selected.name;
|
|
70
|
+
}
|
|
71
|
+
// Fetch logs
|
|
72
|
+
const lines = parseInt(options.lines || '100');
|
|
73
|
+
const logType = options.type || 'all';
|
|
74
|
+
logger_1.logger.dim(`Fetching last ${lines} lines for ${projectName}...`);
|
|
75
|
+
logger_1.logger.blank();
|
|
76
|
+
try {
|
|
77
|
+
const response = await axios_1.default.get(`${config.serverUrl}/api/process/${projectId}/logs`, {
|
|
78
|
+
params: { lines, type: logType },
|
|
79
|
+
headers: config.token ? { Authorization: `Bearer ${config.token}` } : {},
|
|
80
|
+
timeout: 15000,
|
|
81
|
+
});
|
|
82
|
+
const data = response.data.data;
|
|
83
|
+
if (data.stdout) {
|
|
84
|
+
console.log(chalk_1.default.bold.green('━━━ stdout ━━━'));
|
|
85
|
+
console.log(data.stdout);
|
|
86
|
+
}
|
|
87
|
+
if (data.stderr) {
|
|
88
|
+
if (data.stdout)
|
|
89
|
+
console.log(); // spacer
|
|
90
|
+
console.log(chalk_1.default.bold.red('━━━ stderr ━━━'));
|
|
91
|
+
console.log(data.stderr);
|
|
92
|
+
}
|
|
93
|
+
if (!data.stdout && !data.stderr) {
|
|
94
|
+
logger_1.logger.dim('No logs found for this project.');
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
catch (error) {
|
|
98
|
+
if (axios_1.default.isAxiosError(error)) {
|
|
99
|
+
if (error.response?.status === 404) {
|
|
100
|
+
logger_1.logger.error('Project not found. Use "runway list" to see deployed projects.');
|
|
101
|
+
}
|
|
102
|
+
else {
|
|
103
|
+
logger_1.logger.error(`Failed to fetch logs: ${error.response?.data?.error || error.message}`);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
else {
|
|
107
|
+
logger_1.logger.error(`Failed to fetch logs: ${error.message}`);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
logger_1.logger.blank();
|
|
111
|
+
}
|
|
112
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9ncy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb21tYW5kcy9sb2dzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBWUEsa0NBa0hDO0FBOUhELHdEQUFnQztBQUNoQyxrREFBMEI7QUFDMUIsa0RBQTBCO0FBQzFCLDRDQUEwRTtBQUMxRSw2REFBZ0U7QUFDaEUsNENBQXlDO0FBT2xDLEtBQUssVUFBVSxXQUFXLENBQUMsT0FBZ0IsRUFBRSxVQUF1QixFQUFFO0lBQzNFLGVBQU0sQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUM7SUFFN0Isc0JBQXNCO0lBQ3RCLElBQUksQ0FBQyxJQUFBLHFCQUFZLEdBQUUsRUFBRSxDQUFDO1FBQ3BCLGVBQU0sQ0FBQyxLQUFLLENBQUMsOENBQThDLENBQUMsQ0FBQztRQUM3RCxPQUFPO0lBQ1QsQ0FBQztJQUVELHVCQUF1QjtJQUN2QixJQUFJLElBQUEsdUJBQWMsR0FBRSxFQUFFLENBQUM7UUFDckIsZUFBTSxDQUFDLEtBQUssQ0FBQyx3Q0FBd0MsQ0FBQyxDQUFDO1FBQ3ZELGVBQU0sQ0FBQyxJQUFJLENBQUMsd0NBQXdDLENBQUMsQ0FBQztRQUN0RCxPQUFPO0lBQ1QsQ0FBQztJQUVELE1BQU0sTUFBTSxHQUFHLElBQUEsa0JBQVMsR0FBRSxDQUFDO0lBRTNCLG9EQUFvRDtJQUNwRCxJQUFJLFNBQVMsR0FBRyxPQUFPLENBQUM7SUFDeEIsSUFBSSxXQUFXLEdBQUcsT0FBTyxDQUFDO0lBRTFCLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUNmLElBQUksYUFBYSxDQUFDO1FBQ2xCLElBQUksQ0FBQztZQUNILGFBQWEsR0FBRyxJQUFBLG1DQUFtQixHQUFFLENBQUM7UUFDeEMsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixlQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssWUFBWSxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMs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TTtnQkFBRSxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxTQUFTO1lBQ3pDLE9BQU8sQ0FBQyxHQUFHLENBQUMsZUFBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDO1lBQzlDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzNCLENBQUM7UUFFRCxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNqQyxlQUFNLENBQUMsR0FBRyxDQUFDLGlDQUFpQyxDQUFDLENBQUM7UUFDaEQsQ0FBQztJQUNILENBQUM7SUFBQyxPQUFPLEtBQVUsRUFBRSxDQUFDO1FBQ3BCLElBQUksZUFBSyxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQzlCLElBQUksS0FBSyxDQUFDLFFBQVEsRUFBRSxNQUFNLEtBQUssR0FBRyxFQUFFLENBQUM7Z0JBQ25DLGVBQU0sQ0FBQyxLQUFLLENBQUMsZ0VBQWdFLENBQUMsQ0FBQztZQUNqRixDQUFDO2lCQUFNLENBQUM7Z0JBQ04sZUFBTSxDQUFDLEtBQUssQ0FBQyx5QkFBeUIsS0FBSyxDQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUUsS0FBSyxJQUFJLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO1lBQ3hGLENBQUM7UUFDSCxDQUFDO2FBQU0sQ0FBQztZQUNOLGVBQU0sQ0FBQyxLQUFLLENBQUMseUJBQXlCLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO1FBQ3pELENBQUM7SUFDSCxDQUFDO0lBRUQsZUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ2pCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgaW5xdWlyZXIgZnJvbSAnaW5xdWlyZXInO1xuaW1wb3J0IGF4aW9zIGZyb20gJ2F4aW9zJztcbmltcG9ydCBjaGFsayBmcm9tICdjaGFsayc7XG5pbXBvcnQgeyBpc0NvbmZpZ3VyZWQsIGdldENvbmZpZywgaXNUb2tlbkV4cGlyZWQgfSBmcm9tICcuLi91dGlscy9jb25maWcnO1xuaW1wb3J0IHsgY3JlYXRlVXBsb2FkU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3VwbG9hZFNlcnZpY2UnO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSAnLi4vdXRpbHMvbG9nZ2VyJztcblxuaW50ZXJmYWNlIExvZ3NPcHRpb25zIHtcbiAgbGluZXM/OiBzdHJpbmc7XG4gIHR5cGU/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBsb2dzQ29tbWFuZChwcm9qZWN0Pzogc3RyaW5nLCBvcHRpb25zOiBMb2dzT3B0aW9ucyA9IHt9KTogUHJvbWlzZTx2b2lkPiB7XG4gIGxvZ2dlci5oZWFkZXIoJ1J1bndheSBMb2dzJyk7XG5cbiAgLy8gQ2hlY2sgY29uZmlndXJhdGlvblxuICBpZiAoIWlzQ29uZmlndXJlZCgpKSB7XG4gICAgbG9nZ2VyLmVycm9yKCdDTEkgbm90IGNvbmZpZ3VyZWQuIFJ1biBcInJ1bndheSBpbml0XCIgZmlyc3QuJyk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gQ2hlY2sgdG9rZW4gdmFsaWRpdHlcbiAgaWYgKGlzVG9rZW5FeHBpcmVkKCkpIHtcbiAgICBsb2dnZXIuZXJyb3IoJ1lvdXIgYXV0aGVudGljYXRpb24gdG9rZW4gaGFzIGV4cGlyZWQuJyk7XG4gICAgbG9nZ2VyLmluZm8oJ1J1biBcInJ1bndheSBsb2dpblwiIHRvIHJlLWF1dGhlbnRpY2F0ZS4nKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBjb25maWcgPSBnZXRDb25maWcoKTtcblxuICAvLyBJZiBubyBwcm9qZWN0IHNwZWNpZmllZCwgbGlzdCBhbmQgbGV0IHVzZXIgY2hvb3NlXG4gIGxldCBwcm9qZWN0SWQgPSBwcm9qZWN0O1xuICBsZXQgcHJvamVjdE5hbWUgPSBwcm9qZWN0O1xuXG4gIGlmICghcHJvamVjdElkKSB7XG4gICAgbGV0IHVwbG9hZFNlcnZpY2U7XG4gICAgdHJ5IHtcbiAgICAgIHVwbG9hZFNlcnZpY2UgPSBjcmVhdGVVcGxvYWRTZXJ2aWNlKCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci5lcnJvcihlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6ICdVbmtub3duIGVycm9yJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IHByb2plY3RzO1xuICAgIHRyeSB7XG4gICAgICBwcm9qZWN0cyA9IGF3YWl0IHVwbG9hZFNlcnZpY2UubGlzdFByb2plY3RzKCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci5lcnJvcignRmFpbGVkIHRvIGZldGNoIHByb2plY3RzJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHByb2plY3RzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgbG9nZ2VyLndhcm4oJ05vIHByb2plY3RzIGRlcGxveWVkLicpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIEZpbHRlciB0byBvbmx5IFBNMi1tYW5hZ2VkIHByb2plY3RzIChub2RlLCBuZXh0KVxuICAgIGNvbnN0IHBtMlByb2plY3RzID0gcHJvamVjdHMuZmlsdGVyKHAgPT4gcC50eXBlID09PSAnbm9kZScgfHwgcC50eXBlID09PSAnbmV4dCcpO1xuXG4gICAgaWYgKHBtMlByb2plY3RzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgbG9nZ2VyLndhcm4oJ05vIE5vZGUuanMgb3IgTmV4dC5qcyBwcm9qZWN0cyBmb3VuZC4gTG9ncyBhcmUgb25seSBhdmFpbGFibGUgZm9yIFBNMi1tYW5hZ2VkIHByb2plY3RzLicpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHsgc2VsZWN0ZWQgfSA9IGF3YWl0IGlucXVpcmVyLnByb21wdChbXG4gICAgICB7XG4gICAgICAgIHR5cGU6ICdsaXN0JyxcbiAgICAgICAgbmFtZTogJ3NlbGVjdGVkJyxcbiAgICAgICAgbWVzc2FnZTogJ1NlbGVjdCBwcm9qZWN0IHRvIHZpZXcgbG9nczonLFxuICAgICAgICBjaG9pY2VzOiBwbTJQcm9qZWN0cy5tYXAocCA9PiAoe1xuICAgICAgICAgIG5hbWU6IGAke3AubmFtZX0gKCR7cC50eXBlfSkg4oCUICR7cC5zdGF0dXN9YCxcbiAgICAgICAgICB2YWx1ZTogcCxcbiAgICAgICAgfSkpLFxuICAgICAgfSxcbiAgICBdKTtcblxuICAgIHByb2plY3RJZCA9IHNlbGVjdGVkLmlkO1xuICAgIHByb2plY3ROYW1lID0gc2VsZWN0ZWQubmFtZTtcbiAgfVxuXG4gIC8vIEZldGNoIGxvZ3NcbiAgY29uc3QgbGluZXMgPSBwYXJzZUludChvcHRpb25zLmxpbmVzIHx8ICcxMDAnKTtcbiAgY29uc3QgbG9nVHlwZSA9IG9wdGlvbnMudHlwZSB8fCAnYWxsJztcblxuICBsb2dnZXIuZGltKGBGZXRjaGluZyBsYXN0ICR7bGluZXN9IGxpbmVzIGZvciAke3Byb2plY3ROYW1lfS4uLmApO1xuICBsb2dnZXIuYmxhbmsoKTtcblxuICB0cnkge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXhpb3MuZ2V0KFxuICAgICAgYCR7Y29uZmlnLnNlcnZlclVybH0vYXBpL3Byb2Nlc3MvJHtwcm9qZWN0SWR9L2xvZ3NgLFxuICAgICAge1xuICAgICAgICBwYXJhbXM6IHsgbGluZXMsIHR5cGU6IGxvZ1R5cGUgfSxcbiAgICAgICAgaGVhZGVyczogY29uZmlnLnRva2VuID8geyBBdXRob3JpemF0aW9uOiBgQmVhcmVyICR7Y29uZmlnLnRva2VufWAgfSA6IHt9LFxuICAgICAgICB0aW1lb3V0OiAxNTAwMCxcbiAgICAgIH1cbiAgICApO1xuXG4gICAgY29uc3QgZGF0YSA9IHJlc3BvbnNlLmRhdGEuZGF0YTtcblxuICAgIGlmIChkYXRhLnN0ZG91dCkge1xuICAgICAgY29uc29sZS5sb2coY2hhbGsuYm9sZC5ncmVlbign4pSB4pSB4pSBIHN0ZG91dCDilIHilIHilIEnKSk7XG4gICAgICBjb25zb2xlLmxvZyhkYXRhLnN0ZG91dCk7XG4gICAgfVxuXG4gICAgaWYgKGRhdGEuc3RkZXJyKSB7XG4gICAgICBpZiAoZGF0YS5zdGRvdXQpIGNvbnNvbGUubG9nKCk7IC8vIHNwYWNlclxuICAgICAgY29uc29sZS5sb2coY2hhbGsuYm9sZC5yZWQoJ+KUgeKUgeKUgSBzdGRlcnIg4pSB4pSB4pSBJykpO1xuICAgICAgY29uc29sZS5sb2coZGF0YS5zdGRlcnIpO1xuICAgIH1cblxuICAgIGlmICghZGF0YS5zdGRvdXQgJiYgIWRhdGEuc3RkZXJyKSB7XG4gICAgICBsb2dnZXIuZGltKCdObyBsb2dzIGZvdW5kIGZvciB0aGlzIHByb2plY3QuJyk7XG4gICAgfVxuICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgaWYgKGF4aW9zLmlzQXhpb3NFcnJvcihlcnJvcikpIHtcbiAgICAgIGlmIChlcnJvci5yZXNwb25zZT8uc3RhdHVzID09PSA0MDQpIHtcbiAgICAgICAgbG9nZ2VyLmVycm9yKCdQcm9qZWN0IG5vdCBmb3VuZC4gVXNlIFwicnVud2F5IGxpc3RcIiB0byBzZWUgZGVwbG95ZWQgcHJvamVjdHMuJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsb2dnZXIuZXJyb3IoYEZhaWxlZCB0byBmZXRjaCBsb2dzOiAke2Vycm9yLnJlc3BvbnNlPy5kYXRhPy5lcnJvciB8fCBlcnJvci5tZXNzYWdlfWApO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBsb2dnZXIuZXJyb3IoYEZhaWxlZCB0byBmZXRjaCBsb2dzOiAke2Vycm9yLm1lc3NhZ2V9YCk7XG4gICAgfVxuICB9XG5cbiAgbG9nZ2VyLmJsYW5rKCk7XG59XG4iXX0=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function updateCommand(): Promise<void>;
|
|
@@ -0,0 +1,244 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
+
};
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
exports.updateCommand = updateCommand;
|
|
40
|
+
const inquirer_1 = __importDefault(require("inquirer"));
|
|
41
|
+
const ora_1 = __importDefault(require("ora"));
|
|
42
|
+
const axios_1 = __importDefault(require("axios"));
|
|
43
|
+
const projectDetector_1 = require("../services/projectDetector");
|
|
44
|
+
const buildService_1 = require("../services/buildService");
|
|
45
|
+
const packageService_1 = require("../services/packageService");
|
|
46
|
+
const uploadService_1 = require("../services/uploadService");
|
|
47
|
+
const config_1 = require("../utils/config");
|
|
48
|
+
const logger_1 = require("../utils/logger");
|
|
49
|
+
async function updateCommand() {
|
|
50
|
+
logger_1.logger.header('Runway Update');
|
|
51
|
+
// Check configuration
|
|
52
|
+
if (!(0, config_1.isConfigured)()) {
|
|
53
|
+
logger_1.logger.error('CLI not configured. Run "runway init" first.');
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
// Check token validity
|
|
57
|
+
if ((0, config_1.isTokenExpired)()) {
|
|
58
|
+
logger_1.logger.error('Your authentication token has expired.');
|
|
59
|
+
logger_1.logger.info('Run "runway login" to re-authenticate.');
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
62
|
+
const config = (0, config_1.getConfig)();
|
|
63
|
+
logger_1.logger.dim(`Server: ${config.serverUrl}`);
|
|
64
|
+
logger_1.logger.blank();
|
|
65
|
+
// Fetch list of deployed projects
|
|
66
|
+
let uploadService;
|
|
67
|
+
try {
|
|
68
|
+
uploadService = (0, uploadService_1.createUploadService)();
|
|
69
|
+
}
|
|
70
|
+
catch (error) {
|
|
71
|
+
logger_1.logger.error(error instanceof Error ? error.message : 'Unknown error');
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
74
|
+
const spinner = (0, ora_1.default)('Fetching deployed projects...').start();
|
|
75
|
+
let projects;
|
|
76
|
+
try {
|
|
77
|
+
projects = await uploadService.listProjects();
|
|
78
|
+
spinner.succeed(`Found ${projects.length} deployed projects`);
|
|
79
|
+
}
|
|
80
|
+
catch (error) {
|
|
81
|
+
spinner.fail('Failed to fetch projects');
|
|
82
|
+
logger_1.logger.error(error instanceof Error ? error.message : 'Unknown error');
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
85
|
+
if (projects.length === 0) {
|
|
86
|
+
logger_1.logger.warn('No projects deployed. Use "runway deploy" to deploy a new project.');
|
|
87
|
+
return;
|
|
88
|
+
}
|
|
89
|
+
// Let user pick a project
|
|
90
|
+
const { selectedProject } = await inquirer_1.default.prompt([
|
|
91
|
+
{
|
|
92
|
+
type: 'list',
|
|
93
|
+
name: 'selectedProject',
|
|
94
|
+
message: 'Select project to update:',
|
|
95
|
+
choices: projects.map(p => ({
|
|
96
|
+
name: `${p.name} (${p.type}) — ${p.status}`,
|
|
97
|
+
value: p,
|
|
98
|
+
})),
|
|
99
|
+
},
|
|
100
|
+
]);
|
|
101
|
+
const projectName = selectedProject.name;
|
|
102
|
+
const projectType = selectedProject.type;
|
|
103
|
+
logger_1.logger.blank();
|
|
104
|
+
logger_1.logger.info(`Updating: ${projectName} (${projectType})`);
|
|
105
|
+
logger_1.logger.blank();
|
|
106
|
+
// Detect current directory project
|
|
107
|
+
const detectedSpinner = (0, ora_1.default)('Detecting local project...').start();
|
|
108
|
+
let detectedProject;
|
|
109
|
+
try {
|
|
110
|
+
detectedProject = await (0, projectDetector_1.detectProject)();
|
|
111
|
+
detectedSpinner.succeed(`Detected: ${detectedProject.type} project (${detectedProject.packageManager})`);
|
|
112
|
+
}
|
|
113
|
+
catch (error) {
|
|
114
|
+
detectedSpinner.fail('Failed to detect project in current directory');
|
|
115
|
+
logger_1.logger.error(error instanceof Error ? error.message : 'Unknown error');
|
|
116
|
+
return;
|
|
117
|
+
}
|
|
118
|
+
// Confirm
|
|
119
|
+
const { confirm } = await inquirer_1.default.prompt([
|
|
120
|
+
{
|
|
121
|
+
type: 'confirm',
|
|
122
|
+
name: 'confirm',
|
|
123
|
+
message: `Build current directory and update "${projectName}"?`,
|
|
124
|
+
default: true,
|
|
125
|
+
},
|
|
126
|
+
]);
|
|
127
|
+
if (!confirm) {
|
|
128
|
+
logger_1.logger.warn('Update cancelled.');
|
|
129
|
+
return;
|
|
130
|
+
}
|
|
131
|
+
logger_1.logger.blank();
|
|
132
|
+
// Step 1: Build locally
|
|
133
|
+
logger_1.logger.step(1, 3, 'Building project...');
|
|
134
|
+
// Patch React Router basename before build (if applicable)
|
|
135
|
+
let didPatch = false;
|
|
136
|
+
if (projectType === 'react') {
|
|
137
|
+
const { ReactPatcher } = await Promise.resolve().then(() => __importStar(require('../services/reactPatcher')));
|
|
138
|
+
didPatch = await ReactPatcher.patch(process.cwd());
|
|
139
|
+
}
|
|
140
|
+
const buildResult = await buildService_1.buildService.build({
|
|
141
|
+
projectPath: process.cwd(),
|
|
142
|
+
projectType,
|
|
143
|
+
projectName,
|
|
144
|
+
packageManager: detectedProject.packageManager,
|
|
145
|
+
});
|
|
146
|
+
// Revert patch after build (keep user's source clean)
|
|
147
|
+
if (didPatch) {
|
|
148
|
+
const { ReactPatcher } = await Promise.resolve().then(() => __importStar(require('../services/reactPatcher')));
|
|
149
|
+
await ReactPatcher.revert(process.cwd());
|
|
150
|
+
}
|
|
151
|
+
if (!buildResult.success) {
|
|
152
|
+
logger_1.logger.error(`Build failed: ${buildResult.error}`);
|
|
153
|
+
return;
|
|
154
|
+
}
|
|
155
|
+
logger_1.logger.success(`Build completed in ${(buildResult.duration / 1000).toFixed(1)}s`);
|
|
156
|
+
logger_1.logger.blank();
|
|
157
|
+
// Step 2: Package
|
|
158
|
+
logger_1.logger.step(2, 3, 'Creating deployment package...');
|
|
159
|
+
let packageResult;
|
|
160
|
+
try {
|
|
161
|
+
packageResult = await packageService_1.packageService.package({
|
|
162
|
+
projectPath: process.cwd(),
|
|
163
|
+
projectType,
|
|
164
|
+
buildOutputDir: buildResult.outputDir,
|
|
165
|
+
includeSource: false,
|
|
166
|
+
});
|
|
167
|
+
}
|
|
168
|
+
catch (error) {
|
|
169
|
+
logger_1.logger.error(`Packaging failed: ${error instanceof Error ? error.message : 'Unknown error'}`);
|
|
170
|
+
return;
|
|
171
|
+
}
|
|
172
|
+
logger_1.logger.blank();
|
|
173
|
+
// Step 3: Upload as update
|
|
174
|
+
logger_1.logger.step(3, 3, 'Uploading update to server...');
|
|
175
|
+
const uploadResult = await uploadService.upload({
|
|
176
|
+
zipPath: packageResult.zipPath,
|
|
177
|
+
projectName,
|
|
178
|
+
projectType,
|
|
179
|
+
buildMode: 'local',
|
|
180
|
+
deploymentSource: 'cli',
|
|
181
|
+
envInjected: false,
|
|
182
|
+
});
|
|
183
|
+
// Cleanup
|
|
184
|
+
packageService_1.packageService.cleanup(packageResult.zipPath);
|
|
185
|
+
if (!uploadResult.success) {
|
|
186
|
+
logger_1.logger.error(`Upload failed: ${uploadResult.error}`);
|
|
187
|
+
return;
|
|
188
|
+
}
|
|
189
|
+
logger_1.logger.success('Upload complete');
|
|
190
|
+
logger_1.logger.blank();
|
|
191
|
+
// Wait for deployment
|
|
192
|
+
if (uploadResult.deploymentId) {
|
|
193
|
+
try {
|
|
194
|
+
const finalStatus = await uploadService.pollDeploymentStatus(uploadResult.deploymentId, (status) => {
|
|
195
|
+
if (status.progress !== undefined) {
|
|
196
|
+
process.stdout.write(`\r Progress: ${status.progress}%`);
|
|
197
|
+
}
|
|
198
|
+
});
|
|
199
|
+
process.stdout.write('\n');
|
|
200
|
+
if (finalStatus.status === 'success') {
|
|
201
|
+
logger_1.logger.blank();
|
|
202
|
+
logger_1.logger.success(`✅ "${projectName}" updated successfully!`);
|
|
203
|
+
const safeName = projectName.toLowerCase().replace(/[^a-z0-9]/g, '-');
|
|
204
|
+
// Fetch domain config to show proper URL (same pattern as deploy.ts)
|
|
205
|
+
try {
|
|
206
|
+
const domainResponse = await axios_1.default.get(`${config.serverUrl}/api/domain`, {
|
|
207
|
+
headers: config.token ? { Authorization: `Bearer ${config.token}` } : {},
|
|
208
|
+
});
|
|
209
|
+
const domainConfig = domainResponse.data;
|
|
210
|
+
if (domainConfig.domain?.active && domainConfig.securityMode === 'domain-https') {
|
|
211
|
+
logger_1.logger.info(`Your app is available at: https://${domainConfig.domain.domain}/app/${safeName}`);
|
|
212
|
+
}
|
|
213
|
+
else {
|
|
214
|
+
logger_1.logger.info(`Your app is available at: ${config.serverUrl}/app/${safeName}`);
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
catch {
|
|
218
|
+
logger_1.logger.info(`Your app is available at: ${config.serverUrl}/app/${safeName}`);
|
|
219
|
+
}
|
|
220
|
+
// Show health warning if service didn't respond on its allocated port
|
|
221
|
+
if (finalStatus.healthWarning) {
|
|
222
|
+
logger_1.logger.blank();
|
|
223
|
+
logger_1.logger.warn(`⚠ Health check: ${finalStatus.healthWarning}`);
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
else {
|
|
227
|
+
logger_1.logger.error(`Update failed: ${finalStatus.error || 'Unknown error'}`);
|
|
228
|
+
if (finalStatus.logs) {
|
|
229
|
+
logger_1.logger.blank();
|
|
230
|
+
logger_1.logger.dim('Logs:');
|
|
231
|
+
console.log(finalStatus.logs);
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
catch {
|
|
236
|
+
logger_1.logger.warn('Could not track deployment status. Check the web UI.');
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
else {
|
|
240
|
+
logger_1.logger.success('Upload successful! Check web UI for deployment status.');
|
|
241
|
+
}
|
|
242
|
+
logger_1.logger.blank();
|
|
243
|
+
}
|
|
244
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBkYXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbW1hbmRzL3VwZGF0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVlBLHNDQThOQztBQTFPRCx3REFBZ0M7QUFDaEMsOENBQXNCO0FBRXRCLGtEQUEwQjtBQUUxQixpRUFBNEQ7QUFDNUQsMkRBQXdEO0FBQ3hELCtEQUE0RDtBQUM1RCw2REFBZ0U7QUFDaEUsNENBQTBFO0FBQzFFLDRDQUF5QztBQUVsQyxLQUFLLFVBQVUsYUFBYTtJQUNqQyxlQUFNLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBRS9CLHNCQUFzQjtJQUN0QixJQUFJLENBQUMsSUFBQSxxQkFBWSxHQUFFLEVBQUUsQ0FBQztRQUNwQixlQUFNLENBQUMsS0FBSyxDQUFDLDhDQUE4QyxDQUFDLENBQUM7UUFDN0QsT0FBTztJQUNULENBQUM7SUFFRCx1QkFBdUI7SUFDdkIsSUFBSSxJQUFBLHVCQUFjLEdBQUUsRUFBRSxDQUFDO1FBQ3JCLGVBQU0sQ0FBQyxLQUFLLENBQUMsd0NBQXdDLENBQUMsQ0FBQztRQUN2RCxlQUFNLENBQUMsSUFBSSxDQUFDLHdDQUF3QyxDQUFDLENBQUM7UUFDdEQsT0FBTztJQUNULENBQUM7SUFFRCxNQUFNLE1BQU0sR0FBRyxJQUFBLGtCQUFTLEdBQUUsQ0FBQztJQUMzQixlQUFNLENBQUMsR0FBRyxDQUFDLFdBQVcsTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUM7SUFDMUMsZUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBRWYsa0NBQWtDO0lBQ2xDLElBQUksYUFBYSxDQUFDO0lBQ2xCLElBQUksQ0FBQztRQUNILGFBQWEsR0FBRyxJQUFBLG1DQUFtQixHQUFFLENBQUM7SUFDeEMsQ0FBQztJQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7UUFDZixlQUFNLENBQUMsS0FBSyxDQUFDLEtB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Q0gsQ0FBQztRQUNILENBQUM7UUFBQyxNQUFNLENBQUM7WUFDUCxlQUFNLENBQUMsSUFBSSxDQUFDLHNEQUFzRCxDQUFDLENBQUM7UUFDdEUsQ0FBQztJQUNILENBQUM7U0FBTSxDQUFDO1FBQ04sZUFBTSxDQUFDLE9BQU8sQ0FBQyx3REFBd0QsQ0FBQyxDQUFDO0lBQzNFLENBQUM7SUFFRCxlQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDakIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBpbnF1aXJlciBmcm9tICdpbnF1aXJlcic7XG5pbXBvcnQgb3JhIGZyb20gJ29yYSc7XG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCBheGlvcyBmcm9tICdheGlvcyc7XG5pbXBvcnQgeyBQcm9qZWN0VHlwZSB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IGRldGVjdFByb2plY3QgfSBmcm9tICcuLi9zZXJ2aWNlcy9wcm9qZWN0RGV0ZWN0b3InO1xuaW1wb3J0IHsgYnVpbGRTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvYnVpbGRTZXJ2aWNlJztcbmltcG9ydCB7IHBhY2thZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvcGFja2FnZVNlcnZpY2UnO1xuaW1wb3J0IHsgY3JlYXRlVXBsb2FkU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3VwbG9hZFNlcnZpY2UnO1xuaW1wb3J0IHsgaXNDb25maWd1cmVkLCBnZXRDb25maWcsIGlzVG9rZW5FeHBpcmVkIH0gZnJvbSAnLi4vdXRpbHMvY29uZmlnJztcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gJy4uL3V0aWxzL2xvZ2dlcic7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB1cGRhdGVDb21tYW5kKCk6IFByb21pc2U8dm9pZD4ge1xuICBsb2dnZXIuaGVhZGVyKCdSdW53YXkgVXBkYXRlJyk7XG5cbiAgLy8gQ2hlY2sgY29uZmlndXJhdGlvblxuICBpZiAoIWlzQ29uZmlndXJlZCgpKSB7XG4gICAgbG9nZ2VyLmVycm9yKCdDTEkgbm90IGNvbmZpZ3VyZWQuIFJ1biBcInJ1bndheSBpbml0XCIgZmlyc3QuJyk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gQ2hlY2sgdG9rZW4gdmFsaWRpdHlcbiAgaWYgKGlzVG9rZW5FeHBpcmVkKCkpIHtcbiAgICBsb2dnZXIuZXJyb3IoJ1lvdXIgYXV0aGVudGljYXRpb24gdG9rZW4gaGFzIGV4cGlyZWQuJyk7XG4gICAgbG9nZ2VyLmluZm8oJ1J1biBcInJ1bndheSBsb2dpblwiIHRvIHJlLWF1dGhlbnRpY2F0ZS4nKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBjb25maWcgPSBnZXRDb25maWcoKTtcbiAgbG9nZ2VyLmRpbShgU2VydmVyOiAke2NvbmZpZy5zZXJ2ZXJVcmx9YCk7XG4gIGxvZ2dlci5ibGFuaygpO1xuXG4gIC8vIEZldGNoIGxpc3Qgb2YgZGVwbG95ZWQgcHJvamVjdHNcbiAgbGV0IHVwbG9hZFNlcnZpY2U7XG4gIHRyeSB7XG4gICAgdXBsb2FkU2VydmljZSA9IGNyZWF0ZVVwbG9hZFNlcnZpY2UoKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBsb2dnZXIuZXJyb3IoZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiAnVW5rbm93biBlcnJvcicpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHNwaW5uZXIgPSBvcmEoJ0ZldGNoaW5nIGRlcGxveWVkIHByb2plY3RzLi4uJykuc3RhcnQoKTtcbiAgbGV0IHByb2plY3RzO1xuICB0cnkge1xuICAgIHByb2plY3RzID0gYXdhaXQgdXBsb2FkU2VydmljZS5saXN0UHJvamVjdHMoKTtcbiAgICBzcGlubmVyLnN1Y2NlZWQoYEZvdW5kICR7cHJvamVjdHMubGVuZ3RofSBkZXBsb3llZCBwcm9qZWN0c2ApO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHNwaW5uZXIuZmFpbCgnRmFpbGVkIHRvIGZldGNoIHByb2plY3RzJyk7XG4gICAgbG9nZ2VyLmVycm9yKGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogJ1Vua25vd24gZXJyb3InKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAocHJvamVjdHMubGVuZ3RoID09PSAwKSB7XG4gICAgbG9nZ2VyLndhcm4oJ05vIHByb2plY3RzIGRlcGxveWVkLiBVc2UgXCJydW53YXkgZGVwbG95XCIgdG8gZGVwbG95IGEgbmV3IHByb2plY3QuJyk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gTGV0IHVzZXIgcGljayBhIHByb2plY3RcbiAgY29uc3QgeyBzZWxlY3RlZFByb2plY3QgfSA9IGF3YWl0IGlucXVpcmVyLnByb21wdChbXG4gICAge1xuICAgICAgdHlwZTogJ2xpc3QnLFxuICAgICAgbmFtZTogJ3NlbGVjdGVkUHJvamVjdCcsXG4gICAgICBtZXNzYWdlOiAnU2VsZWN0IHByb2plY3QgdG8gdXBkYXRlOicsXG4gICAgICBjaG9pY2VzOiBwcm9qZWN0cy5tYXAocCA9PiAoe1xuICAgICAgICBuYW1lOiBgJHtwLm5hbWV9ICgke3AudHlwZX0pIOKAlCAke3Auc3RhdHVzfWAsXG4gICAgICAgIHZhbHVlOiBwLFxuICAgICAgfSkpLFxuICAgIH0sXG4gIF0pO1xuXG4gIGNvbnN0IHByb2plY3ROYW1lID0gc2VsZWN0ZWRQcm9qZWN0Lm5hbWU7XG4gIGNvbnN0IHByb2plY3RUeXBlOiBQcm9qZWN0VHlwZSA9IHNlbGVjdGVkUHJvamVjdC50eXBlO1xuXG4gIGxvZ2dlci5ibGFuaygpO1xuICBsb2dnZXIuaW5mbyhgVXBkYXRpbmc6ICR7cHJvamVjdE5hbWV9ICgke3Byb2plY3RUeXBlfSlgKTtcbiAgbG9nZ2VyLmJsYW5rKCk7XG5cbiAgLy8gRGV0ZWN0IGN1cnJlbnQgZGlyZWN0b3J5IHByb2plY3RcbiAgY29uc3QgZGV0ZWN0ZWRTcGlubmVyID0gb3JhKCdEZXRlY3RpbmcgbG9jYWwgcHJvamVjdC4uLicpLnN0YXJ0KCk7XG4gIGxldCBkZXRlY3RlZFByb2plY3Q7XG4gIHRyeSB7XG4gICAgZGV0ZWN0ZWRQcm9qZWN0ID0gYXdhaXQgZGV0ZWN0UHJvamVjdCgpO1xuICAgIGRldGVjdGVkU3Bpbm5lci5zdWNjZWVkKGBEZXRlY3RlZDogJHtkZXRlY3RlZFByb2plY3QudHlwZX0gcHJvamVjdCAoJHtkZXRlY3RlZFByb2plY3QucGFja2FnZU1hbmFnZXJ9KWApO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGRldGVjdGVkU3Bpbm5lci5mYWlsKCdGYWlsZWQgdG8gZGV0ZWN0IHByb2plY3QgaW4gY3VycmVudCBkaXJlY3RvcnknKTtcbiAgICBsb2dnZXIuZXJyb3IoZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiAnVW5rbm93biBlcnJvcicpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIENvbmZpcm1cbiAgY29uc3QgeyBjb25maXJtIH0gPSBhd2FpdCBpbnF1aXJlci5wcm9tcHQoW1xuICAgIHtcbiAgICAgIHR5cGU6ICdjb25maXJtJyxcbiAgICAgIG5hbWU6ICdjb25maXJtJyxcbiAgICAgIG1lc3NhZ2U6IGBCdWlsZCBjdXJyZW50IGRpcmVjdG9yeSBhbmQgdXBkYXRlIFwiJHtwcm9qZWN0TmFtZX1cIj9gLFxuICAgICAgZGVmYXVsdDogdHJ1ZSxcbiAgICB9LFxuICBdKTtcblxuICBpZiAoIWNvbmZpcm0pIHtcbiAgICBsb2dnZXIud2FybignVXBkYXRlIGNhbmNlbGxlZC4nKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBsb2dnZXIuYmxhbmsoKTtcblxuICAvLyBTdGVwIDE6IEJ1aWxkIGxvY2FsbHlcbiAgbG9nZ2VyLnN0ZXAoMSwgMywgJ0J1aWxkaW5nIHByb2plY3QuLi4nKTtcblxuICAvLyBQYXRjaCBSZWFjdCBSb3V0ZXIgYmFzZW5hbWUgYmVmb3JlIGJ1aWxkIChpZiBhcHBsaWNhYmxlKVxuICBsZXQgZGlkUGF0Y2ggPSBmYWxzZTtcbiAgaWYgKHByb2plY3RUeXBlID09PSAncmVhY3QnKSB7XG4gICAgY29uc3QgeyBSZWFjdFBhdGNoZXIgfSA9IGF3YWl0IGltcG9ydCgnLi4vc2VydmljZXMvcmVhY3RQYXRjaGVyJyk7XG4gICAgZGlkUGF0Y2ggPSBhd2FpdCBSZWFjdFBhdGNoZXIucGF0Y2gocHJvY2Vzcy5jd2QoKSk7XG4gIH1cblxuICBjb25zdCBidWlsZFJlc3VsdCA9IGF3YWl0IGJ1aWxkU2VydmljZS5idWlsZCh7XG4gICAgcHJvamVjdFBhdGg6IHByb2Nlc3MuY3dkKCksXG4gICAgcHJvamVjdFR5cGUsXG4gICAgcHJvamVjdE5hbWUsXG4gICAgcGFja2FnZU1hbmFnZXI6IGRldGVjdGVkUHJvamVjdC5wYWNrYWdlTWFuYWdlcixcbiAgfSk7XG5cbiAgLy8gUmV2ZXJ0IHBhdGNoIGFmdGVyIGJ1aWxkIChrZWVwIHVzZXIncyBzb3VyY2UgY2xlYW4pXG4gIGlmIChkaWRQYXRjaCkge1xuICAgIGNvbnN0IHsgUmVhY3RQYXRjaGVyIH0gPSBhd2FpdCBpbXBvcnQoJy4uL3NlcnZpY2VzL3JlYWN0UGF0Y2hlcicpO1xuICAgIGF3YWl0IFJlYWN0UGF0Y2hlci5yZXZlcnQocHJvY2Vzcy5jd2QoKSk7XG4gIH1cblxuICBpZiAoIWJ1aWxkUmVzdWx0LnN1Y2Nlc3MpIHtcbiAgICBsb2dnZXIuZXJyb3IoYEJ1aWxkIGZhaWxlZDogJHtidWlsZFJlc3VsdC5lcnJvcn1gKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBsb2dnZXIuc3VjY2VzcyhgQnVpbGQgY29tcGxldGVkIGluICR7KGJ1aWxkUmVzdWx0LmR1cmF0aW9uIC8gMTAwMCkudG9GaXhlZCgxKX1zYCk7XG4gIGxvZ2dlci5ibGFuaygpO1xuXG4gIC8vIFN0ZXAgMjogUGFja2FnZVxuICBsb2dnZXIuc3RlcCgyLCAzLCAnQ3JlYXRpbmcgZGVwbG95bWVudCBwYWNrYWdlLi4uJyk7XG5cbiAgbGV0IHBhY2thZ2VSZXN1bHQ7XG4gIHRyeSB7XG4gICAgcGFja2FnZVJlc3VsdCA9IGF3YWl0IHBhY2thZ2VTZXJ2aWNlLnBhY2thZ2Uoe1xuICAgICAgcHJvamVjdFBhdGg6IHByb2Nlc3MuY3dkKCksXG4gICAgICBwcm9qZWN0VHlwZSxcbiAgICAgIGJ1aWxkT3V0cHV0RGlyOiBidWlsZFJlc3VsdC5vdXRwdXREaXIsXG4gICAgICBpbmNsdWRlU291cmNlOiBmYWxzZSxcbiAgICB9KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBsb2dnZXIuZXJyb3IoYFBhY2thZ2luZyBmYWlsZWQ6ICR7ZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiAnVW5rbm93biBlcnJvcid9YCk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgbG9nZ2VyLmJsYW5rKCk7XG5cbiAgLy8gU3RlcCAzOiBVcGxvYWQgYXMgdXBkYXRlXG4gIGxvZ2dlci5zdGVwKDMsIDMsICdVcGxvYWRpbmcgdXBkYXRlIHRvIHNlcnZlci4uLicpO1xuXG4gIGNvbnN0IHVwbG9hZFJlc3VsdCA9IGF3YWl0IHVwbG9hZFNlcnZpY2UudXBsb2FkKHtcbiAgICB6aXBQYXRoOiBwYWNrYWdlUmVzdWx0LnppcFBhdGgsXG4gICAgcHJvamVjdE5hbWUsXG4gICAgcHJvamVjdFR5cGUsXG4gICAgYnVpbGRNb2RlOiAnbG9jYWwnLFxuICAgIGRlcGxveW1lbnRTb3VyY2U6ICdjbGknLFxuICAgIGVudkluamVjdGVkOiBmYWxzZSxcbiAgfSk7XG5cbiAgLy8gQ2xlYW51cFxuICBwYWNrYWdlU2VydmljZS5jbGVhbnVwKHBhY2thZ2VSZXN1bHQuemlwUGF0aCk7XG5cbiAgaWYgKCF1cGxvYWRSZXN1bHQuc3VjY2Vzcykge1xuICAgIGxvZ2dlci5lcnJvcihgVXBsb2FkIGZhaWxlZDogJHt1cGxvYWRSZXN1bHQuZXJyb3J9YCk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgbG9nZ2VyLnN1Y2Nlc3MoJ1VwbG9hZCBjb21wbGV0ZScpO1xuICBsb2dnZXIuYmxhbmsoKTtcblxuICAvLyBXYWl0IGZvciBkZXBsb3ltZW50XG4gIGlmICh1cGxvYWRSZXN1bHQuZGVwbG95bWVudElkKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGZpbmFsU3RhdHVzID0gYXdhaXQgdXBsb2FkU2VydmljZS5wb2xsRGVwbG95bWVudFN0YXR1cyhcbiAgICAgICAgdXBsb2FkUmVzdWx0LmRlcGxveW1lbnRJZCxcbiAgICAgICAgKHN0YXR1cykgPT4ge1xuICAgICAgICAgIGlmIChzdGF0dXMucHJvZ3Jlc3MgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUoYFxcciAgUHJvZ3Jlc3M6ICR7c3RhdHVzLnByb2dyZXNzfSVgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICk7XG5cbiAgICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKCdcXG4nKTtcblxuICAgICAgaWYgKGZpbmFsU3RhdHVzLnN0YXR1cyA9PT0gJ3N1Y2Nlc3MnKSB7XG4gICAgICAgIGxvZ2dlci5ibGFuaygpO1xuICAgICAgICBsb2dnZXIuc3VjY2Vzcyhg4pyFIFwiJHtwcm9qZWN0TmFtZX1cIiB1cGRhdGVkIHN1Y2Nlc3NmdWxseSFgKTtcblxuICAgICAgICBjb25zdCBzYWZlTmFtZSA9IHByb2plY3ROYW1lLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvW15hLXowLTldL2csICctJyk7XG5cbiAgICAgICAgLy8gRmV0Y2ggZG9tYWluIGNvbmZpZyB0byBzaG93IHByb3BlciBVUkwgKHNhbWUgcGF0dGVybiBhcyBkZXBsb3kudHMpXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgZG9tYWluUmVzcG9uc2UgPSBhd2FpdCBheGlvcy5nZXQoYCR7Y29uZmlnLnNlcnZlclVybH0vYXBpL2RvbWFpbmAsIHtcbiAgICAgICAgICAgIGhlYWRlcnM6IGNvbmZpZy50b2tlbiA/IHsgQXV0aG9yaXphdGlvbjogYEJlYXJlciAke2NvbmZpZy50b2tlbn1gIH0gOiB7fSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBjb25zdCBkb21haW5Db25maWcgPSBkb21haW5SZXNwb25zZS5kYXRhO1xuICAgICAgICAgIGlmIChkb21haW5Db25maWcuZG9tYWluPy5hY3RpdmUgJiYgZG9tYWluQ29uZmlnLnNlY3VyaXR5TW9kZSA9PT0gJ2RvbWFpbi1odHRwcycpIHtcbiAgICAgICAgICAgIGxvZ2dlci5pbmZvKGBZb3VyIGFwcCBpcyBhdmFpbGFibGUgYXQ6IGh0dHBzOi8vJHtkb21haW5Db25maWcuZG9tYWluLmRvbWFpbn0vYXBwLyR7c2FmZU5hbWV9YCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxvZ2dlci5pbmZvKGBZb3VyIGFwcCBpcyBhdmFpbGFibGUgYXQ6ICR7Y29uZmlnLnNlcnZlclVybH0vYXBwLyR7c2FmZU5hbWV9YCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICBsb2dnZXIuaW5mbyhgWW91ciBhcHAgaXMgYXZhaWxhYmxlIGF0OiAke2NvbmZpZy5zZXJ2ZXJVcmx9L2FwcC8ke3NhZmVOYW1lfWApO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gU2hvdyBoZWFsdGggd2FybmluZyBpZiBzZXJ2aWNlIGRpZG4ndCByZXNwb25kIG9uIGl0cyBhbGxvY2F0ZWQgcG9ydFxuICAgICAgICBpZiAoZmluYWxTdGF0dXMuaGVhbHRoV2FybmluZykge1xuICAgICAgICAgIGxvZ2dlci5ibGFuaygpO1xuICAgICAgICAgIGxvZ2dlci53YXJuKGDimqAgIEhlYWx0aCBjaGVjazogJHtmaW5hbFN0YXR1cy5oZWFsdGhXYXJuaW5nfWApO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsb2dnZXIuZXJyb3IoYFVwZGF0ZSBmYWlsZWQ6ICR7ZmluYWxTdGF0dXMuZXJyb3IgfHwgJ1Vua25vd24gZXJyb3InfWApO1xuICAgICAgICBpZiAoZmluYWxTdGF0dXMubG9ncykge1xuICAgICAgICAgIGxvZ2dlci5ibGFuaygpO1xuICAgICAgICAgIGxvZ2dlci5kaW0oJ0xvZ3M6Jyk7XG4gICAgICAgICAgY29uc29sZS5sb2coZmluYWxTdGF0dXMubG9ncyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGNhdGNoIHtcbiAgICAgIGxvZ2dlci53YXJuKCdDb3VsZCBub3QgdHJhY2sgZGVwbG95bWVudCBzdGF0dXMuIENoZWNrIHRoZSB3ZWIgVUkuJyk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGxvZ2dlci5zdWNjZXNzKCdVcGxvYWQgc3VjY2Vzc2Z1bCEgQ2hlY2sgd2ViIFVJIGZvciBkZXBsb3ltZW50IHN0YXR1cy4nKTtcbiAgfVxuXG4gIGxvZ2dlci5ibGFuaygpO1xufVxuIl19
|
package/dist/index.js
CHANGED
|
@@ -9,6 +9,9 @@ const status_1 = require("./commands/status");
|
|
|
9
9
|
const reset_1 = require("./commands/reset");
|
|
10
10
|
const domain_1 = require("./commands/domain");
|
|
11
11
|
const metrics_1 = require("./commands/metrics");
|
|
12
|
+
const login_1 = require("./commands/login");
|
|
13
|
+
const update_1 = require("./commands/update");
|
|
14
|
+
const logs_1 = require("./commands/logs");
|
|
12
15
|
const program = new commander_1.Command();
|
|
13
16
|
program
|
|
14
17
|
.name('runway')
|
|
@@ -20,6 +23,11 @@ program
|
|
|
20
23
|
.description('Configure the Runway CLI')
|
|
21
24
|
.option('-s, --server <url>', 'Server URL')
|
|
22
25
|
.action(init_1.initCommand);
|
|
26
|
+
// Login command (re-authenticate without full init)
|
|
27
|
+
program
|
|
28
|
+
.command('login')
|
|
29
|
+
.description('Re-authenticate with the Runway server')
|
|
30
|
+
.action(login_1.loginCommand);
|
|
23
31
|
// Deploy command
|
|
24
32
|
program
|
|
25
33
|
.command('deploy')
|
|
@@ -31,6 +39,11 @@ program
|
|
|
31
39
|
.option('--build-server', 'Upload source and build on server')
|
|
32
40
|
.option('-e, --env-file <path>', 'Path to environment file')
|
|
33
41
|
.action(deploy_1.deployCommand);
|
|
42
|
+
// Update command (update existing deployed project)
|
|
43
|
+
program
|
|
44
|
+
.command('update')
|
|
45
|
+
.description('Update an existing deployed project')
|
|
46
|
+
.action(update_1.updateCommand);
|
|
34
47
|
// List command
|
|
35
48
|
program
|
|
36
49
|
.command('list')
|
|
@@ -42,6 +55,13 @@ program
|
|
|
42
55
|
.command('status <project>')
|
|
43
56
|
.description('Get status of a deployed project')
|
|
44
57
|
.action(status_1.statusCommand);
|
|
58
|
+
// Logs command
|
|
59
|
+
program
|
|
60
|
+
.command('logs [project]')
|
|
61
|
+
.description('View logs for a deployed project')
|
|
62
|
+
.option('-n, --lines <count>', 'Number of lines to show', '100')
|
|
63
|
+
.option('--type <type>', 'Log type: out, error, or all', 'all')
|
|
64
|
+
.action(logs_1.logsCommand);
|
|
45
65
|
// Reset command
|
|
46
66
|
program
|
|
47
67
|
.command('reset')
|
|
@@ -59,4 +79,4 @@ program
|
|
|
59
79
|
.action(metrics_1.metricsCommand);
|
|
60
80
|
// Parse command line arguments
|
|
61
81
|
program.parse();
|
|
62
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
82
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBRUEseUNBQW9DO0FBQ3BDLDBDQUE4QztBQUM5Qyw4Q0FBa0Q7QUFDbEQsMENBQThDO0FBQzlDLDhDQUFrRDtBQUNsRCw0Q0FBZ0Q7QUFDaEQsOENBQWtEO0FBQ2xELGdEQUFvRDtBQUNwRCw0Q0FBZ0Q7QUFDaEQsOENBQWtEO0FBQ2xELDBDQUE4QztBQUU5QyxNQUFNLE9BQU8sR0FBRyxJQUFJLG1CQUFPLEVBQUUsQ0FBQztBQUU5QixPQUFPO0tBQ0osSUFBSSxDQUFDLFFBQVEsQ0FBQztLQUNkLFdBQVcsQ0FBQywyQ0FBMkMsQ0FBQztLQUN4RCxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7QUFFcEIsZUFBZTtBQUNmLE9BQU87S0FDSixPQUFPLENBQUMsTUFBTSxDQUFDO0tBQ2YsV0FBVyxDQUFDLDBCQUEwQixDQUFDO0tBQ3ZDLE1BQU0sQ0FBQyxvQkFBb0IsRUFBRSxZQUFZLENBQUM7S0FDMUMsTUFBTSxDQUFDLGtCQUFXLENBQUMsQ0FBQztBQUV2QixvREFBb0Q7QUFDcEQsT0FBTztLQUNKLE9BQU8sQ0FBQyxPQUFPLENBQUM7S0FDaEIsV0FBVyxDQUFDLHdDQUF3QyxDQUFDO0tBQ3JELE1BQU0sQ0FBQyxvQkFBWSxDQUFDLENBQUM7QUFFeEIsaUJBQWlCO0FBQ2pCLE9BQU87S0FDSixPQUFPLENBQUMsUUFBUSxDQUFDO0tBQ2pCLFdBQVcsQ0FBQyw0QkFBNEIsQ0FBQztLQUN6QyxNQUFNLENBQUMsbUJBQW1CLEVBQUUsY0FBYyxDQUFDO0tBQzNDLE1BQU0sQ0FBQyxtQkFBbUIsRUFBRSxrQ0FBa0MsQ0FBQztLQUMvRCxNQUFNLENBQUMseUJBQXlCLEVBQUUsZ0JBQWdCLENBQUM7S0FDbkQsTUFBTSxDQUFDLGVBQWUsRUFBRSwwQ0FBMEMsQ0FBQztLQUNuRSxNQUFNLENBQUMsZ0JBQWdCLEVBQUUsbUNBQW1DLENBQUM7S0FDN0QsTUFBTSxDQUFDLHVCQUF1QixFQUFFLDBCQUEwQixDQUFDO0tBQzNELE1BQU0sQ0FBQyxzQkFBYSxDQUFDLENBQUM7QUFFekIsb0RBQW9EO0FBQ3BELE9BQU87S0FDSixPQUFPLENBQUMsUUFBUSxDQUFDO0tBQ2pCLFdBQVcsQ0FBQyxxQ0FBcUMsQ0FBQztLQUNsRCxNQUFNLENBQUMsc0JBQWEsQ0FBQyxDQUFDO0FBRXpCLGVBQWU7QUFDZixPQUFPO0tBQ0osT0FBTyxDQUFDLE1BQU0sQ0FBQztLQUNmLEtBQUssQ0FBQyxJQUFJLENBQUM7S0FDWCxXQUFXLENBQUMsd0JBQXdCLENBQUM7S0FDckMsTUFBTSxDQUFDLGtCQUFXLENBQUMsQ0FBQztBQUV2QixpQkFBaUI7QUFDakIsT0FBTztLQUNKLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQztLQUMzQixXQUFXLENBQUMsa0NBQWtDLENBQUM7S0FDL0MsTUFBTSxDQUFDLHNCQUFhLENBQUMsQ0FBQztBQUV6QixlQUFlO0FBQ2YsT0FBTztLQUNKLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQztLQUN6QixXQUFXLENBQUMsa0NBQWtDLENBQUM7S0FDL0MsTUFBTSxDQUFDLHFCQUFxQixFQUFFLHlCQUF5QixFQUFFLEtBQUssQ0FBQztLQUMvRCxNQUFNLENBQUMsZUFBZSxFQUFFLDhCQUE4QixFQUFFLEtBQUssQ0FBQztLQUM5RCxNQUFNLENBQUMsa0JBQVcsQ0FBQyxDQUFDO0FBRXZCLGdCQUFnQjtBQUNoQixPQUFPO0tBQ0osT0FBTyxDQUFDLE9BQU8sQ0FBQztLQUNoQixXQUFXLENBQUMseUNBQXlDLENBQUM7S0FDdEQsTUFBTSxDQUFDLG9CQUFZLENBQUMsQ0FBQztBQUV4QixpQkFBaUI7QUFDakIsT0FBTztLQUNKLE9BQU8sQ0FBQyxRQUFRLENBQUM7S0FDakIsV0FBVyxDQUFDLHNDQUFzQyxDQUFDO0tBQ25ELE1BQU0sQ0FBQyxzQkFBYSxDQUFDLENBQUM7QUFFekIsa0JBQWtCO0FBQ2xCLE9BQU87S0FDSixPQUFPLENBQUMsU0FBUyxDQUFDO0tBQ2xCLFdBQVcsQ0FBQywrQkFBK0IsQ0FBQztLQUM1QyxNQUFNLENBQUMsd0JBQWMsQ0FBQyxDQUFDO0FBRTFCLCtCQUErQjtBQUMvQixPQUFPLENBQUMsS0FBSyxFQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIjIS91c3IvYmluL2VudiBub2RlXG5cbmltcG9ydCB7IENvbW1hbmQgfSBmcm9tICdjb21tYW5kZXInO1xuaW1wb3J0IHsgaW5pdENvbW1hbmQgfSBmcm9tICcuL2NvbW1hbmRzL2luaXQnO1xuaW1wb3J0IHsgZGVwbG95Q29tbWFuZCB9IGZyb20gJy4vY29tbWFuZHMvZGVwbG95JztcbmltcG9ydCB7IGxpc3RDb21tYW5kIH0gZnJvbSAnLi9jb21tYW5kcy9saXN0JztcbmltcG9ydCB7IHN0YXR1c0NvbW1hbmQgfSBmcm9tICcuL2NvbW1hbmRzL3N0YXR1cyc7XG5pbXBvcnQgeyByZXNldENvbW1hbmQgfSBmcm9tICcuL2NvbW1hbmRzL3Jlc2V0JztcbmltcG9ydCB7IGRvbWFpbkNvbW1hbmQgfSBmcm9tICcuL2NvbW1hbmRzL2RvbWFpbic7XG5pbXBvcnQgeyBtZXRyaWNzQ29tbWFuZCB9IGZyb20gJy4vY29tbWFuZHMvbWV0cmljcyc7XG5pbXBvcnQgeyBsb2dpbkNvbW1hbmQgfSBmcm9tICcuL2NvbW1hbmRzL2xvZ2luJztcbmltcG9ydCB7IHVwZGF0ZUNvbW1hbmQgfSBmcm9tICcuL2NvbW1hbmRzL3VwZGF0ZSc7XG5pbXBvcnQgeyBsb2dzQ29tbWFuZCB9IGZyb20gJy4vY29tbWFuZHMvbG9ncyc7XG5cbmNvbnN0IHByb2dyYW0gPSBuZXcgQ29tbWFuZCgpO1xuXG5wcm9ncmFtXG4gIC5uYW1lKCdydW53YXknKVxuICAuZGVzY3JpcHRpb24oJ0NMSSB0b29sIGZvciBkZXBsb3lpbmcgcHJvamVjdHMgdG8gUnVud2F5JylcbiAgLnZlcnNpb24oJzAuMC4xJyk7XG5cbi8vIEluaXQgY29tbWFuZFxucHJvZ3JhbVxuICAuY29tbWFuZCgnaW5pdCcpXG4gIC5kZXNjcmlwdGlvbignQ29uZmlndXJlIHRoZSBSdW53YXkgQ0xJJylcbiAgLm9wdGlvbignLXMsIC0tc2VydmVyIDx1cmw+JywgJ1NlcnZlciBVUkwnKVxuICAuYWN0aW9uKGluaXRDb21tYW5kKTtcblxuLy8gTG9naW4gY29tbWFuZCAocmUtYXV0aGVudGljYXRlIHdpdGhvdXQgZnVsbCBpbml0KVxucHJvZ3JhbVxuICAuY29tbWFuZCgnbG9naW4nKVxuICAuZGVzY3JpcHRpb24oJ1JlLWF1dGhlbnRpY2F0ZSB3aXRoIHRoZSBSdW53YXkgc2VydmVyJylcbiAgLmFjdGlvbihsb2dpbkNvbW1hbmQpO1xuXG4vLyBEZXBsb3kgY29tbWFuZFxucHJvZ3JhbVxuICAuY29tbWFuZCgnZGVwbG95JylcbiAgLmRlc2NyaXB0aW9uKCdEZXBsb3kgdGhlIGN1cnJlbnQgcHJvamVjdCcpXG4gIC5vcHRpb24oJy1uLCAtLW5hbWUgPG5hbWU+JywgJ1Byb2plY3QgbmFtZScpXG4gIC5vcHRpb24oJy10LCAtLXR5cGUgPHR5cGU+JywgJ1Byb2plY3QgdHlwZSAocmVhY3QsIG5leHQsIG5vZGUpJylcbiAgLm9wdGlvbignLXYsIC0tdmVyc2lvbiA8dmVyc2lvbj4nLCAnVmVyc2lvbiBzdHJpbmcnKVxuICAub3B0aW9uKCctLWJ1aWxkLWxvY2FsJywgJ0J1aWxkIGxvY2FsbHkgYmVmb3JlIHVwbG9hZGluZyAoZGVmYXVsdCknKVxuICAub3B0aW9uKCctLWJ1aWxkLXNlcnZlcicsICdVcGxvYWQgc291cmNlIGFuZCBidWlsZCBvbiBzZXJ2ZXInKVxuICAub3B0aW9uKCctZSwgLS1lbnYtZmlsZSA8cGF0aD4nLCAnUGF0aCB0byBlbnZpcm9ubWVudCBmaWxlJylcbiAgLmFjdGlvbihkZXBsb3lDb21tYW5kKTtcblxuLy8gVXBkYXRlIGNvbW1hbmQgKHVwZGF0ZSBleGlzdGluZyBkZXBsb3llZCBwcm9qZWN0KVxucHJvZ3JhbVxuICAuY29tbWFuZCgndXBkYXRlJylcbiAgLmRlc2NyaXB0aW9uKCdVcGRhdGUgYW4gZXhpc3RpbmcgZGVwbG95ZWQgcHJvamVjdCcpXG4gIC5hY3Rpb24odXBkYXRlQ29tbWFuZCk7XG5cbi8vIExpc3QgY29tbWFuZFxucHJvZ3JhbVxuICAuY29tbWFuZCgnbGlzdCcpXG4gIC5hbGlhcygnbHMnKVxuICAuZGVzY3JpcHRpb24oJ0xpc3QgZGVwbG95ZWQgcHJvamVjdHMnKVxuICAuYWN0aW9uKGxpc3RDb21tYW5kKTtcblxuLy8gU3RhdHVzIGNvbW1hbmRcbnByb2dyYW1cbiAgLmNvbW1hbmQoJ3N0YXR1cyA8cHJvamVjdD4nKVxuICAuZGVzY3JpcHRpb24oJ0dldCBzdGF0dXMgb2YgYSBkZXBsb3llZCBwcm9qZWN0JylcbiAgLmFjdGlvbihzdGF0dXNDb21tYW5kKTtcblxuLy8gTG9ncyBjb21tYW5kXG5wcm9ncmFtXG4gIC5jb21tYW5kKCdsb2dzIFtwcm9qZWN0XScpXG4gIC5kZXNjcmlwdGlvbignVmlldyBsb2dzIGZvciBhIGRlcGxveWVkIHByb2plY3QnKVxuICAub3B0aW9uKCctbiwgLS1saW5lcyA8Y291bnQ+JywgJ051bWJlciBvZiBsaW5lcyB0byBzaG93JywgJzEwMCcpXG4gIC5vcHRpb24oJy0tdHlwZSA8dHlwZT4nLCAnTG9nIHR5cGU6IG91dCwgZXJyb3IsIG9yIGFsbCcsICdhbGwnKVxuICAuYWN0aW9uKGxvZ3NDb21tYW5kKTtcblxuLy8gUmVzZXQgY29tbWFuZFxucHJvZ3JhbVxuICAuY29tbWFuZCgncmVzZXQnKVxuICAuZGVzY3JpcHRpb24oJ1Jlc2V0IENMSSBjb25maWd1cmF0aW9uIGFuZCByZS1ydW4gaW5pdCcpXG4gIC5hY3Rpb24ocmVzZXRDb21tYW5kKTtcblxuLy8gRG9tYWluIGNvbW1hbmRcbnByb2dyYW1cbiAgLmNvbW1hbmQoJ2RvbWFpbicpXG4gIC5kZXNjcmlwdGlvbignQ29uZmlndXJlIHNlcnZlciBkb21haW4gKHNhbWUgYXMgVUkpJylcbiAgLmFjdGlvbihkb21haW5Db21tYW5kKTtcblxuLy8gTWV0cmljcyBjb21tYW5kXG5wcm9ncmFtXG4gIC5jb21tYW5kKCdtZXRyaWNzJylcbiAgLmRlc2NyaXB0aW9uKCdEaXNwbGF5IHNlcnZlciBzeXN0ZW0gbWV0cmljcycpXG4gIC5hY3Rpb24obWV0cmljc0NvbW1hbmQpO1xuXG4vLyBQYXJzZSBjb21tYW5kIGxpbmUgYXJndW1lbnRzXG5wcm9ncmFtLnBhcnNlKCk7XG5cbiJdfQ==
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* React Router patcher for CLI builds.
|
|
3
|
+
* Injects `basename={import.meta.env.BASE_URL}` into <BrowserRouter>
|
|
4
|
+
* so client-side routing works under /app/<project-name>/ subpath.
|
|
5
|
+
*
|
|
6
|
+
* This is a port of the server's reactPatcher.ts adapted for CLI usage.
|
|
7
|
+
*/
|
|
8
|
+
export declare class ReactPatcher {
|
|
9
|
+
/**
|
|
10
|
+
* Check if React Router patching is needed and apply it.
|
|
11
|
+
* Returns true if any patching was done.
|
|
12
|
+
*/
|
|
13
|
+
static patch(projectPath: string): Promise<boolean>;
|
|
14
|
+
/**
|
|
15
|
+
* Revert the basename patch (restore original state after build).
|
|
16
|
+
*/
|
|
17
|
+
static revert(projectPath: string): Promise<void>;
|
|
18
|
+
/**
|
|
19
|
+
* Recursively find the file containing <BrowserRouter> usage.
|
|
20
|
+
*/
|
|
21
|
+
private static findRouterFile;
|
|
22
|
+
}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.ReactPatcher = void 0;
|
|
7
|
+
const fs_1 = __importDefault(require("fs"));
|
|
8
|
+
const path_1 = __importDefault(require("path"));
|
|
9
|
+
const logger_1 = require("../utils/logger");
|
|
10
|
+
/**
|
|
11
|
+
* React Router patcher for CLI builds.
|
|
12
|
+
* Injects `basename={import.meta.env.BASE_URL}` into <BrowserRouter>
|
|
13
|
+
* so client-side routing works under /app/<project-name>/ subpath.
|
|
14
|
+
*
|
|
15
|
+
* This is a port of the server's reactPatcher.ts adapted for CLI usage.
|
|
16
|
+
*/
|
|
17
|
+
class ReactPatcher {
|
|
18
|
+
/**
|
|
19
|
+
* Check if React Router patching is needed and apply it.
|
|
20
|
+
* Returns true if any patching was done.
|
|
21
|
+
*/
|
|
22
|
+
static async patch(projectPath) {
|
|
23
|
+
const pkgPath = path_1.default.join(projectPath, 'package.json');
|
|
24
|
+
if (!fs_1.default.existsSync(pkgPath))
|
|
25
|
+
return false;
|
|
26
|
+
const pkg = JSON.parse(fs_1.default.readFileSync(pkgPath, 'utf-8'));
|
|
27
|
+
const deps = { ...pkg.dependencies, ...pkg.devDependencies };
|
|
28
|
+
// Only patch if react-router-dom is a dependency
|
|
29
|
+
if (!deps['react-router-dom'])
|
|
30
|
+
return false;
|
|
31
|
+
logger_1.logger.info('React Router detected — checking for BrowserRouter...');
|
|
32
|
+
const srcDir = path_1.default.join(projectPath, 'src');
|
|
33
|
+
const searchDir = fs_1.default.existsSync(srcDir) ? srcDir : projectPath;
|
|
34
|
+
const routerFile = ReactPatcher.findRouterFile(searchDir);
|
|
35
|
+
if (!routerFile) {
|
|
36
|
+
logger_1.logger.warn('⚠️ React Router detected but <BrowserRouter> usage not found.');
|
|
37
|
+
logger_1.logger.warn(' Ensure you add `basename={import.meta.env.BASE_URL}` to your Router manually.');
|
|
38
|
+
return false;
|
|
39
|
+
}
|
|
40
|
+
let content = fs_1.default.readFileSync(routerFile, 'utf-8');
|
|
41
|
+
// Match <BrowserRouter> that does NOT already have basename
|
|
42
|
+
const tagRegex = /<BrowserRouter(?![^>]*basename=)(\s|>)/;
|
|
43
|
+
if (!tagRegex.test(content)) {
|
|
44
|
+
logger_1.logger.info('React Router already configured (basename prop found)');
|
|
45
|
+
return false;
|
|
46
|
+
}
|
|
47
|
+
// Inject basename
|
|
48
|
+
content = content.replace(/<BrowserRouter(\s|>)/, '<BrowserRouter basename={import.meta.env.BASE_URL}$1');
|
|
49
|
+
fs_1.default.writeFileSync(routerFile, content, 'utf-8');
|
|
50
|
+
logger_1.logger.success(`Patched React Router basename in ${path_1.default.basename(routerFile)}`);
|
|
51
|
+
return true;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Revert the basename patch (restore original state after build).
|
|
55
|
+
*/
|
|
56
|
+
static async revert(projectPath) {
|
|
57
|
+
const pkgPath = path_1.default.join(projectPath, 'package.json');
|
|
58
|
+
if (!fs_1.default.existsSync(pkgPath))
|
|
59
|
+
return;
|
|
60
|
+
const pkg = JSON.parse(fs_1.default.readFileSync(pkgPath, 'utf-8'));
|
|
61
|
+
const deps = { ...pkg.dependencies, ...pkg.devDependencies };
|
|
62
|
+
if (!deps['react-router-dom'])
|
|
63
|
+
return;
|
|
64
|
+
const srcDir = path_1.default.join(projectPath, 'src');
|
|
65
|
+
const searchDir = fs_1.default.existsSync(srcDir) ? srcDir : projectPath;
|
|
66
|
+
const routerFile = ReactPatcher.findRouterFile(searchDir);
|
|
67
|
+
if (!routerFile)
|
|
68
|
+
return;
|
|
69
|
+
let content = fs_1.default.readFileSync(routerFile, 'utf-8');
|
|
70
|
+
// Remove the injected basename prop
|
|
71
|
+
const injectedPattern = /<BrowserRouter basename=\{import\.meta\.env\.BASE_URL\}(\s|>)/;
|
|
72
|
+
if (injectedPattern.test(content)) {
|
|
73
|
+
content = content.replace(injectedPattern, '<BrowserRouter$1');
|
|
74
|
+
fs_1.default.writeFileSync(routerFile, content, 'utf-8');
|
|
75
|
+
logger_1.logger.dim('Reverted React Router basename patch');
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Recursively find the file containing <BrowserRouter> usage.
|
|
80
|
+
*/
|
|
81
|
+
static findRouterFile(dir) {
|
|
82
|
+
try {
|
|
83
|
+
const entries = fs_1.default.readdirSync(dir);
|
|
84
|
+
for (const entry of entries) {
|
|
85
|
+
const fullPath = path_1.default.join(dir, entry);
|
|
86
|
+
const stat = fs_1.default.statSync(fullPath);
|
|
87
|
+
if (stat.isDirectory()) {
|
|
88
|
+
// Skip non-source directories
|
|
89
|
+
if (entry.startsWith('.') || entry === 'node_modules' || entry === 'dist' ||
|
|
90
|
+
entry === 'build' || entry === 'vendor' || entry === 'public')
|
|
91
|
+
continue;
|
|
92
|
+
const found = ReactPatcher.findRouterFile(fullPath);
|
|
93
|
+
if (found)
|
|
94
|
+
return found;
|
|
95
|
+
}
|
|
96
|
+
else if (/^(main|index|layout|home|App)\.(tsx|jsx|js)$/i.test(entry)) {
|
|
97
|
+
const content = fs_1.default.readFileSync(fullPath, 'utf-8');
|
|
98
|
+
if (content.includes('react-router-dom') && content.includes('<BrowserRouter')) {
|
|
99
|
+
return fullPath;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
catch {
|
|
105
|
+
// Ignore read errors
|
|
106
|
+
}
|
|
107
|
+
return null;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
exports.ReactPatcher = ReactPatcher;
|
|
111
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVhY3RQYXRjaGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NlcnZpY2VzL3JlYWN0UGF0Y2hlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSw0Q0FBb0I7QUFDcEIsZ0RBQXdCO0FBQ3hCLDRDQUF5QztBQUV6Qzs7Ozs7O0dBTUc7QUFDSCxNQUFhLFlBQVk7SUFDdkI7OztPQUdHO0lBQ0gsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsV0FBbUI7UUFDcEMsTUFBTSxPQUFPLEdBQUcsY0FBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsY0FBYyxDQUFDLENBQUM7UUFDdkQsSUFBSSxDQUFDLFlBQUUsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDO1lBQUUsT0FBTyxLQUFLLENBQUM7UUFFMUMsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFFLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO1FBQzFELE1BQU0sSUFBSSxHQUFHLEVBQUUsR0FBRyxHQUFHLENBQUMsWUFBWSxFQUFFLEdBQUcsR0FBRyxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBRTdELGlEQUFpRDtRQUNqRCxJQUFJLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDO1lBQUUsT0FBTyxLQUFLLENBQUM7UUFFNUMsZUFBTSxDQUFDLElBQUksQ0FBQyx1REFBdUQsQ0FBQyxDQUFDO1FBRXJFLE1BQU0sTUFBTSxHQUFHLGNBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzdDLE1BQU0sU0FBUyxHQUFHLFlBQUUsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDO1FBQy9ELE1BQU0sVUFBVSxHQUFHLFlBQVksQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLENBQUM7UUFFMUQsSUFB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QUksQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO2dCQUN2QyxNQUFNLElBQUksR0FBRyxZQUFFLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUVuQyxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDO29CQUN2Qiw4QkFBOEI7b0JBQzlCLElBQUksS0FBSyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsSUFBSSxLQUFLLEtBQUssY0FBYyxJQUFJLEtBQUssS0FBSyxNQUFNO3dCQUNyRSxLQUFLLEtBQUssT0FBTyxJQUFJLEtBQUssS0FBSyxRQUFRLElBQUksS0FBSyxLQUFLLFFBQVE7d0JBQUUsU0FBUztvQkFDNUUsTUFBTSxLQUFLLEdBQUcsWUFBWSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsQ0FBQztvQkFDcEQsSUFBSSxLQUFLO3dCQUFFLE9BQU8sS0FBSyxDQUFDO2dCQUMxQixDQUFDO3FCQUFNLElBQUksK0NBQStDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7b0JBQ3ZFLE1BQU0sT0FBTyxHQUFHLFlBQUUsQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDO29CQUNuRCxJQUFJLE9BQU8sQ0FBQyxRQUFRLENBQUMsa0JBQWtCLENBQUMsSUFBSSxPQUFPLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLEVBQUUsQ0FBQzt3QkFDL0UsT0FBTyxRQUFRLENBQUM7b0JBQ2xCLENBQUM7Z0JBQ0gsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO1FBQUMsTUFBTSxDQUFDO1lBQ1AscUJBQXFCO1FBQ3ZCLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7Q0FDRjtBQXhHRCxvQ0F3R0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZnMgZnJvbSAnZnMnO1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tICcuLi91dGlscy9sb2dnZXInO1xuXG4vKipcbiAqIFJlYWN0IFJvdXRlciBwYXRjaGVyIGZvciBDTEkgYnVpbGRzLlxuICogSW5qZWN0cyBgYmFzZW5hbWU9e2ltcG9ydC5tZXRhLmVudi5CQVNFX1VSTH1gIGludG8gPEJyb3dzZXJSb3V0ZXI+XG4gKiBzbyBjbGllbnQtc2lkZSByb3V0aW5nIHdvcmtzIHVuZGVyIC9hcHAvPHByb2plY3QtbmFtZT4vIHN1YnBhdGguXG4gKiBcbiAqIFRoaXMgaXMgYSBwb3J0IG9mIHRoZSBzZXJ2ZXIncyByZWFjdFBhdGNoZXIudHMgYWRhcHRlZCBmb3IgQ0xJIHVzYWdlLlxuICovXG5leHBvcnQgY2xhc3MgUmVhY3RQYXRjaGVyIHtcbiAgLyoqXG4gICAqIENoZWNrIGlmIFJlYWN0IFJvdXRlciBwYXRjaGluZyBpcyBuZWVkZWQgYW5kIGFwcGx5IGl0LlxuICAgKiBSZXR1cm5zIHRydWUgaWYgYW55IHBhdGNoaW5nIHdhcyBkb25lLlxuICAgKi9cbiAgc3RhdGljIGFzeW5jIHBhdGNoKHByb2plY3RQYXRoOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCBwa2dQYXRoID0gcGF0aC5qb2luKHByb2plY3RQYXRoLCAncGFja2FnZS5qc29uJyk7XG4gICAgaWYgKCFmcy5leGlzdHNTeW5jKHBrZ1BhdGgpKSByZXR1cm4gZmFsc2U7XG5cbiAgICBjb25zdCBwa2cgPSBKU09OLnBhcnNlKGZzLnJlYWRGaWxlU3luYyhwa2dQYXRoLCAndXRmLTgnKSk7XG4gICAgY29uc3QgZGVwcyA9IHsgLi4ucGtnLmRlcGVuZGVuY2llcywgLi4ucGtnLmRldkRlcGVuZGVuY2llcyB9O1xuXG4gICAgLy8gT25seSBwYXRjaCBpZiByZWFjdC1yb3V0ZXItZG9tIGlzIGEgZGVwZW5kZW5jeVxuICAgIGlmICghZGVwc1sncmVhY3Qtcm91dGVyLWRvbSddKSByZXR1cm4gZmFsc2U7XG5cbiAgICBsb2dnZXIuaW5mbygnUmVhY3QgUm91dGVyIGRldGVjdGVkIOKAlCBjaGVja2luZyBmb3IgQnJvd3NlclJvdXRlci4uLicpO1xuXG4gICAgY29uc3Qgc3JjRGlyID0gcGF0aC5qb2luKHByb2plY3RQYXRoLCAnc3JjJyk7XG4gICAgY29uc3Qgc2VhcmNoRGlyID0gZnMuZXhpc3RzU3luYyhzcmNEaXIpID8gc3JjRGlyIDogcHJvamVjdFBhdGg7XG4gICAgY29uc3Qgcm91dGVyRmlsZSA9IFJlYWN0UGF0Y2hlci5maW5kUm91dGVyRmlsZShzZWFyY2hEaXIpO1xuXG4gICAgaWYgKCFyb3V0ZXJGaWxlKSB7XG4gICAgICBsb2dnZXIud2Fybign4pqg77iPICBSZWFjdCBSb3V0ZXIgZGV0ZWN0ZWQgYnV0IDxCcm93c2VyUm91dGVyPiB1c2FnZSBub3QgZm91bmQuJyk7XG4gICAgICBsb2dnZXIud2FybignICAgRW5zdXJlIHlvdSBhZGQgYGJhc2VuYW1lPXtpbXBvcnQubWV0YS5lbnYuQkFTRV9VUkx9YCB0byB5b3VyIFJvdXRlciBtYW51YWxseS4nKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBsZXQgY29udGVudCA9IGZzLnJlYWRGaWxlU3luYyhyb3V0ZXJGaWxlLCAndXRmLTgnKTtcblxuICAgIC8vIE1hdGNoIDxCcm93c2VyUm91dGVyPiB0aGF0IGRvZXMgTk9UIGFscmVhZHkgaGF2ZSBiYXNlbmFtZVxuICAgIGNvbnN0IHRhZ1JlZ2V4ID0gLzxCcm93c2VyUm91dGVyKD8hW14+XSpiYXNlbmFtZT0pKFxcc3w+KS87XG5cbiAgICBpZiAoIXRhZ1JlZ2V4LnRlc3QoY29udGVudCkpIHtcbiAgICAgIGxvZ2dlci5pbmZvKCdSZWFjdCBSb3V0ZXIgYWxyZWFkeSBjb25maWd1cmVkIChiYXNlbmFtZSBwcm9wIGZvdW5kKScpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIEluamVjdCBiYXNlbmFtZVxuICAgIGNvbnRlbnQgPSBjb250ZW50LnJlcGxhY2UoXG4gICAgICAvPEJyb3dzZXJSb3V0ZXIoXFxzfD4pLyxcbiAgICAgICc8QnJvd3NlclJvdXRlciBiYXNlbmFtZT17aW1wb3J0Lm1ldGEuZW52LkJBU0VfVVJMfSQxJ1xuICAgICk7XG4gICAgZnMud3JpdGVGaWxlU3luYyhyb3V0ZXJGaWxlLCBjb250ZW50LCAndXRmLTgnKTtcbiAgICBsb2dnZXIuc3VjY2VzcyhgUGF0Y2hlZCBSZWFjdCBSb3V0ZXIgYmFzZW5hbWUgaW4gJHtwYXRoLmJhc2VuYW1lKHJvdXRlckZpbGUpfWApO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldmVydCB0aGUgYmFzZW5hbWUgcGF0Y2ggKHJlc3RvcmUgb3JpZ2luYWwgc3RhdGUgYWZ0ZXIgYnVpbGQpLlxuICAgKi9cbiAgc3RhdGljIGFzeW5jIHJldmVydChwcm9qZWN0UGF0aDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgcGtnUGF0aCA9IHBhdGguam9pbihwcm9qZWN0UGF0aCwgJ3BhY2thZ2UuanNvbicpO1xuICAgIGlmICghZnMuZXhpc3RzU3luYyhwa2dQYXRoKSkgcmV0dXJuO1xuXG4gICAgY29uc3QgcGtnID0gSlNPTi5wYXJzZShmcy5yZWFkRmlsZVN5bmMocGtnUGF0aCwgJ3V0Zi04JykpO1xuICAgIGNvbnN0IGRlcHMgPSB7IC4uLnBrZy5kZXBlbmRlbmNpZXMsIC4uLnBrZy5kZXZEZXBlbmRlbmNpZXMgfTtcbiAgICBpZiAoIWRlcHNbJ3JlYWN0LXJvdXRlci1kb20nXSkgcmV0dXJuO1xuXG4gICAgY29uc3Qgc3JjRGlyID0gcGF0aC5qb2luKHByb2plY3RQYXRoLCAnc3JjJyk7XG4gICAgY29uc3Qgc2VhcmNoRGlyID0gZnMuZXhpc3RzU3luYyhzcmNEaXIpID8gc3JjRGlyIDogcHJvamVjdFBhdGg7XG4gICAgY29uc3Qgcm91dGVyRmlsZSA9IFJlYWN0UGF0Y2hlci5maW5kUm91dGVyRmlsZShzZWFyY2hEaXIpO1xuXG4gICAgaWYgKCFyb3V0ZXJGaWxlKSByZXR1cm47XG5cbiAgICBsZXQgY29udGVudCA9IGZzLnJlYWRGaWxlU3luYyhyb3V0ZXJGaWxlLCAndXRmLTgnKTtcblxuICAgIC8vIFJlbW92ZSB0aGUgaW5qZWN0ZWQgYmFzZW5hbWUgcHJvcFxuICAgIGNvbnN0IGluamVjdGVkUGF0dGVybiA9IC88QnJvd3NlclJvdXRlciBiYXNlbmFtZT1cXHtpbXBvcnRcXC5tZXRhXFwuZW52XFwuQkFTRV9VUkxcXH0oXFxzfD4pLztcbiAgICBpZiAoaW5qZWN0ZWRQYXR0ZXJuLnRlc3QoY29udGVudCkpIHtcbiAgICAgIGNvbnRlbnQgPSBjb250ZW50LnJlcGxhY2UoaW5qZWN0ZWRQYXR0ZXJuLCAnPEJyb3dzZXJSb3V0ZXIkMScpO1xuICAgICAgZnMud3JpdGVGaWxlU3luYyhyb3V0ZXJGaWxlLCBjb250ZW50LCAndXRmLTgnKTtcbiAgICAgIGxvZ2dlci5kaW0oJ1JldmVydGVkIFJlYWN0IFJvdXRlciBiYXNlbmFtZSBwYXRjaCcpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZWN1cnNpdmVseSBmaW5kIHRoZSBmaWxlIGNvbnRhaW5pbmcgPEJyb3dzZXJSb3V0ZXI+IHVzYWdlLlxuICAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgZmluZFJvdXRlckZpbGUoZGlyOiBzdHJpbmcpOiBzdHJpbmcgfCBudWxsIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgZW50cmllcyA9IGZzLnJlYWRkaXJTeW5jKGRpcik7XG5cbiAgICAgIGZvciAoY29uc3QgZW50cnkgb2YgZW50cmllcykge1xuICAgICAgICBjb25zdCBmdWxsUGF0aCA9IHBhdGguam9pbihkaXIsIGVudHJ5KTtcbiAgICAgICAgY29uc3Qgc3RhdCA9IGZzLnN0YXRTeW5jKGZ1bGxQYXRoKTtcblxuICAgICAgICBpZiAoc3RhdC5pc0RpcmVjdG9yeSgpKSB7XG4gICAgICAgICAgLy8gU2tpcCBub24tc291cmNlIGRpcmVjdG9yaWVzXG4gICAgICAgICAgaWYgKGVudHJ5LnN0YXJ0c1dpdGgoJy4nKSB8fCBlbnRyeSA9PT0gJ25vZGVfbW9kdWxlcycgfHwgZW50cnkgPT09ICdkaXN0JyB8fFxuICAgICAgICAgICAgICBlbnRyeSA9PT0gJ2J1aWxkJyB8fCBlbnRyeSA9PT0gJ3ZlbmRvcicgfHwgZW50cnkgPT09ICdwdWJsaWMnKSBjb250aW51ZTtcbiAgICAgICAgICBjb25zdCBmb3VuZCA9IFJlYWN0UGF0Y2hlci5maW5kUm91dGVyRmlsZShmdWxsUGF0aCk7XG4gICAgICAgICAgaWYgKGZvdW5kKSByZXR1cm4gZm91bmQ7XG4gICAgICAgIH0gZWxzZSBpZiAoL14obWFpbnxpbmRleHxsYXlvdXR8aG9tZXxBcHApXFwuKHRzeHxqc3h8anMpJC9pLnRlc3QoZW50cnkpKSB7XG4gICAgICAgICAgY29uc3QgY29udGVudCA9IGZzLnJlYWRGaWxlU3luYyhmdWxsUGF0aCwgJ3V0Zi04Jyk7XG4gICAgICAgICAgaWYgKGNvbnRlbnQuaW5jbHVkZXMoJ3JlYWN0LXJvdXRlci1kb20nKSAmJiBjb250ZW50LmluY2x1ZGVzKCc8QnJvd3NlclJvdXRlcicpKSB7XG4gICAgICAgICAgICByZXR1cm4gZnVsbFBhdGg7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBjYXRjaCB7XG4gICAgICAvLyBJZ25vcmUgcmVhZCBlcnJvcnNcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -219,4 +219,4 @@ const createUploadService = () => {
|
|
|
219
219
|
return new UploadService();
|
|
220
220
|
};
|
|
221
221
|
exports.createUploadService = createUploadService;
|
|
222
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBsb2FkU2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZXJ2aWNlcy91cGxvYWRTZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLGtEQUFrRDtBQUNsRCwwREFBaUM7QUFDakMsNENBQW9CO0FBRXBCLDRDQUE0QztBQUM1Qyw0Q0FBeUM7QUFvRXpDLE1BQWEsYUFBYTtJQUl4QjtRQUNFLE1BQU0sTUFBTSxHQUFHLElBQUEsa0JBQVMsR0FBRSxDQUFDO1FBQzNCLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ3ZDLE1BQU0sSUFBSSxLQUFLLENBQUMsOENBQThDLENBQUMsQ0FBQztRQUNsRSxDQUFDO1FBQ0QsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDO1FBQ2xDLElBQUksQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQztJQUM1QixDQUFDO0lBRUQsS0FBSyxDQUFDLE1BQU0sQ0FBQyxPQUFzQjtRQUNqQyxNQUFNLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxrQkFBa0IsRUFBRSxnQkFBZ0IsRUFBRSxXQUFXLEVBQUUsR0FBRyxPQUFPLENBQUM7UUFFN0gsSUFBSSxDQUFDLFlBQUUsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUM1QixPQUFPO2dCQUNMLE9BQU8sRUFBRSxLQUFLO2dCQUNkLEtBQUssRUFBRSx1QkFBdUIsT0FBTyxFQUFFO2FBQ3hDLENBQUM7UUFDSixDQUFDO1FBRUQsTUFBTSxRQUFRLEdBQUcsSUFBSSxtQkFBUSxFQUFFLENBQUM7UUFDaEMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsWUFBRSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7UUFDdEQsUUFB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QUFPLENBQUM7Z0JBQzdELE9BQU87b0JBQ0wsT0FBTyxFQUFFLEtBQUs7b0JBQ2QsS0FBSyxFQUFFLG9CQUFvQixPQUFPLEVBQUU7aUJBQ3JDLENBQUM7WUFDSixDQUFDO1lBRUQsT0FBTztnQkFDTCxPQUFPLEVBQUUsS0FBSztnQkFDZCxLQUFLLEVBQUUsS0FBSyxZQUFZLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsZUFBZTthQUNoRSxDQUFDO1FBQ0osQ0FBQztJQUNILENBQUM7Q0FDRjtBQXhQRCxzQ0F3UEM7QUFFTSxNQUFNLG1CQUFtQixHQUFHLEdBQWtCLEVBQUU7SUFDckQsT0FBTyxJQUFJLGFBQWEsRUFBRSxDQUFDO0FBQzdCLENBQUMsQ0FBQztBQUZXLFFBQUEsbUJBQW1CLHVCQUU5QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBheGlvcywgeyBBeGlvc1Byb2dyZXNzRXZlbnQgfSBmcm9tICdheGlvcyc7XG5pbXBvcnQgRm9ybURhdGEgZnJvbSAnZm9ybS1kYXRhJztcbmltcG9ydCBmcyBmcm9tICdmcyc7XG5pbXBvcnQgeyBQcm9qZWN0VHlwZSwgQnVpbGRNb2RlIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgZ2V0Q29uZmlnIH0gZnJvbSAnLi4vdXRpbHMvY29uZmlnJztcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gJy4uL3V0aWxzL2xvZ2dlcic7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVXBsb2FkT3B0aW9ucyB7XG4gIHppcFBhdGg6IHN0cmluZztcbiAgcHJvamVjdE5hbWU6IHN0cmluZztcbiAgcHJvamVjdFR5cGU6IFByb2plY3RUeXBlO1xuICB2ZXJzaW9uPzogc3RyaW5nO1xuICBidWlsZE1vZGU6IEJ1aWxkTW9kZTtcbiAgY29uZmlybVNlcnZlckJ1aWxkPzogYm9vbGVhbjtcbiAgLy8gRU5WIG11dGFiaWxpdHkgdHJhY2tpbmdcbiAgZGVwbG95bWVudFNvdXJjZT86ICd1aScgfCAnY2xpJztcbiAgZW52SW5qZWN0ZWQ/OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFVwbG9hZFJlc3VsdCB7XG4gIHN1Y2Nlc3M6IGJvb2xlYW47XG4gIHByb2plY3RJZD86IHN0cmluZztcbiAgZGVwbG95bWVudElkPzogc3RyaW5nO1xuICBlcnJvcj86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEZXBsb3ltZW50U3RhdHVzIHtcbiAgc3RhdHVzOiAncXVldWVkJyB8ICdidWlsZGluZycgfCAnZGVwbG95aW5nJyB8ICdzdWNjZXNzJyB8ICdmYWlsZWQnO1xuICBwcm9ncmVzcz86IG51bWJlcjtcbiAgbG9ncz86IHN0cmluZztcbiAgZXJyb3I/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGVwbG95V2FybmluZyB7XG4gIGxldmVsOiAnaW5mbycgfCAnd2FybmluZycgfCAnY3JpdGljYWwnO1xuICBtZXNzYWdlOiBzdHJpbmc7XG4gIGNvZGU6IHN0cmluZztcbn1cblxuLyoqXG4gKiBBbmFseXNpcyByZXN1bHQgZnJvbSBiYWNrZW5kXG4gKiBCYWNrZW5kIHRydXN0cyB1c2VyLWRlY2xhcmVkIHR5cGUgLSBubyBhdXRvLWRldGVjdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIERlcGxveUFuYWx5c2lzIHtcbiAgLy8gVXNlcidzIGRlY2xhcmVkIHR5cGUgKHRydXN0ZWQsIG5vdCB2YWxpZGF0ZWQpXG4gIGRlY2xhcmVkVHlwZTogUHJvamVjdFR5cGU7XG4gIC8vIFBhY2thZ2Ugc3RhdGVcbiAgaGFzUGFja2FnZUpzb246IGJvb2xlYW47XG4gIGhhc0J1aWxkU2NyaXB0OiBib29sZWFuO1xuICBoYXNTdGFydFNjcmlwdDogYm9vbGVhbjtcbiAgLy8gQnVpbGQgc3RhdGUgKGdlbmVyaWMgZGV0ZWN0aW9uKVxuICBoYXNCdWlsZE91dHB1dDogYm9vbGVhbjtcbiAgYnVpbGRPdXRwdXREaXI6IHN0cmluZyB8IG51bGw7XG4gIHJlcXVpcmVzQnVpbGQ6IGJvb2xlYW47XG4gIC8vIFByZWJ1aWx0IGRldGVjdGlvbiAoZ2VuZXJpYylcbiAgaXNQcmVidWlsdFByb2plY3Q6IGJvb2xlYW47XG4gIC8vIFN0YXRpYyBzaXRlIGRldGVjdGlvbiAoZ2VuZXJpYylcbiAgaXNTdGF0aWNTaXRlOiBib29sZWFuO1xuICAvLyBEZXBsb3ltZW50IHN0cmF0ZWd5XG4gIHN0cmF0ZWd5OiAnc3RhdGljJyB8ICdidWlsZC1hbmQtc2VydmUnIHwgJ3NlcnZlLXByZWJ1aWx0JztcbiAgc2VydmVNZXRob2Q6ICdjYWRkeS1zdGF0aWMnIHwgJ3BtMi1wcm94eSc7XG4gIC8vIFdhcm5pbmdzXG4gIHdhcm5pbmdzOiBEZXBsb3lXYXJuaW5nW107XG4gIHJlcXVpcmVzQ29uZmlybWF0aW9uOiBib29sZWFuO1xuICBjb25maXJtYXRpb25SZWFzb24/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQW5hbHl6ZVJlc3VsdCB7XG4gIHN1Y2Nlc3M6IGJvb2xlYW47XG4gIGFuYWx5c2lzPzogRGVwbG95QW5hbHlzaXM7XG4gIGVycm9yPzogc3RyaW5nO1xufVxuXG5leHBvcnQgY2xhc3MgVXBsb2FkU2VydmljZSB7XG4gIHByaXZhdGUgc2VydmVyVXJsOiBzdHJpbmc7XG4gIHByaXZhdGUgdG9rZW46IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCBjb25maWcgPSBnZXRDb25maWcoKTtcbiAgICBpZiAoIWNvbmZpZy5zZXJ2ZXJVcmwgfHwgIWNvbmZpZy50b2tlbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDTEkgbm90IGNvbmZpZ3VyZWQuIFJ1biBcInJ1bndheSBpbml0XCIgZmlyc3QuJyk7XG4gICAgfVxuICAgIHRoaXMuc2VydmVyVXJsID0gY29uZmlnLnNlcnZlclVybDtcbiAgICB0aGlzLnRva2VuID0gY29uZmlnLnRva2VuO1xuICB9XG5cbiAgYXN5bmMgdXBsb2FkKG9wdGlvbnM6IFVwbG9hZE9wdGlvbnMpOiBQcm9taXNlPFVwbG9hZFJlc3VsdD4ge1xuICAgIGNvbnN0IHsgemlwUGF0aCwgcHJvamVjdE5hbWUsIHByb2plY3RUeXBlLCB2ZXJzaW9uLCBidWlsZE1vZGUsIGNvbmZpcm1TZXJ2ZXJCdWlsZCwgZGVwbG95bWVudFNvdXJjZSwgZW52SW5qZWN0ZWQgfSA9IG9wdGlvbnM7XG5cbiAgICBpZiAoIWZzLmV4aXN0c1N5bmMoemlwUGF0aCkpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICBlcnJvcjogYFppcCBmaWxlIG5vdCBmb3VuZDogJHt6aXBQYXRofWAsXG4gICAgICB9O1xuICAgIH1cblxuICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XG4gICAgZm9ybURhdGEuYXBwZW5kKCdmaWxlJywgZnMuY3JlYXRlUmVhZFN0cmVhbSh6aXBQYXRoKSk7XG4gICAgZm9ybURhdGEuYXBwZW5kKCduYW1lJywgcHJvamVjdE5hbWUpO1xuICAgIGZvcm1EYXRhLmFwcGVuZCgndHlwZScsIHByb2plY3RUeXBlKTtcbiAgICBmb3JtRGF0YS5hcHBlbmQoJ2J1aWxkTW9kZScsIGJ1aWxkTW9kZSk7XG4gICAgaWYgKHZlcnNpb24pIHtcbiAgICAgIGZvcm1EYXRhLmFwcGVuZCgndmVyc2lvbicsIHZlcnNpb24pO1xuICAgIH1cbiAgICBpZiAoY29uZmlybVNlcnZlckJ1aWxkKSB7XG4gICAgICBmb3JtRGF0YS5hcHBlbmQoJ2NvbmZpcm1TZXJ2ZXJCdWlsZCcsICd0cnVlJyk7XG4gICAgfVxuICAgIC8vIEVOViBtdXRhYmlsaXR5IHRyYWNraW5nXG4gICAgaWYgKGRlcGxveW1lbnRTb3VyY2UpIHtcbiAgICAgIGZvcm1EYXRhLmFwcGVuZCgnZGVwbG95bWVudFNvdXJjZScsIGRlcGxveW1lbnRTb3VyY2UpO1xuICAgIH1cbiAgICBpZiAoZW52SW5qZWN0ZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgZm9ybURhdGEuYXBwZW5kKCdlbnZJbmplY3RlZCcsIGVudkluamVjdGVkID8gJ3RydWUnIDogJ2ZhbHNlJyk7XG4gICAgfVxuXG4gICAgLy8gQ2hvb3NlIGVuZHBvaW50IGJhc2VkIG9uIGJ1aWxkIG1vZGVcbiAgICBjb25zdCBlbmRwb2ludCA9IGJ1aWxkTW9kZSA9PT0gJ2xvY2FsJ1xuICAgICAgPyAnL2FwaS9wcm9qZWN0L2RlcGxveS1wcmVidWlsdCdcbiAgICAgIDogJy9hcGkvcHJvamVjdC9kZXBsb3knO1xuXG4gICAgbG9nZ2VyLmluZm8oYFVwbG9hZGluZyB0byAke3RoaXMuc2VydmVyVXJsfSR7ZW5kcG9pbnR9Li4uYCk7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBheGlvcy5wb3N0KFxuICAgICAgICBgJHt0aGlzLnNlcnZlclVybH0ke2VuZHBvaW50fWAsXG4gICAgICAgIGZvcm1EYXRhLFxuICAgICAgICB7XG4gICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgLi4uZm9ybURhdGEuZ2V0SGVhZGVycygpLFxuICAgICAgICAgICAgQXV0aG9yaXphdGlvbjogYEJlYXJlciAke3RoaXMudG9rZW59YCxcbiAgICAgICAgICB9LFxuICAgICAgICAgIG1heEJvZHlMZW5ndGg6IEluZmluaXR5LFxuICAgICAgICAgIG1heENvbnRlbnRMZW5ndGg6IEluZmluaXR5LFxuICAgICAgICAgIHRpbWVvdXQ6IDMwMDAwMCwgLy8gNSBtaW51dGVzXG4gICAgICAgICAgb25VcGxvYWRQcm9ncmVzczogKHByb2dyZXNzRXZlbnQ6IEF4aW9zUHJvZ3Jlc3NFdmVudCkgPT4ge1xuICAgICAgICAgICAgaWYgKHByb2dyZXNzRXZlbnQudG90YWwpIHtcbiAgICAgICAgICAgICAgY29uc3QgcGVyY2VudCA9IE1hdGgucm91bmQoKHByb2dyZXNzRXZlbnQubG9hZGVkICogMTAwKSAvIHByb2dyZXNzRXZlbnQudG90YWwpO1xuICAgICAgICAgICAgICBwcm9jZXNzLnN0ZG91dC53cml0ZShgXFxyICBVcGxvYWRpbmc6ICR7cGVyY2VudH0lYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgfVxuICAgICAgKTtcblxuICAgICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUoJ1xcbicpO1xuXG4gICAgICBpZiAocmVzcG9uc2UuZGF0YS5zdWNjZXNzKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgc3VjY2VzczogdHJ1ZSxcbiAgICAgICAgICBwcm9qZWN0SWQ6IHJlc3BvbnNlLmRhdGEuZGF0YT8ucHJvamVjdElkLFxuICAgICAgICAgIGRlcGxveW1lbnRJZDogcmVzcG9uc2UuZGF0YS5kYXRhPy5kZXBsb3ltZW50SWQsXG4gICAgICAgIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICAgIGVycm9yOiByZXNwb25zZS5kYXRhLmVycm9yIHx8ICdVbmtub3duIGVycm9yJyxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUoJ1xcbicpO1xuXG4gICAgICBpZiAoYXhpb3MuaXNBeGlvc0Vycm9yKGVycm9yKSkge1xuICAgICAgICBjb25zdCBtZXNzYWdlID0gZXJyb3IucmVzcG9uc2U/LmRhdGE/LmVycm9yIHx8IGVycm9yLm1lc3NhZ2U7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgICAgZXJyb3I6IGBVcGxvYWQgZmFpbGVkOiAke21lc3NhZ2V9YCxcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgIGVycm9yOiBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6ICdVbmtub3duIGVycm9yJyxcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZ2V0RGVwbG95bWVudFN0YXR1cyhkZXBsb3ltZW50SWQ6IHN0cmluZyk6IFByb21pc2U8RGVwbG95bWVudFN0YXR1cz4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGF4aW9zLmdldChcbiAgICAgICAgYCR7dGhpcy5zZXJ2ZXJVcmx9L2FwaS9wcm9qZWN0L3N0YXR1cy8ke2RlcGxveW1lbnRJZH1gLFxuICAgICAgICB7XG4gICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgQXV0aG9yaXphdGlvbjogYEJlYXJlciAke3RoaXMudG9rZW59YCxcbiAgICAgICAgICB9LFxuICAgICAgICB9XG4gICAgICApO1xuXG4gICAgICByZXR1cm4gcmVzcG9uc2UuZGF0YS5kYXRhO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoYXhpb3MuaXNBeGlvc0Vycm9yKGVycm9yKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoZXJyb3IucmVzcG9uc2U/LmRhdGE/LmVycm9yIHx8IGVycm9yLm1lc3NhZ2UpO1xuICAgICAgfVxuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgcG9sbERlcGxveW1lbnRTdGF0dXMoXG4gICAgZGVwbG95bWVudElkOiBzdHJpbmcsXG4gICAgb25VcGRhdGU6IChzdGF0dXM6IERlcGxveW1lbnRTdGF0dXMpID0+IHZvaWQsXG4gICAgdGltZW91dE1zOiBudW1iZXIgPSAzMDAwMDAgLy8gNSBtaW51dGVzXG4gICk6IFByb21pc2U8RGVwbG95bWVudFN0YXR1cz4ge1xuICAgIGNvbnN0IHN0YXJ0VGltZSA9IERhdGUubm93KCk7XG4gICAgY29uc3QgcG9sbEludGVydmFsID0gMjAwMDsgLy8gMiBzZWNvbmRzXG5cbiAgICB3aGlsZSAoRGF0ZS5ub3coKSAtIHN0YXJ0VGltZSA8IHRpbWVvdXRNcykge1xuICAgICAgY29uc3Qgc3RhdHVzID0gYXdhaXQgdGhpcy5nZXREZXBsb3ltZW50U3RhdHVzKGRlcGxveW1lbnRJZCk7XG4gICAgICBvblVwZGF0ZShzdGF0dXMpO1xuXG4gICAgICBpZiAoc3RhdHVzLnN0YXR1cyA9PT0gJ3N1Y2Nlc3MnIHx8IHN0YXR1cy5zdGF0dXMgPT09ICdmYWlsZWQnKSB7XG4gICAgICAgIHJldHVybiBzdGF0dXM7XG4gICAgICB9XG5cbiAgICAgIGF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT4gc2V0VGltZW91dChyZXNvbHZlLCBwb2xsSW50ZXJ2YWwpKTtcbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0RlcGxveW1lbnQgdGltZWQgb3V0Jyk7XG4gIH1cblxuICBhc3luYyBsb2dpbih1c2VybmFtZTogc3RyaW5nLCBwYXNzd29yZDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBheGlvcy5wb3N0KFxuICAgICAgICBgJHt0aGlzLnNlcnZlclVybH0vYXBpL2F1dGgvbG9naW5gLFxuICAgICAgICB7IHVzZXJuYW1lLCBwYXNzd29yZCB9LFxuICAgICAgICB7XG4gICAgICAgICAgdGltZW91dDogMTAwMDAsXG4gICAgICAgIH1cbiAgICAgICk7XG5cbiAgICAgIGlmIChyZXNwb25zZS5kYXRhLnN1Y2Nlc3MgJiYgcmVzcG9uc2UuZGF0YS5kYXRhPy50b2tlbikge1xuICAgICAgICByZXR1cm4gcmVzcG9uc2UuZGF0YS5kYXRhLnRva2VuO1xuICAgICAgfVxuXG4gICAgICB0aHJvdyBuZXcgRXJyb3IocmVzcG9uc2UuZGF0YS5lcnJvciB8fCAnTG9naW4gZmFpbGVkJyk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmIChheGlvcy5pc0F4aW9zRXJyb3IoZXJyb3IpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihlcnJvci5yZXNwb25zZT8uZGF0YT8uZXJyb3IgfHwgZXJyb3IubWVzc2FnZSk7XG4gICAgICB9XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH1cblxuICBhc3luYyBsaXN0UHJvamVjdHMoKTogUHJvbWlzZTxBcnJheTx7IGlkOiBzdHJpbmc7IG5hbWU6IHN0cmluZzsgdHlwZTogUHJvamVjdFR5cGU7IHN0YXR1czogc3RyaW5nIH0+PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXhpb3MuZ2V0KFxuICAgICAgICBgJHt0aGlzLnNlcnZlclVybH0vYXBpL3Byb2plY3RgLFxuICAgICAgICB7XG4gICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgQXV0aG9yaXphdGlvbjogYEJlYXJlciAke3RoaXMudG9rZW59YCxcbiAgICAgICAgICB9LFxuICAgICAgICB9XG4gICAgICApO1xuXG4gICAgICByZXR1cm4gcmVzcG9uc2UuZGF0YS5kYXRhIHx8IFtdO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoYXhpb3MuaXNBeGlvc0Vycm9yKGVycm9yKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoZXJyb3IucmVzcG9uc2U/LmRhdGE/LmVycm9yIHx8IGVycm9yLm1lc3NhZ2UpO1xuICAgICAgfVxuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEFuYWx5emUgYSBwYWNrYWdlIGJlZm9yZSBkZXBsb3ltZW50IHRvIGdldCBzZXJ2ZXIgd2FybmluZ3MgYW5kIHJlY29tbWVuZGF0aW9uc1xuICAgKi9cbiAgLyoqXG4gICAqIEFuYWx5emUgYSBwYWNrYWdlIGJlZm9yZSBkZXBsb3ltZW50XG4gICAqIEBwYXJhbSB6aXBQYXRoIC0gUGF0aCB0byB0aGUgemlwIGZpbGVcbiAgICogQHBhcmFtIGRlY2xhcmVkVHlwZSAtIFJFUVVJUkVEIC0gVXNlci1zZWxlY3RlZCBwcm9qZWN0IHR5cGUgKGJhY2tlbmQgdHJ1c3RzIHRoaXMpXG4gICAqL1xuICBhc3luYyBhbmFseXplUGFja2FnZSh6aXBQYXRoOiBzdHJpbmcsIGRlY2xhcmVkVHlwZTogUHJvamVjdFR5cGUpOiBQcm9taXNlPEFuYWx5emVSZXN1bHQ+IHtcbiAgICBpZiAoIWZzLmV4aXN0c1N5bmMoemlwUGF0aCkpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICBlcnJvcjogYFppcCBmaWxlIG5vdCBmb3VuZDogJHt6aXBQYXRofWAsXG4gICAgICB9O1xuICAgIH1cblxuICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XG4gICAgZm9ybURhdGEuYXBwZW5kKCdmaWxlJywgZnMuY3JlYXRlUmVhZFN0cmVhbSh6aXBQYXRoKSk7XG4gICAgZm9ybURhdGEuYXBwZW5kKCd0eXBlJywgZGVjbGFyZWRUeXBlKTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGF4aW9zLnBvc3QoXG4gICAgICAgIGAke3RoaXMuc2VydmVyVXJsfS9hcGkvcHJvamVjdC9hbmFseXplYCxcbiAgICAgICAgZm9ybURhdGEsXG4gICAgICAgIHtcbiAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAuLi5mb3JtRGF0YS5nZXRIZWFkZXJzKCksXG4gICAgICAgICAgICBBdXRob3JpemF0aW9uOiBgQmVhcmVyICR7dGhpcy50b2tlbn1gLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgbWF4Qm9keUxlbmd0aDogSW5maW5pdHksXG4gICAgICAgICAgbWF4Q29udGVudExlbmd0aDogSW5maW5pdHksXG4gICAgICAgICAgdGltZW91dDogNjAwMDAsIC8vIDEgbWludXRlIGZvciBhbmFseXNpc1xuICAgICAgICB9XG4gICAgICApO1xuXG4gICAgICBpZiAocmVzcG9uc2UuZGF0YS5zdWNjZXNzKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgc3VjY2VzczogdHJ1ZSxcbiAgICAgICAgICBhbmFseXNpczogcmVzcG9uc2UuZGF0YS5kYXRhLFxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgICBlcnJvcjogcmVzcG9uc2UuZGF0YS5lcnJvciB8fCAnQW5hbHlzaXMgZmFpbGVkJyxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKGF4aW9zLmlzQXhpb3NFcnJvcihlcnJvcikpIHtcbiAgICAgICAgY29uc3QgbWVzc2FnZSA9IGVycm9yLnJlc3BvbnNlPy5kYXRhPy5lcnJvciB8fCBlcnJvci5tZXNzYWdlO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICAgIGVycm9yOiBgQW5hbHlzaXMgZmFpbGVkOiAke21lc3NhZ2V9YCxcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgIGVycm9yOiBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6ICdVbmtub3duIGVycm9yJyxcbiAgICAgIH07XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVVcGxvYWRTZXJ2aWNlID0gKCk6IFVwbG9hZFNlcnZpY2UgPT4ge1xuICByZXR1cm4gbmV3IFVwbG9hZFNlcnZpY2UoKTtcbn07XG4iXX0=
|
|
222
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBsb2FkU2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZXJ2aWNlcy91cGxvYWRTZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLGtEQUFrRDtBQUNsRCwwREFBaUM7QUFDakMsNENBQW9CO0FBRXBCLDRDQUE0QztBQUM1Qyw0Q0FBeUM7QUFxRXpDLE1BQWEsYUFBYTtJQUl4QjtRQUNFLE1BQU0sTUFBTSxHQUFHLElBQUEsa0JBQVMsR0FBRSxDQUFDO1FBQzNCLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ3ZDLE1BQU0sSUFBSSxLQUFLLENBQUMsOENBQThDLENBQUMsQ0FBQztRQUNsRSxDQUFDO1FBQ0QsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDO1FBQ2xDLElBQUksQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQztJQUM1QixDQUFDO0lBRUQsS0FBSyxDQUFDLE1BQU0sQ0FBQyxPQUFzQjtRQUNqQyxNQUFNLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxrQkFBa0IsRUFBRSxnQkFBZ0IsRUFBRSxXQUFXLEVBQUUsR0FBRyxPQUFPLENBQUM7UUFFN0gsSUFBSSxDQUFDLFlBQUUsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUM1QixPQUFPO2dCQUNMLE9BQU8sRUFBRSxLQUFLO2dCQUNkLEtBQUssRUFBRSx1QkFBdUIsT0FBTyxFQUFFO2FBQ3hDLENBQUM7UUFDSixDQUFDO1FBRUQsTUFBTSxRQUFRLEdBQUcsSUFBSSxtQkFBUSxFQUFFLENBQUM7UUFDaEMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsWUFBRSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7UUFDdEQsUUFB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QUFPLENBQUM7Z0JBQzdELE9BQU87b0JBQ0wsT0FBTyxFQUFFLEtBQUs7b0JBQ2QsS0FBSyxFQUFFLG9CQUFvQixPQUFPLEVBQUU7aUJBQ3JDLENBQUM7WUFDSixDQUFDO1lBRUQsT0FBTztnQkFDTCxPQUFPLEVBQUUsS0FBSztnQkFDZCxLQUFLLEVBQUUsS0FBSyxZQUFZLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsZUFBZTthQUNoRSxDQUFDO1FBQ0osQ0FBQztJQUNILENBQUM7Q0FDRjtBQXhQRCxzQ0F3UEM7QUFFTSxNQUFNLG1CQUFtQixHQUFHLEdBQWtCLEVBQUU7SUFDckQsT0FBTyxJQUFJLGFBQWEsRUFBRSxDQUFDO0FBQzdCLENBQUMsQ0FBQztBQUZXLFFBQUEsbUJBQW1CLHVCQUU5QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBheGlvcywgeyBBeGlvc1Byb2dyZXNzRXZlbnQgfSBmcm9tICdheGlvcyc7XG5pbXBvcnQgRm9ybURhdGEgZnJvbSAnZm9ybS1kYXRhJztcbmltcG9ydCBmcyBmcm9tICdmcyc7XG5pbXBvcnQgeyBQcm9qZWN0VHlwZSwgQnVpbGRNb2RlIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgZ2V0Q29uZmlnIH0gZnJvbSAnLi4vdXRpbHMvY29uZmlnJztcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gJy4uL3V0aWxzL2xvZ2dlcic7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVXBsb2FkT3B0aW9ucyB7XG4gIHppcFBhdGg6IHN0cmluZztcbiAgcHJvamVjdE5hbWU6IHN0cmluZztcbiAgcHJvamVjdFR5cGU6IFByb2plY3RUeXBlO1xuICB2ZXJzaW9uPzogc3RyaW5nO1xuICBidWlsZE1vZGU6IEJ1aWxkTW9kZTtcbiAgY29uZmlybVNlcnZlckJ1aWxkPzogYm9vbGVhbjtcbiAgLy8gRU5WIG11dGFiaWxpdHkgdHJhY2tpbmdcbiAgZGVwbG95bWVudFNvdXJjZT86ICd1aScgfCAnY2xpJztcbiAgZW52SW5qZWN0ZWQ/OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFVwbG9hZFJlc3VsdCB7XG4gIHN1Y2Nlc3M6IGJvb2xlYW47XG4gIHByb2plY3RJZD86IHN0cmluZztcbiAgZGVwbG95bWVudElkPzogc3RyaW5nO1xuICBlcnJvcj86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEZXBsb3ltZW50U3RhdHVzIHtcbiAgc3RhdHVzOiAncXVldWVkJyB8ICdidWlsZGluZycgfCAnZGVwbG95aW5nJyB8ICdzdWNjZXNzJyB8ICdmYWlsZWQnO1xuICBwcm9ncmVzcz86IG51bWJlcjtcbiAgbG9ncz86IHN0cmluZztcbiAgZXJyb3I/OiBzdHJpbmc7XG4gIGhlYWx0aFdhcm5pbmc/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGVwbG95V2FybmluZyB7XG4gIGxldmVsOiAnaW5mbycgfCAnd2FybmluZycgfCAnY3JpdGljYWwnO1xuICBtZXNzYWdlOiBzdHJpbmc7XG4gIGNvZGU6IHN0cmluZztcbn1cblxuLyoqXG4gKiBBbmFseXNpcyByZXN1bHQgZnJvbSBiYWNrZW5kXG4gKiBCYWNrZW5kIHRydXN0cyB1c2VyLWRlY2xhcmVkIHR5cGUgLSBubyBhdXRvLWRldGVjdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIERlcGxveUFuYWx5c2lzIHtcbiAgLy8gVXNlcidzIGRlY2xhcmVkIHR5cGUgKHRydXN0ZWQsIG5vdCB2YWxpZGF0ZWQpXG4gIGRlY2xhcmVkVHlwZTogUHJvamVjdFR5cGU7XG4gIC8vIFBhY2thZ2Ugc3RhdGVcbiAgaGFzUGFja2FnZUpzb246IGJvb2xlYW47XG4gIGhhc0J1aWxkU2NyaXB0OiBib29sZWFuO1xuICBoYXNTdGFydFNjcmlwdDogYm9vbGVhbjtcbiAgLy8gQnVpbGQgc3RhdGUgKGdlbmVyaWMgZGV0ZWN0aW9uKVxuICBoYXNCdWlsZE91dHB1dDogYm9vbGVhbjtcbiAgYnVpbGRPdXRwdXREaXI6IHN0cmluZyB8IG51bGw7XG4gIHJlcXVpcmVzQnVpbGQ6IGJvb2xlYW47XG4gIC8vIFByZWJ1aWx0IGRldGVjdGlvbiAoZ2VuZXJpYylcbiAgaXNQcmVidWlsdFByb2plY3Q6IGJvb2xlYW47XG4gIC8vIFN0YXRpYyBzaXRlIGRldGVjdGlvbiAoZ2VuZXJpYylcbiAgaXNTdGF0aWNTaXRlOiBib29sZWFuO1xuICAvLyBEZXBsb3ltZW50IHN0cmF0ZWd5XG4gIHN0cmF0ZWd5OiAnc3RhdGljJyB8ICdidWlsZC1hbmQtc2VydmUnIHwgJ3NlcnZlLXByZWJ1aWx0JztcbiAgc2VydmVNZXRob2Q6ICdjYWRkeS1zdGF0aWMnIHwgJ3BtMi1wcm94eSc7XG4gIC8vIFdhcm5pbmdzXG4gIHdhcm5pbmdzOiBEZXBsb3lXYXJuaW5nW107XG4gIHJlcXVpcmVzQ29uZmlybWF0aW9uOiBib29sZWFuO1xuICBjb25maXJtYXRpb25SZWFzb24/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQW5hbHl6ZVJlc3VsdCB7XG4gIHN1Y2Nlc3M6IGJvb2xlYW47XG4gIGFuYWx5c2lzPzogRGVwbG95QW5hbHlzaXM7XG4gIGVycm9yPzogc3RyaW5nO1xufVxuXG5leHBvcnQgY2xhc3MgVXBsb2FkU2VydmljZSB7XG4gIHByaXZhdGUgc2VydmVyVXJsOiBzdHJpbmc7XG4gIHByaXZhdGUgdG9rZW46IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCBjb25maWcgPSBnZXRDb25maWcoKTtcbiAgICBpZiAoIWNvbmZpZy5zZXJ2ZXJVcmwgfHwgIWNvbmZpZy50b2tlbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDTEkgbm90IGNvbmZpZ3VyZWQuIFJ1biBcInJ1bndheSBpbml0XCIgZmlyc3QuJyk7XG4gICAgfVxuICAgIHRoaXMuc2VydmVyVXJsID0gY29uZmlnLnNlcnZlclVybDtcbiAgICB0aGlzLnRva2VuID0gY29uZmlnLnRva2VuO1xuICB9XG5cbiAgYXN5bmMgdXBsb2FkKG9wdGlvbnM6IFVwbG9hZE9wdGlvbnMpOiBQcm9taXNlPFVwbG9hZFJlc3VsdD4ge1xuICAgIGNvbnN0IHsgemlwUGF0aCwgcHJvamVjdE5hbWUsIHByb2plY3RUeXBlLCB2ZXJzaW9uLCBidWlsZE1vZGUsIGNvbmZpcm1TZXJ2ZXJCdWlsZCwgZGVwbG95bWVudFNvdXJjZSwgZW52SW5qZWN0ZWQgfSA9IG9wdGlvbnM7XG5cbiAgICBpZiAoIWZzLmV4aXN0c1N5bmMoemlwUGF0aCkpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICBlcnJvcjogYFppcCBmaWxlIG5vdCBmb3VuZDogJHt6aXBQYXRofWAsXG4gICAgICB9O1xuICAgIH1cblxuICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XG4gICAgZm9ybURhdGEuYXBwZW5kKCdmaWxlJywgZnMuY3JlYXRlUmVhZFN0cmVhbSh6aXBQYXRoKSk7XG4gICAgZm9ybURhdGEuYXBwZW5kKCduYW1lJywgcHJvamVjdE5hbWUpO1xuICAgIGZvcm1EYXRhLmFwcGVuZCgndHlwZScsIHByb2plY3RUeXBlKTtcbiAgICBmb3JtRGF0YS5hcHBlbmQoJ2J1aWxkTW9kZScsIGJ1aWxkTW9kZSk7XG4gICAgaWYgKHZlcnNpb24pIHtcbiAgICAgIGZvcm1EYXRhLmFwcGVuZCgndmVyc2lvbicsIHZlcnNpb24pO1xuICAgIH1cbiAgICBpZiAoY29uZmlybVNlcnZlckJ1aWxkKSB7XG4gICAgICBmb3JtRGF0YS5hcHBlbmQoJ2NvbmZpcm1TZXJ2ZXJCdWlsZCcsICd0cnVlJyk7XG4gICAgfVxuICAgIC8vIEVOViBtdXRhYmlsaXR5IHRyYWNraW5nXG4gICAgaWYgKGRlcGxveW1lbnRTb3VyY2UpIHtcbiAgICAgIGZvcm1EYXRhLmFwcGVuZCgnZGVwbG95bWVudFNvdXJjZScsIGRlcGxveW1lbnRTb3VyY2UpO1xuICAgIH1cbiAgICBpZiAoZW52SW5qZWN0ZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgZm9ybURhdGEuYXBwZW5kKCdlbnZJbmplY3RlZCcsIGVudkluamVjdGVkID8gJ3RydWUnIDogJ2ZhbHNlJyk7XG4gICAgfVxuXG4gICAgLy8gQ2hvb3NlIGVuZHBvaW50IGJhc2VkIG9uIGJ1aWxkIG1vZGVcbiAgICBjb25zdCBlbmRwb2ludCA9IGJ1aWxkTW9kZSA9PT0gJ2xvY2FsJ1xuICAgICAgPyAnL2FwaS9wcm9qZWN0L2RlcGxveS1wcmVidWlsdCdcbiAgICAgIDogJy9hcGkvcHJvamVjdC9kZXBsb3knO1xuXG4gICAgbG9nZ2VyLmluZm8oYFVwbG9hZGluZyB0byAke3RoaXMuc2VydmVyVXJsfSR7ZW5kcG9pbnR9Li4uYCk7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBheGlvcy5wb3N0KFxuICAgICAgICBgJHt0aGlzLnNlcnZlclVybH0ke2VuZHBvaW50fWAsXG4gICAgICAgIGZvcm1EYXRhLFxuICAgICAgICB7XG4gICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgLi4uZm9ybURhdGEuZ2V0SGVhZGVycygpLFxuICAgICAgICAgICAgQXV0aG9yaXphdGlvbjogYEJlYXJlciAke3RoaXMudG9rZW59YCxcbiAgICAgICAgICB9LFxuICAgICAgICAgIG1heEJvZHlMZW5ndGg6IEluZmluaXR5LFxuICAgICAgICAgIG1heENvbnRlbnRMZW5ndGg6IEluZmluaXR5LFxuICAgICAgICAgIHRpbWVvdXQ6IDMwMDAwMCwgLy8gNSBtaW51dGVzXG4gICAgICAgICAgb25VcGxvYWRQcm9ncmVzczogKHByb2dyZXNzRXZlbnQ6IEF4aW9zUHJvZ3Jlc3NFdmVudCkgPT4ge1xuICAgICAgICAgICAgaWYgKHByb2dyZXNzRXZlbnQudG90YWwpIHtcbiAgICAgICAgICAgICAgY29uc3QgcGVyY2VudCA9IE1hdGgucm91bmQoKHByb2dyZXNzRXZlbnQubG9hZGVkICogMTAwKSAvIHByb2dyZXNzRXZlbnQudG90YWwpO1xuICAgICAgICAgICAgICBwcm9jZXNzLnN0ZG91dC53cml0ZShgXFxyICBVcGxvYWRpbmc6ICR7cGVyY2VudH0lYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgfVxuICAgICAgKTtcblxuICAgICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUoJ1xcbicpO1xuXG4gICAgICBpZiAocmVzcG9uc2UuZGF0YS5zdWNjZXNzKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgc3VjY2VzczogdHJ1ZSxcbiAgICAgICAgICBwcm9qZWN0SWQ6IHJlc3BvbnNlLmRhdGEuZGF0YT8ucHJvamVjdElkLFxuICAgICAgICAgIGRlcGxveW1lbnRJZDogcmVzcG9uc2UuZGF0YS5kYXRhPy5kZXBsb3ltZW50SWQsXG4gICAgICAgIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICAgIGVycm9yOiByZXNwb25zZS5kYXRhLmVycm9yIHx8ICdVbmtub3duIGVycm9yJyxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUoJ1xcbicpO1xuXG4gICAgICBpZiAoYXhpb3MuaXNBeGlvc0Vycm9yKGVycm9yKSkge1xuICAgICAgICBjb25zdCBtZXNzYWdlID0gZXJyb3IucmVzcG9uc2U/LmRhdGE/LmVycm9yIHx8IGVycm9yLm1lc3NhZ2U7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgICAgZXJyb3I6IGBVcGxvYWQgZmFpbGVkOiAke21lc3NhZ2V9YCxcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgIGVycm9yOiBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6ICdVbmtub3duIGVycm9yJyxcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZ2V0RGVwbG95bWVudFN0YXR1cyhkZXBsb3ltZW50SWQ6IHN0cmluZyk6IFByb21pc2U8RGVwbG95bWVudFN0YXR1cz4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGF4aW9zLmdldChcbiAgICAgICAgYCR7dGhpcy5zZXJ2ZXJVcmx9L2FwaS9wcm9qZWN0L3N0YXR1cy8ke2RlcGxveW1lbnRJZH1gLFxuICAgICAgICB7XG4gICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgQXV0aG9yaXphdGlvbjogYEJlYXJlciAke3RoaXMudG9rZW59YCxcbiAgICAgICAgICB9LFxuICAgICAgICB9XG4gICAgICApO1xuXG4gICAgICByZXR1cm4gcmVzcG9uc2UuZGF0YS5kYXRhO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoYXhpb3MuaXNBeGlvc0Vycm9yKGVycm9yKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoZXJyb3IucmVzcG9uc2U/LmRhdGE/LmVycm9yIHx8IGVycm9yLm1lc3NhZ2UpO1xuICAgICAgfVxuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgcG9sbERlcGxveW1lbnRTdGF0dXMoXG4gICAgZGVwbG95bWVudElkOiBzdHJpbmcsXG4gICAgb25VcGRhdGU6IChzdGF0dXM6IERlcGxveW1lbnRTdGF0dXMpID0+IHZvaWQsXG4gICAgdGltZW91dE1zOiBudW1iZXIgPSAzMDAwMDAgLy8gNSBtaW51dGVzXG4gICk6IFByb21pc2U8RGVwbG95bWVudFN0YXR1cz4ge1xuICAgIGNvbnN0IHN0YXJ0VGltZSA9IERhdGUubm93KCk7XG4gICAgY29uc3QgcG9sbEludGVydmFsID0gMjAwMDsgLy8gMiBzZWNvbmRzXG5cbiAgICB3aGlsZSAoRGF0ZS5ub3coKSAtIHN0YXJ0VGltZSA8IHRpbWVvdXRNcykge1xuICAgICAgY29uc3Qgc3RhdHVzID0gYXdhaXQgdGhpcy5nZXREZXBsb3ltZW50U3RhdHVzKGRlcGxveW1lbnRJZCk7XG4gICAgICBvblVwZGF0ZShzdGF0dXMpO1xuXG4gICAgICBpZiAoc3RhdHVzLnN0YXR1cyA9PT0gJ3N1Y2Nlc3MnIHx8IHN0YXR1cy5zdGF0dXMgPT09ICdmYWlsZWQnKSB7XG4gICAgICAgIHJldHVybiBzdGF0dXM7XG4gICAgICB9XG5cbiAgICAgIGF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT4gc2V0VGltZW91dChyZXNvbHZlLCBwb2xsSW50ZXJ2YWwpKTtcbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0RlcGxveW1lbnQgdGltZWQgb3V0Jyk7XG4gIH1cblxuICBhc3luYyBsb2dpbih1c2VybmFtZTogc3RyaW5nLCBwYXNzd29yZDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBheGlvcy5wb3N0KFxuICAgICAgICBgJHt0aGlzLnNlcnZlclVybH0vYXBpL2F1dGgvbG9naW5gLFxuICAgICAgICB7IHVzZXJuYW1lLCBwYXNzd29yZCB9LFxuICAgICAgICB7XG4gICAgICAgICAgdGltZW91dDogMTAwMDAsXG4gICAgICAgIH1cbiAgICAgICk7XG5cbiAgICAgIGlmIChyZXNwb25zZS5kYXRhLnN1Y2Nlc3MgJiYgcmVzcG9uc2UuZGF0YS5kYXRhPy50b2tlbikge1xuICAgICAgICByZXR1cm4gcmVzcG9uc2UuZGF0YS5kYXRhLnRva2VuO1xuICAgICAgfVxuXG4gICAgICB0aHJvdyBuZXcgRXJyb3IocmVzcG9uc2UuZGF0YS5lcnJvciB8fCAnTG9naW4gZmFpbGVkJyk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmIChheGlvcy5pc0F4aW9zRXJyb3IoZXJyb3IpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihlcnJvci5yZXNwb25zZT8uZGF0YT8uZXJyb3IgfHwgZXJyb3IubWVzc2FnZSk7XG4gICAgICB9XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH1cblxuICBhc3luYyBsaXN0UHJvamVjdHMoKTogUHJvbWlzZTxBcnJheTx7IGlkOiBzdHJpbmc7IG5hbWU6IHN0cmluZzsgdHlwZTogUHJvamVjdFR5cGU7IHN0YXR1czogc3RyaW5nIH0+PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXhpb3MuZ2V0KFxuICAgICAgICBgJHt0aGlzLnNlcnZlclVybH0vYXBpL3Byb2plY3RgLFxuICAgICAgICB7XG4gICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgQXV0aG9yaXphdGlvbjogYEJlYXJlciAke3RoaXMudG9rZW59YCxcbiAgICAgICAgICB9LFxuICAgICAgICB9XG4gICAgICApO1xuXG4gICAgICByZXR1cm4gcmVzcG9uc2UuZGF0YS5kYXRhIHx8IFtdO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoYXhpb3MuaXNBeGlvc0Vycm9yKGVycm9yKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoZXJyb3IucmVzcG9uc2U/LmRhdGE/LmVycm9yIHx8IGVycm9yLm1lc3NhZ2UpO1xuICAgICAgfVxuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEFuYWx5emUgYSBwYWNrYWdlIGJlZm9yZSBkZXBsb3ltZW50IHRvIGdldCBzZXJ2ZXIgd2FybmluZ3MgYW5kIHJlY29tbWVuZGF0aW9uc1xuICAgKi9cbiAgLyoqXG4gICAqIEFuYWx5emUgYSBwYWNrYWdlIGJlZm9yZSBkZXBsb3ltZW50XG4gICAqIEBwYXJhbSB6aXBQYXRoIC0gUGF0aCB0byB0aGUgemlwIGZpbGVcbiAgICogQHBhcmFtIGRlY2xhcmVkVHlwZSAtIFJFUVVJUkVEIC0gVXNlci1zZWxlY3RlZCBwcm9qZWN0IHR5cGUgKGJhY2tlbmQgdHJ1c3RzIHRoaXMpXG4gICAqL1xuICBhc3luYyBhbmFseXplUGFja2FnZSh6aXBQYXRoOiBzdHJpbmcsIGRlY2xhcmVkVHlwZTogUHJvamVjdFR5cGUpOiBQcm9taXNlPEFuYWx5emVSZXN1bHQ+IHtcbiAgICBpZiAoIWZzLmV4aXN0c1N5bmMoemlwUGF0aCkpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICBlcnJvcjogYFppcCBmaWxlIG5vdCBmb3VuZDogJHt6aXBQYXRofWAsXG4gICAgICB9O1xuICAgIH1cblxuICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XG4gICAgZm9ybURhdGEuYXBwZW5kKCdmaWxlJywgZnMuY3JlYXRlUmVhZFN0cmVhbSh6aXBQYXRoKSk7XG4gICAgZm9ybURhdGEuYXBwZW5kKCd0eXBlJywgZGVjbGFyZWRUeXBlKTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGF4aW9zLnBvc3QoXG4gICAgICAgIGAke3RoaXMuc2VydmVyVXJsfS9hcGkvcHJvamVjdC9hbmFseXplYCxcbiAgICAgICAgZm9ybURhdGEsXG4gICAgICAgIHtcbiAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAuLi5mb3JtRGF0YS5nZXRIZWFkZXJzKCksXG4gICAgICAgICAgICBBdXRob3JpemF0aW9uOiBgQmVhcmVyICR7dGhpcy50b2tlbn1gLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgbWF4Qm9keUxlbmd0aDogSW5maW5pdHksXG4gICAgICAgICAgbWF4Q29udGVudExlbmd0aDogSW5maW5pdHksXG4gICAgICAgICAgdGltZW91dDogNjAwMDAsIC8vIDEgbWludXRlIGZvciBhbmFseXNpc1xuICAgICAgICB9XG4gICAgICApO1xuXG4gICAgICBpZiAocmVzcG9uc2UuZGF0YS5zdWNjZXNzKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgc3VjY2VzczogdHJ1ZSxcbiAgICAgICAgICBhbmFseXNpczogcmVzcG9uc2UuZGF0YS5kYXRhLFxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgICBlcnJvcjogcmVzcG9uc2UuZGF0YS5lcnJvciB8fCAnQW5hbHlzaXMgZmFpbGVkJyxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKGF4aW9zLmlzQXhpb3NFcnJvcihlcnJvcikpIHtcbiAgICAgICAgY29uc3QgbWVzc2FnZSA9IGVycm9yLnJlc3BvbnNlPy5kYXRhPy5lcnJvciB8fCBlcnJvci5tZXNzYWdlO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICAgIGVycm9yOiBgQW5hbHlzaXMgZmFpbGVkOiAke21lc3NhZ2V9YCxcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgIGVycm9yOiBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6ICdVbmtub3duIGVycm9yJyxcbiAgICAgIH07XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVVcGxvYWRTZXJ2aWNlID0gKCk6IFVwbG9hZFNlcnZpY2UgPT4ge1xuICByZXR1cm4gbmV3IFVwbG9hZFNlcnZpY2UoKTtcbn07XG4iXX0=
|