@pipeline-builder/pipeline-manager 3.3.29 → 3.3.31
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/README.md +32 -3
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +9 -4
- package/dist/commands/audit-tokens.js +1 -1
- package/dist/commands/deploy.d.ts.map +1 -1
- package/dist/commands/deploy.js +42 -22
- package/dist/commands/register.d.ts +38 -0
- package/dist/commands/register.d.ts.map +1 -0
- package/dist/commands/register.js +163 -0
- package/dist/utils/cdk-utils.d.ts +6 -0
- package/dist/utils/cdk-utils.d.ts.map +1 -1
- package/dist/utils/cdk-utils.js +30 -3
- package/dist/utils/output-utils.d.ts.map +1 -1
- package/dist/utils/output-utils.js +9 -4
- package/dist/utils/registry.d.ts +67 -0
- package/dist/utils/registry.d.ts.map +1 -0
- package/dist/utils/registry.js +104 -0
- package/package.json +2 -2
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// Copyright 2026 Pipeline Builder Contributors
|
|
3
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
4
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
5
|
+
exports.register = register;
|
|
6
|
+
const command_utils_1 = require("../utils/command-utils");
|
|
7
|
+
const error_handler_1 = require("../utils/error-handler");
|
|
8
|
+
const output_utils_1 = require("../utils/output-utils");
|
|
9
|
+
const registry_1 = require("../utils/registry");
|
|
10
|
+
/**
|
|
11
|
+
* Registers the `register` command with the CLI program.
|
|
12
|
+
*
|
|
13
|
+
* Two purposes — both targeted at recovering from a deploy whose registration
|
|
14
|
+
* step didn't land:
|
|
15
|
+
*
|
|
16
|
+
* 1. Explicit re-register (`--id <pipelineId>`) — recomputes the ARN from
|
|
17
|
+
* STS + region and POSTs it to the platform. Useful when the platform
|
|
18
|
+
* was unreachable during `deploy`, when the registry row was deleted by
|
|
19
|
+
* mistake, or for any other reason a deployed stack has no registry row.
|
|
20
|
+
*
|
|
21
|
+
* 2. Drain pending intents (every invocation) — `deploy` writes a local
|
|
22
|
+
* file under `~/.pipeline-manager/pending-registrations/` whenever its
|
|
23
|
+
* registration POST fails. Each `register` invocation tries to drain
|
|
24
|
+
* every such file. On success the file is deleted; on failure it stays
|
|
25
|
+
* and surfaces as a warning.
|
|
26
|
+
*
|
|
27
|
+
* Flags:
|
|
28
|
+
* - `--id <pipelineId>` — re-register a specific pipeline by ID
|
|
29
|
+
* - `--region <region>` — AWS region (default: AWS_REGION env / us-east-1)
|
|
30
|
+
* - `--no-drain` — skip draining pending intents
|
|
31
|
+
*
|
|
32
|
+
* Exit codes:
|
|
33
|
+
* - 0: requested registration succeeded AND no pending intents remain
|
|
34
|
+
* - 1: at least one registration (explicit or pending) still failed
|
|
35
|
+
*
|
|
36
|
+
* @example
|
|
37
|
+
* ```bash
|
|
38
|
+
* # Retry a registration that failed during deploy
|
|
39
|
+
* pipeline-manager register --id pipe-123
|
|
40
|
+
*
|
|
41
|
+
* # Just drain pending intents from disk, no specific registration
|
|
42
|
+
* pipeline-manager register
|
|
43
|
+
* ```
|
|
44
|
+
*/
|
|
45
|
+
function register(program) {
|
|
46
|
+
program
|
|
47
|
+
.command('register')
|
|
48
|
+
.description('Register a deployed pipeline ARN with the platform (retry path for failed registrations)')
|
|
49
|
+
.option('-i, --id <id>', 'Pipeline ID to register (re-derives ARN from STS)')
|
|
50
|
+
.option('--region <region>', 'AWS region (defaults to AWS_REGION env)')
|
|
51
|
+
.option('--no-drain', 'Skip draining pending intents from prior failed deploys')
|
|
52
|
+
.option('--verify-ssl', 'Enable SSL certificate verification')
|
|
53
|
+
.option('--no-verify-ssl', 'Disable SSL certificate verification')
|
|
54
|
+
.action(async (options) => {
|
|
55
|
+
const executionId = (0, command_utils_1.printCommandHeader)('Register Pipeline');
|
|
56
|
+
(0, command_utils_1.printSslWarning)(options.verifySsl);
|
|
57
|
+
let anyFailed = false;
|
|
58
|
+
let registeredCount = 0;
|
|
59
|
+
try {
|
|
60
|
+
const client = (0, command_utils_1.createAuthenticatedClient)(options);
|
|
61
|
+
const pipelineUrl = client.getConfig().api.pipelineUrl;
|
|
62
|
+
// ── Drain pending intents first ──
|
|
63
|
+
// We drain before the explicit registration so a queued failure for
|
|
64
|
+
// the same pipelineId is replaced (not double-applied) by the fresh
|
|
65
|
+
// payload below.
|
|
66
|
+
const drained = new Set();
|
|
67
|
+
if (options.drain !== false) {
|
|
68
|
+
const intents = await (0, registry_1.readPendingIntents)();
|
|
69
|
+
if (intents.length > 0) {
|
|
70
|
+
(0, output_utils_1.printSection)('Draining pending intents');
|
|
71
|
+
(0, output_utils_1.printInfo)('Found pending registrations from prior failed deploys', {
|
|
72
|
+
count: String(intents.length),
|
|
73
|
+
});
|
|
74
|
+
for (const intent of intents) {
|
|
75
|
+
// Skip the explicit pipeline — we'll re-build a fresh payload below.
|
|
76
|
+
if (options.id && intent.pipelineId === options.id)
|
|
77
|
+
continue;
|
|
78
|
+
const ok = await postRegistration(client, pipelineUrl, intent, intent.pipelineId);
|
|
79
|
+
if (ok) {
|
|
80
|
+
await (0, registry_1.clearPendingIntent)(intent.pipelineId);
|
|
81
|
+
drained.add(intent.pipelineId);
|
|
82
|
+
registeredCount++;
|
|
83
|
+
}
|
|
84
|
+
else {
|
|
85
|
+
anyFailed = true;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
// ── Explicit registration ──
|
|
91
|
+
if (options.id) {
|
|
92
|
+
(0, output_utils_1.printSection)('Re-registering pipeline');
|
|
93
|
+
const pipelineRes = await client.get(`${pipelineUrl}/${options.id}`);
|
|
94
|
+
const pipeline = (0, output_utils_1.extractSingleResponse)(pipelineRes, 'pipeline', 'id');
|
|
95
|
+
if (!pipeline) {
|
|
96
|
+
(0, output_utils_1.printError)('Pipeline not found in platform');
|
|
97
|
+
throw new Error(`No pipeline returned for id ${options.id}`);
|
|
98
|
+
}
|
|
99
|
+
if (!pipeline.orgId) {
|
|
100
|
+
(0, output_utils_1.printError)('Pipeline has no orgId — cannot register');
|
|
101
|
+
throw new Error(`Pipeline ${pipeline.id} is missing orgId`);
|
|
102
|
+
}
|
|
103
|
+
const payload = await (0, registry_1.buildRegistryPayload)({
|
|
104
|
+
id: pipeline.id,
|
|
105
|
+
orgId: pipeline.orgId,
|
|
106
|
+
pipelineName: pipeline.pipelineName,
|
|
107
|
+
project: pipeline.project,
|
|
108
|
+
organization: pipeline.organization,
|
|
109
|
+
}, options.region);
|
|
110
|
+
// Clear any stale intent for this pipelineId before retrying so we
|
|
111
|
+
// don't leave a duplicate file behind on success.
|
|
112
|
+
await (0, registry_1.clearPendingIntent)(payload.pipelineId);
|
|
113
|
+
const ok = await postRegistration(client, pipelineUrl, payload, payload.pipelineId);
|
|
114
|
+
if (ok) {
|
|
115
|
+
registeredCount++;
|
|
116
|
+
(0, output_utils_1.printSuccess)('Pipeline registered for event reporting', {
|
|
117
|
+
arn: payload.pipelineArn,
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
else {
|
|
121
|
+
anyFailed = true;
|
|
122
|
+
const path = await (0, registry_1.writePendingIntent)(payload);
|
|
123
|
+
(0, output_utils_1.printWarning)('Registration failed; intent saved for retry', { intent: path });
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
(0, output_utils_1.printSection)('Summary');
|
|
127
|
+
(0, output_utils_1.printKeyValue)({
|
|
128
|
+
'Registered': String(registeredCount),
|
|
129
|
+
'Drained from queue': String(drained.size),
|
|
130
|
+
'Status': anyFailed ? 'Some registrations still pending' : 'All clear',
|
|
131
|
+
'Execution ID': executionId,
|
|
132
|
+
});
|
|
133
|
+
process.exit(anyFailed ? 1 : 0);
|
|
134
|
+
}
|
|
135
|
+
catch (error) {
|
|
136
|
+
(0, error_handler_1.handleError)(error, error_handler_1.ERROR_CODES.API_REQUEST, {
|
|
137
|
+
debug: program.opts().debug,
|
|
138
|
+
exit: false,
|
|
139
|
+
context: { command: 'register', executionId, pipelineId: options.id },
|
|
140
|
+
});
|
|
141
|
+
process.exit(1);
|
|
142
|
+
}
|
|
143
|
+
});
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* POST a registration payload to the platform. On failure, the caller decides
|
|
147
|
+
* whether to write/preserve a pending intent — this helper just reports.
|
|
148
|
+
*/
|
|
149
|
+
async function postRegistration(client, pipelineUrl, payload, pipelineId) {
|
|
150
|
+
try {
|
|
151
|
+
await client.post(`${pipelineUrl}/registry`, payload);
|
|
152
|
+
(0, output_utils_1.printInfo)('Registered', { pipelineId, arn: payload.pipelineArn });
|
|
153
|
+
return true;
|
|
154
|
+
}
|
|
155
|
+
catch (err) {
|
|
156
|
+
(0, output_utils_1.printWarning)('Registration failed', {
|
|
157
|
+
pipelineId,
|
|
158
|
+
error: err instanceof Error ? err.message : String(err),
|
|
159
|
+
});
|
|
160
|
+
return false;
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVnaXN0ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29tbWFuZHMvcmVnaXN0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7O0FBa0R0Qyw0QkEyR0M7QUF6SkQsMERBQXdHO0FBQ3hHLDBEQUFrRTtBQUNsRSx3REFBOEk7QUFDOUksZ0RBTTJCO0FBRTNCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBa0NHO0FBQ0gsU0FBZ0IsUUFBUSxDQUFDLE9BQWdCO0lBQ3ZDLE9BQU87U0FDSixPQUFPLENBQUMsVUFBVSxDQUFDO1NBQ25CLFdBQVcsQ0FBQywwRkFBMEYsQ0FBQztTQUN2RyxNQUFNLENBQUMsZUFBZSxFQUFFLG1EQUFtRCxDQUFDO1NBQzVFLE1BQU0sQ0FBQyxtQkFBbUIsRUFBRSx5Q0FBeUMsQ0FBQztTQUN0RSxNQUFNLENBQUMsWUFBWSxFQUFFLHlEQUF5RCxDQUFDO1NBQy9FLE1BQU0sQ0FBQyxjQUFjLEVBQUUscUNBQXFDLENBQUM7U0FDN0QsTUFBTSxDQUFDLGlCQUFpQixFQUFFLHNDQUFzQyxDQUFDO1NBQ2pFLE1BQU0sQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLEVBQUU7UUFDeEIsTUFBTSxXQUFXLEdBQUcsSUFBQSxrQ0FBa0IsRUFBQyxtQkFBbUIsQ0FBQyxDQUFDO1FBQzVELElBQUEsK0JBQWUsRUFBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7UUFFbkMsSUFBSSxTQUFTLEdBQUcsS0FBSyxDQUFDO1FBQ3RCLElBQUksZUFBZSxHQUFHLENBQUMsQ0FBQztRQUV4QixJQUFJLENBQUM7WUFDSCxNQUFNLE1BQU0sR0FBRyxJQUFBLHlDQUF5QixFQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ2xELE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDO1lBRXZELG9DQUFvQztZQUNwQyxv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Q0FBQyxDQUFDO1lBQ0gsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNsQixDQUFDO0lBQ0gsQ0FBQyxDQUFDLENBQUM7QUFDUCxDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsS0FBSyxVQUFVLGdCQUFnQixDQUM3QixNQUFvRCxFQUNwRCxXQUFtQixFQUNuQixPQUF3QixFQUN4QixVQUFrQjtJQUVsQixJQUFJLENBQUM7UUFDSCxNQUFNLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxXQUFXLFdBQVcsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUN0RCxJQUFBLHdCQUFTLEVBQUMsWUFBWSxFQUFFLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxPQUFPLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztRQUNsRSxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO1FBQ2IsSUFBQSwyQkFBWSxFQUFDLHFCQUFxQixFQUFFO1lBQ2xDLFVBQVU7WUFDVixLQUFLLEVBQUUsR0FBRyxZQUFZLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQztTQUN4RCxDQUFDLENBQUM7UUFDSCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbmltcG9ydCB7IENvbW1hbmQgfSBmcm9tICdjb21tYW5kZXInO1xuaW1wb3J0IHsgUGlwZWxpbmUsIFBpcGVsaW5lUmVzcG9uc2UgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyBjcmVhdGVBdXRoZW50aWNhdGVkQ2xpZW50LCBwcmludENvbW1hbmRIZWFkZXIsIHByaW50U3NsV2FybmluZyB9IGZyb20gJy4uL3V0aWxzL2NvbW1hbmQtdXRpbHMnO1xuaW1wb3J0IHsgRVJST1JfQ09ERVMsIGhhbmRsZUVycm9yIH0gZnJvbSAnLi4vdXRpbHMvZXJyb3ItaGFuZGxlcic7XG5pbXBvcnQgeyBleHRyYWN0U2luZ2xlUmVzcG9uc2UsIHByaW50RXJyb3IsIHByaW50SW5mbywgcHJpbnRLZXlWYWx1ZSwgcHJpbnRTZWN0aW9uLCBwcmludFN1Y2Nlc3MsIHByaW50V2FybmluZyB9IGZyb20gJy4uL3V0aWxzL291dHB1dC11dGlscyc7XG5pbXBvcnQge1xuICBidWlsZFJlZ2lzdHJ5UGF5bG9hZCxcbiAgY2xlYXJQZW5kaW5nSW50ZW50LFxuICByZWFkUGVuZGluZ0ludGVudHMsXG4gIHdyaXRlUGVuZGluZ0ludGVudCxcbiAgdHlwZSBSZWdpc3RyeVBheWxvYWQsXG59IGZyb20gJy4uL3V0aWxzL3JlZ2lzdHJ5JztcblxuLyoqXG4gKiBSZWdpc3RlcnMgdGhlIGByZWdpc3RlcmAgY29tbWFuZCB3aXRoIHRoZSBDTEkgcHJvZ3JhbS5cbiAqXG4gKiBUd28gcHVycG9zZXMg4oCUIGJvdGggdGFyZ2V0ZWQgYXQgcmVjb3ZlcmluZyBmcm9tIGEgZGVwbG95IHdob3NlIHJlZ2lzdHJhdGlvblxuICogc3RlcCBkaWRuJ3QgbGFuZDpcbiAqXG4gKiAgIDEuIEV4cGxpY2l0IHJlLXJlZ2lzdGVyIChgLS1pZCA8cGlwZWxpbmVJZD5gKSDigJQgcmVjb21wdXRlcyB0aGUgQVJOIGZyb21cbiAqICAgICAgU1RTICsgcmVnaW9uIGFuZCBQT1NUcyBpdCB0byB0aGUgcGxhdGZvcm0uIFVzZWZ1bCB3aGVuIHRoZSBwbGF0Zm9ybVxuICogICAgICB3YXMgdW5yZWFjaGFibGUgZHVyaW5nIGBkZXBsb3lgLCB3aGVuIHRoZSByZWdpc3RyeSByb3cgd2FzIGRlbGV0ZWQgYnlcbiAqICAgICAgbWlzdGFrZSwgb3IgZm9yIGFueSBvdGhlciByZWFzb24gYSBkZXBsb3llZCBzdGFjayBoYXMgbm8gcmVnaXN0cnkgcm93LlxuICpcbiAqICAgMi4gRHJhaW4gcGVuZGluZyBpbnRlbnRzIChldmVyeSBpbnZvY2F0aW9uKSDigJQgYGRlcGxveWAgd3JpdGVzIGEgbG9jYWxcbiAqICAgICAgZmlsZSB1bmRlciBgfi8ucGlwZWxpbmUtbWFuYWdlci9wZW5kaW5nLXJlZ2lzdHJhdGlvbnMvYCB3aGVuZXZlciBpdHNcbiAqICAgICAgcmVnaXN0cmF0aW9uIFBPU1QgZmFpbHMuIEVhY2ggYHJlZ2lzdGVyYCBpbnZvY2F0aW9uIHRyaWVzIHRvIGRyYWluXG4gKiAgICAgIGV2ZXJ5IHN1Y2ggZmlsZS4gT24gc3VjY2VzcyB0aGUgZmlsZSBpcyBkZWxldGVkOyBvbiBmYWlsdXJlIGl0IHN0YXlzXG4gKiAgICAgIGFuZCBzdXJmYWNlcyBhcyBhIHdhcm5pbmcuXG4gKlxuICogRmxhZ3M6XG4gKiAgIC0gYC0taWQgPHBpcGVsaW5lSWQ+YCDigJQgcmUtcmVnaXN0ZXIgYSBzcGVjaWZpYyBwaXBlbGluZSBieSBJRFxuICogICAtIGAtLXJlZ2lvbiA8cmVnaW9uPmAg4oCUIEFXUyByZWdpb24gKGRlZmF1bHQ6IEFXU19SRUdJT04gZW52IC8gdXMtZWFzdC0xKVxuICogICAtIGAtLW5vLWRyYWluYCDigJQgc2tpcCBkcmFpbmluZyBwZW5kaW5nIGludGVudHNcbiAqXG4gKiBFeGl0IGNvZGVzOlxuICogICAtIDA6IHJlcXVlc3RlZCByZWdpc3RyYXRpb24gc3VjY2VlZGVkIEFORCBubyBwZW5kaW5nIGludGVudHMgcmVtYWluXG4gKiAgIC0gMTogYXQgbGVhc3Qgb25lIHJlZ2lzdHJhdGlvbiAoZXhwbGljaXQgb3IgcGVuZGluZykgc3RpbGwgZmFpbGVkXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYGJhc2hcbiAqICMgUmV0cnkgYSByZWdpc3RyYXRpb24gdGhhdCBmYWlsZWQgZHVyaW5nIGRlcGxveVxuICogcGlwZWxpbmUtbWFuYWdlciByZWdpc3RlciAtLWlkIHBpcGUtMTIzXG4gKlxuICogIyBKdXN0IGRyYWluIHBlbmRpbmcgaW50ZW50cyBmcm9tIGRpc2ssIG5vIHNwZWNpZmljIHJlZ2lzdHJhdGlvblxuICogcGlwZWxpbmUtbWFuYWdlciByZWdpc3RlclxuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWdpc3Rlcihwcm9ncmFtOiBDb21tYW5kKTogdm9pZCB7XG4gIHByb2dyYW1cbiAgICAuY29tbWFuZCgncmVnaXN0ZXInKVxuICAgIC5kZXNjcmlwdGlvbignUmVnaXN0ZXIgYSBkZXBsb3llZCBwaXBlbGluZSBBUk4gd2l0aCB0aGUgcGxhdGZvcm0gKHJldHJ5IHBhdGggZm9yIGZhaWxlZCByZWdpc3RyYXRpb25zKScpXG4gICAgLm9wdGlvbignLWksIC0taWQgPGlkPicsICdQaXBlbGluZSBJRCB0byByZWdpc3RlciAocmUtZGVyaXZlcyBBUk4gZnJvbSBTVFMpJylcbiAgICAub3B0aW9uKCctLXJlZ2lvbiA8cmVnaW9uPicsICdBV1MgcmVnaW9uIChkZWZhdWx0cyB0byBBV1NfUkVHSU9OIGVudiknKVxuICAgIC5vcHRpb24oJy0tbm8tZHJhaW4nLCAnU2tpcCBkcmFpbmluZyBwZW5kaW5nIGludGVudHMgZnJvbSBwcmlvciBmYWlsZWQgZGVwbG95cycpXG4gICAgLm9wdGlvbignLS12ZXJpZnktc3NsJywgJ0VuYWJsZSBTU0wgY2VydGlmaWNhdGUgdmVyaWZpY2F0aW9uJylcbiAgICAub3B0aW9uKCctLW5vLXZlcmlmeS1zc2wnLCAnRGlzYWJsZSBTU0wgY2VydGlmaWNhdGUgdmVyaWZpY2F0aW9uJylcbiAgICAuYWN0aW9uKGFzeW5jIChvcHRpb25zKSA9PiB7XG4gICAgICBjb25zdCBleGVjdXRpb25JZCA9IHByaW50Q29tbWFuZEhlYWRlcignUmVnaXN0ZXIgUGlwZWxpbmUnKTtcbiAgICAgIHByaW50U3NsV2FybmluZyhvcHRpb25zLnZlcmlmeVNzbCk7XG5cbiAgICAgIGxldCBhbnlGYWlsZWQgPSBmYWxzZTtcbiAgICAgIGxldCByZWdpc3RlcmVkQ291bnQgPSAwO1xuXG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBjbGllbnQgPSBjcmVhdGVBdXRoZW50aWNhdGVkQ2xpZW50KG9wdGlvbnMpO1xuICAgICAgICBjb25zdCBwaXBlbGluZVVybCA9IGNsaWVudC5nZXRDb25maWcoKS5hcGkucGlwZWxpbmVVcmw7XG5cbiAgICAgICAgLy8g4pSA4pSAIERyYWluIHBlbmRpbmcgaW50ZW50cyBmaXJzdCDilIDilIBcbiAgICAgICAgLy8gV2UgZHJhaW4gYmVmb3JlIHRoZSBleHBsaWNpdCByZWdpc3RyYXRpb24gc28gYSBxdWV1ZWQgZmFpbHVyZSBmb3JcbiAgICAgICAgLy8gdGhlIHNhbWUgcGlwZWxpbmVJZCBpcyByZXBsYWNlZCAobm90IGRvdWJsZS1hcHBsaWVkKSBieSB0aGUgZnJlc2hcbiAgICAgICAgLy8gcGF5bG9hZCBiZWxvdy5cbiAgICAgICAgY29uc3QgZHJhaW5lZCA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgICAgICBpZiAob3B0aW9ucy5kcmFpbiAhPT0gZmFsc2UpIHtcbiAgICAgICAgICBjb25zdCBpbnRlbnRzID0gYXdhaXQgcmVhZFBlbmRpbmdJbnRlbnRzKCk7XG4gICAgICAgICAgaWYgKGludGVudHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgcHJpbnRTZWN0aW9uKCdEcmFpbmluZyBwZW5kaW5nIGludGVudHMnKTtcbiAgICAgICAgICAgIHByaW50SW5mbygnRm91bmQgcGVuZGluZyByZWdpc3RyYXRpb25zIGZyb20gcHJpb3IgZmFpbGVkIGRlcGxveXMnLCB7XG4gICAgICAgICAgICAgIGNvdW50OiBTdHJpbmcoaW50ZW50cy5sZW5ndGgpLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGludGVudCBvZiBpbnRlbnRzKSB7XG4gICAgICAgICAgICAgIC8vIFNraXAgdGhlIGV4cGxpY2l0IHBpcGVsaW5lIOKAlCB3ZSdsbCByZS1idWlsZCBhIGZyZXNoIHBheWxvYWQgYmVsb3cuXG4gICAgICAgICAgICAgIGlmIChvcHRpb25zLmlkICYmIGludGVudC5waXBlbGluZUlkID09PSBvcHRpb25zLmlkKSBjb250aW51ZTtcbiAgICAgICAgICAgICAgY29uc3Qgb2sgPSBhd2FpdCBwb3N0UmVnaXN0cmF0aW9uKGNsaWVudCwgcGlwZWxpbmVVcmwsIGludGVudCwgaW50ZW50LnBpcGVsaW5lSWQpO1xuICAgICAgICAgICAgICBpZiAob2spIHtcbiAgICAgICAgICAgICAgICBhd2FpdCBjbGVhclBlbmRpbmdJbnRlbnQoaW50ZW50LnBpcGVsaW5lSWQpO1xuICAgICAgICAgICAgICAgIGRyYWluZWQuYWRkKGludGVudC5waXBlbGluZUlkKTtcbiAgICAgICAgICAgICAgICByZWdpc3RlcmVkQ291bnQrKztcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBhbnlGYWlsZWQgPSB0cnVlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8g4pSA4pSAIEV4cGxpY2l0IHJlZ2lzdHJhdGlvbiDilIDilIBcbiAgICAgICAgaWYgKG9wdGlvbnMuaWQpIHtcbiAgICAgICAgICBwcmludFNlY3Rpb24oJ1JlLXJlZ2lzdGVyaW5nIHBpcGVsaW5lJyk7XG4gICAgICAgICAgY29uc3QgcGlwZWxpbmVSZXMgPSBhd2FpdCBjbGllbnQuZ2V0PFBpcGVsaW5lUmVzcG9uc2U+KGAke3BpcGVsaW5lVXJsfS8ke29wdGlvbnMuaWR9YCk7XG4gICAgICAgICAgY29uc3QgcGlwZWxpbmUgPSBleHRyYWN0U2luZ2xlUmVzcG9uc2U8UGlwZWxpbmU+KHBpcGVsaW5lUmVzLCAncGlwZWxpbmUnLCAnaWQnKTtcbiAgICAgICAgICBpZiAoIXBpcGVsaW5lKSB7XG4gICAgICAgICAgICBwcmludEVycm9yKCdQaXBlbGluZSBub3QgZm91bmQgaW4gcGxhdGZvcm0nKTtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgTm8gcGlwZWxpbmUgcmV0dXJuZWQgZm9yIGlkICR7b3B0aW9ucy5pZH1gKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoIXBpcGVsaW5lLm9yZ0lkKSB7XG4gICAgICAgICAgICBwcmludEVycm9yKCdQaXBlbGluZSBoYXMgbm8gb3JnSWQg4oCUIGNhbm5vdCByZWdpc3RlcicpO1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBQaXBlbGluZSAke3BpcGVsaW5lLmlkfSBpcyBtaXNzaW5nIG9yZ0lkYCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IHBheWxvYWQgPSBhd2FpdCBidWlsZFJlZ2lzdHJ5UGF5bG9hZChcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgaWQ6IHBpcGVsaW5lLmlkLFxuICAgICAgICAgICAgICBvcmdJZDogcGlwZWxpbmUub3JnSWQsXG4gICAgICAgICAgICAgIHBpcGVsaW5lTmFtZTogcGlwZWxpbmUucGlwZWxpbmVOYW1lLFxuICAgICAgICAgICAgICBwcm9qZWN0OiBwaXBlbGluZS5wcm9qZWN0LFxuICAgICAgICAgICAgICBvcmdhbml6YXRpb246IHBpcGVsaW5lLm9yZ2FuaXphdGlvbixcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBvcHRpb25zLnJlZ2lvbixcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgLy8gQ2xlYXIgYW55IHN0YWxlIGludGVudCBmb3IgdGhpcyBwaXBlbGluZUlkIGJlZm9yZSByZXRyeWluZyBzbyB3ZVxuICAgICAgICAgIC8vIGRvbid0IGxlYXZlIGEgZHVwbGljYXRlIGZpbGUgYmVoaW5kIG9uIHN1Y2Nlc3MuXG4gICAgICAgICAgYXdhaXQgY2xlYXJQZW5kaW5nSW50ZW50KHBheWxvYWQucGlwZWxpbmVJZCk7XG5cbiAgICAgICAgICBjb25zdCBvayA9IGF3YWl0IHBvc3RSZWdpc3RyYXRpb24oY2xpZW50LCBwaXBlbGluZVVybCwgcGF5bG9hZCwgcGF5bG9hZC5waXBlbGluZUlkKTtcbiAgICAgICAgICBpZiAob2spIHtcbiAgICAgICAgICAgIHJlZ2lzdGVyZWRDb3VudCsrO1xuICAgICAgICAgICAgcHJpbnRTdWNjZXNzKCdQaXBlbGluZSByZWdpc3RlcmVkIGZvciBldmVudCByZXBvcnRpbmcnLCB7XG4gICAgICAgICAgICAgIGFybjogcGF5bG9hZC5waXBlbGluZUFybixcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBhbnlGYWlsZWQgPSB0cnVlO1xuICAgICAgICAgICAgY29uc3QgcGF0aCA9IGF3YWl0IHdyaXRlUGVuZGluZ0ludGVudChwYXlsb2FkKTtcbiAgICAgICAgICAgIHByaW50V2FybmluZygnUmVnaXN0cmF0aW9uIGZhaWxlZDsgaW50ZW50IHNhdmVkIGZvciByZXRyeScsIHsgaW50ZW50OiBwYXRoIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHByaW50U2VjdGlvbignU3VtbWFyeScpO1xuICAgICAgICBwcmludEtleVZhbHVlKHtcbiAgICAgICAgICAnUmVnaXN0ZXJlZCc6IFN0cmluZyhyZWdpc3RlcmVkQ291bnQpLFxuICAgICAgICAgICdEcmFpbmVkIGZyb20gcXVldWUnOiBTdHJpbmcoZHJhaW5lZC5zaXplKSxcbiAgICAgICAgICAnU3RhdHVzJzogYW55RmFpbGVkID8gJ1NvbWUgcmVnaXN0cmF0aW9ucyBzdGlsbCBwZW5kaW5nJyA6ICdBbGwgY2xlYXInLFxuICAgICAgICAgICdFeGVjdXRpb24gSUQnOiBleGVjdXRpb25JZCxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcHJvY2Vzcy5leGl0KGFueUZhaWxlZCA/IDEgOiAwKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGhhbmRsZUVycm9yKGVycm9yLCBFUlJPUl9DT0RFUy5BUElfUkVRVUVTVCwge1xuICAgICAgICAgIGRlYnVnOiBwcm9ncmFtLm9wdHMoKS5kZWJ1ZyxcbiAgICAgICAgICBleGl0OiBmYWxzZSxcbiAgICAgICAgICBjb250ZXh0OiB7IGNvbW1hbmQ6ICdyZWdpc3RlcicsIGV4ZWN1dGlvbklkLCBwaXBlbGluZUlkOiBvcHRpb25zLmlkIH0sXG4gICAgICAgIH0pO1xuICAgICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgICB9XG4gICAgfSk7XG59XG5cbi8qKlxuICogUE9TVCBhIHJlZ2lzdHJhdGlvbiBwYXlsb2FkIHRvIHRoZSBwbGF0Zm9ybS4gT24gZmFpbHVyZSwgdGhlIGNhbGxlciBkZWNpZGVzXG4gKiB3aGV0aGVyIHRvIHdyaXRlL3ByZXNlcnZlIGEgcGVuZGluZyBpbnRlbnQg4oCUIHRoaXMgaGVscGVyIGp1c3QgcmVwb3J0cy5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gcG9zdFJlZ2lzdHJhdGlvbihcbiAgY2xpZW50OiBSZXR1cm5UeXBlPHR5cGVvZiBjcmVhdGVBdXRoZW50aWNhdGVkQ2xpZW50PixcbiAgcGlwZWxpbmVVcmw6IHN0cmluZyxcbiAgcGF5bG9hZDogUmVnaXN0cnlQYXlsb2FkLFxuICBwaXBlbGluZUlkOiBzdHJpbmcsXG4pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgdHJ5IHtcbiAgICBhd2FpdCBjbGllbnQucG9zdChgJHtwaXBlbGluZVVybH0vcmVnaXN0cnlgLCBwYXlsb2FkKTtcbiAgICBwcmludEluZm8oJ1JlZ2lzdGVyZWQnLCB7IHBpcGVsaW5lSWQsIGFybjogcGF5bG9hZC5waXBlbGluZUFybiB9KTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgcHJpbnRXYXJuaW5nKCdSZWdpc3RyYXRpb24gZmFpbGVkJywge1xuICAgICAgcGlwZWxpbmVJZCxcbiAgICAgIGVycm9yOiBlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogU3RyaW5nKGVyciksXG4gICAgfSk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG4iXX0=
|
|
@@ -10,6 +10,12 @@ export interface CdkInfo {
|
|
|
10
10
|
}
|
|
11
11
|
/**
|
|
12
12
|
* Checks whether the AWS CDK CLI is installed and returns its version.
|
|
13
|
+
*
|
|
14
|
+
* Tries `cdk --version` first. If that fails (typically because the user has
|
|
15
|
+
* cdk on PATH via their shell rc but execSync's default `/bin/sh` doesn't
|
|
16
|
+
* source it), falls back to running through the user's interactive shell
|
|
17
|
+
* (`$SHELL -i -c`) so node version managers like nvm/asdf and homebrew paths
|
|
18
|
+
* become visible.
|
|
13
19
|
*/
|
|
14
20
|
export declare function getCdkInfo(): CdkInfo;
|
|
15
21
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cdk-utils.d.ts","sourceRoot":"","sources":["../../src/utils/cdk-utils.ts"],"names":[],"mappings":"AAOA;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAEhE;AAED,MAAM,WAAW,OAAO;IACtB,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED
|
|
1
|
+
{"version":3,"file":"cdk-utils.d.ts","sourceRoot":"","sources":["../../src/utils/cdk-utils.ts"],"names":[],"mappings":"AAOA;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAEhE;AAED,MAAM,WAAW,OAAO;IACtB,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;;GAQG;AACH,wBAAgB,UAAU,IAAI,OAAO,CA2BpC;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,OAAO,CAE3C;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,IAAI,IAAI,CAKzC;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,0DAA0D;IAC1D,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,yFAAyF;IACzF,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,kDAAkD;IAClD,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC9B;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,eAAoB,GAC5B,cAAc,CA2ChB"}
|
package/dist/utils/cdk-utils.js
CHANGED
|
@@ -22,14 +22,41 @@ function resolveBoilerplatePath(callerDir) {
|
|
|
22
22
|
}
|
|
23
23
|
/**
|
|
24
24
|
* Checks whether the AWS CDK CLI is installed and returns its version.
|
|
25
|
+
*
|
|
26
|
+
* Tries `cdk --version` first. If that fails (typically because the user has
|
|
27
|
+
* cdk on PATH via their shell rc but execSync's default `/bin/sh` doesn't
|
|
28
|
+
* source it), falls back to running through the user's interactive shell
|
|
29
|
+
* (`$SHELL -i -c`) so node version managers like nvm/asdf and homebrew paths
|
|
30
|
+
* become visible.
|
|
25
31
|
*/
|
|
26
32
|
function getCdkInfo() {
|
|
27
33
|
try {
|
|
28
34
|
const output = (0, child_process_1.execSync)('cdk --version', { encoding: 'utf-8', stdio: 'pipe' });
|
|
29
35
|
return { available: true, version: output.trim() };
|
|
30
36
|
}
|
|
31
|
-
catch (
|
|
32
|
-
|
|
37
|
+
catch (firstError) {
|
|
38
|
+
// Fallback: invoke through the user's login shell so PATH from their rc
|
|
39
|
+
// file is sourced. Skip when SHELL isn't set or is /bin/sh (which would
|
|
40
|
+
// be the same default).
|
|
41
|
+
const userShell = process.env.SHELL;
|
|
42
|
+
if (userShell && !userShell.endsWith('/sh')) {
|
|
43
|
+
try {
|
|
44
|
+
const output = (0, child_process_1.execSync)('cdk --version', {
|
|
45
|
+
encoding: 'utf-8',
|
|
46
|
+
stdio: 'pipe',
|
|
47
|
+
shell: userShell,
|
|
48
|
+
});
|
|
49
|
+
return { available: true, version: output.trim() };
|
|
50
|
+
}
|
|
51
|
+
catch {
|
|
52
|
+
// fall through to the original error
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
return {
|
|
56
|
+
available: false,
|
|
57
|
+
version: null,
|
|
58
|
+
error: firstError instanceof Error ? firstError.message : 'Unknown error',
|
|
59
|
+
};
|
|
33
60
|
}
|
|
34
61
|
}
|
|
35
62
|
/**
|
|
@@ -98,4 +125,4 @@ function executeCdkShellCommand(command, options = {}) {
|
|
|
98
125
|
throw error;
|
|
99
126
|
}
|
|
100
127
|
}
|
|
101
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2RrLXV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxzL2Nkay11dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsK0NBQStDO0FBQy9DLHNDQUFzQzs7Ozs7QUFVdEMsd0RBRUM7QUFXRCxnQ0FPQztBQUtELDhDQUVDO0FBT0QsZ0RBS0M7QUE2QkQsd0RBOENDO0FBMUhELGlEQUF5QztBQUN6QyxnREFBd0I7QUFDeEIsaURBQTRDO0FBRTVDOzs7R0FHRztBQUNILFNBQWdCLHNCQUFzQixDQUFDLFNBQWlCO0lBQ3RELE9BQU8sY0FBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixDQUFDLENBQUM7QUFDdEQsQ0FBQztBQVFEOztHQUVHO0FBQ0gsU0FBZ0IsVUFBVTtJQUN4QixJQUFJLENBQUM7UUFDSCxNQUFNLE1BQU0sR0FBRyxJQUFBLHdCQUFRLEVBQUMsZUFBZSxFQUFFLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztRQUMvRSxPQUFPLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsTUFBTSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUM7SUFDckQsQ0FBQztJQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7UUFDZixPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxLQUFLLFlBQVksS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxlQUFlLEVBQUUsQ0FBQztJQUM5RyxDQUFDO0FBQ0gsQ0FBQztBQUVEOztHQUVHO0FBQ0gsU0FBZ0IsaUJBQWlCO0lBQy9CLE9BQU8sVUFBVSxFQUFFLENBQUMsU0FBUyxDQUFDO0FBQ2hDLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsU0FBZ0Isa0JBQWtCO0lBQ2hDLElBQUksaUJBQWlCLEVBQUU7UUFBRSxPQUFPO0lBQ2hDLElBQUEseUJBQVUsRUFBQyw0Q0FBNEMsQ0FBQyxDQUFDO0lBQ3pELE9BQU8sQ0FBQyxHQUFHLENBQUMsMENBQTBDLENBQUMsQ0FBQztJQUN4RCxNQUFNLElBQUksS0FBSyxDQUFDLG1CQUFtQixDQUFDLENBQUM7QUFDdkMsQ0FBQztBQXNCRDs7Ozs7O0dBTUc7QUFDSCxTQUFnQixzQkFBc0IsQ0FDcEMsT0FBZSxFQUNmLFVBQTJCLEVBQUU7SUFFN0IsTUFBTSxFQUFFLEtBQUssR0FBRyxLQUFLLEVBQUUsVUFBVSxHQUFHLElBQUksRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLEdBQUcsT0FBTyxDQUFDO0lBQ3BFLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUU3QixJQUFJLENBQUM7UUFDSCxNQUFNLEdBQUcsR0FBRztZQUNWLEdBQUcsT0FBTyxDQUFDLEdBQUc7WUFDZCxHQUFHLFFBQVE7U0FDWixDQUFDO1FBRUYsSUFBQSx3QkFBUSxFQUFDLE9BQU8sRUFBRTtZQUNoQixLQUFLLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU07WUFDM0QsR0FBRztTQUNKLENBQUMsQ0FBQztRQUVILE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxTQUFTLENBQUM7UUFFeEMsT0FBTztZQUNMLE9BQU8sRUFBRSxJQUFJO1lBQ2IsUUFBUTtTQUNULENBQUM7SUFDSixDQUFDO0lBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztRQUNmLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxTQUFTLENBQUM7UUFFeEMsMkRBQTJEO1FBQzNELElBQUksS0FBSyxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxRQUFRLElBQUksS0FBSyxFQUFFLENBQUM7WUFDNUQsTUFBTSxTQUFTLEdBQUcsS0FBZ0YsQ0FBQztZQUNuRyxNQUFNLE1BQU0sR0FBRyxTQUFTLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ25ELE1BQU0sTUFBTSxHQUFHLFNBQVMsQ0FBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7WUFFbkQsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNsQixPQUFPLENBQUMsS0FBSyxDQUFDLHdCQUF3QixDQUFDLENBQUM7WUFDeEMsSUFBSSxNQUFNO2dCQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDbEMsSUFBSSxNQUFNO2dCQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDbEMsSUFBSSxTQUFTLENBQUMsTUFBTSxLQUFLLFNBQVMsRUFBRSxDQUFDO2dCQUNuQyxPQUFPLENBQUMsS0FBSyxDQUFDLGNBQWMsU0FBUyxDQUFDLE1BQU0sV0FBVyxRQUFRLEtBQUssQ0FBQyxDQUFDO1lBQ3hFLENBQUM7UUFDSCxDQUFDO2FBQU0sSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUNqQixPQUFPLENBQUMsS0FBSyxDQUFDLHVCQUF1QixFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ2hELENBQUM7UUFFRCxNQUFNLEtBQUssQ0FBQztJQUNkLENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbmltcG9ydCB7IGV4ZWNTeW5jIH0gZnJvbSAnY2hpbGRfcHJvY2Vzcyc7XG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7IHByaW50RXJyb3IgfSBmcm9tICcuL291dHB1dC11dGlscyc7XG5cbi8qKlxuICogUGF0aCB0byBkaXN0L2JvaWxlcnBsYXRlLmpzLiB0c2MgZW1pdHMgY29tbWFuZHMgYXQgZGlzdC9jb21tYW5kcy8sIHNvXG4gKiBib2lsZXJwbGF0ZSBpcyBvbmUgbGV2ZWwgdXAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlQm9pbGVycGxhdGVQYXRoKGNhbGxlckRpcjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHBhdGguam9pbihjYWxsZXJEaXIsICcuLicsICdib2lsZXJwbGF0ZS5qcycpO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENka0luZm8ge1xuICBhdmFpbGFibGU6IGJvb2xlYW47XG4gIHZlcnNpb246IHN0cmluZyB8IG51bGw7XG4gIGVycm9yPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHRoZSBBV1MgQ0RLIENMSSBpcyBpbnN0YWxsZWQgYW5kIHJldHVybnMgaXRzIHZlcnNpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRDZGtJbmZvKCk6IENka0luZm8ge1xuICB0cnkge1xuICAgIGNvbnN0IG91dHB1dCA9IGV4ZWNTeW5jKCdjZGsgLS12ZXJzaW9uJywgeyBlbmNvZGluZzogJ3V0Zi04Jywgc3RkaW86ICdwaXBlJyB9KTtcbiAgICByZXR1cm4geyBhdmFpbGFibGU6IHRydWUsIHZlcnNpb246IG91dHB1dC50cmltKCkgfTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4geyBhdmFpbGFibGU6IGZhbHNlLCB2ZXJzaW9uOiBudWxsLCBlcnJvcjogZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiAnVW5rbm93biBlcnJvcicgfTtcbiAgfVxufVxuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHRoZSBBV1MgQ0RLIENMSSBpcyBpbnN0YWxsZWQgYW5kIGFjY2Vzc2libGUgb24gdGhlIFBBVEguXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjaGVja0Nka0F2YWlsYWJsZSgpOiBib29sZWFuIHtcbiAgcmV0dXJuIGdldENka0luZm8oKS5hdmFpbGFibGU7XG59XG5cbi8qKlxuICogQXNzZXJ0cyB0aGF0IHRoZSBBV1MgQ0RLIENMSSBpcyBpbnN0YWxsZWQ7IHRocm93cyB3aXRoIGEgdXNlci1mcmllbmRseVxuICogbWVzc2FnZSArIGluc3RhbGwgaGludCB3aGVuIGl0IGlzbid0LiBVc2UgYXQgdGhlIHRvcCBvZiBhbnkgY29tbWFuZCB0aGF0XG4gKiBzaGVsbHMgb3V0IHRvIGBjZGtgLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZW5zdXJlQ2RrQXZhaWxhYmxlKCk6IHZvaWQge1xuICBpZiAoY2hlY2tDZGtBdmFpbGFibGUoKSkgcmV0dXJuO1xuICBwcmludEVycm9yKCdBV1MgQ0RLIGlzIG5vdCBpbnN0YWxsZWQgb3Igbm90IGFjY2Vzc2libGUnKTtcbiAgY29uc29sZS5sb2coJ0luc3RhbGwgQ0RLIHdpdGg6IG5wbSBpbnN0YWxsIC1nIGF3cy1jZGsnKTtcbiAgdGhyb3cgbmV3IEVycm9yKCdBV1MgQ0RLIG5vdCBmb3VuZCcpO1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIGV4ZWN1dGluZyBhIENESyBzaGVsbCBjb21tYW5kLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENka1NoZWxsT3B0aW9ucyB7XG4gIC8qKiBXaGVuIGB0cnVlYCwgcHJpbnRzIHRoZSBlcnJvciB0byBzdGRlcnIgb24gZmFpbHVyZS4gKi9cbiAgZGVidWc/OiBib29sZWFuO1xuICAvKiogV2hlbiBgdHJ1ZWAsIGluaGVyaXRzIHN0ZGlvIHNvIG91dHB1dCBzdHJlYW1zIHRvIHRoZSB0ZXJtaW5hbC4gRGVmYXVsdHMgdG8gYHRydWVgLiAqL1xuICBzaG93T3V0cHV0PzogYm9vbGVhbjtcbiAgLyoqIEFkZGl0aW9uYWwgZW52aXJvbm1lbnQgdmFyaWFibGVzIHRvIGluamVjdC4gKi9cbiAgZW52PzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbn1cblxuLyoqXG4gKiBSZXN1bHQgb2YgYSBDREsgc2hlbGwgY29tbWFuZCBleGVjdXRpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2RrU2hlbGxSZXN1bHQge1xuICBzdWNjZXNzOiBib29sZWFuO1xuICBkdXJhdGlvbjogbnVtYmVyO1xufVxuXG4vKipcbiAqIEV4ZWN1dGVzIGEgQ0RLIENMSSBjb21tYW5kIGFzIGEgY2hpbGQgcHJvY2Vzcy5cbiAqXG4gKiBAcGFyYW0gY29tbWFuZCAtIFRoZSBmdWxsIENESyBDTEkgY29tbWFuZCBzdHJpbmcgKGUuZy4sIGBjZGsgYm9vdHN0cmFwIC4uLmApLlxuICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25hbCBleGVjdXRpb24gc2V0dGluZ3MuXG4gKiBAcmV0dXJucyBBbiBvYmplY3Qgd2l0aCBgc3VjY2Vzc2AgYW5kIGBkdXJhdGlvbmAgaW4gbXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBleGVjdXRlQ2RrU2hlbGxDb21tYW5kKFxuICBjb21tYW5kOiBzdHJpbmcsXG4gIG9wdGlvbnM6IENka1NoZWxsT3B0aW9ucyA9IHt9LFxuKTogQ2RrU2hlbGxSZXN1bHQge1xuICBjb25zdCB7IGRlYnVnID0gZmFsc2UsIHNob3dPdXRwdXQgPSB0cnVlLCBlbnY6IGV4dHJhRW52IH0gPSBvcHRpb25zO1xuICBjb25zdCBzdGFydFRpbWUgPSBEYXRlLm5vdygpO1xuXG4gIHRyeSB7XG4gICAgY29uc3QgZW52ID0ge1xuICAgICAgLi4ucHJvY2Vzcy5lbnYsXG4gICAgICAuLi5leHRyYUVudixcbiAgICB9O1xuXG4gICAgZXhlY1N5bmMoY29tbWFuZCwge1xuICAgICAgc3RkaW86IHNob3dPdXRwdXQgPyBbJ2luaGVyaXQnLCAnaW5oZXJpdCcsICdwaXBlJ10gOiAncGlwZScsXG4gICAgICBlbnYsXG4gICAgfSk7XG5cbiAgICBjb25zdCBkdXJhdGlvbiA9IERhdGUubm93KCkgLSBzdGFydFRpbWU7XG5cbiAgICByZXR1cm4ge1xuICAgICAgc3VjY2VzczogdHJ1ZSxcbiAgICAgIGR1cmF0aW9uLFxuICAgIH07XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY29uc3QgZHVyYXRpb24gPSBEYXRlLm5vdygpIC0gc3RhcnRUaW1lO1xuXG4gICAgLy8gRXh0cmFjdCBzdGRlcnIvc3Rkb3V0IGZyb20gZXhlY1N5bmMgZXJyb3Igd2hlbiBhdmFpbGFibGVcbiAgICBpZiAoZXJyb3IgJiYgdHlwZW9mIGVycm9yID09PSAnb2JqZWN0JyAmJiAnc3RkZXJyJyBpbiBlcnJvcikge1xuICAgICAgY29uc3QgZXhlY0Vycm9yID0gZXJyb3IgYXMgeyBzdGRlcnI/OiBCdWZmZXIgfCBzdHJpbmc7IHN0ZG91dD86IEJ1ZmZlciB8IHN0cmluZzsgc3RhdHVzPzogbnVtYmVyIH07XG4gICAgICBjb25zdCBzdGRlcnIgPSBleGVjRXJyb3Iuc3RkZXJyPy50b1N0cmluZygpLnRyaW0oKTtcbiAgICAgIGNvbnN0IHN0ZG91dCA9IGV4ZWNFcnJvci5zdGRvdXQ/LnRvU3RyaW5nKCkudHJpbSgpO1xuXG4gICAgICBjb25zb2xlLmVycm9yKCcnKTtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0NESyBkZXBsb3ltZW50IGZhaWxlZDonKTtcbiAgICAgIGlmIChzdGRlcnIpIGNvbnNvbGUuZXJyb3Ioc3RkZXJyKTtcbiAgICAgIGlmIChzdGRvdXQpIGNvbnNvbGUuZXJyb3Ioc3Rkb3V0KTtcbiAgICAgIGlmIChleGVjRXJyb3Iuc3RhdHVzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihgRXhpdCBjb2RlOiAke2V4ZWNFcnJvci5zdGF0dXN9IChhZnRlciAke2R1cmF0aW9ufW1zKWApO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZGVidWcpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0NESyBleGVjdXRpb24gZmFpbGVkOicsIGVycm9yKTtcbiAgICB9XG5cbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxufVxuIl19
|
|
128
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2RrLXV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxzL2Nkay11dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsK0NBQStDO0FBQy9DLHNDQUFzQzs7Ozs7QUFVdEMsd0RBRUM7QUFpQkQsZ0NBMkJDO0FBS0QsOENBRUM7QUFPRCxnREFLQztBQTZCRCx3REE4Q0M7QUFwSkQsaURBQXlDO0FBQ3pDLGdEQUF3QjtBQUN4QixpREFBNEM7QUFFNUM7OztHQUdHO0FBQ0gsU0FBZ0Isc0JBQXNCLENBQUMsU0FBaUI7SUFDdEQsT0FBTyxjQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztBQUN0RCxDQUFDO0FBUUQ7Ozs7Ozs7O0dBUUc7QUFDSCxTQUFnQixVQUFVO0lBQ3hCLElBQUksQ0FBQztRQUNILE1BQU0sTUFBTSxHQUFHLElBQUEsd0JBQVEsRUFBQyxlQUFlLEVBQUUsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO1FBQy9FLE9BQU8sRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxNQUFNLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQztJQUNyRCxDQUFDO0lBQUMsT0FBTyxVQUFVLEVBQUUsQ0FBQztRQUNwQix3RUFBd0U7UUFDeEUsd0VBQXdFO1FBQ3hFLHdCQUF3QjtRQUN4QixNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQztRQUNwQyxJQUFJLFNBQVMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUM1QyxJQUFJLENBQUM7Z0JBQ0gsTUFBTSxNQUFNLEdBQUcsSUFBQSx3QkFBUSxFQUFDLGVBQWUsRUFBRTtvQkFDdkMsUUFBUSxFQUFFLE9BQU87b0JBQ2pCLEtBQUssRUFBRSxNQUFNO29CQUNiLEtB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LENBQUM7WUFDeEUsQ0FBQztRQUNILENBQUM7YUFBTSxJQUFJLEtBQUssRUFBRSxDQUFDO1lBQ2pCLE9BQU8sQ0FBQyxLQUFLLENBQUMsdUJBQXVCLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDaEQsQ0FBQztRQUVELE1BQU0sS0FBSyxDQUFDO0lBQ2QsQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuaW1wb3J0IHsgZXhlY1N5bmMgfSBmcm9tICdjaGlsZF9wcm9jZXNzJztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgcHJpbnRFcnJvciB9IGZyb20gJy4vb3V0cHV0LXV0aWxzJztcblxuLyoqXG4gKiBQYXRoIHRvIGRpc3QvYm9pbGVycGxhdGUuanMuIHRzYyBlbWl0cyBjb21tYW5kcyBhdCBkaXN0L2NvbW1hbmRzLywgc29cbiAqIGJvaWxlcnBsYXRlIGlzIG9uZSBsZXZlbCB1cC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVCb2lsZXJwbGF0ZVBhdGgoY2FsbGVyRGlyOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gcGF0aC5qb2luKGNhbGxlckRpciwgJy4uJywgJ2JvaWxlcnBsYXRlLmpzJyk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2RrSW5mbyB7XG4gIGF2YWlsYWJsZTogYm9vbGVhbjtcbiAgdmVyc2lvbjogc3RyaW5nIHwgbnVsbDtcbiAgZXJyb3I/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgdGhlIEFXUyBDREsgQ0xJIGlzIGluc3RhbGxlZCBhbmQgcmV0dXJucyBpdHMgdmVyc2lvbi5cbiAqXG4gKiBUcmllcyBgY2RrIC0tdmVyc2lvbmAgZmlyc3QuIElmIHRoYXQgZmFpbHMgKHR5cGljYWxseSBiZWNhdXNlIHRoZSB1c2VyIGhhc1xuICogY2RrIG9uIFBBVEggdmlhIHRoZWlyIHNoZWxsIHJjIGJ1dCBleGVjU3luYydzIGRlZmF1bHQgYC9iaW4vc2hgIGRvZXNuJ3RcbiAqIHNvdXJjZSBpdCksIGZhbGxzIGJhY2sgdG8gcnVubmluZyB0aHJvdWdoIHRoZSB1c2VyJ3MgaW50ZXJhY3RpdmUgc2hlbGxcbiAqIChgJFNIRUxMIC1pIC1jYCkgc28gbm9kZSB2ZXJzaW9uIG1hbmFnZXJzIGxpa2UgbnZtL2FzZGYgYW5kIGhvbWVicmV3IHBhdGhzXG4gKiBiZWNvbWUgdmlzaWJsZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldENka0luZm8oKTogQ2RrSW5mbyB7XG4gIHRyeSB7XG4gICAgY29uc3Qgb3V0cHV0ID0gZXhlY1N5bmMoJ2NkayAtLXZlcnNpb24nLCB7IGVuY29kaW5nOiAndXRmLTgnLCBzdGRpbzogJ3BpcGUnIH0pO1xuICAgIHJldHVybiB7IGF2YWlsYWJsZTogdHJ1ZSwgdmVyc2lvbjogb3V0cHV0LnRyaW0oKSB9O1xuICB9IGNhdGNoIChmaXJzdEVycm9yKSB7XG4gICAgLy8gRmFsbGJhY2s6IGludm9rZSB0aHJvdWdoIHRoZSB1c2VyJ3MgbG9naW4gc2hlbGwgc28gUEFUSCBmcm9tIHRoZWlyIHJjXG4gICAgLy8gZmlsZSBpcyBzb3VyY2VkLiBTa2lwIHdoZW4gU0hFTEwgaXNuJ3Qgc2V0IG9yIGlzIC9iaW4vc2ggKHdoaWNoIHdvdWxkXG4gICAgLy8gYmUgdGhlIHNhbWUgZGVmYXVsdCkuXG4gICAgY29uc3QgdXNlclNoZWxsID0gcHJvY2Vzcy5lbnYuU0hFTEw7XG4gICAgaWYgKHVzZXJTaGVsbCAmJiAhdXNlclNoZWxsLmVuZHNXaXRoKCcvc2gnKSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3Qgb3V0cHV0ID0gZXhlY1N5bmMoJ2NkayAtLXZlcnNpb24nLCB7XG4gICAgICAgICAgZW5jb2Rpbmc6ICd1dGYtOCcsXG4gICAgICAgICAgc3RkaW86ICdwaXBlJyxcbiAgICAgICAgICBzaGVsbDogdXNlclNoZWxsLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHsgYXZhaWxhYmxlOiB0cnVlLCB2ZXJzaW9uOiBvdXRwdXQudHJpbSgpIH07XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgLy8gZmFsbCB0aHJvdWdoIHRvIHRoZSBvcmlnaW5hbCBlcnJvclxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgYXZhaWxhYmxlOiBmYWxzZSxcbiAgICAgIHZlcnNpb246IG51bGwsXG4gICAgICBlcnJvcjogZmlyc3RFcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZmlyc3RFcnJvci5tZXNzYWdlIDogJ1Vua25vd24gZXJyb3InLFxuICAgIH07XG4gIH1cbn1cblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciB0aGUgQVdTIENESyBDTEkgaXMgaW5zdGFsbGVkIGFuZCBhY2Nlc3NpYmxlIG9uIHRoZSBQQVRILlxuICovXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tDZGtBdmFpbGFibGUoKTogYm9vbGVhbiB7XG4gIHJldHVybiBnZXRDZGtJbmZvKCkuYXZhaWxhYmxlO1xufVxuXG4vKipcbiAqIEFzc2VydHMgdGhhdCB0aGUgQVdTIENESyBDTEkgaXMgaW5zdGFsbGVkOyB0aHJvd3Mgd2l0aCBhIHVzZXItZnJpZW5kbHlcbiAqIG1lc3NhZ2UgKyBpbnN0YWxsIGhpbnQgd2hlbiBpdCBpc24ndC4gVXNlIGF0IHRoZSB0b3Agb2YgYW55IGNvbW1hbmQgdGhhdFxuICogc2hlbGxzIG91dCB0byBgY2RrYC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVuc3VyZUNka0F2YWlsYWJsZSgpOiB2b2lkIHtcbiAgaWYgKGNoZWNrQ2RrQXZhaWxhYmxlKCkpIHJldHVybjtcbiAgcHJpbnRFcnJvcignQVdTIENESyBpcyBub3QgaW5zdGFsbGVkIG9yIG5vdCBhY2Nlc3NpYmxlJyk7XG4gIGNvbnNvbGUubG9nKCdJbnN0YWxsIENESyB3aXRoOiBucG0gaW5zdGFsbCAtZyBhd3MtY2RrJyk7XG4gIHRocm93IG5ldyBFcnJvcignQVdTIENESyBub3QgZm91bmQnKTtcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciBleGVjdXRpbmcgYSBDREsgc2hlbGwgY29tbWFuZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDZGtTaGVsbE9wdGlvbnMge1xuICAvKiogV2hlbiBgdHJ1ZWAsIHByaW50cyB0aGUgZXJyb3IgdG8gc3RkZXJyIG9uIGZhaWx1cmUuICovXG4gIGRlYnVnPzogYm9vbGVhbjtcbiAgLyoqIFdoZW4gYHRydWVgLCBpbmhlcml0cyBzdGRpbyBzbyBvdXRwdXQgc3RyZWFtcyB0byB0aGUgdGVybWluYWwuIERlZmF1bHRzIHRvIGB0cnVlYC4gKi9cbiAgc2hvd091dHB1dD86IGJvb2xlYW47XG4gIC8qKiBBZGRpdGlvbmFsIGVudmlyb25tZW50IHZhcmlhYmxlcyB0byBpbmplY3QuICovXG4gIGVudj86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG59XG5cbi8qKlxuICogUmVzdWx0IG9mIGEgQ0RLIHNoZWxsIGNvbW1hbmQgZXhlY3V0aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENka1NoZWxsUmVzdWx0IHtcbiAgc3VjY2VzczogYm9vbGVhbjtcbiAgZHVyYXRpb246IG51bWJlcjtcbn1cblxuLyoqXG4gKiBFeGVjdXRlcyBhIENESyBDTEkgY29tbWFuZCBhcyBhIGNoaWxkIHByb2Nlc3MuXG4gKlxuICogQHBhcmFtIGNvbW1hbmQgLSBUaGUgZnVsbCBDREsgQ0xJIGNvbW1hbmQgc3RyaW5nIChlLmcuLCBgY2RrIGJvb3RzdHJhcCAuLi5gKS5cbiAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9uYWwgZXhlY3V0aW9uIHNldHRpbmdzLlxuICogQHJldHVybnMgQW4gb2JqZWN0IHdpdGggYHN1Y2Nlc3NgIGFuZCBgZHVyYXRpb25gIGluIG1zLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZXhlY3V0ZUNka1NoZWxsQ29tbWFuZChcbiAgY29tbWFuZDogc3RyaW5nLFxuICBvcHRpb25zOiBDZGtTaGVsbE9wdGlvbnMgPSB7fSxcbik6IENka1NoZWxsUmVzdWx0IHtcbiAgY29uc3QgeyBkZWJ1ZyA9IGZhbHNlLCBzaG93T3V0cHV0ID0gdHJ1ZSwgZW52OiBleHRyYUVudiB9ID0gb3B0aW9ucztcbiAgY29uc3Qgc3RhcnRUaW1lID0gRGF0ZS5ub3coKTtcblxuICB0cnkge1xuICAgIGNvbnN0IGVudiA9IHtcbiAgICAgIC4uLnByb2Nlc3MuZW52LFxuICAgICAgLi4uZXh0cmFFbnYsXG4gICAgfTtcblxuICAgIGV4ZWNTeW5jKGNvbW1hbmQsIHtcbiAgICAgIHN0ZGlvOiBzaG93T3V0cHV0ID8gWydpbmhlcml0JywgJ2luaGVyaXQnLCAncGlwZSddIDogJ3BpcGUnLFxuICAgICAgZW52LFxuICAgIH0pO1xuXG4gICAgY29uc3QgZHVyYXRpb24gPSBEYXRlLm5vdygpIC0gc3RhcnRUaW1lO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHN1Y2Nlc3M6IHRydWUsXG4gICAgICBkdXJhdGlvbixcbiAgICB9O1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGNvbnN0IGR1cmF0aW9uID0gRGF0ZS5ub3coKSAtIHN0YXJ0VGltZTtcblxuICAgIC8vIEV4dHJhY3Qgc3RkZXJyL3N0ZG91dCBmcm9tIGV4ZWNTeW5jIGVycm9yIHdoZW4gYXZhaWxhYmxlXG4gICAgaWYgKGVycm9yICYmIHR5cGVvZiBlcnJvciA9PT0gJ29iamVjdCcgJiYgJ3N0ZGVycicgaW4gZXJyb3IpIHtcbiAgICAgIGNvbnN0IGV4ZWNFcnJvciA9IGVycm9yIGFzIHsgc3RkZXJyPzogQnVmZmVyIHwgc3RyaW5nOyBzdGRvdXQ/OiBCdWZmZXIgfCBzdHJpbmc7IHN0YXR1cz86IG51bWJlciB9O1xuICAgICAgY29uc3Qgc3RkZXJyID0gZXhlY0Vycm9yLnN0ZGVycj8udG9TdHJpbmcoKS50cmltKCk7XG4gICAgICBjb25zdCBzdGRvdXQgPSBleGVjRXJyb3Iuc3Rkb3V0Py50b1N0cmluZygpLnRyaW0oKTtcblxuICAgICAgY29uc29sZS5lcnJvcignJyk7XG4gICAgICBjb25zb2xlLmVycm9yKCdDREsgZGVwbG95bWVudCBmYWlsZWQ6Jyk7XG4gICAgICBpZiAoc3RkZXJyKSBjb25zb2xlLmVycm9yKHN0ZGVycik7XG4gICAgICBpZiAoc3Rkb3V0KSBjb25zb2xlLmVycm9yKHN0ZG91dCk7XG4gICAgICBpZiAoZXhlY0Vycm9yLnN0YXR1cyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYEV4aXQgY29kZTogJHtleGVjRXJyb3Iuc3RhdHVzfSAoYWZ0ZXIgJHtkdXJhdGlvbn1tcylgKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGRlYnVnKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdDREsgZXhlY3V0aW9uIGZhaWxlZDonLCBlcnJvcik7XG4gICAgfVxuXG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"output-utils.d.ts","sourceRoot":"","sources":["../../src/utils/output-utils.ts"],"names":[],"mappings":"AAOA,OAAO,EACL,YAAY,EAGb,MAAM,yBAAyB,CAAC;AAMjC;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAC;IACpC,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,MAAM,CAAC;CACxC;
|
|
1
|
+
{"version":3,"file":"output-utils.d.ts","sourceRoot":"","sources":["../../src/utils/output-utils.ts"],"names":[],"mappings":"AAOA,OAAO,EACL,YAAY,EAGb,MAAM,yBAAyB,CAAC;AAMjC;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAC;IACpC,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,MAAM,CAAC;CACxC;AAmCD,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,IAAI,CAAyC;AAC5G,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,IAAI,CAAsC;AACtG,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,IAAI,CAAsC;AACzG,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,IAAI,CAAuC;AAExG,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,IAAI,CAEhE;AAID;;GAEG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,GAAE,aAAkB,GAAG,IAAI,CAuC3E;AAID,wBAAgB,WAAW,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,OAAO,CAAC,EAAE,WAAW,EAAE,GAAG,MAAM,CA0D5E;AAgED,wBAAgB,qBAAqB,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAY9D;AAED,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAEpD;AAID,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAOnE;AAED,wBAAgB,aAAa,CAC3B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,OAAO,GAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAO,GACpD,IAAI,CAWN;AAED,wBAAgB,YAAY,CAAC,IAAI,GAAE,MAAY,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAGrE;AAID;;;GAGG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CASzE;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS,CAQnH;AAED,MAAM,WAAW,kBAAkB,CAAC,CAAC;IACnC,KAAK,EAAE,CAAC,EAAE,CAAC;IACX,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;CAClB;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,GAAG,kBAAkB,CAAC,CAAC,CAAC,CA6BjG"}
|
|
@@ -31,9 +31,14 @@ function logOutput(level, message, data) {
|
|
|
31
31
|
const colors = { info: cyan, success: green, warn: yellow, error: red, debug: magenta };
|
|
32
32
|
const prefixes = { info: 'ℹ', success: '✓', warn: '⚠', error: '✗', debug: '●' };
|
|
33
33
|
const writers = { error: console.error, warn: console.warn, info: console.log, success: console.log, debug: console.log };
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
34
|
+
// Fall back to console.log + raw message if a caller leaks an unknown level
|
|
35
|
+
// (e.g. an `as LogLevel` cast on user input). The whole point of the logger
|
|
36
|
+
// is to surface errors — failing inside the logger and masking the real
|
|
37
|
+
// error with a TypeError defeats it.
|
|
38
|
+
const color = colors[level] ?? ((s) => s);
|
|
39
|
+
const prefix = prefixes[level] ?? '?';
|
|
40
|
+
const write = writers[level] ?? console.log;
|
|
41
|
+
write(`${color(prefix)} ${message}`);
|
|
37
42
|
if (data !== undefined)
|
|
38
43
|
write(dim(formatDataForLog(data)));
|
|
39
44
|
}
|
|
@@ -317,4 +322,4 @@ function extractListResponse(response, itemsKey) {
|
|
|
317
322
|
printError('Invalid response format from API');
|
|
318
323
|
throw new Error('Unexpected API response format');
|
|
319
324
|
}
|
|
320
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3V0cHV0LXV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxzL291dHB1dC11dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsK0NBQStDO0FBQy9DLHNDQUFzQzs7Ozs7QUFrRXRDLG9DQUE0RztBQUM1Ryw4QkFBc0c7QUFDdEcsb0NBQXlHO0FBQ3pHLGdDQUF3RztBQUV4RyxnQ0FFQztBQU9ELGdDQXVDQztBQUlELGtDQTBEQztBQWdFRCxzREFZQztBQUVELGdDQUVDO0FBSUQsb0NBT0M7QUFFRCxzQ0FjQztBQUVELG9DQUdDO0FBUUQsd0NBU0M7QUFNRCxzREFRQztBQVlELGtEQTZCQztBQTNXRCxzREFBeUI7QUFDekIsMERBQTZCO0FBQzdCLDREQUE4QjtBQUM5QixnREFBd0I7QUFDeEIsMkRBSWlDO0FBRWpDLE1BQU0sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEdBQUcsb0JBQUksQ0FBQztBQTBCckUsNEJBQTRCO0FBRTVCLFNBQVMsU0FBUyxDQUFDLEtBQWUsRUFBRSxPQUFlLEVBQUUsSUFBYztJQUNqRSxNQUFNLE1BQU0sR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxDQUFDO0lBQ3hGLE1BQU0sUUFBUSxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDaEYsTUFBTSxPQUFPLEdBQUcsRUFBRSxLQUFLLEVBQUUsT0FBTyxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsT0FB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LENBQUMsT0FBTyxDQUFhLElBQUksS0FBSyxDQUFDO1FBRTNFLGdEQUFnRDtRQUNoRCxJQUFJLFFBQVEsSUFBSSxHQUFHLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ3BELE9BQU8sRUFBRSxLQUFLLEVBQUUsR0FBRyxDQUFDLFFBQVEsQ0FBUSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsQ0FBQztRQUN6RCxDQUFDO1FBRUQsMEJBQTBCO1FBQzFCLElBQUksT0FBTyxJQUFJLEdBQUcsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQy9DLE9BQU8sRUFBRSxLQUFLLEVBQUUsR0FBRyxDQUFDLEtBQVksRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLENBQUM7UUFDckQsQ0FBQztRQUVELFlBQVksQ0FBQyxrREFBa0QsQ0FBQyxDQUFDO1FBQ2pFLE9BQU8sRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxDQUFDO0lBQ3pELENBQUM7SUFFRCxVQUFVLENBQUMsa0NBQWtDLENBQUMsQ0FBQztJQUMvQyxNQUFNLElBQUksS0FBSyxDQUFDLGdDQUFnQyxDQUFDLENBQUM7QUFDcEQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG5pbXBvcnQgZnMgZnJvbSAnbm9kZTpmcyc7XG5pbXBvcnQgcGF0aCBmcm9tICdub2RlOnBhdGgnO1xuaW1wb3J0IHBpY28gZnJvbSAncGljb2NvbG9ycyc7XG5pbXBvcnQgWUFNTCBmcm9tICd5YW1sJztcbmltcG9ydCB7XG4gIE91dHB1dEZvcm1hdCxcbiAgZm9ybWF0RmlsZVNpemUsXG4gIFRBQkxFX09QVElPTlMsXG59IGZyb20gJy4uL2NvbmZpZy9jbGkuY29uc3RhbnRzJztcblxuY29uc3QgeyBib2xkLCBjeWFuLCBncmVlbiwgeWVsbG93LCByZWQsIGRpbSwgbWFnZW50YSwgd2hpdGUgfSA9IHBpY287XG5cbnR5cGUgTG9nTGV2ZWwgPSAnaW5mbycgfCAnc3VjY2VzcycgfCAnd2FybicgfCAnZXJyb3InIHwgJ2RlYnVnJztcblxuLyoqXG4gKiBPcHRpb25zIGZvciBvdXRwdXREYXRhIGZ1bmN0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgT3V0cHV0T3B0aW9ucyB7XG4gIGZvcm1hdD86IE91dHB1dEZvcm1hdDtcbiAgZmlsZT86IHN0cmluZztcbiAgcHJldHR5PzogYm9vbGVhbjtcbiAgc2lsZW50PzogYm9vbGVhbjtcbiAgYXBwZW5kPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBUYWJsZSBjb2x1bW4gY29uZmlndXJhdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRhYmxlQ29sdW1uIHtcbiAgaGVhZGVyOiBzdHJpbmc7XG4gIGtleTogc3RyaW5nO1xuICB3aWR0aD86IG51bWJlcjtcbiAgYWxpZ24/OiAnbGVmdCcgfCAnY2VudGVyJyB8ICdyaWdodCc7XG4gIGZvcm1hdHRlcj86ICh2YWx1ZTogdW5rbm93bikgPT4gc3RyaW5nO1xufVxuXG4vLyAtLS0gTG9nZ2luZyBmdW5jdGlvbnMgLS0tXG5cbmZ1bmN0aW9uIGxvZ091dHB1dChsZXZlbDogTG9nTGV2ZWwsIG1lc3NhZ2U6IHN0cmluZywgZGF0YT86IHVua25vd24pOiB2b2lkIHtcbiAgY29uc3QgY29sb3JzID0geyBpbmZvOiBjeWFuLCBzdWNjZXNzOiBncmVlbiwgd2FybjogeWVsbG93LCBlcnJvcjogcmVkLCBkZWJ1ZzogbWFnZW50YSB9O1xuICBjb25zdCBwcmVmaXhlcyA9IHsgaW5mbzogJ+KEuScsIHN1Y2Nlc3M6ICfinJMnLCB3YXJuOiAn4pqgJywgZXJyb3I6ICfinJcnLCBkZWJ1ZzogJ+KXjycgfTtcbiAgY29uc3Qgd3JpdGVycyA9IHsgZXJyb3I6IGNvbnNvbGUuZXJyb3IsIHdhcm46IGNvbnNvbGUud2FybiwgaW5mbzogY29uc29sZS5sb2csIHN1Y2Nlc3M6IGNvbnNvbGUubG9nLCBkZWJ1ZzogY29uc29sZS5sb2cgfTtcblxuICBjb25zdCBzdHlsZWRNZXNzYWdlID0gYCR7Y29sb3JzW2xldmVsXShwcmVmaXhlc1tsZXZlbF0pfSAke21lc3NhZ2V9YDtcbiAgY29uc3Qgd3JpdGUgPSB3cml0ZXJzW2xldmVsXTtcblxuICB3cml0ZShzdHlsZWRNZXNzYWdlKTtcbiAgaWYgKGRhdGEgIT09IHVuZGVmaW5lZCkgd3JpdGUoZGltKGZvcm1hdERhdGFGb3JMb2coZGF0YSkpKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0RGF0YUZvckxvZyhkYXRhOiB1bmtub3duKTogc3RyaW5nIHtcbiAgaWYgKHR5cGVvZiBkYXRhID09PSAnc3RyaW5nJykgcmV0dXJuIGRhdGE7XG4gIGlmICh0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgJiYgZGF0YSAhPT0gbnVsbCkge1xuICAgIGNvbnN0IGVudHJpZXMgPSBPYmplY3QuZW50cmllcyhkYXRhKTtcbiAgICBpZiAoZW50cmllcy5sZW5ndGggPD0gNSkge1xuICAgICAgcmV0dXJuICdcXG4nICsgZW50cmllcy5tYXAoKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgICBjb25zdCB2YWx1ZVN0ciA9IHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgPyBKU09OLnN0cmluZ2lmeSh2YWx1ZSkgOiBTdHJpbmcodmFsdWUpO1xuICAgICAgICByZXR1cm4gYCAgJHtrZXl9OiAke3ZhbHVlU3RyfWA7XG4gICAgICB9KS5qb2luKCdcXG4nKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGRhdGEsIG51bGwsIDIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJpbnRTdWNjZXNzKG1lc3NhZ2U6IHN0cmluZywgZGF0YT86IHVua25vd24pOiB2b2lkIHsgbG9nT3V0cHV0KCdzdWNjZXNzJywgbWVzc2FnZSwgZGF0YSk7IH1cbmV4cG9ydCBmdW5jdGlvbiBwcmludEluZm8obWVzc2FnZTogc3RyaW5nLCBkYXRhPzogdW5rbm93bik6IHZvaWQgeyBsb2dPdXRwdXQoJ2luZm8nLCBtZXNzYWdlLCBkYXRhKTsgfVxuZXhwb3J0IGZ1bmN0aW9uIHByaW50V2FybmluZyhtZXNzYWdlOiBzdHJpbmcsIGRhdGE/OiB1bmtub3duKTogdm9pZCB7IGxvZ091dHB1dCgnd2FybicsIG1lc3NhZ2UsIGRhdGEpOyB9XG5leHBvcnQgZnVuY3Rpb24gcHJpbnRFcnJvcihtZXNzYWdlOiBzdHJpbmcsIGRhdGE/OiB1bmtub3duKTogdm9pZCB7IGxvZ091dHB1dCgnZXJyb3InLCBtZXNzYWdlLCBkYXRhKTsgfVxuXG5leHBvcnQgZnVuY3Rpb24gcHJpbnREZWJ1ZyhtZXNzYWdlOiBzdHJpbmcsIGRhdGE/OiB1bmtub3duKTogdm9pZCB7XG4gIGlmIChwcm9jZXNzLmVudi5ERUJVRyA9PT0gJ3RydWUnKSBsb2dPdXRwdXQoJ2RlYnVnJywgbWVzc2FnZSwgZGF0YSk7XG59XG5cbi8vIC0tLSBEYXRhIG91dHB1dCAtLS1cblxuLyoqXG4gKiBPdXRwdXQgZGF0YSBpbiBzcGVjaWZpZWQgZm9ybWF0IChjb25zb2xlIG9yIGZpbGUpXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBvdXRwdXREYXRhKGRhdGE6IHVua25vd24sIG9wdGlvbnM6IE91dHB1dE9wdGlvbnMgPSB7fSk6IHZvaWQge1xuICBjb25zdCB7IGZvcm1hdCA9ICdqc29uJywgZmlsZSwgcHJldHR5ID0gdHJ1ZSwgc2lsZW50ID0gZmFsc2UsIGFwcGVuZCA9IGZhbHNlIH0gPSBvcHRpb25zO1xuXG4gIGxldCBvdXRwdXQ6IHN0cmluZztcblxuICBzd2l0Y2ggKGZvcm1hdCkge1xuICAgIGNhc2UgJ3RhYmxlJzpcbiAgICAgIGlmICghc2lsZW50KSBwcmludEluZm8oJ1JlbmRlcmluZyBhcyB0YWJsZScpO1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZGF0YSkgJiYgZGF0YS5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGZvcm1hdFRhYmxlKGRhdGEpKTtcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGRhdGEgPT09ICdvYmplY3QnICYmIGRhdGEgIT09IG51bGwpIHtcbiAgICAgICAgY29uc29sZS5sb2coZm9ybWF0VGFibGUoW2RhdGFdKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLnRhYmxlKEFycmF5LmlzQXJyYXkoZGF0YSkgPyBkYXRhIDogW2RhdGFdKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcblxuICAgIGNhc2UgJ2Nzdic6XG4gICAgICBpZiAoIXNpbGVudCkgcHJpbnRJbmZvKCdSZW5kZXJpbmcgYXMgQ1NWJyk7XG4gICAgICBvdXRwdXQgPSBmb3JtYXRDc3YoZGF0YSk7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ3lhbWwnOlxuICAgICAgaWYgKCFzaWxlbnQpIHByaW50SW5mbygnUmVuZGVyaW5nIGFzIFlBTUwnKTtcbiAgICAgIG91dHB1dCA9IFlBTUwuc3RyaW5naWZ5KGRhdGEpO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdqc29uJzpcbiAgICBkZWZhdWx0OlxuICAgICAgaWYgKCFzaWxlbnQpIHByaW50SW5mbygnUmVuZGVyaW5nIGFzIEpTT04nKTtcbiAgICAgIG91dHB1dCA9IHByZXR0eSA/IEpTT04uc3RyaW5naWZ5KGRhdGEsIG51bGwsIDIpIDogSlNPTi5zdHJpbmdpZnkoZGF0YSk7XG4gICAgICBicmVhaztcbiAgfVxuXG4gIGlmIChmaWxlKSB7XG4gICAgd3JpdGVUb0ZpbGUoZmlsZSwgb3V0cHV0LCBmb3JtYXQsIGFwcGVuZCk7XG4gIH0gZWxzZSB7XG4gICAgY29uc29sZS5sb2cob3V0cHV0KTtcbiAgfVxufVxuXG4vLyAtLS0gVGFibGUgZm9ybWF0dGluZyAtLS1cblxuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdFRhYmxlKGRhdGE6IHVua25vd25bXSwgY29sdW1ucz86IFRhYmxlQ29sdW1uW10pOiBzdHJpbmcge1xuICBpZiAoIUFycmF5LmlzQXJyYXkoZGF0YSkgfHwgZGF0YS5sZW5ndGggPT09IDApIHJldHVybiBkaW0oJyhObyBkYXRhIHRvIGRpc3BsYXkpJyk7XG5cbiAgY29uc3QgZmlyc3RJdGVtID0gZGF0YVswXTtcbiAgaWYgKHR5cGVvZiBmaXJzdEl0ZW0gIT09ICdvYmplY3QnIHx8IGZpcnN0SXRlbSA9PT0gbnVsbCkgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGRhdGEsIG51bGwsIDIpO1xuXG4gIGNvbnN0IGNvbHM6IFRhYmxlQ29sdW1uW10gPSBjb2x1bW5zIHx8IE9iamVjdC5rZXlzKGZpcnN0SXRlbSkubWFwKGtleSA9PiAoeyBoZWFkZXI6IGtleSwga2V5IH0pKTtcblxuICBjb25zdCBjb2xXaWR0aHM6IG51bWJlcltdID0gY29scy5tYXAoY29sID0+IHtcbiAgICBpZiAoY29sLndpZHRoKSByZXR1cm4gY29sLndpZHRoO1xuICAgIGNvbnN0IGhlYWRlcldpZHRoID0gY29sLmhlYWRlci5sZW5ndGg7XG4gICAgY29uc3QgZGF0YVdpZHRoID0gTWF0aC5tYXgoLi4uZGF0YS5tYXAoaXRlbSA9PiB7XG4gICAgICBjb25zdCB2YWx1ZSA9IGNvbC5mb3JtYXR0ZXJcbiAgICAgICAgPyBjb2wuZm9ybWF0dGVyKChpdGVtIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KVtjb2wua2V5XSlcbiAgICAgICAgOiBTdHJpbmcoKGl0ZW0gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pW2NvbC5rZXldID8/ICcnKTtcbiAgICAgIHJldHVybiB2YWx1ZS5sZW5ndGg7XG4gICAgfSkpO1xuICAgIHJldHVybiBNYXRoLm1heChoZWFkZXJXaWR0aCwgZGF0YVdpZHRoLCAzKTtcbiAgfSk7XG5cbiAgY29uc3QgeyBib3JkZXIgfSA9IFRBQkxFX09QVElPTlM7XG5cbiAgY29uc3QgaG9yaXpvbnRhbExpbmUgPSAobGVmdDogc3RyaW5nLCBtaWRkbGU6IHN0cmluZywgcmlnaHQ6IHN0cmluZykgPT5cbiAgICBsZWZ0ICsgY29sV2lkdGhzLm1hcCh3ID0+IGJvcmRlci5ib2R5Sm9pbi5yZXBlYXQoKHcgPz8gMCkgKyAyKSkuam9pbihtaWRkbGUpICsgcmlnaHQ7XG5cbiAgY29uc3QgdG9wTGluZSA9IGhvcml6b250YWxMaW5lKGJvcmRlci50b3BMZWZ0LCBib3JkZXIudG9wSm9pbiwgYm9yZGVyLnRvcFJpZ2h0KTtcbiAgY29uc3QgbWlkTGluZSA9IGhvcml6b250YWxMaW5lKGJvcmRlci5qb2luTGVmdCwgYm9yZGVyLmpvaW5Kb2luLCBib3JkZXIuam9pblJpZ2h0KTtcbiAgY29uc3QgYm90dG9tTGluZSA9IGhvcml6b250YWxMaW5lKGJvcmRlci5ib3R0b21MZWZ0LCBib3JkZXIuYm90dG9tSm9pbiwgYm9yZGVyLmJvdHRvbVJpZ2h0KTtcblxuICBjb25zdCBmb3JtYXRDZWxsID0gKHZhbHVlOiBzdHJpbmcsIHdpZHRoOiBudW1iZXIsIGFsaWduOiAnbGVmdCcgfCAnY2VudGVyJyB8ICdyaWdodCcgPSAnbGVmdCcpOiBzdHJpbmcgPT4ge1xuICAgIGlmICh2YWx1ZS5sZW5ndGggPiB3aWR0aCkgcmV0dXJuIHZhbHVlLnN1YnN0cmluZygwLCB3aWR0aCAtIDMpICsgJy4uLic7XG4gICAgaWYgKGFsaWduID09PSAnY2VudGVyJykge1xuICAgICAgY29uc3QgbGVmdFBhZCA9IE1hdGguZmxvb3IoKHdpZHRoIC0gdmFsdWUubGVuZ3RoKSAvIDIpO1xuICAgICAgcmV0dXJuICcgJy5yZXBlYXQobGVmdFBhZCkgKyB2YWx1ZSArICcgJy5yZXBlYXQod2lkdGggLSB2YWx1ZS5sZW5ndGggLSBsZWZ0UGFkKTtcbiAgICB9XG4gICAgcmV0dXJuIGFsaWduID09PSAncmlnaHQnID8gdmFsdWUucGFkU3RhcnQod2lkdGgpIDogdmFsdWUucGFkRW5kKHdpZHRoKTtcbiAgfTtcblxuICBjb25zdCBoZWFkZXJSb3cgPSBib3JkZXIuYm9keUxlZnQgKyAnICcgK1xuICAgIGNvbHMubWFwKChjb2wsIGkpID0+IGN5YW4oYm9sZChmb3JtYXRDZWxsKGNvbC5oZWFkZXIsIGNvbFdpZHRoc1tpXSA/PyAwKSkpKS5qb2luKGAgJHtib3JkZXIuYm9keUpvaW59IGApICtcbiAgICBgICR7Ym9yZGVyLmJvZHlSaWdodH1gO1xuXG4gIGxldCB0YWJsZSA9IGN5YW4odG9wTGluZSkgKyAnXFxuJyArIGhlYWRlclJvdyArICdcXG4nICsgY3lhbihtaWRMaW5lKSArICdcXG4nO1xuXG4gIGRhdGEuZm9yRWFjaChpdGVtID0+IHtcbiAgICBjb25zdCByb3cgPSBib3JkZXIuYm9keUxlZnQgKyAnICcgK1xuICAgICAgY29scy5tYXAoKGNvbCwgaSkgPT4ge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IGNvbC5mb3JtYXR0ZXJcbiAgICAgICAgICA/IGNvbC5mb3JtYXR0ZXIoKGl0ZW0gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pW2NvbC5rZXldKVxuICAgICAgICAgIDogU3RyaW5nKChpdGVtIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KVtjb2wua2V5XSA/PyAnJyk7XG4gICAgICAgIHJldHVybiBmb3JtYXRDZWxsKHZhbHVlLCBjb2xXaWR0aHNbaV0gPz8gMCwgY29sLmFsaWduKTtcbiAgICAgIH0pLmpvaW4oYCAke2JvcmRlci5ib2R5Sm9pbn0gYCkgK1xuICAgICAgYCAke2JvcmRlci5ib2R5UmlnaHR9YDtcbiAgICB0YWJsZSArPSByb3cgKyAnXFxuJztcbiAgfSk7XG5cbiAgdGFibGUgKz0gY3lhbihib3R0b21MaW5lKTtcbiAgcmV0dXJuIHRhYmxlO1xufVxuXG4vLyAtLS0gQ1NWIGZvcm1hdHRpbmcgLS0tXG5cbmZ1bmN0aW9uIGZvcm1hdENzdihkYXRhOiB1bmtub3duKTogc3RyaW5nIHtcbiAgaWYgKCFBcnJheS5pc0FycmF5KGRhdGEpIHx8IGRhdGEubGVuZ3RoID09PSAwKSByZXR1cm4gJyc7XG4gIGNvbnN0IGZpcnN0SXRlbSA9IGRhdGFbMF07XG4gIGlmICh0eXBlb2YgZmlyc3RJdGVtICE9PSAnb2JqZWN0JyB8fCBmaXJzdEl0ZW0gPT09IG51bGwpIHJldHVybiBkYXRhLmpvaW4oJywnKTtcblxuICBjb25zdCBoZWFkZXJzID0gT2JqZWN0LmtleXMoZmlyc3RJdGVtKTtcbiAgY29uc3Qgcm93czogc3RyaW5nW10gPSBbaGVhZGVycy5tYXAoaCA9PiBlc2NhcGVDc3ZWYWx1ZShoKSkuam9pbignLCcpXTtcbiAgZGF0YS5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgIHJvd3MucHVzaChoZWFkZXJzLm1hcChoID0+IGVzY2FwZUNzdlZhbHVlKChpdGVtIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KVtoXSkpLmpvaW4oJywnKSk7XG4gIH0pO1xuICByZXR1cm4gcm93cy5qb2luKCdcXG4nKTtcbn1cblxuZnVuY3Rpb24gZXNjYXBlQ3N2VmFsdWUodmFsdWU6IHVua25vd24pOiBzdHJpbmcge1xuICBpZiAodmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZCkgcmV0dXJuICcnO1xuICBjb25zdCBzdHIgPSBTdHJpbmcodmFsdWUpO1xuICBpZiAoc3RyLmluY2x1ZGVzKCcsJykgfHwgc3RyLmluY2x1ZGVzKCdcIicpIHx8IHN0ci5pbmNsdWRlcygnXFxuJykpIHtcbiAgICByZXR1cm4gYFwiJHtzdHIucmVwbGFjZSgvXCIvZywgJ1wiXCInKX1cImA7XG4gIH1cbiAgcmV0dXJuIHN0cjtcbn1cblxuLy8gLS0tIEZpbGUgb3BlcmF0aW9ucyAtLS1cblxuLyoqXG4gKiBWYWxpZGF0ZSB0aGF0IGEgZmlsZSBwYXRoIHJlc29sdmVzIHdpdGhpbiB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeS5cbiAqIFByZXZlbnRzIHBhdGggdHJhdmVyc2FsIGF0dGFja3MgKGUuZy4sIC0tb3V0cHV0IC4uLy4uL2V0Yy9wYXNzd2QpLlxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZU91dHB1dFBhdGgoZmlsZVBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IHJlc29sdmVkID0gcGF0aC5yZXNvbHZlKGZpbGVQYXRoKTtcbiAgY29uc3QgY3dkID0gcGF0aC5yZXNvbHZlKHByb2Nlc3MuY3dkKCkpO1xuICBpZiAoIXJlc29sdmVkLnN0YXJ0c1dpdGgoY3dkICsgcGF0aC5zZXApICYmIHJlc29sdmVkICE9PSBjd2QpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFBhdGggdHJhdmVyc2FsIHJlamVjdGVkOiBcIiR7ZmlsZVBhdGh9XCIgcmVzb2x2ZXMgb3V0c2lkZSB0aGUgY3VycmVudCBkaXJlY3RvcnlgKTtcbiAgfVxuICByZXR1cm4gcmVzb2x2ZWQ7XG59XG5cbmZ1bmN0aW9uIHdyaXRlVG9GaWxlKGZpbGVQYXRoOiBzdHJpbmcsIGNvbnRlbnQ6IHN0cmluZywgZm9ybWF0OiBPdXRwdXRGb3JtYXQsIGFwcGVuZDogYm9vbGVhbiA9IGZhbHNlKTogdm9pZCB7XG4gIHRyeSB7XG4gICAgY29uc3Qgc2FmZVBhdGggPSB2YWxpZGF0ZU91dHB1dFBhdGgoZmlsZVBhdGgpO1xuICAgIGNvbnN0IGRpciA9IHBhdGguZGlybmFtZShzYWZlUGF0aCk7XG4gICAgaWYgKGRpciAhPT0gJy4nKSBlbnN1cmVPdXRwdXREaXJlY3RvcnkoZGlyKTtcblxuICAgIGlmIChhcHBlbmQpIHtcbiAgICAgIGZzLmFwcGVuZEZpbGVTeW5jKHNhZmVQYXRoLCBjb250ZW50ICsgJ1xcbicsICd1dGYtOCcpO1xuICAgICAgcHJpbnRTdWNjZXNzKCdPdXRwdXQgYXBwZW5kZWQgdG8gZmlsZScsIHsgcGF0aDogc2FmZVBhdGgsIGZvcm1hdCB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgZnMud3JpdGVGaWxlU3luYyhzYWZlUGF0aCwgY29udGVudCwgJ3V0Zi04Jyk7XG4gICAgICBjb25zdCBzdGF0cyA9IGZzLnN0YXRTeW5jKHNhZmVQYXRoKTtcbiAgICAgIHByaW50U3VjY2VzcygnT3V0cHV0IHNhdmVkIHRvIGZpbGUnLCB7IHBhdGg6IHNhZmVQYXRoLCBmb3JtYXQsIHNpemU6IGZvcm1hdEZpbGVTaXplKHN0YXRzLnNpemUpIH0pO1xuICAgIH1cbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBwcmludEVycm9yKCdGYWlsZWQgdG8gd3JpdGUgZmlsZScsIHtcbiAgICAgIHBhdGg6IGZpbGVQYXRoLFxuICAgICAgZXJyb3I6IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKSxcbiAgICB9KTtcbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZW5zdXJlT3V0cHV0RGlyZWN0b3J5KG91dHB1dFBhdGg6IHN0cmluZyk6IHZvaWQge1xuICBpZiAoZnMuZXhpc3RzU3luYyhvdXRwdXRQYXRoKSkgcmV0dXJuO1xuICB0cnkge1xuICAgIGZzLm1rZGlyU3luYyhvdXRwdXRQYXRoLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICBwcmludERlYnVnKCdEaXJlY3RvcnkgY3JlYXRlZCcsIHsgcGF0aDogb3V0cHV0UGF0aCB9KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBwcmludEVycm9yKCdGYWlsZWQgdG8gY3JlYXRlIGRpcmVjdG9yeScsIHtcbiAgICAgIHBhdGg6IG91dHB1dFBhdGgsXG4gICAgICBlcnJvcjogZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpLFxuICAgIH0pO1xuICAgIHRocm93IGVycm9yO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmaWxlRXhpc3RzKGZpbGVQYXRoOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIGZzLmV4aXN0c1N5bmMoZmlsZVBhdGgpO1xufVxuXG4vLyAtLS0gRGlzcGxheSBoZWxwZXJzIC0tLVxuXG5leHBvcnQgZnVuY3Rpb24gcHJpbnRTZWN0aW9uKHRpdGxlOiBzdHJpbmcsIHN1YnRpdGxlPzogc3RyaW5nKTogdm9pZCB7XG4gIGNvbnN0IHdpZHRoID0gcHJvY2Vzcy5zdGRvdXQuY29sdW1ucyB8fCA4MDtcbiAgY29uc29sZS5sb2coJycpO1xuICBjb25zb2xlLmxvZyhjeWFuKCfilZAnLnJlcGVhdCh3aWR0aCkpKTtcbiAgY29uc29sZS5sb2coY3lhbihib2xkKHRpdGxlKSkpO1xuICBpZiAoc3VidGl0bGUpIGNvbnNvbGUubG9nKGRpbShzdWJ0aXRsZSkpO1xuICBjb25zb2xlLmxvZyhjeWFuKCfilZAnLnJlcGVhdCh3aWR0aCkpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByaW50S2V5VmFsdWUoXG4gIGRhdGE6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICBvcHRpb25zOiB7IGluZGVudD86IG51bWJlcjsgc2VwYXJhdG9yPzogc3RyaW5nIH0gPSB7fSxcbik6IHZvaWQge1xuICBjb25zdCB7IGluZGVudCA9IDAsIHNlcGFyYXRvciA9ICfilIInIH0gPSBvcHRpb25zO1xuICBjb25zdCBtYXhLZXlMZW5ndGggPSBNYXRoLm1heCguLi5PYmplY3Qua2V5cyhkYXRhKS5tYXAoayA9PiBrLmxlbmd0aCkpO1xuICBjb25zdCBpbmRlbnRTdHIgPSAnICcucmVwZWF0KGluZGVudCk7XG5cbiAgT2JqZWN0LmVudHJpZXMoZGF0YSkuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgY29uc3QgcGFkZGVkS2V5ID0ga2V5LnBhZEVuZChtYXhLZXlMZW5ndGgpO1xuICAgIGNvbnN0IGZvcm1hdHRlZFZhbHVlID0gdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAhPT0gbnVsbFxuICAgICAgPyBKU09OLnN0cmluZ2lmeSh2YWx1ZSkgOiBTdHJpbmcodmFsdWUpO1xuICAgIGNvbnNvbGUubG9nKGAke2luZGVudFN0cn0ke2RpbShwYWRkZWRLZXkpfSAke2N5YW4oc2VwYXJhdG9yKX0gJHt3aGl0ZShmb3JtYXR0ZWRWYWx1ZSl9YCk7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJpbnREaXZpZGVyKGNoYXI6IHN0cmluZyA9ICfilIAnLCB3aWR0aD86IG51bWJlcik6IHZvaWQge1xuICBjb25zdCBlZmZlY3RpdmVXaWR0aCA9IHdpZHRoIHx8IHByb2Nlc3Muc3Rkb3V0LmNvbHVtbnMgfHwgODA7XG4gIGNvbnNvbGUubG9nKGRpbShjaGFyLnJlcGVhdChlZmZlY3RpdmVXaWR0aCkpKTtcbn1cblxuLy8gLS0tIFJlc3BvbnNlIHBhcnNpbmcgLS0tXG5cbi8qKlxuICogVW53cmFwIGEgc2VuZFN1Y2Nlc3MgQVBJIGVudmVsb3BlOiB7IHN1Y2Nlc3MsIHN0YXR1c0NvZGUsIGRhdGE6IHsgLi4uIH0gfVxuICogUmV0dXJucyB0aGUgaW5uZXIgYGRhdGFgIG9iamVjdCwgb3IgdGhlIG9yaWdpbmFsIHJlc3BvbnNlIGlmIG5vdCB3cmFwcGVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdW53cmFwRW52ZWxvcGUocmVzcG9uc2U6IHVua25vd24pOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gIGlmIChyZXNwb25zZSAmJiB0eXBlb2YgcmVzcG9uc2UgPT09ICdvYmplY3QnKSB7XG4gICAgY29uc3Qgb2JqID0gcmVzcG9uc2UgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgaWYgKCdzdWNjZXNzJyBpbiBvYmogJiYgJ2RhdGEnIGluIG9iaiAmJiBvYmouZGF0YSAmJiB0eXBlb2Ygb2JqLmRhdGEgPT09ICdvYmplY3QnKSB7XG4gICAgICByZXR1cm4gb2JqLmRhdGEgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgfVxuICAgIHJldHVybiBvYmo7XG4gIH1cbiAgcmV0dXJuIHt9O1xufVxuXG4vKipcbiAqIEV4dHJhY3QgYSBzaW5nbGUgZW50aXR5IGZyb20gYW4gQVBJIHJlc3BvbnNlLCBoYW5kbGluZyBlbnZlbG9wZSBmb3JtYXRzLlxuICogVHJpZXM6IHBheWxvYWRbZW50aXR5S2V5XSwgcGF5bG9hZCBkaXJlY3RseSAoaWYgaWRlbnRpZmllcktleSBleGlzdHMpLCBvciB1bmRlZmluZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBleHRyYWN0U2luZ2xlUmVzcG9uc2U8VD4ocmVzcG9uc2U6IHVua25vd24sIGVudGl0eUtleTogc3RyaW5nLCBpZGVudGlmaWVyS2V5OiBzdHJpbmcpOiBUIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgcGF5bG9hZCA9IHVud3JhcEVudmVsb3BlKHJlc3BvbnNlKTtcbiAgLy8gRGlyZWN0IGVudGl0eTogcGF5bG9hZCBoYXMgdGhlIGlkZW50aWZpZXIgKGUuZy4gcGF5bG9hZC5pZCwgcGF5bG9hZC5wcm9wcywgcGF5bG9hZC5uYW1lKVxuICBpZiAoaWRlbnRpZmllcktleSBpbiBwYXlsb2FkKSByZXR1cm4gcGF5bG9hZCBhcyB1bmtub3duIGFzIFQ7XG4gIC8vIE5lc3RlZCB1bmRlciBlbnRpdHkga2V5OiBwYXlsb2FkLnBpcGVsaW5lLCBwYXlsb2FkLnBsdWdpblxuICBjb25zdCBuZXN0ZWQgPSBwYXlsb2FkW2VudGl0eUtleV0gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB1bmRlZmluZWQ7XG4gIGlmIChuZXN0ZWQgJiYgdHlwZW9mIG5lc3RlZCA9PT0gJ29iamVjdCcgJiYgaWRlbnRpZmllcktleSBpbiBuZXN0ZWQpIHJldHVybiBuZXN0ZWQgYXMgdW5rbm93biBhcyBUO1xuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIExpc3RSZXNwb25zZVJlc3VsdDxUPiB7XG4gIGl0ZW1zOiBUW107XG4gIHRvdGFsPzogbnVtYmVyO1xuICBoYXNNb3JlOiBib29sZWFuO1xufVxuXG4vKipcbiAqIEV4dHJhY3QgaXRlbXMgZnJvbSBhbiBBUEkgbGlzdCByZXNwb25zZSwgaGFuZGxpbmcgbXVsdGlwbGUgcmVzcG9uc2UgZm9ybWF0cy5cbiAqIFN1cHBvcnRzOiBgeyA8a2V5PjogVFtdIH1gLCBgeyBpdGVtczogVFtdIH1gLCBgVFtdYCwgb3IgaW52YWxpZCBmb3JtYXRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZXh0cmFjdExpc3RSZXNwb25zZTxUPihyZXNwb25zZTogdW5rbm93biwgaXRlbXNLZXk6IHN0cmluZyk6IExpc3RSZXNwb25zZVJlc3VsdDxUPiB7XG4gIGlmIChBcnJheS5pc0FycmF5KHJlc3BvbnNlKSkge1xuICAgIHJldHVybiB7IGl0ZW1zOiByZXNwb25zZSwgdG90YWw6IHVuZGVmaW5lZCwgaGFzTW9yZTogZmFsc2UgfTtcbiAgfVxuXG4gIGlmIChyZXNwb25zZSAmJiB0eXBlb2YgcmVzcG9uc2UgPT09ICdvYmplY3QnKSB7XG4gICAgY29uc3Qgb2JqID0gdW53cmFwRW52ZWxvcGUocmVzcG9uc2UpO1xuXG4gICAgLy8gRXh0cmFjdCBwYWdpbmF0aW9uIG1ldGFkYXRhIGlmIHByZXNlbnRcbiAgICBjb25zdCBwYWdpbmF0aW9uID0gb2JqLnBhZ2luYXRpb24gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB1bmRlZmluZWQ7XG4gICAgY29uc3QgdG90YWwgPSAocGFnaW5hdGlvbj8udG90YWwgPz8gb2JqLnRvdGFsKSBhcyBudW1iZXIgfCB1bmRlZmluZWQ7XG4gICAgY29uc3QgaGFzTW9yZSA9ICgocGFnaW5hdGlvbj8uaGFzTW9yZSA/PyBvYmouaGFzTW9yZSkgYXMgYm9vbGVhbikgfHwgZmFsc2U7XG5cbiAgICAvLyBUcnkgcHJpbWFyeSBrZXkgKGUuZy4gJ3BpcGVsaW5lcycsICdwbHVnaW5zJylcbiAgICBpZiAoaXRlbXNLZXkgaW4gb2JqICYmIEFycmF5LmlzQXJyYXkob2JqW2l0ZW1zS2V5XSkpIHtcbiAgICAgIHJldHVybiB7IGl0ZW1zOiBvYmpbaXRlbXNLZXldIGFzIFRbXSwgdG90YWwsIGhhc01vcmUgfTtcbiAgICB9XG5cbiAgICAvLyBUcnkgZ2VuZXJpYyAnaXRlbXMnIGtleVxuICAgIGlmICgnaXRlbXMnIGluIG9iaiAmJiBBcnJheS5pc0FycmF5KG9iai5pdGVtcykpIHtcbiAgICAgIHJldHVybiB7IGl0ZW1zOiBvYmouaXRlbXMgYXMgVFtdLCB0b3RhbCwgaGFzTW9yZSB9O1xuICAgIH1cblxuICAgIHByaW50V2FybmluZygnVW5leHBlY3RlZCByZXNwb25zZSBmb3JtYXQsIGF0dGVtcHRpbmcgdG8gaGFuZGxlJyk7XG4gICAgcmV0dXJuIHsgaXRlbXM6IFtdLCB0b3RhbDogdW5kZWZpbmVkLCBoYXNNb3JlOiBmYWxzZSB9O1xuICB9XG5cbiAgcHJpbnRFcnJvcignSW52YWxpZCByZXNwb25zZSBmb3JtYXQgZnJvbSBBUEknKTtcbiAgdGhyb3cgbmV3IEVycm9yKCdVbmV4cGVjdGVkIEFQSSByZXNwb25zZSBmb3JtYXQnKTtcbn1cbiJdfQ==
|
|
325
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3V0cHV0LXV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxzL291dHB1dC11dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsK0NBQStDO0FBQy9DLHNDQUFzQzs7Ozs7QUF1RXRDLG9DQUE0RztBQUM1Ryw4QkFBc0c7QUFDdEcsb0NBQXlHO0FBQ3pHLGdDQUF3RztBQUV4RyxnQ0FFQztBQU9ELGdDQXVDQztBQUlELGtDQTBEQztBQWdFRCxzREFZQztBQUVELGdDQUVDO0FBSUQsb0NBT0M7QUFFRCxzQ0FjQztBQUVELG9DQUdDO0FBUUQsd0NBU0M7QUFNRCxzREFRQztBQVlELGtEQTZCQztBQWhYRCxzREFBeUI7QUFDekIsMERBQTZCO0FBQzdCLDREQUE4QjtBQUM5QixnREFBd0I7QUFDeEIsMkRBSWlDO0FBRWpDLE1BQU0sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEdBQUcsb0JBQUksQ0FBQztBQTBCckUsNEJBQTRCO0FBRTVCLFNBQVMsU0FBUyxDQUFDLEtBQWUsRUFBRSxPQUFlLEVBQUUsSUFBYztJQUNqRSxNQUFNLE1BQU0sR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxDQUFDO0lBQ3hGLE1BQU0sUUFBUSxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDaEYsTUFBTSxPQUFPLEdBQUcsRUFBRSxLQUFLLEVBQUUsT0FBTyxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsT0FB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TUFBTSxVQUFVLEdBQUcsR0FBRyxDQUFDLFVBQWlELENBQUM7UUFDekUsTUFBTSxLQUFLLEdBQUcsQ0FBQyxVQUFVLEVBQUUsS0FBSyxJQUFJLEdBQUcsQ0FBQyxLQUFLLENBQXVCLENBQUM7UUFDckUsTUFBTSxPQUFPLEdBQUksQ0FBQyxVQUFVLEVBQUUsT0FBTyxJQUFJLEdBQUcsQ0FBQyxPQUFPLENBQWEsSUFBSSxLQUFLLENBQUM7UUFFM0UsZ0RBQWdEO1FBQ2hELElBQUksUUFBUSxJQUFJLEdBQUcsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDcEQsT0FBTyxFQUFFLEtBQUssRUFBRSxHQUFHLENBQUMsUUFBUSxDQUFRLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxDQUFDO1FBQ3pELENBQUM7UUFFRCwwQkFBMEI7UUFDMUIsSUFBSSxPQUFPLElBQUksR0FBRyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDL0MsT0FBTyxFQUFFLEtBQUssRUFBRSxHQUFHLENBQUMsS0FBWSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsQ0FBQztRQUNyRCxDQUFDO1FBRUQsWUFBWSxDQUFDLGtEQUFrRCxDQUFDLENBQUM7UUFDakUsT0FBTyxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLENBQUM7SUFDekQsQ0FBQztJQUVELFVBQVUsQ0FBQyxrQ0FBa0MsQ0FBQyxDQUFDO0lBQy9DLE1BQU0sSUFBSSxLQUFLLENBQUMsZ0NBQWdDLENBQUMsQ0FBQztBQUNwRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbmltcG9ydCBmcyBmcm9tICdub2RlOmZzJztcbmltcG9ydCBwYXRoIGZyb20gJ25vZGU6cGF0aCc7XG5pbXBvcnQgcGljbyBmcm9tICdwaWNvY29sb3JzJztcbmltcG9ydCBZQU1MIGZyb20gJ3lhbWwnO1xuaW1wb3J0IHtcbiAgT3V0cHV0Rm9ybWF0LFxuICBmb3JtYXRGaWxlU2l6ZSxcbiAgVEFCTEVfT1BUSU9OUyxcbn0gZnJvbSAnLi4vY29uZmlnL2NsaS5jb25zdGFudHMnO1xuXG5jb25zdCB7IGJvbGQsIGN5YW4sIGdyZWVuLCB5ZWxsb3csIHJlZCwgZGltLCBtYWdlbnRhLCB3aGl0ZSB9ID0gcGljbztcblxudHlwZSBMb2dMZXZlbCA9ICdpbmZvJyB8ICdzdWNjZXNzJyB8ICd3YXJuJyB8ICdlcnJvcicgfCAnZGVidWcnO1xuXG4vKipcbiAqIE9wdGlvbnMgZm9yIG91dHB1dERhdGEgZnVuY3Rpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBPdXRwdXRPcHRpb25zIHtcbiAgZm9ybWF0PzogT3V0cHV0Rm9ybWF0O1xuICBmaWxlPzogc3RyaW5nO1xuICBwcmV0dHk/OiBib29sZWFuO1xuICBzaWxlbnQ/OiBib29sZWFuO1xuICBhcHBlbmQ/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIFRhYmxlIGNvbHVtbiBjb25maWd1cmF0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGFibGVDb2x1bW4ge1xuICBoZWFkZXI6IHN0cmluZztcbiAga2V5OiBzdHJpbmc7XG4gIHdpZHRoPzogbnVtYmVyO1xuICBhbGlnbj86ICdsZWZ0JyB8ICdjZW50ZXInIHwgJ3JpZ2h0JztcbiAgZm9ybWF0dGVyPzogKHZhbHVlOiB1bmtub3duKSA9PiBzdHJpbmc7XG59XG5cbi8vIC0tLSBMb2dnaW5nIGZ1bmN0aW9ucyAtLS1cblxuZnVuY3Rpb24gbG9nT3V0cHV0KGxldmVsOiBMb2dMZXZlbCwgbWVzc2FnZTogc3RyaW5nLCBkYXRhPzogdW5rbm93bik6IHZvaWQge1xuICBjb25zdCBjb2xvcnMgPSB7IGluZm86IGN5YW4sIHN1Y2Nlc3M6IGdyZWVuLCB3YXJuOiB5ZWxsb3csIGVycm9yOiByZWQsIGRlYnVnOiBtYWdlbnRhIH07XG4gIGNvbnN0IHByZWZpeGVzID0geyBpbmZvOiAn4oS5Jywgc3VjY2VzczogJ+KckycsIHdhcm46ICfimqAnLCBlcnJvcjogJ+KclycsIGRlYnVnOiAn4pePJyB9O1xuICBjb25zdCB3cml0ZXJzID0geyBlcnJvcjogY29uc29sZS5lcnJvciwgd2FybjogY29uc29sZS53YXJuLCBpbmZvOiBjb25zb2xlLmxvZywgc3VjY2VzczogY29uc29sZS5sb2csIGRlYnVnOiBjb25zb2xlLmxvZyB9O1xuXG4gIC8vIEZhbGwgYmFjayB0byBjb25zb2xlLmxvZyArIHJhdyBtZXNzYWdlIGlmIGEgY2FsbGVyIGxlYWtzIGFuIHVua25vd24gbGV2ZWxcbiAgLy8gKGUuZy4gYW4gYGFzIExvZ0xldmVsYCBjYXN0IG9uIHVzZXIgaW5wdXQpLiBUaGUgd2hvbGUgcG9pbnQgb2YgdGhlIGxvZ2dlclxuICAvLyBpcyB0byBzdXJmYWNlIGVycm9ycyDigJQgZmFpbGluZyBpbnNpZGUgdGhlIGxvZ2dlciBhbmQgbWFza2luZyB0aGUgcmVhbFxuICAvLyBlcnJvciB3aXRoIGEgVHlwZUVycm9yIGRlZmVhdHMgaXQuXG4gIGNvbnN0IGNvbG9yID0gY29sb3JzW2xldmVsXSA/PyAoKHM6IHN0cmluZykgPT4gcyk7XG4gIGNvbnN0IHByZWZpeCA9IHByZWZpeGVzW2xldmVsXSA/PyAnPyc7XG4gIGNvbnN0IHdyaXRlID0gd3JpdGVyc1tsZXZlbF0gPz8gY29uc29sZS5sb2c7XG5cbiAgd3JpdGUoYCR7Y29sb3IocHJlZml4KX0gJHttZXNzYWdlfWApO1xuICBpZiAoZGF0YSAhPT0gdW5kZWZpbmVkKSB3cml0ZShkaW0oZm9ybWF0RGF0YUZvckxvZyhkYXRhKSkpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXREYXRhRm9yTG9nKGRhdGE6IHVua25vd24pOiBzdHJpbmcge1xuICBpZiAodHlwZW9mIGRhdGEgPT09ICdzdHJpbmcnKSByZXR1cm4gZGF0YTtcbiAgaWYgKHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyAmJiBkYXRhICE9PSBudWxsKSB7XG4gICAgY29uc3QgZW50cmllcyA9IE9iamVjdC5lbnRyaWVzKGRhdGEpO1xuICAgIGlmIChlbnRyaWVzLmxlbmd0aCA8PSA1KSB7XG4gICAgICByZXR1cm4gJ1xcbicgKyBlbnRyaWVzLm1hcCgoW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICAgIGNvbnN0IHZhbHVlU3RyID0gdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyA/IEpTT04uc3RyaW5naWZ5KHZhbHVlKSA6IFN0cmluZyh2YWx1ZSk7XG4gICAgICAgIHJldHVybiBgICAke2tleX06ICR7dmFsdWVTdHJ9YDtcbiAgICAgIH0pLmpvaW4oJ1xcbicpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoZGF0YSwgbnVsbCwgMik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcmludFN1Y2Nlc3MobWVzc2FnZTogc3RyaW5nLCBkYXRhPzogdW5rbm93bik6IHZvaWQgeyBsb2dPdXRwdXQoJ3N1Y2Nlc3MnLCBtZXNzYWdlLCBkYXRhKTsgfVxuZXhwb3J0IGZ1bmN0aW9uIHByaW50SW5mbyhtZXNzYWdlOiBzdHJpbmcsIGRhdGE/OiB1bmtub3duKTogdm9pZCB7IGxvZ091dHB1dCgnaW5mbycsIG1lc3NhZ2UsIGRhdGEpOyB9XG5leHBvcnQgZnVuY3Rpb24gcHJpbnRXYXJuaW5nKG1lc3NhZ2U6IHN0cmluZywgZGF0YT86IHVua25vd24pOiB2b2lkIHsgbG9nT3V0cHV0KCd3YXJuJywgbWVzc2FnZSwgZGF0YSk7IH1cbmV4cG9ydCBmdW5jdGlvbiBwcmludEVycm9yKG1lc3NhZ2U6IHN0cmluZywgZGF0YT86IHVua25vd24pOiB2b2lkIHsgbG9nT3V0cHV0KCdlcnJvcicsIG1lc3NhZ2UsIGRhdGEpOyB9XG5cbmV4cG9ydCBmdW5jdGlvbiBwcmludERlYnVnKG1lc3NhZ2U6IHN0cmluZywgZGF0YT86IHVua25vd24pOiB2b2lkIHtcbiAgaWYgKHByb2Nlc3MuZW52LkRFQlVHID09PSAndHJ1ZScpIGxvZ091dHB1dCgnZGVidWcnLCBtZXNzYWdlLCBkYXRhKTtcbn1cblxuLy8gLS0tIERhdGEgb3V0cHV0IC0tLVxuXG4vKipcbiAqIE91dHB1dCBkYXRhIGluIHNwZWNpZmllZCBmb3JtYXQgKGNvbnNvbGUgb3IgZmlsZSlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG91dHB1dERhdGEoZGF0YTogdW5rbm93biwgb3B0aW9uczogT3V0cHV0T3B0aW9ucyA9IHt9KTogdm9pZCB7XG4gIGNvbnN0IHsgZm9ybWF0ID0gJ2pzb24nLCBmaWxlLCBwcmV0dHkgPSB0cnVlLCBzaWxlbnQgPSBmYWxzZSwgYXBwZW5kID0gZmFsc2UgfSA9IG9wdGlvbnM7XG5cbiAgbGV0IG91dHB1dDogc3RyaW5nO1xuXG4gIHN3aXRjaCAoZm9ybWF0KSB7XG4gICAgY2FzZSAndGFibGUnOlxuICAgICAgaWYgKCFzaWxlbnQpIHByaW50SW5mbygnUmVuZGVyaW5nIGFzIHRhYmxlJyk7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShkYXRhKSAmJiBkYXRhLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY29uc29sZS5sb2coZm9ybWF0VGFibGUoZGF0YSkpO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgJiYgZGF0YSAhPT0gbnVsbCkge1xuICAgICAgICBjb25zb2xlLmxvZyhmb3JtYXRUYWJsZShbZGF0YV0pKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUudGFibGUoQXJyYXkuaXNBcnJheShkYXRhKSA/IGRhdGEgOiBbZGF0YV0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuXG4gICAgY2FzZSAnY3N2JzpcbiAgICAgIGlmICghc2lsZW50KSBwcmludEluZm8oJ1JlbmRlcmluZyBhcyBDU1YnKTtcbiAgICAgIG91dHB1dCA9IGZvcm1hdENzdihkYXRhKTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAneWFtbCc6XG4gICAgICBpZiAoIXNpbGVudCkgcHJpbnRJbmZvKCdSZW5kZXJpbmcgYXMgWUFNTCcpO1xuICAgICAgb3V0cHV0ID0gWUFNTC5zdHJpbmdpZnkoZGF0YSk7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ2pzb24nOlxuICAgIGRlZmF1bHQ6XG4gICAgICBpZiAoIXNpbGVudCkgcHJpbnRJbmZvKCdSZW5kZXJpbmcgYXMgSlNPTicpO1xuICAgICAgb3V0cHV0ID0gcHJldHR5ID8gSlNPTi5zdHJpbmdpZnkoZGF0YSwgbnVsbCwgMikgOiBKU09OLnN0cmluZ2lmeShkYXRhKTtcbiAgICAgIGJyZWFrO1xuICB9XG5cbiAgaWYgKGZpbGUpIHtcbiAgICB3cml0ZVRvRmlsZShmaWxlLCBvdXRwdXQsIGZvcm1hdCwgYXBwZW5kKTtcbiAgfSBlbHNlIHtcbiAgICBjb25zb2xlLmxvZyhvdXRwdXQpO1xuICB9XG59XG5cbi8vIC0tLSBUYWJsZSBmb3JtYXR0aW5nIC0tLVxuXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0VGFibGUoZGF0YTogdW5rbm93bltdLCBjb2x1bW5zPzogVGFibGVDb2x1bW5bXSk6IHN0cmluZyB7XG4gIGlmICghQXJyYXkuaXNBcnJheShkYXRhKSB8fCBkYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuIGRpbSgnKE5vIGRhdGEgdG8gZGlzcGxheSknKTtcblxuICBjb25zdCBmaXJzdEl0ZW0gPSBkYXRhWzBdO1xuICBpZiAodHlwZW9mIGZpcnN0SXRlbSAhPT0gJ29iamVjdCcgfHwgZmlyc3RJdGVtID09PSBudWxsKSByZXR1cm4gSlNPTi5zdHJpbmdpZnkoZGF0YSwgbnVsbCwgMik7XG5cbiAgY29uc3QgY29sczogVGFibGVDb2x1bW5bXSA9IGNvbHVtbnMgfHwgT2JqZWN0LmtleXMoZmlyc3RJdGVtKS5tYXAoa2V5ID0+ICh7IGhlYWRlcjoga2V5LCBrZXkgfSkpO1xuXG4gIGNvbnN0IGNvbFdpZHRoczogbnVtYmVyW10gPSBjb2xzLm1hcChjb2wgPT4ge1xuICAgIGlmIChjb2wud2lkdGgpIHJldHVybiBjb2wud2lkdGg7XG4gICAgY29uc3QgaGVhZGVyV2lkdGggPSBjb2wuaGVhZGVyLmxlbmd0aDtcbiAgICBjb25zdCBkYXRhV2lkdGggPSBNYXRoLm1heCguLi5kYXRhLm1hcChpdGVtID0+IHtcbiAgICAgIGNvbnN0IHZhbHVlID0gY29sLmZvcm1hdHRlclxuICAgICAgICA/IGNvbC5mb3JtYXR0ZXIoKGl0ZW0gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pW2NvbC5rZXldKVxuICAgICAgICA6IFN0cmluZygoaXRlbSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPilbY29sLmtleV0gPz8gJycpO1xuICAgICAgcmV0dXJuIHZhbHVlLmxlbmd0aDtcbiAgICB9KSk7XG4gICAgcmV0dXJuIE1hdGgubWF4KGhlYWRlcldpZHRoLCBkYXRhV2lkdGgsIDMpO1xuICB9KTtcblxuICBjb25zdCB7IGJvcmRlciB9ID0gVEFCTEVfT1BUSU9OUztcblxuICBjb25zdCBob3Jpem9udGFsTGluZSA9IChsZWZ0OiBzdHJpbmcsIG1pZGRsZTogc3RyaW5nLCByaWdodDogc3RyaW5nKSA9PlxuICAgIGxlZnQgKyBjb2xXaWR0aHMubWFwKHcgPT4gYm9yZGVyLmJvZHlKb2luLnJlcGVhdCgodyA/PyAwKSArIDIpKS5qb2luKG1pZGRsZSkgKyByaWdodDtcblxuICBjb25zdCB0b3BMaW5lID0gaG9yaXpvbnRhbExpbmUoYm9yZGVyLnRvcExlZnQsIGJvcmRlci50b3BKb2luLCBib3JkZXIudG9wUmlnaHQpO1xuICBjb25zdCBtaWRMaW5lID0gaG9yaXpvbnRhbExpbmUoYm9yZGVyLmpvaW5MZWZ0LCBib3JkZXIuam9pbkpvaW4sIGJvcmRlci5qb2luUmlnaHQpO1xuICBjb25zdCBib3R0b21MaW5lID0gaG9yaXpvbnRhbExpbmUoYm9yZGVyLmJvdHRvbUxlZnQsIGJvcmRlci5ib3R0b21Kb2luLCBib3JkZXIuYm90dG9tUmlnaHQpO1xuXG4gIGNvbnN0IGZvcm1hdENlbGwgPSAodmFsdWU6IHN0cmluZywgd2lkdGg6IG51bWJlciwgYWxpZ246ICdsZWZ0JyB8ICdjZW50ZXInIHwgJ3JpZ2h0JyA9ICdsZWZ0Jyk6IHN0cmluZyA9PiB7XG4gICAgaWYgKHZhbHVlLmxlbmd0aCA+IHdpZHRoKSByZXR1cm4gdmFsdWUuc3Vic3RyaW5nKDAsIHdpZHRoIC0gMykgKyAnLi4uJztcbiAgICBpZiAoYWxpZ24gPT09ICdjZW50ZXInKSB7XG4gICAgICBjb25zdCBsZWZ0UGFkID0gTWF0aC5mbG9vcigod2lkdGggLSB2YWx1ZS5sZW5ndGgpIC8gMik7XG4gICAgICByZXR1cm4gJyAnLnJlcGVhdChsZWZ0UGFkKSArIHZhbHVlICsgJyAnLnJlcGVhdCh3aWR0aCAtIHZhbHVlLmxlbmd0aCAtIGxlZnRQYWQpO1xuICAgIH1cbiAgICByZXR1cm4gYWxpZ24gPT09ICdyaWdodCcgPyB2YWx1ZS5wYWRTdGFydCh3aWR0aCkgOiB2YWx1ZS5wYWRFbmQod2lkdGgpO1xuICB9O1xuXG4gIGNvbnN0IGhlYWRlclJvdyA9IGJvcmRlci5ib2R5TGVmdCArICcgJyArXG4gICAgY29scy5tYXAoKGNvbCwgaSkgPT4gY3lhbihib2xkKGZvcm1hdENlbGwoY29sLmhlYWRlciwgY29sV2lkdGhzW2ldID8/IDApKSkpLmpvaW4oYCAke2JvcmRlci5ib2R5Sm9pbn0gYCkgK1xuICAgIGAgJHtib3JkZXIuYm9keVJpZ2h0fWA7XG5cbiAgbGV0IHRhYmxlID0gY3lhbih0b3BMaW5lKSArICdcXG4nICsgaGVhZGVyUm93ICsgJ1xcbicgKyBjeWFuKG1pZExpbmUpICsgJ1xcbic7XG5cbiAgZGF0YS5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgIGNvbnN0IHJvdyA9IGJvcmRlci5ib2R5TGVmdCArICcgJyArXG4gICAgICBjb2xzLm1hcCgoY29sLCBpKSA9PiB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gY29sLmZvcm1hdHRlclxuICAgICAgICAgID8gY29sLmZvcm1hdHRlcigoaXRlbSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPilbY29sLmtleV0pXG4gICAgICAgICAgOiBTdHJpbmcoKGl0ZW0gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pW2NvbC5rZXldID8/ICcnKTtcbiAgICAgICAgcmV0dXJuIGZvcm1hdENlbGwodmFsdWUsIGNvbFdpZHRoc1tpXSA/PyAwLCBjb2wuYWxpZ24pO1xuICAgICAgfSkuam9pbihgICR7Ym9yZGVyLmJvZHlKb2lufSBgKSArXG4gICAgICBgICR7Ym9yZGVyLmJvZHlSaWdodH1gO1xuICAgIHRhYmxlICs9IHJvdyArICdcXG4nO1xuICB9KTtcblxuICB0YWJsZSArPSBjeWFuKGJvdHRvbUxpbmUpO1xuICByZXR1cm4gdGFibGU7XG59XG5cbi8vIC0tLSBDU1YgZm9ybWF0dGluZyAtLS1cblxuZnVuY3Rpb24gZm9ybWF0Q3N2KGRhdGE6IHVua25vd24pOiBzdHJpbmcge1xuICBpZiAoIUFycmF5LmlzQXJyYXkoZGF0YSkgfHwgZGF0YS5sZW5ndGggPT09IDApIHJldHVybiAnJztcbiAgY29uc3QgZmlyc3RJdGVtID0gZGF0YVswXTtcbiAgaWYgKHR5cGVvZiBmaXJzdEl0ZW0gIT09ICdvYmplY3QnIHx8IGZpcnN0SXRlbSA9PT0gbnVsbCkgcmV0dXJuIGRhdGEuam9pbignLCcpO1xuXG4gIGNvbnN0IGhlYWRlcnMgPSBPYmplY3Qua2V5cyhmaXJzdEl0ZW0pO1xuICBjb25zdCByb3dzOiBzdHJpbmdbXSA9IFtoZWFkZXJzLm1hcChoID0+IGVzY2FwZUNzdlZhbHVlKGgpKS5qb2luKCcsJyldO1xuICBkYXRhLmZvckVhY2goaXRlbSA9PiB7XG4gICAgcm93cy5wdXNoKGhlYWRlcnMubWFwKGggPT4gZXNjYXBlQ3N2VmFsdWUoKGl0ZW0gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pW2hdKSkuam9pbignLCcpKTtcbiAgfSk7XG4gIHJldHVybiByb3dzLmpvaW4oJ1xcbicpO1xufVxuXG5mdW5jdGlvbiBlc2NhcGVDc3ZWYWx1ZSh2YWx1ZTogdW5rbm93bik6IHN0cmluZyB7XG4gIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkKSByZXR1cm4gJyc7XG4gIGNvbnN0IHN0ciA9IFN0cmluZyh2YWx1ZSk7XG4gIGlmIChzdHIuaW5jbHVkZXMoJywnKSB8fCBzdHIuaW5jbHVkZXMoJ1wiJykgfHwgc3RyLmluY2x1ZGVzKCdcXG4nKSkge1xuICAgIHJldHVybiBgXCIke3N0ci5yZXBsYWNlKC9cIi9nLCAnXCJcIicpfVwiYDtcbiAgfVxuICByZXR1cm4gc3RyO1xufVxuXG4vLyAtLS0gRmlsZSBvcGVyYXRpb25zIC0tLVxuXG4vKipcbiAqIFZhbGlkYXRlIHRoYXQgYSBmaWxlIHBhdGggcmVzb2x2ZXMgd2l0aGluIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LlxuICogUHJldmVudHMgcGF0aCB0cmF2ZXJzYWwgYXR0YWNrcyAoZS5nLiwgLS1vdXRwdXQgLi4vLi4vZXRjL3Bhc3N3ZCkuXG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlT3V0cHV0UGF0aChmaWxlUGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgcmVzb2x2ZWQgPSBwYXRoLnJlc29sdmUoZmlsZVBhdGgpO1xuICBjb25zdCBjd2QgPSBwYXRoLnJlc29sdmUocHJvY2Vzcy5jd2QoKSk7XG4gIGlmICghcmVzb2x2ZWQuc3RhcnRzV2l0aChjd2QgKyBwYXRoLnNlcCkgJiYgcmVzb2x2ZWQgIT09IGN3ZCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgUGF0aCB0cmF2ZXJzYWwgcmVqZWN0ZWQ6IFwiJHtmaWxlUGF0aH1cIiByZXNvbHZlcyBvdXRzaWRlIHRoZSBjdXJyZW50IGRpcmVjdG9yeWApO1xuICB9XG4gIHJldHVybiByZXNvbHZlZDtcbn1cblxuZnVuY3Rpb24gd3JpdGVUb0ZpbGUoZmlsZVBhdGg6IHN0cmluZywgY29udGVudDogc3RyaW5nLCBmb3JtYXQ6IE91dHB1dEZvcm1hdCwgYXBwZW5kOiBib29sZWFuID0gZmFsc2UpOiB2b2lkIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBzYWZlUGF0aCA9IHZhbGlkYXRlT3V0cHV0UGF0aChmaWxlUGF0aCk7XG4gICAgY29uc3QgZGlyID0gcGF0aC5kaXJuYW1lKHNhZmVQYXRoKTtcbiAgICBpZiAoZGlyICE9PSAnLicpIGVuc3VyZU91dHB1dERpcmVjdG9yeShkaXIpO1xuXG4gICAgaWYgKGFwcGVuZCkge1xuICAgICAgZnMuYXBwZW5kRmlsZVN5bmMoc2FmZVBhdGgsIGNvbnRlbnQgKyAnXFxuJywgJ3V0Zi04Jyk7XG4gICAgICBwcmludFN1Y2Nlc3MoJ091dHB1dCBhcHBlbmRlZCB0byBmaWxlJywgeyBwYXRoOiBzYWZlUGF0aCwgZm9ybWF0IH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBmcy53cml0ZUZpbGVTeW5jKHNhZmVQYXRoLCBjb250ZW50LCAndXRmLTgnKTtcbiAgICAgIGNvbnN0IHN0YXRzID0gZnMuc3RhdFN5bmMoc2FmZVBhdGgpO1xuICAgICAgcHJpbnRTdWNjZXNzKCdPdXRwdXQgc2F2ZWQgdG8gZmlsZScsIHsgcGF0aDogc2FmZVBhdGgsIGZvcm1hdCwgc2l6ZTogZm9ybWF0RmlsZVNpemUoc3RhdHMuc2l6ZSkgfSk7XG4gICAgfVxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHByaW50RXJyb3IoJ0ZhaWxlZCB0byB3cml0ZSBmaWxlJywge1xuICAgICAgcGF0aDogZmlsZVBhdGgsXG4gICAgICBlcnJvcjogZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpLFxuICAgIH0pO1xuICAgIHRocm93IGVycm9yO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlbnN1cmVPdXRwdXREaXJlY3Rvcnkob3V0cHV0UGF0aDogc3RyaW5nKTogdm9pZCB7XG4gIGlmIChmcy5leGlzdHNTeW5jKG91dHB1dFBhdGgpKSByZXR1cm47XG4gIHRyeSB7XG4gICAgZnMubWtkaXJTeW5jKG91dHB1dFBhdGgsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgIHByaW50RGVidWcoJ0RpcmVjdG9yeSBjcmVhdGVkJywgeyBwYXRoOiBvdXRwdXRQYXRoIH0pO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHByaW50RXJyb3IoJ0ZhaWxlZCB0byBjcmVhdGUgZGlyZWN0b3J5Jywge1xuICAgICAgcGF0aDogb3V0cHV0UGF0aCxcbiAgICAgIGVycm9yOiBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvciksXG4gICAgfSk7XG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZpbGVFeGlzdHMoZmlsZVBhdGg6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gZnMuZXhpc3RzU3luYyhmaWxlUGF0aCk7XG59XG5cbi8vIC0tLSBEaXNwbGF5IGhlbHBlcnMgLS0tXG5cbmV4cG9ydCBmdW5jdGlvbiBwcmludFNlY3Rpb24odGl0bGU6IHN0cmluZywgc3VidGl0bGU/OiBzdHJpbmcpOiB2b2lkIHtcbiAgY29uc3Qgd2lkdGggPSBwcm9jZXNzLnN0ZG91dC5jb2x1bW5zIHx8IDgwO1xuICBjb25zb2xlLmxvZygnJyk7XG4gIGNvbnNvbGUubG9nKGN5YW4oJ+KVkCcucmVwZWF0KHdpZHRoKSkpO1xuICBjb25zb2xlLmxvZyhjeWFuKGJvbGQodGl0bGUpKSk7XG4gIGlmIChzdWJ0aXRsZSkgY29uc29sZS5sb2coZGltKHN1YnRpdGxlKSk7XG4gIGNvbnNvbGUubG9nKGN5YW4oJ+KVkCcucmVwZWF0KHdpZHRoKSkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJpbnRLZXlWYWx1ZShcbiAgZGF0YTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gIG9wdGlvbnM6IHsgaW5kZW50PzogbnVtYmVyOyBzZXBhcmF0b3I/OiBzdHJpbmcgfSA9IHt9LFxuKTogdm9pZCB7XG4gIGNvbnN0IHsgaW5kZW50ID0gMCwgc2VwYXJhdG9yID0gJ+KUgicgfSA9IG9wdGlvbnM7XG4gIGNvbnN0IG1heEtleUxlbmd0aCA9IE1hdGgubWF4KC4uLk9iamVjdC5rZXlzKGRhdGEpLm1hcChrID0+IGsubGVuZ3RoKSk7XG4gIGNvbnN0IGluZGVudFN0ciA9ICcgJy5yZXBlYXQoaW5kZW50KTtcblxuICBPYmplY3QuZW50cmllcyhkYXRhKS5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IHtcbiAgICBjb25zdCBwYWRkZWRLZXkgPSBrZXkucGFkRW5kKG1heEtleUxlbmd0aCk7XG4gICAgY29uc3QgZm9ybWF0dGVkVmFsdWUgPSB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICE9PSBudWxsXG4gICAgICA/IEpTT04uc3RyaW5naWZ5KHZhbHVlKSA6IFN0cmluZyh2YWx1ZSk7XG4gICAgY29uc29sZS5sb2coYCR7aW5kZW50U3RyfSR7ZGltKHBhZGRlZEtleSl9ICR7Y3lhbihzZXBhcmF0b3IpfSAke3doaXRlKGZvcm1hdHRlZFZhbHVlKX1gKTtcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcmludERpdmlkZXIoY2hhcjogc3RyaW5nID0gJ+KUgCcsIHdpZHRoPzogbnVtYmVyKTogdm9pZCB7XG4gIGNvbnN0IGVmZmVjdGl2ZVdpZHRoID0gd2lkdGggfHwgcHJvY2Vzcy5zdGRvdXQuY29sdW1ucyB8fCA4MDtcbiAgY29uc29sZS5sb2coZGltKGNoYXIucmVwZWF0KGVmZmVjdGl2ZVdpZHRoKSkpO1xufVxuXG4vLyAtLS0gUmVzcG9uc2UgcGFyc2luZyAtLS1cblxuLyoqXG4gKiBVbndyYXAgYSBzZW5kU3VjY2VzcyBBUEkgZW52ZWxvcGU6IHsgc3VjY2Vzcywgc3RhdHVzQ29kZSwgZGF0YTogeyAuLi4gfSB9XG4gKiBSZXR1cm5zIHRoZSBpbm5lciBgZGF0YWAgb2JqZWN0LCBvciB0aGUgb3JpZ2luYWwgcmVzcG9uc2UgaWYgbm90IHdyYXBwZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1bndyYXBFbnZlbG9wZShyZXNwb25zZTogdW5rbm93bik6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgaWYgKHJlc3BvbnNlICYmIHR5cGVvZiByZXNwb25zZSA9PT0gJ29iamVjdCcpIHtcbiAgICBjb25zdCBvYmogPSByZXNwb25zZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICBpZiAoJ3N1Y2Nlc3MnIGluIG9iaiAmJiAnZGF0YScgaW4gb2JqICYmIG9iai5kYXRhICYmIHR5cGVvZiBvYmouZGF0YSA9PT0gJ29iamVjdCcpIHtcbiAgICAgIHJldHVybiBvYmouZGF0YSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICB9XG4gICAgcmV0dXJuIG9iajtcbiAgfVxuICByZXR1cm4ge307XG59XG5cbi8qKlxuICogRXh0cmFjdCBhIHNpbmdsZSBlbnRpdHkgZnJvbSBhbiBBUEkgcmVzcG9uc2UsIGhhbmRsaW5nIGVudmVsb3BlIGZvcm1hdHMuXG4gKiBUcmllczogcGF5bG9hZFtlbnRpdHlLZXldLCBwYXlsb2FkIGRpcmVjdGx5IChpZiBpZGVudGlmaWVyS2V5IGV4aXN0cyksIG9yIHVuZGVmaW5lZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3RTaW5nbGVSZXNwb25zZTxUPihyZXNwb25zZTogdW5rbm93biwgZW50aXR5S2V5OiBzdHJpbmcsIGlkZW50aWZpZXJLZXk6IHN0cmluZyk6IFQgfCB1bmRlZmluZWQge1xuICBjb25zdCBwYXlsb2FkID0gdW53cmFwRW52ZWxvcGUocmVzcG9uc2UpO1xuICAvLyBEaXJlY3QgZW50aXR5OiBwYXlsb2FkIGhhcyB0aGUgaWRlbnRpZmllciAoZS5nLiBwYXlsb2FkLmlkLCBwYXlsb2FkLnByb3BzLCBwYXlsb2FkLm5hbWUpXG4gIGlmIChpZGVudGlmaWVyS2V5IGluIHBheWxvYWQpIHJldHVybiBwYXlsb2FkIGFzIHVua25vd24gYXMgVDtcbiAgLy8gTmVzdGVkIHVuZGVyIGVudGl0eSBrZXk6IHBheWxvYWQucGlwZWxpbmUsIHBheWxvYWQucGx1Z2luXG4gIGNvbnN0IG5lc3RlZCA9IHBheWxvYWRbZW50aXR5S2V5XSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVuZGVmaW5lZDtcbiAgaWYgKG5lc3RlZCAmJiB0eXBlb2YgbmVzdGVkID09PSAnb2JqZWN0JyAmJiBpZGVudGlmaWVyS2V5IGluIG5lc3RlZCkgcmV0dXJuIG5lc3RlZCBhcyB1bmtub3duIGFzIFQ7XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTGlzdFJlc3BvbnNlUmVzdWx0PFQ+IHtcbiAgaXRlbXM6IFRbXTtcbiAgdG90YWw/OiBudW1iZXI7XG4gIGhhc01vcmU6IGJvb2xlYW47XG59XG5cbi8qKlxuICogRXh0cmFjdCBpdGVtcyBmcm9tIGFuIEFQSSBsaXN0IHJlc3BvbnNlLCBoYW5kbGluZyBtdWx0aXBsZSByZXNwb25zZSBmb3JtYXRzLlxuICogU3VwcG9ydHM6IGB7IDxrZXk+OiBUW10gfWAsIGB7IGl0ZW1zOiBUW10gfWAsIGBUW11gLCBvciBpbnZhbGlkIGZvcm1hdHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBleHRyYWN0TGlzdFJlc3BvbnNlPFQ+KHJlc3BvbnNlOiB1bmtub3duLCBpdGVtc0tleTogc3RyaW5nKTogTGlzdFJlc3BvbnNlUmVzdWx0PFQ+IHtcbiAgaWYgKEFycmF5LmlzQXJyYXkocmVzcG9uc2UpKSB7XG4gICAgcmV0dXJuIHsgaXRlbXM6IHJlc3BvbnNlLCB0b3RhbDogdW5kZWZpbmVkLCBoYXNNb3JlOiBmYWxzZSB9O1xuICB9XG5cbiAgaWYgKHJlc3BvbnNlICYmIHR5cGVvZiByZXNwb25zZSA9PT0gJ29iamVjdCcpIHtcbiAgICBjb25zdCBvYmogPSB1bndyYXBFbnZlbG9wZShyZXNwb25zZSk7XG5cbiAgICAvLyBFeHRyYWN0IHBhZ2luYXRpb24gbWV0YWRhdGEgaWYgcHJlc2VudFxuICAgIGNvbnN0IHBhZ2luYXRpb24gPSBvYmoucGFnaW5hdGlvbiBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVuZGVmaW5lZDtcbiAgICBjb25zdCB0b3RhbCA9IChwYWdpbmF0aW9uPy50b3RhbCA/PyBvYmoudG90YWwpIGFzIG51bWJlciB8IHVuZGVmaW5lZDtcbiAgICBjb25zdCBoYXNNb3JlID0gKChwYWdpbmF0aW9uPy5oYXNNb3JlID8/IG9iai5oYXNNb3JlKSBhcyBib29sZWFuKSB8fCBmYWxzZTtcblxuICAgIC8vIFRyeSBwcmltYXJ5IGtleSAoZS5nLiAncGlwZWxpbmVzJywgJ3BsdWdpbnMnKVxuICAgIGlmIChpdGVtc0tleSBpbiBvYmogJiYgQXJyYXkuaXNBcnJheShvYmpbaXRlbXNLZXldKSkge1xuICAgICAgcmV0dXJuIHsgaXRlbXM6IG9ialtpdGVtc0tleV0gYXMgVFtdLCB0b3RhbCwgaGFzTW9yZSB9O1xuICAgIH1cblxuICAgIC8vIFRyeSBnZW5lcmljICdpdGVtcycga2V5XG4gICAgaWYgKCdpdGVtcycgaW4gb2JqICYmIEFycmF5LmlzQXJyYXkob2JqLml0ZW1zKSkge1xuICAgICAgcmV0dXJuIHsgaXRlbXM6IG9iai5pdGVtcyBhcyBUW10sIHRvdGFsLCBoYXNNb3JlIH07XG4gICAgfVxuXG4gICAgcHJpbnRXYXJuaW5nKCdVbmV4cGVjdGVkIHJlc3BvbnNlIGZvcm1hdCwgYXR0ZW1wdGluZyB0byBoYW5kbGUnKTtcbiAgICByZXR1cm4geyBpdGVtczogW10sIHRvdGFsOiB1bmRlZmluZWQsIGhhc01vcmU6IGZhbHNlIH07XG4gIH1cblxuICBwcmludEVycm9yKCdJbnZhbGlkIHJlc3BvbnNlIGZvcm1hdCBmcm9tIEFQSScpO1xuICB0aHJvdyBuZXcgRXJyb3IoJ1VuZXhwZWN0ZWQgQVBJIHJlc3BvbnNlIGZvcm1hdCcpO1xufVxuIl19
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Helpers for registering a deployed pipeline ARN with the platform.
|
|
3
|
+
*
|
|
4
|
+
* The registry table maps deployed CodePipeline ARNs back to pipeline records
|
|
5
|
+
* and orgs. It's how the dashboard's "Deployed pipelines" panel and the event
|
|
6
|
+
* reporting Lambda resolve incoming events to a pipeline definition.
|
|
7
|
+
*
|
|
8
|
+
* Two failure modes are handled here:
|
|
9
|
+
*
|
|
10
|
+
* 1. Platform unreachable at deploy time. The CDK stack lands in AWS but the
|
|
11
|
+
* registry POST fails. Without retry the deploy command would have to
|
|
12
|
+
* re-run cdk-deploy (slow, sometimes blocked by stack state) just to
|
|
13
|
+
* record the ARN. Instead, we write a pending intent to a local file;
|
|
14
|
+
* `pipeline-manager register` drains them.
|
|
15
|
+
*
|
|
16
|
+
* 2. User explicitly invokes `pipeline-manager register --id <pipelineId>`
|
|
17
|
+
* after a successful deploy that didn't register. Same path: rebuilds
|
|
18
|
+
* the ARN from STS, POSTs to the platform.
|
|
19
|
+
*
|
|
20
|
+
* Pending intents store ONLY the registration payload — never tokens or URLs.
|
|
21
|
+
* Auth is supplied by whichever command drains the intent (deploy or register),
|
|
22
|
+
* so a stale intent file is never an authentication risk.
|
|
23
|
+
*/
|
|
24
|
+
/** Shape of the body POSTed to /api/pipelines/registry. */
|
|
25
|
+
export interface RegistryPayload {
|
|
26
|
+
pipelineId: string;
|
|
27
|
+
orgId: string;
|
|
28
|
+
pipelineArn: string;
|
|
29
|
+
pipelineName: string;
|
|
30
|
+
accountId: string;
|
|
31
|
+
region: string;
|
|
32
|
+
project: string;
|
|
33
|
+
organization: string;
|
|
34
|
+
stackName: string;
|
|
35
|
+
}
|
|
36
|
+
/** Pipeline fields needed to construct a RegistryPayload. */
|
|
37
|
+
export interface PipelineForRegistry {
|
|
38
|
+
id: string;
|
|
39
|
+
orgId: string;
|
|
40
|
+
pipelineName?: string;
|
|
41
|
+
project: string;
|
|
42
|
+
organization: string;
|
|
43
|
+
}
|
|
44
|
+
/** Where pending registration intents are persisted between CLI invocations. */
|
|
45
|
+
export declare const PENDING_INTENTS_DIR: string;
|
|
46
|
+
/**
|
|
47
|
+
* Build a RegistryPayload from the platform's pipeline metadata. Reaches out
|
|
48
|
+
* to STS to discover the AWS account, hashes it, and constructs the ARN.
|
|
49
|
+
*
|
|
50
|
+
* The hash is the same one applied server-side as defense in depth — raw AWS
|
|
51
|
+
* account numbers must never reach the platform DB.
|
|
52
|
+
*/
|
|
53
|
+
export declare function buildRegistryPayload(pipeline: PipelineForRegistry, regionOverride?: string): Promise<RegistryPayload>;
|
|
54
|
+
/**
|
|
55
|
+
* Persist a registration intent for later retry.
|
|
56
|
+
*
|
|
57
|
+
* Intent files are keyed by pipelineId so re-running deploy on the same
|
|
58
|
+
* pipeline overwrites rather than accumulates. We deliberately store the
|
|
59
|
+
* payload plain (not the full pipeline doc, not auth) so a stale file is
|
|
60
|
+
* safe to leave around indefinitely.
|
|
61
|
+
*/
|
|
62
|
+
export declare function writePendingIntent(payload: RegistryPayload): Promise<string>;
|
|
63
|
+
/** Remove a pending intent after a successful drain. */
|
|
64
|
+
export declare function clearPendingIntent(pipelineId: string): Promise<void>;
|
|
65
|
+
/** Read all pending intents currently on disk. Empty array if dir doesn't exist. */
|
|
66
|
+
export declare function readPendingIntents(): Promise<RegistryPayload[]>;
|
|
67
|
+
//# sourceMappingURL=registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/utils/registry.ts"],"names":[],"mappings":"AASA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,2DAA2D;AAC3D,MAAM,WAAW,eAAe;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,6DAA6D;AAC7D,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,gFAAgF;AAChF,eAAO,MAAM,mBAAmB,QAAgE,CAAC;AAEjG;;;;;;GAMG;AACH,wBAAsB,oBAAoB,CACxC,QAAQ,EAAE,mBAAmB,EAC7B,cAAc,CAAC,EAAE,MAAM,GACtB,OAAO,CAAC,eAAe,CAAC,CA8B1B;AAED;;;;;;;GAOG;AACH,wBAAsB,kBAAkB,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC,CAKlF;AAED,wDAAwD;AACxD,wBAAsB,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAQ1E;AAED,oFAAoF;AACpF,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC,CAqBrE"}
|