runway-cli 1.1.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/init.js +86 -6
- 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/authService.d.ts +16 -0
- package/dist/services/authService.js +15 -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
|
@@ -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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVhY3RQYXRjaGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NlcnZpY2VzL3JlYWN0UGF0Y2hlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSw0Q0FBb0I7QUFDcEIsZ0RBQXdCO0FBQ3hCLDRDQUF5QztBQUV6Qzs7Ozs7O0dBTUc7QUFDSCxNQUFhLFlBQVk7SUFDdkI7OztPQUdHO0lBQ0gsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsV0FBbUI7UUFDcEMsTUFBTSxPQUFPLEdBQUcsY0FBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsY0FBYyxDQUFDLENBQUM7UUFDdkQsSUFBSSxDQUFDLFlBQUUsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDO1lBQUUsT0FBTyxLQUFLLENBQUM7UUFFMUMsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFFLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO1FBQzFELE1BQU0sSUFBSSxHQUFHLEVBQUUsR0FBRyxHQUFHLENBQUMsWUFBWSxFQUFFLEdBQUcsR0FBRyxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBRTdELGlEQUFpRDtRQUNqRCxJQUFJLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDO1lBQUUsT0FBTyxLQUFLLENBQUM7UUFFNUMsZUFBTSxDQUFDLElBQUksQ0FBQyx1REFBdUQsQ0FBQyxDQUFDO1FBRXJFLE1BQU0sTUFBTSxHQUFHLGNBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzdDLE1BQU0sU0FBUyxHQUFHLFlBQUUsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDO1FBQy9ELE1BQU0sVUFBVSxHQUFHLFlBQVksQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLENBQUM7UUFFMUQsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ2hCLGVBQU0sQ0FBQyxJQUFJLENBQUMsZ0VBQWdFLENBQUMsQ0FBQztZQUM5RSxlQUFNLENBQUMsSUFBSSxDQUFDLGtGQUFrRixDQUFDLENBQUM7WUFDaEcsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO1FBRUQsSUFBSSxPQUFPLEdBQUcsWUFBRSxDQUFDLFlBQVksQ0FBQyxVQUFVLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFFbkQsNERBQTREO1FBQzVELE1BQU0sUUFBUSxHQUFHLHdDQUF3QyxDQUFDO1FBRTFELElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDNUIsZUFBTSxDQUFDLElBQUksQ0FBQyx1REFBdUQsQ0FBQyxDQUFDO1lBQ3JFLE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztRQUVELGtCQUFrQjtRQUNsQixPQUFPLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FDdkIsc0JBQXNCLEVBQ3RCLHNEQUFzRCxDQUN2RCxDQUFDO1FBQ0YsWUFBRSxDQUFDLGFBQWEsQ0FBQyxVQUFVLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQy9DLGVBQU0sQ0FBQyxPQUFPLENBQUMsb0NBQW9DLGNBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2hGLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVEOztPQUVHO0lBQ0gsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsV0FBbUI7UUFDckMsTUFBTSxPQUFPLEdBQUcsY0FBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsY0FBYyxDQUFDLENBQUM7UUFDdkQsSUFBSSxDQUFDLFlBQUUsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDO1lBQUUsT0FBTztRQUVwQyxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQUUsQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7UUFDMUQsTUFBTSxJQUFJLEdBQUcsRUFBRSxHQUFHLEdBQUcsQ0FBQyxZQUFZLEVBQUUsR0FBRyxHQUFHLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDN0QsSUFBSSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQztZQUFFLE9BQU87UUFFdEMsTUFBTSxNQUFNLEdBQUcsY0FBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDN0MsTUFBTSxTQUFTLEdBQUcsWUFBRSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUM7UUFDL0QsTUFBTSxVQUFVLEdBQUcsWUFBWSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUUxRCxJQUFJLENBQUMsVUFBVTtZQUFFLE9BQU87UUFFeEIsSUFBSSxPQUFPLEdBQUcsWUFBRSxDQUFDLFlBQVksQ0FBQyxVQUFVLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFFbkQsb0NBQW9DO1FBQ3BDLE1BQU0sZUFBZSxHQUFHLCtEQUErRCxDQUFDO1FBQ3hGLElBQUksZUFBZSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ2xDLE9BQU8sR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLGVBQWUsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO1lBQy9ELFlBQUUsQ0FBQyxhQUFhLENBQUMsVUFBVSxFQUFFLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztZQUMvQyxlQUFNLENBQUMsR0FBRyxDQUFDLHNDQUFzQyxDQUFDLENBQUM7UUFDckQsQ0FBQztJQUNILENBQUM7SUFFRDs7T0FFRztJQUNLLE1BQU0sQ0FBQyxjQUFjLENBQUMsR0FBVztRQUN2QyxJQUFJLENBQUM7WUFDSCxNQUFNLE9BQU8sR0FBRyxZQUFFLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBRXBDLEtBQUssTUFBTSxLQUFLLElBQUksT0FBTyxFQUFFLENBQUM7Z0JBQzVCLE1BQU0sUUFBUSxHQUFHLGNBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO2dCQUN2QyxNQUFNLElBQUksR0FBRyxZQUFFLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUVuQyxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDO29CQUN2Qiw4QkFBOEI7b0JBQzlCLElBQUksS0FBSyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsSUFBSSxLQUFLLEtBQUssY0FBYyxJQUFJLEtBQUssS0FBSyxNQUFNO3dCQUNyRSxLQUFLLEtBQUssT0FBTyxJQUFJLEtBQUssS0FBSyxRQUFRLElBQUksS0FBSyxLQUFLLFFBQVE7d0JBQUUsU0FBUztvQkFDNUUsTUFBTSxLQUFLLEdBQUcsWUFBWSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsQ0FBQztvQkFDcEQsSUFBSSxLQUFLO3dCQUFFLE9BQU8sS0FBSyxDQUFDO2dCQUMxQixDQUFDO3FCQUFNLElBQUksK0NBQStDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7b0JBQ3ZFLE1BQU0sT0FBTyxHQUFHLFlBQUUsQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDO29CQUNuRCxJQUFJLE9BQU8sQ0FBQyxRQUFRLENBQUMsa0JBQWtCLENBQUMsSUFBSSxPQUFPLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLEVBQUUsQ0FBQzt3QkFDL0UsT0FBTyxRQUFRLENBQUM7b0JBQ2xCLENBQUM7Z0JBQ0gsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO1FBQUMsTUFBTSxDQUFDO1lBQ1AscUJBQXFCO1FBQ3ZCLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7Q0FDRjtBQXhHRCxvQ0F3R0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZnMgZnJvbSAnZnMnO1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tICcuLi91dGlscy9sb2dnZXInO1xuXG4vKipcbiAqIFJlYWN0IFJvdXRlciBwYXRjaGVyIGZvciBDTEkgYnVpbGRzLlxuICogSW5qZWN0cyBgYmFzZW5hbWU9e2ltcG9ydC5tZXRhLmVudi5CQVNFX1VSTH1gIGludG8gPEJyb3dzZXJSb3V0ZXI+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=
|