@pagopa/dx-cli 0.23.3 → 0.23.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/adapters/commander/commands/add.d.ts +2 -1
- package/dist/adapters/commander/commands/add.js +6 -5
- package/dist/adapters/commander/commands/codemod.d.ts +2 -1
- package/dist/adapters/commander/commands/codemod.js +9 -7
- package/dist/adapters/commander/commands/doctor.d.ts +2 -1
- package/dist/adapters/commander/commands/doctor.js +6 -5
- package/dist/adapters/commander/commands/info.d.ts +2 -1
- package/dist/adapters/commander/commands/info.js +4 -4
- package/dist/adapters/commander/commands/init.d.ts +2 -1
- package/dist/adapters/commander/commands/init.js +6 -5
- package/dist/adapters/commander/index.d.ts +2 -1
- package/dist/adapters/commander/index.js +7 -7
- package/dist/adapters/commander/presenters/index.d.ts +17 -8
- package/dist/adapters/commander/presenters/index.js +15 -1
- package/dist/index.js +4 -2
- package/package.json +1 -1
|
@@ -10,10 +10,11 @@
|
|
|
10
10
|
import { Command } from "commander";
|
|
11
11
|
import { ResultAsync } from "neverthrow";
|
|
12
12
|
import type { Payload as EnvironmentPayload } from "../../plop/generators/environment/index.js";
|
|
13
|
+
import type { CliEnv } from "../env.js";
|
|
13
14
|
import { AuthorizationResult, AuthorizationService } from "../../../domain/authorization.js";
|
|
14
15
|
import { GitHubAuthFactory } from "../../../domain/dependencies.js";
|
|
15
16
|
/**
|
|
16
17
|
* Authorize a Cloud Account (Azure Subscription, AWS Account, ...), creating a Pull Request for each account that requires authorization.
|
|
17
18
|
*/
|
|
18
19
|
export declare const authorizeCloudAccounts: (authorizationService: AuthorizationService) => (envPayload: EnvironmentPayload) => ResultAsync<AuthorizationResult[], never>;
|
|
19
|
-
export declare const makeAddCommand: (requireGitHubAuth: GitHubAuthFactory) => Command;
|
|
20
|
+
export declare const makeAddCommand: (requireGitHubAuth: GitHubAuthFactory, env: CliEnv) => Command;
|
|
@@ -16,7 +16,7 @@ import { environmentShort } from "../../../domain/environment.js";
|
|
|
16
16
|
import { isAzureLocation, locationShort } from "../../azure/locations.js";
|
|
17
17
|
import { collectDeploymentEnvironmentPayload, getPlopInstance, runDeploymentEnvironmentActions, } from "../../plop/index.js";
|
|
18
18
|
import { asError, reportCommandError } from "../command-errors.js";
|
|
19
|
-
import { createCommandPresenter } from "../presenters/index.js";
|
|
19
|
+
import { createCommandPresenter, resolveOutputMode, } from "../presenters/index.js";
|
|
20
20
|
import { runAddEnvironmentPreconditions } from "./init.js";
|
|
21
21
|
/**
|
|
22
22
|
* Authorize a Cloud Account (Azure Subscription, AWS Account, ...), creating a Pull Request for each account that requires authorization.
|
|
@@ -97,16 +97,17 @@ ResultAsync.fromPromise(collectDeploymentEnvironmentPayload(plop, gitHubService)
|
|
|
97
97
|
.andThen((payload) => authorizeCloudAccounts(authorizationService)(payload).map((authorizationPrs) => ({
|
|
98
98
|
authorizationPrs,
|
|
99
99
|
})));
|
|
100
|
-
export const makeAddCommand = (requireGitHubAuth) => new Command()
|
|
100
|
+
export const makeAddCommand = (requireGitHubAuth, env) => new Command()
|
|
101
101
|
.name("add")
|
|
102
102
|
.description("Add a new component to your workspace")
|
|
103
103
|
.addCommand(new Command("environment")
|
|
104
104
|
.description("Add a new deployment environment")
|
|
105
105
|
.action(async function () {
|
|
106
106
|
const { output } = this.optsWithGlobals();
|
|
107
|
-
const
|
|
107
|
+
const outputMode = resolveOutputMode(env, output);
|
|
108
|
+
const presenter = createCommandPresenter(outputMode);
|
|
108
109
|
await requireGitHubAuth()
|
|
109
110
|
.andThen(({ authorizationService, gitHubService }) => addEnvironmentAction(authorizationService, gitHubService, presenter))
|
|
110
|
-
.match(reportSummary(presenter,
|
|
111
|
+
.match(reportSummary(presenter, outputMode), reportCommandError(this, presenter, outputMode));
|
|
111
112
|
}));
|
|
112
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2FkYXB0ZXJzL2NvbW1hbmRlci9jb21tYW5kcy9hZGQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzdDLE9BQU8sS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUMxQjs7Ozs7Ozs7R0FRRztBQUNILE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDcEMsT0FBTyxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFNbEQsT0FBTyxFQUdMLCtCQUErQixHQUNoQyxNQUFNLGtDQUFrQyxDQUFDO0FBRTFDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBRWxFLE9BQU8sRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDMUUsT0FBTyxFQUNMLG1DQUFtQyxFQUNuQyxlQUFlLEVBQ2YsK0JBQStCLEdBQ2hDLE1BQU0scUJBQXFCLENBQUM7QUFDN0IsT0FBTyxFQUFFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ25FLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUUzRDs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLHNCQUFzQixHQUNqQyxDQUFDLG9CQUEwQyxFQUFFLEVBQUUsQ0FDL0MsQ0FDRSxVQUE4QixFQUNhLEVBQUU7SUFDN0MsTUFBTSxvQkFBb0IsR0FDeEIsVUFBVSxDQUFDLElBQUksRUFBRSx5QkFBeUIsSUFBSSxFQUFFLENBQUM7SUFFbkQsSUFBSSxvQkFBb0IsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDdEMsT0FBTyxPQUFPLENBQUMs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LEVBQUUsb0JBQW9CLEVBQUUsYUFBYSxFQUFFLEVBQUUsRUFBRSxDQUNuRCxvQkFBb0IsQ0FDbEIsb0JBQW9CLEVBQ3BCLGFBQWEsRUFDYixTQUFTLENBQ1YsQ0FDRjtTQUNBLEtBQUssQ0FDSixhQUFhLENBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxFQUNoQyxrQkFBa0IsQ0FBQyxJQUFJLEVBQUUsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUM1QyxDQUFDO0FBQ04sQ0FBQyxDQUFDLENBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGdldExvZ2dlciB9IGZyb20gXCJAbG9ndGFwZS9sb2d0YXBlXCI7XG5pbXBvcnQgY2hhbGsgZnJvbSBcImNoYWxrXCI7XG4vKipcbiAqIEFkZCBjb21tYW5kIC0gU2NhZmZvbGQgbmV3IGNvbXBvbmVudHMgaW50byBleGlzdGluZyB3b3Jrc3BhY2VzXG4gKlxuICogVGhpcyBtb2R1bGUgaW1wbGVtZW50cyB0aGUgYGR4IGFkZGAgY29tbWFuZCB3aGljaCBhbGxvd3MgZGV2ZWxvcGVycyB0byBzY2FmZm9sZFxuICogbmV3IGNvbXBvbmVudHMgaW50byB0aGVpciBleGlzdGluZyB3b3Jrc3BhY2UgZm9sbG93aW5nIERldkV4IGd1aWRlbGluZXMuXG4gKlxuICogQ3VycmVudGx5IHN1cHBvcnRlZCBjb21wb25lbnRzOlxuICogLSBlbnZpcm9ubWVudDogQWRkIGEgbmV3IGRlcGxveW1lbnQgZW52aXJvbm1lbnQgdG8gdGhlIHByb2plY3RcbiAqL1xuaW1wb3J0IHsgQ29tbWFuZCB9IGZyb20gXCJjb21tYW5kZXJcIjtcbmltcG9ydCB7IG9rQXN5bmMsIFJlc3VsdEFzeW5jIH0gZnJvbSBcIm5ldmVydGhyb3dcIjtcblxuaW1wb3J0IHR5cGUgeyBDb21tYW5kUHJlc2VudGVyIH0gZnJvbSBcIi4uLy4uLy4uL2RvbWFpbi9jb21tYW5kLXByZXNlbnRlci5qc1wiO1xuaW1wb3J0IHR5cGUgeyBQYXlsb2FkIGFzIEVudmlyb25tZW50UGF5bG9hZCB9IGZyb20gXCIuLi8uLi9wbG9wL2dlbmVyYXRvcnMvZW52aXJvbm1lbnQvaW5kZXguanNcIjtcbmltcG9ydCB0eXBlIHsgR2xvYmFsT3B0aW9ucyB9IGZyb20gXCIuLi9nbG9iYWwtb3B0aW9ucy5qc1wiO1xuXG5pbXBvcnQge1xuICBBdXRob3JpemF0aW9uUmVzdWx0LFxuICBBdXRob3JpemF0aW9uU2VydmljZSxcbiAgcmVxdWVzdEF1dGhvcml6YXRpb25JbnB1dFNjaGVtYSxcbn0gZnJvbSBcIi4uLy4uLy4uL2RvbWFpbi9hdXRob3JpemF0aW9uLmpzXCI7XG5pbXBvcnQgeyBHaXRIdWJBdXRoRmFjdG9yeSB9IGZyb20gXCIuLi8uLi8uLi9kb21haW4vZGVwZW5kZW5jaWVzLmpzXCI7XG5pbXBvcnQgeyBlbnZpcm9ubWVudFNob3J0IH0gZnJvbSBcIi4uLy4uLy4uL2RvbWFpbi9lbnZpcm9ubWVudC5qc1wiO1xuaW1wb3J0IHsgdHlwZSBHaXRIdWJTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uLy4uL2RvbWFpbi9naXRodWIuanNcIjtcbmltcG9ydCB7IGlzQXp1cmVMb2NhdGlvbiwgbG9jYXRpb25TaG9ydCB9IGZyb20gXCIuLi8uLi9henVyZS9sb2NhdGlvbnMuanNcIjtcbmltcG9ydCB7XG4gIGNvbGxlY3REZXBsb3ltZW50RW52aXJvbm1lbnRQYXlsb2FkLFxuICBnZXRQbG9wSW5zdGFuY2UsXG4gIHJ1bkRlcGxveW1lbnRFbnZpcm9ubWVudEFjdGlvbnMsXG59IGZyb20gXCIuLi8uLi9wbG9wL2luZGV4LmpzXCI7XG5pbXBvcnQgeyBhc0Vycm9yLCByZXBvcnRDb21tYW5kRXJyb3IgfSBmcm9tIFwiLi4vY29tbWFuZC1lcnJvcnMuanNcIjtcbmltcG9ydCB7IGNyZWF0ZUNvbW1hbmRQcmVzZW50ZXIgfSBmcm9tIFwiLi4vcHJlc2VudGVycy9pbmRleC5qc1wiO1xuaW1wb3J0IHsgcnVuQWRkRW52aXJvbm1lbnRQcmVjb25kaXRpb25zIH0gZnJvbSBcIi4vaW5pdC5qc1wiO1xuXG4vKipcbiAqIEF1dGhvcml6ZSBhIENsb3VkIEFjY291bnQgKEF6dXJlIFN1YnNjcmlwdGlvbiwgQVdTIEFjY291bnQsIC4uLiksIGNyZWF0aW5nIGEgUHVsbCBSZXF1ZXN0IGZvciBlYWNoIGFjY291bnQgdGhhdCByZXF1aXJlcyBhdXRob3JpemF0aW9uLlxuICovXG5leHBvcnQgY29uc3QgYXV0aG9yaXplQ2xvdWRBY2NvdW50cyA9XG4gIChhdXRob3JpemF0aW9uU2VydmljZTogQXV0aG9yaXphdGlvblNlcnZpY2UpID0+XG4gIChcbiAgICBlbnZQYXlsb2FkOiBFbnZpcm9ubWVudFBheWxvYWQsXG4gICk6IFJlc3VsdEFzeW5jPEF1dGhvcml6YXRpb25SZXN1bHRbXSwgbmV2ZXI+ID0+IHtcbiAgICBjb25zdCBhY2NvdW50c1RvSW5pdGlhbGl6ZSA9XG4gICAgICBlbnZQYXlsb2FkLmluaXQ/LmNsb3VkQWNjb3VudHNUb0luaXRpYWxpemUgPz8gW107XG5cbiAgICBpZiAoYWNjb3VudHNUb0luaXRpYWxpemUubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gb2tBc3luYyhbXSk7XG4gICAgfVxuXG4gICAgY29uc3QgbG9nZ2VyID0gZ2V0TG9nZ2VyKFtcImR4LWNsaVwiLCBcImFkZC1lbnZpcm9ubWVudFwiXSk7XG4gICAgY29uc3QgeyBuYW1lLCBwcmVmaXggfSA9IGVudlBheWxvYWQuZW52O1xuICAgIGNvbnN0IGVudlNob3J0ID0gZW52aXJvbm1lbnRTaG9ydFtuYW1lXTtcblxuICAgIGNvbnN0IHJlcXVlc3RBbGwgPSBhc3luYyAoKTogUHJvbWlzZTxBdXRob3JpemF0aW9uUmVzdWx0W10+ID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdHM6IEF1dGhvcml6YXRpb25SZXN1bHRbXSA9IFtdO1xuXG4gICAgICBmb3IgKGNvbnN0IGFjY291bnQgb2YgYWNjb3VudHNUb0luaXRpYWxpemUpIHtcbiAgICAgICAgaWYgKCFpc0F6dXJlTG9jYXRpb24oYWNjb3VudC5kZWZhdWx0TG9jYXRpb24pKSB7XG4gICAgICAgICAgbG9nZ2VyLndhcm4oXG4gICAgICAgICAgICBcIlNraXBwaW5nIGF1dGhvcml6YXRpb24gZm9yIHthY2NvdW50fTogdW5zdXBwb3J0ZWQgbG9jYXRpb25cIixcbiAgICAgICAgICAgIHsgYWNjb3VudDogYWNjb3VudC5kaXNwbGF5TmFtZSB9LFxuICAgICAgICAgICk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBsb2NTaG9ydCA9IGxvY2F0aW9uU2hvcnRbYWNjb3VudC5kZWZhdWx0TG9jYXRpb25dO1xuICAgICAgICBjb25zdCBpbnB1dCA9IHJlcXVlc3RBdXRob3JpemF0aW9uSW5wdXRTY2hlbWEuc2FmZVBhcnNlKHtcbiAgICAgICAgICBib290c3RyYXBJZGVudGl0eUlkOiBgJHtwcmVmaXh9LSR7ZW52U2hvcnR9LSR7bG9jU2hvcnR9LWJvb3RzdHJhcC1pZC0wMWAsXG4gICAgICAgICAgZW52U2hvcnQsXG4gICAgICAgICAgcHJlZml4LFxuICAgICAgICAgIHJlcG9OYW1lOiBlbnZQYXlsb2FkLmdpdGh1Yi5yZXBvLFxuICAgICAgICAgIHN1YnNjcmlwdGlvbk5hbWU6IGFjY291bnQuZGlzcGxheU5hbWUsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmICghaW5wdXQuc3VjY2Vzcykge1xuICAgICAgICAgIGxvZ2dlci53YXJuKFwiU2tpcHBpbmcgYXV0aG9yaXphdGlvbiBmb3Ige2FjY291bnR9OiBpbnZhbGlkIGlucHV0XCIsIHtcbiAgICAgICAgICAgIGFjY291bnQ6IGFjY291bnQuZGlzcGxheU5hbWUsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBhdXRob3JpemF0aW9uU2VydmljZS5yZXF1ZXN0QXV0aG9yaXphdGlvbihcbiAgICAgICAgICBpbnB1dC5kYXRhLFxuICAgICAgICApO1xuXG4gICAgICAgIHJlc3VsdC5tYXRjaChcbiAgICAgICAgICAoYXV0aFJlc3VsdCkgPT4gcmVzdWx0cy5wdXNoKGF1dGhSZXN1bHQpLFxuICAgICAgICAgIChlcnJvcikgPT5cbiAgICAgICAgICAgIGxvZ2dlci53YXJuKFwiQXV0aG9yaXphdGlvbiByZXF1ZXN0IGZhaWxlZCBmb3Ige2FjY291bnR9OiB7ZXJyb3J9XCIsIHtcbiAgICAgICAgICAgICAgYWNjb3VudDogYWNjb3VudC5kaXNwbGF5TmFtZSxcbiAgICAgICAgICAgICAgZXJyb3I6IGVycm9yLm1lc3NhZ2UsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgfTtcblxuICAgIHJldHVybiBSZXN1bHRBc3luYy5mcm9tUHJvbWlzZShyZXF1ZXN0QWxsKCksICgpID0+IFtdKS5vckVsc2UoKCkgPT5cbiAgICAgIG9rQXN5bmMoW10pLFxuICAgICk7XG4gIH07XG5cbnR5cGUgQWRkUmVzdWx0ID0ge1xuICBhdXRob3JpemF0aW9uUHJzOiBBdXRob3JpemF0aW9uUmVzdWx0W107XG59O1xuXG5jb25zdCBkaXNwbGF5U3VtbWFyeSA9IChyZXN1bHQ6IEFkZFJlc3VsdCkgPT4ge1xuICBjb25zdCB7IGF1dGhvcml6YXRpb25QcnMgfSA9IHJlc3VsdDtcbiAgY29uc29sZS5sb2coY2hhbGsuZ3JlZW4uYm9sZChcIlxcbkNsb3VkIGVudmlyb25tZW50IGNyZWF0ZWQgc3VjY2Vzc2Z1bGx5IVwiKSk7XG5cbiAgbGV0IHN0ZXAgPSAxO1xuICBjb25zb2xlLmxvZyhjaGFsay5ncmVlbi5ib2xkKFwiXFxuTmV4dCBTdGVwczpcIikpO1xuICBjb25zdCBwcnNXaXRoVXJsID0gYXV0aG9yaXphdGlvblBycy5maWx0ZXIoXG4gICAgKHByKTogcHIgaXMgQXV0aG9yaXphdGlvblJlc3VsdCAmIHsgdXJsOiBzdHJpbmcgfSA9PiBwci51cmwgIT0gbnVsbCxcbiAgKTtcbiAgaWYgKHByc1dpdGhVcmwubGVuZ3RoID4gMCkge1xuICAgIGNvbnNvbGUubG9nKGAke3N0ZXArK30uIFJldmlldyB0aGUgQXp1cmUgYXV0aG9yaXphdGlvbiBQdWxsIFJlcXVlc3Qocyk6YCk7XG4gICAgZm9yIChjb25zdCBhdXRoUHIgb2YgcHJzV2l0aFVybCkge1xuICAgICAgY29uc29sZS5sb2coYCAgIC0gJHtjaGFsay51bmRlcmxpbmUoYXV0aFByLnVybCl9YCk7XG4gICAgfVxuICB9XG4gIGNvbnNvbGUubG9nKFxuICAgIGAke3N0ZXB9LiBWaXNpdCAke2NoYWxrLnVuZGVybGluZShcImh0dHBzOi8vZHgucGFnb3BhLml0L2dldHRpbmctc3RhcnRlZFwiKX0gdG8gZGVwbG95IHlvdXIgZmlyc3QgcHJvamVjdFxcbmAsXG4gICk7XG59O1xuXG4vKipcbiAqIFJvdXRlcyB0aGUgc3VjY2Vzc2Z1bCBvdXRjb21lIHRocm91Z2ggdGhlIHByZXNlbnRlcjogSlNPTiBtb2RlIGVtaXRzIHRoZVxuICogc3RydWN0dXJlZCBlbnZlbG9wZSB3aGlsZSB0ZXh0IG1vZGUgcmVuZGVycyB0aGUgaHVtYW4tcmVhZGFibGUgc3VtbWFyeS5cbiAqL1xuY29uc3QgcmVwb3J0U3VtbWFyeSA9XG4gIChwcmVzZW50ZXI6IENvbW1hbmRQcmVzZW50ZXIsIG91dHB1dE1vZGU6IFwianNvblwiIHwgXCJ0ZXh0XCIpID0+XG4gIChyZXN1bHQ6IEFkZFJlc3VsdCk6IHZvaWQgPT4ge1xuICAgIGlmIChvdXRwdXRNb2RlID09PSBcImpzb25cIikge1xuICAgICAgcHJlc2VudGVyLnJlcG9ydFJlc3VsdChyZXN1bHQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBkaXNwbGF5U3VtbWFyeShyZXN1bHQpO1xuICAgIH1cbiAgfTtcblxuY29uc3QgdHJhY2tTdGVwID0gPFQsIEU+KFxuICBwcmVzZW50ZXI6IENvbW1hbmRQcmVzZW50ZXIsXG4gIG5hbWU6IHN0cmluZyxcbiAgdGFzazogKCkgPT4gUHJvbWlzZTxUPixcbiAgbWFwRXJyb3I6IChjYXVzZTogdW5rbm93bikgPT4gRSxcbik6IFJlc3VsdEFzeW5jPFQsIEU+ID0+XG4gIFJlc3VsdEFzeW5jLmZyb21Qcm9taXNlKHByZXNlbnRlci50cmFja1N0ZXAobmFtZSwgdGFzayksIG1hcEVycm9yKTtcblxuY29uc3QgYWRkRW52aXJvbm1lbnRBY3Rpb24gPSAoXG4gIGF1dGhvcml6YXRpb25TZXJ2aWNlOiBBdXRob3JpemF0aW9uU2VydmljZSxcbiAgZ2l0SHViU2VydmljZTogR2l0SHViU2VydmljZSxcbiAgcHJlc2VudGVyOiBDb21tYW5kUHJlc2VudGVyLFxuKTogUmVzdWx0QXN5bmM8QWRkUmVzdWx0LCBFcnJvcj4gPT5cbiAgcnVuQWRkRW52aXJvbm1lbnRQcmVjb25kaXRpb25zKHByZXNlbnRlcilcbiAgICAuYW5kVGhlbigoKSA9PlxuICAgICAgdHJhY2tTdGVwKFxuICAgICAgICBwcmVzZW50ZXIsXG4gICAgICAgIFwiSW5pdGlhbGl6aW5nIGVudmlyb25tZW50IGdlbmVyYXRvci4uLlwiLFxuICAgICAgICBnZXRQbG9wSW5zdGFuY2UsXG4gICAgICAgIGFzRXJyb3IoXCJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBwbG9wXCIpLFxuICAgICAgKSxcbiAgICApXG4gICAgLmFuZFRoZW4oKHBsb3ApID0+XG4gICAgICAvLyBUaGUgcHJvbXB0IHBoYXNlIG11c3QgcnVuIG91dHNpZGUgdHJhY2tTdGVwOiBpbiB0ZXh0IG1vZGUgdHJhY2tTdGVwXG4gICAgICAvLyByZW5kZXJzIGEgc3Bpbm5lciB0aGF0IG9jY3VwaWVzIHRoZSBUVFkgYW5kIGhpZGVzIHRoZSBwcm9tcHRzLlxuICAgICAgUmVzdWx0QXN5bmMuZnJvbVByb21pc2UoXG4gICAgICAgIGNvbGxlY3REZXBsb3ltZW50RW52aXJvbm1lbnRQYXlsb2FkKHBsb3AsIGdpdEh1YlNlcnZpY2UpLFxuICAgICAgICBhc0Vycm9yKFwiRmFpbGVkIHRvIHJ1biB0aGUgZGVwbG95bWVudCBlbnZpcm9ubWVudCBnZW5lcmF0b3JcIiksXG4gICAgICApLFxuICAgIClcbiAgICAuYW5kVGhlbigoeyBnZW5lcmF0b3IsIHBheWxvYWQgfSkgPT5cbiAgICAgIHRyYWNrU3RlcChcbiAgICAgICAgcHJlc2VudGVyLFxuICAgICAgICBcIkNyZWF0aW5nIGVudmlyb25tZW50Li4uXCIsXG4gICAgICAgICgpID0+IHJ1bkRlcGxveW1lbnRFbnZpcm9ubWVudEFjdGlvbnMoZ2VuZXJhdG9yLCBwYXlsb2FkKSxcbiAgICAgICAgYXNFcnJvcihcIkZhaWxlZCB0byBjcmVhdGUgdGhlIGRlcGxveW1lbnQgZW52aXJvbm1lbnRcIiksXG4gICAgICApLFxuICAgIClcbiAgICAuYW5kVGhlbigocGF5bG9hZCkgPT5cbiAgICAgIGF1dGhvcml6ZUNsb3VkQWNjb3VudHMoYXV0aG9yaXphdGlvblNlcnZpY2UpKHBheWxvYWQpLm1hcChcbiAgICAgICAgKGF1dGhvcml6YXRpb25QcnMpID0+ICh7XG4gICAgICAgICAgYXV0aG9yaXphdGlvblBycyxcbiAgICAgICAgfSksXG4gICAgICApLFxuICAgICk7XG5cbmV4cG9ydCBjb25zdCBtYWtlQWRkQ29tbWFuZCA9IChyZXF1aXJlR2l0SHViQXV0aDogR2l0SHViQXV0aEZhY3RvcnkpOiBDb21tYW5kID0+XG4gIG5ldyBDb21tYW5kKClcbiAgICAubmFtZShcImFkZFwiKVxuICAgIC5kZXNjcmlwdGlvbihcIkFkZCBhIG5ldyBjb21wb25lbnQgdG8geW91ciB3b3Jrc3BhY2VcIilcbiAgICAuYWRkQ29tbWFuZChcbiAgICAgIG5ldyBDb21tYW5kKFwiZW52aXJvbm1lbnRcIilcbiAgICAgICAgLmRlc2NyaXB0aW9uKFwiQWRkIGEgbmV3IGRlcGxveW1lbnQgZW52aXJvbm1lbnRcIilcbiAgICAgICAgLmFjdGlvbihhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgY29uc3QgeyBvdXRwdXQgfSA9IHRoaXMub3B0c1dpdGhHbG9iYWxzPEdsb2JhbE9wdGlvbnM+KCk7XG4gICAgICAgICAgY29uc3QgcHJlc2VudGVyID0gY3JlYXRlQ29tbWFuZFByZXNlbnRlcihvdXRwdXQpO1xuXG4gICAgICAgICAgYXdhaXQgcmVxdWlyZUdpdEh1YkF1dGgoKVxuICAgICAgICAgICAgLmFuZFRoZW4oKHsgYXV0aG9yaXphdGlvblNlcnZpY2UsIGdpdEh1YlNlcnZpY2UgfSkgPT5cbiAgICAgICAgICAgICAgYWRkRW52aXJvbm1lbnRBY3Rpb24oXG4gICAgICAgICAgICAgICAgYXV0aG9yaXphdGlvblNlcnZpY2UsXG4gICAgICAgICAgICAgICAgZ2l0SHViU2VydmljZSxcbiAgICAgICAgICAgICAgICBwcmVzZW50ZXIsXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAubWF0Y2goXG4gICAgICAgICAgICAgIHJlcG9ydFN1bW1hcnkocHJlc2VudGVyLCBvdXRwdXQpLFxuICAgICAgICAgICAgICByZXBvcnRDb21tYW5kRXJyb3IodGhpcywgcHJlc2VudGVyLCBvdXRwdXQpLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSksXG4gICAgKTtcbiJdfQ==
|
|
113
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2FkYXB0ZXJzL2NvbW1hbmRlci9jb21tYW5kcy9hZGQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzdDLE9BQU8sS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUMxQjs7Ozs7Ozs7R0FRRztBQUNILE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDcEMsT0FBTyxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFPbEQsT0FBTyxFQUdMLCtCQUErQixHQUNoQyxNQUFNLGtDQUFrQyxDQUFDO0FBRTFDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBRWxFLE9BQU8sRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDMUUsT0FBTyxFQUNMLG1DQUFtQyxFQUNuQyxlQUFlLEVBQ2YsK0JBQStCLEdBQ2hDLE1BQU0scUJBQXFCLENBQUM7QUFDN0IsT0FBTyxFQUFFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ25FLE9BQU8sRUFDTCxzQkFBc0IsRUFDdEIsaUJBQWlCLEdBQ2xCLE1BQU0sd0JBQXdCLENBQUM7QUFDaEMsT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0sV0FBVyxDQUFDO0FBRTNEOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sc0JBQXNCLEdBQ2pDLENBQUMsb0JBQTBDLEVBQUUsRUFBRSxDQUMvQyxDQUNFLFVBQThCLEVBQ2EsRUFBRTtJQUM3QyxNQUFNLG9CQUFvQixHQUN4QixVQUFVLENBQUMsSUFBSSxFQUFFLHlCQUF5QixJQUFJLEVBQUUsQ0FBQztJQUVuRCxJQUFJLG9CQUFvQixDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUN0QyxPQUFPLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNyQixDQUFDO0lBRUQsTUFBTSxNQUFNLEdBQUcsU0FBUyxDQUFDLENBQUMsUUFBUSxFQUFFLGlCQUFpQixDQUFDLENBQUMsQ0FBQztJQUN4RCxNQUFNLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxHQUFHLFVBQVUsQ0FBQyxHQUFHLENBQUM7SUFDeEMsTUFBTSxRQUFRLEdBQUcsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUM7SUFFeEMsTUFBTSxVQUFVLEdBQUcsS0FBSyxJQUFvQyxFQUFFO1FBQzVELE1BQU0sT0FBTyxHQUEwQixFQUFFLENBQUM7UUFFMUMsS0FBSyxNQUFNLE9BQU8sSUFBSSxvQkFBb0IsRUFBRSxDQUFDO1lBQzNDLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUM7Z0JBQzlDLE1BQU0sQ0FBQyxJQUFJLENBQ1QsNERBQTRELEVBQzVELEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxXQUFXLEVBQUUsQ0FDakMsQ0FBQztnQkFDRixTQUFTO1lBQ1gsQ0FBQztZQUVELE1BQU0sUUFBUSxHQUFHLGFBQWEsQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLENBQUM7WUFDeEQsTUFBTSxLQUFLLEdBQUcsK0JBQStCLENBQUMsU0FBUyxDQUFDO2dCQUN0RCxtQkFBbUIsRUFBRSxHQUFHLE1BQU0sSUFBSSxRQUFRLElBQUksUUFBUSxrQkFBa0I7Z0JBQ3hFLFFBQVE7Z0JBQ1IsTUFBTTtnQkFDTixRQUFRLEVBQUUsVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJO2dCQUNoQyxnQkFBZ0IsRUFBRSxPQUFPLENBQUMsV0FBVzthQUN0QyxDQUFDLENBQUM7WUFFSCxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUNuQixNQUFNLENBQUMsSUFBSSxDQUFDLHFEQUFxRCxFQUFFO29CQUNqRSxPQUFPLEVBQUUsT0FBTyxDQUFDLFdBQVc7aUJBQzdCLENBQUMsQ0FBQztnQkFDSCxTQUFTO1lBQ1gsQ0FBQztZQUVELE1BQU0sTUFBTSxHQUFHLE1BQU0sb0JBQW9CLENBQUMsb0JBQW9CLENBQzVELEtBQUssQ0FBQyxJQUFJLENBQ1gsQ0FBQztZQUVGLE1BQU0sQ0FBQyxLQUFLLENBQ1YsQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQ3hDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FDUixNQUFNLENBQUMsSUFBSSxDQUFDLHFEQUFxRCxFQUFFO2dCQUNqRSxPQUFPLEVBQUUsT0FBTyxDQUFDLFdBQVc7Z0JBQzVCLEtBQUssRUFBRSxLQUFLLENBQUMsT0FBTzthQUNyQixDQUFDLENBQ0wsQ0FBQztRQUNKLENBQUM7UUFFRCxPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDLENBQUM7SUFFRixPQUFPLFdBQVcsQ0FBQyxXQUFXLENBQUMsVUFBVSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUNqRSxPQUFPLENBQUMsRUFBRSxDQUFDLENBQ1osQ0FBQztBQUNKLENBQUMsQ0FBQztBQU1KLE1BQU0sY0FBYyxHQUFHLENBQUMsTUFBaUIsRUFBRSxFQUFFO0lBQzNDLE1BQU0sRUFBRSxnQkFBZ0IsRUFBRSxHQUFHLE1BQU0sQ0FBQztJQUNwQyxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLDJDQUEyQyxDQUFDLENBQUMsQ0FBQztJQUUzRSxJQUFJLElBQUksR0FBRyxDQUFDLENBQUM7SUFDYixPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUM7SUFDL0MsTUFBTSxVQUFVLEdBQUcsZ0JBQWdCLENBQUMsTUFBTSxDQUN4QyxDQUFDLEVBQUUsRUFBK0MsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksSUFBSSxDQUNwRSxDQUFDO0lBQ0YsSUFBSSxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQzFCLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLEVBQUUsbURBQW1ELENBQUMsQ0FBQztRQUMxRSxLQUFLLE1BQU0sTUFBTSxJQUFJLFVBQVUsRUFBRSxDQUFDO1lBQ2hDLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUSxLQUFLLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDckQsQ0FBQztJQUNILENBQUM7SUFDRCxPQUFPLENBQUMsR0FBRyxDQUNULEdBQUcsSUFBSSxXQUFXLEtBQUssQ0FBQyxTQUFTLENBQUMsc0NBQXNDLENBQUMsaUNBQWlDLENBQzNHLENBQUM7QUFDSixDQUFDLENBQUM7QUFFRjs7O0dBR0c7QUFDSCxNQUFNLGFBQWEsR0FDakIsQ0FBQyxTQUEyQixFQUFFLFVBQTJCLEVBQUUsRUFBRSxDQUM3RCxDQUFDLE1BQWlCLEVBQVEsRUFBRTtJQUMxQixJQUFJLFVBQVUsS0FBSyxNQUFNLEVBQUUsQ0FBQztRQUMxQixTQUFTLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ2pDLENBQUM7U0FBTSxDQUFDO1FBQ04sY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3pCLENBQUM7QUFDSCxDQUFDLENBQUM7QUFFSixNQUFNLFNBQVMsR0FBRyxDQUNoQixTQUEyQixFQUMzQixJQUFZLEVBQ1osSUFBc0IsRUFDdEIsUUFBK0IsRUFDWixFQUFFLENBQ3JCLFdBQVcsQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUM7QUFFckUsTUFBTSxvQkFBb0IsR0FBRyxDQUMzQixvQkFBMEMsRUFDMUMsYUFBNEIsRUFDNUIsU0FBMkIsRUFDSSxFQUFFLENBQ2pDLDhCQUE4QixDQUFDLFNBQVMsQ0FBQztLQUN0QyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQ1osU0FBUyxDQUNQLFNBQVMsRUFDVCx1Q0FBdUMsRUFDdkMsZUFBZSxFQUNmLE9BQU8sQ0FBQywyQkFBMkIsQ0FBQyxDQUNyQyxDQUNGO0tBQ0EsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7QUFDaEIsc0VBQXNFO0FBQ3RFLGlFQUFpRTtBQUNqRSxXQUFXLENBQUMsV0FBVyxDQUNyQixtQ0FBbUMsQ0FBQyxJQUFJLEVBQUUsYUFBYSxDQUFDLEVBQ3hELE9BQU8sQ0FBQyxvREFBb0QsQ0FBQyxDQUM5RCxDQUNGO0tBQ0EsT0FBTyxDQUFDLENBQUMsRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxDQUNsQyxTQUFTLENBQ1AsU0FBUyxFQUNULHlCQUF5QixFQUN6QixHQUFHLEVBQUUsQ0FBQywrQkFBK0IsQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLEVBQ3pELE9BQU8sQ0FBQyw2Q0FBNkMsQ0FBQyxDQUN2RCxDQUNGO0tBQ0EsT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FDbkIsc0JBQXNCLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLENBQ3ZELENBQUMsZ0JBQWdCLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDckIsZ0JBQWdCO0NBQ2pCLENBQUMsQ0FDSCxDQUNGLENBQUM7QUFFTixNQUFNLENBQUMsTUFBTSxjQUFjLEdBQUcsQ0FDNUIsaUJBQW9DLEVBQ3BDLEdBQVcsRUFDRixFQUFFLENBQ1gsSUFBSSxPQUFPLEVBQUU7S0FDVixJQUFJLENBQUMsS0FBSyxDQUFDO0tBQ1gsV0FBVyxDQUFDLHVDQUF1QyxDQUFDO0tBQ3BELFVBQVUsQ0FDVCxJQUFJLE9BQU8sQ0FBQyxhQUFhLENBQUM7S0FDdkIsV0FBVyxDQUFDLGtDQUFrQyxDQUFDO0tBQy9DLE1BQU0sQ0FBQyxLQUFLO0lBQ1gsTUFBTSxFQUFFLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxlQUFlLEVBQWlCLENBQUM7SUFDekQsTUFBTSxVQUFVLEdBQUcsaUJBQWlCLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ2xELE1BQU0sU0FBUyxHQUFHLHNCQUFzQixDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBRXJELE1BQU0saUJBQWlCLEVBQUU7U0FDdEIsT0FBTyxDQUFDLENBQUMsRUFBRSxvQkFBb0IsRUFBRSxhQUFhLEVBQUUsRUFBRSxFQUFFLENBQ25ELG9CQUFvQixDQUNsQixvQkFBb0IsRUFDcEIsYUFBYSxFQUNiLFNBQVMsQ0FDVixDQUNGO1NBQ0EsS0FBSyxDQUNKLGFBQWEsQ0FBQyxTQUFTLEVBQUUsVUFBVSxDQUFDLEVBQ3BDLGtCQUFrQixDQUFDLElBQUksRUFBRSxTQUFTLEVBQUUsVUFBVSxDQUFDLENBQ2hELENBQUM7QUFDTixDQUFDLENBQUMsQ0FDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZ2V0TG9nZ2VyIH0gZnJvbSBcIkBsb2d0YXBlL2xvZ3RhcGVcIjtcbmltcG9ydCBjaGFsayBmcm9tIFwiY2hhbGtcIjtcbi8qKlxuICogQWRkIGNvbW1hbmQgLSBTY2FmZm9sZCBuZXcgY29tcG9uZW50cyBpbnRvIGV4aXN0aW5nIHdvcmtzcGFjZXNcbiAqXG4gKiBUaGlzIG1vZHVsZSBpbXBsZW1lbnRzIHRoZSBgZHggYWRkYCBjb21tYW5kIHdoaWNoIGFsbG93cyBkZXZlbG9wZXJzIHRvIHNjYWZmb2xkXG4gKiBuZXcgY29tcG9uZW50cyBpbnRvIHRoZWlyIGV4aXN0aW5nIHdvcmtzcGFjZSBmb2xsb3dpbmcgRGV2RXggZ3VpZGVsaW5lcy5cbiAqXG4gKiBDdXJyZW50bHkgc3VwcG9ydGVkIGNvbXBvbmVudHM6XG4gKiAtIGVudmlyb25tZW50OiBBZGQgYSBuZXcgZGVwbG95bWVudCBlbnZpcm9ubWVudCB0byB0aGUgcHJvamVjdFxuICovXG5pbXBvcnQgeyBDb21tYW5kIH0gZnJvbSBcImNvbW1hbmRlclwiO1xuaW1wb3J0IHsgb2tBc3luYywgUmVzdWx0QXN5bmMgfSBmcm9tIFwibmV2ZXJ0aHJvd1wiO1xuXG5pbXBvcnQgdHlwZSB7IENvbW1hbmRQcmVzZW50ZXIgfSBmcm9tIFwiLi4vLi4vLi4vZG9tYWluL2NvbW1hbmQtcHJlc2VudGVyLmpzXCI7XG5pbXBvcnQgdHlwZSB7IFBheWxvYWQgYXMgRW52aXJvbm1lbnRQYXlsb2FkIH0gZnJvbSBcIi4uLy4uL3Bsb3AvZ2VuZXJhdG9ycy9lbnZpcm9ubWVudC9pbmRleC5qc1wiO1xuaW1wb3J0IHR5cGUgeyBDbGlFbnYgfSBmcm9tIFwiLi4vZW52LmpzXCI7XG5pbXBvcnQgdHlwZSB7IEdsb2JhbE9wdGlvbnMgfSBmcm9tIFwiLi4vZ2xvYmFsLW9wdGlvbnMuanNcIjtcblxuaW1wb3J0IHtcbiAgQXV0aG9yaXphdGlvblJlc3VsdCxcbiAgQXV0aG9yaXphdGlvblNlcnZpY2UsXG4gIHJlcXVlc3RBdXRob3JpemF0aW9uSW5wdXRTY2hlbWEsXG59IGZyb20gXCIuLi8uLi8uLi9kb21haW4vYXV0aG9yaXphdGlvbi5qc1wiO1xuaW1wb3J0IHsgR2l0SHViQXV0aEZhY3RvcnkgfSBmcm9tIFwiLi4vLi4vLi4vZG9tYWluL2RlcGVuZGVuY2llcy5qc1wiO1xuaW1wb3J0IHsgZW52aXJvbm1lbnRTaG9ydCB9IGZyb20gXCIuLi8uLi8uLi9kb21haW4vZW52aXJvbm1lbnQuanNcIjtcbmltcG9ydCB7IHR5cGUgR2l0SHViU2VydmljZSB9IGZyb20gXCIuLi8uLi8uLi9kb21haW4vZ2l0aHViLmpzXCI7XG5pbXBvcnQgeyBpc0F6dXJlTG9jYXRpb24sIGxvY2F0aW9uU2hvcnQgfSBmcm9tIFwiLi4vLi4vYXp1cmUvbG9jYXRpb25zLmpzXCI7XG5pbXBvcnQge1xuICBjb2xsZWN0RGVwbG95bWVudEVudmlyb25tZW50UGF5bG9hZCxcbiAgZ2V0UGxvcEluc3RhbmNlLFxuICBydW5EZXBsb3ltZW50RW52aXJvbm1lbnRBY3Rpb25zLFxufSBmcm9tIFwiLi4vLi4vcGxvcC9pbmRleC5qc1wiO1xuaW1wb3J0IHsgYXNFcnJvciwgcmVwb3J0Q29tbWFuZEVycm9yIH0gZnJvbSBcIi4uL2NvbW1hbmQtZXJyb3JzLmpzXCI7XG5pbXBvcnQge1xuICBjcmVhdGVDb21tYW5kUHJlc2VudGVyLFxuICByZXNvbHZlT3V0cHV0TW9kZSxcbn0gZnJvbSBcIi4uL3ByZXNlbnRlcnMvaW5kZXguanNcIjtcbmltcG9ydCB7IHJ1bkFkZEVudmlyb25tZW50UHJlY29uZGl0aW9ucyB9IGZyb20gXCIuL2luaXQuanNcIjtcblxuLyoqXG4gKiBBdXRob3JpemUgYSBDbG91ZCBBY2NvdW50IChBenVyZSBTdWJzY3JpcHRpb24sIEFXUyBBY2NvdW50LCAuLi4pLCBjcmVhdGluZyBhIFB1bGwgUmVxdWVzdCBmb3IgZWFjaCBhY2NvdW50IHRoYXQgcmVxdWlyZXMgYXV0aG9yaXphdGlvbi5cbiAqL1xuZXhwb3J0IGNvbnN0IGF1dGhvcml6ZUNsb3VkQWNjb3VudHMgPVxuICAoYXV0aG9yaXphdGlvblNlcnZpY2U6IEF1dGhvcml6YXRpb25TZXJ2aWNlKSA9PlxuICAoXG4gICAgZW52UGF5bG9hZDogRW52aXJvbm1lbnRQYXlsb2FkLFxuICApOiBSZXN1bHRBc3luYzxBdXRob3JpemF0aW9uUmVzdWx0W10sIG5ldmVyPiA9PiB7XG4gICAgY29uc3QgYWNjb3VudHNUb0luaXRpYWxpemUgPVxuICAgICAgZW52UGF5bG9hZC5pbml0Py5jbG91ZEFjY291bnRzVG9Jbml0aWFsaXplID8/IFtdO1xuXG4gICAgaWYgKGFjY291bnRzVG9Jbml0aWFsaXplLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIG9rQXN5bmMoW10pO1xuICAgIH1cblxuICAgIGNvbnN0IGxvZ2dlciA9IGdldExvZ2dlcihbXCJkeC1jbGlcIiwgXCJhZGQtZW52aXJvbm1lbnRcIl0pO1xuICAgIGNvbnN0IHsgbmFtZSwgcHJlZml4IH0gPSBlbnZQYXlsb2FkLmVudjtcbiAgICBjb25zdCBlbnZTaG9ydCA9IGVudmlyb25tZW50U2hvcnRbbmFtZV07XG5cbiAgICBjb25zdCByZXF1ZXN0QWxsID0gYXN5bmMgKCk6IFByb21pc2U8QXV0aG9yaXphdGlvblJlc3VsdFtdPiA9PiB7XG4gICAgICBjb25zdCByZXN1bHRzOiBBdXRob3JpemF0aW9uUmVzdWx0W10gPSBbXTtcblxuICAgICAgZm9yIChjb25zdCBhY2NvdW50IG9mIGFjY291bnRzVG9Jbml0aWFsaXplKSB7XG4gICAgICAgIGlmICghaXNBenVyZUxvY2F0aW9uKGFjY291bnQuZGVmYXVsdExvY2F0aW9uKSkge1xuICAgICAgICAgIGxvZ2dlci53YXJuKFxuICAgICAgICAgICAgXCJTa2lwcGluZyBhdXRob3JpemF0aW9uIGZvciB7YWNjb3VudH06IHVuc3VwcG9ydGVkIGxvY2F0aW9uXCIsXG4gICAgICAgICAgICB7IGFjY291bnQ6IGFjY291bnQuZGlzcGxheU5hbWUgfSxcbiAgICAgICAgICApO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbG9jU2hvcnQgPSBsb2NhdGlvblNob3J0W2FjY291bnQuZGVmYXVsdExvY2F0aW9uXTtcbiAgICAgICAgY29uc3QgaW5wdXQgPSByZXF1ZXN0QXV0aG9yaXphdGlvbklucHV0U2NoZW1hLnNhZmVQYXJzZSh7XG4gICAgICAgICAgYm9vdHN0cmFwSWRlbnRpdHlJZDogYCR7cHJlZml4fS0ke2VudlNob3J0fS0ke2xvY1Nob3J0fS1ib290c3RyYXAtaWQtMDFgLFxuICAgICAgICAgIGVudlNob3J0LFxuICAgICAgICAgIHByZWZpeCxcbiAgICAgICAgICByZXBvTmFtZTogZW52UGF5bG9hZC5naXRodWIucmVwbyxcbiAgICAgICAgICBzdWJzY3JpcHRpb25OYW1lOiBhY2NvdW50LmRpc3BsYXlOYW1lLFxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAoIWlucHV0LnN1Y2Nlc3MpIHtcbiAgICAgICAgICBsb2dnZXIud2FybihcIlNraXBwaW5nIGF1dGhvcml6YXRpb24gZm9yIHthY2NvdW50fTogaW52YWxpZCBpbnB1dFwiLCB7XG4gICAgICAgICAgICBhY2NvdW50OiBhY2NvdW50LmRpc3BsYXlOYW1lLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgYXV0aG9yaXphdGlvblNlcnZpY2UucmVxdWVzdEF1dGhvcml6YXRpb24oXG4gICAgICAgICAgaW5wdXQuZGF0YSxcbiAgICAgICAgKTtcblxuICAgICAgICByZXN1bHQubWF0Y2goXG4gICAgICAgICAgKGF1dGhSZXN1bHQpID0+IHJlc3VsdHMucHVzaChhdXRoUmVzdWx0KSxcbiAgICAgICAgICAoZXJyb3IpID0+XG4gICAgICAgICAgICBsb2dnZXIud2FybihcIkF1dGhvcml6YXRpb24gcmVxdWVzdCBmYWlsZWQgZm9yIHthY2NvdW50fToge2Vycm9yfVwiLCB7XG4gICAgICAgICAgICAgIGFjY291bnQ6IGFjY291bnQuZGlzcGxheU5hbWUsXG4gICAgICAgICAgICAgIGVycm9yOiBlcnJvci5tZXNzYWdlLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXN1bHRzO1xuICAgIH07XG5cbiAgICByZXR1cm4gUmVzdWx0QXN5bmMuZnJvbVByb21pc2UocmVxdWVzdEFsbCgpLCAoKSA9PiBbXSkub3JFbHNlKCgpID0+XG4gICAgICBva0FzeW5jKFtdKSxcbiAgICApO1xuICB9O1xuXG50eXBlIEFkZFJlc3VsdCA9IHtcbiAgYXV0aG9yaXphdGlvblByczogQXV0aG9yaXphdGlvblJlc3VsdFtdO1xufTtcblxuY29uc3QgZGlzcGxheVN1bW1hcnkgPSAocmVzdWx0OiBBZGRSZXN1bHQpID0+IHtcbiAgY29uc3QgeyBhdXRob3JpemF0aW9uUHJzIH0gPSByZXN1bHQ7XG4gIGNvbnNvbGUubG9nKGNoYWxrLmdyZWVuLmJvbGQoXCJcXG5DbG91ZCBlbnZpcm9ubWVudCBjcmVhdGVkIHN1Y2Nlc3NmdWxseSFcIikpO1xuXG4gIGxldCBzdGVwID0gMTtcbiAgY29uc29sZS5sb2coY2hhbGsuZ3JlZW4uYm9sZChcIlxcbk5leHQgU3RlcHM6XCIpKTtcbiAgY29uc3QgcHJzV2l0aFVybCA9IGF1dGhvcml6YXRpb25QcnMuZmlsdGVyKFxuICAgIChwcik6IHByIGlzIEF1dGhvcml6YXRpb25SZXN1bHQgJiB7IHVybDogc3RyaW5nIH0gPT4gcHIudXJsICE9IG51bGwsXG4gICk7XG4gIGlmIChwcnNXaXRoVXJsLmxlbmd0aCA+IDApIHtcbiAgICBjb25zb2xlLmxvZyhgJHtzdGVwKyt9LiBSZXZpZXcgdGhlIEF6dXJlIGF1dGhvcml6YXRpb24gUHVsbCBSZXF1ZXN0KHMpOmApO1xuICAgIGZvciAoY29uc3QgYXV0aFByIG9mIHByc1dpdGhVcmwpIHtcbiAgICAgIGNvbnNvbGUubG9nKGAgICAtICR7Y2hhbGsudW5kZXJsaW5lKGF1dGhQci51cmwpfWApO1xuICAgIH1cbiAgfVxuICBjb25zb2xlLmxvZyhcbiAgICBgJHtzdGVwfS4gVmlzaXQgJHtjaGFsay51bmRlcmxpbmUoXCJodHRwczovL2R4LnBhZ29wYS5pdC9nZXR0aW5nLXN0YXJ0ZWRcIil9IHRvIGRlcGxveSB5b3VyIGZpcnN0IHByb2plY3RcXG5gLFxuICApO1xufTtcblxuLyoqXG4gKiBSb3V0ZXMgdGhlIHN1Y2Nlc3NmdWwgb3V0Y29tZSB0aHJvdWdoIHRoZSBwcmVzZW50ZXI6IEpTT04gbW9kZSBlbWl0cyB0aGVcbiAqIHN0cnVjdHVyZWQgZW52ZWxvcGUgd2hpbGUgdGV4dCBtb2RlIHJlbmRlcnMgdGhlIGh1bWFuLXJlYWRhYmxlIHN1bW1hcnkuXG4gKi9cbmNvbnN0IHJlcG9ydFN1bW1hcnkgPVxuICAocHJlc2VudGVyOiBDb21tYW5kUHJlc2VudGVyLCBvdXRwdXRNb2RlOiBcImpzb25cIiB8IFwidGV4dFwiKSA9PlxuICAocmVzdWx0OiBBZGRSZXN1bHQpOiB2b2lkID0+IHtcbiAgICBpZiAob3V0cHV0TW9kZSA9PT0gXCJqc29uXCIpIHtcbiAgICAgIHByZXNlbnRlci5yZXBvcnRSZXN1bHQocmVzdWx0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgZGlzcGxheVN1bW1hcnkocmVzdWx0KTtcbiAgICB9XG4gIH07XG5cbmNvbnN0IHRyYWNrU3RlcCA9IDxULCBFPihcbiAgcHJlc2VudGVyOiBDb21tYW5kUHJlc2VudGVyLFxuICBuYW1lOiBzdHJpbmcsXG4gIHRhc2s6ICgpID0+IFByb21pc2U8VD4sXG4gIG1hcEVycm9yOiAoY2F1c2U6IHVua25vd24pID0+IEUsXG4pOiBSZXN1bHRBc3luYzxULCBFPiA9PlxuICBSZXN1bHRBc3luYy5mcm9tUHJvbWlzZShwcmVzZW50ZXIudHJhY2tTdGVwKG5hbWUsIHRhc2spLCBtYXBFcnJvcik7XG5cbmNvbnN0IGFkZEVudmlyb25tZW50QWN0aW9uID0gKFxuICBhdXRob3JpemF0aW9uU2VydmljZTogQXV0aG9yaXphdGlvblNlcnZpY2UsXG4gIGdpdEh1YlNlcnZpY2U6IEdpdEh1YlNlcnZpY2UsXG4gIHByZXNlbnRlcjogQ29tbWFuZFByZXNlbnRlcixcbik6IFJlc3VsdEFzeW5jPEFkZFJlc3VsdCwgRXJyb3I+ID0+XG4gIHJ1bkFkZEVudmlyb25tZW50UHJlY29uZGl0aW9ucyhwcmVzZW50ZXIpXG4gICAgLmFuZFRoZW4oKCkgPT5cbiAgICAgIHRyYWNrU3RlcChcbiAgICAgICAgcHJlc2VudGVyLFxuICAgICAgICBcIkluaXRpYWxpemluZyBlbnZpcm9ubWVudCBnZW5lcmF0b3IuLi5cIixcbiAgICAgICAgZ2V0UGxvcEluc3RhbmNlLFxuICAgICAgICBhc0Vycm9yKFwiRmFpbGVkIHRvIGluaXRpYWxpemUgcGxvcFwiKSxcbiAgICAgICksXG4gICAgKVxuICAgIC5hbmRUaGVuKChwbG9wKSA9PlxuICAgICAgLy8gVGhlIHByb21wdCBwaGFzZSBtdXN0IHJ1biBvdXRzaWRlIHRyYWNrU3RlcDogaW4gdGV4dCBtb2RlIHRyYWNrU3RlcFxuICAgICAgLy8gcmVuZGVycyBhIHNwaW5uZXIgdGhhdCBvY2N1cGllcyB0aGUgVFRZIGFuZCBoaWRlcyB0aGUgcHJvbXB0cy5cbiAgICAgIFJlc3VsdEFzeW5jLmZyb21Qcm9taXNlKFxuICAgICAgICBjb2xsZWN0RGVwbG95bWVudEVudmlyb25tZW50UGF5bG9hZChwbG9wLCBnaXRIdWJTZXJ2aWNlKSxcbiAgICAgICAgYXNFcnJvcihcIkZhaWxlZCB0byBydW4gdGhlIGRlcGxveW1lbnQgZW52aXJvbm1lbnQgZ2VuZXJhdG9yXCIpLFxuICAgICAgKSxcbiAgICApXG4gICAgLmFuZFRoZW4oKHsgZ2VuZXJhdG9yLCBwYXlsb2FkIH0pID0+XG4gICAgICB0cmFja1N0ZXAoXG4gICAgICAgIHByZXNlbnRlcixcbiAgICAgICAgXCJDcmVhdGluZyBlbnZpcm9ubWVudC4uLlwiLFxuICAgICAgICAoKSA9PiBydW5EZXBsb3ltZW50RW52aXJvbm1lbnRBY3Rpb25zKGdlbmVyYXRvciwgcGF5bG9hZCksXG4gICAgICAgIGFzRXJyb3IoXCJGYWlsZWQgdG8gY3JlYXRlIHRoZSBkZXBsb3ltZW50IGVudmlyb25tZW50XCIpLFxuICAgICAgKSxcbiAgICApXG4gICAgLmFuZFRoZW4oKHBheWxvYWQpID0+XG4gICAgICBhdXRob3JpemVDbG91ZEFjY291bnRzKGF1dGhvcml6YXRpb25TZXJ2aWNlKShwYXlsb2FkKS5tYXAoXG4gICAgICAgIChhdXRob3JpemF0aW9uUHJzKSA9PiAoe1xuICAgICAgICAgIGF1dGhvcml6YXRpb25QcnMsXG4gICAgICAgIH0pLFxuICAgICAgKSxcbiAgICApO1xuXG5leHBvcnQgY29uc3QgbWFrZUFkZENvbW1hbmQgPSAoXG4gIHJlcXVpcmVHaXRIdWJBdXRoOiBHaXRIdWJBdXRoRmFjdG9yeSxcbiAgZW52OiBDbGlFbnYsXG4pOiBDb21tYW5kID0+XG4gIG5ldyBDb21tYW5kKClcbiAgICAubmFtZShcImFkZFwiKVxuICAgIC5kZXNjcmlwdGlvbihcIkFkZCBhIG5ldyBjb21wb25lbnQgdG8geW91ciB3b3Jrc3BhY2VcIilcbiAgICAuYWRkQ29tbWFuZChcbiAgICAgIG5ldyBDb21tYW5kKFwiZW52aXJvbm1lbnRcIilcbiAgICAgICAgLmRlc2NyaXB0aW9uKFwiQWRkIGEgbmV3IGRlcGxveW1lbnQgZW52aXJvbm1lbnRcIilcbiAgICAgICAgLmFjdGlvbihhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgY29uc3QgeyBvdXRwdXQgfSA9IHRoaXMub3B0c1dpdGhHbG9iYWxzPEdsb2JhbE9wdGlvbnM+KCk7XG4gICAgICAgICAgY29uc3Qgb3V0cHV0TW9kZSA9IHJlc29sdmVPdXRwdXRNb2RlKGVudiwgb3V0cHV0KTtcbiAgICAgICAgICBjb25zdCBwcmVzZW50ZXIgPSBjcmVhdGVDb21tYW5kUHJlc2VudGVyKG91dHB1dE1vZGUpO1xuXG4gICAgICAgICAgYXdhaXQgcmVxdWlyZUdpdEh1YkF1dGgoKVxuICAgICAgICAgICAgLmFuZFRoZW4oKHsgYXV0aG9yaXphdGlvblNlcnZpY2UsIGdpdEh1YlNlcnZpY2UgfSkgPT5cbiAgICAgICAgICAgICAgYWRkRW52aXJvbm1lbnRBY3Rpb24oXG4gICAgICAgICAgICAgICAgYXV0aG9yaXphdGlvblNlcnZpY2UsXG4gICAgICAgICAgICAgICAgZ2l0SHViU2VydmljZSxcbiAgICAgICAgICAgICAgICBwcmVzZW50ZXIsXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAubWF0Y2goXG4gICAgICAgICAgICAgIHJlcG9ydFN1bW1hcnkocHJlc2VudGVyLCBvdXRwdXRNb2RlKSxcbiAgICAgICAgICAgICAgcmVwb3J0Q29tbWFuZEVycm9yKHRoaXMsIHByZXNlbnRlciwgb3V0cHV0TW9kZSksXG4gICAgICAgICAgICApO1xuICAgICAgICB9KSxcbiAgICApO1xuIl19
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { Command } from "commander";
|
|
2
2
|
import type { ApplyCodemodById } from "../../../use-cases/apply-codemod.js";
|
|
3
3
|
import type { ListCodemods } from "../../../use-cases/list-codemods.js";
|
|
4
|
+
import type { CliEnv } from "../env.js";
|
|
4
5
|
export type CodemodCommandDependencies = {
|
|
5
6
|
applyCodemodById: ApplyCodemodById;
|
|
6
7
|
listCodemods: ListCodemods;
|
|
7
8
|
};
|
|
8
|
-
export declare const makeCodemodCommand: ({ applyCodemodById, listCodemods
|
|
9
|
+
export declare const makeCodemodCommand: ({ applyCodemodById, listCodemods }: CodemodCommandDependencies, env: CliEnv) => Command;
|
|
@@ -1,30 +1,32 @@
|
|
|
1
1
|
import { Command } from "commander";
|
|
2
2
|
import { ResultAsync } from "neverthrow";
|
|
3
3
|
import { asError, reportCommandError } from "../command-errors.js";
|
|
4
|
-
import { createCommandPresenter } from "../presenters/index.js";
|
|
5
|
-
export const makeCodemodCommand = ({ applyCodemodById, listCodemods,
|
|
4
|
+
import { createCommandPresenter, resolveOutputMode, } from "../presenters/index.js";
|
|
5
|
+
export const makeCodemodCommand = ({ applyCodemodById, listCodemods }, env) => new Command("codemod")
|
|
6
6
|
.description("Manage and apply migration scripts to the repository")
|
|
7
7
|
.addCommand(new Command("list")
|
|
8
8
|
.description("List available migration scripts")
|
|
9
9
|
.action(async function () {
|
|
10
10
|
const { output } = this.optsWithGlobals();
|
|
11
|
-
const
|
|
11
|
+
const outputMode = resolveOutputMode(env, output);
|
|
12
|
+
const presenter = createCommandPresenter(outputMode);
|
|
12
13
|
await listCodemods()
|
|
13
14
|
.map((codemods) => codemods.map(({ description, id }) => ({ description, id })))
|
|
14
15
|
.andTee((codemods) => presenter.reportResult(codemods))
|
|
15
|
-
.orTee(reportCommandError(this, presenter,
|
|
16
|
+
.orTee(reportCommandError(this, presenter, outputMode));
|
|
16
17
|
}))
|
|
17
18
|
.addCommand(new Command("apply")
|
|
18
19
|
.argument("<id>", "The id of the codemod to apply")
|
|
19
20
|
.description("Apply migration scripts to the repository")
|
|
20
21
|
.action(async function (id) {
|
|
21
22
|
const { output } = this.optsWithGlobals();
|
|
22
|
-
const
|
|
23
|
+
const outputMode = resolveOutputMode(env, output);
|
|
24
|
+
const presenter = createCommandPresenter(outputMode);
|
|
23
25
|
await ResultAsync.fromPromise(presenter.trackStep(`Applying codemod ${id}...`, () => applyCodemodById(id).match(() => undefined, (error) => {
|
|
24
26
|
throw error;
|
|
25
27
|
})), asError(`Failed to apply codemod ${id}`))
|
|
26
28
|
.map(() => ({ id }))
|
|
27
29
|
.andTee((result) => presenter.reportResult(result))
|
|
28
|
-
.orTee(reportCommandError(this, presenter,
|
|
30
|
+
.orTee(reportCommandError(this, presenter, outputMode));
|
|
29
31
|
}));
|
|
30
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
32
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29kZW1vZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9hZGFwdGVycy9jb21tYW5kZXIvY29tbWFuZHMvY29kZW1vZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFPekMsT0FBTyxFQUFFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ25FLE9BQU8sRUFDTCxzQkFBc0IsRUFDdEIsaUJBQWlCLEdBQ2xCLE1BQU0sd0JBQXdCLENBQUM7QUFPaEMsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcsQ0FDaEMsRUFBRSxnQkFBZ0IsRUFBRSxZQUFZLEVBQThCLEVBQzlELEdBQVcsRUFDWCxFQUFFLENBQ0YsSUFBSSxPQUFPLENBQUMsU0FBUyxDQUFDO0tBQ25CLFdBQVcsQ0FBQyxzREFBc0QsQ0FBQztLQUNuRSxVQUFVLENBQ1QsSUFBSSxPQUFPLENBQUMsTUFBTSxDQUFDO0tBQ2hCLFdBQVcsQ0FBQyxrQ0FBa0MsQ0FBQztLQUMvQyxNQUFNLENBQUMsS0FBSztJQUNYLE1BQU0sRUFBRSxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsZUFBZSxFQUFpQixDQUFDO0lBQ3pELE1BQU0sVUFBVSxHQUFHLGlCQUFpQixDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNsRCxNQUFNLFNBQVMsR0FBRyxzQkFBc0IsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUVyRCxNQUFNLFlBQVksRUFBRTtTQUNqQixHQUFHLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUNoQixRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxXQUFXLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxXQUFXLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUM3RDtTQUNBLE1BQU0sQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQztTQUN0RCxLQUFLLENBQUMsa0JBQWtCLENBQUMsSUFBSSxFQUFFLFNBQVMsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDO0FBQzVELENBQUMsQ0FBQyxDQUNMO0tBQ0EsVUFBVSxDQUNULElBQUksT0FBTyxDQUFDLE9BQU8sQ0FBQztLQUNqQixRQUFRLENBQUMsTUFBTSxFQUFFLGdDQUFnQyxDQUFDO0tBQ2xELFdBQVcsQ0FBQywyQ0FBMkMsQ0FBQztLQUN4RCxNQUFNLENBQUMsS0FBSyxXQUFXLEVBQUU7SUFDeEIsTUFBTSxFQUFFLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxlQUFlLEVBQWlCLENBQUM7SUFDekQsTUFBTSxVQUFVLEdBQUcsaUJBQWlCLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ2xELE1BQU0sU0FBUyxHQUFHLHNCQUFzQixDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBRXJELE1BQU0sV0FBVyxDQUFDLFdBQVcsQ0FDM0IsU0FBUyxDQUFDLFNBQVMsQ0FBQyxvQkFBb0IsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLENBQ3BELGdCQUFnQixDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FDeEIsR0FBRyxFQUFFLENBQUMsU0FBUyxFQUNmLENBQUMsS0FBSyxFQUFFLEVBQUU7UUFDUixNQUFNLEtBQUssQ0FBQztJQUNkLENBQUMsQ0FDRixDQUNGLEVBQ0QsT0FBTyxDQUFDLDJCQUEyQixFQUFFLEVBQUUsQ0FBQyxDQUN6QztTQUNFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztTQUNuQixNQUFNLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDbEQsS0FBSyxDQUFDLGtCQUFrQixDQUFDLElBQUksRUFBRSxTQUFTLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQztBQUM1RCxDQUFDLENBQUMsQ0FDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbWFuZCB9IGZyb20gXCJjb21tYW5kZXJcIjtcbmltcG9ydCB7IFJlc3VsdEFzeW5jIH0gZnJvbSBcIm5ldmVydGhyb3dcIjtcblxuaW1wb3J0IHR5cGUgeyBBcHBseUNvZGVtb2RCeUlkIH0gZnJvbSBcIi4uLy4uLy4uL3VzZS1jYXNlcy9hcHBseS1jb2RlbW9kLmpzXCI7XG5pbXBvcnQgdHlwZSB7IExpc3RDb2RlbW9kcyB9IGZyb20gXCIuLi8uLi8uLi91c2UtY2FzZXMvbGlzdC1jb2RlbW9kcy5qc1wiO1xuaW1wb3J0IHR5cGUgeyBDbGlFbnYgfSBmcm9tIFwiLi4vZW52LmpzXCI7XG5pbXBvcnQgdHlwZSB7IEdsb2JhbE9wdGlvbnMgfSBmcm9tIFwiLi4vZ2xvYmFsLW9wdGlvbnMuanNcIjtcblxuaW1wb3J0IHsgYXNFcnJvciwgcmVwb3J0Q29tbWFuZEVycm9yIH0gZnJvbSBcIi4uL2NvbW1hbmQtZXJyb3JzLmpzXCI7XG5pbXBvcnQge1xuICBjcmVhdGVDb21tYW5kUHJlc2VudGVyLFxuICByZXNvbHZlT3V0cHV0TW9kZSxcbn0gZnJvbSBcIi4uL3ByZXNlbnRlcnMvaW5kZXguanNcIjtcblxuZXhwb3J0IHR5cGUgQ29kZW1vZENvbW1hbmREZXBlbmRlbmNpZXMgPSB7XG4gIGFwcGx5Q29kZW1vZEJ5SWQ6IEFwcGx5Q29kZW1vZEJ5SWQ7XG4gIGxpc3RDb2RlbW9kczogTGlzdENvZGVtb2RzO1xufTtcblxuZXhwb3J0IGNvbnN0IG1ha2VDb2RlbW9kQ29tbWFuZCA9IChcbiAgeyBhcHBseUNvZGVtb2RCeUlkLCBsaXN0Q29kZW1vZHMgfTogQ29kZW1vZENvbW1hbmREZXBlbmRlbmNpZXMsXG4gIGVudjogQ2xpRW52LFxuKSA9PlxuICBuZXcgQ29tbWFuZChcImNvZGVtb2RcIilcbiAgICAuZGVzY3JpcHRpb24oXCJNYW5hZ2UgYW5kIGFwcGx5IG1pZ3JhdGlvbiBzY3JpcHRzIHRvIHRoZSByZXBvc2l0b3J5XCIpXG4gICAgLmFkZENvbW1hbmQoXG4gICAgICBuZXcgQ29tbWFuZChcImxpc3RcIilcbiAgICAgICAgLmRlc2NyaXB0aW9uKFwiTGlzdCBhdmFpbGFibGUgbWlncmF0aW9uIHNjcmlwdHNcIilcbiAgICAgICAgLmFjdGlvbihhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgY29uc3QgeyBvdXRwdXQgfSA9IHRoaXMub3B0c1dpdGhHbG9iYWxzPEdsb2JhbE9wdGlvbnM+KCk7XG4gICAgICAgICAgY29uc3Qgb3V0cHV0TW9kZSA9IHJlc29sdmVPdXRwdXRNb2RlKGVudiwgb3V0cHV0KTtcbiAgICAgICAgICBjb25zdCBwcmVzZW50ZXIgPSBjcmVhdGVDb21tYW5kUHJlc2VudGVyKG91dHB1dE1vZGUpO1xuXG4gICAgICAgICAgYXdhaXQgbGlzdENvZGVtb2RzKClcbiAgICAgICAgICAgIC5tYXAoKGNvZGVtb2RzKSA9PlxuICAgICAgICAgICAgICBjb2RlbW9kcy5tYXAoKHsgZGVzY3JpcHRpb24sIGlkIH0pID0+ICh7IGRlc2NyaXB0aW9uLCBpZCB9KSksXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuYW5kVGVlKChjb2RlbW9kcykgPT4gcHJlc2VudGVyLnJlcG9ydFJlc3VsdChjb2RlbW9kcykpXG4gICAgICAgICAgICAub3JUZWUocmVwb3J0Q29tbWFuZEVycm9yKHRoaXMsIHByZXNlbnRlciwgb3V0cHV0TW9kZSkpO1xuICAgICAgICB9KSxcbiAgICApXG4gICAgLmFkZENvbW1hbmQoXG4gICAgICBuZXcgQ29tbWFuZChcImFwcGx5XCIpXG4gICAgICAgIC5hcmd1bWVudChcIjxpZD5cIiwgXCJUaGUgaWQgb2YgdGhlIGNvZGVtb2QgdG8gYXBwbHlcIilcbiAgICAgICAgLmRlc2NyaXB0aW9uKFwiQXBwbHkgbWlncmF0aW9uIHNjcmlwdHMgdG8gdGhlIHJlcG9zaXRvcnlcIilcbiAgICAgICAgLmFjdGlvbihhc3luYyBmdW5jdGlvbiAoaWQpIHtcbiAgICAgICAgICBjb25zdCB7IG91dHB1dCB9ID0gdGhpcy5vcHRzV2l0aEdsb2JhbHM8R2xvYmFsT3B0aW9ucz4oKTtcbiAgICAgICAgICBjb25zdCBvdXRwdXRNb2RlID0gcmVzb2x2ZU91dHB1dE1vZGUoZW52LCBvdXRwdXQpO1xuICAgICAgICAgIGNvbnN0IHByZXNlbnRlciA9IGNyZWF0ZUNvbW1hbmRQcmVzZW50ZXIob3V0cHV0TW9kZSk7XG5cbiAgICAgICAgICBhd2FpdCBSZXN1bHRBc3luYy5mcm9tUHJvbWlzZShcbiAgICAgICAgICAgIHByZXNlbnRlci50cmFja1N0ZXAoYEFwcGx5aW5nIGNvZGVtb2QgJHtpZH0uLi5gLCAoKSA9PlxuICAgICAgICAgICAgICBhcHBseUNvZGVtb2RCeUlkKGlkKS5tYXRjaChcbiAgICAgICAgICAgICAgICAoKSA9PiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgKGVycm9yKSA9PiB7XG4gICAgICAgICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGFzRXJyb3IoYEZhaWxlZCB0byBhcHBseSBjb2RlbW9kICR7aWR9YCksXG4gICAgICAgICAgKVxuICAgICAgICAgICAgLm1hcCgoKSA9PiAoeyBpZCB9KSlcbiAgICAgICAgICAgIC5hbmRUZWUoKHJlc3VsdCkgPT4gcHJlc2VudGVyLnJlcG9ydFJlc3VsdChyZXN1bHQpKVxuICAgICAgICAgICAgLm9yVGVlKHJlcG9ydENvbW1hbmRFcnJvcih0aGlzLCBwcmVzZW50ZXIsIG91dHB1dE1vZGUpKTtcbiAgICAgICAgfSksXG4gICAgKTtcbiJdfQ==
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { Command } from "commander";
|
|
2
2
|
import type { Dependencies } from "../../../domain/dependencies.js";
|
|
3
|
+
import type { CliEnv } from "../env.js";
|
|
3
4
|
import { Config } from "../../../config.js";
|
|
4
|
-
export declare const makeDoctorCommand: (dependencies: Dependencies, config: Config) => Command;
|
|
5
|
+
export declare const makeDoctorCommand: (dependencies: Dependencies, config: Config, env: CliEnv) => Command;
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
import chalk from "chalk";
|
|
11
11
|
import { Command } from "commander";
|
|
12
12
|
import { runDoctor } from "../../../domain/doctor.js";
|
|
13
|
-
import { createCommandPresenter } from "../presenters/index.js";
|
|
13
|
+
import { createCommandPresenter, resolveOutputMode, } from "../presenters/index.js";
|
|
14
14
|
const formatCheck = (check) => check.isValid
|
|
15
15
|
? chalk.green(`✅ ${check.successMessage}`)
|
|
16
16
|
: chalk.red(`❌ ${check.errorMessage}`);
|
|
@@ -19,14 +19,15 @@ const reportDoctorResult = (presenter, outputMode) => (result) => {
|
|
|
19
19
|
? result
|
|
20
20
|
: result.checks.map(formatCheck).join("\n"));
|
|
21
21
|
};
|
|
22
|
-
export const makeDoctorCommand = (dependencies, config) => new Command()
|
|
22
|
+
export const makeDoctorCommand = (dependencies, config, env) => new Command()
|
|
23
23
|
.name("doctor")
|
|
24
24
|
.description("Verify the repository setup according to the DevEx guidelines")
|
|
25
25
|
.action(async function () {
|
|
26
26
|
const { output } = this.optsWithGlobals();
|
|
27
|
-
const
|
|
27
|
+
const outputMode = resolveOutputMode(env, output);
|
|
28
|
+
const presenter = createCommandPresenter(outputMode);
|
|
28
29
|
const result = await runDoctor(dependencies, config);
|
|
29
|
-
reportDoctorResult(presenter,
|
|
30
|
+
reportDoctorResult(presenter, outputMode)(result);
|
|
30
31
|
process.exitCode = result.hasErrors ? 1 : 0;
|
|
31
32
|
});
|
|
32
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
33
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9jdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2FkYXB0ZXJzL2NvbW1hbmRlci9jb21tYW5kcy9kb2N0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7O0dBUUc7QUFDSCxPQUFPLEtBQUssTUFBTSxPQUFPLENBQUM7QUFDMUIsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFdBQVcsQ0FBQztBQVVwQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDdEQsT0FBTyxFQUNMLHNCQUFzQixFQUN0QixpQkFBaUIsR0FDbEIsTUFBTSx3QkFBd0IsQ0FBQztBQUVoQyxNQUFNLFdBQVcsR0FBRyxDQUFDLEtBQXNCLEVBQVUsRUFBRSxDQUNyRCxLQUFLLENBQUMsT0FBTztJQUNYLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUssS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO0lBQzFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEtBQUssS0FBSyxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUM7QUFFM0MsTUFBTSxrQkFBa0IsR0FDdEIsQ0FBQyxTQUEyQixFQUFFLFVBQTJCLEVBQUUsRUFBRSxDQUM3RCxDQUFDLE1BQW9CLEVBQVEsRUFBRTtJQUM3QixTQUFTLENBQUMsWUFBWSxDQUNwQixVQUFVLEtBQUssTUFBTTtRQUNuQixDQUFDLENBQUMsTUFBTTtRQUNSLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQzlDLENBQUM7QUFDSixDQUFDLENBQUM7QUFFSixNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRyxDQUMvQixZQUEwQixFQUMxQixNQUFjLEVBQ2QsR0FBVyxFQUNGLEVBQUUsQ0FDWCxJQUFJLE9BQU8sRUFBRTtLQUNWLElBQUksQ0FBQyxRQUFRLENBQUM7S0FDZCxXQUFXLENBQ1YsK0RBQStELENBQ2hFO0tBQ0EsTUFBTSxDQUFDLEtBQUs7SUFDWCxNQUFNLEVBQUUsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLGVBQWUsRUFBaUIsQ0FBQztJQUN6RCxNQUFNLFVBQVUsR0FBRyxpQkFBaUIsQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDbEQsTUFBTSxTQUFTLEdBQUcsc0JBQXNCLENBQUMsVUFBVSxDQUFDLENBQUM7SUFFckQsTUFBTSxNQUFNLEdBQUcsTUFBTSxTQUFTLENBQUMsWUFBWSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBRXJELGtCQUFrQixDQUFDLFNBQVMsRUFBRSxVQUFVLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUVsRCxPQUFPLENBQUMsUUFBUSxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzlDLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBgZG9jdG9yYCBDb21tYW5kZXIgY29tbWFuZC5cbiAqXG4gKiBWZXJpZmllcyB0aGUgcmVwb3NpdG9yeSBzZXR1cCBhbmQgcm91dGVzIHRoZSBvdXRjb21lIHRocm91Z2ggdGhlIHNoYXJlZFxuICogQ29tbWFuZFByZXNlbnRlciBwb3J0LiBKU09OIG1vZGUgZW1pdHMgdGhlIHN0cnVjdHVyZWQgcmVzdWx0OyB0ZXh0IG1vZGUgZW1pdHNcbiAqIGEgaHVtYW4tcmVhZGFibGUgcGVyLWNoZWNrIHN1bW1hcnkuIFRoZSBleGl0IGNvZGUgcmVmbGVjdHMgd2hldGhlciBhbnkgY2hlY2tcbiAqIGZhaWxlZCwgbWlycm9yaW5nIHRoZSBsaW50ZXIgY29udmVudGlvbiAoYSBzdWNjZXNzZnVsIHJ1biBjYW4gc3RpbGwgcmVwb3J0XG4gKiBwcm9ibGVtcykuXG4gKi9cbmltcG9ydCBjaGFsayBmcm9tIFwiY2hhbGtcIjtcbmltcG9ydCB7IENvbW1hbmQgfSBmcm9tIFwiY29tbWFuZGVyXCI7XG5cbmltcG9ydCB0eXBlIHsgQ29tbWFuZFByZXNlbnRlciB9IGZyb20gXCIuLi8uLi8uLi9kb21haW4vY29tbWFuZC1wcmVzZW50ZXIuanNcIjtcbmltcG9ydCB0eXBlIHsgRGVwZW5kZW5jaWVzIH0gZnJvbSBcIi4uLy4uLy4uL2RvbWFpbi9kZXBlbmRlbmNpZXMuanNcIjtcbmltcG9ydCB0eXBlIHsgRG9jdG9yUmVzdWx0IH0gZnJvbSBcIi4uLy4uLy4uL2RvbWFpbi9kb2N0b3IuanNcIjtcbmltcG9ydCB0eXBlIHsgVmFsaWRhdGlvbkNoZWNrIH0gZnJvbSBcIi4uLy4uLy4uL2RvbWFpbi92YWxpZGF0aW9uLmpzXCI7XG5pbXBvcnQgdHlwZSB7IENsaUVudiB9IGZyb20gXCIuLi9lbnYuanNcIjtcbmltcG9ydCB0eXBlIHsgR2xvYmFsT3B0aW9ucyB9IGZyb20gXCIuLi9nbG9iYWwtb3B0aW9ucy5qc1wiO1xuXG5pbXBvcnQgeyBDb25maWcgfSBmcm9tIFwiLi4vLi4vLi4vY29uZmlnLmpzXCI7XG5pbXBvcnQgeyBydW5Eb2N0b3IgfSBmcm9tIFwiLi4vLi4vLi4vZG9tYWluL2RvY3Rvci5qc1wiO1xuaW1wb3J0IHtcbiAgY3JlYXRlQ29tbWFuZFByZXNlbnRlcixcbiAgcmVzb2x2ZU91dHB1dE1vZGUsXG59IGZyb20gXCIuLi9wcmVzZW50ZXJzL2luZGV4LmpzXCI7XG5cbmNvbnN0IGZvcm1hdENoZWNrID0gKGNoZWNrOiBWYWxpZGF0aW9uQ2hlY2spOiBzdHJpbmcgPT5cbiAgY2hlY2suaXNWYWxpZFxuICAgID8gY2hhbGsuZ3JlZW4oYOKchSAke2NoZWNrLnN1Y2Nlc3NNZXNzYWdlfWApXG4gICAgOiBjaGFsay5yZWQoYOKdjCAke2NoZWNrLmVycm9yTWVzc2FnZX1gKTtcblxuY29uc3QgcmVwb3J0RG9jdG9yUmVzdWx0ID1cbiAgKHByZXNlbnRlcjogQ29tbWFuZFByZXNlbnRlciwgb3V0cHV0TW9kZTogXCJqc29uXCIgfCBcInRleHRcIikgPT5cbiAgKHJlc3VsdDogRG9jdG9yUmVzdWx0KTogdm9pZCA9PiB7XG4gICAgcHJlc2VudGVyLnJlcG9ydFJlc3VsdChcbiAgICAgIG91dHB1dE1vZGUgPT09IFwianNvblwiXG4gICAgICAgID8gcmVzdWx0XG4gICAgICAgIDogcmVzdWx0LmNoZWNrcy5tYXAoZm9ybWF0Q2hlY2spLmpvaW4oXCJcXG5cIiksXG4gICAgKTtcbiAgfTtcblxuZXhwb3J0IGNvbnN0IG1ha2VEb2N0b3JDb21tYW5kID0gKFxuICBkZXBlbmRlbmNpZXM6IERlcGVuZGVuY2llcyxcbiAgY29uZmlnOiBDb25maWcsXG4gIGVudjogQ2xpRW52LFxuKTogQ29tbWFuZCA9PlxuICBuZXcgQ29tbWFuZCgpXG4gICAgLm5hbWUoXCJkb2N0b3JcIilcbiAgICAuZGVzY3JpcHRpb24oXG4gICAgICBcIlZlcmlmeSB0aGUgcmVwb3NpdG9yeSBzZXR1cCBhY2NvcmRpbmcgdG8gdGhlIERldkV4IGd1aWRlbGluZXNcIixcbiAgICApXG4gICAgLmFjdGlvbihhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB7IG91dHB1dCB9ID0gdGhpcy5vcHRzV2l0aEdsb2JhbHM8R2xvYmFsT3B0aW9ucz4oKTtcbiAgICAgIGNvbnN0IG91dHB1dE1vZGUgPSByZXNvbHZlT3V0cHV0TW9kZShlbnYsIG91dHB1dCk7XG4gICAgICBjb25zdCBwcmVzZW50ZXIgPSBjcmVhdGVDb21tYW5kUHJlc2VudGVyKG91dHB1dE1vZGUpO1xuXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBydW5Eb2N0b3IoZGVwZW5kZW5jaWVzLCBjb25maWcpO1xuXG4gICAgICByZXBvcnREb2N0b3JSZXN1bHQocHJlc2VudGVyLCBvdXRwdXRNb2RlKShyZXN1bHQpO1xuXG4gICAgICBwcm9jZXNzLmV4aXRDb2RlID0gcmVzdWx0Lmhhc0Vycm9ycyA/IDEgOiAwO1xuICAgIH0pO1xuIl19
|
|
@@ -1,3 +1,4 @@
|
|
|
1
1
|
import { Command } from "commander";
|
|
2
2
|
import type { Dependencies } from "../../../domain/dependencies.js";
|
|
3
|
-
|
|
3
|
+
import type { CliEnv } from "../env.js";
|
|
4
|
+
export declare const makeInfoCommand: (dependencies: Dependencies, env: CliEnv) => Command;
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import { Command } from "commander";
|
|
2
2
|
import { getInfo } from "../../../domain/info.js";
|
|
3
|
-
import { createCommandPresenter } from "../presenters/index.js";
|
|
4
|
-
export const makeInfoCommand = (dependencies) => new Command()
|
|
3
|
+
import { createCommandPresenter, resolveOutputMode, } from "../presenters/index.js";
|
|
4
|
+
export const makeInfoCommand = (dependencies, env) => new Command()
|
|
5
5
|
.name("info")
|
|
6
6
|
.description("Display information about the project")
|
|
7
7
|
.action(async function () {
|
|
8
8
|
const { output } = this.optsWithGlobals();
|
|
9
|
-
const presenter = createCommandPresenter(output);
|
|
9
|
+
const presenter = createCommandPresenter(resolveOutputMode(env, output));
|
|
10
10
|
const result = await getInfo(dependencies)();
|
|
11
11
|
presenter.reportResult(result);
|
|
12
12
|
});
|
|
13
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
13
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5mby5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9hZGFwdGVycy9jb21tYW5kZXIvY29tbWFuZHMvaW5mby50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBTXBDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNsRCxPQUFPLEVBQ0wsc0JBQXNCLEVBQ3RCLGlCQUFpQixHQUNsQixNQUFNLHdCQUF3QixDQUFDO0FBRWhDLE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRyxDQUM3QixZQUEwQixFQUMxQixHQUFXLEVBQ0YsRUFBRSxDQUNYLElBQUksT0FBTyxFQUFFO0tBQ1YsSUFBSSxDQUFDLE1BQU0sQ0FBQztLQUNaLFdBQVcsQ0FBQyx1Q0FBdUMsQ0FBQztLQUNwRCxNQUFNLENBQUMsS0FBSztJQUNYLE1BQU0sRUFBRSxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsZUFBZSxFQUFpQixDQUFDO0lBQ3pELE1BQU0sU0FBUyxHQUFHLHNCQUFzQixDQUFDLGlCQUFpQixDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ3pFLE1BQU0sTUFBTSxHQUFHLE1BQU0sT0FBTyxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUM7SUFDN0MsU0FBUyxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUNqQyxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1hbmQgfSBmcm9tIFwiY29tbWFuZGVyXCI7XG5cbmltcG9ydCB0eXBlIHsgRGVwZW5kZW5jaWVzIH0gZnJvbSBcIi4uLy4uLy4uL2RvbWFpbi9kZXBlbmRlbmNpZXMuanNcIjtcbmltcG9ydCB0eXBlIHsgQ2xpRW52IH0gZnJvbSBcIi4uL2Vudi5qc1wiO1xuaW1wb3J0IHR5cGUgeyBHbG9iYWxPcHRpb25zIH0gZnJvbSBcIi4uL2dsb2JhbC1vcHRpb25zLmpzXCI7XG5cbmltcG9ydCB7IGdldEluZm8gfSBmcm9tIFwiLi4vLi4vLi4vZG9tYWluL2luZm8uanNcIjtcbmltcG9ydCB7XG4gIGNyZWF0ZUNvbW1hbmRQcmVzZW50ZXIsXG4gIHJlc29sdmVPdXRwdXRNb2RlLFxufSBmcm9tIFwiLi4vcHJlc2VudGVycy9pbmRleC5qc1wiO1xuXG5leHBvcnQgY29uc3QgbWFrZUluZm9Db21tYW5kID0gKFxuICBkZXBlbmRlbmNpZXM6IERlcGVuZGVuY2llcyxcbiAgZW52OiBDbGlFbnYsXG4pOiBDb21tYW5kID0+XG4gIG5ldyBDb21tYW5kKClcbiAgICAubmFtZShcImluZm9cIilcbiAgICAuZGVzY3JpcHRpb24oXCJEaXNwbGF5IGluZm9ybWF0aW9uIGFib3V0IHRoZSBwcm9qZWN0XCIpXG4gICAgLmFjdGlvbihhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB7IG91dHB1dCB9ID0gdGhpcy5vcHRzV2l0aEdsb2JhbHM8R2xvYmFsT3B0aW9ucz4oKTtcbiAgICAgIGNvbnN0IHByZXNlbnRlciA9IGNyZWF0ZUNvbW1hbmRQcmVzZW50ZXIocmVzb2x2ZU91dHB1dE1vZGUoZW52LCBvdXRwdXQpKTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGdldEluZm8oZGVwZW5kZW5jaWVzKSgpO1xuICAgICAgcHJlc2VudGVyLnJlcG9ydFJlc3VsdChyZXN1bHQpO1xuICAgIH0pO1xuIl19
|
|
@@ -2,6 +2,7 @@ import { Command } from "commander";
|
|
|
2
2
|
import { ResultAsync } from "neverthrow";
|
|
3
3
|
import { z } from "zod";
|
|
4
4
|
import type { CommandPresenter } from "../../../domain/command-presenter.js";
|
|
5
|
+
import type { CliEnv } from "../env.js";
|
|
5
6
|
import { GitHubAuthFactory } from "../../../domain/dependencies.js";
|
|
6
7
|
import { Payload as MonorepoPayload } from "../../plop/generators/monorepo/index.js";
|
|
7
8
|
type InitInitialAnswers = Partial<MonorepoPayload> & {
|
|
@@ -50,5 +51,5 @@ export declare const mapGitRemoteAddError: (cause: unknown) => Error;
|
|
|
50
51
|
* interactively.
|
|
51
52
|
*/
|
|
52
53
|
export declare const confirmGitHubRepoCreation: (payload: MonorepoPayload, publishPreference?: boolean) => ResultAsync<boolean, Error>;
|
|
53
|
-
export declare const makeInitCommand: (requireGitHubAuth: GitHubAuthFactory) => Command;
|
|
54
|
+
export declare const makeInitCommand: (requireGitHubAuth: GitHubAuthFactory, env: CliEnv) => Command;
|
|
54
55
|
export {};
|
|
@@ -10,7 +10,7 @@ import { Repository, } from "../../../domain/github.js";
|
|
|
10
10
|
import { tf$ } from "../../execa/terraform.js";
|
|
11
11
|
import { collectMonorepoPayload, getPlopInstance, runMonorepoActions, } from "../../plop/index.js";
|
|
12
12
|
import { asError, reportCommandError } from "../command-errors.js";
|
|
13
|
-
import { createCommandPresenter } from "../presenters/index.js";
|
|
13
|
+
import { createCommandPresenter, resolveOutputMode, } from "../presenters/index.js";
|
|
14
14
|
const isGitHubRepoCreationSkipped = (input) => "gitHubRepoCreationSkipped" in input;
|
|
15
15
|
const trackStep = (presenter, name, task, mapError) => ResultAsync.fromPromise(presenter.trackStep(name, task), mapError);
|
|
16
16
|
const displaySummary = (input) => {
|
|
@@ -251,7 +251,7 @@ const reportSummary = (presenter, outputMode) => (result) => {
|
|
|
251
251
|
displaySummary(result);
|
|
252
252
|
}
|
|
253
253
|
};
|
|
254
|
-
export const makeInitCommand = (requireGitHubAuth) => new Command()
|
|
254
|
+
export const makeInitCommand = (requireGitHubAuth, env) => new Command()
|
|
255
255
|
.name("init")
|
|
256
256
|
.description("Initialize a new DX workspace")
|
|
257
257
|
.addOption(new Option("--name <name>", "Repository name"))
|
|
@@ -260,7 +260,8 @@ export const makeInitCommand = (requireGitHubAuth) => new Command()
|
|
|
260
260
|
.addOption(new Option("--publish", "Publish the scaffolded repository to GitHub without prompting").default(undefined))
|
|
261
261
|
.action(async function (options) {
|
|
262
262
|
const { output } = this.optsWithGlobals();
|
|
263
|
-
const
|
|
263
|
+
const outputMode = resolveOutputMode(env, output);
|
|
264
|
+
const presenter = createCommandPresenter(outputMode);
|
|
264
265
|
await ResultAsync.fromPromise(Promise.resolve().then(() => parseInitCommandOptions(options)), (cause) => cause instanceof Error
|
|
265
266
|
? cause
|
|
266
267
|
: new Error("Failed to parse init command options", { cause }))
|
|
@@ -271,6 +272,6 @@ export const makeInitCommand = (requireGitHubAuth) => new Command()
|
|
|
271
272
|
initialAnswers: getMonorepoInitialAnswers(initOptions),
|
|
272
273
|
presenter,
|
|
273
274
|
})))
|
|
274
|
-
.match(reportSummary(presenter,
|
|
275
|
+
.match(reportSummary(presenter, outputMode), reportCommandError(this, presenter, outputMode));
|
|
275
276
|
});
|
|
276
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5pdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9hZGFwdGVycy9jb21tYW5kZXIvY29tbWFuZHMvaW5pdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDN0MsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBQzFCLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQzVDLE9BQU8sRUFBRSxDQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBQ3RDLE9BQU8sUUFBUSxNQUFNLFVBQVUsQ0FBQztBQUNoQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDNUQsT0FBTyxLQUFLLElBQUksTUFBTSxXQUFXLENBQUM7QUFDbEMsT0FBTyxFQUFFLENBQUMsRUFBRSxNQUFNLEtBQUssQ0FBQztBQU14QixPQUFPLEVBR0wsVUFBVSxHQUNYLE1BQU0sMkJBQTJCLENBQUM7QUFDbkMsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRS9DLE9BQU8sRUFDTCxzQkFBc0IsRUFDdEIsZUFBZSxFQUNmLGtCQUFrQixHQUNuQixNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sRUFBRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNuRSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQWNoRSxNQUFNLDJCQUEyQixHQUFHLENBQ2xDLEtBQW1CLEVBQ3VCLEVBQUUsQ0FDNUMsMkJBQTJCLElBQUksS0FBSyxDQUFDO0FBc0J2QyxNQUFNLFNBQVMsR0FBRyxDQUNoQixTQUEyQixFQUMzQixJQUFZLEVBQ1osSUFBc0IsRUFDdEIsUUFBK0IsRUFDWixFQUFFLENBQ3JCLFdBQVcsQ0FB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ciB9IGZyb20gXCJAbG9ndGFwZS9sb2d0YXBlXCI7XG5pbXBvcnQgY2hhbGsgZnJvbSBcImNoYWxrXCI7XG5pbXBvcnQgeyBDb21tYW5kLCBPcHRpb24gfSBmcm9tIFwiY29tbWFuZGVyXCI7XG5pbXBvcnQgeyAkLCBFeGVjYUVycm9yIH0gZnJvbSBcImV4ZWNhXCI7XG5pbXBvcnQgaW5xdWlyZXIgZnJvbSBcImlucXVpcmVyXCI7XG5pbXBvcnQgeyBlcnJBc3luYywgb2tBc3luYywgUmVzdWx0QXN5bmMgfSBmcm9tIFwibmV2ZXJ0aHJvd1wiO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tIFwibm9kZTpwYXRoXCI7XG5pbXBvcnQgeyB6IH0gZnJvbSBcInpvZFwiO1xuXG5pbXBvcnQgdHlwZSB7IENvbW1hbmRQcmVzZW50ZXIgfSBmcm9tIFwiLi4vLi4vLi4vZG9tYWluL2NvbW1hbmQtcHJlc2VudGVyLmpzXCI7XG5pbXBvcnQgdHlwZSB7IEdsb2JhbE9wdGlvbnMgfSBmcm9tIFwiLi4vZ2xvYmFsLW9wdGlvbnMuanNcIjtcblxuaW1wb3J0IHsgR2l0SHViQXV0aEZhY3RvcnkgfSBmcm9tIFwiLi4vLi4vLi4vZG9tYWluL2RlcGVuZGVuY2llcy5qc1wiO1xuaW1wb3J0IHtcbiAgR2l0SHViU2VydmljZSxcbiAgUHVsbFJlcXVlc3QsXG4gIFJlcG9zaXRvcnksXG59IGZyb20gXCIuLi8uLi8uLi9kb21haW4vZ2l0aHViLmpzXCI7XG5pbXBvcnQgeyB0ZiQgfSBmcm9tIFwiLi4vLi4vZXhlY2EvdGVycmFmb3JtLmpzXCI7XG5pbXBvcnQgeyBQYXlsb2FkIGFzIE1vbm9yZXBvUGF5bG9hZCB9IGZyb20gXCIuLi8uLi9wbG9wL2dlbmVyYXRvcnMvbW9ub3JlcG8vaW5kZXguanNcIjtcbmltcG9ydCB7XG4gIGNvbGxlY3RNb25vcmVwb1BheWxvYWQsXG4gIGdldFBsb3BJbnN0YW5jZSxcbiAgcnVuTW9ub3JlcG9BY3Rpb25zLFxufSBmcm9tIFwiLi4vLi4vcGxvcC9pbmRleC5qc1wiO1xuaW1wb3J0IHsgYXNFcnJvciwgcmVwb3J0Q29tbWFuZEVycm9yIH0gZnJvbSBcIi4uL2NvbW1hbmQtZXJyb3JzLmpzXCI7XG5pbXBvcnQgeyBjcmVhdGVDb21tYW5kUHJlc2VudGVyIH0gZnJvbSBcIi4uL3ByZXNlbnRlcnMvaW5kZXguanNcIjtcblxudHlwZSBHaXRIdWJSZXBvQ3JlYXRpb25Ta2lwcGVkUmVzdWx0ID0ge1xuICBnaXRIdWJSZXBvQ3JlYXRpb25Ta2lwcGVkOiB0cnVlO1xuICBwYXlsb2FkOiBNb25vcmVwb1BheWxvYWQ7XG59O1xuXG50eXBlIEluaXRSZXN1bHQgPSB7XG4gIHByPzogUHVsbFJlcXVlc3Q7XG4gIHJlcG9zaXRvcnk/OiBSZXBvc2l0b3J5O1xufTtcblxudHlwZSBTdW1tYXJ5SW5wdXQgPSBHaXRIdWJSZXBvQ3JlYXRpb25Ta2lwcGVkUmVzdWx0IHwgSW5pdFJlc3VsdDtcblxuY29uc3QgaXNHaXRIdWJSZXBvQ3JlYXRpb25Ta2lwcGVkID0gKFxuICBpbnB1dDogU3VtbWFyeUlucHV0LFxuKTogaW5wdXQgaXMgR2l0SHViUmVwb0NyZWF0aW9uU2tpcHBlZFJlc3VsdCA9PlxuICBcImdpdEh1YlJlcG9DcmVhdGlvblNraXBwZWRcIiBpbiBpbnB1dDtcblxudHlwZSBJbml0QWN0aW9uQ29udGV4dCA9IHtcbiAgZ2l0SHViU2VydmljZTogR2l0SHViU2VydmljZTtcbiAgaW5pdGlhbEFuc3dlcnM/OiBJbml0SW5pdGlhbEFuc3dlcnM7XG4gIHByZXNlbnRlcjogQ29tbWFuZFByZXNlbnRlcjtcbn07XG5cbnR5cGUgSW5pdEluaXRpYWxBbnN3ZXJzID0gUGFydGlhbDxNb25vcmVwb1BheWxvYWQ+ICYge1xuICBwdWJsaXNoVG9HaXRIdWI/OiBib29sZWFuO1xufTtcblxudHlwZSBMb2NhbFdvcmtzcGFjZSA9IHtcbiAgYnJhbmNoTmFtZTogc3RyaW5nO1xuICByZXBvc2l0b3J5OiBSZXBvc2l0b3J5O1xufTtcblxudHlwZSBSZXBvc2l0b3J5UHVsbFJlcXVlc3QgPSB7XG4gIHByPzogUHVsbFJlcXVlc3Q7XG4gIHJlcG9zaXRvcnk6IFJlcG9zaXRvcnk7XG59O1xuXG5jb25zdCB0cmFja1N0ZXAgPSA8VCwgRT4oXG4gIHByZXNlbnRlcjogQ29tbWFuZFByZXNlbnRlcixcbiAgbmFtZTogc3RyaW5nLFxuICB0YXNrOiAoKSA9PiBQcm9taXNlPFQ+LFxuICBtYXBFcnJvcjogKGNhdXNlOiB1bmtub3duKSA9PiBFLFxuKTogUmVzdWx0QXN5bmM8VCwgRT4gPT5cbiAgUmVzdWx0QXN5bmMuZnJvbVByb21pc2UocHJlc2VudGVyLnRyYWNrU3RlcChuYW1lLCB0YXNrKSwgbWFwRXJyb3IpO1xuXG5jb25zdCBkaXNwbGF5U3VtbWFyeSA9IChpbnB1dDogU3VtbWFyeUlucHV0KSA9PiB7XG4gIGNvbnN0IGRvY3NVcmwgPSBcImh0dHBzOi8vZHgucGFnb3BhLml0L2dldHRpbmctc3RhcnRlZFwiO1xuXG4gIGlmIChpc0dpdEh1YlJlcG9DcmVhdGlvblNraXBwZWQoaW5wdXQpKSB7XG4gICAgY29uc3QgeyBwYXlsb2FkIH0gPSBpbnB1dDtcbiAgICBjb25zb2xlLmxvZyhjaGFsay55ZWxsb3cuYm9sZChcIlxcbkdpdEh1YiByZXBvc2l0b3J5IGNyZWF0aW9uIHNraXBwZWQuXCIpKTtcbiAgICBjb25zb2xlLmxvZyhcbiAgICAgIGBUaGUgd29ya3NwYWNlIGZpbGVzIGhhdmUgYmVlbiBzY2FmZm9sZGVkIGluICR7Y2hhbGsuY3lhbihwYXlsb2FkLnJlcG9OYW1lICsgXCIvXCIpfS5gLFxuICAgICk7XG4gICAgY29uc29sZS5sb2coY2hhbGsuYm9sZChcIlxcblRvIGZpbmlzaCB0aGUgc2V0dXAgbWFudWFsbHk6XCIpKTtcbiAgICBsZXQgc3RlcCA9IDE7XG4gICAgY29uc29sZS5sb2coXG4gICAgICBgJHtzdGVwKyt9LiBDcmVhdGUgdGhlIEdpdEh1YiByZXBvc2l0b3J5IGJ5IGFwcGx5aW5nIHRoZSBUZXJyYWZvcm0gY29uZmlnIHNjYWZmb2xkZWQgYXQgJHtjaGFsay5jeWFuKGAke3BheWxvYWQucmVwb05hbWV9L2luZnJhL3JlcG9zaXRvcnlgKX06YCxcbiAgICApO1xuICAgIGNvbnNvbGUubG9nKFxuICAgICAgYCAgICAgICAke2NoYWxrLmN5YW4oYGNkICR7cGF5bG9hZC5yZXBvTmFtZX0vaW5mcmEvcmVwb3NpdG9yeSAmJiB0ZXJyYWZvcm0gaW5pdCAmJiB0ZXJyYWZvcm0gYXBwbHlgKX1gLFxuICAgICk7XG4gICAgY29uc29sZS5sb2coXG4gICAgICBgJHtzdGVwKyt9LiBQdXNoIHRoZSBzY2FmZm9sZGVkIGNvZGUgdG8gdGhlIG5ld2x5IGNyZWF0ZWQgcmVwb3NpdG9yeTpgLFxuICAgICk7XG4gICAgY29uc29sZS5sb2coXG4gICAgICBgICAgICAgICR7Y2hhbGsuY3lhbihgY2QgJHtwYXlsb2FkLnJlcG9OYW1lfSAmJiBnaXQgaW5pdCAmJiBnaXQgcmVtb3RlIGFkZCBvcmlnaW4gPHVybD4gJiYgZ2l0IHB1c2hgKX1gLFxuICAgICk7XG4gICAgY29uc29sZS5sb2coXG4gICAgICBgJHtzdGVwfS4gVmlzaXQgJHtjaGFsay51bmRlcmxpbmUoZG9jc1VybCl9IHRvIGRlcGxveSB5b3VyIGZpcnN0IHByb2plY3RcXG5gLFxuICAgICk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgeyBwciwgcmVwb3NpdG9yeSB9ID0gaW5wdXQ7XG4gIGNvbnNvbGUubG9nKGNoYWxrLmdyZWVuLmJvbGQoXCJcXG5Xb3Jrc3BhY2UgY3JlYXRlZCBzdWNjZXNzZnVsbHkhXCIpKTtcblxuICBpZiAocmVwb3NpdG9yeSkge1xuICAgIGNvbnNvbGUubG9nKGAtIE5hbWU6ICR7Y2hhbGsuY3lhbihyZXBvc2l0b3J5Lm5hbWUpfWApO1xuICAgIGNvbnNvbGUubG9nKGAtIEdpdEh1YiBSZXBvc2l0b3J5OiAke2NoYWxrLmN5YW4ocmVwb3NpdG9yeS51cmwpfVxcbmApO1xuICB9IGVsc2Uge1xuICAgIGNvbnNvbGUubG9nKFxuICAgICAgY2hhbGsueWVsbG93KFxuICAgICAgICBgXFxu4pqg77iPIEdpdEh1YiByZXBvc2l0b3J5IG1heSBub3QgaGF2ZSBiZWVuIGNyZWF0ZWQgYXV0b21hdGljYWxseS5gLFxuICAgICAgKSxcbiAgICApO1xuICB9XG5cbiAgaWYgKHByKSB7XG4gICAgbGV0IHN0ZXAgPSAxO1xuICAgIGNvbnNvbGUubG9nKGNoYWxrLmdyZWVuLmJvbGQoXCJcXG5OZXh0IFN0ZXBzOlwiKSk7XG4gICAgY29uc29sZS5sb2coXG4gICAgICBgJHtzdGVwKyt9LiBSZXZpZXcgdGhlIFB1bGwgUmVxdWVzdCBpbiB0aGUgR2l0SHViIHJlcG9zaXRvcnk6ICR7Y2hhbGsudW5kZXJsaW5lKHByLnVybCl9YCxcbiAgICApO1xuICAgIGNvbnNvbGUubG9nKFxuICAgICAgYCR7c3RlcH0uIFZpc2l0ICR7Y2hhbGsudW5kZXJsaW5lKGRvY3NVcmwpfSB0byBkZXBsb3kgeW91ciBmaXJzdCBwcm9qZWN0XFxuYCxcbiAgICApO1xuICB9IGVsc2Uge1xuICAgIGNvbnNvbGUubG9nKFxuICAgICAgY2hhbGsueWVsbG93KGBcXG7imqDvuI8gVGhlcmUgd2FzIGFuIGVycm9yIGR1cmluZyBQdWxsIFJlcXVlc3QgY3JlYXRpb24uYCksXG4gICAgKTtcbiAgICBjb25zb2xlLmxvZyhcbiAgICAgIGBQbGVhc2UsIG1hbnVhbGx5IGNyZWF0ZSBhIFB1bGwgUmVxdWVzdCBpbiB0aGUgR2l0SHViIHJlcG9zaXRvcnkgdG8gcmV2aWV3IHRoZSBzY2FmZm9sZGVkIGNvZGUuXFxuYCxcbiAgICApO1xuICB9XG59O1xuXG5jb25zdCBjaGVja1RlcnJhZm9ybUNsaSA9ICgpID0+IHRmJGB0ZXJyYWZvcm0gLXZlcnNpb25gO1xuXG5jb25zdCB0cmFja1RlcnJhZm9ybUNsaUlzSW5zdGFsbGVkID0gKHByZXNlbnRlcjogQ29tbWFuZFByZXNlbnRlcikgPT5cbiAgdHJhY2tTdGVwKFxuICAgIHByZXNlbnRlcixcbiAgICBcIkNoZWNraW5nIFRlcnJhZm9ybSBpbnN0YWxsYXRpb24uLi5cIixcbiAgICBjaGVja1RlcnJhZm9ybUNsaSxcbiAgICBhc0Vycm9yKFxuICAgICAgXCJQbGVhc2UgaW5zdGFsbCB0ZXJyYWZvcm0gQ0xJIGJlZm9yZSBydW5uaW5nIHRoaXMgY29tbWFuZC4gSWYgeW91IHVzZSB0ZmVudiwgcnVuOiB0ZmVudiBpbnN0YWxsIGxhdGVzdCAmJiB0ZmVudiB1c2UgbGF0ZXN0XCIsXG4gICAgKSxcbiAgKTtcblxuY29uc3QgY2hlY2tDb3JlcGFjayA9ICgpID0+IHRmJGBjb3JlcGFjayAtdmA7XG5cbmNvbnN0IHRyYWNrQ29yZXBhY2tJc0luc3RhbGxlZCA9IChwcmVzZW50ZXI6IENvbW1hbmRQcmVzZW50ZXIpID0+XG4gIHRyYWNrU3RlcChcbiAgICBwcmVzZW50ZXIsXG4gICAgXCJDaGVja2luZyBDb3JlcGFjayBpbnN0YWxsYXRpb24uLi5cIixcbiAgICBjaGVja0NvcmVwYWNrLFxuICAgIGFzRXJyb3IoXCJQbGVhc2UgaW5zdGFsbCBDb3JlcGFjayBiZWZvcmUgcnVubmluZyB0aGlzIGNvbW1hbmQuXCIpLFxuICApO1xuXG5jb25zdCBhenVyZUFjY291bnRTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIHVzZXI6IHoub2JqZWN0KHtcbiAgICBuYW1lOiB6LnN0cmluZygpLm1pbigxKSxcbiAgfSksXG59KTtcblxuY29uc3QgZW5zdXJlQXpMb2dpbiA9IGFzeW5jICgpOiBQcm9taXNlPHN0cmluZz4gPT4ge1xuICBjb25zdCB7IHN0ZG91dCB9ID0gYXdhaXQgdGYkYGF6IGFjY291bnQgc2hvd2A7XG4gIC8vIGBheiBhY2NvdW50IHNob3dgIHJlYWRzIHRoZSBjYWNoZWQgQ0xJIGNvbnRleHQsIGJ1dCBgYXogZ3JvdXAgbGlzdGBcbiAgLy8gZmFpbHMgd2hlbiB0aGUgY3VycmVudCBzZXNzaW9uIHRva2VuIGhhcyBleHBpcmVkLlxuICBhd2FpdCB0ZiRgYXogZ3JvdXAgbGlzdGA7XG4gIGNvbnN0IHBhcnNlZCA9IEpTT04ucGFyc2Uoc3Rkb3V0KTtcbiAgY29uc3QgeyB1c2VyIH0gPSBhenVyZUFjY291bnRTY2hlbWEucGFyc2UocGFyc2VkKTtcbiAgcmV0dXJuIHVzZXIubmFtZTtcbn07XG5cbmNvbnN0IHRyYWNrQXpMb2dpbiA9IChwcmVzZW50ZXI6IENvbW1hbmRQcmVzZW50ZXIpID0+XG4gIHRyYWNrU3RlcChcbiAgICBwcmVzZW50ZXIsXG4gICAgXCJDaGVja2luZyBBenVyZSBsb2dpbiBzdGF0dXMuLi5cIixcbiAgICBlbnN1cmVBekxvZ2luLFxuICAgIGFzRXJyb3IoXG4gICAgICBcIlBsZWFzZSBsb2cgaW4gdG8gQXp1cmUgQ0xJIHVzaW5nIGBheiBsb2dpbmAgYmVmb3JlIHJ1bm5pbmcgdGhpcyBjb21tYW5kLlwiLFxuICAgICksXG4gICk7XG5cbi8vIFRPRE8oQ0VTLTE4MTApOiBNYWtlIHRoZXNlIGNoZWNrcyBjb25jdXJyZW50IHRvIHNwZWVkIHVwIHRoZSBwcmVjb25kaXRpb25zIGNoZWNrIHBoYXNlXG5leHBvcnQgY29uc3QgcnVuSW5pdFByZWNvbmRpdGlvbnMgPSAocHJlc2VudGVyOiBDb21tYW5kUHJlc2VudGVyKSA9PlxuICB0cmFja1RlcnJhZm9ybUNsaUlzSW5zdGFsbGVkKHByZXNlbnRlcikuYW5kVGhlbigoKSA9PlxuICAgIHRyYWNrQ29yZXBhY2tJc0luc3RhbGxlZChwcmVzZW50ZXIpLFxuICApO1xuXG4vLyBUT0RPKENFUy0xODEwKTogTWFrZSB0aGVzZSBjaGVja3MgY29uY3VycmVudCB0byBzcGVlZCB1cCB0aGUgcHJlY29uZGl0aW9ucyBjaGVjayBwaGFzZVxuZXhwb3J0IGNvbnN0IHJ1bkFkZEVudmlyb25tZW50UHJlY29uZGl0aW9ucyA9IChwcmVzZW50ZXI6IENvbW1hbmRQcmVzZW50ZXIpID0+XG4gIHRyYWNrVGVycmFmb3JtQ2xpSXNJbnN0YWxsZWQocHJlc2VudGVyKVxuICAgIC5hbmRUaGVuKCgpID0+IHRyYWNrQXpMb2dpbihwcmVzZW50ZXIpKVxuICAgIC5hbmRUaGVuKCgpID0+IHRyYWNrQ29yZXBhY2tJc0luc3RhbGxlZChwcmVzZW50ZXIpKTtcblxuY29uc3QgREVGQVVMVF9HSVRIVUJfUFVCTElTSF9DT05GSVJNQVRJT04gPSB0cnVlO1xuXG5leHBvcnQgY29uc3QgaW5pdENvbW1hbmRPcHRpb25zU2NoZW1hID0gei5vYmplY3Qoe1xuICBkZXNjcmlwdGlvbjogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBuYW1lOiB6LnN0cmluZygpLnRyaW0oKS5taW4oMSwgXCJSZXBvc2l0b3J5IG5hbWUgY2Fubm90IGJlIGVtcHR5XCIpLm9wdGlvbmFsKCksXG4gIG93bmVyOiB6LnN0cmluZygpLnRyaW0oKS5taW4oMSwgXCJHaXRIdWIgb3duZXIgY2Fubm90IGJlIGVtcHR5XCIpLm9wdGlvbmFsKCksXG4gIHB1Ymxpc2g6IHouYm9vbGVhbigpLm9wdGlvbmFsKCksXG59KTtcblxuZXhwb3J0IHR5cGUgSW5pdENvbW1hbmRPcHRpb25zID0gei5pbmZlcjx0eXBlb2YgaW5pdENvbW1hbmRPcHRpb25zU2NoZW1hPjtcblxuZXhwb3J0IGNvbnN0IHBhcnNlSW5pdENvbW1hbmRPcHRpb25zID0gKGlucHV0OiB1bmtub3duKTogSW5pdENvbW1hbmRPcHRpb25zID0+IHtcbiAgY29uc3QgcmVzdWx0ID0gaW5pdENvbW1hbmRPcHRpb25zU2NoZW1hLnNhZmVQYXJzZShpbnB1dCk7XG4gIGlmICghcmVzdWx0LnN1Y2Nlc3MpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgSW52YWxpZCBpbml0IGNvbW1hbmQgb3B0aW9uczpcXG4ke3oucHJldHRpZnlFcnJvcihyZXN1bHQuZXJyb3IpfWAsXG4gICAgICB7XG4gICAgICAgIGNhdXNlOiByZXN1bHQuZXJyb3IsXG4gICAgICB9LFxuICAgICk7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0LmRhdGE7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0TW9ub3JlcG9Jbml0aWFsQW5zd2VycyA9ICh7XG4gIGRlc2NyaXB0aW9uLFxuICBuYW1lLFxuICBvd25lcixcbiAgcHVibGlzaCxcbn06IEluaXRDb21tYW5kT3B0aW9ucyk6IEluaXRJbml0aWFsQW5zd2VycyA9PiB7XG4gIGNvbnN0IGluaXRpYWxBbnN3ZXJzOiBJbml0SW5pdGlhbEFuc3dlcnMgPSB7fTtcblxuICBpZiAoZGVzY3JpcHRpb24pIHtcbiAgICBpbml0aWFsQW5zd2Vycy5yZXBvRGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbjtcbiAgfVxuXG4gIGlmIChvd25lcikge1xuICAgIGluaXRpYWxBbnN3ZXJzLnJlcG9Pd25lciA9IG93bmVyO1xuICB9XG5cbiAgaWYgKG5hbWUpIHtcbiAgICBpbml0aWFsQW5zd2Vycy5yZXBvTmFtZSA9IG5hbWU7XG4gIH1cblxuICBpZiAodHlwZW9mIHB1Ymxpc2ggPT09IFwiYm9vbGVhblwiKSB7XG4gICAgaW5pdGlhbEFuc3dlcnMucHVibGlzaFRvR2l0SHViID0gcHVibGlzaDtcbiAgfVxuXG4gIHJldHVybiBpbml0aWFsQW5zd2Vycztcbn07XG5cbmNvbnN0IGNyZWF0ZVJlbW90ZVJlcG9zaXRvcnlXaXRoUHJlc2VudGVyID1cbiAgKHByZXNlbnRlcjogQ29tbWFuZFByZXNlbnRlcikgPT5cbiAgKHtcbiAgICByZXBvTmFtZSxcbiAgICByZXBvT3duZXIsXG4gIH06IE1vbm9yZXBvUGF5bG9hZCk6IFJlc3VsdEFzeW5jPFJlcG9zaXRvcnksIEVycm9yPiA9PiB7XG4gICAgY29uc3QgbG9nZ2VyID0gZ2V0TG9nZ2VyKFtcImR4LWNsaVwiLCBcImluaXRcIl0pO1xuICAgIGNvbnN0IHJlcG8kID0gdGYkKHsgY3dkOiBwYXRoLnJlc29sdmUoXCJpbmZyYVwiLCBcInJlcG9zaXRvcnlcIikgfSk7XG4gICAgY29uc3QgYXBwbHlUZXJyYWZvcm0gPSBhc3luYyAoKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCByZXBvJGB0ZXJyYWZvcm0gaW5pdGA7XG4gICAgICAgIGF3YWl0IHJlcG8kYHRlcnJhZm9ybSBhcHBseSAtYXV0by1hcHByb3ZlYDtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEV4ZWNhRXJyb3IpIHtcbiAgICAgICAgICBsb2dnZXIuZXJyb3IoZXJyb3Iuc2hvcnRNZXNzYWdlKTtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiB0cmFja1N0ZXAoXG4gICAgICBwcmVzZW50ZXIsXG4gICAgICBcIkNyZWF0aW5nIEdpdEh1YiByZXBvc2l0b3J5Li4uXCIsXG4gICAgICBhcHBseVRlcnJhZm9ybSxcbiAgICAgIGFzRXJyb3IoXCJGYWlsZWQgdG8gY3JlYXRlIEdpdEh1YiByZXBvc2l0b3J5LlwiKSxcbiAgICApLm1hcCgoKSA9PiBuZXcgUmVwb3NpdG9yeShyZXBvTmFtZSwgcmVwb093bmVyKSk7XG4gIH07XG4vKipcbiAqIEV4aXQgY29kZSByZXR1cm5lZCBieSBgZ2l0IHJlbW90ZSBhZGRgIHdoZW4gYSByZW1vdGUgd2l0aCB0aGUgcmVxdWVzdGVkIG5hbWVcbiAqIGFscmVhZHkgZXhpc3RzLiBgZ2l0IHJlbW90ZWAgZG9jdW1lbnRzIHRoaXMgZGVkaWNhdGVkIHN0YXR1cyBjb2RlLCBzbyB3ZSBjYW5cbiAqIHR1cm4gaXQgaW50byBhY3Rpb25hYmxlIGd1aWRhbmNlIGluc3RlYWQgb2YgYSBnZW5lcmljIGZhaWx1cmUgbWVzc2FnZS5cbiAqXG4gKiBTZWUgaHR0cHM6Ly9naXQtc2NtLmNvbS9kb2NzL2dpdC1yZW1vdGUjX2V4aXRfc3RhdHVzXG4gKi9cbmNvbnN0IEdJVF9SRU1PVEVfQUxSRUFEWV9FWElTVFNfRVhJVF9DT0RFID0gMztcblxuLyoqXG4gKiBUcmFuc2xhdGVzIGEgZmFpbHVyZSBvZiB0aGUgZ2l0IHJlbW90ZSBzZXR1cCBzdGVwIGludG8gYW4gYWN0aW9uYWJsZSBlcnJvci5cbiAqXG4gKiBXaGVuIGBnaXQgcmVtb3RlIGFkZCBvcmlnaW5gIGV4aXRzIHdpdGggY29kZSAzIHRoZSByZW1vdGUgYWxyZWFkeSBleGlzdHMsXG4gKiB3aGljaCBpcyBhIHJlY292ZXJhYmxlIHNpdHVhdGlvbjogdGhlIG1lc3NhZ2UgdGVsbHMgdGhlIHVzZXIgaG93IHRvIGZpeCBpdC5cbiAqIFRoZSBvcmlnaW5hbCBFeGVjYUVycm9yIGlzIHByZXNlcnZlZCBhcyBgY2F1c2VgIHNvIGAtLXZlcmJvc2VgIHN0aWxsIHN1cmZhY2VzXG4gKiB0aGUgZXhpdCBjb2RlIGFuZCBnaXQncyBvd24gc3RkZXJyLlxuICovXG5leHBvcnQgY29uc3QgbWFwR2l0UmVtb3RlQWRkRXJyb3IgPSAoY2F1c2U6IHVua25vd24pOiBFcnJvciA9PiB7XG4gIGlmIChcbiAgICBjYXVzZSBpbnN0YW5jZW9mIEV4ZWNhRXJyb3IgJiZcbiAgICBjYXVzZS5leGl0Q29kZSA9PT0gR0lUX1JFTU9URV9BTFJFQURZX0VYSVNUU19FWElUX0NPREVcbiAgKSB7XG4gICAgcmV0dXJuIG5ldyBFcnJvcihcbiAgICAgIFwiQSBnaXQgcmVtb3RlIG5hbWVkICdvcmlnaW4nIGFscmVhZHkgZXhpc3RzLiBSZW1vdmUgaXQgd2l0aCBgZ2l0IHJlbW90ZSByZW1vdmUgb3JpZ2luYCBhbmQgcnVuIHRoZSBjb21tYW5kIGFnYWluLCBvciBzdGFydCBmcm9tIGEgY2xlYW4gZGlyZWN0b3J5LlwiLFxuICAgICAgeyBjYXVzZSB9LFxuICAgICk7XG4gIH1cbiAgcmV0dXJuIG5ldyBFcnJvcihcbiAgICBcIkZhaWxlZCB0byBzZXQgdXAgdGhlIGxvY2FsIGdpdCByZXBvc2l0b3J5IGFuZCBpdHMgJ29yaWdpbicgcmVtb3RlLlwiLFxuICAgIHsgY2F1c2UgfSxcbiAgKTtcbn07XG5cbmNvbnN0IGluaXRpYWxpemVHaXRSZXBvc2l0b3J5V2l0aFByZXNlbnRlciA9XG4gIChwcmVzZW50ZXI6IENvbW1hbmRQcmVzZW50ZXIpID0+IChyZXBvc2l0b3J5OiBSZXBvc2l0b3J5KSA9PiB7XG4gICAgY29uc3QgYnJhbmNoTmFtZSA9IFwiZmVhdHVyZXMvc2NhZmZvbGQtd29ya3NwYWNlXCI7XG4gICAgY29uc3QgZ2l0JCA9ICQoe1xuICAgICAgc2hlbGw6IHRydWUsXG4gICAgfSk7XG4gICAgLy8gYGdpdCByZW1vdGUgYWRkYCBpcyB0cmFja2VkIHNlcGFyYXRlbHkgZnJvbSB0aGUgcHVzaCBzbyBpdHMgZG9jdW1lbnRlZFxuICAgIC8vIGV4aXQgY29kZXMgKGUuZy4gMyA9IHJlbW90ZSBhbHJlYWR5IGV4aXN0cykgc3VyZmFjZSBhIHNwZWNpZmljLCBhY3Rpb25hYmxlXG4gICAgLy8gbWVzc2FnZSBpbnN0ZWFkIG9mIGJlaW5nIG1pc3JlcG9ydGVkIGFzIGEgcHVzaCBmYWlsdXJlLlxuICAgIGNvbnN0IGNvbmZpZ3VyZVJlbW90ZSA9IGFzeW5jICgpID0+IHtcbiAgICAgIGF3YWl0IGdpdCRgZ2l0IGluaXRgO1xuICAgICAgYXdhaXQgZ2l0JGBnaXQgcmVtb3RlIGFkZCBvcmlnaW4gJHtyZXBvc2l0b3J5Lm9yaWdpbn1gO1xuICAgIH07XG4gICAgY29uc3QgcHVzaFRvT3JpZ2luID0gYXN5bmMgKCkgPT4ge1xuICAgICAgYXdhaXQgZ2l0JGBnaXQgZmV0Y2ggb3JpZ2luIG1haW5gO1xuICAgICAgYXdhaXQgZ2l0JGBnaXQgY2hlY2tvdXQgLWIgJHticmFuY2hOYW1lfWA7XG4gICAgICAvLyBUZXJyYWZvcm0gY3JlYXRlcyBgbWFpbmAgd2l0aCBhbiBpbml0aWFsIFJFQURNRSBjb21taXQuXG4gICAgICAvLyBSZXNldCB0byBgb3JpZ2luL21haW5gIHNvIHRoaXMgYnJhbmNoIGlzIGJhc2VkIG9uIHRoZSByZW1vdGUgZGVmYXVsdCBicmFuY2gsXG4gICAgICAvLyB3aGlsZSBrZWVwaW5nIHRoZSBzY2FmZm9sZGVkIGxvY2FsIGZpbGVzIGluIHRoZSB3b3JraW5nIHRyZWUgZm9yIGEgY2xlYW4gUFIgZGlmZi5cbiAgICAgIGF3YWl0IGdpdCRgZ2l0IHJlc2V0IG9yaWdpbi9tYWluYDtcbiAgICAgIGF3YWl0IGdpdCRgZ2l0IGFkZCAuYDtcbiAgICAgIGF3YWl0IGdpdCRgZ2l0IGNvbW1pdCAtLW5vLWdwZy1zaWduIC1tIFwiU2NhZmZvbGQgd29ya3NwYWNlXCJgO1xuICAgICAgYXdhaXQgZ2l0JGBnaXQgcHVzaCAtdSBvcmlnaW4gJHticmFuY2hOYW1lfWA7XG4gICAgfTtcbiAgICByZXR1cm4gdHJhY2tTdGVwKFxuICAgICAgcHJlc2VudGVyLFxuICAgICAgXCJDb25maWd1cmluZyB0aGUgZ2l0IHJlbW90ZS4uLlwiLFxuICAgICAgY29uZmlndXJlUmVtb3RlLFxuICAgICAgbWFwR2l0UmVtb3RlQWRkRXJyb3IsXG4gICAgKVxuICAgICAgLmFuZFRoZW4oKCkgPT5cbiAgICAgICAgdHJhY2tTdGVwKFxuICAgICAgICAgIHByZXNlbnRlcixcbiAgICAgICAgICBcIlB1c2hpbmcgY29kZSB0byBHaXRIdWIuLi5cIixcbiAgICAgICAgICBwdXNoVG9PcmlnaW4sXG4gICAgICAgICAgYXNFcnJvcihcIkZhaWxlZCB0byBwdXNoIGNvZGUgdG8gR2l0SHViLlwiKSxcbiAgICAgICAgKSxcbiAgICAgIClcbiAgICAgIC5tYXAoKCkgPT4gKHsgYnJhbmNoTmFtZSwgcmVwb3NpdG9yeSB9KSk7XG4gIH07XG5cbmNvbnN0IGNyZWF0ZVB1bGxSZXF1ZXN0V2l0aFByZXNlbnRlciA9XG4gICh7IGdpdEh1YlNlcnZpY2UsIHByZXNlbnRlciB9OiBJbml0QWN0aW9uQ29udGV4dCkgPT5cbiAgKHtcbiAgICBicmFuY2hOYW1lLFxuICAgIHJlcG9zaXRvcnksXG4gIH06IExvY2FsV29ya3NwYWNlKTogUmVzdWx0QXN5bmM8UHVsbFJlcXVlc3QgfCB1bmRlZmluZWQsIEVycm9yPiA9PlxuICAgIHRyYWNrU3RlcChcbiAgICAgIHByZXNlbnRlcixcbiAgICAgIFwiQ3JlYXRpbmcgUHVsbCBSZXF1ZXN0Li4uXCIsXG4gICAgICAoKSA9PlxuICAgICAgICBnaXRIdWJTZXJ2aWNlLmNyZWF0ZVB1bGxSZXF1ZXN0KHtcbiAgICAgICAgICBiYXNlOiBcIm1haW5cIixcbiAgICAgICAgICBib2R5OiBcIlRoaXMgUFIgY29udGFpbnMgdGhlIHNjYWZmb2xkZWQgbW9ub3JlcG8gc3RydWN0dXJlLlwiLFxuICAgICAgICAgIGhlYWQ6IGJyYW5jaE5hbWUsXG4gICAgICAgICAgb3duZXI6IHJlcG9zaXRvcnkub3duZXIsXG4gICAgICAgICAgcmVwbzogcmVwb3NpdG9yeS5uYW1lLFxuICAgICAgICAgIHRpdGxlOiBcIlNjYWZmb2xkIHJlcG9zaXRvcnlcIixcbiAgICAgICAgfSksXG4gICAgICBhc0Vycm9yKFwiRmFpbGVkIHRvIGNyZWF0ZSBQdWxsIFJlcXVlc3QuXCIpLFxuICAgIClcbiAgICAgIC8vIElmIFBSIGNyZWF0aW9uIGZhaWxzLCBkb24ndCBibG9jayB0aGUgd29ya2Zsb3dcbiAgICAgIC5vckVsc2UoKCkgPT4gb2tBc3luYyh1bmRlZmluZWQpKTtcblxuY29uc3QgaGFuZGxlTmV3R2l0SHViUmVwb3NpdG9yeVdpdGhQcmVzZW50ZXIgPVxuICAoY29udGV4dDogSW5pdEFjdGlvbkNvbnRleHQpID0+XG4gIChwYXlsb2FkOiBNb25vcmVwb1BheWxvYWQpOiBSZXN1bHRBc3luYzxSZXBvc2l0b3J5UHVsbFJlcXVlc3QsIEVycm9yPiA9PlxuICAgIGNyZWF0ZVJlbW90ZVJlcG9zaXRvcnlXaXRoUHJlc2VudGVyKGNvbnRleHQucHJlc2VudGVyKShwYXlsb2FkKVxuICAgICAgLmFuZFRoZW4oaW5pdGlhbGl6ZUdpdFJlcG9zaXRvcnlXaXRoUHJlc2VudGVyKGNvbnRleHQucHJlc2VudGVyKSlcbiAgICAgIC5hbmRUaGVuKChsb2NhbFdvcmtzcGFjZSkgPT5cbiAgICAgICAgY3JlYXRlUHVsbFJlcXVlc3RXaXRoUHJlc2VudGVyKGNvbnRleHQpKGxvY2FsV29ya3NwYWNlKS5tYXAoKHByKSA9PiAoe1xuICAgICAgICAgIHByLFxuICAgICAgICAgIHJlcG9zaXRvcnk6IGxvY2FsV29ya3NwYWNlLnJlcG9zaXRvcnksXG4gICAgICAgIH0pKSxcbiAgICAgICk7XG5cbmNvbnN0IGhhbmRsZUdlbmVyYXRvckVycm9yID0gKGVycjogdW5rbm93bikgPT4ge1xuICBjb25zdCBsb2dnZXIgPSBnZXRMb2dnZXIoW1wiZHgtY2xpXCIsIFwiaW5pdFwiXSk7XG4gIGlmIChlcnIgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgIGxvZ2dlci5lcnJvcihlcnIubWVzc2FnZSk7XG4gIH1cbiAgcmV0dXJuIG5ldyBFcnJvcihcIkZhaWxlZCB0byBydW4gdGhlIGdlbmVyYXRvclwiLCB7IGNhdXNlOiBlcnIgfSk7XG59O1xuXG4vKipcbiAqIFJlc29sdmVzIHdoZXRoZXIgdGhlIHNjYWZmb2xkZWQgcmVwb3NpdG9yeSBzaG91bGQgYmUgcHVibGlzaGVkIHRvIEdpdEh1Yi5cbiAqXG4gKiBXaGVuIHRoZSBjYWxsZXIgYWxyZWFkeSBrbm93cyB0aGUgYW5zd2VyIChlLmcuIHRoZSB1c2VyIHBhc3NlZCBgLS1wdWJsaXNoYFxuICogb24gdGhlIGNvbW1hbmQgbGluZSksIHRoYXQgdmFsdWUgaXMgdXNlZCBhcy1pcyBhbmQgbm8gcHJvbXB0IGlzIHNob3duLiBXaGVuXG4gKiB0aGUgcHJlZmVyZW5jZSBpcyBsZWZ0IHVuZGVmaW5lZCAoZmxhZyBvbWl0dGVkKSwgdGhlIHVzZXIgaXMgYXNrZWRcbiAqIGludGVyYWN0aXZlbHkuXG4gKi9cbmV4cG9ydCBjb25zdCBjb25maXJtR2l0SHViUmVwb0NyZWF0aW9uID0gKFxuICBwYXlsb2FkOiBNb25vcmVwb1BheWxvYWQsXG4gIHB1Ymxpc2hQcmVmZXJlbmNlPzogYm9vbGVhbixcbik6IFJlc3VsdEFzeW5jPGJvb2xlYW4sIEVycm9yPiA9PlxuICAvLyBBIHByZWZlcmVuY2UgcHJvdmlkZWQgdXAtZnJvbnQgKHZpYSBgLS1wdWJsaXNoYCkgc2tpcHMgdGhlIGludGVyYWN0aXZlIHByb21wdC5cbiAgcHVibGlzaFByZWZlcmVuY2UgIT09IHVuZGVmaW5lZFxuICAgID8gb2tBc3luYyhwdWJsaXNoUHJlZmVyZW5jZSlcbiAgICA6IFJlc3VsdEFzeW5jLmZyb21Qcm9taXNlKFxuICAgICAgICBpbnF1aXJlci5wcm9tcHQoe1xuICAgICAgICAgIGRlZmF1bHQ6IERFRkFVTFRfR0lUSFVCX1BVQkxJU0hfQ09ORklSTUFUSU9OLFxuICAgICAgICAgIG1lc3NhZ2U6IGBUaGUgcHJvamVjdCBpcyBjcmVhdGVkIG9uICR7Y2hhbGsuZ3JlZW4ocGF5bG9hZC5yZXBvTmFtZSl9LiBXb3VsZCB5b3UgbGlrZSB0byBwdWJsaXNoIGl0IHRvIEdpdEh1YiBhdCAke2NoYWxrLmdyZWVuKGAke3BheWxvYWQucmVwb093bmVyfS8ke3BheWxvYWQucmVwb05hbWV9YCl9IG5vdz9gLFxuICAgICAgICAgIG5hbWU6IFwiY29uZmlybVwiLFxuICAgICAgICAgIHR5cGU6IFwiY29uZmlybVwiLFxuICAgICAgICB9KSxcbiAgICAgICAgKGNhdXNlKSA9PlxuICAgICAgICAgIG5ldyBFcnJvcihcIkZhaWxlZCB0byByZWFkIEdpdEh1YiBwdWJsaXNoIGNvbmZpcm1hdGlvblwiLCB7IGNhdXNlIH0pLFxuICAgICAgKS5hbmRUaGVuKChhbnN3ZXIpID0+IHtcbiAgICAgICAgY29uc3QgcGFyc2VkQW5zd2VyID0gelxuICAgICAgICAgIC5vYmplY3Qoe1xuICAgICAgICAgICAgY29uZmlybTogei5ib29sZWFuKCksXG4gICAgICAgICAgfSlcbiAgICAgICAgICAuc2FmZVBhcnNlKGFuc3dlcik7XG4gICAgICAgIGlmICghcGFyc2VkQW5zd2VyLnN1Y2Nlc3MpIHtcbiAgICAgICAgICByZXR1cm4gZXJyQXN5bmMoXG4gICAgICAgICAgICBuZXcgRXJyb3IoXCJJbnZhbGlkIEdpdEh1YiBwdWJsaXNoIGNvbmZpcm1hdGlvblwiLCB7XG4gICAgICAgICAgICAgIGNhdXNlOiBwYXJzZWRBbnN3ZXIuZXJyb3IsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG9rQXN5bmMocGFyc2VkQW5zd2VyLmRhdGEuY29uZmlybSk7XG4gICAgICB9KTtcblxuY29uc3QgcnVuSW5pdEFjdGlvbiA9ICh7XG4gIGdpdEh1YlNlcnZpY2UsXG4gIGluaXRpYWxBbnN3ZXJzID0ge30sXG4gIHByZXNlbnRlcixcbn06IEluaXRBY3Rpb25Db250ZXh0KTogUmVzdWx0QXN5bmM8U3VtbWFyeUlucHV0LCBFcnJvcj4gPT4ge1xuICBjb25zdCB7IHB1Ymxpc2hUb0dpdEh1YiwgLi4ubW9ub3JlcG9Jbml0aWFsQW5zd2VycyB9ID0gaW5pdGlhbEFuc3dlcnM7XG5cbiAgcmV0dXJuIHRyYWNrU3RlcChcbiAgICBwcmVzZW50ZXIsXG4gICAgXCJJbml0aWFsaXppbmcgd29ya3NwYWNlIGdlbmVyYXRvci4uLlwiLFxuICAgIGdldFBsb3BJbnN0YW5jZSxcbiAgICBhc0Vycm9yKFwiRmFpbGVkIHRvIGluaXRpYWxpemUgcGxvcFwiKSxcbiAgKVxuICAgIC5hbmRUaGVuKChwbG9wKSA9PlxuICAgICAgLy8gVGhlIHByb21wdCBwaGFzZSBtdXN0IHJ1biBvdXRzaWRlIHRyYWNrU3RlcDogaW4gdGV4dCBtb2RlIHRyYWNrU3RlcFxuICAgICAgLy8gcmVuZGVycyBhIHNwaW5uZXIgdGhhdCBvY2N1cGllcyB0aGUgVFRZIGFuZCBoaWRlcyB0aGUgcHJvbXB0cy5cbiAgICAgIFJlc3VsdEFzeW5jLmZyb21Qcm9taXNlKFxuICAgICAgICBjb2xsZWN0TW9ub3JlcG9QYXlsb2FkKHBsb3AsIGdpdEh1YlNlcnZpY2UsIG1vbm9yZXBvSW5pdGlhbEFuc3dlcnMpLFxuICAgICAgICBoYW5kbGVHZW5lcmF0b3JFcnJvcixcbiAgICAgICksXG4gICAgKVxuICAgIC5hbmRUaGVuKCh7IGdlbmVyYXRvciwgcGF5bG9hZCB9KSA9PlxuICAgICAgdHJhY2tTdGVwKFxuICAgICAgICBwcmVzZW50ZXIsXG4gICAgICAgIFwiU2NhZmZvbGRpbmcgd29ya3NwYWNlLi4uXCIsXG4gICAgICAgICgpID0+IHJ1bk1vbm9yZXBvQWN0aW9ucyhnZW5lcmF0b3IsIHBheWxvYWQpLFxuICAgICAgICBoYW5kbGVHZW5lcmF0b3JFcnJvcixcbiAgICAgICksXG4gICAgKVxuICAgIC5hbmRUZWUoKHBheWxvYWQpID0+IHtcbiAgICAgIHByb2Nlc3MuY2hkaXIocGF5bG9hZC5yZXBvTmFtZSk7XG4gICAgfSlcbiAgICAuYW5kVGhlbigocGF5bG9hZCkgPT5cbiAgICAgIGNvbmZpcm1HaXRIdWJSZXBvQ3JlYXRpb24ocGF5bG9hZCwgcHVibGlzaFRvR2l0SHViKS5hbmRUaGVuPFxuICAgICAgICBTdW1tYXJ5SW5wdXQsXG4gICAgICAgIEVycm9yXG4gICAgICA+KChjb25maXJtZWQpID0+XG4gICAgICAgIGNvbmZpcm1lZFxuICAgICAgICAgID8gaGFuZGxlTmV3R2l0SHViUmVwb3NpdG9yeVdpdGhQcmVzZW50ZXIoe1xuICAgICAgICAgICAgICBnaXRIdWJTZXJ2aWNlLFxuICAgICAgICAgICAgICBwcmVzZW50ZXIsXG4gICAgICAgICAgICB9KShwYXlsb2FkKVxuICAgICAgICAgIDogb2tBc3luYyh7IGdpdEh1YlJlcG9DcmVhdGlvblNraXBwZWQ6IHRydWUsIHBheWxvYWQgfSksXG4gICAgICApLFxuICAgICk7XG59O1xuXG5jb25zdCByZXBvcnRTdW1tYXJ5ID1cbiAgKHByZXNlbnRlcjogQ29tbWFuZFByZXNlbnRlciwgb3V0cHV0TW9kZTogXCJqc29uXCIgfCBcInRleHRcIikgPT5cbiAgKHJlc3VsdDogU3VtbWFyeUlucHV0KSA9PiB7XG4gICAgaWYgKG91dHB1dE1vZGUgPT09IFwianNvblwiKSB7XG4gICAgICBwcmVzZW50ZXIucmVwb3J0UmVzdWx0KHJlc3VsdCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRpc3BsYXlTdW1tYXJ5KHJlc3VsdCk7XG4gICAgfVxuICB9O1xuXG5leHBvcnQgY29uc3QgbWFrZUluaXRDb21tYW5kID0gKFxuICByZXF1aXJlR2l0SHViQXV0aDogR2l0SHViQXV0aEZhY3RvcnksXG4pOiBDb21tYW5kID0+XG4gIG5ldyBDb21tYW5kKClcbiAgICAubmFtZShcImluaXRcIilcbiAgICAuZGVzY3JpcHRpb24oXCJJbml0aWFsaXplIGEgbmV3IERYIHdvcmtzcGFjZVwiKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbihcIi0tbmFtZSA8bmFtZT5cIiwgXCJSZXBvc2l0b3J5IG5hbWVcIikpXG4gICAgLmFkZE9wdGlvbihcbiAgICAgIG5ldyBPcHRpb24oXG4gICAgICAgIFwiLS1vd25lciA8b3duZXI+XCIsXG4gICAgICAgIFwiR2l0SHViIG9yZ2FuaXphdGlvbiBvciB1c2VyIHRoYXQgd2lsbCBvd24gdGhlIHJlcG9zaXRvcnlcIixcbiAgICAgICksXG4gICAgKVxuICAgIC5hZGRPcHRpb24oXG4gICAgICBuZXcgT3B0aW9uKFwiLS1kZXNjcmlwdGlvbiA8ZGVzY3JpcHRpb24+XCIsIFwiUmVwb3NpdG9yeSBkZXNjcmlwdGlvblwiKSxcbiAgICApXG4gICAgLmFkZE9wdGlvbihcbiAgICAgIG5ldyBPcHRpb24oXG4gICAgICAgIFwiLS1wdWJsaXNoXCIsXG4gICAgICAgIFwiUHVibGlzaCB0aGUgc2NhZmZvbGRlZCByZXBvc2l0b3J5IHRvIEdpdEh1YiB3aXRob3V0IHByb21wdGluZ1wiLFxuICAgICAgKS5kZWZhdWx0KHVuZGVmaW5lZCksXG4gICAgKVxuICAgIC5hY3Rpb24oYXN5bmMgZnVuY3Rpb24gKG9wdGlvbnM6IHVua25vd24pIHtcbiAgICAgIGNvbnN0IHsgb3V0cHV0IH0gPSB0aGlzLm9wdHNXaXRoR2xvYmFsczxHbG9iYWxPcHRpb25zPigpO1xuICAgICAgY29uc3QgcHJlc2VudGVyID0gY3JlYXRlQ29tbWFuZFByZXNlbnRlcihvdXRwdXQpO1xuXG4gICAgICBhd2FpdCBSZXN1bHRBc3luYy5mcm9tUHJvbWlzZShcbiAgICAgICAgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKSA9PiBwYXJzZUluaXRDb21tYW5kT3B0aW9ucyhvcHRpb25zKSksXG4gICAgICAgIChjYXVzZSkgPT5cbiAgICAgICAgICBjYXVzZSBpbnN0YW5jZW9mIEVycm9yXG4gICAgICAgICAgICA/IGNhdXNlXG4gICAgICAgICAgICA6IG5ldyBFcnJvcihcIkZhaWxlZCB0byBwYXJzZSBpbml0IGNvbW1hbmQgb3B0aW9uc1wiLCB7IGNhdXNlIH0pLFxuICAgICAgKVxuICAgICAgICAuYW5kVGhlbigoaW5pdE9wdGlvbnMpID0+XG4gICAgICAgICAgcnVuSW5pdFByZWNvbmRpdGlvbnMocHJlc2VudGVyKVxuICAgICAgICAgICAgLmFuZFRoZW4oKCkgPT4gcmVxdWlyZUdpdEh1YkF1dGgoKSlcbiAgICAgICAgICAgIC5hbmRUaGVuKChhdXRoKSA9PlxuICAgICAgICAgICAgICBydW5Jbml0QWN0aW9uKHtcbiAgICAgICAgICAgICAgICBnaXRIdWJTZXJ2aWNlOiBhdXRoLmdpdEh1YlNlcnZpY2UsXG4gICAgICAgICAgICAgICAgaW5pdGlhbEFuc3dlcnM6IGdldE1vbm9yZXBvSW5pdGlhbEFuc3dlcnMoaW5pdE9wdGlvbnMpLFxuICAgICAgICAgICAgICAgIHByZXNlbnRlcixcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICApLFxuICAgICAgICApXG4gICAgICAgIC5tYXRjaChcbiAgICAgICAgICByZXBvcnRTdW1tYXJ5KHByZXNlbnRlciwgb3V0cHV0KSxcbiAgICAgICAgICByZXBvcnRDb21tYW5kRXJyb3IodGhpcywgcHJlc2VudGVyLCBvdXRwdXQpLFxuICAgICAgICApO1xuICAgIH0pO1xuIl19
|
|
277
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5pdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9hZGFwdGVycy9jb21tYW5kZXIvY29tbWFuZHMvaW5pdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDN0MsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBQzFCLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQzVDLE9BQU8sRUFBRSxDQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBQ3RDLE9BQU8sUUFBUSxNQUFNLFVBQVUsQ0FBQztBQUNoQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDNUQsT0FBTyxLQUFLLElBQUksTUFBTSxXQUFXLENBQUM7QUFDbEMsT0FBTyxFQUFFLENBQUMsRUFBRSxNQUFNLEtBQUssQ0FBQztBQU94QixPQUFPLEVBR0wsVUFBVSxHQUNYLE1BQU0sMkJBQTJCLENBQUM7QUFDbkMsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRS9DLE9BQU8sRUFDTCxzQkFBc0IsRUFDdEIsZUFBZSxFQUNmLGtCQUFrQixHQUNuQixNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sRUFBRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNuRSxPQUFPLEVBQ0wsc0JBQXNCLEVBQ3RCLGlCQUFpQixHQUNsQixNQUFNLHdCQUF3QixDQUFDO0FBY2hDLE1BQU0sMkJBQTJCLEdBQUcsQ0FDbEMsS0FBbUIsRUFDdUIsRUFBRSxDQUM1QywyQkFBMkIsSUFBSSxLQUFLLENBQUM7QUFzQnZDLE1BQU0sU0FBUyxHQUFHLENBQ2hCLFNBQTJCLEVBQzNCLElBQVksRUFDWixJQUFzQixFQUN0QixRQUErQixFQUNaLEVBQUUs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QUFFLFVBQVUsQ0FBQyxDQUNoRCxDQUFDO0FBQ04sQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBnZXRMb2dnZXIgfSBmcm9tIFwiQGxvZ3RhcGUvbG9ndGFwZVwiO1xuaW1wb3J0IGNoYWxrIGZyb20gXCJjaGFsa1wiO1xuaW1wb3J0IHsgQ29tbWFuZCwgT3B0aW9uIH0gZnJvbSBcImNvbW1hbmRlclwiO1xuaW1wb3J0IHsgJCwgRXhlY2FFcnJvciB9IGZyb20gXCJleGVjYVwiO1xuaW1wb3J0IGlucXVpcmVyIGZyb20gXCJpbnF1aXJlclwiO1xuaW1wb3J0IHsgZXJyQXN5bmMsIG9rQXN5bmMsIFJlc3VsdEFzeW5jIH0gZnJvbSBcIm5ldmVydGhyb3dcIjtcbmltcG9ydCAqIGFzIHBhdGggZnJvbSBcIm5vZGU6cGF0aFwiO1xuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIjtcblxuaW1wb3J0IHR5cGUgeyBDb21tYW5kUHJlc2VudGVyIH0gZnJvbSBcIi4uLy4uLy4uL2RvbWFpbi9jb21tYW5kLXByZXNlbnRlci5qc1wiO1xuaW1wb3J0IHR5cGUgeyBDbGlFbnYgfSBmcm9tIFwiLi4vZW52LmpzXCI7XG5pbXBvcnQgdHlwZSB7IEdsb2JhbE9wdGlvbnMgfSBmcm9tIFwiLi4vZ2xvYmFsLW9wdGlvbnMuanNcIjtcblxuaW1wb3J0IHsgR2l0SHViQXV0aEZhY3RvcnkgfSBmcm9tIFwiLi4vLi4vLi4vZG9tYWluL2RlcGVuZGVuY2llcy5qc1wiO1xuaW1wb3J0IHtcbiAgR2l0SHViU2VydmljZSxcbiAgUHVsbFJlcXVlc3QsXG4gIFJlcG9zaXRvcnksXG59IGZyb20gXCIuLi8uLi8uLi9kb21haW4vZ2l0aHViLmpzXCI7XG5pbXBvcnQgeyB0ZiQgfSBmcm9tIFwiLi4vLi4vZXhlY2EvdGVycmFmb3JtLmpzXCI7XG5pbXBvcnQgeyBQYXlsb2FkIGFzIE1vbm9yZXBvUGF5bG9hZCB9IGZyb20gXCIuLi8uLi9wbG9wL2dlbmVyYXRvcnMvbW9ub3JlcG8vaW5kZXguanNcIjtcbmltcG9ydCB7XG4gIGNvbGxlY3RNb25vcmVwb1BheWxvYWQsXG4gIGdldFBsb3BJbnN0YW5jZSxcbiAgcnVuTW9ub3JlcG9BY3Rpb25zLFxufSBmcm9tIFwiLi4vLi4vcGxvcC9pbmRleC5qc1wiO1xuaW1wb3J0IHsgYXNFcnJvciwgcmVwb3J0Q29tbWFuZEVycm9yIH0gZnJvbSBcIi4uL2NvbW1hbmQtZXJyb3JzLmpzXCI7XG5pbXBvcnQge1xuICBjcmVhdGVDb21tYW5kUHJlc2VudGVyLFxuICByZXNvbHZlT3V0cHV0TW9kZSxcbn0gZnJvbSBcIi4uL3ByZXNlbnRlcnMvaW5kZXguanNcIjtcblxudHlwZSBHaXRIdWJSZXBvQ3JlYXRpb25Ta2lwcGVkUmVzdWx0ID0ge1xuICBnaXRIdWJSZXBvQ3JlYXRpb25Ta2lwcGVkOiB0cnVlO1xuICBwYXlsb2FkOiBNb25vcmVwb1BheWxvYWQ7XG59O1xuXG50eXBlIEluaXRSZXN1bHQgPSB7XG4gIHByPzogUHVsbFJlcXVlc3Q7XG4gIHJlcG9zaXRvcnk/OiBSZXBvc2l0b3J5O1xufTtcblxudHlwZSBTdW1tYXJ5SW5wdXQgPSBHaXRIdWJSZXBvQ3JlYXRpb25Ta2lwcGVkUmVzdWx0IHwgSW5pdFJlc3VsdDtcblxuY29uc3QgaXNHaXRIdWJSZXBvQ3JlYXRpb25Ta2lwcGVkID0gKFxuICBpbnB1dDogU3VtbWFyeUlucHV0LFxuKTogaW5wdXQgaXMgR2l0SHViUmVwb0NyZWF0aW9uU2tpcHBlZFJlc3VsdCA9PlxuICBcImdpdEh1YlJlcG9DcmVhdGlvblNraXBwZWRcIiBpbiBpbnB1dDtcblxudHlwZSBJbml0QWN0aW9uQ29udGV4dCA9IHtcbiAgZ2l0SHViU2VydmljZTogR2l0SHViU2VydmljZTtcbiAgaW5pdGlhbEFuc3dlcnM/OiBJbml0SW5pdGlhbEFuc3dlcnM7XG4gIHByZXNlbnRlcjogQ29tbWFuZFByZXNlbnRlcjtcbn07XG5cbnR5cGUgSW5pdEluaXRpYWxBbnN3ZXJzID0gUGFydGlhbDxNb25vcmVwb1BheWxvYWQ+ICYge1xuICBwdWJsaXNoVG9HaXRIdWI/OiBib29sZWFuO1xufTtcblxudHlwZSBMb2NhbFdvcmtzcGFjZSA9IHtcbiAgYnJhbmNoTmFtZTogc3RyaW5nO1xuICByZXBvc2l0b3J5OiBSZXBvc2l0b3J5O1xufTtcblxudHlwZSBSZXBvc2l0b3J5UHVsbFJlcXVlc3QgPSB7XG4gIHByPzogUHVsbFJlcXVlc3Q7XG4gIHJlcG9zaXRvcnk6IFJlcG9zaXRvcnk7XG59O1xuXG5jb25zdCB0cmFja1N0ZXAgPSA8VCwgRT4oXG4gIHByZXNlbnRlcjogQ29tbWFuZFByZXNlbnRlcixcbiAgbmFtZTogc3RyaW5nLFxuICB0YXNrOiAoKSA9PiBQcm9taXNlPFQ+LFxuICBtYXBFcnJvcjogKGNhdXNlOiB1bmtub3duKSA9PiBFLFxuKTogUmVzdWx0QXN5bmM8VCwgRT4gPT5cbiAgUmVzdWx0QXN5bmMuZnJvbVByb21pc2UocHJlc2VudGVyLnRyYWNrU3RlcChuYW1lLCB0YXNrKSwgbWFwRXJyb3IpO1xuXG5jb25zdCBkaXNwbGF5U3VtbWFyeSA9IChpbnB1dDogU3VtbWFyeUlucHV0KSA9PiB7XG4gIGNvbnN0IGRvY3NVcmwgPSBcImh0dHBzOi8vZHgucGFnb3BhLml0L2dldHRpbmctc3RhcnRlZFwiO1xuXG4gIGlmIChpc0dpdEh1YlJlcG9DcmVhdGlvblNraXBwZWQoaW5wdXQpKSB7XG4gICAgY29uc3QgeyBwYXlsb2FkIH0gPSBpbnB1dDtcbiAgICBjb25zb2xlLmxvZyhjaGFsay55ZWxsb3cuYm9sZChcIlxcbkdpdEh1YiByZXBvc2l0b3J5IGNyZWF0aW9uIHNraXBwZWQuXCIpKTtcbiAgICBjb25zb2xlLmxvZyhcbiAgICAgIGBUaGUgd29ya3NwYWNlIGZpbGVzIGhhdmUgYmVlbiBzY2FmZm9sZGVkIGluICR7Y2hhbGsuY3lhbihwYXlsb2FkLnJlcG9OYW1lICsgXCIvXCIpfS5gLFxuICAgICk7XG4gICAgY29uc29sZS5sb2coY2hhbGsuYm9sZChcIlxcblRvIGZpbmlzaCB0aGUgc2V0dXAgbWFudWFsbHk6XCIpKTtcbiAgICBsZXQgc3RlcCA9IDE7XG4gICAgY29uc29sZS5sb2coXG4gICAgICBgJHtzdGVwKyt9LiBDcmVhdGUgdGhlIEdpdEh1YiByZXBvc2l0b3J5IGJ5IGFwcGx5aW5nIHRoZSBUZXJyYWZvcm0gY29uZmlnIHNjYWZmb2xkZWQgYXQgJHtjaGFsay5jeWFuKGAke3BheWxvYWQucmVwb05hbWV9L2luZnJhL3JlcG9zaXRvcnlgKX06YCxcbiAgICApO1xuICAgIGNvbnNvbGUubG9nKFxuICAgICAgYCAgICAgICAke2NoYWxrLmN5YW4oYGNkICR7cGF5bG9hZC5yZXBvTmFtZX0vaW5mcmEvcmVwb3NpdG9yeSAmJiB0ZXJyYWZvcm0gaW5pdCAmJiB0ZXJyYWZvcm0gYXBwbHlgKX1gLFxuICAgICk7XG4gICAgY29uc29sZS5sb2coXG4gICAgICBgJHtzdGVwKyt9LiBQdXNoIHRoZSBzY2FmZm9sZGVkIGNvZGUgdG8gdGhlIG5ld2x5IGNyZWF0ZWQgcmVwb3NpdG9yeTpgLFxuICAgICk7XG4gICAgY29uc29sZS5sb2coXG4gICAgICBgICAgICAgICR7Y2hhbGsuY3lhbihgY2QgJHtwYXlsb2FkLnJlcG9OYW1lfSAmJiBnaXQgaW5pdCAmJiBnaXQgcmVtb3RlIGFkZCBvcmlnaW4gPHVybD4gJiYgZ2l0IHB1c2hgKX1gLFxuICAgICk7XG4gICAgY29uc29sZS5sb2coXG4gICAgICBgJHtzdGVwfS4gVmlzaXQgJHtjaGFsay51bmRlcmxpbmUoZG9jc1VybCl9IHRvIGRlcGxveSB5b3VyIGZpcnN0IHByb2plY3RcXG5gLFxuICAgICk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgeyBwciwgcmVwb3NpdG9yeSB9ID0gaW5wdXQ7XG4gIGNvbnNvbGUubG9nKGNoYWxrLmdyZWVuLmJvbGQoXCJcXG5Xb3Jrc3BhY2UgY3JlYXRlZCBzdWNjZXNzZnVsbHkhXCIpKTtcblxuICBpZiAocmVwb3NpdG9yeSkge1xuICAgIGNvbnNvbGUubG9nKGAtIE5hbWU6ICR7Y2hhbGsuY3lhbihyZXBvc2l0b3J5Lm5hbWUpfWApO1xuICAgIGNvbnNvbGUubG9nKGAtIEdpdEh1YiBSZXBvc2l0b3J5OiAke2NoYWxrLmN5YW4ocmVwb3NpdG9yeS51cmwpfVxcbmApO1xuICB9IGVsc2Uge1xuICAgIGNvbnNvbGUubG9nKFxuICAgICAgY2hhbGsueWVsbG93KFxuICAgICAgICBgXFxu4pqg77iPIEdpdEh1YiByZXBvc2l0b3J5IG1heSBub3QgaGF2ZSBiZWVuIGNyZWF0ZWQgYXV0b21hdGljYWxseS5gLFxuICAgICAgKSxcbiAgICApO1xuICB9XG5cbiAgaWYgKHByKSB7XG4gICAgbGV0IHN0ZXAgPSAxO1xuICAgIGNvbnNvbGUubG9nKGNoYWxrLmdyZWVuLmJvbGQoXCJcXG5OZXh0IFN0ZXBzOlwiKSk7XG4gICAgY29uc29sZS5sb2coXG4gICAgICBgJHtzdGVwKyt9LiBSZXZpZXcgdGhlIFB1bGwgUmVxdWVzdCBpbiB0aGUgR2l0SHViIHJlcG9zaXRvcnk6ICR7Y2hhbGsudW5kZXJsaW5lKHByLnVybCl9YCxcbiAgICApO1xuICAgIGNvbnNvbGUubG9nKFxuICAgICAgYCR7c3RlcH0uIFZpc2l0ICR7Y2hhbGsudW5kZXJsaW5lKGRvY3NVcmwpfSB0byBkZXBsb3kgeW91ciBmaXJzdCBwcm9qZWN0XFxuYCxcbiAgICApO1xuICB9IGVsc2Uge1xuICAgIGNvbnNvbGUubG9nKFxuICAgICAgY2hhbGsueWVsbG93KGBcXG7imqDvuI8gVGhlcmUgd2FzIGFuIGVycm9yIGR1cmluZyBQdWxsIFJlcXVlc3QgY3JlYXRpb24uYCksXG4gICAgKTtcbiAgICBjb25zb2xlLmxvZyhcbiAgICAgIGBQbGVhc2UsIG1hbnVhbGx5IGNyZWF0ZSBhIFB1bGwgUmVxdWVzdCBpbiB0aGUgR2l0SHViIHJlcG9zaXRvcnkgdG8gcmV2aWV3IHRoZSBzY2FmZm9sZGVkIGNvZGUuXFxuYCxcbiAgICApO1xuICB9XG59O1xuXG5jb25zdCBjaGVja1RlcnJhZm9ybUNsaSA9ICgpID0+IHRmJGB0ZXJyYWZvcm0gLXZlcnNpb25gO1xuXG5jb25zdCB0cmFja1RlcnJhZm9ybUNsaUlzSW5zdGFsbGVkID0gKHByZXNlbnRlcjogQ29tbWFuZFByZXNlbnRlcikgPT5cbiAgdHJhY2tTdGVwKFxuICAgIHByZXNlbnRlcixcbiAgICBcIkNoZWNraW5nIFRlcnJhZm9ybSBpbnN0YWxsYXRpb24uLi5cIixcbiAgICBjaGVja1RlcnJhZm9ybUNsaSxcbiAgICBhc0Vycm9yKFxuICAgICAgXCJQbGVhc2UgaW5zdGFsbCB0ZXJyYWZvcm0gQ0xJIGJlZm9yZSBydW5uaW5nIHRoaXMgY29tbWFuZC4gSWYgeW91IHVzZSB0ZmVudiwgcnVuOiB0ZmVudiBpbnN0YWxsIGxhdGVzdCAmJiB0ZmVudiB1c2UgbGF0ZXN0XCIsXG4gICAgKSxcbiAgKTtcblxuY29uc3QgY2hlY2tDb3JlcGFjayA9ICgpID0+IHRmJGBjb3JlcGFjayAtdmA7XG5cbmNvbnN0IHRyYWNrQ29yZXBhY2tJc0luc3RhbGxlZCA9IChwcmVzZW50ZXI6IENvbW1hbmRQcmVzZW50ZXIpID0+XG4gIHRyYWNrU3RlcChcbiAgICBwcmVzZW50ZXIsXG4gICAgXCJDaGVja2luZyBDb3JlcGFjayBpbnN0YWxsYXRpb24uLi5cIixcbiAgICBjaGVja0NvcmVwYWNrLFxuICAgIGFzRXJyb3IoXCJQbGVhc2UgaW5zdGFsbCBDb3JlcGFjayBiZWZvcmUgcnVubmluZyB0aGlzIGNvbW1hbmQuXCIpLFxuICApO1xuXG5jb25zdCBhenVyZUFjY291bnRTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIHVzZXI6IHoub2JqZWN0KHtcbiAgICBuYW1lOiB6LnN0cmluZygpLm1pbigxKSxcbiAgfSksXG59KTtcblxuY29uc3QgZW5zdXJlQXpMb2dpbiA9IGFzeW5jICgpOiBQcm9taXNlPHN0cmluZz4gPT4ge1xuICBjb25zdCB7IHN0ZG91dCB9ID0gYXdhaXQgdGYkYGF6IGFjY291bnQgc2hvd2A7XG4gIC8vIGBheiBhY2NvdW50IHNob3dgIHJlYWRzIHRoZSBjYWNoZWQgQ0xJIGNvbnRleHQsIGJ1dCBgYXogZ3JvdXAgbGlzdGBcbiAgLy8gZmFpbHMgd2hlbiB0aGUgY3VycmVudCBzZXNzaW9uIHRva2VuIGhhcyBleHBpcmVkLlxuICBhd2FpdCB0ZiRgYXogZ3JvdXAgbGlzdGA7XG4gIGNvbnN0IHBhcnNlZCA9IEpTT04ucGFyc2Uoc3Rkb3V0KTtcbiAgY29uc3QgeyB1c2VyIH0gPSBhenVyZUFjY291bnRTY2hlbWEucGFyc2UocGFyc2VkKTtcbiAgcmV0dXJuIHVzZXIubmFtZTtcbn07XG5cbmNvbnN0IHRyYWNrQXpMb2dpbiA9IChwcmVzZW50ZXI6IENvbW1hbmRQcmVzZW50ZXIpID0+XG4gIHRyYWNrU3RlcChcbiAgICBwcmVzZW50ZXIsXG4gICAgXCJDaGVja2luZyBBenVyZSBsb2dpbiBzdGF0dXMuLi5cIixcbiAgICBlbnN1cmVBekxvZ2luLFxuICAgIGFzRXJyb3IoXG4gICAgICBcIlBsZWFzZSBsb2cgaW4gdG8gQXp1cmUgQ0xJIHVzaW5nIGBheiBsb2dpbmAgYmVmb3JlIHJ1bm5pbmcgdGhpcyBjb21tYW5kLlwiLFxuICAgICksXG4gICk7XG5cbi8vIFRPRE8oQ0VTLTE4MTApOiBNYWtlIHRoZXNlIGNoZWNrcyBjb25jdXJyZW50IHRvIHNwZWVkIHVwIHRoZSBwcmVjb25kaXRpb25zIGNoZWNrIHBoYXNlXG5leHBvcnQgY29uc3QgcnVuSW5pdFByZWNvbmRpdGlvbnMgPSAocHJlc2VudGVyOiBDb21tYW5kUHJlc2VudGVyKSA9PlxuICB0cmFja1RlcnJhZm9ybUNsaUlzSW5zdGFsbGVkKHByZXNlbnRlcikuYW5kVGhlbigoKSA9PlxuICAgIHRyYWNrQ29yZXBhY2tJc0luc3RhbGxlZChwcmVzZW50ZXIpLFxuICApO1xuXG4vLyBUT0RPKENFUy0xODEwKTogTWFrZSB0aGVzZSBjaGVja3MgY29uY3VycmVudCB0byBzcGVlZCB1cCB0aGUgcHJlY29uZGl0aW9ucyBjaGVjayBwaGFzZVxuZXhwb3J0IGNvbnN0IHJ1bkFkZEVudmlyb25tZW50UHJlY29uZGl0aW9ucyA9IChwcmVzZW50ZXI6IENvbW1hbmRQcmVzZW50ZXIpID0+XG4gIHRyYWNrVGVycmFmb3JtQ2xpSXNJbnN0YWxsZWQocHJlc2VudGVyKVxuICAgIC5hbmRUaGVuKCgpID0+IHRyYWNrQXpMb2dpbihwcmVzZW50ZXIpKVxuICAgIC5hbmRUaGVuKCgpID0+IHRyYWNrQ29yZXBhY2tJc0luc3RhbGxlZChwcmVzZW50ZXIpKTtcblxuY29uc3QgREVGQVVMVF9HSVRIVUJfUFVCTElTSF9DT05GSVJNQVRJT04gPSB0cnVlO1xuXG5leHBvcnQgY29uc3QgaW5pdENvbW1hbmRPcHRpb25zU2NoZW1hID0gei5vYmplY3Qoe1xuICBkZXNjcmlwdGlvbjogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBuYW1lOiB6LnN0cmluZygpLnRyaW0oKS5taW4oMSwgXCJSZXBvc2l0b3J5IG5hbWUgY2Fubm90IGJlIGVtcHR5XCIpLm9wdGlvbmFsKCksXG4gIG93bmVyOiB6LnN0cmluZygpLnRyaW0oKS5taW4oMSwgXCJHaXRIdWIgb3duZXIgY2Fubm90IGJlIGVtcHR5XCIpLm9wdGlvbmFsKCksXG4gIHB1Ymxpc2g6IHouYm9vbGVhbigpLm9wdGlvbmFsKCksXG59KTtcblxuZXhwb3J0IHR5cGUgSW5pdENvbW1hbmRPcHRpb25zID0gei5pbmZlcjx0eXBlb2YgaW5pdENvbW1hbmRPcHRpb25zU2NoZW1hPjtcblxuZXhwb3J0IGNvbnN0IHBhcnNlSW5pdENvbW1hbmRPcHRpb25zID0gKGlucHV0OiB1bmtub3duKTogSW5pdENvbW1hbmRPcHRpb25zID0+IHtcbiAgY29uc3QgcmVzdWx0ID0gaW5pdENvbW1hbmRPcHRpb25zU2NoZW1hLnNhZmVQYXJzZShpbnB1dCk7XG4gIGlmICghcmVzdWx0LnN1Y2Nlc3MpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgSW52YWxpZCBpbml0IGNvbW1hbmQgb3B0aW9uczpcXG4ke3oucHJldHRpZnlFcnJvcihyZXN1bHQuZXJyb3IpfWAsXG4gICAgICB7XG4gICAgICAgIGNhdXNlOiByZXN1bHQuZXJyb3IsXG4gICAgICB9LFxuICAgICk7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0LmRhdGE7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0TW9ub3JlcG9Jbml0aWFsQW5zd2VycyA9ICh7XG4gIGRlc2NyaXB0aW9uLFxuICBuYW1lLFxuICBvd25lcixcbiAgcHVibGlzaCxcbn06IEluaXRDb21tYW5kT3B0aW9ucyk6IEluaXRJbml0aWFsQW5zd2VycyA9PiB7XG4gIGNvbnN0IGluaXRpYWxBbnN3ZXJzOiBJbml0SW5pdGlhbEFuc3dlcnMgPSB7fTtcblxuICBpZiAoZGVzY3JpcHRpb24pIHtcbiAgICBpbml0aWFsQW5zd2Vycy5yZXBvRGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbjtcbiAgfVxuXG4gIGlmIChvd25lcikge1xuICAgIGluaXRpYWxBbnN3ZXJzLnJlcG9Pd25lciA9IG93bmVyO1xuICB9XG5cbiAgaWYgKG5hbWUpIHtcbiAgICBpbml0aWFsQW5zd2Vycy5yZXBvTmFtZSA9IG5hbWU7XG4gIH1cblxuICBpZiAodHlwZW9mIHB1Ymxpc2ggPT09IFwiYm9vbGVhblwiKSB7XG4gICAgaW5pdGlhbEFuc3dlcnMucHVibGlzaFRvR2l0SHViID0gcHVibGlzaDtcbiAgfVxuXG4gIHJldHVybiBpbml0aWFsQW5zd2Vycztcbn07XG5cbmNvbnN0IGNyZWF0ZVJlbW90ZVJlcG9zaXRvcnlXaXRoUHJlc2VudGVyID1cbiAgKHByZXNlbnRlcjogQ29tbWFuZFByZXNlbnRlcikgPT5cbiAgKHtcbiAgICByZXBvTmFtZSxcbiAgICByZXBvT3duZXIsXG4gIH06IE1vbm9yZXBvUGF5bG9hZCk6IFJlc3VsdEFzeW5jPFJlcG9zaXRvcnksIEVycm9yPiA9PiB7XG4gICAgY29uc3QgbG9nZ2VyID0gZ2V0TG9nZ2VyKFtcImR4LWNsaVwiLCBcImluaXRcIl0pO1xuICAgIGNvbnN0IHJlcG8kID0gdGYkKHsgY3dkOiBwYXRoLnJlc29sdmUoXCJpbmZyYVwiLCBcInJlcG9zaXRvcnlcIikgfSk7XG4gICAgY29uc3QgYXBwbHlUZXJyYWZvcm0gPSBhc3luYyAoKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCByZXBvJGB0ZXJyYWZvcm0gaW5pdGA7XG4gICAgICAgIGF3YWl0IHJlcG8kYHRlcnJhZm9ybSBhcHBseSAtYXV0by1hcHByb3ZlYDtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEV4ZWNhRXJyb3IpIHtcbiAgICAgICAgICBsb2dnZXIuZXJyb3IoZXJyb3Iuc2hvcnRNZXNzYWdlKTtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiB0cmFja1N0ZXAoXG4gICAgICBwcmVzZW50ZXIsXG4gICAgICBcIkNyZWF0aW5nIEdpdEh1YiByZXBvc2l0b3J5Li4uXCIsXG4gICAgICBhcHBseVRlcnJhZm9ybSxcbiAgICAgIGFzRXJyb3IoXCJGYWlsZWQgdG8gY3JlYXRlIEdpdEh1YiByZXBvc2l0b3J5LlwiKSxcbiAgICApLm1hcCgoKSA9PiBuZXcgUmVwb3NpdG9yeShyZXBvTmFtZSwgcmVwb093bmVyKSk7XG4gIH07XG4vKipcbiAqIEV4aXQgY29kZSByZXR1cm5lZCBieSBgZ2l0IHJlbW90ZSBhZGRgIHdoZW4gYSByZW1vdGUgd2l0aCB0aGUgcmVxdWVzdGVkIG5hbWVcbiAqIGFscmVhZHkgZXhpc3RzLiBgZ2l0IHJlbW90ZWAgZG9jdW1lbnRzIHRoaXMgZGVkaWNhdGVkIHN0YXR1cyBjb2RlLCBzbyB3ZSBjYW5cbiAqIHR1cm4gaXQgaW50byBhY3Rpb25hYmxlIGd1aWRhbmNlIGluc3RlYWQgb2YgYSBnZW5lcmljIGZhaWx1cmUgbWVzc2FnZS5cbiAqXG4gKiBTZWUgaHR0cHM6Ly9naXQtc2NtLmNvbS9kb2NzL2dpdC1yZW1vdGUjX2V4aXRfc3RhdHVzXG4gKi9cbmNvbnN0IEdJVF9SRU1PVEVfQUxSRUFEWV9FWElTVFNfRVhJVF9DT0RFID0gMztcblxuLyoqXG4gKiBUcmFuc2xhdGVzIGEgZmFpbHVyZSBvZiB0aGUgZ2l0IHJlbW90ZSBzZXR1cCBzdGVwIGludG8gYW4gYWN0aW9uYWJsZSBlcnJvci5cbiAqXG4gKiBXaGVuIGBnaXQgcmVtb3RlIGFkZCBvcmlnaW5gIGV4aXRzIHdpdGggY29kZSAzIHRoZSByZW1vdGUgYWxyZWFkeSBleGlzdHMsXG4gKiB3aGljaCBpcyBhIHJlY292ZXJhYmxlIHNpdHVhdGlvbjogdGhlIG1lc3NhZ2UgdGVsbHMgdGhlIHVzZXIgaG93IHRvIGZpeCBpdC5cbiAqIFRoZSBvcmlnaW5hbCBFeGVjYUVycm9yIGlzIHByZXNlcnZlZCBhcyBgY2F1c2VgIHNvIGAtLXZlcmJvc2VgIHN0aWxsIHN1cmZhY2VzXG4gKiB0aGUgZXhpdCBjb2RlIGFuZCBnaXQncyBvd24gc3RkZXJyLlxuICovXG5leHBvcnQgY29uc3QgbWFwR2l0UmVtb3RlQWRkRXJyb3IgPSAoY2F1c2U6IHVua25vd24pOiBFcnJvciA9PiB7XG4gIGlmIChcbiAgICBjYXVzZSBpbnN0YW5jZW9mIEV4ZWNhRXJyb3IgJiZcbiAgICBjYXVzZS5leGl0Q29kZSA9PT0gR0lUX1JFTU9URV9BTFJFQURZX0VYSVNUU19FWElUX0NPREVcbiAgKSB7XG4gICAgcmV0dXJuIG5ldyBFcnJvcihcbiAgICAgIFwiQSBnaXQgcmVtb3RlIG5hbWVkICdvcmlnaW4nIGFscmVhZHkgZXhpc3RzLiBSZW1vdmUgaXQgd2l0aCBgZ2l0IHJlbW90ZSByZW1vdmUgb3JpZ2luYCBhbmQgcnVuIHRoZSBjb21tYW5kIGFnYWluLCBvciBzdGFydCBmcm9tIGEgY2xlYW4gZGlyZWN0b3J5LlwiLFxuICAgICAgeyBjYXVzZSB9LFxuICAgICk7XG4gIH1cbiAgcmV0dXJuIG5ldyBFcnJvcihcbiAgICBcIkZhaWxlZCB0byBzZXQgdXAgdGhlIGxvY2FsIGdpdCByZXBvc2l0b3J5IGFuZCBpdHMgJ29yaWdpbicgcmVtb3RlLlwiLFxuICAgIHsgY2F1c2UgfSxcbiAgKTtcbn07XG5cbmNvbnN0IGluaXRpYWxpemVHaXRSZXBvc2l0b3J5V2l0aFByZXNlbnRlciA9XG4gIChwcmVzZW50ZXI6IENvbW1hbmRQcmVzZW50ZXIpID0+IChyZXBvc2l0b3J5OiBSZXBvc2l0b3J5KSA9PiB7XG4gICAgY29uc3QgYnJhbmNoTmFtZSA9IFwiZmVhdHVyZXMvc2NhZmZvbGQtd29ya3NwYWNlXCI7XG4gICAgY29uc3QgZ2l0JCA9ICQoe1xuICAgICAgc2hlbGw6IHRydWUsXG4gICAgfSk7XG4gICAgLy8gYGdpdCByZW1vdGUgYWRkYCBpcyB0cmFja2VkIHNlcGFyYXRlbHkgZnJvbSB0aGUgcHVzaCBzbyBpdHMgZG9jdW1lbnRlZFxuICAgIC8vIGV4aXQgY29kZXMgKGUuZy4gMyA9IHJlbW90ZSBhbHJlYWR5IGV4aXN0cykgc3VyZmFjZSBhIHNwZWNpZmljLCBhY3Rpb25hYmxlXG4gICAgLy8gbWVzc2FnZSBpbnN0ZWFkIG9mIGJlaW5nIG1pc3JlcG9ydGVkIGFzIGEgcHVzaCBmYWlsdXJlLlxuICAgIGNvbnN0IGNvbmZpZ3VyZVJlbW90ZSA9IGFzeW5jICgpID0+IHtcbiAgICAgIGF3YWl0IGdpdCRgZ2l0IGluaXRgO1xuICAgICAgYXdhaXQgZ2l0JGBnaXQgcmVtb3RlIGFkZCBvcmlnaW4gJHtyZXBvc2l0b3J5Lm9yaWdpbn1gO1xuICAgIH07XG4gICAgY29uc3QgcHVzaFRvT3JpZ2luID0gYXN5bmMgKCkgPT4ge1xuICAgICAgYXdhaXQgZ2l0JGBnaXQgZmV0Y2ggb3JpZ2luIG1haW5gO1xuICAgICAgYXdhaXQgZ2l0JGBnaXQgY2hlY2tvdXQgLWIgJHticmFuY2hOYW1lfWA7XG4gICAgICAvLyBUZXJyYWZvcm0gY3JlYXRlcyBgbWFpbmAgd2l0aCBhbiBpbml0aWFsIFJFQURNRSBjb21taXQuXG4gICAgICAvLyBSZXNldCB0byBgb3JpZ2luL21haW5gIHNvIHRoaXMgYnJhbmNoIGlzIGJhc2VkIG9uIHRoZSByZW1vdGUgZGVmYXVsdCBicmFuY2gsXG4gICAgICAvLyB3aGlsZSBrZWVwaW5nIHRoZSBzY2FmZm9sZGVkIGxvY2FsIGZpbGVzIGluIHRoZSB3b3JraW5nIHRyZWUgZm9yIGEgY2xlYW4gUFIgZGlmZi5cbiAgICAgIGF3YWl0IGdpdCRgZ2l0IHJlc2V0IG9yaWdpbi9tYWluYDtcbiAgICAgIGF3YWl0IGdpdCRgZ2l0IGFkZCAuYDtcbiAgICAgIGF3YWl0IGdpdCRgZ2l0IGNvbW1pdCAtLW5vLWdwZy1zaWduIC1tIFwiU2NhZmZvbGQgd29ya3NwYWNlXCJgO1xuICAgICAgYXdhaXQgZ2l0JGBnaXQgcHVzaCAtdSBvcmlnaW4gJHticmFuY2hOYW1lfWA7XG4gICAgfTtcbiAgICByZXR1cm4gdHJhY2tTdGVwKFxuICAgICAgcHJlc2VudGVyLFxuICAgICAgXCJDb25maWd1cmluZyB0aGUgZ2l0IHJlbW90ZS4uLlwiLFxuICAgICAgY29uZmlndXJlUmVtb3RlLFxuICAgICAgbWFwR2l0UmVtb3RlQWRkRXJyb3IsXG4gICAgKVxuICAgICAgLmFuZFRoZW4oKCkgPT5cbiAgICAgICAgdHJhY2tTdGVwKFxuICAgICAgICAgIHByZXNlbnRlcixcbiAgICAgICAgICBcIlB1c2hpbmcgY29kZSB0byBHaXRIdWIuLi5cIixcbiAgICAgICAgICBwdXNoVG9PcmlnaW4sXG4gICAgICAgICAgYXNFcnJvcihcIkZhaWxlZCB0byBwdXNoIGNvZGUgdG8gR2l0SHViLlwiKSxcbiAgICAgICAgKSxcbiAgICAgIClcbiAgICAgIC5tYXAoKCkgPT4gKHsgYnJhbmNoTmFtZSwgcmVwb3NpdG9yeSB9KSk7XG4gIH07XG5cbmNvbnN0IGNyZWF0ZVB1bGxSZXF1ZXN0V2l0aFByZXNlbnRlciA9XG4gICh7IGdpdEh1YlNlcnZpY2UsIHByZXNlbnRlciB9OiBJbml0QWN0aW9uQ29udGV4dCkgPT5cbiAgKHtcbiAgICBicmFuY2hOYW1lLFxuICAgIHJlcG9zaXRvcnksXG4gIH06IExvY2FsV29ya3NwYWNlKTogUmVzdWx0QXN5bmM8UHVsbFJlcXVlc3QgfCB1bmRlZmluZWQsIEVycm9yPiA9PlxuICAgIHRyYWNrU3RlcChcbiAgICAgIHByZXNlbnRlcixcbiAgICAgIFwiQ3JlYXRpbmcgUHVsbCBSZXF1ZXN0Li4uXCIsXG4gICAgICAoKSA9PlxuICAgICAgICBnaXRIdWJTZXJ2aWNlLmNyZWF0ZVB1bGxSZXF1ZXN0KHtcbiAgICAgICAgICBiYXNlOiBcIm1haW5cIixcbiAgICAgICAgICBib2R5OiBcIlRoaXMgUFIgY29udGFpbnMgdGhlIHNjYWZmb2xkZWQgbW9ub3JlcG8gc3RydWN0dXJlLlwiLFxuICAgICAgICAgIGhlYWQ6IGJyYW5jaE5hbWUsXG4gICAgICAgICAgb3duZXI6IHJlcG9zaXRvcnkub3duZXIsXG4gICAgICAgICAgcmVwbzogcmVwb3NpdG9yeS5uYW1lLFxuICAgICAgICAgIHRpdGxlOiBcIlNjYWZmb2xkIHJlcG9zaXRvcnlcIixcbiAgICAgICAgfSksXG4gICAgICBhc0Vycm9yKFwiRmFpbGVkIHRvIGNyZWF0ZSBQdWxsIFJlcXVlc3QuXCIpLFxuICAgIClcbiAgICAgIC8vIElmIFBSIGNyZWF0aW9uIGZhaWxzLCBkb24ndCBibG9jayB0aGUgd29ya2Zsb3dcbiAgICAgIC5vckVsc2UoKCkgPT4gb2tBc3luYyh1bmRlZmluZWQpKTtcblxuY29uc3QgaGFuZGxlTmV3R2l0SHViUmVwb3NpdG9yeVdpdGhQcmVzZW50ZXIgPVxuICAoY29udGV4dDogSW5pdEFjdGlvbkNvbnRleHQpID0+XG4gIChwYXlsb2FkOiBNb25vcmVwb1BheWxvYWQpOiBSZXN1bHRBc3luYzxSZXBvc2l0b3J5UHVsbFJlcXVlc3QsIEVycm9yPiA9PlxuICAgIGNyZWF0ZVJlbW90ZVJlcG9zaXRvcnlXaXRoUHJlc2VudGVyKGNvbnRleHQucHJlc2VudGVyKShwYXlsb2FkKVxuICAgICAgLmFuZFRoZW4oaW5pdGlhbGl6ZUdpdFJlcG9zaXRvcnlXaXRoUHJlc2VudGVyKGNvbnRleHQucHJlc2VudGVyKSlcbiAgICAgIC5hbmRUaGVuKChsb2NhbFdvcmtzcGFjZSkgPT5cbiAgICAgICAgY3JlYXRlUHVsbFJlcXVlc3RXaXRoUHJlc2VudGVyKGNvbnRleHQpKGxvY2FsV29ya3NwYWNlKS5tYXAoKHByKSA9PiAoe1xuICAgICAgICAgIHByLFxuICAgICAgICAgIHJlcG9zaXRvcnk6IGxvY2FsV29ya3NwYWNlLnJlcG9zaXRvcnksXG4gICAgICAgIH0pKSxcbiAgICAgICk7XG5cbmNvbnN0IGhhbmRsZUdlbmVyYXRvckVycm9yID0gKGVycjogdW5rbm93bikgPT4ge1xuICBjb25zdCBsb2dnZXIgPSBnZXRMb2dnZXIoW1wiZHgtY2xpXCIsIFwiaW5pdFwiXSk7XG4gIGlmIChlcnIgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgIGxvZ2dlci5lcnJvcihlcnIubWVzc2FnZSk7XG4gIH1cbiAgcmV0dXJuIG5ldyBFcnJvcihcIkZhaWxlZCB0byBydW4gdGhlIGdlbmVyYXRvclwiLCB7IGNhdXNlOiBlcnIgfSk7XG59O1xuXG4vKipcbiAqIFJlc29sdmVzIHdoZXRoZXIgdGhlIHNjYWZmb2xkZWQgcmVwb3NpdG9yeSBzaG91bGQgYmUgcHVibGlzaGVkIHRvIEdpdEh1Yi5cbiAqXG4gKiBXaGVuIHRoZSBjYWxsZXIgYWxyZWFkeSBrbm93cyB0aGUgYW5zd2VyIChlLmcuIHRoZSB1c2VyIHBhc3NlZCBgLS1wdWJsaXNoYFxuICogb24gdGhlIGNvbW1hbmQgbGluZSksIHRoYXQgdmFsdWUgaXMgdXNlZCBhcy1pcyBhbmQgbm8gcHJvbXB0IGlzIHNob3duLiBXaGVuXG4gKiB0aGUgcHJlZmVyZW5jZSBpcyBsZWZ0IHVuZGVmaW5lZCAoZmxhZyBvbWl0dGVkKSwgdGhlIHVzZXIgaXMgYXNrZWRcbiAqIGludGVyYWN0aXZlbHkuXG4gKi9cbmV4cG9ydCBjb25zdCBjb25maXJtR2l0SHViUmVwb0NyZWF0aW9uID0gKFxuICBwYXlsb2FkOiBNb25vcmVwb1BheWxvYWQsXG4gIHB1Ymxpc2hQcmVmZXJlbmNlPzogYm9vbGVhbixcbik6IFJlc3VsdEFzeW5jPGJvb2xlYW4sIEVycm9yPiA9PlxuICAvLyBBIHByZWZlcmVuY2UgcHJvdmlkZWQgdXAtZnJvbnQgKHZpYSBgLS1wdWJsaXNoYCkgc2tpcHMgdGhlIGludGVyYWN0aXZlIHByb21wdC5cbiAgcHVibGlzaFByZWZlcmVuY2UgIT09IHVuZGVmaW5lZFxuICAgID8gb2tBc3luYyhwdWJsaXNoUHJlZmVyZW5jZSlcbiAgICA6IFJlc3VsdEFzeW5jLmZyb21Qcm9taXNlKFxuICAgICAgICBpbnF1aXJlci5wcm9tcHQoe1xuICAgICAgICAgIGRlZmF1bHQ6IERFRkFVTFRfR0lUSFVCX1BVQkxJU0hfQ09ORklSTUFUSU9OLFxuICAgICAgICAgIG1lc3NhZ2U6IGBUaGUgcHJvamVjdCBpcyBjcmVhdGVkIG9uICR7Y2hhbGsuZ3JlZW4ocGF5bG9hZC5yZXBvTmFtZSl9LiBXb3VsZCB5b3UgbGlrZSB0byBwdWJsaXNoIGl0IHRvIEdpdEh1YiBhdCAke2NoYWxrLmdyZWVuKGAke3BheWxvYWQucmVwb093bmVyfS8ke3BheWxvYWQucmVwb05hbWV9YCl9IG5vdz9gLFxuICAgICAgICAgIG5hbWU6IFwiY29uZmlybVwiLFxuICAgICAgICAgIHR5cGU6IFwiY29uZmlybVwiLFxuICAgICAgICB9KSxcbiAgICAgICAgKGNhdXNlKSA9PlxuICAgICAgICAgIG5ldyBFcnJvcihcIkZhaWxlZCB0byByZWFkIEdpdEh1YiBwdWJsaXNoIGNvbmZpcm1hdGlvblwiLCB7IGNhdXNlIH0pLFxuICAgICAgKS5hbmRUaGVuKChhbnN3ZXIpID0+IHtcbiAgICAgICAgY29uc3QgcGFyc2VkQW5zd2VyID0gelxuICAgICAgICAgIC5vYmplY3Qoe1xuICAgICAgICAgICAgY29uZmlybTogei5ib29sZWFuKCksXG4gICAgICAgICAgfSlcbiAgICAgICAgICAuc2FmZVBhcnNlKGFuc3dlcik7XG4gICAgICAgIGlmICghcGFyc2VkQW5zd2VyLnN1Y2Nlc3MpIHtcbiAgICAgICAgICByZXR1cm4gZXJyQXN5bmMoXG4gICAgICAgICAgICBuZXcgRXJyb3IoXCJJbnZhbGlkIEdpdEh1YiBwdWJsaXNoIGNvbmZpcm1hdGlvblwiLCB7XG4gICAgICAgICAgICAgIGNhdXNlOiBwYXJzZWRBbnN3ZXIuZXJyb3IsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG9rQXN5bmMocGFyc2VkQW5zd2VyLmRhdGEuY29uZmlybSk7XG4gICAgICB9KTtcblxuY29uc3QgcnVuSW5pdEFjdGlvbiA9ICh7XG4gIGdpdEh1YlNlcnZpY2UsXG4gIGluaXRpYWxBbnN3ZXJzID0ge30sXG4gIHByZXNlbnRlcixcbn06IEluaXRBY3Rpb25Db250ZXh0KTogUmVzdWx0QXN5bmM8U3VtbWFyeUlucHV0LCBFcnJvcj4gPT4ge1xuICBjb25zdCB7IHB1Ymxpc2hUb0dpdEh1YiwgLi4ubW9ub3JlcG9Jbml0aWFsQW5zd2VycyB9ID0gaW5pdGlhbEFuc3dlcnM7XG5cbiAgcmV0dXJuIHRyYWNrU3RlcChcbiAgICBwcmVzZW50ZXIsXG4gICAgXCJJbml0aWFsaXppbmcgd29ya3NwYWNlIGdlbmVyYXRvci4uLlwiLFxuICAgIGdldFBsb3BJbnN0YW5jZSxcbiAgICBhc0Vycm9yKFwiRmFpbGVkIHRvIGluaXRpYWxpemUgcGxvcFwiKSxcbiAgKVxuICAgIC5hbmRUaGVuKChwbG9wKSA9PlxuICAgICAgLy8gVGhlIHByb21wdCBwaGFzZSBtdXN0IHJ1biBvdXRzaWRlIHRyYWNrU3RlcDogaW4gdGV4dCBtb2RlIHRyYWNrU3RlcFxuICAgICAgLy8gcmVuZGVycyBhIHNwaW5uZXIgdGhhdCBvY2N1cGllcyB0aGUgVFRZIGFuZCBoaWRlcyB0aGUgcHJvbXB0cy5cbiAgICAgIFJlc3VsdEFzeW5jLmZyb21Qcm9taXNlKFxuICAgICAgICBjb2xsZWN0TW9ub3JlcG9QYXlsb2FkKHBsb3AsIGdpdEh1YlNlcnZpY2UsIG1vbm9yZXBvSW5pdGlhbEFuc3dlcnMpLFxuICAgICAgICBoYW5kbGVHZW5lcmF0b3JFcnJvcixcbiAgICAgICksXG4gICAgKVxuICAgIC5hbmRUaGVuKCh7IGdlbmVyYXRvciwgcGF5bG9hZCB9KSA9PlxuICAgICAgdHJhY2tTdGVwKFxuICAgICAgICBwcmVzZW50ZXIsXG4gICAgICAgIFwiU2NhZmZvbGRpbmcgd29ya3NwYWNlLi4uXCIsXG4gICAgICAgICgpID0+IHJ1bk1vbm9yZXBvQWN0aW9ucyhnZW5lcmF0b3IsIHBheWxvYWQpLFxuICAgICAgICBoYW5kbGVHZW5lcmF0b3JFcnJvcixcbiAgICAgICksXG4gICAgKVxuICAgIC5hbmRUZWUoKHBheWxvYWQpID0+IHtcbiAgICAgIHByb2Nlc3MuY2hkaXIocGF5bG9hZC5yZXBvTmFtZSk7XG4gICAgfSlcbiAgICAuYW5kVGhlbigocGF5bG9hZCkgPT5cbiAgICAgIGNvbmZpcm1HaXRIdWJSZXBvQ3JlYXRpb24ocGF5bG9hZCwgcHVibGlzaFRvR2l0SHViKS5hbmRUaGVuPFxuICAgICAgICBTdW1tYXJ5SW5wdXQsXG4gICAgICAgIEVycm9yXG4gICAgICA+KChjb25maXJtZWQpID0+XG4gICAgICAgIGNvbmZpcm1lZFxuICAgICAgICAgID8gaGFuZGxlTmV3R2l0SHViUmVwb3NpdG9yeVdpdGhQcmVzZW50ZXIoe1xuICAgICAgICAgICAgICBnaXRIdWJTZXJ2aWNlLFxuICAgICAgICAgICAgICBwcmVzZW50ZXIsXG4gICAgICAgICAgICB9KShwYXlsb2FkKVxuICAgICAgICAgIDogb2tBc3luYyh7IGdpdEh1YlJlcG9DcmVhdGlvblNraXBwZWQ6IHRydWUsIHBheWxvYWQgfSksXG4gICAgICApLFxuICAgICk7XG59O1xuXG5jb25zdCByZXBvcnRTdW1tYXJ5ID1cbiAgKHByZXNlbnRlcjogQ29tbWFuZFByZXNlbnRlciwgb3V0cHV0TW9kZTogXCJqc29uXCIgfCBcInRleHRcIikgPT5cbiAgKHJlc3VsdDogU3VtbWFyeUlucHV0KSA9PiB7XG4gICAgaWYgKG91dHB1dE1vZGUgPT09IFwianNvblwiKSB7XG4gICAgICBwcmVzZW50ZXIucmVwb3J0UmVzdWx0KHJlc3VsdCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRpc3BsYXlTdW1tYXJ5KHJlc3VsdCk7XG4gICAgfVxuICB9O1xuXG5leHBvcnQgY29uc3QgbWFrZUluaXRDb21tYW5kID0gKFxuICByZXF1aXJlR2l0SHViQXV0aDogR2l0SHViQXV0aEZhY3RvcnksXG4gIGVudjogQ2xpRW52LFxuKTogQ29tbWFuZCA9PlxuICBuZXcgQ29tbWFuZCgpXG4gICAgLm5hbWUoXCJpbml0XCIpXG4gICAgLmRlc2NyaXB0aW9uKFwiSW5pdGlhbGl6ZSBhIG5ldyBEWCB3b3Jrc3BhY2VcIilcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oXCItLW5hbWUgPG5hbWU+XCIsIFwiUmVwb3NpdG9yeSBuYW1lXCIpKVxuICAgIC5hZGRPcHRpb24oXG4gICAgICBuZXcgT3B0aW9uKFxuICAgICAgICBcIi0tb3duZXIgPG93bmVyPlwiLFxuICAgICAgICBcIkdpdEh1YiBvcmdhbml6YXRpb24gb3IgdXNlciB0aGF0IHdpbGwgb3duIHRoZSByZXBvc2l0b3J5XCIsXG4gICAgICApLFxuICAgIClcbiAgICAuYWRkT3B0aW9uKFxuICAgICAgbmV3IE9wdGlvbihcIi0tZGVzY3JpcHRpb24gPGRlc2NyaXB0aW9uPlwiLCBcIlJlcG9zaXRvcnkgZGVzY3JpcHRpb25cIiksXG4gICAgKVxuICAgIC5hZGRPcHRpb24oXG4gICAgICBuZXcgT3B0aW9uKFxuICAgICAgICBcIi0tcHVibGlzaFwiLFxuICAgICAgICBcIlB1Ymxpc2ggdGhlIHNjYWZmb2xkZWQgcmVwb3NpdG9yeSB0byBHaXRIdWIgd2l0aG91dCBwcm9tcHRpbmdcIixcbiAgICAgICkuZGVmYXVsdCh1bmRlZmluZWQpLFxuICAgIClcbiAgICAuYWN0aW9uKGFzeW5jIGZ1bmN0aW9uIChvcHRpb25zOiB1bmtub3duKSB7XG4gICAgICBjb25zdCB7IG91dHB1dCB9ID0gdGhpcy5vcHRzV2l0aEdsb2JhbHM8R2xvYmFsT3B0aW9ucz4oKTtcbiAgICAgIGNvbnN0IG91dHB1dE1vZGUgPSByZXNvbHZlT3V0cHV0TW9kZShlbnYsIG91dHB1dCk7XG4gICAgICBjb25zdCBwcmVzZW50ZXIgPSBjcmVhdGVDb21tYW5kUHJlc2VudGVyKG91dHB1dE1vZGUpO1xuXG4gICAgICBhd2FpdCBSZXN1bHRBc3luYy5mcm9tUHJvbWlzZShcbiAgICAgICAgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKSA9PiBwYXJzZUluaXRDb21tYW5kT3B0aW9ucyhvcHRpb25zKSksXG4gICAgICAgIChjYXVzZSkgPT5cbiAgICAgICAgICBjYXVzZSBpbnN0YW5jZW9mIEVycm9yXG4gICAgICAgICAgICA/IGNhdXNlXG4gICAgICAgICAgICA6IG5ldyBFcnJvcihcIkZhaWxlZCB0byBwYXJzZSBpbml0IGNvbW1hbmQgb3B0aW9uc1wiLCB7IGNhdXNlIH0pLFxuICAgICAgKVxuICAgICAgICAuYW5kVGhlbigoaW5pdE9wdGlvbnMpID0+XG4gICAgICAgICAgcnVuSW5pdFByZWNvbmRpdGlvbnMocHJlc2VudGVyKVxuICAgICAgICAgICAgLmFuZFRoZW4oKCkgPT4gcmVxdWlyZUdpdEh1YkF1dGgoKSlcbiAgICAgICAgICAgIC5hbmRUaGVuKChhdXRoKSA9PlxuICAgICAgICAgICAgICBydW5Jbml0QWN0aW9uKHtcbiAgICAgICAgICAgICAgICBnaXRIdWJTZXJ2aWNlOiBhdXRoLmdpdEh1YlNlcnZpY2UsXG4gICAgICAgICAgICAgICAgaW5pdGlhbEFuc3dlcnM6IGdldE1vbm9yZXBvSW5pdGlhbEFuc3dlcnMoaW5pdE9wdGlvbnMpLFxuICAgICAgICAgICAgICAgIHByZXNlbnRlcixcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICApLFxuICAgICAgICApXG4gICAgICAgIC5tYXRjaChcbiAgICAgICAgICByZXBvcnRTdW1tYXJ5KHByZXNlbnRlciwgb3V0cHV0TW9kZSksXG4gICAgICAgICAgcmVwb3J0Q29tbWFuZEVycm9yKHRoaXMsIHByZXNlbnRlciwgb3V0cHV0TW9kZSksXG4gICAgICAgICk7XG4gICAgfSk7XG4iXX0=
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { Command } from "commander";
|
|
2
|
+
import type { CliEnv } from "./env.js";
|
|
2
3
|
import { Config } from "../../config.js";
|
|
3
4
|
import { Dependencies } from "../../domain/dependencies.js";
|
|
4
5
|
import { CodemodCommandDependencies } from "./commands/codemod.js";
|
|
5
6
|
export type CliDependencies = CodemodCommandDependencies;
|
|
6
|
-
export declare const makeCli: (deps: Dependencies, config: Config, cliDeps: CliDependencies, version: string) => Command;
|
|
7
|
+
export declare const makeCli: (deps: Dependencies, config: Config, cliDeps: CliDependencies, env: CliEnv, version: string) => Command;
|
|
@@ -7,7 +7,7 @@ import { makeInitCommand } from "./commands/init.js";
|
|
|
7
7
|
import { makeSavemoneyCommand } from "./commands/savemoney.js";
|
|
8
8
|
import { makeSpecCommand } from "./commands/spec.js";
|
|
9
9
|
import { extractCliSpec } from "./spec.js";
|
|
10
|
-
export const makeCli = (deps, config, cliDeps, version) => {
|
|
10
|
+
export const makeCli = (deps, config, cliDeps, env, version) => {
|
|
11
11
|
const program = new Command();
|
|
12
12
|
program
|
|
13
13
|
.name("dx")
|
|
@@ -17,14 +17,14 @@ export const makeCli = (deps, config, cliDeps, version) => {
|
|
|
17
17
|
.addOption(new Option("--output <mode>", "Output mode: text (default, human-readable) or json (structured events to stdout for agents)")
|
|
18
18
|
.choices(["text", "json"])
|
|
19
19
|
.default("text"));
|
|
20
|
-
program.addCommand(makeDoctorCommand(deps, config));
|
|
21
|
-
program.addCommand(makeCodemodCommand(cliDeps));
|
|
22
|
-
program.addCommand(makeInitCommand(deps.requireGitHubAuth));
|
|
20
|
+
program.addCommand(makeDoctorCommand(deps, config, env));
|
|
21
|
+
program.addCommand(makeCodemodCommand(cliDeps, env));
|
|
22
|
+
program.addCommand(makeInitCommand(deps.requireGitHubAuth, env));
|
|
23
23
|
program.addCommand(makeSavemoneyCommand());
|
|
24
|
-
program.addCommand(makeInfoCommand(deps));
|
|
25
|
-
program.addCommand(makeAddCommand(deps.requireGitHubAuth));
|
|
24
|
+
program.addCommand(makeInfoCommand(deps, env));
|
|
25
|
+
program.addCommand(makeAddCommand(deps.requireGitHubAuth, env));
|
|
26
26
|
// spec is registered last so the closure captures the complete command tree.
|
|
27
27
|
program.addCommand(makeSpecCommand(() => extractCliSpec(program, version)));
|
|
28
28
|
return program;
|
|
29
29
|
};
|
|
30
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
30
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYWRhcHRlcnMvY29tbWFuZGVyL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBTTVDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNuRCxPQUFPLEVBRUwsa0JBQWtCLEdBQ25CLE1BQU0sdUJBQXVCLENBQUM7QUFDL0IsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDekQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDckQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUczQyxNQUFNLENBQUMsTUFBTSxPQUFPLEdBQUcsQ0FDckIsSUFBa0IsRUFDbEIsTUFBYyxFQUNkLE9BQXdCLEVBQ3hCLEdBQVcsRUFDWCxPQUFlLEVBQ2YsRUFBRTtJQUNGLE1BQU0sT0FBTyxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7SUFFOUIsT0FBTztTQUNKLElBQUksQ0FBQyxJQUFJLENBQUM7U0FDVixXQUFXLENBQUMseUJBQXlCLENBQUM7U0FDdEMsT0FBTyxDQUFDLE9BQU8sQ0FBQztTQUNoQixNQUFNLENBQ0wsZUFBZSxFQUNmLHVHQUF1RyxFQUN2RyxLQUFLLENBQ047U0FDQSxTQUFTLENBQ1IsSUFBSSxNQUFNLENBQ1IsaUJBQWlCLEVBQ2pCLDhGQUE4RixDQUMvRjtTQUNFLE9BQU8sQ0FBQyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztTQUN6QixPQUFPLENBQUMsTUFBTSxDQUFDLENBQ25CLENBQUM7SUFFSixPQUFPLENBQUMsVUFBVSxDQUFDLGlCQUFpQixDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUN6RCxPQUFPLENBQUMsVUFBVSxDQUFDLGtCQUFrQixDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3JELE9BQU8sQ0FBQyxVQUFVLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ2pFLE9BQU8sQ0FBQyxVQUFVLENBQUMsb0JBQW9CLEVBQUUsQ0FBQyxDQUFDO0lBQzNDLE9BQU8sQ0FBQyxVQUFVLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQy9DLE9BQU8sQ0FBQyxVQUFVLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBRWhFLDZFQUE2RTtJQUM3RSxPQUFPLENBQUMsVUFBVSxDQUFDLGVBQWUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUU1RSxPQUFPLE9BQU8sQ0FBQztBQUNqQixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tYW5kLCBPcHRpb24gfSBmcm9tIFwiY29tbWFuZGVyXCI7XG5cbmltcG9ydCB0eXBlIHsgQ2xpRW52IH0gZnJvbSBcIi4vZW52LmpzXCI7XG5cbmltcG9ydCB7IENvbmZpZyB9IGZyb20gXCIuLi8uLi9jb25maWcuanNcIjtcbmltcG9ydCB7IERlcGVuZGVuY2llcyB9IGZyb20gXCIuLi8uLi9kb21haW4vZGVwZW5kZW5jaWVzLmpzXCI7XG5pbXBvcnQgeyBtYWtlQWRkQ29tbWFuZCB9IGZyb20gXCIuL2NvbW1hbmRzL2FkZC5qc1wiO1xuaW1wb3J0IHtcbiAgQ29kZW1vZENvbW1hbmREZXBlbmRlbmNpZXMsXG4gIG1ha2VDb2RlbW9kQ29tbWFuZCxcbn0gZnJvbSBcIi4vY29tbWFuZHMvY29kZW1vZC5qc1wiO1xuaW1wb3J0IHsgbWFrZURvY3RvckNvbW1hbmQgfSBmcm9tIFwiLi9jb21tYW5kcy9kb2N0b3IuanNcIjtcbmltcG9ydCB7IG1ha2VJbmZvQ29tbWFuZCB9IGZyb20gXCIuL2NvbW1hbmRzL2luZm8uanNcIjtcbmltcG9ydCB7IG1ha2VJbml0Q29tbWFuZCB9IGZyb20gXCIuL2NvbW1hbmRzL2luaXQuanNcIjtcbmltcG9ydCB7IG1ha2VTYXZlbW9uZXlDb21tYW5kIH0gZnJvbSBcIi4vY29tbWFuZHMvc2F2ZW1vbmV5LmpzXCI7XG5pbXBvcnQgeyBtYWtlU3BlY0NvbW1hbmQgfSBmcm9tIFwiLi9jb21tYW5kcy9zcGVjLmpzXCI7XG5pbXBvcnQgeyBleHRyYWN0Q2xpU3BlYyB9IGZyb20gXCIuL3NwZWMuanNcIjtcbmV4cG9ydCB0eXBlIENsaURlcGVuZGVuY2llcyA9IENvZGVtb2RDb21tYW5kRGVwZW5kZW5jaWVzO1xuXG5leHBvcnQgY29uc3QgbWFrZUNsaSA9IChcbiAgZGVwczogRGVwZW5kZW5jaWVzLFxuICBjb25maWc6IENvbmZpZyxcbiAgY2xpRGVwczogQ2xpRGVwZW5kZW5jaWVzLFxuICBlbnY6IENsaUVudixcbiAgdmVyc2lvbjogc3RyaW5nLFxuKSA9PiB7XG4gIGNvbnN0IHByb2dyYW0gPSBuZXcgQ29tbWFuZCgpO1xuXG4gIHByb2dyYW1cbiAgICAubmFtZShcImR4XCIpXG4gICAgLmRlc2NyaXB0aW9uKFwiVGhlIENMSSBmb3IgRFgtUGxhdGZvcm1cIilcbiAgICAudmVyc2lvbih2ZXJzaW9uKVxuICAgIC5vcHRpb24oXG4gICAgICBcIi12LCAtLXZlcmJvc2VcIixcbiAgICAgIFwiRW5hYmxlIHZlcmJvc2Ugb3V0cHV0OiBkZWJ1Zy1sZXZlbCBsb2dzIGFuZCBmdWxsIGVycm9yIGNoYWluICh3aXRoIHN0YWNrIHRyYWNlcykgd2hlbiBhIGNvbW1hbmQgZmFpbHNcIixcbiAgICAgIGZhbHNlLFxuICAgIClcbiAgICAuYWRkT3B0aW9uKFxuICAgICAgbmV3IE9wdGlvbihcbiAgICAgICAgXCItLW91dHB1dCA8bW9kZT5cIixcbiAgICAgICAgXCJPdXRwdXQgbW9kZTogdGV4dCAoZGVmYXVsdCwgaHVtYW4tcmVhZGFibGUpIG9yIGpzb24gKHN0cnVjdHVyZWQgZXZlbnRzIHRvIHN0ZG91dCBmb3IgYWdlbnRzKVwiLFxuICAgICAgKVxuICAgICAgICAuY2hvaWNlcyhbXCJ0ZXh0XCIsIFwianNvblwiXSlcbiAgICAgICAgLmRlZmF1bHQoXCJ0ZXh0XCIpLFxuICAgICk7XG5cbiAgcHJvZ3JhbS5hZGRDb21tYW5kKG1ha2VEb2N0b3JDb21tYW5kKGRlcHMsIGNvbmZpZywgZW52KSk7XG4gIHByb2dyYW0uYWRkQ29tbWFuZChtYWtlQ29kZW1vZENvbW1hbmQoY2xpRGVwcywgZW52KSk7XG4gIHByb2dyYW0uYWRkQ29tbWFuZChtYWtlSW5pdENvbW1hbmQoZGVwcy5yZXF1aXJlR2l0SHViQXV0aCwgZW52KSk7XG4gIHByb2dyYW0uYWRkQ29tbWFuZChtYWtlU2F2ZW1vbmV5Q29tbWFuZCgpKTtcbiAgcHJvZ3JhbS5hZGRDb21tYW5kKG1ha2VJbmZvQ29tbWFuZChkZXBzLCBlbnYpKTtcbiAgcHJvZ3JhbS5hZGRDb21tYW5kKG1ha2VBZGRDb21tYW5kKGRlcHMucmVxdWlyZUdpdEh1YkF1dGgsIGVudikpO1xuXG4gIC8vIHNwZWMgaXMgcmVnaXN0ZXJlZCBsYXN0IHNvIHRoZSBjbG9zdXJlIGNhcHR1cmVzIHRoZSBjb21wbGV0ZSBjb21tYW5kIHRyZWUuXG4gIHByb2dyYW0uYWRkQ29tbWFuZChtYWtlU3BlY0NvbW1hbmQoKCkgPT4gZXh0cmFjdENsaVNwZWMocHJvZ3JhbSwgdmVyc2lvbikpKTtcblxuICByZXR1cm4gcHJvZ3JhbTtcbn07XG4iXX0=
|
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
import type { CommandPresenter } from "../../../domain/command-presenter.js";
|
|
2
2
|
/**
|
|
3
|
-
* Output
|
|
3
|
+
* Output presenter selection.
|
|
4
4
|
*
|
|
5
|
-
* isNonInteractive
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
* on the requested output format.
|
|
5
|
+
* isNonInteractive reports whether the CLI is running in a non-interactive
|
|
6
|
+
* (CI) environment. resolveOutputMode applies the precedence rules: a CI
|
|
7
|
+
* environment forces JSON so agents and pipelines get structured output,
|
|
8
|
+
* otherwise the `--output` flag decides, defaulting to text.
|
|
9
|
+
* createCommandPresenter then maps the resolved mode to the matching
|
|
10
|
+
* CommandPresenter adapter.
|
|
12
11
|
*/
|
|
13
12
|
import type { CliEnv } from "../env.js";
|
|
13
|
+
import type { GlobalOptions } from "../global-options.js";
|
|
14
14
|
/**
|
|
15
15
|
* Returns true when the CLI should suppress interactive prompts.
|
|
16
16
|
*
|
|
@@ -18,6 +18,15 @@ import type { CliEnv } from "../env.js";
|
|
|
18
18
|
* following the same convention used by `is-interactive` and `ora`.
|
|
19
19
|
*/
|
|
20
20
|
export declare const isNonInteractive: (env: CliEnv) => boolean;
|
|
21
|
+
/**
|
|
22
|
+
* Resolves the effective output mode for a command invocation.
|
|
23
|
+
*
|
|
24
|
+
* - In a non-interactive environment (CI), output is always "json" so agents
|
|
25
|
+
* and pipelines get structured output regardless of the `--output` flag.
|
|
26
|
+
* - Otherwise the `--output` flag decides.
|
|
27
|
+
* - When nothing is provided, the mode defaults to "text".
|
|
28
|
+
*/
|
|
29
|
+
export declare const resolveOutputMode: (env: CliEnv, output: GlobalOptions["output"] | undefined) => "json" | "text";
|
|
21
30
|
/**
|
|
22
31
|
* Returns the appropriate CommandPresenter adapter for the requested output mode.
|
|
23
32
|
*
|
|
@@ -7,6 +7,20 @@ import { TextCommandPresenter } from "./text-command-presenter.js";
|
|
|
7
7
|
* following the same convention used by `is-interactive` and `ora`.
|
|
8
8
|
*/
|
|
9
9
|
export const isNonInteractive = (env) => env.CI;
|
|
10
|
+
/**
|
|
11
|
+
* Resolves the effective output mode for a command invocation.
|
|
12
|
+
*
|
|
13
|
+
* - In a non-interactive environment (CI), output is always "json" so agents
|
|
14
|
+
* and pipelines get structured output regardless of the `--output` flag.
|
|
15
|
+
* - Otherwise the `--output` flag decides.
|
|
16
|
+
* - When nothing is provided, the mode defaults to "text".
|
|
17
|
+
*/
|
|
18
|
+
export const resolveOutputMode = (env, output) => {
|
|
19
|
+
if (isNonInteractive(env)) {
|
|
20
|
+
return "json";
|
|
21
|
+
}
|
|
22
|
+
return output === "json" ? "json" : "text";
|
|
23
|
+
};
|
|
10
24
|
/**
|
|
11
25
|
* Returns the appropriate CommandPresenter adapter for the requested output mode.
|
|
12
26
|
*
|
|
@@ -14,4 +28,4 @@ export const isNonInteractive = (env) => env.CI;
|
|
|
14
28
|
* - "json" → JsonCommandPresenter (NDJSON on stderr, JSON envelope on stdout)
|
|
15
29
|
*/
|
|
16
30
|
export const createCommandPresenter = (output) => output === "json" ? new JsonCommandPresenter() : new TextCommandPresenter();
|
|
17
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
31
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYWRhcHRlcnMvY29tbWFuZGVyL3ByZXNlbnRlcnMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBY0EsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDbkUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFFbkU7Ozs7O0dBS0c7QUFDSCxNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBRyxDQUFDLEdBQVcsRUFBVyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztBQUVqRTs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsQ0FDL0IsR0FBVyxFQUNYLE1BQTJDLEVBQzFCLEVBQUU7SUFDbkIsSUFBSSxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQzFCLE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFDRCxPQUFPLE1BQU0sS0FBSyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO0FBQzdDLENBQUMsQ0FBQztBQUVGOzs7OztHQUtHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sc0JBQXNCLEdBQUcsQ0FDcEMsTUFBdUIsRUFDTCxFQUFFLENBQ3BCLE1BQU0sS0FBSyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksb0JBQW9CLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxvQkFBb0IsRUFBRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBDb21tYW5kUHJlc2VudGVyIH0gZnJvbSBcIi4uLy4uLy4uL2RvbWFpbi9jb21tYW5kLXByZXNlbnRlci5qc1wiO1xuLyoqXG4gKiBPdXRwdXQgcHJlc2VudGVyIHNlbGVjdGlvbi5cbiAqXG4gKiBpc05vbkludGVyYWN0aXZlIHJlcG9ydHMgd2hldGhlciB0aGUgQ0xJIGlzIHJ1bm5pbmcgaW4gYSBub24taW50ZXJhY3RpdmVcbiAqIChDSSkgZW52aXJvbm1lbnQuIHJlc29sdmVPdXRwdXRNb2RlIGFwcGxpZXMgdGhlIHByZWNlZGVuY2UgcnVsZXM6IGEgQ0lcbiAqIGVudmlyb25tZW50IGZvcmNlcyBKU09OIHNvIGFnZW50cyBhbmQgcGlwZWxpbmVzIGdldCBzdHJ1Y3R1cmVkIG91dHB1dCxcbiAqIG90aGVyd2lzZSB0aGUgYC0tb3V0cHV0YCBmbGFnIGRlY2lkZXMsIGRlZmF1bHRpbmcgdG8gdGV4dC5cbiAqIGNyZWF0ZUNvbW1hbmRQcmVzZW50ZXIgdGhlbiBtYXBzIHRoZSByZXNvbHZlZCBtb2RlIHRvIHRoZSBtYXRjaGluZ1xuICogQ29tbWFuZFByZXNlbnRlciBhZGFwdGVyLlxuICovXG5pbXBvcnQgdHlwZSB7IENsaUVudiB9IGZyb20gXCIuLi9lbnYuanNcIjtcbmltcG9ydCB0eXBlIHsgR2xvYmFsT3B0aW9ucyB9IGZyb20gXCIuLi9nbG9iYWwtb3B0aW9ucy5qc1wiO1xuXG5pbXBvcnQgeyBKc29uQ29tbWFuZFByZXNlbnRlciB9IGZyb20gXCIuL2pzb24tY29tbWFuZC1wcmVzZW50ZXIuanNcIjtcbmltcG9ydCB7IFRleHRDb21tYW5kUHJlc2VudGVyIH0gZnJvbSBcIi4vdGV4dC1jb21tYW5kLXByZXNlbnRlci5qc1wiO1xuXG4vKipcbiAqIFJldHVybnMgdHJ1ZSB3aGVuIHRoZSBDTEkgc2hvdWxkIHN1cHByZXNzIGludGVyYWN0aXZlIHByb21wdHMuXG4gKlxuICogQ2hlY2tzIHRoZSBwYXJzZWQgQ0kgYm9vbGVhbiBmcm9tIENsaUVudiAoY29lcmNlZCBieSB6b2QncyBzdHJpbmdib29sKSxcbiAqIGZvbGxvd2luZyB0aGUgc2FtZSBjb252ZW50aW9uIHVzZWQgYnkgYGlzLWludGVyYWN0aXZlYCBhbmQgYG9yYWAuXG4gKi9cbmV4cG9ydCBjb25zdCBpc05vbkludGVyYWN0aXZlID0gKGVudjogQ2xpRW52KTogYm9vbGVhbiA9PiBlbnYuQ0k7XG5cbi8qKlxuICogUmVzb2x2ZXMgdGhlIGVmZmVjdGl2ZSBvdXRwdXQgbW9kZSBmb3IgYSBjb21tYW5kIGludm9jYXRpb24uXG4gKlxuICogLSBJbiBhIG5vbi1pbnRlcmFjdGl2ZSBlbnZpcm9ubWVudCAoQ0kpLCBvdXRwdXQgaXMgYWx3YXlzIFwianNvblwiIHNvIGFnZW50c1xuICogICBhbmQgcGlwZWxpbmVzIGdldCBzdHJ1Y3R1cmVkIG91dHB1dCByZWdhcmRsZXNzIG9mIHRoZSBgLS1vdXRwdXRgIGZsYWcuXG4gKiAtIE90aGVyd2lzZSB0aGUgYC0tb3V0cHV0YCBmbGFnIGRlY2lkZXMuXG4gKiAtIFdoZW4gbm90aGluZyBpcyBwcm92aWRlZCwgdGhlIG1vZGUgZGVmYXVsdHMgdG8gXCJ0ZXh0XCIuXG4gKi9cbmV4cG9ydCBjb25zdCByZXNvbHZlT3V0cHV0TW9kZSA9IChcbiAgZW52OiBDbGlFbnYsXG4gIG91dHB1dDogR2xvYmFsT3B0aW9uc1tcIm91dHB1dFwiXSB8IHVuZGVmaW5lZCxcbik6IFwianNvblwiIHwgXCJ0ZXh0XCIgPT4ge1xuICBpZiAoaXNOb25JbnRlcmFjdGl2ZShlbnYpKSB7XG4gICAgcmV0dXJuIFwianNvblwiO1xuICB9XG4gIHJldHVybiBvdXRwdXQgPT09IFwianNvblwiID8gXCJqc29uXCIgOiBcInRleHRcIjtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgYXBwcm9wcmlhdGUgQ29tbWFuZFByZXNlbnRlciBhZGFwdGVyIGZvciB0aGUgcmVxdWVzdGVkIG91dHB1dCBtb2RlLlxuICpcbiAqIC0gXCJ0ZXh0XCIg4oaSIFRleHRDb21tYW5kUHJlc2VudGVyIChjaGFsayArIG9yYSwgZm9yIGh1bWFuIHRlcm1pbmFsIHNlc3Npb25zKVxuICogLSBcImpzb25cIiDihpIgSnNvbkNvbW1hbmRQcmVzZW50ZXIgKE5ESlNPTiBvbiBzdGRlcnIsIEpTT04gZW52ZWxvcGUgb24gc3Rkb3V0KVxuICovXG5leHBvcnQgY29uc3QgY3JlYXRlQ29tbWFuZFByZXNlbnRlciA9IChcbiAgb3V0cHV0OiBcImpzb25cIiB8IFwidGV4dFwiLFxuKTogQ29tbWFuZFByZXNlbnRlciA9PlxuICBvdXRwdXQgPT09IFwianNvblwiID8gbmV3IEpzb25Db21tYW5kUHJlc2VudGVyKCkgOiBuZXcgVGV4dENvbW1hbmRQcmVzZW50ZXIoKTtcbiJdfQ==
|
package/dist/index.js
CHANGED
|
@@ -3,6 +3,7 @@ import { configure, getConsoleSink } from "@logtape/logtape";
|
|
|
3
3
|
import { errAsync, okAsync, ResultAsync } from "neverthrow";
|
|
4
4
|
import { Octokit } from "octokit";
|
|
5
5
|
import codemodRegistry from "./adapters/codemods/index.js";
|
|
6
|
+
import { cliEnvSchema } from "./adapters/commander/env.js";
|
|
6
7
|
import { makeCli } from "./adapters/commander/index.js";
|
|
7
8
|
import { makePackageJsonReader } from "./adapters/node/package-json.js";
|
|
8
9
|
import { makeRepositoryReader } from "./adapters/node/repository.js";
|
|
@@ -70,11 +71,12 @@ export const runCli = async (version) => {
|
|
|
70
71
|
requireGitHubAuth,
|
|
71
72
|
};
|
|
72
73
|
const config = getConfig();
|
|
74
|
+
const env = cliEnvSchema.parse(process.env);
|
|
73
75
|
const useCases = {
|
|
74
76
|
applyCodemodById: applyCodemodById(codemodRegistry, getInfo(deps)),
|
|
75
77
|
listCodemods: listCodemods(codemodRegistry),
|
|
76
78
|
};
|
|
77
|
-
const program = makeCli(deps, config, useCases, version);
|
|
79
|
+
const program = makeCli(deps, config, useCases, env, version);
|
|
78
80
|
program.parse();
|
|
79
81
|
};
|
|
80
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
82
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyw2QkFBNkIsQ0FBQztBQUNyQyxPQUFPLEVBQUUsU0FBUyxFQUFFLGNBQWMsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzdELE9BQU8sRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUM1RCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBRWxDLE9BQU8sZUFBZSxNQUFNLDhCQUE4QixDQUFDO0FBQzNELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDeEQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDeEUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDckUsT0FBTyxFQUNMLFlBQVksRUFDWixvQkFBb0IsR0FDckIsTUFBTSw2QkFBNkIsQ0FBQztBQUNyQyxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSxxREFBcUQsQ0FBQztBQUNwRyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3hDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUMzQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFFNUQ7Ozs7OztHQU1HO0FBQ0gsTUFBTSxxQkFBcUIsR0FBRyxDQUFDLElBQXVCLEVBQVcsRUFBRSxDQUNqRSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUM7QUFFcEQs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QWUsRUFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbEUsWUFBWSxFQUFFLFlBQVksQ0FBQyxlQUFlLENBQUM7S0FDNUMsQ0FBQztJQUVGLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFFOUQsT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ2xCLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBcImNvcmUtanMvYWN0dWFsL3NldC9pbmRleC5qc1wiO1xuaW1wb3J0IHsgY29uZmlndXJlLCBnZXRDb25zb2xlU2luayB9IGZyb20gXCJAbG9ndGFwZS9sb2d0YXBlXCI7XG5pbXBvcnQgeyBlcnJBc3luYywgb2tBc3luYywgUmVzdWx0QXN5bmMgfSBmcm9tIFwibmV2ZXJ0aHJvd1wiO1xuaW1wb3J0IHsgT2N0b2tpdCB9IGZyb20gXCJvY3Rva2l0XCI7XG5cbmltcG9ydCBjb2RlbW9kUmVnaXN0cnkgZnJvbSBcIi4vYWRhcHRlcnMvY29kZW1vZHMvaW5kZXguanNcIjtcbmltcG9ydCB7IGNsaUVudlNjaGVtYSB9IGZyb20gXCIuL2FkYXB0ZXJzL2NvbW1hbmRlci9lbnYuanNcIjtcbmltcG9ydCB7IG1ha2VDbGkgfSBmcm9tIFwiLi9hZGFwdGVycy9jb21tYW5kZXIvaW5kZXguanNcIjtcbmltcG9ydCB7IG1ha2VQYWNrYWdlSnNvblJlYWRlciB9IGZyb20gXCIuL2FkYXB0ZXJzL25vZGUvcGFja2FnZS1qc29uLmpzXCI7XG5pbXBvcnQgeyBtYWtlUmVwb3NpdG9yeVJlYWRlciB9IGZyb20gXCIuL2FkYXB0ZXJzL25vZGUvcmVwb3NpdG9yeS5qc1wiO1xuaW1wb3J0IHtcbiAgZ2V0R2l0SHViUEFULFxuICBPY3Rva2l0R2l0SHViU2VydmljZSxcbn0gZnJvbSBcIi4vYWRhcHRlcnMvb2N0b2tpdC9pbmRleC5qc1wiO1xuaW1wb3J0IHsgbWFrZUF6dXJlQXV0aG9yaXphdGlvblNlcnZpY2UgfSBmcm9tIFwiLi9hZGFwdGVycy9wYWdvcGEtdGVjaG5vbG9neS9henVyZS1hdXRob3JpemF0aW9uLmpzXCI7XG5pbXBvcnQgeyBnZXRDb25maWcgfSBmcm9tIFwiLi9jb25maWcuanNcIjtcbmltcG9ydCB7IGdldEluZm8gfSBmcm9tIFwiLi9kb21haW4vaW5mby5qc1wiO1xuaW1wb3J0IHsgYXBwbHlDb2RlbW9kQnlJZCB9IGZyb20gXCIuL3VzZS1jYXNlcy9hcHBseS1jb2RlbW9kLmpzXCI7XG5pbXBvcnQgeyBsaXN0Q29kZW1vZHMgfSBmcm9tIFwiLi91c2UtY2FzZXMvbGlzdC1jb2RlbW9kcy5qc1wiO1xuXG4vKipcbiAqIFJldHVybnMgYHRydWVgIHdoZW4gYC12YCBvciBgLS12ZXJib3NlYCBpcyBwcmVzZW50IGluIGFyZ3YuXG4gKlxuICogV2UgaW5zcGVjdCBhcmd2IGRpcmVjdGx5IOKAlCBpbnN0ZWFkIG9mIHJlbHlpbmcgb24gQ29tbWFuZGVyIOKAlCBiZWNhdXNlIHRoZVxuICogbG9ndGFwZSBjb25maWd1cmF0aW9uIG11c3QgYmUgaW4gcGxhY2UgYmVmb3JlIGFueSBjb21tYW5kIGhhbmRsZXIgcnVuc1xuICogKGluY2x1ZGluZyB0aGUgb25lcyB0aGF0IGVtaXQgZGVidWcgbG9ncyB3aGlsZSBwYXJzaW5nIHByb21wdHMpLlxuICovXG5jb25zdCBkZXRlY3RWZXJib3NlRnJvbUFyZ3YgPSAoYXJndjogcmVhZG9ubHkgc3RyaW5nW10pOiBib29sZWFuID0+XG4gIGFyZ3YuaW5jbHVkZXMoXCItdlwiKSB8fCBhcmd2LmluY2x1ZGVzKFwiLS12ZXJib3NlXCIpO1xuXG5jb25zdCBjb25maWd1cmVMb2dnaW5nID0gYXN5bmMgKHZlcmJvc2U6IGJvb2xlYW4pOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgY29uc3QgbGV2ZWwgPSB2ZXJib3NlID8gXCJkZWJ1Z1wiIDogXCJpbmZvXCI7XG4gIGF3YWl0IGNvbmZpZ3VyZSh7XG4gICAgbG9nZ2VyczogW1xuICAgICAgeyBjYXRlZ29yeTogW1wiZHgtY2xpXCJdLCBsb3dlc3RMZXZlbDogbGV2ZWwsIHNpbmtzOiBbXCJjb25zb2xlXCJdIH0sXG4gICAgICAvLyBUaGUgZW52aXJvbm1lbnQgZ2VuZXJhdG9yIChgZ2VuLmVudmApIGVtaXRzIGRlYnVnIG1lc3NhZ2VzIGFib3V0XG4gICAgICAvLyBwcm92aXNpb25lZCBBenVyZSByZXNvdXJjZXM7IHN1cmZhY2luZyB0aGVtIGlzIHRoZSBtYWluIHZhbHVlIG9mXG4gICAgICAvLyBgLS12ZXJib3NlYCB3aGVuIHJ1bm5pbmcgYGR4IGluaXRgIC8gYGR4IGFkZCBlbnZpcm9ubWVudGAuXG4gICAgICB7IGNhdGVnb3J5OiBbXCJnZW5cIl0sIGxvd2VzdExldmVsOiBsZXZlbCwgc2lua3M6IFtcImNvbnNvbGVcIl0gfSxcbiAgICAgIC8vIGBzYXZlbW9uZXlgIGFscmVhZHkgZW1pdHMgc3RydWN0dXJlZCBkZWJ1ZyBvdXRwdXQgYnkgZGVmYXVsdC5cbiAgICAgIHsgY2F0ZWdvcnk6IFtcInNhdmVtb25leVwiXSwgbG93ZXN0TGV2ZWw6IFwiZGVidWdcIiwgc2lua3M6IFtcImNvbnNvbGVcIl0gfSxcbiAgICAgIHsgY2F0ZWdvcnk6IFtcImpzb25cIl0sIGxvd2VzdExldmVsOiBcImluZm9cIiwgc2lua3M6IFtcInJhd0pzb25cIl0gfSxcbiAgICAgIHtcbiAgICAgICAgY2F0ZWdvcnk6IFtcImxvZ3RhcGVcIiwgXCJtZXRhXCJdLFxuICAgICAgICBsb3dlc3RMZXZlbDogXCJ3YXJuaW5nXCIsXG4gICAgICAgIHNpbmtzOiBbXCJjb25zb2xlXCJdLFxuICAgICAgfSxcbiAgICBdLFxuICAgIHNpbmtzOiB7XG4gICAgICBjb25zb2xlOiBnZXRDb25zb2xlU2luaygpLFxuICAgICAgcmF3SnNvbihyZWNvcmQpIHtcbiAgICAgICAgY29uc29sZS5sb2cocmVjb3JkLnJhd01lc3NhZ2UpO1xuICAgICAgfSxcbiAgICB9LFxuICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBydW5DbGkgPSBhc3luYyAodmVyc2lvbjogc3RyaW5nKSA9PiB7XG4gIGF3YWl0IGNvbmZpZ3VyZUxvZ2dpbmcoZGV0ZWN0VmVyYm9zZUZyb21Bcmd2KHByb2Nlc3MuYXJndikpO1xuXG4gIGNvbnN0IHJlcG9zaXRvcnlSZWFkZXIgPSBtYWtlUmVwb3NpdG9yeVJlYWRlcigpO1xuICBjb25zdCBwYWNrYWdlSnNvblJlYWRlciA9IG1ha2VQYWNrYWdlSnNvblJlYWRlcigpO1xuXG4gIC8qKlxuICAgKiBMYXppbHkgY3JlYXRlcyBHaXRIdWItYXV0aGVudGljYXRlZCBzZXJ2aWNlcyBvbiBmaXJzdCBjYWxsLlxuICAgKiBPbmx5IGNvbW1hbmRzIHRoYXQgYWN0dWFsbHkgbmVlZCBHaXRIdWIgKGluaXQsIGFkZCkgd2lsbCB0cmlnZ2VyIHRoaXMsXG4gICAqIHNvIGNyZWRlbnRpYWwtZnJlZSBjb21tYW5kcyAoc3BlYywgZG9jdG9yLCBpbmZvLCDigKYpIG5ldmVyIHJlcXVpcmUgYSBQQVQuXG4gICAqL1xuICBjb25zdCByZXF1aXJlR2l0SHViQXV0aCA9ICgpID0+XG4gICAgUmVzdWx0QXN5bmMuZnJvbVByb21pc2UoXG4gICAgICBnZXRHaXRIdWJQQVQoKSxcbiAgICAgIChjYXVzZSkgPT4gbmV3IEVycm9yKFwiRmFpbGVkIHRvIHJlYWQgR2l0SHViIFBBVFwiLCB7IGNhdXNlIH0pLFxuICAgICkuYW5kVGhlbigoYXV0aCkgPT4ge1xuICAgICAgaWYgKCFhdXRoKSB7XG4gICAgICAgIHJldHVybiBlcnJBc3luYyhcbiAgICAgICAgICBuZXcgRXJyb3IoXG4gICAgICAgICAgICBcIkdpdEh1YiBQQVQgaXMgcmVxdWlyZWQuIFBsZWFzZSBzZXQgdGhlIEdIX1RPS0VOIGVudmlyb25tZW50IHZhcmlhYmxlIG9yIGxvZ2luIHVzaW5nIEdpdEh1YiBDTEkuXCIsXG4gICAgICAgICAgKSxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IG9jdG9raXQgPSBuZXcgT2N0b2tpdCh7IGF1dGggfSk7XG4gICAgICBjb25zdCBnaXRIdWJTZXJ2aWNlID0gbmV3IE9jdG9raXRHaXRIdWJTZXJ2aWNlKG9jdG9raXQpO1xuICAgICAgY29uc3QgYXV0aG9yaXphdGlvblNlcnZpY2UgPSBtYWtlQXp1cmVBdXRob3JpemF0aW9uU2VydmljZShnaXRIdWJTZXJ2aWNlKTtcbiAgICAgIHJldHVybiBva0FzeW5jKHsgYXV0aG9yaXphdGlvblNlcnZpY2UsIGdpdEh1YlNlcnZpY2UgfSk7XG4gICAgfSk7XG5cbiAgY29uc3QgZGVwcyA9IHtcbiAgICBwYWNrYWdlSnNvblJlYWRlcixcbiAgICByZXBvc2l0b3J5UmVhZGVyLFxuICAgIHJlcXVpcmVHaXRIdWJBdXRoLFxuICB9O1xuXG4gIGNvbnN0IGNvbmZpZyA9IGdldENvbmZpZygpO1xuICBjb25zdCBlbnYgPSBjbGlFbnZTY2hlbWEucGFyc2UocHJvY2Vzcy5lbnYpO1xuXG4gIGNvbnN0IHVzZUNhc2VzID0ge1xuICAgIGFwcGx5Q29kZW1vZEJ5SWQ6IGFwcGx5Q29kZW1vZEJ5SWQoY29kZW1vZFJlZ2lzdHJ5LCBnZXRJbmZvKGRlcHMpKSxcbiAgICBsaXN0Q29kZW1vZHM6IGxpc3RDb2RlbW9kcyhjb2RlbW9kUmVnaXN0cnkpLFxuICB9O1xuXG4gIGNvbnN0IHByb2dyYW0gPSBtYWtlQ2xpKGRlcHMsIGNvbmZpZywgdXNlQ2FzZXMsIGVudiwgdmVyc2lvbik7XG5cbiAgcHJvZ3JhbS5wYXJzZSgpO1xufTtcbiJdfQ==
|