@pagopa/dx-cli 0.24.0 → 0.25.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/README.md +14 -0
- package/bin/index.js +13 -3
- package/dist/adapters/azure/cloud-account-service.js +32 -1
- package/dist/adapters/azure-monitor/instrumentation.d.ts +26 -0
- package/dist/adapters/azure-monitor/instrumentation.js +84 -0
- package/dist/adapters/azure-monitor/telemetry.d.ts +19 -0
- package/dist/adapters/azure-monitor/telemetry.js +28 -0
- package/dist/adapters/commander/commands/add.d.ts +32 -7
- package/dist/adapters/commander/commands/add.js +197 -15
- package/dist/adapters/commander/commands/doctor.js +4 -1
- package/dist/adapters/octokit/index.d.ts +12 -0
- package/dist/adapters/octokit/index.js +26 -2
- package/dist/adapters/plop/actions/setup-pnpm.js +5 -1
- package/dist/adapters/plop/actions/sync-repository-environments.d.ts +15 -0
- package/dist/adapters/plop/actions/sync-repository-environments.js +98 -0
- package/dist/adapters/plop/generators/environment/actions.js +4 -1
- package/dist/adapters/plop/generators/environment/index.d.ts +3 -3
- package/dist/adapters/plop/generators/environment/index.js +6 -3
- package/dist/adapters/plop/generators/environment/prompts.d.ts +38 -0
- package/dist/adapters/plop/generators/environment/prompts.js +236 -91
- package/dist/adapters/plop/index.d.ts +3 -3
- package/dist/adapters/plop/index.js +5 -5
- package/dist/domain/authorization.js +4 -4
- package/dist/index.js +132 -8
- package/package.json +9 -1
|
@@ -1,23 +1,180 @@
|
|
|
1
1
|
import { getLogger } from "@logtape/logtape";
|
|
2
2
|
import chalk from "chalk";
|
|
3
3
|
/**
|
|
4
|
-
* Add command - Scaffold new components into existing workspaces
|
|
4
|
+
* Add command - Scaffold new components into existing workspaces.
|
|
5
5
|
*
|
|
6
|
-
* This module implements the `dx add` command
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
* - environment: Add a new deployment environment to the project
|
|
6
|
+
* This module implements the `dx add` command and keeps the CLI-specific flag
|
|
7
|
+
* parsing/validation close to the Commander adapter. It turns supported flags
|
|
8
|
+
* into prefilled answers for the plop generator so the command can run with a
|
|
9
|
+
* mix of non-interactive inputs and guided prompts.
|
|
11
10
|
*/
|
|
12
|
-
import { Command } from "commander";
|
|
11
|
+
import { Command, Option } from "commander";
|
|
13
12
|
import { okAsync, ResultAsync } from "neverthrow";
|
|
13
|
+
import { readFile } from "node:fs/promises";
|
|
14
|
+
import { z } from "zod/v4";
|
|
14
15
|
import { requestAuthorizationInputSchema, } from "../../../domain/authorization.js";
|
|
15
|
-
import { environmentShort } from "../../../domain/environment.js";
|
|
16
|
-
import { isAzureLocation, locationShort } from "../../azure/locations.js";
|
|
16
|
+
import { environmentSchema, environmentShort, } from "../../../domain/environment.js";
|
|
17
|
+
import { isAzureLocation, locationShort, } from "../../azure/locations.js";
|
|
18
|
+
import { workspaceSchema } from "../../plop/generators/environment/prompts.js";
|
|
17
19
|
import { collectDeploymentEnvironmentPayload, getPlopInstance, runDeploymentEnvironmentActions, } from "../../plop/index.js";
|
|
18
20
|
import { asError, reportCommandError } from "../command-errors.js";
|
|
19
21
|
import { createCommandPresenter, resolveOutputMode, } from "../presenters/index.js";
|
|
20
22
|
import { runAddEnvironmentPreconditions } from "./init.js";
|
|
23
|
+
const appendOptionValue = (value, previous = []) => [...previous, value];
|
|
24
|
+
const locationOptionSchema = z
|
|
25
|
+
.string()
|
|
26
|
+
.trim()
|
|
27
|
+
.transform((value, ctx) => {
|
|
28
|
+
const [rawAccountId, ...rawLocationParts] = value.split("=");
|
|
29
|
+
const accountId = rawAccountId?.trim();
|
|
30
|
+
const location = rawLocationParts.join("=").trim();
|
|
31
|
+
if (!accountId || rawLocationParts.length === 0 || location.length === 0) {
|
|
32
|
+
ctx.addIssue({
|
|
33
|
+
code: z.ZodIssueCode.custom,
|
|
34
|
+
message: "Location must use the format <subscription-id=region>.",
|
|
35
|
+
});
|
|
36
|
+
return z.NEVER;
|
|
37
|
+
}
|
|
38
|
+
if (!isAzureLocation(location)) {
|
|
39
|
+
ctx.addIssue({
|
|
40
|
+
code: z.ZodIssueCode.custom,
|
|
41
|
+
message: `Unsupported Azure location "${location}".`,
|
|
42
|
+
});
|
|
43
|
+
return z.NEVER;
|
|
44
|
+
}
|
|
45
|
+
return { accountId, location };
|
|
46
|
+
});
|
|
47
|
+
const addEnvironmentCommandOptionsSchema = z
|
|
48
|
+
.object({
|
|
49
|
+
account: z
|
|
50
|
+
.array(z.string().trim().min(1, "Cloud account id cannot be empty"))
|
|
51
|
+
.optional(),
|
|
52
|
+
businessUnit: z
|
|
53
|
+
.string()
|
|
54
|
+
.trim()
|
|
55
|
+
.min(1, "Business unit cannot be empty")
|
|
56
|
+
.optional(),
|
|
57
|
+
clientId: z.string().trim().min(1, "Client id cannot be empty").optional(),
|
|
58
|
+
domain: workspaceSchema.shape.domain.optional(),
|
|
59
|
+
installationId: z
|
|
60
|
+
.string()
|
|
61
|
+
.trim()
|
|
62
|
+
.min(1, "Installation id cannot be empty")
|
|
63
|
+
.optional(),
|
|
64
|
+
location: z.array(locationOptionSchema).optional(),
|
|
65
|
+
managementTeam: z
|
|
66
|
+
.string()
|
|
67
|
+
.trim()
|
|
68
|
+
.min(1, "Management team cannot be empty")
|
|
69
|
+
.optional(),
|
|
70
|
+
name: environmentSchema.shape.name.optional(),
|
|
71
|
+
prefix: environmentSchema.shape.prefix.optional(),
|
|
72
|
+
privateKeyPath: z
|
|
73
|
+
.string()
|
|
74
|
+
.trim()
|
|
75
|
+
.min(1, "Private key path cannot be empty")
|
|
76
|
+
.optional(),
|
|
77
|
+
runnerAppId: z
|
|
78
|
+
.string()
|
|
79
|
+
.trim()
|
|
80
|
+
.min(1, "Runner app id cannot be empty")
|
|
81
|
+
.optional(),
|
|
82
|
+
yes: z.boolean().optional(),
|
|
83
|
+
})
|
|
84
|
+
.superRefine((value, ctx) => {
|
|
85
|
+
if (value.location && !value.account?.length) {
|
|
86
|
+
ctx.addIssue({
|
|
87
|
+
code: z.ZodIssueCode.custom,
|
|
88
|
+
message: "Location mappings require at least one --account flag.",
|
|
89
|
+
path: ["location"],
|
|
90
|
+
});
|
|
91
|
+
return;
|
|
92
|
+
}
|
|
93
|
+
if (value.account && value.location) {
|
|
94
|
+
const selectedAccounts = new Set(value.account);
|
|
95
|
+
for (const mapping of value.location) {
|
|
96
|
+
if (!selectedAccounts.has(mapping.accountId)) {
|
|
97
|
+
ctx.addIssue({
|
|
98
|
+
code: z.ZodIssueCode.custom,
|
|
99
|
+
message: `Location mapping references unknown account "${mapping.accountId}".`,
|
|
100
|
+
path: ["location"],
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
});
|
|
106
|
+
export const parseAddEnvironmentCommandOptions = (input) => {
|
|
107
|
+
const result = addEnvironmentCommandOptionsSchema.safeParse(input);
|
|
108
|
+
if (!result.success) {
|
|
109
|
+
throw new Error(`Invalid add environment command options:\n${z.prettifyError(result.error)}`, {
|
|
110
|
+
cause: result.error,
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
return result.data;
|
|
114
|
+
};
|
|
115
|
+
const buildBaseEnvironmentInitialAnswers = (options) => {
|
|
116
|
+
const env = {
|
|
117
|
+
...(options.name && { name: options.name }),
|
|
118
|
+
...(options.prefix && { prefix: options.prefix }),
|
|
119
|
+
...(options.account?.length && {
|
|
120
|
+
cloudAccountIds: Array.from(new Set(options.account)),
|
|
121
|
+
}),
|
|
122
|
+
...(options.location?.length && {
|
|
123
|
+
locations: Object.fromEntries(options.location.map(({ accountId, location }) => [
|
|
124
|
+
accountId,
|
|
125
|
+
location,
|
|
126
|
+
])),
|
|
127
|
+
}),
|
|
128
|
+
};
|
|
129
|
+
const tags = {
|
|
130
|
+
...(options.businessUnit && { BusinessUnit: options.businessUnit }),
|
|
131
|
+
...(options.managementTeam && { ManagementTeam: options.managementTeam }),
|
|
132
|
+
};
|
|
133
|
+
return {
|
|
134
|
+
...(Object.keys(env).length > 0 && { env }),
|
|
135
|
+
...(Object.keys(tags).length > 0 && { tags }),
|
|
136
|
+
...(options.domain && { workspace: { domain: options.domain } }),
|
|
137
|
+
};
|
|
138
|
+
};
|
|
139
|
+
export const getEnvironmentInitialAnswers = async (options) => {
|
|
140
|
+
const initialAnswers = buildBaseEnvironmentInitialAnswers(options);
|
|
141
|
+
const privateKey = options.privateKeyPath === undefined
|
|
142
|
+
? undefined
|
|
143
|
+
: await readFile(options.privateKeyPath, "utf8").catch((cause) => {
|
|
144
|
+
throw new Error(`Failed to read private key file at "${options.privateKeyPath}".`, { cause });
|
|
145
|
+
});
|
|
146
|
+
// Fail fast on an empty (or whitespace-only) key file: the file contents are
|
|
147
|
+
// never trimmed, so an empty value would otherwise skip the recovery prompt
|
|
148
|
+
// and surface as an opaque schema error (or a silently invalid key) later.
|
|
149
|
+
if (privateKey !== undefined && privateKey.trim().length === 0) {
|
|
150
|
+
throw new Error(`Private key file at "${options.privateKeyPath}" is empty.`);
|
|
151
|
+
}
|
|
152
|
+
// Prefill runner-app credentials only when at least one credential flag was
|
|
153
|
+
// provided. Unspecified fields stay `undefined` on purpose so the generator
|
|
154
|
+
// prompts for the missing pieces and validates the complete set later. With
|
|
155
|
+
// no credential flag at all, leave this `undefined` to keep initialization
|
|
156
|
+
// fully interactive.
|
|
157
|
+
const runnerAppCredentials = options.runnerAppId === undefined &&
|
|
158
|
+
options.clientId === undefined &&
|
|
159
|
+
options.installationId === undefined &&
|
|
160
|
+
privateKey === undefined
|
|
161
|
+
? undefined
|
|
162
|
+
: {
|
|
163
|
+
clientId: options.clientId,
|
|
164
|
+
id: options.runnerAppId,
|
|
165
|
+
installationId: options.installationId,
|
|
166
|
+
key: privateKey,
|
|
167
|
+
};
|
|
168
|
+
return {
|
|
169
|
+
...initialAnswers,
|
|
170
|
+
...((options.yes || runnerAppCredentials) && {
|
|
171
|
+
init: {
|
|
172
|
+
...(options.yes && { confirm: true }),
|
|
173
|
+
...(runnerAppCredentials && { runnerAppCredentials }),
|
|
174
|
+
},
|
|
175
|
+
}),
|
|
176
|
+
};
|
|
177
|
+
};
|
|
21
178
|
/**
|
|
22
179
|
* Authorize a Cloud Account (Azure Subscription, AWS Account, ...), creating a Pull Request for each account that requires authorization.
|
|
23
180
|
*/
|
|
@@ -88,27 +245,52 @@ const reportSummary = (presenter, outputMode) => (result) => {
|
|
|
88
245
|
}
|
|
89
246
|
};
|
|
90
247
|
const trackStep = (presenter, name, task, mapError) => ResultAsync.fromPromise(presenter.trackStep(name, task), mapError);
|
|
91
|
-
const addEnvironmentAction = (authorizationService, gitHubService, presenter) => runAddEnvironmentPreconditions(presenter)
|
|
248
|
+
const addEnvironmentAction = (authorizationService, gitHubService, presenter, initialAnswers = {}) => runAddEnvironmentPreconditions(presenter)
|
|
92
249
|
.andThen(() => trackStep(presenter, "Initializing environment generator...", getPlopInstance, asError("Failed to initialize plop")))
|
|
93
250
|
.andThen((plop) =>
|
|
94
251
|
// The prompt phase must run outside trackStep: in text mode trackStep
|
|
95
252
|
// renders a spinner that occupies the TTY and hides the prompts.
|
|
96
|
-
ResultAsync.fromPromise(collectDeploymentEnvironmentPayload(plop, gitHubService), asError("Failed to run the deployment environment generator")))
|
|
253
|
+
ResultAsync.fromPromise(collectDeploymentEnvironmentPayload(plop, gitHubService, undefined, initialAnswers), asError("Failed to run the deployment environment generator")))
|
|
97
254
|
.andThen(({ generator, payload }) => trackStep(presenter, "Creating environment...", () => runDeploymentEnvironmentActions(generator, payload), asError("Failed to create the deployment environment")))
|
|
98
255
|
.andThen((payload) => authorizeCloudAccounts(authorizationService)(payload).map((authorizationPrs) => ({
|
|
99
256
|
authorizationPrs,
|
|
257
|
+
payload,
|
|
100
258
|
})));
|
|
101
259
|
export const makeAddCommand = (requireGitHubAuth, env) => new Command()
|
|
102
260
|
.name("add")
|
|
103
261
|
.description("Add a new component to your workspace")
|
|
104
262
|
.addCommand(new Command("environment")
|
|
105
263
|
.description("Add a new deployment environment")
|
|
106
|
-
.
|
|
264
|
+
.addOption(new Option("--name <name>", "Environment name").choices([
|
|
265
|
+
"dev",
|
|
266
|
+
"uat",
|
|
267
|
+
"prod",
|
|
268
|
+
]))
|
|
269
|
+
.addOption(new Option("--account <subscription-id>", "Cloud account subscription id").argParser(appendOptionValue))
|
|
270
|
+
.addOption(new Option("--location <subscription-id=region>", "Default Azure location for a selected account").argParser(appendOptionValue))
|
|
271
|
+
.addOption(new Option("--prefix <prefix>", "Environment prefix"))
|
|
272
|
+
.addOption(new Option("--domain <domain>", "Workspace domain"))
|
|
273
|
+
.addOption(new Option("--business-unit <business-unit>", "Business unit tag"))
|
|
274
|
+
.addOption(new Option("--management-team <management-team>", "Management team tag"))
|
|
275
|
+
.addOption(new Option("-y, --yes", "Confirm environment initialization without prompting"))
|
|
276
|
+
.addOption(new Option("--runner-app-id <runner-app-id>", "GitHub Runner App ID"))
|
|
277
|
+
.addOption(new Option("--client-id <client-id>", "GitHub Runner App Client ID"))
|
|
278
|
+
.addOption(new Option("--installation-id <installation-id>", "GitHub Runner App Installation ID"))
|
|
279
|
+
.addOption(new Option("--private-key-path <private-key-path>", "Path to a local GitHub Runner App private key file"))
|
|
280
|
+
.action(async function (options) {
|
|
107
281
|
const { output } = this.optsWithGlobals();
|
|
108
282
|
const outputMode = resolveOutputMode(env, output);
|
|
109
283
|
const presenter = createCommandPresenter(outputMode);
|
|
110
|
-
await
|
|
111
|
-
|
|
284
|
+
await ResultAsync.fromPromise(Promise.resolve().then(() => parseAddEnvironmentCommandOptions(options)), (cause) => cause instanceof Error
|
|
285
|
+
? cause
|
|
286
|
+
: new Error("Failed to parse add environment command options", {
|
|
287
|
+
cause,
|
|
288
|
+
}))
|
|
289
|
+
.andThen((addEnvironmentOptions) => ResultAsync.fromPromise(getEnvironmentInitialAnswers(addEnvironmentOptions), (cause) => cause instanceof Error
|
|
290
|
+
? cause
|
|
291
|
+
: new Error("Failed to load add environment initial answers", {
|
|
292
|
+
cause,
|
|
293
|
+
})).andThen((initialAnswers) => requireGitHubAuth().andThen(({ authorizationService, gitHubService }) => addEnvironmentAction(authorizationService, gitHubService, presenter, initialAnswers))))
|
|
112
294
|
.match(reportSummary(presenter, outputMode), reportCommandError(this, presenter, outputMode));
|
|
113
295
|
}));
|
|
114
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2FkYXB0ZXJzL2NvbW1hbmRlci9jb21tYW5kcy9hZGQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzdDLE9BQU8sS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUMxQjs7Ozs7Ozs7R0FRRztBQUNILE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDcEMsT0FBTyxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFPbEQsT0FBTyxFQUdMLCtCQUErQixHQUNoQyxNQUFNLGtDQUFrQyxDQUFDO0FBRTFDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBRWxFLE9BQU8sRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDMUUsT0FBTyxFQUNMLG1DQUFtQyxFQUNuQyxlQUFlLEVBQ2YsK0JBQStCLEdBQ2hDLE1BQU0scUJBQXFCLENBQUM7QUFDN0IsT0FBTyxFQUFFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ25FLE9BQU8sRUFDTCxzQkFBc0IsRUFDdEIsaUJBQWlCLEdBQ2xCLE1BQU0sd0JBQXdCLENBQUM7QUFDaEMsT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0sV0FBVyxDQUFDO0FBRTNEOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sc0JBQXNCLEdBQ2pDLENBQUMsb0JBQTBDLEVBQUUsRUFBRSxDQUMvQyxDQUNFLFVBQThCLEVBQ2EsRUFBRTtJQUM3QyxNQUFNLG9CQUFvQixHQUN4QixVQUFVLENBQUMsSUFBSSxFQUFFLHlCQUF5QixJQUFJLEVBQUUsQ0FBQztJQUVuRCxJQUFJLG9CQUFvQixDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUN0QyxP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QWlCLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ2xELE1BQU0sU0FBUyxHQUFHLHNCQUFzQixDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBRXJELE1BQU0saUJBQWlCLEVBQUU7U0FDdEIsT0FBTyxDQUFDLENBQUMsRUFBRSxvQkFBb0IsRUFBRSxhQUFhLEVBQUUsRUFBRSxFQUFFLENBQ25ELG9CQUFvQixDQUNsQixvQkFBb0IsRUFDcEIsYUFBYSxFQUNiLFNBQVMsQ0FDVixDQUNGO1NBQ0EsS0FBSyxDQUNKLGFBQWEsQ0FBQyxTQUFTLEVBQUUsVUFBVSxDQUFDLEVBQ3BDLGtCQUFrQixDQUFDLElBQUksRUFBRSxTQUFTLEVBQUUsVUFBVSxDQUFDLENBQ2hELENBQUM7QUFDTixDQUFDLENBQUMsQ0FDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZ2V0TG9nZ2VyIH0gZnJvbSBcIkBsb2d0YXBlL2xvZ3RhcGVcIjtcbmltcG9ydCBjaGFsayBmcm9tIFwiY2hhbGtcIjtcbi8qKlxuICogQWRkIGNvbW1hbmQgLSBTY2FmZm9sZCBuZXcgY29tcG9uZW50cyBpbnRvIGV4aXN0aW5nIHdvcmtzcGFjZXNcbiAqXG4gKiBUaGlzIG1vZHVsZSBpbXBsZW1lbnRzIHRoZSBgZHggYWRkYCBjb21tYW5kIHdoaWNoIGFsbG93cyBkZXZlbG9wZXJzIHRvIHNjYWZmb2xkXG4gKiBuZXcgY29tcG9uZW50cyBpbnRvIHRoZWlyIGV4aXN0aW5nIHdvcmtzcGFjZSBmb2xsb3dpbmcgRGV2RXggZ3VpZGVsaW5lcy5cbiAqXG4gKiBDdXJyZW50bHkgc3VwcG9ydGVkIGNvbXBvbmVudHM6XG4gKiAtIGVudmlyb25tZW50OiBBZGQgYSBuZXcgZGVwbG95bWVudCBlbnZpcm9ubWVudCB0byB0aGUgcHJvamVjdFxuICovXG5pbXBvcnQgeyBDb21tYW5kIH0gZnJvbSBcImNvbW1hbmRlclwiO1xuaW1wb3J0IHsgb2tBc3luYywgUmVzdWx0QXN5bmMgfSBmcm9tIFwibmV2ZXJ0aHJvd1wiO1xuXG5pbXBvcnQgdHlwZSB7IENvbW1hbmRQcmVzZW50ZXIgfSBmcm9tIFwiLi4vLi4vLi4vZG9tYWluL2NvbW1hbmQtcHJlc2VudGVyLmpzXCI7XG5pbXBvcnQgdHlwZSB7IFBheWxvYWQgYXMgRW52aXJvbm1lbnRQYXlsb2FkIH0gZnJvbSBcIi4uLy4uL3Bsb3AvZ2VuZXJhdG9ycy9lbnZpcm9ubWVudC9pbmRleC5qc1wiO1xuaW1wb3J0IHR5cGUgeyBDbGlFbnYgfSBmcm9tIFwiLi4vZW52LmpzXCI7XG5pbXBvcnQgdHlwZSB7IEdsb2JhbE9wdGlvbnMgfSBmcm9tIFwiLi4vZ2xvYmFsLW9wdGlvbnMuanNcIjtcblxuaW1wb3J0IHtcbiAgQXV0aG9yaXphdGlvblJlc3VsdCxcbiAgQXV0aG9yaXphdGlvblNlcnZpY2UsXG4gIHJlcXVlc3RBdXRob3JpemF0aW9uSW5wdXRTY2hlbWEsXG59IGZyb20gXCIuLi8uLi8uLi9kb21haW4vYXV0aG9yaXphdGlvbi5qc1wiO1xuaW1wb3J0IHsgR2l0SHViQXV0aEZhY3RvcnkgfSBmcm9tIFwiLi4vLi4vLi4vZG9tYWluL2RlcGVuZGVuY2llcy5qc1wiO1xuaW1wb3J0IHsgZW52aXJvbm1lbnRTaG9ydCB9IGZyb20gXCIuLi8uLi8uLi9kb21haW4vZW52aXJvbm1lbnQuanNcIjtcbmltcG9ydCB7IHR5cGUgR2l0SHViU2VydmljZSB9IGZyb20gXCIuLi8uLi8uLi9kb21haW4vZ2l0aHViLmpzXCI7XG5pbXBvcnQgeyBpc0F6dXJlTG9jYXRpb24sIGxvY2F0aW9uU2hvcnQgfSBmcm9tIFwiLi4vLi4vYXp1cmUvbG9jYXRpb25zLmpzXCI7XG5pbXBvcnQge1xuICBjb2xsZWN0RGVwbG95bWVudEVudmlyb25tZW50UGF5bG9hZCxcbiAgZ2V0UGxvcEluc3RhbmNlLFxuICBydW5EZXBsb3ltZW50RW52aXJvbm1lbnRBY3Rpb25zLFxufSBmcm9tIFwiLi4vLi4vcGxvcC9pbmRleC5qc1wiO1xuaW1wb3J0IHsgYXNFcnJvciwgcmVwb3J0Q29tbWFuZEVycm9yIH0gZnJvbSBcIi4uL2NvbW1hbmQtZXJyb3JzLmpzXCI7XG5pbXBvcnQge1xuICBjcmVhdGVDb21tYW5kUHJlc2VudGVyLFxuICByZXNvbHZlT3V0cHV0TW9kZSxcbn0gZnJvbSBcIi4uL3ByZXNlbnRlcnMvaW5kZXguanNcIjtcbmltcG9ydCB7IHJ1bkFkZEVudmlyb25tZW50UHJlY29uZGl0aW9ucyB9IGZyb20gXCIuL2luaXQuanNcIjtcblxuLyoqXG4gKiBBdXRob3JpemUgYSBDbG91ZCBBY2NvdW50IChBenVyZSBTdWJzY3JpcHRpb24sIEFXUyBBY2NvdW50LCAuLi4pLCBjcmVhdGluZyBhIFB1bGwgUmVxdWVzdCBmb3IgZWFjaCBhY2NvdW50IHRoYXQgcmVxdWlyZXMgYXV0aG9yaXphdGlvbi5cbiAqL1xuZXhwb3J0IGNvbnN0IGF1dGhvcml6ZUNsb3VkQWNjb3VudHMgPVxuICAoYXV0aG9yaXphdGlvblNlcnZpY2U6IEF1dGhvcml6YXRpb25TZXJ2aWNlKSA9PlxuICAoXG4gICAgZW52UGF5bG9hZDogRW52aXJvbm1lbnRQYXlsb2FkLFxuICApOiBSZXN1bHRBc3luYzxBdXRob3JpemF0aW9uUmVzdWx0W10sIG5ldmVyPiA9PiB7XG4gICAgY29uc3QgYWNjb3VudHNUb0luaXRpYWxpemUgPVxuICAgICAgZW52UGF5bG9hZC5pbml0Py5jbG91ZEFjY291bnRzVG9Jbml0aWFsaXplID8/IFtdO1xuXG4gICAgaWYgKGFjY291bnRzVG9Jbml0aWFsaXplLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIG9rQXN5bmMoW10pO1xuICAgIH1cblxuICAgIGNvbnN0IGxvZ2dlciA9IGdldExvZ2dlcihbXCJkeC1jbGlcIiwgXCJhZGQtZW52aXJvbm1lbnRcIl0pO1xuICAgIGNvbnN0IHsgbmFtZSwgcHJlZml4IH0gPSBlbnZQYXlsb2FkLmVudjtcbiAgICBjb25zdCBlbnZTaG9ydCA9IGVudmlyb25tZW50U2hvcnRbbmFtZV07XG5cbiAgICBjb25zdCByZXF1ZXN0QWxsID0gYXN5bmMgKCk6IFByb21pc2U8QXV0aG9yaXphdGlvblJlc3VsdFtdPiA9PiB7XG4gICAgICBjb25zdCByZXN1bHRzOiBBdXRob3JpemF0aW9uUmVzdWx0W10gPSBbXTtcblxuICAgICAgZm9yIChjb25zdCBhY2NvdW50IG9mIGFjY291bnRzVG9Jbml0aWFsaXplKSB7XG4gICAgICAgIGlmICghaXNBenVyZUxvY2F0aW9uKGFjY291bnQuZGVmYXVsdExvY2F0aW9uKSkge1xuICAgICAgICAgIGxvZ2dlci53YXJuKFxuICAgICAgICAgICAgXCJTa2lwcGluZyBhdXRob3JpemF0aW9uIGZvciB7YWNjb3VudH06IHVuc3VwcG9ydGVkIGxvY2F0aW9uXCIsXG4gICAgICAgICAgICB7IGFjY291bnQ6IGFjY291bnQuZGlzcGxheU5hbWUgfSxcbiAgICAgICAgICApO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbG9jU2hvcnQgPSBsb2NhdGlvblNob3J0W2FjY291bnQuZGVmYXVsdExvY2F0aW9uXTtcbiAgICAgICAgY29uc3QgaW5wdXQgPSByZXF1ZXN0QXV0aG9yaXphdGlvbklucHV0U2NoZW1hLnNhZmVQYXJzZSh7XG4gICAgICAgICAgYm9vdHN0cmFwSWRlbnRpdHlJZDogYCR7cHJlZml4fS0ke2VudlNob3J0fS0ke2xvY1Nob3J0fS1ib290c3RyYXAtaWQtMDFgLFxuICAgICAgICAgIGVudlNob3J0LFxuICAgICAgICAgIHByZWZpeCxcbiAgICAgICAgICByZXBvTmFtZTogZW52UGF5bG9hZC5naXRodWIucmVwbyxcbiAgICAgICAgICByZXBvT3duZXI6IGVudlBheWxvYWQuZ2l0aHViLm93bmVyLFxuICAgICAgICAgIHN1YnNjcmlwdGlvbk5hbWU6IGFjY291bnQuZGlzcGxheU5hbWUsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmICghaW5wdXQuc3VjY2Vzcykge1xuICAgICAgICAgIGxvZ2dlci53YXJuKFwiU2tpcHBpbmcgYXV0aG9yaXphdGlvbiBmb3Ige2FjY291bnR9OiBpbnZhbGlkIGlucHV0XCIsIHtcbiAgICAgICAgICAgIGFjY291bnQ6IGFjY291bnQuZGlzcGxheU5hbWUsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBhdXRob3JpemF0aW9uU2VydmljZS5yZXF1ZXN0QXV0aG9yaXphdGlvbihcbiAgICAgICAgICBpbnB1dC5kYXRhLFxuICAgICAgICApO1xuXG4gICAgICAgIHJlc3VsdC5tYXRjaChcbiAgICAgICAgICAoYXV0aFJlc3VsdCkgPT4gcmVzdWx0cy5wdXNoKGF1dGhSZXN1bHQpLFxuICAgICAgICAgIChlcnJvcikgPT5cbiAgICAgICAgICAgIGxvZ2dlci53YXJuKFwiQXV0aG9yaXphdGlvbiByZXF1ZXN0IGZhaWxlZCBmb3Ige2FjY291bnR9OiB7ZXJyb3J9XCIsIHtcbiAgICAgICAgICAgICAgYWNjb3VudDogYWNjb3VudC5kaXNwbGF5TmFtZSxcbiAgICAgICAgICAgICAgZXJyb3I6IGVycm9yLm1lc3NhZ2UsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgfTtcblxuICAgIHJldHVybiBSZXN1bHRBc3luYy5mcm9tUHJvbWlzZShyZXF1ZXN0QWxsKCksICgpID0+IFtdKS5vckVsc2UoKCkgPT5cbiAgICAgIG9rQXN5bmMoW10pLFxuICAgICk7XG4gIH07XG5cbnR5cGUgQWRkUmVzdWx0ID0ge1xuICBhdXRob3JpemF0aW9uUHJzOiBBdXRob3JpemF0aW9uUmVzdWx0W107XG59O1xuXG5jb25zdCBkaXNwbGF5U3VtbWFyeSA9IChyZXN1bHQ6IEFkZFJlc3VsdCkgPT4ge1xuICBjb25zdCB7IGF1dGhvcml6YXRpb25QcnMgfSA9IHJlc3VsdDtcbiAgY29uc29sZS5sb2coY2hhbGsuZ3JlZW4uYm9sZChcIlxcbkNsb3VkIGVudmlyb25tZW50IGNyZWF0ZWQgc3VjY2Vzc2Z1bGx5IVwiKSk7XG5cbiAgbGV0IHN0ZXAgPSAxO1xuICBjb25zb2xlLmxvZyhjaGFsay5ncmVlbi5ib2xkKFwiXFxuTmV4dCBTdGVwczpcIikpO1xuICBjb25zdCBwcnNXaXRoVXJsID0gYXV0aG9yaXphdGlvblBycy5maWx0ZXIoXG4gICAgKHByKTogcHIgaXMgQXV0aG9yaXphdGlvblJlc3VsdCAmIHsgdXJsOiBzdHJpbmcgfSA9PiBwci51cmwgIT0gbnVsbCxcbiAgKTtcbiAgaWYgKHByc1dpdGhVcmwubGVuZ3RoID4gMCkge1xuICAgIGNvbnNvbGUubG9nKGAke3N0ZXArK30uIFJldmlldyB0aGUgQXp1cmUgYXV0aG9yaXphdGlvbiBQdWxsIFJlcXVlc3Qocyk6YCk7XG4gICAgZm9yIChjb25zdCBhdXRoUHIgb2YgcHJzV2l0aFVybCkge1xuICAgICAgY29uc29sZS5sb2coYCAgIC0gJHtjaGFsay51bmRlcmxpbmUoYXV0aFByLnVybCl9YCk7XG4gICAgfVxuICB9XG4gIGNvbnNvbGUubG9nKFxuICAgIGAke3N0ZXB9LiBWaXNpdCAke2NoYWxrLnVuZGVybGluZShcImh0dHBzOi8vZHgucGFnb3BhLml0L2dldHRpbmctc3RhcnRlZFwiKX0gdG8gZGVwbG95IHlvdXIgZmlyc3QgcHJvamVjdFxcbmAsXG4gICk7XG59O1xuXG4vKipcbiAqIFJvdXRlcyB0aGUgc3VjY2Vzc2Z1bCBvdXRjb21lIHRocm91Z2ggdGhlIHByZXNlbnRlcjogSlNPTiBtb2RlIGVtaXRzIHRoZVxuICogc3RydWN0dXJlZCBlbnZlbG9wZSB3aGlsZSB0ZXh0IG1vZGUgcmVuZGVycyB0aGUgaHVtYW4tcmVhZGFibGUgc3VtbWFyeS5cbiAqL1xuY29uc3QgcmVwb3J0U3VtbWFyeSA9XG4gIChwcmVzZW50ZXI6IENvbW1hbmRQcmVzZW50ZXIsIG91dHB1dE1vZGU6IFwianNvblwiIHwgXCJ0ZXh0XCIpID0+XG4gIChyZXN1bHQ6IEFkZFJlc3VsdCk6IHZvaWQgPT4ge1xuICAgIGlmIChvdXRwdXRNb2RlID09PSBcImpzb25cIikge1xuICAgICAgcHJlc2VudGVyLnJlcG9ydFJlc3VsdChyZXN1bHQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBkaXNwbGF5U3VtbWFyeShyZXN1bHQpO1xuICAgIH1cbiAgfTtcblxuY29uc3QgdHJhY2tTdGVwID0gPFQsIEU+KFxuICBwcmVzZW50ZXI6IENvbW1hbmRQcmVzZW50ZXIsXG4gIG5hbWU6IHN0cmluZyxcbiAgdGFzazogKCkgPT4gUHJvbWlzZTxUPixcbiAgbWFwRXJyb3I6IChjYXVzZTogdW5rbm93bikgPT4gRSxcbik6IFJlc3VsdEFzeW5jPFQsIEU+ID0+XG4gIFJlc3VsdEFzeW5jLmZyb21Qcm9taXNlKHByZXNlbnRlci50cmFja1N0ZXAobmFtZSwgdGFzayksIG1hcEVycm9yKTtcblxuY29uc3QgYWRkRW52aXJvbm1lbnRBY3Rpb24gPSAoXG4gIGF1dGhvcml6YXRpb25TZXJ2aWNlOiBBdXRob3JpemF0aW9uU2VydmljZSxcbiAgZ2l0SHViU2VydmljZTogR2l0SHViU2VydmljZSxcbiAgcHJlc2VudGVyOiBDb21tYW5kUHJlc2VudGVyLFxuKTogUmVzdWx0QXN5bmM8QWRkUmVzdWx0LCBFcnJvcj4gPT5cbiAgcnVuQWRkRW52aXJvbm1lbnRQcmVjb25kaXRpb25zKHByZXNlbnRlcilcbiAgICAuYW5kVGhlbigoKSA9PlxuICAgICAgdHJhY2tTdGVwKFxuICAgICAgICBwcmVzZW50ZXIsXG4gICAgICAgIFwiSW5pdGlhbGl6aW5nIGVudmlyb25tZW50IGdlbmVyYXRvci4uLlwiLFxuICAgICAgICBnZXRQbG9wSW5zdGFuY2UsXG4gICAgICAgIGFzRXJyb3IoXCJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBwbG9wXCIpLFxuICAgICAgKSxcbiAgICApXG4gICAgLmFuZFRoZW4oKHBsb3ApID0+XG4gICAgICAvLyBUaGUgcHJvbXB0IHBoYXNlIG11c3QgcnVuIG91dHNpZGUgdHJhY2tTdGVwOiBpbiB0ZXh0IG1vZGUgdHJhY2tTdGVwXG4gICAgICAvLyByZW5kZXJzIGEgc3Bpbm5lciB0aGF0IG9jY3VwaWVzIHRoZSBUVFkgYW5kIGhpZGVzIHRoZSBwcm9tcHRzLlxuICAgICAgUmVzdWx0QXN5bmMuZnJvbVByb21pc2UoXG4gICAgICAgIGNvbGxlY3REZXBsb3ltZW50RW52aXJvbm1lbnRQYXlsb2FkKHBsb3AsIGdpdEh1YlNlcnZpY2UpLFxuICAgICAgICBhc0Vycm9yKFwiRmFpbGVkIHRvIHJ1biB0aGUgZGVwbG95bWVudCBlbnZpcm9ubWVudCBnZW5lcmF0b3JcIiksXG4gICAgICApLFxuICAgIClcbiAgICAuYW5kVGhlbigoeyBnZW5lcmF0b3IsIHBheWxvYWQgfSkgPT5cbiAgICAgIHRyYWNrU3RlcChcbiAgICAgICAgcHJlc2VudGVyLFxuICAgICAgICBcIkNyZWF0aW5nIGVudmlyb25tZW50Li4uXCIsXG4gICAgICAgICgpID0+IHJ1bkRlcGxveW1lbnRFbnZpcm9ubWVudEFjdGlvbnMoZ2VuZXJhdG9yLCBwYXlsb2FkKSxcbiAgICAgICAgYXNFcnJvcihcIkZhaWxlZCB0byBjcmVhdGUgdGhlIGRlcGxveW1lbnQgZW52aXJvbm1lbnRcIiksXG4gICAgICApLFxuICAgIClcbiAgICAuYW5kVGhlbigocGF5bG9hZCkgPT5cbiAgICAgIGF1dGhvcml6ZUNsb3VkQWNjb3VudHMoYXV0aG9yaXphdGlvblNlcnZpY2UpKHBheWxvYWQpLm1hcChcbiAgICAgICAgKGF1dGhvcml6YXRpb25QcnMpID0+ICh7XG4gICAgICAgICAgYXV0aG9yaXphdGlvblBycyxcbiAgICAgICAgfSksXG4gICAgICApLFxuICAgICk7XG5cbmV4cG9ydCBjb25zdCBtYWtlQWRkQ29tbWFuZCA9IChcbiAgcmVxdWlyZUdpdEh1YkF1dGg6IEdpdEh1YkF1dGhGYWN0b3J5LFxuICBlbnY6IENsaUVudixcbik6IENvbW1hbmQgPT5cbiAgbmV3IENvbW1hbmQoKVxuICAgIC5uYW1lKFwiYWRkXCIpXG4gICAgLmRlc2NyaXB0aW9uKFwiQWRkIGEgbmV3IGNvbXBvbmVudCB0byB5b3VyIHdvcmtzcGFjZVwiKVxuICAgIC5hZGRDb21tYW5kKFxuICAgICAgbmV3IENvbW1hbmQoXCJlbnZpcm9ubWVudFwiKVxuICAgICAgICAuZGVzY3JpcHRpb24oXCJBZGQgYSBuZXcgZGVwbG95bWVudCBlbnZpcm9ubWVudFwiKVxuICAgICAgICAuYWN0aW9uKGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBjb25zdCB7IG91dHB1dCB9ID0gdGhpcy5vcHRzV2l0aEdsb2JhbHM8R2xvYmFsT3B0aW9ucz4oKTtcbiAgICAgICAgICBjb25zdCBvdXRwdXRNb2RlID0gcmVzb2x2ZU91dHB1dE1vZGUoZW52LCBvdXRwdXQpO1xuICAgICAgICAgIGNvbnN0IHByZXNlbnRlciA9IGNyZWF0ZUNvbW1hbmRQcmVzZW50ZXIob3V0cHV0TW9kZSk7XG5cbiAgICAgICAgICBhd2FpdCByZXF1aXJlR2l0SHViQXV0aCgpXG4gICAgICAgICAgICAuYW5kVGhlbigoeyBhdXRob3JpemF0aW9uU2VydmljZSwgZ2l0SHViU2VydmljZSB9KSA9PlxuICAgICAgICAgICAgICBhZGRFbnZpcm9ubWVudEFjdGlvbihcbiAgICAgICAgICAgICAgICBhdXRob3JpemF0aW9uU2VydmljZSxcbiAgICAgICAgICAgICAgICBnaXRIdWJTZXJ2aWNlLFxuICAgICAgICAgICAgICAgIHByZXNlbnRlcixcbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5tYXRjaChcbiAgICAgICAgICAgICAgcmVwb3J0U3VtbWFyeShwcmVzZW50ZXIsIG91dHB1dE1vZGUpLFxuICAgICAgICAgICAgICByZXBvcnRDb21tYW5kRXJyb3IodGhpcywgcHJlc2VudGVyLCBvdXRwdXRNb2RlKSxcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0pLFxuICAgICk7XG4iXX0=
|
|
296
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2FkYXB0ZXJzL2NvbW1hbmRlci9jb21tYW5kcy9hZGQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzdDLE9BQU8sS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUMxQjs7Ozs7OztHQU9HO0FBQ0gsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDNUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDbEQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzVDLE9BQU8sRUFBRSxDQUFDLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFVM0IsT0FBTyxFQUdMLCtCQUErQixHQUNoQyxNQUFNLGtDQUFrQyxDQUFDO0FBRTFDLE9BQU8sRUFDTCxpQkFBaUIsRUFDakIsZ0JBQWdCLEdBQ2pCLE1BQU0sZ0NBQWdDLENBQUM7QUFFeEMsT0FBTyxFQUVMLGVBQWUsRUFDZixhQUFhLEdBQ2QsTUFBTSwwQkFBMEIsQ0FBQztBQUNsQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sOENBQThDLENBQUM7QUFDL0UsT0FBTyxFQUNMLG1DQUFtQyxFQUNuQyxlQUFlLEVBQ2YsK0JBQStCLEdBQ2hDLE1BQU0scUJBQXFCLENBQUM7QUFDN0IsT0FBTyxFQUFFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ25FLE9BQU8sRUFDTCxzQkFBc0IsRUFDdEIsaUJBQWlCLEdBQ2xCLE1BQU0sd0JBQXdCLENBQUM7QUFDaEMsT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0sV0FBVyxDQUFDO0FBRTNELE1BQU0saUJBQWlCLEdBQUcsQ0FDeEIsS0FBYSxFQUNiLFdBQXFCLEVBQUUsRUFDYixFQUFFLENBQUMs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LCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBnZXRMb2dnZXIgfSBmcm9tIFwiQGxvZ3RhcGUvbG9ndGFwZVwiO1xuaW1wb3J0IGNoYWxrIGZyb20gXCJjaGFsa1wiO1xuLyoqXG4gKiBBZGQgY29tbWFuZCAtIFNjYWZmb2xkIG5ldyBjb21wb25lbnRzIGludG8gZXhpc3Rpbmcgd29ya3NwYWNlcy5cbiAqXG4gKiBUaGlzIG1vZHVsZSBpbXBsZW1lbnRzIHRoZSBgZHggYWRkYCBjb21tYW5kIGFuZCBrZWVwcyB0aGUgQ0xJLXNwZWNpZmljIGZsYWdcbiAqIHBhcnNpbmcvdmFsaWRhdGlvbiBjbG9zZSB0byB0aGUgQ29tbWFuZGVyIGFkYXB0ZXIuIEl0IHR1cm5zIHN1cHBvcnRlZCBmbGFnc1xuICogaW50byBwcmVmaWxsZWQgYW5zd2VycyBmb3IgdGhlIHBsb3AgZ2VuZXJhdG9yIHNvIHRoZSBjb21tYW5kIGNhbiBydW4gd2l0aCBhXG4gKiBtaXggb2Ygbm9uLWludGVyYWN0aXZlIGlucHV0cyBhbmQgZ3VpZGVkIHByb21wdHMuXG4gKi9cbmltcG9ydCB7IENvbW1hbmQsIE9wdGlvbiB9IGZyb20gXCJjb21tYW5kZXJcIjtcbmltcG9ydCB7IG9rQXN5bmMsIFJlc3VsdEFzeW5jIH0gZnJvbSBcIm5ldmVydGhyb3dcIjtcbmltcG9ydCB7IHJlYWRGaWxlIH0gZnJvbSBcIm5vZGU6ZnMvcHJvbWlzZXNcIjtcbmltcG9ydCB7IHogfSBmcm9tIFwiem9kL3Y0XCI7XG5cbmltcG9ydCB0eXBlIHsgQ29tbWFuZFByZXNlbnRlciB9IGZyb20gXCIuLi8uLi8uLi9kb21haW4vY29tbWFuZC1wcmVzZW50ZXIuanNcIjtcbmltcG9ydCB0eXBlIHtcbiAgSW5pdGlhbEFuc3dlcnMgYXMgRGVwbG95bWVudEVudmlyb25tZW50SW5pdGlhbEFuc3dlcnMsXG4gIFBheWxvYWQgYXMgRW52aXJvbm1lbnRQYXlsb2FkLFxufSBmcm9tIFwiLi4vLi4vcGxvcC9nZW5lcmF0b3JzL2Vudmlyb25tZW50L2luZGV4LmpzXCI7XG5pbXBvcnQgdHlwZSB7IENsaUVudiB9IGZyb20gXCIuLi9lbnYuanNcIjtcbmltcG9ydCB0eXBlIHsgR2xvYmFsT3B0aW9ucyB9IGZyb20gXCIuLi9nbG9iYWwtb3B0aW9ucy5qc1wiO1xuXG5pbXBvcnQge1xuICBBdXRob3JpemF0aW9uUmVzdWx0LFxuICBBdXRob3JpemF0aW9uU2VydmljZSxcbiAgcmVxdWVzdEF1dGhvcml6YXRpb25JbnB1dFNjaGVtYSxcbn0gZnJvbSBcIi4uLy4uLy4uL2RvbWFpbi9hdXRob3JpemF0aW9uLmpzXCI7XG5pbXBvcnQgeyBHaXRIdWJBdXRoRmFjdG9yeSB9IGZyb20gXCIuLi8uLi8uLi9kb21haW4vZGVwZW5kZW5jaWVzLmpzXCI7XG5pbXBvcnQge1xuICBlbnZpcm9ubWVudFNjaGVtYSxcbiAgZW52aXJvbm1lbnRTaG9ydCxcbn0gZnJvbSBcIi4uLy4uLy4uL2RvbWFpbi9lbnZpcm9ubWVudC5qc1wiO1xuaW1wb3J0IHsgdHlwZSBHaXRIdWJTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uLy4uL2RvbWFpbi9naXRodWIuanNcIjtcbmltcG9ydCB7XG4gIHR5cGUgQXp1cmVMb2NhdGlvbixcbiAgaXNBenVyZUxvY2F0aW9uLFxuICBsb2NhdGlvblNob3J0LFxufSBmcm9tIFwiLi4vLi4vYXp1cmUvbG9jYXRpb25zLmpzXCI7XG5pbXBvcnQgeyB3b3Jrc3BhY2VTY2hlbWEgfSBmcm9tIFwiLi4vLi4vcGxvcC9nZW5lcmF0b3JzL2Vudmlyb25tZW50L3Byb21wdHMuanNcIjtcbmltcG9ydCB7XG4gIGNvbGxlY3REZXBsb3ltZW50RW52aXJvbm1lbnRQYXlsb2FkLFxuICBnZXRQbG9wSW5zdGFuY2UsXG4gIHJ1bkRlcGxveW1lbnRFbnZpcm9ubWVudEFjdGlvbnMsXG59IGZyb20gXCIuLi8uLi9wbG9wL2luZGV4LmpzXCI7XG5pbXBvcnQgeyBhc0Vycm9yLCByZXBvcnRDb21tYW5kRXJyb3IgfSBmcm9tIFwiLi4vY29tbWFuZC1lcnJvcnMuanNcIjtcbmltcG9ydCB7XG4gIGNyZWF0ZUNvbW1hbmRQcmVzZW50ZXIsXG4gIHJlc29sdmVPdXRwdXRNb2RlLFxufSBmcm9tIFwiLi4vcHJlc2VudGVycy9pbmRleC5qc1wiO1xuaW1wb3J0IHsgcnVuQWRkRW52aXJvbm1lbnRQcmVjb25kaXRpb25zIH0gZnJvbSBcIi4vaW5pdC5qc1wiO1xuXG5jb25zdCBhcHBlbmRPcHRpb25WYWx1ZSA9IChcbiAgdmFsdWU6IHN0cmluZyxcbiAgcHJldmlvdXM6IHN0cmluZ1tdID0gW10sXG4pOiBzdHJpbmdbXSA9PiBbLi4ucHJldmlvdXMsIHZhbHVlXTtcblxuY29uc3QgbG9jYXRpb25PcHRpb25TY2hlbWEgPSB6XG4gIC5zdHJpbmcoKVxuICAudHJpbSgpXG4gIC50cmFuc2Zvcm0oKHZhbHVlLCBjdHgpID0+IHtcbiAgICBjb25zdCBbcmF3QWNjb3VudElkLCAuLi5yYXdMb2NhdGlvblBhcnRzXSA9IHZhbHVlLnNwbGl0KFwiPVwiKTtcbiAgICBjb25zdCBhY2NvdW50SWQgPSByYXdBY2NvdW50SWQ/LnRyaW0oKTtcbiAgICBjb25zdCBsb2NhdGlvbiA9IHJhd0xvY2F0aW9uUGFydHMuam9pbihcIj1cIikudHJpbSgpO1xuXG4gICAgaWYgKCFhY2NvdW50SWQgfHwgcmF3TG9jYXRpb25QYXJ0cy5sZW5ndGggPT09IDAgfHwgbG9jYXRpb24ubGVuZ3RoID09PSAwKSB7XG4gICAgICBjdHguYWRkSXNzdWUoe1xuICAgICAgICBjb2RlOiB6LlpvZElzc3VlQ29kZS5jdXN0b20sXG4gICAgICAgIG1lc3NhZ2U6IFwiTG9jYXRpb24gbXVzdCB1c2UgdGhlIGZvcm1hdCA8c3Vic2NyaXB0aW9uLWlkPXJlZ2lvbj4uXCIsXG4gICAgICB9KTtcbiAgICAgIHJldHVybiB6Lk5FVkVSO1xuICAgIH1cblxuICAgIGlmICghaXNBenVyZUxvY2F0aW9uKGxvY2F0aW9uKSkge1xuICAgICAgY3R4LmFkZElzc3VlKHtcbiAgICAgICAgY29kZTogei5ab2RJc3N1ZUNvZGUuY3VzdG9tLFxuICAgICAgICBtZXNzYWdlOiBgVW5zdXBwb3J0ZWQgQXp1cmUgbG9jYXRpb24gXCIke2xvY2F0aW9ufVwiLmAsXG4gICAgICB9KTtcbiAgICAgIHJldHVybiB6Lk5FVkVSO1xuICAgIH1cblxuICAgIHJldHVybiB7IGFjY291bnRJZCwgbG9jYXRpb24gfTtcbiAgfSk7XG5cbmNvbnN0IGFkZEVudmlyb25tZW50Q29tbWFuZE9wdGlvbnNTY2hlbWEgPSB6XG4gIC5vYmplY3Qoe1xuICAgIGFjY291bnQ6IHpcbiAgICAgIC5hcnJheSh6LnN0cmluZygpLnRyaW0oKS5taW4oMSwgXCJDbG91ZCBhY2NvdW50IGlkIGNhbm5vdCBiZSBlbXB0eVwiKSlcbiAgICAgIC5vcHRpb25hbCgpLFxuICAgIGJ1c2luZXNzVW5pdDogelxuICAgICAgLnN0cmluZygpXG4gICAgICAudHJpbSgpXG4gICAgICAubWluKDEsIFwiQnVzaW5lc3MgdW5pdCBjYW5ub3QgYmUgZW1wdHlcIilcbiAgICAgIC5vcHRpb25hbCgpLFxuICAgIGNsaWVudElkOiB6LnN0cmluZygpLnRyaW0oKS5taW4oMSwgXCJDbGllbnQgaWQgY2Fubm90IGJlIGVtcHR5XCIpLm9wdGlvbmFsKCksXG4gICAgZG9tYWluOiB3b3Jrc3BhY2VTY2hlbWEuc2hhcGUuZG9tYWluLm9wdGlvbmFsKCksXG4gICAgaW5zdGFsbGF0aW9uSWQ6IHpcbiAgICAgIC5zdHJpbmcoKVxuICAgICAgLnRyaW0oKVxuICAgICAgLm1pbigxLCBcIkluc3RhbGxhdGlvbiBpZCBjYW5ub3QgYmUgZW1wdHlcIilcbiAgICAgIC5vcHRpb25hbCgpLFxuICAgIGxvY2F0aW9uOiB6LmFycmF5KGxvY2F0aW9uT3B0aW9uU2NoZW1hKS5vcHRpb25hbCgpLFxuICAgIG1hbmFnZW1lbnRUZWFtOiB6XG4gICAgICAuc3RyaW5nKClcbiAgICAgIC50cmltKClcbiAgICAgIC5taW4oMSwgXCJNYW5hZ2VtZW50IHRlYW0gY2Fubm90IGJlIGVtcHR5XCIpXG4gICAgICAub3B0aW9uYWwoKSxcbiAgICBuYW1lOiBlbnZpcm9ubWVudFNjaGVtYS5zaGFwZS5uYW1lLm9wdGlvbmFsKCksXG4gICAgcHJlZml4OiBlbnZpcm9ubWVudFNjaGVtYS5zaGFwZS5wcmVmaXgub3B0aW9uYWwoKSxcbiAgICBwcml2YXRlS2V5UGF0aDogelxuICAgICAgLnN0cmluZygpXG4gICAgICAudHJpbSgpXG4gICAgICAubWluKDEsIFwiUHJpdmF0ZSBrZXkgcGF0aCBjYW5ub3QgYmUgZW1wdHlcIilcbiAgICAgIC5vcHRpb25hbCgpLFxuICAgIHJ1bm5lckFwcElkOiB6XG4gICAgICAuc3RyaW5nKClcbiAgICAgIC50cmltKClcbiAgICAgIC5taW4oMSwgXCJSdW5uZXIgYXBwIGlkIGNhbm5vdCBiZSBlbXB0eVwiKVxuICAgICAgLm9wdGlvbmFsKCksXG4gICAgeWVzOiB6LmJvb2xlYW4oKS5vcHRpb25hbCgpLFxuICB9KVxuICAuc3VwZXJSZWZpbmUoKHZhbHVlLCBjdHgpID0+IHtcbiAgICBpZiAodmFsdWUubG9jYXRpb24gJiYgIXZhbHVlLmFjY291bnQ/Lmxlbmd0aCkge1xuICAgICAgY3R4LmFkZElzc3VlKHtcbiAgICAgICAgY29kZTogei5ab2RJc3N1ZUNvZGUuY3VzdG9tLFxuICAgICAgICBtZXNzYWdlOiBcIkxvY2F0aW9uIG1hcHBpbmdzIHJlcXVpcmUgYXQgbGVhc3Qgb25lIC0tYWNjb3VudCBmbGFnLlwiLFxuICAgICAgICBwYXRoOiBbXCJsb2NhdGlvblwiXSxcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh2YWx1ZS5hY2NvdW50ICYmIHZhbHVlLmxvY2F0aW9uKSB7XG4gICAgICBjb25zdCBzZWxlY3RlZEFjY291bnRzID0gbmV3IFNldCh2YWx1ZS5hY2NvdW50KTtcbiAgICAgIGZvciAoY29uc3QgbWFwcGluZyBvZiB2YWx1ZS5sb2NhdGlvbikge1xuICAgICAgICBpZiAoIXNlbGVjdGVkQWNjb3VudHMuaGFzKG1hcHBpbmcuYWNjb3VudElkKSkge1xuICAgICAgICAgIGN0eC5hZGRJc3N1ZSh7XG4gICAgICAgICAgICBjb2RlOiB6LlpvZElzc3VlQ29kZS5jdXN0b20sXG4gICAgICAgICAgICBtZXNzYWdlOiBgTG9jYXRpb24gbWFwcGluZyByZWZlcmVuY2VzIHVua25vd24gYWNjb3VudCBcIiR7bWFwcGluZy5hY2NvdW50SWR9XCIuYCxcbiAgICAgICAgICAgIHBhdGg6IFtcImxvY2F0aW9uXCJdLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9KTtcblxuZXhwb3J0IHR5cGUgQWRkRW52aXJvbm1lbnRDb21tYW5kT3B0aW9ucyA9IHouaW5mZXI8XG4gIHR5cGVvZiBhZGRFbnZpcm9ubWVudENvbW1hbmRPcHRpb25zU2NoZW1hXG4+O1xuXG5leHBvcnQgY29uc3QgcGFyc2VBZGRFbnZpcm9ubWVudENvbW1hbmRPcHRpb25zID0gKFxuICBpbnB1dDogdW5rbm93bixcbik6IEFkZEVudmlyb25tZW50Q29tbWFuZE9wdGlvbnMgPT4ge1xuICBjb25zdCByZXN1bHQgPSBhZGRFbnZpcm9ubWVudENvbW1hbmRPcHRpb25zU2NoZW1hLnNhZmVQYXJzZShpbnB1dCk7XG4gIGlmICghcmVzdWx0LnN1Y2Nlc3MpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgSW52YWxpZCBhZGQgZW52aXJvbm1lbnQgY29tbWFuZCBvcHRpb25zOlxcbiR7ei5wcmV0dGlmeUVycm9yKHJlc3VsdC5lcnJvcil9YCxcbiAgICAgIHtcbiAgICAgICAgY2F1c2U6IHJlc3VsdC5lcnJvcixcbiAgICAgIH0sXG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiByZXN1bHQuZGF0YTtcbn07XG5cbmNvbnN0IGJ1aWxkQmFzZUVudmlyb25tZW50SW5pdGlhbEFuc3dlcnMgPSAoXG4gIG9wdGlvbnM6IEFkZEVudmlyb25tZW50Q29tbWFuZE9wdGlvbnMsXG4pOiBEZXBsb3ltZW50RW52aXJvbm1lbnRJbml0aWFsQW5zd2VycyA9PiB7XG4gIGNvbnN0IGVudiA9IHtcbiAgICAuLi4ob3B0aW9ucy5uYW1lICYmIHsgbmFtZTogb3B0aW9ucy5uYW1lIH0pLFxuICAgIC4uLihvcHRpb25zLnByZWZpeCAmJiB7IHByZWZpeDogb3B0aW9ucy5wcmVmaXggfSksXG4gICAgLi4uKG9wdGlvbnMuYWNjb3VudD8ubGVuZ3RoICYmIHtcbiAgICAgIGNsb3VkQWNjb3VudElkczogQXJyYXkuZnJvbShuZXcgU2V0KG9wdGlvbnMuYWNjb3VudCkpLFxuICAgIH0pLFxuICAgIC4uLihvcHRpb25zLmxvY2F0aW9uPy5sZW5ndGggJiYge1xuICAgICAgbG9jYXRpb25zOiBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgICAgIG9wdGlvbnMubG9jYXRpb24ubWFwKCh7IGFjY291bnRJZCwgbG9jYXRpb24gfSkgPT4gW1xuICAgICAgICAgIGFjY291bnRJZCxcbiAgICAgICAgICBsb2NhdGlvbiBhcyBBenVyZUxvY2F0aW9uLFxuICAgICAgICBdKSxcbiAgICAgICksXG4gICAgfSksXG4gIH07XG5cbiAgY29uc3QgdGFncyA9IHtcbiAgICAuLi4ob3B0aW9ucy5idXNpbmVzc1VuaXQgJiYgeyBCdXNpbmVzc1VuaXQ6IG9wdGlvbnMuYnVzaW5lc3NVbml0IH0pLFxuICAgIC4uLihvcHRpb25zLm1hbmFnZW1lbnRUZWFtICYmIHsgTWFuYWdlbWVudFRlYW06IG9wdGlvbnMubWFuYWdlbWVudFRlYW0gfSksXG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICAuLi4oT2JqZWN0LmtleXMoZW52KS5sZW5ndGggPiAwICYmIHsgZW52IH0pLFxuICAgIC4uLihPYmplY3Qua2V5cyh0YWdzKS5sZW5ndGggPiAwICYmIHsgdGFncyB9KSxcbiAgICAuLi4ob3B0aW9ucy5kb21haW4gJiYgeyB3b3Jrc3BhY2U6IHsgZG9tYWluOiBvcHRpb25zLmRvbWFpbiB9IH0pLFxuICB9O1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEVudmlyb25tZW50SW5pdGlhbEFuc3dlcnMgPSBhc3luYyAoXG4gIG9wdGlvbnM6IEFkZEVudmlyb25tZW50Q29tbWFuZE9wdGlvbnMsXG4pOiBQcm9taXNlPERlcGxveW1lbnRFbnZpcm9ubWVudEluaXRpYWxBbnN3ZXJzPiA9PiB7XG4gIGNvbnN0IGluaXRpYWxBbnN3ZXJzID0gYnVpbGRCYXNlRW52aXJvbm1lbnRJbml0aWFsQW5zd2VycyhvcHRpb25zKTtcbiAgY29uc3QgcHJpdmF0ZUtleSA9XG4gICAgb3B0aW9ucy5wcml2YXRlS2V5UGF0aCA9PT0gdW5kZWZpbmVkXG4gICAgICA/IHVuZGVmaW5lZFxuICAgICAgOiBhd2FpdCByZWFkRmlsZShvcHRpb25zLnByaXZhdGVLZXlQYXRoLCBcInV0ZjhcIikuY2F0Y2goKGNhdXNlKSA9PiB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgYEZhaWxlZCB0byByZWFkIHByaXZhdGUga2V5IGZpbGUgYXQgXCIke29wdGlvbnMucHJpdmF0ZUtleVBhdGh9XCIuYCxcbiAgICAgICAgICAgIHsgY2F1c2UgfSxcbiAgICAgICAgICApO1xuICAgICAgICB9KTtcblxuICAvLyBGYWlsIGZhc3Qgb24gYW4gZW1wdHkgKG9yIHdoaXRlc3BhY2Utb25seSkga2V5IGZpbGU6IHRoZSBmaWxlIGNvbnRlbnRzIGFyZVxuICAvLyBuZXZlciB0cmltbWVkLCBzbyBhbiBlbXB0eSB2YWx1ZSB3b3VsZCBvdGhlcndpc2Ugc2tpcCB0aGUgcmVjb3ZlcnkgcHJvbXB0XG4gIC8vIGFuZCBzdXJmYWNlIGFzIGFuIG9wYXF1ZSBzY2hlbWEgZXJyb3IgKG9yIGEgc2lsZW50bHkgaW52YWxpZCBrZXkpIGxhdGVyLlxuICBpZiAocHJpdmF0ZUtleSAhPT0gdW5kZWZpbmVkICYmIHByaXZhdGVLZXkudHJpbSgpLmxlbmd0aCA9PT0gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBQcml2YXRlIGtleSBmaWxlIGF0IFwiJHtvcHRpb25zLnByaXZhdGVLZXlQYXRofVwiIGlzIGVtcHR5LmAsXG4gICAgKTtcbiAgfVxuXG4gIC8vIFByZWZpbGwgcnVubmVyLWFwcCBjcmVkZW50aWFscyBvbmx5IHdoZW4gYXQgbGVhc3Qgb25lIGNyZWRlbnRpYWwgZmxhZyB3YXNcbiAgLy8gcHJvdmlkZWQuIFVuc3BlY2lmaWVkIGZpZWxkcyBzdGF5IGB1bmRlZmluZWRgIG9uIHB1cnBvc2Ugc28gdGhlIGdlbmVyYXRvclxuICAvLyBwcm9tcHRzIGZvciB0aGUgbWlzc2luZyBwaWVjZXMgYW5kIHZhbGlkYXRlcyB0aGUgY29tcGxldGUgc2V0IGxhdGVyLiBXaXRoXG4gIC8vIG5vIGNyZWRlbnRpYWwgZmxhZyBhdCBhbGwsIGxlYXZlIHRoaXMgYHVuZGVmaW5lZGAgdG8ga2VlcCBpbml0aWFsaXphdGlvblxuICAvLyBmdWxseSBpbnRlcmFjdGl2ZS5cbiAgY29uc3QgcnVubmVyQXBwQ3JlZGVudGlhbHMgPVxuICAgIG9wdGlvbnMucnVubmVyQXBwSWQgPT09IHVuZGVmaW5lZCAmJlxuICAgIG9wdGlvbnMuY2xpZW50SWQgPT09IHVuZGVmaW5lZCAmJlxuICAgIG9wdGlvbnMuaW5zdGFsbGF0aW9uSWQgPT09IHVuZGVmaW5lZCAmJlxuICAgIHByaXZhdGVLZXkgPT09IHVuZGVmaW5lZFxuICAgICAgPyB1bmRlZmluZWRcbiAgICAgIDoge1xuICAgICAgICAgIGNsaWVudElkOiBvcHRpb25zLmNsaWVudElkLFxuICAgICAgICAgIGlkOiBvcHRpb25zLnJ1bm5lckFwcElkLFxuICAgICAgICAgIGluc3RhbGxhdGlvbklkOiBvcHRpb25zLmluc3RhbGxhdGlvbklkLFxuICAgICAgICAgIGtleTogcHJpdmF0ZUtleSxcbiAgICAgICAgfTtcblxuICByZXR1cm4ge1xuICAgIC4uLmluaXRpYWxBbnN3ZXJzLFxuICAgIC4uLigob3B0aW9ucy55ZXMgfHwgcnVubmVyQXBwQ3JlZGVudGlhbHMpICYmIHtcbiAgICAgIGluaXQ6IHtcbiAgICAgICAgLi4uKG9wdGlvbnMueWVzICYmIHsgY29uZmlybTogdHJ1ZSB9KSxcbiAgICAgICAgLi4uKHJ1bm5lckFwcENyZWRlbnRpYWxzICYmIHsgcnVubmVyQXBwQ3JlZGVudGlhbHMgfSksXG4gICAgICB9LFxuICAgIH0pLFxuICB9O1xufTtcblxuLyoqXG4gKiBBdXRob3JpemUgYSBDbG91ZCBBY2NvdW50IChBenVyZSBTdWJzY3JpcHRpb24sIEFXUyBBY2NvdW50LCAuLi4pLCBjcmVhdGluZyBhIFB1bGwgUmVxdWVzdCBmb3IgZWFjaCBhY2NvdW50IHRoYXQgcmVxdWlyZXMgYXV0aG9yaXphdGlvbi5cbiAqL1xuZXhwb3J0IGNvbnN0IGF1dGhvcml6ZUNsb3VkQWNjb3VudHMgPVxuICAoYXV0aG9yaXphdGlvblNlcnZpY2U6IEF1dGhvcml6YXRpb25TZXJ2aWNlKSA9PlxuICAoXG4gICAgZW52UGF5bG9hZDogRW52aXJvbm1lbnRQYXlsb2FkLFxuICApOiBSZXN1bHRBc3luYzxBdXRob3JpemF0aW9uUmVzdWx0W10sIG5ldmVyPiA9PiB7XG4gICAgY29uc3QgYWNjb3VudHNUb0luaXRpYWxpemUgPVxuICAgICAgZW52UGF5bG9hZC5pbml0Py5jbG91ZEFjY291bnRzVG9Jbml0aWFsaXplID8/IFtdO1xuXG4gICAgaWYgKGFjY291bnRzVG9Jbml0aWFsaXplLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIG9rQXN5bmMoW10pO1xuICAgIH1cblxuICAgIGNvbnN0IGxvZ2dlciA9IGdldExvZ2dlcihbXCJkeC1jbGlcIiwgXCJhZGQtZW52aXJvbm1lbnRcIl0pO1xuICAgIGNvbnN0IHsgbmFtZSwgcHJlZml4IH0gPSBlbnZQYXlsb2FkLmVudjtcbiAgICBjb25zdCBlbnZTaG9ydCA9IGVudmlyb25tZW50U2hvcnRbbmFtZV07XG5cbiAgICBjb25zdCByZXF1ZXN0QWxsID0gYXN5bmMgKCk6IFByb21pc2U8QXV0aG9yaXphdGlvblJlc3VsdFtdPiA9PiB7XG4gICAgICBjb25zdCByZXN1bHRzOiBBdXRob3JpemF0aW9uUmVzdWx0W10gPSBbXTtcblxuICAgICAgZm9yIChjb25zdCBhY2NvdW50IG9mIGFjY291bnRzVG9Jbml0aWFsaXplKSB7XG4gICAgICAgIGlmICghaXNBenVyZUxvY2F0aW9uKGFjY291bnQuZGVmYXVsdExvY2F0aW9uKSkge1xuICAgICAgICAgIGxvZ2dlci53YXJuKFxuICAgICAgICAgICAgXCJTa2lwcGluZyBhdXRob3JpemF0aW9uIGZvciB7YWNjb3VudH06IHVuc3VwcG9ydGVkIGxvY2F0aW9uXCIsXG4gICAgICAgICAgICB7IGFjY291bnQ6IGFjY291bnQuZGlzcGxheU5hbWUgfSxcbiAgICAgICAgICApO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbG9jU2hvcnQgPSBsb2NhdGlvblNob3J0W2FjY291bnQuZGVmYXVsdExvY2F0aW9uXTtcbiAgICAgICAgY29uc3QgaW5wdXQgPSByZXF1ZXN0QXV0aG9yaXphdGlvbklucHV0U2NoZW1hLnNhZmVQYXJzZSh7XG4gICAgICAgICAgYm9vdHN0cmFwSWRlbnRpdHlJZDogYCR7cHJlZml4fS0ke2VudlNob3J0fS0ke2xvY1Nob3J0fS1ib290c3RyYXAtaWQtMDFgLFxuICAgICAgICAgIGVudlNob3J0LFxuICAgICAgICAgIHByZWZpeCxcbiAgICAgICAgICByZXBvTmFtZTogZW52UGF5bG9hZC5naXRodWIucmVwbyxcbiAgICAgICAgICByZXBvT3duZXI6IGVudlBheWxvYWQuZ2l0aHViLm93bmVyLFxuICAgICAgICAgIHN1YnNjcmlwdGlvbk5hbWU6IGFjY291bnQuZGlzcGxheU5hbWUsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmICghaW5wdXQuc3VjY2Vzcykge1xuICAgICAgICAgIGxvZ2dlci53YXJuKFwiU2tpcHBpbmcgYXV0aG9yaXphdGlvbiBmb3Ige2FjY291bnR9OiBpbnZhbGlkIGlucHV0XCIsIHtcbiAgICAgICAgICAgIGFjY291bnQ6IGFjY291bnQuZGlzcGxheU5hbWUsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBhdXRob3JpemF0aW9uU2VydmljZS5yZXF1ZXN0QXV0aG9yaXphdGlvbihcbiAgICAgICAgICBpbnB1dC5kYXRhLFxuICAgICAgICApO1xuXG4gICAgICAgIHJlc3VsdC5tYXRjaChcbiAgICAgICAgICAoYXV0aFJlc3VsdCkgPT4gcmVzdWx0cy5wdXNoKGF1dGhSZXN1bHQpLFxuICAgICAgICAgIChlcnJvcikgPT5cbiAgICAgICAgICAgIGxvZ2dlci53YXJuKFwiQXV0aG9yaXphdGlvbiByZXF1ZXN0IGZhaWxlZCBmb3Ige2FjY291bnR9OiB7ZXJyb3J9XCIsIHtcbiAgICAgICAgICAgICAgYWNjb3VudDogYWNjb3VudC5kaXNwbGF5TmFtZSxcbiAgICAgICAgICAgICAgZXJyb3I6IGVycm9yLm1lc3NhZ2UsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgfTtcblxuICAgIHJldHVybiBSZXN1bHRBc3luYy5mcm9tUHJvbWlzZShyZXF1ZXN0QWxsKCksICgpID0+IFtdKS5vckVsc2UoKCkgPT5cbiAgICAgIG9rQXN5bmMoW10pLFxuICAgICk7XG4gIH07XG5cbnR5cGUgQWRkUmVzdWx0ID0ge1xuICBhdXRob3JpemF0aW9uUHJzOiBBdXRob3JpemF0aW9uUmVzdWx0W107XG4gIHBheWxvYWQ6IEVudmlyb25tZW50UGF5bG9hZDtcbn07XG5cbmNvbnN0IGRpc3BsYXlTdW1tYXJ5ID0gKHJlc3VsdDogQWRkUmVzdWx0KSA9PiB7XG4gIGNvbnN0IHsgYXV0aG9yaXphdGlvblBycyB9ID0gcmVzdWx0O1xuICBjb25zb2xlLmxvZyhjaGFsay5ncmVlbi5ib2xkKFwiXFxuQ2xvdWQgZW52aXJvbm1lbnQgY3JlYXRlZCBzdWNjZXNzZnVsbHkhXCIpKTtcblxuICBsZXQgc3RlcCA9IDE7XG4gIGNvbnNvbGUubG9nKGNoYWxrLmdyZWVuLmJvbGQoXCJcXG5OZXh0IFN0ZXBzOlwiKSk7XG4gIGNvbnN0IHByc1dpdGhVcmwgPSBhdXRob3JpemF0aW9uUHJzLmZpbHRlcihcbiAgICAocHIpOiBwciBpcyBBdXRob3JpemF0aW9uUmVzdWx0ICYgeyB1cmw6IHN0cmluZyB9ID0+IHByLnVybCAhPSBudWxsLFxuICApO1xuICBpZiAocHJzV2l0aFVybC5sZW5ndGggPiAwKSB7XG4gICAgY29uc29sZS5sb2coYCR7c3RlcCsrfS4gUmV2aWV3IHRoZSBBenVyZSBhdXRob3JpemF0aW9uIFB1bGwgUmVxdWVzdChzKTpgKTtcbiAgICBmb3IgKGNvbnN0IGF1dGhQciBvZiBwcnNXaXRoVXJsKSB7XG4gICAgICBjb25zb2xlLmxvZyhgICAgLSAke2NoYWxrLnVuZGVybGluZShhdXRoUHIudXJsKX1gKTtcbiAgICB9XG4gIH1cbiAgY29uc29sZS5sb2coXG4gICAgYCR7c3RlcH0uIFZpc2l0ICR7Y2hhbGsudW5kZXJsaW5lKFwiaHR0cHM6Ly9keC5wYWdvcGEuaXQvZ2V0dGluZy1zdGFydGVkXCIpfSB0byBkZXBsb3kgeW91ciBmaXJzdCBwcm9qZWN0XFxuYCxcbiAgKTtcbn07XG5cbi8qKlxuICogUm91dGVzIHRoZSBzdWNjZXNzZnVsIG91dGNvbWUgdGhyb3VnaCB0aGUgcHJlc2VudGVyOiBKU09OIG1vZGUgZW1pdHMgdGhlXG4gKiBzdHJ1Y3R1cmVkIGVudmVsb3BlIHdoaWxlIHRleHQgbW9kZSByZW5kZXJzIHRoZSBodW1hbi1yZWFkYWJsZSBzdW1tYXJ5LlxuICovXG5jb25zdCByZXBvcnRTdW1tYXJ5ID1cbiAgKHByZXNlbnRlcjogQ29tbWFuZFByZXNlbnRlciwgb3V0cHV0TW9kZTogXCJqc29uXCIgfCBcInRleHRcIikgPT5cbiAgKHJlc3VsdDogQWRkUmVzdWx0KTogdm9pZCA9PiB7XG4gICAgaWYgKG91dHB1dE1vZGUgPT09IFwianNvblwiKSB7XG4gICAgICBwcmVzZW50ZXIucmVwb3J0UmVzdWx0KHJlc3VsdCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRpc3BsYXlTdW1tYXJ5KHJlc3VsdCk7XG4gICAgfVxuICB9O1xuXG5jb25zdCB0cmFja1N0ZXAgPSA8VCwgRT4oXG4gIHByZXNlbnRlcjogQ29tbWFuZFByZXNlbnRlcixcbiAgbmFtZTogc3RyaW5nLFxuICB0YXNrOiAoKSA9PiBQcm9taXNlPFQ+LFxuICBtYXBFcnJvcjogKGNhdXNlOiB1bmtub3duKSA9PiBFLFxuKTogUmVzdWx0QXN5bmM8VCwgRT4gPT5cbiAgUmVzdWx0QXN5bmMuZnJvbVByb21pc2UocHJlc2VudGVyLnRyYWNrU3RlcChuYW1lLCB0YXNrKSwgbWFwRXJyb3IpO1xuXG5jb25zdCBhZGRFbnZpcm9ubWVudEFjdGlvbiA9IChcbiAgYXV0aG9yaXphdGlvblNlcnZpY2U6IEF1dGhvcml6YXRpb25TZXJ2aWNlLFxuICBnaXRIdWJTZXJ2aWNlOiBHaXRIdWJTZXJ2aWNlLFxuICBwcmVzZW50ZXI6IENvbW1hbmRQcmVzZW50ZXIsXG4gIGluaXRpYWxBbnN3ZXJzOiBEZXBsb3ltZW50RW52aXJvbm1lbnRJbml0aWFsQW5zd2VycyA9IHt9LFxuKTogUmVzdWx0QXN5bmM8QWRkUmVzdWx0LCBFcnJvcj4gPT5cbiAgcnVuQWRkRW52aXJvbm1lbnRQcmVjb25kaXRpb25zKHByZXNlbnRlcilcbiAgICAuYW5kVGhlbigoKSA9PlxuICAgICAgdHJhY2tTdGVwKFxuICAgICAgICBwcmVzZW50ZXIsXG4gICAgICAgIFwiSW5pdGlhbGl6aW5nIGVudmlyb25tZW50IGdlbmVyYXRvci4uLlwiLFxuICAgICAgICBnZXRQbG9wSW5zdGFuY2UsXG4gICAgICAgIGFzRXJyb3IoXCJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBwbG9wXCIpLFxuICAgICAgKSxcbiAgICApXG4gICAgLmFuZFRoZW4oKHBsb3ApID0+XG4gICAgICAvLyBUaGUgcHJvbXB0IHBoYXNlIG11c3QgcnVuIG91dHNpZGUgdHJhY2tTdGVwOiBpbiB0ZXh0IG1vZGUgdHJhY2tTdGVwXG4gICAgICAvLyByZW5kZXJzIGEgc3Bpbm5lciB0aGF0IG9jY3VwaWVzIHRoZSBUVFkgYW5kIGhpZGVzIHRoZSBwcm9tcHRzLlxuICAgICAgUmVzdWx0QXN5bmMuZnJvbVByb21pc2UoXG4gICAgICAgIGNvbGxlY3REZXBsb3ltZW50RW52aXJvbm1lbnRQYXlsb2FkKFxuICAgICAgICAgIHBsb3AsXG4gICAgICAgICAgZ2l0SHViU2VydmljZSxcbiAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgaW5pdGlhbEFuc3dlcnMsXG4gICAgICAgICksXG4gICAgICAgIGFzRXJyb3IoXCJGYWlsZWQgdG8gcnVuIHRoZSBkZXBsb3ltZW50IGVudmlyb25tZW50IGdlbmVyYXRvclwiKSxcbiAgICAgICksXG4gICAgKVxuICAgIC5hbmRUaGVuKCh7IGdlbmVyYXRvciwgcGF5bG9hZCB9KSA9PlxuICAgICAgdHJhY2tTdGVwKFxuICAgICAgICBwcmVzZW50ZXIsXG4gICAgICAgIFwiQ3JlYXRpbmcgZW52aXJvbm1lbnQuLi5cIixcbiAgICAgICAgKCkgPT4gcnVuRGVwbG95bWVudEVudmlyb25tZW50QWN0aW9ucyhnZW5lcmF0b3IsIHBheWxvYWQpLFxuICAgICAgICBhc0Vycm9yKFwiRmFpbGVkIHRvIGNyZWF0ZSB0aGUgZGVwbG95bWVudCBlbnZpcm9ubWVudFwiKSxcbiAgICAgICksXG4gICAgKVxuICAgIC5hbmRUaGVuKChwYXlsb2FkKSA9PlxuICAgICAgYXV0aG9yaXplQ2xvdWRBY2NvdW50cyhhdXRob3JpemF0aW9uU2VydmljZSkocGF5bG9hZCkubWFwKFxuICAgICAgICAoYXV0aG9yaXphdGlvblBycykgPT4gKHtcbiAgICAgICAgICBhdXRob3JpemF0aW9uUHJzLFxuICAgICAgICAgIHBheWxvYWQsXG4gICAgICAgIH0pLFxuICAgICAgKSxcbiAgICApO1xuXG5leHBvcnQgY29uc3QgbWFrZUFkZENvbW1hbmQgPSAoXG4gIHJlcXVpcmVHaXRIdWJBdXRoOiBHaXRIdWJBdXRoRmFjdG9yeSxcbiAgZW52OiBDbGlFbnYsXG4pOiBDb21tYW5kID0+XG4gIG5ldyBDb21tYW5kKClcbiAgICAubmFtZShcImFkZFwiKVxuICAgIC5kZXNjcmlwdGlvbihcIkFkZCBhIG5ldyBjb21wb25lbnQgdG8geW91ciB3b3Jrc3BhY2VcIilcbiAgICAuYWRkQ29tbWFuZChcbiAgICAgIG5ldyBDb21tYW5kKFwiZW52aXJvbm1lbnRcIilcbiAgICAgICAgLmRlc2NyaXB0aW9uKFwiQWRkIGEgbmV3IGRlcGxveW1lbnQgZW52aXJvbm1lbnRcIilcbiAgICAgICAgLmFkZE9wdGlvbihcbiAgICAgICAgICBuZXcgT3B0aW9uKFwiLS1uYW1lIDxuYW1lPlwiLCBcIkVudmlyb25tZW50IG5hbWVcIikuY2hvaWNlcyhbXG4gICAgICAgICAgICBcImRldlwiLFxuICAgICAgICAgICAgXCJ1YXRcIixcbiAgICAgICAgICAgIFwicHJvZFwiLFxuICAgICAgICAgIF0pLFxuICAgICAgICApXG4gICAgICAgIC5hZGRPcHRpb24oXG4gICAgICAgICAgbmV3IE9wdGlvbihcbiAgICAgICAgICAgIFwiLS1hY2NvdW50IDxzdWJzY3JpcHRpb24taWQ+XCIsXG4gICAgICAgICAgICBcIkNsb3VkIGFjY291bnQgc3Vic2NyaXB0aW9uIGlkXCIsXG4gICAgICAgICAgKS5hcmdQYXJzZXIoYXBwZW5kT3B0aW9uVmFsdWUpLFxuICAgICAgICApXG4gICAgICAgIC5hZGRPcHRpb24oXG4gICAgICAgICAgbmV3IE9wdGlvbihcbiAgICAgICAgICAgIFwiLS1sb2NhdGlvbiA8c3Vic2NyaXB0aW9uLWlkPXJlZ2lvbj5cIixcbiAgICAgICAgICAgIFwiRGVmYXVsdCBBenVyZSBsb2NhdGlvbiBmb3IgYSBzZWxlY3RlZCBhY2NvdW50XCIsXG4gICAgICAgICAgKS5hcmdQYXJzZXIoYXBwZW5kT3B0aW9uVmFsdWUpLFxuICAgICAgICApXG4gICAgICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbihcIi0tcHJlZml4IDxwcmVmaXg+XCIsIFwiRW52aXJvbm1lbnQgcHJlZml4XCIpKVxuICAgICAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oXCItLWRvbWFpbiA8ZG9tYWluPlwiLCBcIldvcmtzcGFjZSBkb21haW5cIikpXG4gICAgICAgIC5hZGRPcHRpb24oXG4gICAgICAgICAgbmV3IE9wdGlvbihcIi0tYnVzaW5lc3MtdW5pdCA8YnVzaW5lc3MtdW5pdD5cIiwgXCJCdXNpbmVzcyB1bml0IHRhZ1wiKSxcbiAgICAgICAgKVxuICAgICAgICAuYWRkT3B0aW9uKFxuICAgICAgICAgIG5ldyBPcHRpb24oXG4gICAgICAgICAgICBcIi0tbWFuYWdlbWVudC10ZWFtIDxtYW5hZ2VtZW50LXRlYW0+XCIsXG4gICAgICAgICAgICBcIk1hbmFnZW1lbnQgdGVhbSB0YWdcIixcbiAgICAgICAgICApLFxuICAgICAgICApXG4gICAgICAgIC5hZGRPcHRpb24oXG4gICAgICAgICAgbmV3IE9wdGlvbihcbiAgICAgICAgICAgIFwiLXksIC0teWVzXCIsXG4gICAgICAgICAgICBcIkNvbmZpcm0gZW52aXJvbm1lbnQgaW5pdGlhbGl6YXRpb24gd2l0aG91dCBwcm9tcHRpbmdcIixcbiAgICAgICAgICApLFxuICAgICAgICApXG4gICAgICAgIC5hZGRPcHRpb24oXG4gICAgICAgICAgbmV3IE9wdGlvbihcIi0tcnVubmVyLWFwcC1pZCA8cnVubmVyLWFwcC1pZD5cIiwgXCJHaXRIdWIgUnVubmVyIEFwcCBJRFwiKSxcbiAgICAgICAgKVxuICAgICAgICAuYWRkT3B0aW9uKFxuICAgICAgICAgIG5ldyBPcHRpb24oXCItLWNsaWVudC1pZCA8Y2xpZW50LWlkPlwiLCBcIkdpdEh1YiBSdW5uZXIgQXBwIENsaWVudCBJRFwiKSxcbiAgICAgICAgKVxuICAgICAgICAuYWRkT3B0aW9uKFxuICAgICAgICAgIG5ldyBPcHRpb24oXG4gICAgICAgICAgICBcIi0taW5zdGFsbGF0aW9uLWlkIDxpbnN0YWxsYXRpb24taWQ+XCIsXG4gICAgICAgICAgICBcIkdpdEh1YiBSdW5uZXIgQXBwIEluc3RhbGxhdGlvbiBJRFwiLFxuICAgICAgICAgICksXG4gICAgICAgIClcbiAgICAgICAgLmFkZE9wdGlvbihcbiAgICAgICAgICBuZXcgT3B0aW9uKFxuICAgICAgICAgICAgXCItLXByaXZhdGUta2V5LXBhdGggPHByaXZhdGUta2V5LXBhdGg+XCIsXG4gICAgICAgICAgICBcIlBhdGggdG8gYSBsb2NhbCBHaXRIdWIgUnVubmVyIEFwcCBwcml2YXRlIGtleSBmaWxlXCIsXG4gICAgICAgICAgKSxcbiAgICAgICAgKVxuICAgICAgICAuYWN0aW9uKGFzeW5jIGZ1bmN0aW9uIChvcHRpb25zOiB1bmtub3duKSB7XG4gICAgICAgICAgY29uc3QgeyBvdXRwdXQgfSA9IHRoaXMub3B0c1dpdGhHbG9iYWxzPEdsb2JhbE9wdGlvbnM+KCk7XG4gICAgICAgICAgY29uc3Qgb3V0cHV0TW9kZSA9IHJlc29sdmVPdXRwdXRNb2RlKGVudiwgb3V0cHV0KTtcbiAgICAgICAgICBjb25zdCBwcmVzZW50ZXIgPSBjcmVhdGVDb21tYW5kUHJlc2VudGVyKG91dHB1dE1vZGUpO1xuXG4gICAgICAgICAgYXdhaXQgUmVzdWx0QXN5bmMuZnJvbVByb21pc2UoXG4gICAgICAgICAgICBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpID0+XG4gICAgICAgICAgICAgIHBhcnNlQWRkRW52aXJvbm1lbnRDb21tYW5kT3B0aW9ucyhvcHRpb25zKSxcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICAoY2F1c2UpID0+XG4gICAgICAgICAgICAgIGNhdXNlIGluc3RhbmNlb2YgRXJyb3JcbiAgICAgICAgICAgICAgICA/IGNhdXNlXG4gICAgICAgICAgICAgICAgOiBuZXcgRXJyb3IoXCJGYWlsZWQgdG8gcGFyc2UgYWRkIGVudmlyb25tZW50IGNvbW1hbmQgb3B0aW9uc1wiLCB7XG4gICAgICAgICAgICAgICAgICAgIGNhdXNlLFxuICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgKVxuICAgICAgICAgICAgLmFuZFRoZW4oKGFkZEVudmlyb25tZW50T3B0aW9ucykgPT5cbiAgICAgICAgICAgICAgUmVzdWx0QXN5bmMuZnJvbVByb21pc2UoXG4gICAgICAgICAgICAgICAgZ2V0RW52aXJvbm1lbnRJbml0aWFsQW5zd2VycyhhZGRFbnZpcm9ubWVudE9wdGlvbnMpLFxuICAgICAgICAgICAgICAgIChjYXVzZSkgPT5cbiAgICAgICAgICAgICAgICAgIGNhdXNlIGluc3RhbmNlb2YgRXJyb3JcbiAgICAgICAgICAgICAgICAgICAgPyBjYXVzZVxuICAgICAgICAgICAgICAgICAgICA6IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiRmFpbGVkIHRvIGxvYWQgYWRkIGVudmlyb25tZW50IGluaXRpYWwgYW5zd2Vyc1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBjYXVzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgKS5hbmRUaGVuKChpbml0aWFsQW5zd2VycykgPT5cbiAgICAgICAgICAgICAgICByZXF1aXJlR2l0SHViQXV0aCgpLmFuZFRoZW4oXG4gICAgICAgICAgICAgICAgICAoeyBhdXRob3JpemF0aW9uU2VydmljZSwgZ2l0SHViU2VydmljZSB9KSA9PlxuICAgICAgICAgICAgICAgICAgICBhZGRFbnZpcm9ubWVudEFjdGlvbihcbiAgICAgICAgICAgICAgICAgICAgICBhdXRob3JpemF0aW9uU2VydmljZSxcbiAgICAgICAgICAgICAgICAgICAgICBnaXRIdWJTZXJ2aWNlLFxuICAgICAgICAgICAgICAgICAgICAgIHByZXNlbnRlcixcbiAgICAgICAgICAgICAgICAgICAgICBpbml0aWFsQW5zd2VycyxcbiAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLm1hdGNoKFxuICAgICAgICAgICAgICByZXBvcnRTdW1tYXJ5KHByZXNlbnRlciwgb3V0cHV0TW9kZSksXG4gICAgICAgICAgICAgIHJlcG9ydENvbW1hbmRFcnJvcih0aGlzLCBwcmVzZW50ZXIsIG91dHB1dE1vZGUpLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSksXG4gICAgKTtcbiJdfQ==
|
|
@@ -9,6 +9,7 @@
|
|
|
9
9
|
*/
|
|
10
10
|
import chalk from "chalk";
|
|
11
11
|
import { Command } from "commander";
|
|
12
|
+
import process from "node:process";
|
|
12
13
|
import { runDoctor } from "../../../domain/doctor.js";
|
|
13
14
|
import { createCommandPresenter, resolveOutputMode, } from "../presenters/index.js";
|
|
14
15
|
const formatCheck = (check) => check.isValid
|
|
@@ -28,6 +29,8 @@ export const makeDoctorCommand = (dependencies, config, env) => new Command()
|
|
|
28
29
|
const presenter = createCommandPresenter(outputMode);
|
|
29
30
|
const result = await runDoctor(dependencies, config);
|
|
30
31
|
reportDoctorResult(presenter, outputMode)(result);
|
|
32
|
+
// Use process.exitCode instead of process.exit() so that the finally
|
|
33
|
+
// block in runCli() can flush telemetry before the process terminates.
|
|
31
34
|
process.exitCode = result.hasErrors ? 1 : 0;
|
|
32
35
|
});
|
|
33
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
36
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9jdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2FkYXB0ZXJzL2NvbW1hbmRlci9jb21tYW5kcy9kb2N0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7O0dBUUc7QUFDSCxPQUFPLEtBQUssTUFBTSxPQUFPLENBQUM7QUFDMUIsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNwQyxPQUFPLE9BQU8sTUFBTSxjQUFjLENBQUM7QUFVbkMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3RELE9BQU8sRUFDTCxzQkFBc0IsRUFDdEIsaUJBQWlCLEdBQ2xCLE1BQU0sd0JBQXdCLENBQUM7QUFFaEMsTUFBTSxXQUFXLEdBQUcsQ0FBQyxLQUFzQixFQUFVLEVBQUUsQ0FDckQsS0FBSyxDQUFDLE9BQU87SUFDWCxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztJQUMxQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEtBQUssQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDO0FBRTNDLE1BQU0sa0JBQWtCLEdBQ3RCLENBQUMsU0FBMkIsRUFBRSxVQUEyQixFQUFFLEVBQUUsQ0FDN0QsQ0FBQyxNQUFvQixFQUFRLEVBQUU7SUFDN0IsU0FBUyxDQUFDLFlBQVksQ0FDcEIsVUFBVSxLQUFLLE1BQU07UUFDbkIsQ0FBQyxDQUFDLE1BQU07UUFDUixDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUM5QyxDQUFDO0FBQ0osQ0FBQyxDQUFDO0FBRUosTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsQ0FDL0IsWUFBMEIsRUFDMUIsTUFBYyxFQUNkLEdBQVcsRUFDRixFQUFFLENBQ1gsSUFBSSxPQUFPLEVBQUU7S0FDVixJQUFJLENBQUMsUUFBUSxDQUFDO0tBQ2QsV0FBVyxDQUNWLCtEQUErRCxDQUNoRTtLQUNBLE1BQU0sQ0FBQyxLQUFLO0lBQ1gsTUFBTSxFQUFFLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxlQUFlLEVBQWlCLENBQUM7SUFDekQsTUFBTSxVQUFVLEdBQUcsaUJBQWlCLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ2xELE1BQU0sU0FBUyxHQUFHLHNCQUFzQixDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBRXJELE1BQU0sTUFBTSxHQUFHLE1BQU0sU0FBUyxDQUFDLFlBQVksRUFBRSxNQUFNLENBQUMsQ0FBQztJQUVyRCxrQkFBa0IsQ0FBQyxTQUFTLEVBQUUsVUFBVSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUM7SUFFbEQscUVBQXFFO0lBQ3JFLHVFQUF1RTtJQUN2RSxPQUFPLENBQUMsUUFBUSxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzlDLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBgZG9jdG9yYCBDb21tYW5kZXIgY29tbWFuZC5cbiAqXG4gKiBWZXJpZmllcyB0aGUgcmVwb3NpdG9yeSBzZXR1cCBhbmQgcm91dGVzIHRoZSBvdXRjb21lIHRocm91Z2ggdGhlIHNoYXJlZFxuICogQ29tbWFuZFByZXNlbnRlciBwb3J0LiBKU09OIG1vZGUgZW1pdHMgdGhlIHN0cnVjdHVyZWQgcmVzdWx0OyB0ZXh0IG1vZGUgZW1pdHNcbiAqIGEgaHVtYW4tcmVhZGFibGUgcGVyLWNoZWNrIHN1bW1hcnkuIFRoZSBleGl0IGNvZGUgcmVmbGVjdHMgd2hldGhlciBhbnkgY2hlY2tcbiAqIGZhaWxlZCwgbWlycm9yaW5nIHRoZSBsaW50ZXIgY29udmVudGlvbiAoYSBzdWNjZXNzZnVsIHJ1biBjYW4gc3RpbGwgcmVwb3J0XG4gKiBwcm9ibGVtcykuXG4gKi9cbmltcG9ydCBjaGFsayBmcm9tIFwiY2hhbGtcIjtcbmltcG9ydCB7IENvbW1hbmQgfSBmcm9tIFwiY29tbWFuZGVyXCI7XG5pbXBvcnQgcHJvY2VzcyBmcm9tIFwibm9kZTpwcm9jZXNzXCI7XG5cbmltcG9ydCB0eXBlIHsgQ29tbWFuZFByZXNlbnRlciB9IGZyb20gXCIuLi8uLi8uLi9kb21haW4vY29tbWFuZC1wcmVzZW50ZXIuanNcIjtcbmltcG9ydCB0eXBlIHsgRGVwZW5kZW5jaWVzIH0gZnJvbSBcIi4uLy4uLy4uL2RvbWFpbi9kZXBlbmRlbmNpZXMuanNcIjtcbmltcG9ydCB0eXBlIHsgRG9jdG9yUmVzdWx0IH0gZnJvbSBcIi4uLy4uLy4uL2RvbWFpbi9kb2N0b3IuanNcIjtcbmltcG9ydCB0eXBlIHsgVmFsaWRhdGlvbkNoZWNrIH0gZnJvbSBcIi4uLy4uLy4uL2RvbWFpbi92YWxpZGF0aW9uLmpzXCI7XG5pbXBvcnQgdHlwZSB7IENsaUVudiB9IGZyb20gXCIuLi9lbnYuanNcIjtcbmltcG9ydCB0eXBlIHsgR2xvYmFsT3B0aW9ucyB9IGZyb20gXCIuLi9nbG9iYWwtb3B0aW9ucy5qc1wiO1xuXG5pbXBvcnQgeyBDb25maWcgfSBmcm9tIFwiLi4vLi4vLi4vY29uZmlnLmpzXCI7XG5pbXBvcnQgeyBydW5Eb2N0b3IgfSBmcm9tIFwiLi4vLi4vLi4vZG9tYWluL2RvY3Rvci5qc1wiO1xuaW1wb3J0IHtcbiAgY3JlYXRlQ29tbWFuZFByZXNlbnRlcixcbiAgcmVzb2x2ZU91dHB1dE1vZGUsXG59IGZyb20gXCIuLi9wcmVzZW50ZXJzL2luZGV4LmpzXCI7XG5cbmNvbnN0IGZvcm1hdENoZWNrID0gKGNoZWNrOiBWYWxpZGF0aW9uQ2hlY2spOiBzdHJpbmcgPT5cbiAgY2hlY2suaXNWYWxpZFxuICAgID8gY2hhbGsuZ3JlZW4oYOKchSAke2NoZWNrLnN1Y2Nlc3NNZXNzYWdlfWApXG4gICAgOiBjaGFsay5yZWQoYOKdjCAke2NoZWNrLmVycm9yTWVzc2FnZX1gKTtcblxuY29uc3QgcmVwb3J0RG9jdG9yUmVzdWx0ID1cbiAgKHByZXNlbnRlcjogQ29tbWFuZFByZXNlbnRlciwgb3V0cHV0TW9kZTogXCJqc29uXCIgfCBcInRleHRcIikgPT5cbiAgKHJlc3VsdDogRG9jdG9yUmVzdWx0KTogdm9pZCA9PiB7XG4gICAgcHJlc2VudGVyLnJlcG9ydFJlc3VsdChcbiAgICAgIG91dHB1dE1vZGUgPT09IFwianNvblwiXG4gICAgICAgID8gcmVzdWx0XG4gICAgICAgIDogcmVzdWx0LmNoZWNrcy5tYXAoZm9ybWF0Q2hlY2spLmpvaW4oXCJcXG5cIiksXG4gICAgKTtcbiAgfTtcblxuZXhwb3J0IGNvbnN0IG1ha2VEb2N0b3JDb21tYW5kID0gKFxuICBkZXBlbmRlbmNpZXM6IERlcGVuZGVuY2llcyxcbiAgY29uZmlnOiBDb25maWcsXG4gIGVudjogQ2xpRW52LFxuKTogQ29tbWFuZCA9PlxuICBuZXcgQ29tbWFuZCgpXG4gICAgLm5hbWUoXCJkb2N0b3JcIilcbiAgICAuZGVzY3JpcHRpb24oXG4gICAgICBcIlZlcmlmeSB0aGUgcmVwb3NpdG9yeSBzZXR1cCBhY2NvcmRpbmcgdG8gdGhlIERldkV4IGd1aWRlbGluZXNcIixcbiAgICApXG4gICAgLmFjdGlvbihhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB7IG91dHB1dCB9ID0gdGhpcy5vcHRzV2l0aEdsb2JhbHM8R2xvYmFsT3B0aW9ucz4oKTtcbiAgICAgIGNvbnN0IG91dHB1dE1vZGUgPSByZXNvbHZlT3V0cHV0TW9kZShlbnYsIG91dHB1dCk7XG4gICAgICBjb25zdCBwcmVzZW50ZXIgPSBjcmVhdGVDb21tYW5kUHJlc2VudGVyKG91dHB1dE1vZGUpO1xuXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBydW5Eb2N0b3IoZGVwZW5kZW5jaWVzLCBjb25maWcpO1xuXG4gICAgICByZXBvcnREb2N0b3JSZXN1bHQocHJlc2VudGVyLCBvdXRwdXRNb2RlKShyZXN1bHQpO1xuXG4gICAgICAvLyBVc2UgcHJvY2Vzcy5leGl0Q29kZSBpbnN0ZWFkIG9mIHByb2Nlc3MuZXhpdCgpIHNvIHRoYXQgdGhlIGZpbmFsbHlcbiAgICAgIC8vIGJsb2NrIGluIHJ1bkNsaSgpIGNhbiBmbHVzaCB0ZWxlbWV0cnkgYmVmb3JlIHRoZSBwcm9jZXNzIHRlcm1pbmF0ZXMuXG4gICAgICBwcm9jZXNzLmV4aXRDb2RlID0gcmVzdWx0Lmhhc0Vycm9ycyA/IDEgOiAwO1xuICAgIH0pO1xuIl19
|
|
@@ -24,6 +24,18 @@ export declare class OctokitGitHubService implements GitHubService {
|
|
|
24
24
|
updateFile(params: UpdateFileParams): Promise<void>;
|
|
25
25
|
}
|
|
26
26
|
export declare const getGitHubPAT: () => Promise<string | undefined>;
|
|
27
|
+
/**
|
|
28
|
+
* Returns true when the authenticated user is an active member of the PagoPA
|
|
29
|
+
* GitHub organization.
|
|
30
|
+
*
|
|
31
|
+
* Fails closed: any error (network failure, missing `read:org` scope, 403/404)
|
|
32
|
+
* resolves to `false` so telemetry stays disabled when membership cannot be
|
|
33
|
+
* confirmed.
|
|
34
|
+
*
|
|
35
|
+
* @param octokit injectable client, primarily for testing; defaults to a client
|
|
36
|
+
* authenticated with the supplied token.
|
|
37
|
+
*/
|
|
38
|
+
export declare const isPagopaOrgMember: (token: string, octokit?: Octokit) => Promise<boolean>;
|
|
27
39
|
export declare const fetchLatestTag: ({ client, owner, repo }: GitHubReleaseParam) => ResultAsync<import("semver").SemVer | null, Error>;
|
|
28
40
|
export declare const fetchLatestRelease: ({ client, owner, repo, }: GitHubReleaseParam) => ResultAsync<import("semver").SemVer | null, Error>;
|
|
29
41
|
export {};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { $ } from "execa";
|
|
2
2
|
import sodium from "libsodium-wrappers";
|
|
3
3
|
import { ResultAsync } from "neverthrow";
|
|
4
|
-
import { RequestError } from "octokit";
|
|
4
|
+
import { Octokit, RequestError } from "octokit";
|
|
5
5
|
import semverParse from "semver/functions/parse.js";
|
|
6
6
|
import semverSort from "semver/functions/sort.js";
|
|
7
7
|
import { FileNotFoundError, PullRequest, Repository, RepositoryNotFoundError, } from "../../domain/github.js";
|
|
@@ -157,6 +157,30 @@ export const getGitHubPAT = async () => {
|
|
|
157
157
|
}
|
|
158
158
|
return undefined;
|
|
159
159
|
};
|
|
160
|
+
/** GitHub organization whose members are allowed to emit CLI telemetry. */
|
|
161
|
+
const PAGOPA_ORG = "pagopa";
|
|
162
|
+
/**
|
|
163
|
+
* Returns true when the authenticated user is an active member of the PagoPA
|
|
164
|
+
* GitHub organization.
|
|
165
|
+
*
|
|
166
|
+
* Fails closed: any error (network failure, missing `read:org` scope, 403/404)
|
|
167
|
+
* resolves to `false` so telemetry stays disabled when membership cannot be
|
|
168
|
+
* confirmed.
|
|
169
|
+
*
|
|
170
|
+
* @param octokit injectable client, primarily for testing; defaults to a client
|
|
171
|
+
* authenticated with the supplied token.
|
|
172
|
+
*/
|
|
173
|
+
export const isPagopaOrgMember = async (token, octokit = new Octokit({ auth: token })) => {
|
|
174
|
+
try {
|
|
175
|
+
const { data } = await octokit.rest.orgs.getMembershipForAuthenticatedUser({
|
|
176
|
+
org: PAGOPA_ORG,
|
|
177
|
+
});
|
|
178
|
+
return data.state === "active";
|
|
179
|
+
}
|
|
180
|
+
catch {
|
|
181
|
+
return false;
|
|
182
|
+
}
|
|
183
|
+
};
|
|
160
184
|
export const fetchLatestTag = ({ client, owner, repo }) => ResultAsync.fromPromise(
|
|
161
185
|
// Get repository tags
|
|
162
186
|
client.request("GET /repos/{owner}/{repo}/tags", {
|
|
@@ -176,4 +200,4 @@ client.request("GET /repos/{owner}/{repo}/releases/latest", {
|
|
|
176
200
|
owner,
|
|
177
201
|
repo,
|
|
178
202
|
}), () => new Error(`Failed to fetch latest release for ${owner}/${repo}`)).map(({ data }) => semverParse(data.tag_name));
|
|
179
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYWRhcHRlcnMvb2N0b2tpdC9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBQzFCLE9BQU8sTUFBTSxNQUFNLG9CQUFvQixDQUFDO0FBQ3hDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDekMsT0FBTyxFQUFXLFlBQVksRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUNoRCxPQUFPLFdBQVcsTUFBTSwyQkFBMkIsQ0FBQztBQUNwRCxPQUFPLFVBQVUsTUFBTSwwQkFBMEIsQ0FBQztBQUVsRCxPQUFPLEVBSUwsaUJBQWlCLEVBR2pCLFdBQVcsRUFDWCxVQUFVLEVBQ1YsdUJBQXVCLEdBRXhCLE1BQU0sd0JBQXdCLENBQUM7QUFRaEMsTUFBTSxPQUFPLG9CQUFvQjtJQUMvQixRQUFRLENBQUM7SUFFVCxZQUFZLE9BQWdCO1FBQzFCLElBQUksQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDO0lBQzFCLENBQUM7SUFFRCxLQUFLLENBQUMsWUFBWSxDQUFDLE1BQTBCO1FBQzNDLElBQUksQ0FBQztZQUNILG1DQUFtQztZQUNuQyxNQUFNLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxHQUFHLE1BQU0sSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQztnQkFDNUQsS0FBSyxFQUFFLE1BQU0sQ0FBQyxLQUFLO2dCQUNuQixHQUFHLEVBQUUsU0FBUyxNQUFNLENBQUMsT0FBTyxFQUFFO2dCQUM5QixJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUk7YUFDbEIsQ0FBQyxDQUFDO1lBRUgsd0JBQXdCO1lBQ3hCLE1BQU0sSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQztnQkFDckMsS0FBSyxFQUFFLE1BQU0sQ0FB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QUMxQyxNQUFNLENBQUMsT0FBTyxDQUFDLDJDQUEyQyxFQUFFO0lBQzFELEtBQUs7SUFDTCxJQUFJO0NBQ0wsQ0FBQyxFQUNGLEdBQUcsRUFBRSxDQUFDLElBQUksS0FBSyxDQUFDLHNDQUFzQyxLQUFLLElBQUksSUFBSSxFQUFFLENBQUMsQ0FDdkUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyAkIH0gZnJvbSBcImV4ZWNhXCI7XG5pbXBvcnQgc29kaXVtIGZyb20gXCJsaWJzb2RpdW0td3JhcHBlcnNcIjtcbmltcG9ydCB7IFJlc3VsdEFzeW5jIH0gZnJvbSBcIm5ldmVydGhyb3dcIjtcbmltcG9ydCB7IE9jdG9raXQsIFJlcXVlc3RFcnJvciB9IGZyb20gXCJvY3Rva2l0XCI7XG5pbXBvcnQgc2VtdmVyUGFyc2UgZnJvbSBcInNlbXZlci9mdW5jdGlvbnMvcGFyc2UuanNcIjtcbmltcG9ydCBzZW12ZXJTb3J0IGZyb20gXCJzZW12ZXIvZnVuY3Rpb25zL3NvcnQuanNcIjtcblxuaW1wb3J0IHtcbiAgQ3JlYXRlQnJhbmNoUGFyYW1zLFxuICBDcmVhdGVPclVwZGF0ZUVudmlyb25tZW50U2VjcmV0UGFyYW1zLFxuICBGaWxlQ29udGVudCxcbiAgRmlsZU5vdEZvdW5kRXJyb3IsXG4gIEdldEZpbGVDb250ZW50UGFyYW1zLFxuICBHaXRIdWJTZXJ2aWNlLFxuICBQdWxsUmVxdWVzdCxcbiAgUmVwb3NpdG9yeSxcbiAgUmVwb3NpdG9yeU5vdEZvdW5kRXJyb3IsXG4gIFVwZGF0ZUZpbGVQYXJhbXMsXG59IGZyb20gXCIuLi8uLi9kb21haW4vZ2l0aHViLmpzXCI7XG5cbnR5cGUgR2l0SHViUmVsZWFzZVBhcmFtID0ge1xuICBjbGllbnQ6IE9jdG9raXQ7XG4gIG93bmVyOiBzdHJpbmc7XG4gIHJlcG86IHN0cmluZztcbn07XG5cbmV4cG9ydCBjbGFzcyBPY3Rva2l0R2l0SHViU2VydmljZSBpbXBsZW1lbnRzIEdpdEh1YlNlcnZpY2Uge1xuICAjb2N0b2tpdDtcblxuICBjb25zdHJ1Y3RvcihvY3Rva2l0OiBPY3Rva2l0KSB7XG4gICAgdGhpcy4jb2N0b2tpdCA9IG9jdG9raXQ7XG4gIH1cblxuICBhc3luYyBjcmVhdGVCcmFuY2gocGFyYW1zOiBDcmVhdGVCcmFuY2hQYXJhbXMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgLy8gR2V0IHRoZSBTSEEgb2YgdGhlIHNvdXJjZSBicmFuY2hcbiAgICAgIGNvbnN0IHsgZGF0YTogcmVmRGF0YSB9ID0gYXdhaXQgdGhpcy4jb2N0b2tpdC5yZXN0LmdpdC5nZXRSZWYoe1xuICAgICAgICBvd25lcjogcGFyYW1zLm93bmVyLFxuICAgICAgICByZWY6IGBoZWFkcy8ke3BhcmFtcy5mcm9tUmVmfWAsXG4gICAgICAgIHJlcG86IHBhcmFtcy5yZXBvLFxuICAgICAgfSk7XG5cbiAgICAgIC8vIENyZWF0ZSB0aGUgbmV3IGJyYW5jaFxuICAgICAgYXdhaXQgdGhpcy4jb2N0b2tpdC5yZXN0LmdpdC5jcmVhdGVSZWYoe1xuICAgICAgICBvd25lcjogcGFyYW1zLm93bmVyLFxuICAgICAgICByZWY6IGByZWZzL2hlYWRzLyR7cGFyYW1zLmJyYW5jaE5hbWV9YCxcbiAgICAgICAgcmVwbzogcGFyYW1zLnJlcG8sXG4gICAgICAgIHNoYTogcmVmRGF0YS5vYmplY3Quc2hhLFxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIGNyZWF0ZSBicmFuY2g6ICR7cGFyYW1zLmJyYW5jaE5hbWV9YCwge1xuICAgICAgICBjYXVzZTogZXJyb3IsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBjcmVhdGVPclVwZGF0ZUVudmlyb25tZW50U2VjcmV0KFxuICAgIHBhcmFtczogQ3JlYXRlT3JVcGRhdGVFbnZpcm9ubWVudFNlY3JldFBhcmFtcyxcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIEdpdEh1YiByZXF1aXJlcyBlbnZpcm9ubWVudCBzZWNyZXRzIHRvIGJlIGVuY3J5cHRlZCBjbGllbnQtc2lkZSB3aXRoIGxpYnNvZGl1bS5cbiAgICAgIGF3YWl0IHNvZGl1bS5yZWFkeTtcblxuICAgICAgLy8gRW5zdXJlIHRoZSB0YXJnZXQgZW52aXJvbm1lbnQgZXhpc3RzIGJlZm9yZSByZXNvbHZpbmcgaXRzIHB1YmxpYyBrZXkgYW5kIHN0b3Jpbmcgc2VjcmV0cy5cbiAgICAgIGF3YWl0IHRoaXMuI29jdG9raXQucmVxdWVzdChcbiAgICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX1cIixcbiAgICAgICAge1xuICAgICAgICAgIGVudmlyb25tZW50X25hbWU6IHBhcmFtcy5lbnZpcm9ubWVudE5hbWUsXG4gICAgICAgICAgb3duZXI6IHBhcmFtcy5vd25lcixcbiAgICAgICAgICByZXBvOiBwYXJhbXMucmVwbyxcbiAgICAgICAgfSxcbiAgICAgICk7XG5cbiAgICAgIGNvbnN0IHsgZGF0YTogcHVibGljS2V5RGF0YSB9ID1cbiAgICAgICAgYXdhaXQgdGhpcy4jb2N0b2tpdC5yZXN0LmFjdGlvbnMuZ2V0RW52aXJvbm1lbnRQdWJsaWNLZXkoe1xuICAgICAgICAgIGVudmlyb25tZW50X25hbWU6IHBhcmFtcy5lbnZpcm9ubWVudE5hbWUsXG4gICAgICAgICAgb3duZXI6IHBhcmFtcy5vd25lcixcbiAgICAgICAgICByZXBvOiBwYXJhbXMucmVwbyxcbiAgICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHB1YmxpY0tleUJ5dGVzID0gc29kaXVtLmZyb21fYmFzZTY0KFxuICAgICAgICBwdWJsaWNLZXlEYXRhLmtleSxcbiAgICAgICAgc29kaXVtLmJhc2U2NF92YXJpYW50cy5PUklHSU5BTCxcbiAgICAgICk7XG4gICAgICBjb25zdCBzZWNyZXRCeXRlcyA9IHNvZGl1bS5mcm9tX3N0cmluZyhwYXJhbXMuc2VjcmV0VmFsdWUpO1xuICAgICAgY29uc3QgZW5jcnlwdGVkQnl0ZXMgPSBzb2RpdW0uY3J5cHRvX2JveF9zZWFsKFxuICAgICAgICBzZWNyZXRCeXRlcyxcbiAgICAgICAgcHVibGljS2V5Qnl0ZXMsXG4gICAgICApO1xuICAgICAgY29uc3QgZW5jcnlwdGVkVmFsdWUgPSBzb2RpdW0udG9fYmFzZTY0KFxuICAgICAgICBlbmNyeXB0ZWRCeXRlcyxcbiAgICAgICAgc29kaXVtLmJhc2U2NF92YXJpYW50cy5PUklHSU5BTCxcbiAgICAgICk7XG5cbiAgICAgIGF3YWl0IHRoaXMuI29jdG9raXQucmVzdC5hY3Rpb25zLmNyZWF0ZU9yVXBkYXRlRW52aXJvbm1lbnRTZWNyZXQoe1xuICAgICAgICBlbmNyeXB0ZWRfdmFsdWU6IGVuY3J5cHRlZFZhbHVlLFxuICAgICAgICBlbnZpcm9ubWVudF9uYW1lOiBwYXJhbXMuZW52aXJvbm1lbnROYW1lLFxuICAgICAgICBrZXlfaWQ6IHB1YmxpY0tleURhdGEua2V5X2lkLFxuICAgICAgICBvd25lcjogcGFyYW1zLm93bmVyLFxuICAgICAgICByZXBvOiBwYXJhbXMucmVwbyxcbiAgICAgICAgc2VjcmV0X25hbWU6IHBhcmFtcy5zZWNyZXROYW1lLFxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYEZhaWxlZCB0byBjcmVhdGUgb3IgdXBkYXRlIHNlY3JldCAke3BhcmFtcy5zZWNyZXROYW1lfSBpbiBlbnZpcm9ubWVudCAke3BhcmFtcy5lbnZpcm9ubWVudE5hbWV9YCxcbiAgICAgICAgeyBjYXVzZTogZXJyb3IgfSxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgY3JlYXRlUHVsbFJlcXVlc3QocGFyYW1zOiB7XG4gICAgYmFzZTogc3RyaW5nO1xuICAgIGJvZHk6IHN0cmluZztcbiAgICBoZWFkOiBzdHJpbmc7XG4gICAgb3duZXI6IHN0cmluZztcbiAgICByZXBvOiBzdHJpbmc7XG4gICAgdGl0bGU6IHN0cmluZztcbiAgfSk6IFByb21pc2U8UHVsbFJlcXVlc3Q+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgeyBkYXRhIH0gPSBhd2FpdCB0aGlzLiNvY3Rva2l0LnJlc3QucHVsbHMuY3JlYXRlKHtcbiAgICAgICAgYmFzZTogcGFyYW1zLmJhc2UsXG4gICAgICAgIGJvZHk6IHBhcmFtcy5ib2R5LFxuICAgICAgICBoZWFkOiBwYXJhbXMuaGVhZCxcbiAgICAgICAgb3duZXI6IHBhcmFtcy5vd25lcixcbiAgICAgICAgcmVwbzogcGFyYW1zLnJlcG8sXG4gICAgICAgIHRpdGxlOiBwYXJhbXMudGl0bGUsXG4gICAgICB9KTtcbiAgICAgIHJldHVybiBuZXcgUHVsbFJlcXVlc3QoZGF0YS5odG1sX3VybCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYEZhaWxlZCB0byBjcmVhdGUgcHVsbCByZXF1ZXN0IGluICR7cGFyYW1zLm93bmVyfS8ke3BhcmFtcy5yZXBvfWAsXG4gICAgICAgIHtcbiAgICAgICAgICBjYXVzZTogZXJyb3IsXG4gICAgICAgIH0sXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGdldEZpbGVDb250ZW50KHBhcmFtczogR2V0RmlsZUNvbnRlbnRQYXJhbXMpOiBQcm9taXNlPEZpbGVDb250ZW50PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHsgZGF0YSB9ID0gYXdhaXQgdGhpcy4jb2N0b2tpdC5yZXN0LnJlcG9zLmdldENvbnRlbnQoe1xuICAgICAgICBvd25lcjogcGFyYW1zLm93bmVyLFxuICAgICAgICBwYXRoOiBwYXJhbXMucGF0aCxcbiAgICAgICAgcmVmOiBwYXJhbXMucmVmLFxuICAgICAgICByZXBvOiBwYXJhbXMucmVwbyxcbiAgICAgIH0pO1xuXG4gICAgICAvLyBHaXRIdWIgQVBJIHJldHVybnMgYW4gYXJyYXkgZm9yIGRpcmVjdG9yaWVzLCBzaW5nbGUgb2JqZWN0IGZvciBmaWxlc1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZGF0YSkgfHwgZGF0YS50eXBlICE9PSBcImZpbGVcIikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFBhdGggJHtwYXJhbXMucGF0aH0gaXMgbm90IGEgZmlsZWApO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBjb250ZW50ID0gQnVmZmVyLmZyb20oZGF0YS5jb250ZW50LCBcImJhc2U2NFwiKS50b1N0cmluZyhcInV0Zi04XCIpO1xuICAgICAgcmV0dXJuIHsgY29udGVudCwgc2hhOiBkYXRhLnNoYSB9O1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBSZXF1ZXN0RXJyb3IgJiYgZXJyb3Iuc3RhdHVzID09PSA0MDQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEZpbGVOb3RGb3VuZEVycm9yKHBhcmFtcy5wYXRoKTtcbiAgICAgIH1cbiAgICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIGdldCBmaWxlIGNvbnRlbnQ6ICR7cGFyYW1zLnBhdGh9YCwge1xuICAgICAgICBjYXVzZTogZXJyb3IsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBnZXRSZXBvc2l0b3J5KG93bmVyOiBzdHJpbmcsIG5hbWU6IHN0cmluZyk6IFByb21pc2U8UmVwb3NpdG9yeT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB7IGRhdGEgfSA9IGF3YWl0IHRoaXMuI29jdG9raXQucmVzdC5yZXBvcy5nZXQoe1xuICAgICAgICBvd25lcixcbiAgICAgICAgcmVwbzogbmFtZSxcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIG5ldyBSZXBvc2l0b3J5KGRhdGEubmFtZSwgZGF0YS5vd25lci5sb2dpbik7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIFJlcXVlc3RFcnJvciAmJiBlcnJvci5zdGF0dXMgPT09IDQwNCkge1xuICAgICAgICB0aHJvdyBuZXcgUmVwb3NpdG9yeU5vdEZvdW5kRXJyb3Iob3duZXIsIG5hbWUpO1xuICAgICAgfVxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gZmV0Y2ggcmVwb3NpdG9yeSAke293bmVyfS8ke25hbWV9YCwge1xuICAgICAgICBjYXVzZTogZXJyb3IsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBhc3luYyB1cGRhdGVGaWxlKHBhcmFtczogVXBkYXRlRmlsZVBhcmFtcyk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLiNvY3Rva2l0LnJlc3QucmVwb3MuY3JlYXRlT3JVcGRhdGVGaWxlQ29udGVudHMoe1xuICAgICAgICBicmFuY2g6IHBhcmFtcy5icmFuY2gsXG4gICAgICAgIGNvbnRlbnQ6IEJ1ZmZlci5mcm9tKHBhcmFtcy5jb250ZW50KS50b1N0cmluZyhcImJhc2U2NFwiKSxcbiAgICAgICAgbWVzc2FnZTogcGFyYW1zLm1lc3NhZ2UsXG4gICAgICAgIG93bmVyOiBwYXJhbXMub3duZXIsXG4gICAgICAgIHBhdGg6IHBhcmFtcy5wYXRoLFxuICAgICAgICByZXBvOiBwYXJhbXMucmVwbyxcbiAgICAgICAgc2hhOiBwYXJhbXMuc2hhLFxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIHVwZGF0ZSBmaWxlOiAke3BhcmFtcy5wYXRofWAsIHtcbiAgICAgICAgY2F1c2U6IGVycm9yLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG59XG5cbi8vIEZvbGxvdyB0aGUgc2FtZSBvcmRlciBvZiBwcmVjZWRlbmNlIG9mIGdoIGNsaVxuLy8gaHR0cHM6Ly9jbGkuZ2l0aHViLmNvbS9tYW51YWwvZ2hfaGVscF9lbnZpcm9ubWVudFxuZXhwb3J0IGNvbnN0IGdldEdpdEh1YlBBVCA9IGFzeW5jICgpOiBQcm9taXNlPHN0cmluZyB8IHVuZGVmaW5lZD4gPT4ge1xuICBpZiAocHJvY2Vzcy5lbnYuR0hfVE9LRU4pIHtcbiAgICByZXR1cm4gcHJvY2Vzcy5lbnYuR0hfVE9LRU47XG4gIH1cbiAgaWYgKHByb2Nlc3MuZW52LkdJVEhVQl9UT0tFTikge1xuICAgIHJldHVybiBwcm9jZXNzLmVudi5HSVRIVUJfVE9LRU47XG4gIH1cbiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgJCh7IHJlamVjdDogZmFsc2UgfSlgZ2ggYXV0aCB0b2tlbmA7XG4gIGlmICghcmVzdWx0LmZhaWxlZCAmJiByZXN1bHQuZXhpdENvZGUgPT09IDApIHtcbiAgICByZXR1cm4gcmVzdWx0LnN0ZG91dC50cmltKCk7XG4gIH1cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn07XG5cbmV4cG9ydCBjb25zdCBmZXRjaExhdGVzdFRhZyA9ICh7IGNsaWVudCwgb3duZXIsIHJlcG8gfTogR2l0SHViUmVsZWFzZVBhcmFtKSA9PlxuICBSZXN1bHRBc3luYy5mcm9tUHJvbWlzZShcbiAgICAvLyBHZXQgcmVwb3NpdG9yeSB0YWdzXG4gICAgY2xpZW50LnJlcXVlc3QoXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3RhZ3NcIiwge1xuICAgICAgb3duZXIsXG4gICAgICByZXBvLFxuICAgIH0pLFxuICAgICgpID0+IG5ldyBFcnJvcihgRmFpbGVkIHRvIGZldGNoIHRhZ3MgZm9yICR7b3duZXJ9LyR7cmVwb31gKSxcbiAgKVxuICAgIC5tYXAoKHsgZGF0YSB9KSA9PiBkYXRhLm1hcCgoeyBuYW1lIH0pID0+IG5hbWUpKVxuICAgIC8vIEZpbHRlciBvdXQgdGFncyB0aGF0IGFyZSBub3QgdmFsaWQgc2VtdmVyXG4gICAgLm1hcCgodGFncykgPT5cbiAgICAgIHRhZ3MubWFwKCh0YWcpID0+IHNlbXZlclBhcnNlKHRhZykpLmZpbHRlcigodGFnKSA9PiB0YWcgIT09IG51bGwpLFxuICAgIClcbiAgICAvLyBTb3J0IHRhZ3MgaW4gYXNjZW5kaW5nIG9yZGVyXG4gICAgLm1hcChzZW12ZXJTb3J0KVxuICAgIC8vIEdldCB0aGUgbGF0ZXN0IHRhZ1xuICAgIC5tYXAoKHRhZ3MpID0+IHRhZ3MucG9wKCkgPz8gbnVsbCk7XG5cbmV4cG9ydCBjb25zdCBmZXRjaExhdGVzdFJlbGVhc2UgPSAoe1xuICBjbGllbnQsXG4gIG93bmVyLFxuICByZXBvLFxufTogR2l0SHViUmVsZWFzZVBhcmFtKSA9PlxuICBSZXN1bHRBc3luYy5mcm9tUHJvbWlzZShcbiAgICAvLyBHZXQgdGhlIGxhdGVzdCByZWxlYXNlIGZvciBhIHJlcG9zaXRvcnlcbiAgICBjbGllbnQucmVxdWVzdChcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcmVsZWFzZXMvbGF0ZXN0XCIsIHtcbiAgICAgIG93bmVyLFxuICAgICAgcmVwbyxcbiAgICB9KSxcbiAgICAoKSA9PiBuZXcgRXJyb3IoYEZhaWxlZCB0byBmZXRjaCBsYXRlc3QgcmVsZWFzZSBmb3IgJHtvd25lcn0vJHtyZXBvfWApLFxuICApLm1hcCgoeyBkYXRhIH0pID0+IHNlbXZlclBhcnNlKGRhdGEudGFnX25hbWUpKTtcbiJdfQ==
|
|
203
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYWRhcHRlcnMvb2N0b2tpdC9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBQzFCLE9BQU8sTUFBTSxNQUFNLG9CQUFvQixDQUFDO0FBQ3hDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDekMsT0FBTyxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDaEQsT0FBTyxXQUFXLE1BQU0sMkJBQTJCLENBQUM7QUFDcEQsT0FBTyxVQUFVLE1BQU0sMEJBQTBCLENBQUM7QUFFbEQsT0FBTyxFQUlMLGlCQUFpQixFQUdqQixXQUFXLEVBQ1gsVUFBVSxFQUNWLHVCQUF1QixHQUV4QixNQUFNLHdCQUF3QixDQUFDO0FBUWhDLE1BQU0sT0FBTyxvQkFBb0I7SUFDL0IsUUFBUSxDQUFDO0lBRVQsWUFBWSxPQUFnQjtRQUMxQixJQUFJLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQztJQUMxQixDQUFDO0lBRUQsS0FBSyxDQUFDLFlBQVksQ0FBQyxNQUEwQjtRQUMzQyxJQUFJLENBQUM7WUFDSCxtQ0FBbUM7WUFDbkMsTUFBTSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsR0FBRyxNQUFNLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUM7Z0JBQzVELEtBQUssRUFBRSxNQUFNLENBQUMsS0FBSztnQkFDbkIsR0FBRyxFQUFFLFNBQVMsTUFBTSxDQUFDLE9BQU8sRUFBRTtnQkFDOUIsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJO2FBQ2xCLENBQUMsQ0FBQztZQUVILHdCQUF3QjtZQUN4QixNQUFNLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUM7Z0JBQ3JDLEtBQUssRUFBRSxNQUFNLENBQUMsS0FBSztnQkFDbkIsR0FBRyxFQUFFLGNBQWMsTUFBTSxDQUFDLFVBQVUsRUFBRTtnQkFDdEMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJO2dCQUNqQixHQUFHLEVBQUUsT0FBTyxDQUFDLE1BQU0sQ0FBQyxHQUFHO2FBQ3hCLENBQUMsQ0FBQztRQUNMLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsTUFBTSxJQUFJLEtBQUssQ0FBQyw0QkFBNEIsTUFBTSxDQUFDLFVBQVUsRUFBRSxFQUFFO2dCQUMvRCxLQUFLLEVBQUUsS0FBSzthQUNiLENBQUMsQ0FBQztRQUNMLENBQUM7SUFDSCxDQUFDO0lBRUQsS0FBSyxDQUFDLCtCQUErQixDQUNuQyxNQUE2QztRQUU3QyxJQUFJLENBQUM7WUFDSCxrRkFBa0Y7WUFDbEYsTUFBTSxNQUFNLENBQUMsS0FBSyxDQUFDO1lBRW5CLDRGQUE0RjtZQUM1RixNQUFNLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUN6QiwyREFBMkQsRUFDM0Q7Z0JBQ0UsZ0JBQWdCLEVBQUUsTUFBTSxDQUFDLGVBQWU7Z0JBQ3hDLEtBQUssRUFBRSxNQUFNLENBQUMsS0FBSztnQkFDbkIsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJO2FBQ2xCLENBQ0YsQ0FBQztZQUVGLE1BQU0sRUFBRSxJQUFJLEVBQUUsYUFBYSxFQUFFLEdBQzNCLE1BQU0sSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLHVCQUF1QixDQUFDO2dCQUN2RCxnQkFBZ0IsRUFBRSxNQUFNLENBQUMsZUFBZTtnQkFDeEMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxLQUFLO2dCQUNuQixJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUk7YUFDbEIsQ0FBQyxDQUFDO1lBRUwsTUFBTSxjQUFjLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FDdkMsYUFBYSxDQUFDLEdBQUcsRUFDakIsTUFBTSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQ2hDLENBQUM7WUFDRixNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUMzRCxNQUFNLGNBQWMsR0FBRyxNQUFNLENBQUMsZUFBZSxDQUMzQyxXQUFXLEVBQ1gsY0FBYyxDQUNmLENBQUM7WUFDRixNQUFNLGNBQWMsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUNyQyxjQUFjLEVBQ2QsTUFBTSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQ2hDLENBQUM7WUFFRixNQUFNLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQywrQkFBK0IsQ0FBQztnQkFDL0QsZUFBZSxFQUFFLGNBQWM7Z0JBQy9CLGdCQUFnQixFQUFFLE1BQU0sQ0FBQyxlQUFlO2dCQUN4QyxNQUFNLEVBQUUsYUFBYSxDQUFDLE1BQU07Z0JBQzVCLEtBQUssRUFBRSxNQUFNLENBQUMsS0FBSztnQkFDbkIsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJO2dCQUNqQixXQUFXLEVBQUUsTUFBTSxDQUFDLFVBQVU7YUFDL0IsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixNQUFNLElBQUksS0FBSyxDQUNiLHFDQUFxQyxNQUFNLENBQUMsVUFBVSxtQkFBbUIsTUFBTSxDQUFDLGVBQWUsRUFBRSxFQUNqRyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsQ0FDakIsQ0FBQztRQUNKLENBQUM7SUFDSCxDQUFDO0lBRUQsS0FBSyxDQUFDLGlCQUFpQixDQUFDLE1BT3ZCO1FBQ0MsSUFBSSxDQUFDO1lBQ0gsTUFBTSxFQUFFLElBQUksRUFBRSxHQUFHLE1BQU0sSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQztnQkFDckQsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJO2dCQUNqQixJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUk7Z0JBQ2pCLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSTtnQkFDakIsS0FBSyxFQUFFLE1BQU0sQ0FBQyxLQUFLO2dCQUNuQixJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUk7Z0JBQ2pCLEtBQUssRUFBRSxNQUFNLENBQUMsS0FBSzthQUNwQixDQUFDLENBQUM7WUFDSCxPQUFPLElBQUksV0FBVyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN4QyxDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLE1BQU0sSUFBSSxLQUFLLENBQ2Isb0NBQW9DLE1BQU0sQ0FBQyxLQUFLLElBQUksTUFBTSxDQUFDLElBQUksRUFBRSxFQUNqRTtnQkFDRSxLQUFLLEVBQUUsS0FBSzthQUNiLENBQ0YsQ0FBQztRQUNKLENBQUM7SUFDSCxDQUFDO0lBRUQsS0FBSyxDQUFDLGNBQWMsQ0FBQyxNQUE0QjtRQUMvQyxJQUFJLENBQUM7WUFDSCxNQUFNLEVBQUUsSUFBSSxFQUFFLEdBQUcsTUFBTSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDO2dCQUN6RCxLQUFLLEVBQUUsTUFBTSxDQUFDLEtBQUs7Z0JBQ25CLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSTtnQkFDakIsR0FBRyxFQUFFLE1BQU0sQ0FBQyxHQUFHO2dCQUNmLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSTthQUNsQixDQUFDLENBQUM7WUFFSCx1RUFBdUU7WUFDdkUsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssTUFBTSxFQUFFLENBQUM7Z0JBQ2hELE1BQU0sSUFBSSxLQUFLLENBQUMsUUFBUSxNQUFNLENBQUMsSUFBSSxnQkFBZ0IsQ0FBQyxDQUFDO1lBQ3ZELENBQUM7WUFFRCxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ3RFLE9BQU8sRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUNwQyxDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLElBQUksS0FBSyxZQUFZLFlBQVksSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLEdBQUcsRUFBRSxDQUFDO2dCQUMxRCxNQUFNLElBQUksaUJBQWlCLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzNDLENBQUM7WUFDRCxNQUFNLElBQUksS0FBSyxDQUFDLCtCQUErQixNQUFNLENBQUMsSUFBSSxFQUFFLEVBQUU7Z0JBQzVELEtBQUssRUFBRSxLQUFLO2FBQ2IsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztJQUNILENBQUM7SUFFRCxLQUFLLENBQUMsYUFBYSxDQUFDLEtBQWEsRUFBRSxJQUFZO1FBQzdDLElBQUksQ0FBQztZQUNILE1BQU0sRUFBRSxJQUFJLEVBQUUsR0FBRyxNQUFNLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUM7Z0JBQ2xELEtBQUs7Z0JBQ0wsSUFBSSxFQUFFLElBQUk7YUFDWCxDQUFDLENBQUM7WUFDSCxPQUFPLElBQUksVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNyRCxDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLElBQUksS0FBSyxZQUFZLFlBQVksSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLEdBQUcsRUFBRSxDQUFDO2dCQUMxRCxNQUFNLElBQUksdUJBQXVCLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ2pELENBQUM7WUFDRCxNQUFNLElBQUksS0FBSyxDQUFDLDhCQUE4QixLQUFLLElBQUksSUFBSSxFQUFFLEVBQUU7Z0JBQzdELEtBQUssRUFBRSxLQUFLO2FBQ2IsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztJQUNILENBQUM7SUFFRCxLQUFLLENBQUMsVUFBVSxDQUFDLE1BQXdCO1FBQ3ZDLElBQUksQ0FBQztZQUNILE1BQU0sSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLDBCQUEwQixDQUFDO2dCQUN4RCxNQUFNLEVBQUUsTUFBTSxDQUFDLE1BQU07Z0JBQ3JCLE9BQU8sRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDO2dCQUN2RCxPQUFPLEVBQUUsTUFBTSxDQUFDLE9BQU87Z0JBQ3ZCLEtBQUssRUFBRSxNQUFNLENBQUMsS0FBSztnQkFDbkIsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJO2dCQUNqQixJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUk7Z0JBQ2pCLEdBQUcsRUFBRSxNQUFNLENBQUMsR0FBRzthQUNoQixDQUFDLENBQUM7UUFDTCxDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLE1BQU0sSUFBSSxLQUFLLENBQUMsMEJBQTBCLE1BQU0sQ0FBQyxJQUFJLEVBQUUsRUFBRTtnQkFDdkQsS0FBSyxFQUFFLEtBQUs7YUFDYixDQUFDLENBQUM7UUFDTCxDQUFDO0lBQ0gsQ0FBQztDQUNGO0FBRUQsZ0RBQWdEO0FBQ2hELG9EQUFvRDtBQUNwRCxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsS0FBSyxJQUFpQyxFQUFFO0lBQ2xFLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUN6QixPQUFPLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDO0lBQzlCLENBQUM7SUFDRCxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDN0IsT0FBTyxPQUFPLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQztJQUNsQyxDQUFDO0lBQ0QsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQSxlQUFlLENBQUM7SUFDekQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLElBQUksTUFBTSxDQUFDLFFBQVEsS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUM1QyxPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDOUIsQ0FBQztJQUNELE9BQU8sU0FBUyxDQUFDO0FBQ25CLENBQUMsQ0FBQztBQUVGLDJFQUEyRTtBQUMzRSxNQUFNLFVBQVUsR0FBRyxRQUFRLENBQUM7QUFFNUI7Ozs7Ozs7Ozs7R0FVRztBQUNILE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHLEtBQUssRUFDcEMsS0FBYSxFQUNiLFVBQW1CLElBQUksT0FBTyxDQUFDLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQzdCLEVBQUU7SUFDcEIsSUFBSSxDQUFDO1FBQ0gsTUFBTSxFQUFFLElBQUksRUFBRSxHQUFHLE1BQU0sT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsaUNBQWlDLENBQUM7WUFDekUsR0FBRyxFQUFFLFVBQVU7U0FDaEIsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxJQUFJLENBQUMsS0FBSyxLQUFLLFFBQVEsQ0FBQztJQUNqQyxDQUFDO0lBQUMsTUFBTSxDQUFDO1FBQ1AsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0FBQ0gsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFHLENBQUMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBc0IsRUFBRSxFQUFFLENBQzVFLFdBQVcsQ0FBQyxXQUFXO0FBQ3JCLHNCQUFzQjtBQUN0QixNQUFNLENBQUMsT0FBTyxDQUFDLGdDQUFnQyxFQUFFO0lBQy9DLEtBQUs7SUFDTCxJQUFJO0NBQ0wsQ0FBQyxFQUNGLEdBQUcsRUFBRSxDQUFDLElBQUksS0FBSyxDQUFDLDRCQUE0QixLQUFLLElBQUksSUFBSSxFQUFFLENBQUMsQ0FDN0Q7S0FDRSxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDaEQsNENBQTRDO0tBQzNDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQ1osSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEtBQUssSUFBSSxDQUFDLENBQ2xFO0lBQ0QsK0JBQStCO0tBQzlCLEdBQUcsQ0FBQyxVQUFVLENBQUM7SUFDaEIscUJBQXFCO0tBQ3BCLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLElBQUksQ0FBQyxDQUFDO0FBRXZDLE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHLENBQUMsRUFDakMsTUFBTSxFQUNOLEtBQUssRUFDTCxJQUFJLEdBQ2UsRUFBRSxFQUFFLENBQ3ZCLFdBQVcsQ0FBQyxXQUFXO0FBQ3JCLDBDQUEwQztBQUMxQyxNQUFNLENBQUMsT0FBTyxDQUFDLDJDQUEyQyxFQUFFO0lBQzFELEtBQUs7SUFDTCxJQUFJO0NBQ0wsQ0FBQyxFQUNGLEdBQUcsRUFBRSxDQUFDLElBQUksS0FBSyxDQUFDLHNDQUFzQyxLQUFLLElBQUksSUFBSSxFQUFFLENBQUMsQ0FDdkUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyAkIH0gZnJvbSBcImV4ZWNhXCI7XG5pbXBvcnQgc29kaXVtIGZyb20gXCJsaWJzb2RpdW0td3JhcHBlcnNcIjtcbmltcG9ydCB7IFJlc3VsdEFzeW5jIH0gZnJvbSBcIm5ldmVydGhyb3dcIjtcbmltcG9ydCB7IE9jdG9raXQsIFJlcXVlc3RFcnJvciB9IGZyb20gXCJvY3Rva2l0XCI7XG5pbXBvcnQgc2VtdmVyUGFyc2UgZnJvbSBcInNlbXZlci9mdW5jdGlvbnMvcGFyc2UuanNcIjtcbmltcG9ydCBzZW12ZXJTb3J0IGZyb20gXCJzZW12ZXIvZnVuY3Rpb25zL3NvcnQuanNcIjtcblxuaW1wb3J0IHtcbiAgQ3JlYXRlQnJhbmNoUGFyYW1zLFxuICBDcmVhdGVPclVwZGF0ZUVudmlyb25tZW50U2VjcmV0UGFyYW1zLFxuICBGaWxlQ29udGVudCxcbiAgRmlsZU5vdEZvdW5kRXJyb3IsXG4gIEdldEZpbGVDb250ZW50UGFyYW1zLFxuICBHaXRIdWJTZXJ2aWNlLFxuICBQdWxsUmVxdWVzdCxcbiAgUmVwb3NpdG9yeSxcbiAgUmVwb3NpdG9yeU5vdEZvdW5kRXJyb3IsXG4gIFVwZGF0ZUZpbGVQYXJhbXMsXG59IGZyb20gXCIuLi8uLi9kb21haW4vZ2l0aHViLmpzXCI7XG5cbnR5cGUgR2l0SHViUmVsZWFzZVBhcmFtID0ge1xuICBjbGllbnQ6IE9jdG9raXQ7XG4gIG93bmVyOiBzdHJpbmc7XG4gIHJlcG86IHN0cmluZztcbn07XG5cbmV4cG9ydCBjbGFzcyBPY3Rva2l0R2l0SHViU2VydmljZSBpbXBsZW1lbnRzIEdpdEh1YlNlcnZpY2Uge1xuICAjb2N0b2tpdDtcblxuICBjb25zdHJ1Y3RvcihvY3Rva2l0OiBPY3Rva2l0KSB7XG4gICAgdGhpcy4jb2N0b2tpdCA9IG9jdG9raXQ7XG4gIH1cblxuICBhc3luYyBjcmVhdGVCcmFuY2gocGFyYW1zOiBDcmVhdGVCcmFuY2hQYXJhbXMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgLy8gR2V0IHRoZSBTSEEgb2YgdGhlIHNvdXJjZSBicmFuY2hcbiAgICAgIGNvbnN0IHsgZGF0YTogcmVmRGF0YSB9ID0gYXdhaXQgdGhpcy4jb2N0b2tpdC5yZXN0LmdpdC5nZXRSZWYoe1xuICAgICAgICBvd25lcjogcGFyYW1zLm93bmVyLFxuICAgICAgICByZWY6IGBoZWFkcy8ke3BhcmFtcy5mcm9tUmVmfWAsXG4gICAgICAgIHJlcG86IHBhcmFtcy5yZXBvLFxuICAgICAgfSk7XG5cbiAgICAgIC8vIENyZWF0ZSB0aGUgbmV3IGJyYW5jaFxuICAgICAgYXdhaXQgdGhpcy4jb2N0b2tpdC5yZXN0LmdpdC5jcmVhdGVSZWYoe1xuICAgICAgICBvd25lcjogcGFyYW1zLm93bmVyLFxuICAgICAgICByZWY6IGByZWZzL2hlYWRzLyR7cGFyYW1zLmJyYW5jaE5hbWV9YCxcbiAgICAgICAgcmVwbzogcGFyYW1zLnJlcG8sXG4gICAgICAgIHNoYTogcmVmRGF0YS5vYmplY3Quc2hhLFxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIGNyZWF0ZSBicmFuY2g6ICR7cGFyYW1zLmJyYW5jaE5hbWV9YCwge1xuICAgICAgICBjYXVzZTogZXJyb3IsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBjcmVhdGVPclVwZGF0ZUVudmlyb25tZW50U2VjcmV0KFxuICAgIHBhcmFtczogQ3JlYXRlT3JVcGRhdGVFbnZpcm9ubWVudFNlY3JldFBhcmFtcyxcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIEdpdEh1YiByZXF1aXJlcyBlbnZpcm9ubWVudCBzZWNyZXRzIHRvIGJlIGVuY3J5cHRlZCBjbGllbnQtc2lkZSB3aXRoIGxpYnNvZGl1bS5cbiAgICAgIGF3YWl0IHNvZGl1bS5yZWFkeTtcblxuICAgICAgLy8gRW5zdXJlIHRoZSB0YXJnZXQgZW52aXJvbm1lbnQgZXhpc3RzIGJlZm9yZSByZXNvbHZpbmcgaXRzIHB1YmxpYyBrZXkgYW5kIHN0b3Jpbmcgc2VjcmV0cy5cbiAgICAgIGF3YWl0IHRoaXMuI29jdG9raXQucmVxdWVzdChcbiAgICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX1cIixcbiAgICAgICAge1xuICAgICAgICAgIGVudmlyb25tZW50X25hbWU6IHBhcmFtcy5lbnZpcm9ubWVudE5hbWUsXG4gICAgICAgICAgb3duZXI6IHBhcmFtcy5vd25lcixcbiAgICAgICAgICByZXBvOiBwYXJhbXMucmVwbyxcbiAgICAgICAgfSxcbiAgICAgICk7XG5cbiAgICAgIGNvbnN0IHsgZGF0YTogcHVibGljS2V5RGF0YSB9ID1cbiAgICAgICAgYXdhaXQgdGhpcy4jb2N0b2tpdC5yZXN0LmFjdGlvbnMuZ2V0RW52aXJvbm1lbnRQdWJsaWNLZXkoe1xuICAgICAgICAgIGVudmlyb25tZW50X25hbWU6IHBhcmFtcy5lbnZpcm9ubWVudE5hbWUsXG4gICAgICAgICAgb3duZXI6IHBhcmFtcy5vd25lcixcbiAgICAgICAgICByZXBvOiBwYXJhbXMucmVwbyxcbiAgICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHB1YmxpY0tleUJ5dGVzID0gc29kaXVtLmZyb21fYmFzZTY0KFxuICAgICAgICBwdWJsaWNLZXlEYXRhLmtleSxcbiAgICAgICAgc29kaXVtLmJhc2U2NF92YXJpYW50cy5PUklHSU5BTCxcbiAgICAgICk7XG4gICAgICBjb25zdCBzZWNyZXRCeXRlcyA9IHNvZGl1bS5mcm9tX3N0cmluZyhwYXJhbXMuc2VjcmV0VmFsdWUpO1xuICAgICAgY29uc3QgZW5jcnlwdGVkQnl0ZXMgPSBzb2RpdW0uY3J5cHRvX2JveF9zZWFsKFxuICAgICAgICBzZWNyZXRCeXRlcyxcbiAgICAgICAgcHVibGljS2V5Qnl0ZXMsXG4gICAgICApO1xuICAgICAgY29uc3QgZW5jcnlwdGVkVmFsdWUgPSBzb2RpdW0udG9fYmFzZTY0KFxuICAgICAgICBlbmNyeXB0ZWRCeXRlcyxcbiAgICAgICAgc29kaXVtLmJhc2U2NF92YXJpYW50cy5PUklHSU5BTCxcbiAgICAgICk7XG5cbiAgICAgIGF3YWl0IHRoaXMuI29jdG9raXQucmVzdC5hY3Rpb25zLmNyZWF0ZU9yVXBkYXRlRW52aXJvbm1lbnRTZWNyZXQoe1xuICAgICAgICBlbmNyeXB0ZWRfdmFsdWU6IGVuY3J5cHRlZFZhbHVlLFxuICAgICAgICBlbnZpcm9ubWVudF9uYW1lOiBwYXJhbXMuZW52aXJvbm1lbnROYW1lLFxuICAgICAgICBrZXlfaWQ6IHB1YmxpY0tleURhdGEua2V5X2lkLFxuICAgICAgICBvd25lcjogcGFyYW1zLm93bmVyLFxuICAgICAgICByZXBvOiBwYXJhbXMucmVwbyxcbiAgICAgICAgc2VjcmV0X25hbWU6IHBhcmFtcy5zZWNyZXROYW1lLFxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYEZhaWxlZCB0byBjcmVhdGUgb3IgdXBkYXRlIHNlY3JldCAke3BhcmFtcy5zZWNyZXROYW1lfSBpbiBlbnZpcm9ubWVudCAke3BhcmFtcy5lbnZpcm9ubWVudE5hbWV9YCxcbiAgICAgICAgeyBjYXVzZTogZXJyb3IgfSxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgY3JlYXRlUHVsbFJlcXVlc3QocGFyYW1zOiB7XG4gICAgYmFzZTogc3RyaW5nO1xuICAgIGJvZHk6IHN0cmluZztcbiAgICBoZWFkOiBzdHJpbmc7XG4gICAgb3duZXI6IHN0cmluZztcbiAgICByZXBvOiBzdHJpbmc7XG4gICAgdGl0bGU6IHN0cmluZztcbiAgfSk6IFByb21pc2U8UHVsbFJlcXVlc3Q+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgeyBkYXRhIH0gPSBhd2FpdCB0aGlzLiNvY3Rva2l0LnJlc3QucHVsbHMuY3JlYXRlKHtcbiAgICAgICAgYmFzZTogcGFyYW1zLmJhc2UsXG4gICAgICAgIGJvZHk6IHBhcmFtcy5ib2R5LFxuICAgICAgICBoZWFkOiBwYXJhbXMuaGVhZCxcbiAgICAgICAgb3duZXI6IHBhcmFtcy5vd25lcixcbiAgICAgICAgcmVwbzogcGFyYW1zLnJlcG8sXG4gICAgICAgIHRpdGxlOiBwYXJhbXMudGl0bGUsXG4gICAgICB9KTtcbiAgICAgIHJldHVybiBuZXcgUHVsbFJlcXVlc3QoZGF0YS5odG1sX3VybCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYEZhaWxlZCB0byBjcmVhdGUgcHVsbCByZXF1ZXN0IGluICR7cGFyYW1zLm93bmVyfS8ke3BhcmFtcy5yZXBvfWAsXG4gICAgICAgIHtcbiAgICAgICAgICBjYXVzZTogZXJyb3IsXG4gICAgICAgIH0sXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGdldEZpbGVDb250ZW50KHBhcmFtczogR2V0RmlsZUNvbnRlbnRQYXJhbXMpOiBQcm9taXNlPEZpbGVDb250ZW50PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHsgZGF0YSB9ID0gYXdhaXQgdGhpcy4jb2N0b2tpdC5yZXN0LnJlcG9zLmdldENvbnRlbnQoe1xuICAgICAgICBvd25lcjogcGFyYW1zLm93bmVyLFxuICAgICAgICBwYXRoOiBwYXJhbXMucGF0aCxcbiAgICAgICAgcmVmOiBwYXJhbXMucmVmLFxuICAgICAgICByZXBvOiBwYXJhbXMucmVwbyxcbiAgICAgIH0pO1xuXG4gICAgICAvLyBHaXRIdWIgQVBJIHJldHVybnMgYW4gYXJyYXkgZm9yIGRpcmVjdG9yaWVzLCBzaW5nbGUgb2JqZWN0IGZvciBmaWxlc1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZGF0YSkgfHwgZGF0YS50eXBlICE9PSBcImZpbGVcIikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFBhdGggJHtwYXJhbXMucGF0aH0gaXMgbm90IGEgZmlsZWApO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBjb250ZW50ID0gQnVmZmVyLmZyb20oZGF0YS5jb250ZW50LCBcImJhc2U2NFwiKS50b1N0cmluZyhcInV0Zi04XCIpO1xuICAgICAgcmV0dXJuIHsgY29udGVudCwgc2hhOiBkYXRhLnNoYSB9O1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBSZXF1ZXN0RXJyb3IgJiYgZXJyb3Iuc3RhdHVzID09PSA0MDQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEZpbGVOb3RGb3VuZEVycm9yKHBhcmFtcy5wYXRoKTtcbiAgICAgIH1cbiAgICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIGdldCBmaWxlIGNvbnRlbnQ6ICR7cGFyYW1zLnBhdGh9YCwge1xuICAgICAgICBjYXVzZTogZXJyb3IsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBnZXRSZXBvc2l0b3J5KG93bmVyOiBzdHJpbmcsIG5hbWU6IHN0cmluZyk6IFByb21pc2U8UmVwb3NpdG9yeT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB7IGRhdGEgfSA9IGF3YWl0IHRoaXMuI29jdG9raXQucmVzdC5yZXBvcy5nZXQoe1xuICAgICAgICBvd25lcixcbiAgICAgICAgcmVwbzogbmFtZSxcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIG5ldyBSZXBvc2l0b3J5KGRhdGEubmFtZSwgZGF0YS5vd25lci5sb2dpbik7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIFJlcXVlc3RFcnJvciAmJiBlcnJvci5zdGF0dXMgPT09IDQwNCkge1xuICAgICAgICB0aHJvdyBuZXcgUmVwb3NpdG9yeU5vdEZvdW5kRXJyb3Iob3duZXIsIG5hbWUpO1xuICAgICAgfVxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gZmV0Y2ggcmVwb3NpdG9yeSAke293bmVyfS8ke25hbWV9YCwge1xuICAgICAgICBjYXVzZTogZXJyb3IsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBhc3luYyB1cGRhdGVGaWxlKHBhcmFtczogVXBkYXRlRmlsZVBhcmFtcyk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLiNvY3Rva2l0LnJlc3QucmVwb3MuY3JlYXRlT3JVcGRhdGVGaWxlQ29udGVudHMoe1xuICAgICAgICBicmFuY2g6IHBhcmFtcy5icmFuY2gsXG4gICAgICAgIGNvbnRlbnQ6IEJ1ZmZlci5mcm9tKHBhcmFtcy5jb250ZW50KS50b1N0cmluZyhcImJhc2U2NFwiKSxcbiAgICAgICAgbWVzc2FnZTogcGFyYW1zLm1lc3NhZ2UsXG4gICAgICAgIG93bmVyOiBwYXJhbXMub3duZXIsXG4gICAgICAgIHBhdGg6IHBhcmFtcy5wYXRoLFxuICAgICAgICByZXBvOiBwYXJhbXMucmVwbyxcbiAgICAgICAgc2hhOiBwYXJhbXMuc2hhLFxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIHVwZGF0ZSBmaWxlOiAke3BhcmFtcy5wYXRofWAsIHtcbiAgICAgICAgY2F1c2U6IGVycm9yLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG59XG5cbi8vIEZvbGxvdyB0aGUgc2FtZSBvcmRlciBvZiBwcmVjZWRlbmNlIG9mIGdoIGNsaVxuLy8gaHR0cHM6Ly9jbGkuZ2l0aHViLmNvbS9tYW51YWwvZ2hfaGVscF9lbnZpcm9ubWVudFxuZXhwb3J0IGNvbnN0IGdldEdpdEh1YlBBVCA9IGFzeW5jICgpOiBQcm9taXNlPHN0cmluZyB8IHVuZGVmaW5lZD4gPT4ge1xuICBpZiAocHJvY2Vzcy5lbnYuR0hfVE9LRU4pIHtcbiAgICByZXR1cm4gcHJvY2Vzcy5lbnYuR0hfVE9LRU47XG4gIH1cbiAgaWYgKHByb2Nlc3MuZW52LkdJVEhVQl9UT0tFTikge1xuICAgIHJldHVybiBwcm9jZXNzLmVudi5HSVRIVUJfVE9LRU47XG4gIH1cbiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgJCh7IHJlamVjdDogZmFsc2UgfSlgZ2ggYXV0aCB0b2tlbmA7XG4gIGlmICghcmVzdWx0LmZhaWxlZCAmJiByZXN1bHQuZXhpdENvZGUgPT09IDApIHtcbiAgICByZXR1cm4gcmVzdWx0LnN0ZG91dC50cmltKCk7XG4gIH1cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn07XG5cbi8qKiBHaXRIdWIgb3JnYW5pemF0aW9uIHdob3NlIG1lbWJlcnMgYXJlIGFsbG93ZWQgdG8gZW1pdCBDTEkgdGVsZW1ldHJ5LiAqL1xuY29uc3QgUEFHT1BBX09SRyA9IFwicGFnb3BhXCI7XG5cbi8qKlxuICogUmV0dXJucyB0cnVlIHdoZW4gdGhlIGF1dGhlbnRpY2F0ZWQgdXNlciBpcyBhbiBhY3RpdmUgbWVtYmVyIG9mIHRoZSBQYWdvUEFcbiAqIEdpdEh1YiBvcmdhbml6YXRpb24uXG4gKlxuICogRmFpbHMgY2xvc2VkOiBhbnkgZXJyb3IgKG5ldHdvcmsgZmFpbHVyZSwgbWlzc2luZyBgcmVhZDpvcmdgIHNjb3BlLCA0MDMvNDA0KVxuICogcmVzb2x2ZXMgdG8gYGZhbHNlYCBzbyB0ZWxlbWV0cnkgc3RheXMgZGlzYWJsZWQgd2hlbiBtZW1iZXJzaGlwIGNhbm5vdCBiZVxuICogY29uZmlybWVkLlxuICpcbiAqIEBwYXJhbSBvY3Rva2l0IGluamVjdGFibGUgY2xpZW50LCBwcmltYXJpbHkgZm9yIHRlc3Rpbmc7IGRlZmF1bHRzIHRvIGEgY2xpZW50XG4gKiBhdXRoZW50aWNhdGVkIHdpdGggdGhlIHN1cHBsaWVkIHRva2VuLlxuICovXG5leHBvcnQgY29uc3QgaXNQYWdvcGFPcmdNZW1iZXIgPSBhc3luYyAoXG4gIHRva2VuOiBzdHJpbmcsXG4gIG9jdG9raXQ6IE9jdG9raXQgPSBuZXcgT2N0b2tpdCh7IGF1dGg6IHRva2VuIH0pLFxuKTogUHJvbWlzZTxib29sZWFuPiA9PiB7XG4gIHRyeSB7XG4gICAgY29uc3QgeyBkYXRhIH0gPSBhd2FpdCBvY3Rva2l0LnJlc3Qub3Jncy5nZXRNZW1iZXJzaGlwRm9yQXV0aGVudGljYXRlZFVzZXIoe1xuICAgICAgb3JnOiBQQUdPUEFfT1JHLFxuICAgIH0pO1xuICAgIHJldHVybiBkYXRhLnN0YXRlID09PSBcImFjdGl2ZVwiO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBmZXRjaExhdGVzdFRhZyA9ICh7IGNsaWVudCwgb3duZXIsIHJlcG8gfTogR2l0SHViUmVsZWFzZVBhcmFtKSA9PlxuICBSZXN1bHRBc3luYy5mcm9tUHJvbWlzZShcbiAgICAvLyBHZXQgcmVwb3NpdG9yeSB0YWdzXG4gICAgY2xpZW50LnJlcXVlc3QoXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3RhZ3NcIiwge1xuICAgICAgb3duZXIsXG4gICAgICByZXBvLFxuICAgIH0pLFxuICAgICgpID0+IG5ldyBFcnJvcihgRmFpbGVkIHRvIGZldGNoIHRhZ3MgZm9yICR7b3duZXJ9LyR7cmVwb31gKSxcbiAgKVxuICAgIC5tYXAoKHsgZGF0YSB9KSA9PiBkYXRhLm1hcCgoeyBuYW1lIH0pID0+IG5hbWUpKVxuICAgIC8vIEZpbHRlciBvdXQgdGFncyB0aGF0IGFyZSBub3QgdmFsaWQgc2VtdmVyXG4gICAgLm1hcCgodGFncykgPT5cbiAgICAgIHRhZ3MubWFwKCh0YWcpID0+IHNlbXZlclBhcnNlKHRhZykpLmZpbHRlcigodGFnKSA9PiB0YWcgIT09IG51bGwpLFxuICAgIClcbiAgICAvLyBTb3J0IHRhZ3MgaW4gYXNjZW5kaW5nIG9yZGVyXG4gICAgLm1hcChzZW12ZXJTb3J0KVxuICAgIC8vIEdldCB0aGUgbGF0ZXN0IHRhZ1xuICAgIC5tYXAoKHRhZ3MpID0+IHRhZ3MucG9wKCkgPz8gbnVsbCk7XG5cbmV4cG9ydCBjb25zdCBmZXRjaExhdGVzdFJlbGVhc2UgPSAoe1xuICBjbGllbnQsXG4gIG93bmVyLFxuICByZXBvLFxufTogR2l0SHViUmVsZWFzZVBhcmFtKSA9PlxuICBSZXN1bHRBc3luYy5mcm9tUHJvbWlzZShcbiAgICAvLyBHZXQgdGhlIGxhdGVzdCByZWxlYXNlIGZvciBhIHJlcG9zaXRvcnlcbiAgICBjbGllbnQucmVxdWVzdChcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcmVsZWFzZXMvbGF0ZXN0XCIsIHtcbiAgICAgIG93bmVyLFxuICAgICAgcmVwbyxcbiAgICB9KSxcbiAgICAoKSA9PiBuZXcgRXJyb3IoYEZhaWxlZCB0byBmZXRjaCBsYXRlc3QgcmVsZWFzZSBmb3IgJHtvd25lcn0vJHtyZXBvfWApLFxuICApLm1hcCgoeyBkYXRhIH0pID0+IHNlbXZlclBhcnNlKGRhdGEudGFnX25hbWUpKTtcbiJdfQ==
|
|
@@ -11,6 +11,10 @@ export default function (plop) {
|
|
|
11
11
|
// We filter them out here.
|
|
12
12
|
const env = Object.fromEntries(Object.entries(process.env)
|
|
13
13
|
.filter(([key]) => !key.startsWith("npm_config_"))
|
|
14
|
+
// Strip Node.js debugger env vars so child processes don't try to
|
|
15
|
+
// attach to the VS Code debugger and hang/fail.
|
|
16
|
+
.filter(([key]) => key !== "NODE_OPTIONS")
|
|
17
|
+
.filter(([key]) => !key.startsWith("VSCODE_INSPECTOR"))
|
|
14
18
|
// Disable corepack download prompt
|
|
15
19
|
.concat([["COREPACK_ENABLE_DOWNLOAD_PROMPT", "0"]]));
|
|
16
20
|
const $ = $_({
|
|
@@ -27,4 +31,4 @@ export default function (plop) {
|
|
|
27
31
|
return "Monorepo bootstrapped";
|
|
28
32
|
});
|
|
29
33
|
}
|
|
30
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
34
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2V0dXAtcG5wbS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9hZGFwdGVycy9wbG9wL2FjdGlvbnMvc2V0dXAtcG5wbS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUVoQyxPQUFPLElBQUksTUFBTSxXQUFXLENBQUM7QUFFN0IsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBRWxFLE1BQU0sb0JBQW9CLEdBQUcsSUFBSSxDQUFDO0FBRWxDLE1BQU0sQ0FBQyxPQUFPLFdBQVcsSUFBaUI7SUFDeEMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxFQUFFO1FBQzdDLE1BQU0sRUFBRSxRQUFRLEVBQUUsR0FBRyxhQUFhLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQy9DLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDbkMscUVBQXFFO1FBQ3JFLDJEQUEyRDtRQUMzRCwyQkFBMkI7UUFDM0IsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FDNUIsTUFBTSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDO2FBQ3hCLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUNsRCxrRUFBa0U7WUFDbEUsZ0RBQWdEO2FBQy9DLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsS0FBSyxjQUFjLENBQUM7YUFDekMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLGtCQUFrQixDQUFDLENBQUM7WUFDdkQsbUNBQW1DO2FBQ2xDLE1BQU0sQ0FBQyxDQUFDLENBQUMsaUNBQWlDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUN0RCxDQUFDO1FBQ0YsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQ1gsR0FBRztZQUNILEdBQUc7WUFDSCxTQUFTLEVBQUUsS0FBSyxFQUFFLHNDQUFzQztTQUN6RCxDQUFDLENBQUM7UUFDSCx1RUFBdUU7UUFDdkUsaUZBQWlGO1FBQ2pGLE1BQU0sQ0FBQyxDQUFBLHFCQUFxQixvQkFBb0IsRUFBRSxDQUFDO1FBQ25ELE1BQU0sQ0FBQyxDQUFBLGlFQUFpRSxDQUFDO1FBQ3pFLE1BQU0sQ0FBQyxDQUFBLGdFQUFnRSxDQUFDO1FBQ3hFLE1BQU0sQ0FBQyxDQUFBLG1GQUFtRixDQUFDO1FBQzNGLE9BQU8sdUJBQXVCLENBQUM7SUFDakMsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgJCBhcyAkXyB9IGZyb20gXCJleGVjYVwiO1xuaW1wb3J0IHsgdHlwZSBOb2RlUGxvcEFQSSB9IGZyb20gXCJub2RlLXBsb3BcIjtcbmltcG9ydCBwYXRoIGZyb20gXCJub2RlOnBhdGhcIjtcblxuaW1wb3J0IHsgcGF5bG9hZFNjaGVtYSB9IGZyb20gXCIuLi9nZW5lcmF0b3JzL21vbm9yZXBvL3Byb21wdHMuanNcIjtcblxuY29uc3QgcG5wbUJvb3RzdHJhcFZlcnNpb24gPSBcIjEwXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIChwbG9wOiBOb2RlUGxvcEFQSSkge1xuICBwbG9wLnNldEFjdGlvblR5cGUoXCJzZXR1cFBucG1cIiwgYXN5bmMgKGRhdGEpID0+IHtcbiAgICBjb25zdCB7IHJlcG9OYW1lIH0gPSBwYXlsb2FkU2NoZW1hLnBhcnNlKGRhdGEpO1xuICAgIGNvbnN0IGN3ZCA9IHBhdGgucmVzb2x2ZShyZXBvTmFtZSk7XG4gICAgLy8gSWYgdGhpcyBnZW5lcmF0b3IgaXMgc3RhcnRlZCBieSBhIG5wbSBzY3JpcHQsIGl0IHdpbGwgaW5oZXJpdCBzb21lXG4gICAgLy8gY29uZmlnIHZhcmlhYmxlcyB0aGF0IHdpbGwgaW50ZXJmZXJlIHdpdGggcG5wbSBjb21tYW5kcy5cbiAgICAvLyBXZSBmaWx0ZXIgdGhlbSBvdXQgaGVyZS5cbiAgICBjb25zdCBlbnYgPSBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgICBPYmplY3QuZW50cmllcyhwcm9jZXNzLmVudilcbiAgICAgICAgLmZpbHRlcigoW2tleV0pID0+ICFrZXkuc3RhcnRzV2l0aChcIm5wbV9jb25maWdfXCIpKVxuICAgICAgICAvLyBTdHJpcCBOb2RlLmpzIGRlYnVnZ2VyIGVudiB2YXJzIHNvIGNoaWxkIHByb2Nlc3NlcyBkb24ndCB0cnkgdG9cbiAgICAgICAgLy8gYXR0YWNoIHRvIHRoZSBWUyBDb2RlIGRlYnVnZ2VyIGFuZCBoYW5nL2ZhaWwuXG4gICAgICAgIC5maWx0ZXIoKFtrZXldKSA9PiBrZXkgIT09IFwiTk9ERV9PUFRJT05TXCIpXG4gICAgICAgIC5maWx0ZXIoKFtrZXldKSA9PiAha2V5LnN0YXJ0c1dpdGgoXCJWU0NPREVfSU5TUEVDVE9SXCIpKVxuICAgICAgICAvLyBEaXNhYmxlIGNvcmVwYWNrIGRvd25sb2FkIHByb21wdFxuICAgICAgICAuY29uY2F0KFtbXCJDT1JFUEFDS19FTkFCTEVfRE9XTkxPQURfUFJPTVBUXCIsIFwiMFwiXV0pLFxuICAgICk7XG4gICAgY29uc3QgJCA9ICRfKHtcbiAgICAgIGN3ZCxcbiAgICAgIGVudixcbiAgICAgIGV4dGVuZEVudjogZmFsc2UsIC8vIERvbid0IGluY2x1ZGUgcHJvY2Vzcy5lbnYgdmFyaWFibGVzXG4gICAgfSk7XG4gICAgLy8gS2VlcCB0aGUgYm9vdHN0cmFwIG9uIHBucG0gMTAgc28gYG54IGluaXRgIHdvcmtzIHdpdGhvdXQgdGhlIHBucG0gMTFcbiAgICAvLyBidWlsZC1hcHByb3ZhbCBzZXR0aW5ncyB0aGF0IHdvdWxkIG90aGVyd2lzZSBsZWFrIGludG8gdGhlIGdlbmVyYXRlZCB0ZW1wbGF0ZS5cbiAgICBhd2FpdCAkYGNvcmVwYWNrIHVzZSBwbnBtQCR7cG5wbUJvb3RzdHJhcFZlcnNpb259YDtcbiAgICBhd2FpdCAkYG5weCAtLXllcyBueEBsYXRlc3QgaW5pdCAtLWludGVyYWN0aXZlPWZhbHNlIC0tYWlBZ2VudHM9Y29waWxvdGA7XG4gICAgYXdhaXQgJGBwbnBtIC13IGFkZCAtRCBAZGV2Y29udGFpbmVycy9jbGkgQG54L2pzIEBueC9lc2xpbnQgQG54L3ZpdGVzdGA7XG4gICAgYXdhaXQgJGBwbnBtIGRldmNvbnRhaW5lciB0ZW1wbGF0ZXMgYXBwbHkgLXQgZ2hjci5pby9wYWdvcGEvZGV2Y29udGFpbmVyLXRlbXBsYXRlcy9ub2RlOjFgO1xuICAgIHJldHVybiBcIk1vbm9yZXBvIGJvb3RzdHJhcHBlZFwiO1xuICB9KTtcbn1cbiJdfQ==
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Updates infra/repository/main.tf and applies it so GitHub.com repository
|
|
3
|
+
* environments exist before deployment scaffolding continues.
|
|
4
|
+
*
|
|
5
|
+
* The repository Terraform module remains the source of truth for GitHub
|
|
6
|
+
* environments, including protection rules and reviewers. This action only
|
|
7
|
+
* changes the module's `repository.environments` input, then runs Terraform from
|
|
8
|
+
* infra/repository to create or update the environments on GitHub.
|
|
9
|
+
*/
|
|
10
|
+
import { type NodePlopAPI } from "node-plop";
|
|
11
|
+
import type { Environment } from "../../../domain/environment.js";
|
|
12
|
+
import { type Payload } from "../generators/environment/prompts.js";
|
|
13
|
+
export declare const syncRepositoryTerraformEnvironments: (content: string, environmentName: Environment["name"]) => string;
|
|
14
|
+
export declare const syncRepositoryEnvironments: (payload: Payload) => Promise<void>;
|
|
15
|
+
export default function (plop: NodePlopAPI): void;
|