projen 0.36.5 → 0.37.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.jsii +16740 -16583
- package/API.md +7147 -7069
- package/README.md +9 -9
- package/lib/awscdk/auto-discover.js +1 -1
- package/lib/{awscdk-app-ts.d.ts → awscdk/awscdk-app-ts.d.ts} +4 -3
- package/lib/awscdk/awscdk-app-ts.js +189 -0
- package/lib/{awscdk-construct.d.ts → awscdk/awscdk-construct.d.ts} +2 -2
- package/lib/awscdk/awscdk-construct.js +121 -0
- package/lib/awscdk/cdk-config.js +1 -1
- package/lib/awscdk/cdk-tasks.d.ts +1 -1
- package/lib/awscdk/cdk-tasks.js +2 -2
- package/lib/awscdk/index.d.ts +5 -3
- package/lib/awscdk/index.js +6 -4
- package/lib/awscdk/integration-test.d.ts +1 -1
- package/lib/awscdk/integration-test.js +2 -2
- package/lib/awscdk/java-app.js +1 -1
- package/lib/awscdk/lambda-function.d.ts +1 -1
- package/lib/awscdk/lambda-function.js +6 -7
- package/lib/{tasks/builtin-example.task.d.ts → builtin-example.task.d.ts} +0 -0
- package/lib/builtin-example.task.js +4 -0
- package/lib/{construct-lib.d.ts → cdk/construct-lib.d.ts} +0 -0
- package/lib/cdk/construct-lib.js +30 -0
- package/lib/cdk/index.d.ts +3 -0
- package/lib/{json → cdk}/index.js +4 -2
- package/lib/cdk/jsii-docgen.d.ts +12 -0
- package/lib/cdk/jsii-docgen.js +29 -0
- package/lib/{jsii-project.d.ts → cdk/jsii-project.d.ts} +4 -3
- package/lib/cdk/jsii-project.js +188 -0
- package/lib/{cdk8s-app-ts.d.ts → cdk8s/cdk8s-app-ts.d.ts} +1 -1
- package/lib/cdk8s/cdk8s-app-ts.js +134 -0
- package/lib/{cdk8s-construct.d.ts → cdk8s/cdk8s-construct.d.ts} +1 -1
- package/lib/{cdk8s-construct.js → cdk8s/cdk8s-construct.js} +4 -4
- package/lib/cdk8s/index.d.ts +2 -0
- package/lib/{deps → cdk8s}/index.js +3 -3
- package/lib/{cdktf-construct.d.ts → cdktf/cdktf-construct.d.ts} +1 -1
- package/lib/{cdktf-construct.js → cdktf/cdktf-construct.js} +4 -4
- package/lib/cdktf/index.d.ts +1 -0
- package/lib/{git → cdktf}/index.js +2 -2
- package/lib/cli/index.js +5 -5
- package/lib/cli/synth.d.ts +1 -1
- package/lib/cli/synth.js +1 -1
- package/lib/cli/tasks.d.ts +1 -1
- package/lib/cli/tasks.js +1 -1
- package/lib/component.js +1 -1
- package/lib/{deps/dependencies.d.ts → dependencies.d.ts} +101 -3
- package/lib/dependencies.js +206 -0
- package/lib/dev-env.d.ts +1 -1
- package/lib/dev-env.js +2 -2
- package/lib/docker-compose.js +2 -2
- package/lib/file.js +1 -1
- package/lib/{git/gitattributes.d.ts → gitattributes.d.ts} +2 -2
- package/lib/gitattributes.js +62 -0
- package/lib/github/auto-approve.js +1 -1
- package/lib/github/auto-merge.js +1 -1
- package/lib/github/dependabot.js +1 -1
- package/lib/github/github-project.d.ts +193 -0
- package/lib/github/github-project.js +70 -0
- package/lib/github/github.js +1 -1
- package/lib/github/index.d.ts +1 -0
- package/lib/github/index.js +2 -1
- package/lib/github/mergify.js +1 -1
- package/lib/github/pr-template.js +1 -1
- package/lib/github/pull-request-lint.js +1 -1
- package/lib/github/stale.js +1 -1
- package/lib/github/task-workflow.d.ts +1 -1
- package/lib/github/task-workflow.js +2 -2
- package/lib/github/workflows.js +1 -1
- package/lib/gitpod.d.ts +1 -1
- package/lib/gitpod.js +2 -2
- package/lib/ignore-file.js +1 -1
- package/lib/index.d.ts +12 -20
- package/lib/index.js +13 -21
- package/lib/ini.js +1 -1
- package/lib/java/java-project.d.ts +2 -2
- package/lib/java/java-project.js +4 -4
- package/lib/java/junit.js +1 -1
- package/lib/java/maven-compile.js +1 -1
- package/lib/java/maven-packaging.js +1 -1
- package/lib/java/maven-sample.js +1 -1
- package/lib/java/pom.d.ts +1 -1
- package/lib/java/pom.js +12 -12
- package/lib/java/projenrc.js +4 -4
- package/lib/javascript/bundler.d.ts +1 -1
- package/lib/javascript/bundler.js +4 -4
- package/lib/{eslint.d.ts → javascript/eslint.d.ts} +3 -3
- package/lib/javascript/eslint.js +261 -0
- package/lib/javascript/index.d.ts +8 -2
- package/lib/javascript/index.js +9 -3
- package/lib/{jest.d.ts → javascript/jest.d.ts} +1 -1
- package/lib/{jest.js → javascript/jest.js} +3 -3
- package/lib/{node-package.d.ts → javascript/node-package.d.ts} +2 -2
- package/lib/javascript/node-package.js +683 -0
- package/lib/{node-project.d.ts → javascript/node-project.d.ts} +9 -8
- package/lib/javascript/node-project.js +541 -0
- package/lib/javascript/npm-config.d.ts +1 -1
- package/lib/javascript/npm-config.js +2 -2
- package/lib/javascript/projenrc.js +3 -3
- package/lib/{typescript-config.d.ts → javascript/typescript-config.d.ts} +2 -2
- package/lib/{typescript-config.js → javascript/typescript-config.js} +3 -3
- package/lib/{upgrade-dependencies.d.ts → javascript/upgrade-dependencies.d.ts} +3 -3
- package/lib/javascript/upgrade-dependencies.js +328 -0
- package/lib/json.js +1 -1
- package/lib/license.js +1 -1
- package/lib/logger.js +1 -1
- package/lib/makefile.js +1 -1
- package/lib/object-file.js +1 -1
- package/lib/project-build.d.ts +1 -1
- package/lib/project-build.js +2 -2
- package/lib/project.d.ts +5 -198
- package/lib/project.js +14 -78
- package/lib/projects.js +1 -1
- package/lib/{json/projenrc.d.ts → projenrc-json.d.ts} +2 -2
- package/lib/{json/projenrc.js → projenrc-json.js} +4 -4
- package/lib/python/pip.d.ts +1 -1
- package/lib/python/pip.js +9 -9
- package/lib/python/poetry.d.ts +1 -1
- package/lib/python/poetry.js +10 -10
- package/lib/python/projenrc.js +4 -4
- package/lib/python/pytest.js +1 -1
- package/lib/python/python-deps.d.ts +2 -2
- package/lib/python/python-deps.js +1 -1
- package/lib/python/python-packaging.d.ts +1 -1
- package/lib/python/python-packaging.js +1 -1
- package/lib/python/python-project.d.ts +1 -1
- package/lib/python/python-project.js +4 -3
- package/lib/python/python-sample.js +1 -1
- package/lib/python/requirements-file.js +4 -4
- package/lib/python/setuppy.js +1 -1
- package/lib/python/setuptools.d.ts +1 -1
- package/lib/python/setuptools.js +2 -2
- package/lib/python/venv.js +1 -1
- package/lib/readme.js +1 -1
- package/lib/release/publisher.d.ts +9 -1
- package/lib/release/publisher.js +7 -4
- package/lib/release/release-trigger.d.ts +19 -0
- package/lib/release/release-trigger.js +7 -2
- package/lib/release/release.d.ts +2 -2
- package/lib/release/release.js +2 -2
- package/lib/{json/run-projenrc.task.d.ts → run-projenrc-json.task.d.ts} +0 -0
- package/lib/run-projenrc-json.task.js +31 -0
- package/lib/sample-file.js +2 -2
- package/lib/semver.js +1 -1
- package/lib/source-code.js +1 -1
- package/lib/{tasks/model.d.ts → task-model.d.ts} +0 -0
- package/lib/task-model.js +3 -0
- package/lib/{tasks/runtime.d.ts → task-runtime.d.ts} +1 -1
- package/lib/task-runtime.js +272 -0
- package/lib/{tasks/task.d.ts → task.d.ts} +1 -1
- package/lib/task.js +195 -0
- package/lib/{tasks/tasks.d.ts → tasks.d.ts} +2 -2
- package/lib/tasks.js +129 -0
- package/lib/textfile.js +1 -1
- package/lib/toml.js +1 -1
- package/lib/typescript/index.d.ts +2 -0
- package/lib/typescript/index.js +3 -1
- package/lib/typescript/projenrc.js +1 -1
- package/lib/typescript/typescript-typedoc.d.ts +12 -0
- package/lib/typescript/typescript-typedoc.js +28 -0
- package/lib/{typescript.d.ts → typescript/typescript.d.ts} +3 -5
- package/lib/typescript/typescript.js +281 -0
- package/lib/util/synth.d.ts +2 -2
- package/lib/util/synth.js +3 -3
- package/lib/version.d.ts +1 -1
- package/lib/version.js +2 -2
- package/lib/vscode/devcontainer.d.ts +1 -1
- package/lib/vscode/devcontainer.js +2 -2
- package/lib/vscode/launch-config.js +1 -1
- package/lib/vscode/vscode.js +1 -1
- package/lib/web/next.d.ts +1 -1
- package/lib/web/next.js +8 -9
- package/lib/web/postcss.d.ts +1 -1
- package/lib/web/postcss.js +2 -2
- package/lib/web/react.d.ts +1 -1
- package/lib/web/react.js +9 -10
- package/lib/web/tailwind.d.ts +1 -1
- package/lib/web/tailwind.js +2 -2
- package/lib/xmlfile.js +1 -1
- package/lib/yaml.js +1 -1
- package/package.json +4 -2
- package/lib/awscdk-app-ts.js +0 -188
- package/lib/awscdk-construct.js +0 -121
- package/lib/cdk8s-app-ts.js +0 -134
- package/lib/construct-lib.js +0 -30
- package/lib/deps/dependencies.js +0 -192
- package/lib/deps/index.d.ts +0 -2
- package/lib/deps/model.d.ts +0 -99
- package/lib/deps/model.js +0 -18
- package/lib/eslint.js +0 -261
- package/lib/git/gitattributes.js +0 -62
- package/lib/git/index.d.ts +0 -1
- package/lib/jsii-docgen.d.ts +0 -10
- package/lib/jsii-docgen.js +0 -23
- package/lib/jsii-project.js +0 -187
- package/lib/json/index.d.ts +0 -1
- package/lib/json/run-projenrc.task.js +0 -31
- package/lib/node-package.js +0 -683
- package/lib/node-project.js +0 -540
- package/lib/tasks/builtin-example.task.js +0 -4
- package/lib/tasks/index.d.ts +0 -4
- package/lib/tasks/index.js +0 -17
- package/lib/tasks/model.js +0 -3
- package/lib/tasks/runtime.js +0 -272
- package/lib/tasks/task.js +0 -195
- package/lib/tasks/tasks.js +0 -129
- package/lib/typescript-typedoc.d.ts +0 -7
- package/lib/typescript-typedoc.js +0 -19
- package/lib/typescript.js +0 -284
- package/lib/upgrade-dependencies.js +0 -328
|
@@ -1,328 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var _a, _b;
|
|
3
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
-
exports.UpgradeDependenciesSchedule = exports.UpgradeDependencies = void 0;
|
|
5
|
-
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
|
|
6
|
-
const component_1 = require("./component");
|
|
7
|
-
const github_1 = require("./github");
|
|
8
|
-
const constants_1 = require("./github/constants");
|
|
9
|
-
function context(value) {
|
|
10
|
-
return `\${{ ${value} }}`;
|
|
11
|
-
}
|
|
12
|
-
function setOutput(name, value) {
|
|
13
|
-
return `echo "::set-output name=${name}::${value}"`;
|
|
14
|
-
}
|
|
15
|
-
const RUNNER_TEMP = context('runner.temp');
|
|
16
|
-
const DEFAULT_TOKEN = context('secrets.GITHUB_TOKEN');
|
|
17
|
-
const REPO = context('github.repository');
|
|
18
|
-
const RUN_ID = context('github.run_id');
|
|
19
|
-
const RUN_URL = `https://github.com/${REPO}/actions/runs/${RUN_ID}`;
|
|
20
|
-
const UBUNTU_LATEST = 'ubuntu-latest';
|
|
21
|
-
/**
|
|
22
|
-
* (experimental) Upgrade node project dependencies.
|
|
23
|
-
*
|
|
24
|
-
* @experimental
|
|
25
|
-
*/
|
|
26
|
-
class UpgradeDependencies extends component_1.Component {
|
|
27
|
-
/**
|
|
28
|
-
* @experimental
|
|
29
|
-
*/
|
|
30
|
-
constructor(project, options = {}) {
|
|
31
|
-
var _c, _d, _e, _f;
|
|
32
|
-
super(project);
|
|
33
|
-
/**
|
|
34
|
-
* (experimental) The workflows that execute the upgrades.
|
|
35
|
-
*
|
|
36
|
-
* One workflow per branch.
|
|
37
|
-
*
|
|
38
|
-
* @experimental
|
|
39
|
-
*/
|
|
40
|
-
this.workflows = [];
|
|
41
|
-
this._project = project;
|
|
42
|
-
this.options = options;
|
|
43
|
-
this.pullRequestTitle = (_c = options.pullRequestTitle) !== null && _c !== void 0 ? _c : 'upgrade dependencies';
|
|
44
|
-
this.ignoresProjen = (_d = this.options.ignoreProjen) !== null && _d !== void 0 ? _d : true;
|
|
45
|
-
this.gitIdentity = (_f = (_e = options.workflowOptions) === null || _e === void 0 ? void 0 : _e.gitIdentity) !== null && _f !== void 0 ? _f : constants_1.DEFAULT_GITHUB_ACTIONS_USER;
|
|
46
|
-
project.addDevDeps('npm-check-updates@^11');
|
|
47
|
-
}
|
|
48
|
-
// create the upgrade task and a corresponding github workflow
|
|
49
|
-
// for each requested branch.
|
|
50
|
-
/**
|
|
51
|
-
* (experimental) Called before synthesis.
|
|
52
|
-
*
|
|
53
|
-
* @experimental
|
|
54
|
-
*/
|
|
55
|
-
preSynthesize() {
|
|
56
|
-
var _c, _d, _e, _f, _g;
|
|
57
|
-
const task = this.createTask();
|
|
58
|
-
if (this._project.github && ((_c = this.options.workflow) !== null && _c !== void 0 ? _c : true)) {
|
|
59
|
-
// represents the default repository branch.
|
|
60
|
-
// just like not specifying anything.
|
|
61
|
-
const defaultBranch = undefined;
|
|
62
|
-
const branches = (_e = (_d = this.options.workflowOptions) === null || _d === void 0 ? void 0 : _d.branches) !== null && _e !== void 0 ? _e : ((_g = (_f = this._project.release) === null || _f === void 0 ? void 0 : _f.branches) !== null && _g !== void 0 ? _g : [defaultBranch]);
|
|
63
|
-
for (const branch of branches) {
|
|
64
|
-
this.workflows.push(this.createWorkflow(task, this._project.github, branch));
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
createTask() {
|
|
69
|
-
var _c, _d;
|
|
70
|
-
const taskName = (_c = this.options.taskName) !== null && _c !== void 0 ? _c : 'upgrade';
|
|
71
|
-
const task = this._project.addTask(taskName, {
|
|
72
|
-
// this task should not run in CI mode because its designed to
|
|
73
|
-
// update package.json and lock files.
|
|
74
|
-
env: { CI: '0' },
|
|
75
|
-
description: this.pullRequestTitle,
|
|
76
|
-
});
|
|
77
|
-
const exclude = (_d = this.options.exclude) !== null && _d !== void 0 ? _d : [];
|
|
78
|
-
if (this.ignoresProjen) {
|
|
79
|
-
exclude.push('projen');
|
|
80
|
-
}
|
|
81
|
-
for (const dep of ['dev', 'optional', 'peer', 'prod', 'bundle']) {
|
|
82
|
-
const ncuCommand = ['npm-check-updates', '--dep', dep, '--upgrade', '--target=minor'];
|
|
83
|
-
if (exclude.length > 0) {
|
|
84
|
-
ncuCommand.push(`--reject='${exclude.join(',')}'`);
|
|
85
|
-
}
|
|
86
|
-
if (this.options.include) {
|
|
87
|
-
ncuCommand.push(`--filter='${this.options.include.join(',')}'`);
|
|
88
|
-
}
|
|
89
|
-
task.exec(ncuCommand.join(' '));
|
|
90
|
-
}
|
|
91
|
-
// run "yarn/npm install" to update the lockfile and install any deps (such as projen)
|
|
92
|
-
task.exec(this._project.package.installAndUpdateLockfileCommand);
|
|
93
|
-
// run upgrade command to upgrade transitive deps as well
|
|
94
|
-
task.exec(this._project.package.renderUpgradePackagesCommand(exclude, this.options.include));
|
|
95
|
-
// run "projen" to give projen a chance to update dependencies (it will also run "yarn install")
|
|
96
|
-
task.exec(this._project.projenCommand);
|
|
97
|
-
return task;
|
|
98
|
-
}
|
|
99
|
-
createWorkflow(task, github, branch) {
|
|
100
|
-
var _c, _d;
|
|
101
|
-
const schedule = (_d = (_c = this.options.workflowOptions) === null || _c === void 0 ? void 0 : _c.schedule) !== null && _d !== void 0 ? _d : UpgradeDependenciesSchedule.DAILY;
|
|
102
|
-
const workflowName = `${task.name}${branch ? `-${branch.replace(/\//g, '-')}` : ''}`;
|
|
103
|
-
const workflow = github.addWorkflow(workflowName);
|
|
104
|
-
const triggers = {
|
|
105
|
-
workflowDispatch: {},
|
|
106
|
-
schedule: schedule.cron ? schedule.cron.map(e => ({ cron: e })) : undefined,
|
|
107
|
-
};
|
|
108
|
-
workflow.on(triggers);
|
|
109
|
-
const upgrade = this.createUpgrade(task, branch);
|
|
110
|
-
const pr = this.createPr(workflow, upgrade);
|
|
111
|
-
const jobs = {};
|
|
112
|
-
jobs[upgrade.jobId] = upgrade.job;
|
|
113
|
-
jobs[pr.jobId] = pr.job;
|
|
114
|
-
workflow.addJobs(jobs);
|
|
115
|
-
return workflow;
|
|
116
|
-
}
|
|
117
|
-
createUpgrade(task, branch) {
|
|
118
|
-
var _c, _d, _e;
|
|
119
|
-
const build = (_d = (_c = this.options.workflowOptions) === null || _c === void 0 ? void 0 : _c.rebuild) !== null && _d !== void 0 ? _d : true;
|
|
120
|
-
const patchFile = '.upgrade.tmp.patch';
|
|
121
|
-
const buildStepId = 'build';
|
|
122
|
-
const conclusion = 'conclusion';
|
|
123
|
-
// thats all we should need at this stage since all we do is clone.
|
|
124
|
-
// note that this also prevents new code that is introduced in the upgrade
|
|
125
|
-
// to have write access to anything, in case its somehow executed. (for example during build)
|
|
126
|
-
const permissions = {
|
|
127
|
-
contents: github_1.workflows.JobPermission.READ,
|
|
128
|
-
};
|
|
129
|
-
const outputs = {};
|
|
130
|
-
const steps = [
|
|
131
|
-
{
|
|
132
|
-
name: 'Checkout',
|
|
133
|
-
uses: 'actions/checkout@v2',
|
|
134
|
-
with: branch ? { ref: branch } : undefined,
|
|
135
|
-
},
|
|
136
|
-
constants_1.setGitIdentityStep(this.gitIdentity),
|
|
137
|
-
...this._project.installWorkflowSteps,
|
|
138
|
-
{
|
|
139
|
-
name: 'Upgrade dependencies',
|
|
140
|
-
run: this._project.runTaskCommand(task),
|
|
141
|
-
},
|
|
142
|
-
];
|
|
143
|
-
if (build) {
|
|
144
|
-
steps.push({
|
|
145
|
-
name: 'Build',
|
|
146
|
-
id: buildStepId,
|
|
147
|
-
run: `${this._project.runTaskCommand(this._project.buildTask)} && ${setOutput(conclusion, 'success')} || ${setOutput(conclusion, 'failure')}`,
|
|
148
|
-
});
|
|
149
|
-
outputs[conclusion] = {
|
|
150
|
-
stepId: buildStepId,
|
|
151
|
-
outputName: conclusion,
|
|
152
|
-
};
|
|
153
|
-
}
|
|
154
|
-
steps.push({
|
|
155
|
-
name: 'Create Patch',
|
|
156
|
-
run: [
|
|
157
|
-
'git add .',
|
|
158
|
-
`git diff --patch --staged > ${patchFile}`,
|
|
159
|
-
].join('\n'),
|
|
160
|
-
}, {
|
|
161
|
-
name: 'Upload patch',
|
|
162
|
-
uses: 'actions/upload-artifact@v2',
|
|
163
|
-
with: { name: patchFile, path: patchFile },
|
|
164
|
-
});
|
|
165
|
-
return {
|
|
166
|
-
job: {
|
|
167
|
-
name: 'Upgrade',
|
|
168
|
-
container: (_e = this.options.workflowOptions) === null || _e === void 0 ? void 0 : _e.container,
|
|
169
|
-
permissions: permissions,
|
|
170
|
-
runsOn: UBUNTU_LATEST,
|
|
171
|
-
outputs: outputs,
|
|
172
|
-
steps: steps,
|
|
173
|
-
},
|
|
174
|
-
jobId: 'upgrade',
|
|
175
|
-
patchFile: patchFile,
|
|
176
|
-
build: build,
|
|
177
|
-
buildConclusionOutput: conclusion,
|
|
178
|
-
ref: branch,
|
|
179
|
-
};
|
|
180
|
-
}
|
|
181
|
-
createPr(workflow, upgrade) {
|
|
182
|
-
var _c, _d, _e, _f;
|
|
183
|
-
const customToken = ((_c = this.options.workflowOptions) === null || _c === void 0 ? void 0 : _c.secret) ? context(`secrets.${this.options.workflowOptions.secret}`) : undefined;
|
|
184
|
-
const workflowName = workflow.name;
|
|
185
|
-
const branchName = `github-actions/${workflowName}`;
|
|
186
|
-
const prStepId = 'create-pr';
|
|
187
|
-
const title = `chore(deps): ${this.pullRequestTitle}`;
|
|
188
|
-
const description = [
|
|
189
|
-
'Upgrades project dependencies. See details in [workflow run].',
|
|
190
|
-
'',
|
|
191
|
-
`[Workflow Run]: ${RUN_URL}`,
|
|
192
|
-
'',
|
|
193
|
-
'------',
|
|
194
|
-
'',
|
|
195
|
-
`*Automatically created by projen via the "${workflow.name}" workflow*`,
|
|
196
|
-
].join('\n');
|
|
197
|
-
const comitter = `${this.gitIdentity.name} <${this.gitIdentity.email}>`;
|
|
198
|
-
const steps = [
|
|
199
|
-
{
|
|
200
|
-
name: 'Checkout',
|
|
201
|
-
uses: 'actions/checkout@v2',
|
|
202
|
-
with: upgrade.ref ? { ref: upgrade.ref } : undefined,
|
|
203
|
-
},
|
|
204
|
-
constants_1.setGitIdentityStep(this.gitIdentity),
|
|
205
|
-
{
|
|
206
|
-
name: 'Download patch',
|
|
207
|
-
uses: 'actions/download-artifact@v2',
|
|
208
|
-
with: { name: upgrade.patchFile, path: RUNNER_TEMP },
|
|
209
|
-
},
|
|
210
|
-
{
|
|
211
|
-
name: 'Apply patch',
|
|
212
|
-
run: `[ -s ${RUNNER_TEMP}/${upgrade.patchFile} ] && git apply ${RUNNER_TEMP}/${upgrade.patchFile} || echo "Empty patch. Skipping."`,
|
|
213
|
-
},
|
|
214
|
-
{
|
|
215
|
-
name: 'Create Pull Request',
|
|
216
|
-
id: prStepId,
|
|
217
|
-
uses: 'peter-evans/create-pull-request@v3',
|
|
218
|
-
with: {
|
|
219
|
-
// the pr can modify workflow files, so we need to use the custom
|
|
220
|
-
// secret if one is configured.
|
|
221
|
-
'token': customToken !== null && customToken !== void 0 ? customToken : DEFAULT_TOKEN,
|
|
222
|
-
'commit-message': `${title}\n\n${description}`,
|
|
223
|
-
'branch': branchName,
|
|
224
|
-
'title': title,
|
|
225
|
-
'labels': ((_e = (_d = this.options.workflowOptions) === null || _d === void 0 ? void 0 : _d.labels) === null || _e === void 0 ? void 0 : _e.join(',')) || undefined,
|
|
226
|
-
'body': description,
|
|
227
|
-
'author': comitter,
|
|
228
|
-
'committer': comitter,
|
|
229
|
-
'signoff': (_f = this.options.signoff) !== null && _f !== void 0 ? _f : true,
|
|
230
|
-
},
|
|
231
|
-
},
|
|
232
|
-
];
|
|
233
|
-
let writeChecksPermission = false;
|
|
234
|
-
if (this._project.buildWorkflowJobId && upgrade.build) {
|
|
235
|
-
const body = {
|
|
236
|
-
name: this._project.buildWorkflowJobId,
|
|
237
|
-
head_sha: branchName,
|
|
238
|
-
status: 'completed',
|
|
239
|
-
conclusion: context(`needs.${upgrade.jobId}.outputs.${upgrade.buildConclusionOutput}`),
|
|
240
|
-
output: {
|
|
241
|
-
title: `Created via the ${workflowName} workflow.`,
|
|
242
|
-
summary: `Action run URL: ${RUN_URL}`,
|
|
243
|
-
},
|
|
244
|
-
};
|
|
245
|
-
steps.push({
|
|
246
|
-
name: 'Update status check',
|
|
247
|
-
if: `steps.${prStepId}.outputs.pull-request-url != \'\'`,
|
|
248
|
-
run: 'curl -i --fail '
|
|
249
|
-
+ '-X POST '
|
|
250
|
-
+ '-H "Accept: application/vnd.github.v3+json" '
|
|
251
|
-
+ `-H "Authorization: token \${GITHUB_TOKEN}" https://api.github.com/repos/${REPO}/check-runs `
|
|
252
|
-
+ `-d '${JSON.stringify(body)}'`,
|
|
253
|
-
env: { GITHUB_TOKEN: DEFAULT_TOKEN },
|
|
254
|
-
});
|
|
255
|
-
// necessary to update status checks
|
|
256
|
-
writeChecksPermission = true;
|
|
257
|
-
}
|
|
258
|
-
return {
|
|
259
|
-
job: {
|
|
260
|
-
name: 'Create Pull Request',
|
|
261
|
-
needs: [upgrade.jobId],
|
|
262
|
-
permissions: {
|
|
263
|
-
contents: github_1.workflows.JobPermission.WRITE,
|
|
264
|
-
pullRequests: github_1.workflows.JobPermission.WRITE,
|
|
265
|
-
checks: writeChecksPermission ? github_1.workflows.JobPermission.WRITE : undefined,
|
|
266
|
-
},
|
|
267
|
-
runsOn: UBUNTU_LATEST,
|
|
268
|
-
steps: steps,
|
|
269
|
-
},
|
|
270
|
-
jobId: 'pr',
|
|
271
|
-
};
|
|
272
|
-
}
|
|
273
|
-
}
|
|
274
|
-
exports.UpgradeDependencies = UpgradeDependencies;
|
|
275
|
-
_a = JSII_RTTI_SYMBOL_1;
|
|
276
|
-
UpgradeDependencies[_a] = { fqn: "projen.UpgradeDependencies", version: "0.36.5" };
|
|
277
|
-
/**
|
|
278
|
-
* (experimental) How often to check for new versions and raise pull requests for version upgrades.
|
|
279
|
-
*
|
|
280
|
-
* @experimental
|
|
281
|
-
*/
|
|
282
|
-
class UpgradeDependenciesSchedule {
|
|
283
|
-
constructor(cron) {
|
|
284
|
-
this.cron = cron;
|
|
285
|
-
}
|
|
286
|
-
/**
|
|
287
|
-
* (experimental) Create a schedule from a raw cron expression.
|
|
288
|
-
*
|
|
289
|
-
* @experimental
|
|
290
|
-
*/
|
|
291
|
-
static expressions(cron) {
|
|
292
|
-
return new UpgradeDependenciesSchedule(cron);
|
|
293
|
-
}
|
|
294
|
-
}
|
|
295
|
-
exports.UpgradeDependenciesSchedule = UpgradeDependenciesSchedule;
|
|
296
|
-
_b = JSII_RTTI_SYMBOL_1;
|
|
297
|
-
UpgradeDependenciesSchedule[_b] = { fqn: "projen.UpgradeDependenciesSchedule", version: "0.36.5" };
|
|
298
|
-
/**
|
|
299
|
-
* (experimental) Disables automatic upgrades.
|
|
300
|
-
*
|
|
301
|
-
* @experimental
|
|
302
|
-
*/
|
|
303
|
-
UpgradeDependenciesSchedule.NEVER = new UpgradeDependenciesSchedule([]);
|
|
304
|
-
/**
|
|
305
|
-
* (experimental) At 00:00.
|
|
306
|
-
*
|
|
307
|
-
* @experimental
|
|
308
|
-
*/
|
|
309
|
-
UpgradeDependenciesSchedule.DAILY = new UpgradeDependenciesSchedule(['0 0 * * *']);
|
|
310
|
-
/**
|
|
311
|
-
* (experimental) At 00:00 on every day-of-week from Monday through Friday.
|
|
312
|
-
*
|
|
313
|
-
* @experimental
|
|
314
|
-
*/
|
|
315
|
-
UpgradeDependenciesSchedule.WEEKDAY = new UpgradeDependenciesSchedule(['0 0 * * 1-5']);
|
|
316
|
-
/**
|
|
317
|
-
* (experimental) At 00:00 on Monday.
|
|
318
|
-
*
|
|
319
|
-
* @experimental
|
|
320
|
-
*/
|
|
321
|
-
UpgradeDependenciesSchedule.WEEKLY = new UpgradeDependenciesSchedule(['0 0 * * 1']);
|
|
322
|
-
/**
|
|
323
|
-
* (experimental) At 00:00 on day-of-month 1.
|
|
324
|
-
*
|
|
325
|
-
* @experimental
|
|
326
|
-
*/
|
|
327
|
-
UpgradeDependenciesSchedule.MONTHLY = new UpgradeDependenciesSchedule(['0 0 1 * *']);
|
|
328
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBncmFkZS1kZXBlbmRlbmNpZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdXBncmFkZS1kZXBlbmRlbmNpZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSwyQ0FBd0M7QUFDeEMscUNBQTBFO0FBQzFFLGtEQUFxRjtBQUlyRixTQUFTLE9BQU8sQ0FBQyxLQUFhO0lBQzVCLE9BQU8sUUFBUSxLQUFLLEtBQUssQ0FBQztBQUM1QixDQUFDO0FBRUQsU0FBUyxTQUFTLENBQUMsSUFBWSxFQUFFLEtBQWE7SUFDNUMsT0FBTywyQkFBMkIsSUFBSSxLQUFLLEtBQUssR0FBRyxDQUFDO0FBQ3RELENBQUM7QUFFRCxNQUFNLFdBQVcsR0FBRyxPQUFPLENBQUMsYUFBYSxDQUFDLENBQUM7QUFDM0MsTUFBTSxhQUFhLEdBQUcsT0FBTyxDQUFDLHNCQUFzQixDQUFDLENBQUM7QUFDdEQsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLG1CQUFtQixDQUFDLENBQUM7QUFDMUMsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLGVBQWUsQ0FBQyxDQUFDO0FBQ3hDLE1BQU0sT0FBTyxHQUFHLHNCQUFzQixJQUFJLGlCQUFpQixNQUFNLEVBQUUsQ0FBQztBQUNwRSxNQUFNLGFBQWEsR0FBRyxlQUFlLENBQUM7Ozs7OztBQStCdEMsTUFBYSxtQkFBb0IsU0FBUSxxQkFBUzs7OztJQWNoRCxZQUFZLE9BQW9CLEVBQUUsVUFBc0MsRUFBRTs7UUFDeEUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDOzs7Ozs7OztRQVpELGNBQVMsR0FBcUIsRUFBRSxDQUFDO1FBYy9DLElBQUksQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDO1FBQ3hCLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxnQkFBZ0IsU0FBRyxPQUFPLENBQUMsZ0JBQWdCLG1DQUFJLHNCQUFzQixDQUFDO1FBQzNFLElBQUksQ0FBQyxhQUFhLFNBQUcs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OztJQUovQyxNQUFNLENBQUMsV0FBVyxDQUFDLElBQWM7UUFDdEMsT0FBTyxJQUFJLDJCQUEyQixDQUFDLElBQUksQ0FBQyxDQUFDO0lBQy9DLENBQUM7O0FBcEJILGtFQXVCQzs7Ozs7Ozs7QUFwQndCLGlDQUFLLEdBQUcsSUFBSSwyQkFBMkIsQ0FBQyxFQUFFLENBQUMsQ0FBQzs7Ozs7O0FBRzVDLGlDQUFLLEdBQUcsSUFBSSwyQkFBMkIsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7Ozs7OztBQUd2RCxtQ0FBTyxHQUFHLElBQUksMkJBQTJCLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDOzs7Ozs7QUFHM0Qsa0NBQU0sR0FBRyxJQUFJLDJCQUEyQixDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQzs7Ozs7O0FBR3hELG1DQUFPLEdBQUcsSUFBSSwyQkFBMkIsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudCc7XG5pbXBvcnQgeyBHaXRIdWIsIEdpdGh1YldvcmtmbG93LCBHaXRJZGVudGl0eSwgd29ya2Zsb3dzIH0gZnJvbSAnLi9naXRodWInO1xuaW1wb3J0IHsgREVGQVVMVF9HSVRIVUJfQUNUSU9OU19VU0VSLCBzZXRHaXRJZGVudGl0eVN0ZXAgfSBmcm9tICcuL2dpdGh1Yi9jb25zdGFudHMnO1xuaW1wb3J0IHsgTm9kZVByb2plY3QgfSBmcm9tICcuL25vZGUtcHJvamVjdCc7XG5pbXBvcnQgeyBUYXNrIH0gZnJvbSAnLi90YXNrcyc7XG5cbmZ1bmN0aW9uIGNvbnRleHQodmFsdWU6IHN0cmluZykge1xuICByZXR1cm4gYFxcJHt7ICR7dmFsdWV9IH19YDtcbn1cblxuZnVuY3Rpb24gc2V0T3V0cHV0KG5hbWU6IHN0cmluZywgdmFsdWU6IHN0cmluZykge1xuICByZXR1cm4gYGVjaG8gXCI6OnNldC1vdXRwdXQgbmFtZT0ke25hbWV9Ojoke3ZhbHVlfVwiYDtcbn1cblxuY29uc3QgUlVOTkVSX1RFTVAgPSBjb250ZXh0KCdydW5uZXIudGVtcCcpO1xuY29uc3QgREVGQVVMVF9UT0tFTiA9IGNvbnRleHQoJ3NlY3JldHMuR0lUSFVCX1RPS0VOJyk7XG5jb25zdCBSRVBPID0gY29udGV4dCgnZ2l0aHViLnJlcG9zaXRvcnknKTtcbmNvbnN0IFJVTl9JRCA9IGNvbnRleHQoJ2dpdGh1Yi5ydW5faWQnKTtcbmNvbnN0IFJVTl9VUkwgPSBgaHR0cHM6Ly9naXRodWIuY29tLyR7UkVQT30vYWN0aW9ucy9ydW5zLyR7UlVOX0lEfWA7XG5jb25zdCBVQlVOVFVfTEFURVNUID0gJ3VidW50dS1sYXRlc3QnO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbmV4cG9ydCBpbnRlcmZhY2UgVXBncmFkZURlcGVuZGVuY2llc09wdGlvbnMge1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcmVhZG9ubHkgZXhjbHVkZT86IHN0cmluZ1tdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcmVhZG9ubHkgaW5jbHVkZT86IHN0cmluZ1tdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIHJlYWRvbmx5IHdvcmtmbG93PzogYm9vbGVhbjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIHJlYWRvbmx5IHdvcmtmbG93T3B0aW9ucz86IFVwZ3JhZGVEZXBlbmRlbmNpZXNXb3JrZmxvd09wdGlvbnM7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIHJlYWRvbmx5IHRhc2tOYW1lPzogc3RyaW5nO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICByZWFkb25seSBwdWxsUmVxdWVzdFRpdGxlPzogc3RyaW5nO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIHJlYWRvbmx5IGlnbm9yZVByb2plbj86IGJvb2xlYW47XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcmVhZG9ubHkgc2lnbm9mZj86IGJvb2xlYW47XG59XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuZXhwb3J0IGNsYXNzIFVwZ3JhZGVEZXBlbmRlbmNpZXMgZXh0ZW5kcyBDb21wb25lbnQge1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIHB1YmxpYyByZWFkb25seSB3b3JrZmxvd3M6IEdpdGh1YldvcmtmbG93W10gPSBbXTtcblxuICBwcml2YXRlIHJlYWRvbmx5IG9wdGlvbnM6IFVwZ3JhZGVEZXBlbmRlbmNpZXNPcHRpb25zO1xuICBwcml2YXRlIHJlYWRvbmx5IF9wcm9qZWN0OiBOb2RlUHJvamVjdDtcbiAgcHJpdmF0ZSByZWFkb25seSBwdWxsUmVxdWVzdFRpdGxlOiBzdHJpbmc7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcHVibGljIHJlYWRvbmx5IGlnbm9yZXNQcm9qZW46IGJvb2xlYW47XG5cbiAgcHJpdmF0ZSByZWFkb25seSBnaXRJZGVudGl0eTogR2l0SWRlbnRpdHk7XG5cbiAgY29uc3RydWN0b3IocHJvamVjdDogTm9kZVByb2plY3QsIG9wdGlvbnM6IFVwZ3JhZGVEZXBlbmRlbmNpZXNPcHRpb25zID0ge30pIHtcbiAgICBzdXBlcihwcm9qZWN0KTtcblxuICAgIHRoaXMuX3Byb2plY3QgPSBwcm9qZWN0O1xuICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgdGhpcy5wdWxsUmVxdWVzdFRpdGxlID0gb3B0aW9ucy5wdWxsUmVxdWVzdFRpdGxlID8/ICd1cGdyYWRlIGRlcGVuZGVuY2llcyc7XG4gICAgdGhpcy5pZ25vcmVzUHJvamVuID0gdGhpcy5vcHRpb25zLmlnbm9yZVByb2plbiA/PyB0cnVlO1xuICAgIHRoaXMuZ2l0SWRlbnRpdHkgPSBvcHRpb25zLndvcmtmbG93T3B0aW9ucz8uZ2l0SWRlbnRpdHkgPz8gREVGQVVMVF9HSVRIVUJfQUNUSU9OU19VU0VSO1xuXG4gICAgcHJvamVjdC5hZGREZXZEZXBzKCducG0tY2hlY2stdXBkYXRlc0BeMTEnKTtcbiAgfVxuXG4gIC8vIGNyZWF0ZSB0aGUgdXBncmFkZSB0YXNrIGFuZCBhIGNvcnJlc3BvbmRpbmcgZ2l0aHViIHdvcmtmbG93XG4gIC8vIGZvciBlYWNoIHJlcXVlc3RlZCBicmFuY2guXG4gIHB1YmxpYyBwcmVTeW50aGVzaXplKCkge1xuICAgIGNvbnN0IHRhc2sgPSB0aGlzLmNyZWF0ZVRhc2soKTtcbiAgICBpZiAodGhpcy5fcHJvamVjdC5naXRodWIgJiYgKHRoaXMub3B0aW9ucy53b3JrZmxvdyA/PyB0cnVlKSkge1xuICAgICAgLy8gcmVwcmVzZW50cyB0aGUgZGVmYXVsdCByZXBvc2l0b3J5IGJyYW5jaC5cbiAgICAgIC8vIGp1c3QgbGlrZSBub3Qgc3BlY2lmeWluZyBhbnl0aGluZy5cbiAgICAgIGNvbnN0IGRlZmF1bHRCcmFuY2ggPSB1bmRlZmluZWQ7XG5cbiAgICAgIGNvbnN0IGJyYW5jaGVzID0gdGhpcy5vcHRpb25zLndvcmtmbG93T3B0aW9ucz8uYnJhbmNoZXMgPz8gKHRoaXMuX3Byb2plY3QucmVsZWFzZT8uYnJhbmNoZXMgPz8gW2RlZmF1bHRCcmFuY2hdKTtcbiAgICAgIGZvciAoY29uc3QgYnJhbmNoIG9mIGJyYW5jaGVzKSB7XG4gICAgICAgIHRoaXMud29ya2Zsb3dzLnB1c2godGhpcy5jcmVhdGVXb3JrZmxvdyh0YXNrLCB0aGlzLl9wcm9qZWN0LmdpdGh1YiwgYnJhbmNoKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVUYXNrKCk6IFRhc2sge1xuICAgIGNvbnN0IHRhc2tOYW1lID0gdGhpcy5vcHRpb25zLnRhc2tOYW1lID8/ICd1cGdyYWRlJztcbiAgICBjb25zdCB0YXNrID0gdGhpcy5fcHJvamVjdC5hZGRUYXNrKHRhc2tOYW1lLCB7XG4gICAgICAvLyB0aGlzIHRhc2sgc2hvdWxkIG5vdCBydW4gaW4gQ0kgbW9kZSBiZWNhdXNlIGl0cyBkZXNpZ25lZCB0b1xuICAgICAgLy8gdXBkYXRlIHBhY2thZ2UuanNvbiBhbmQgbG9jayBmaWxlcy5cbiAgICAgIGVudjogeyBDSTogJzAnIH0sXG4gICAgICBkZXNjcmlwdGlvbjogdGhpcy5wdWxsUmVxdWVzdFRpdGxlLFxuICAgIH0pO1xuXG4gICAgY29uc3QgZXhjbHVkZSA9IHRoaXMub3B0aW9ucy5leGNsdWRlID8/IFtdO1xuICAgIGlmICh0aGlzLmlnbm9yZXNQcm9qZW4pIHtcbiAgICAgIGV4Y2x1ZGUucHVzaCgncHJvamVuJyk7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBkZXAgb2YgWydkZXYnLCAnb3B0aW9uYWwnLCAncGVlcicsICdwcm9kJywgJ2J1bmRsZSddKSB7XG5cbiAgICAgIGNvbnN0IG5jdUNvbW1hbmQgPSBbJ25wbS1jaGVjay11cGRhdGVzJywgJy0tZGVwJywgZGVwLCAnLS11cGdyYWRlJywgJy0tdGFyZ2V0PW1pbm9yJ107XG4gICAgICBpZiAoZXhjbHVkZS5sZW5ndGggPiAwKSB7XG4gICAgICAgIG5jdUNvbW1hbmQucHVzaChgLS1yZWplY3Q9JyR7ZXhjbHVkZS5qb2luKCcsJyl9J2ApO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMub3B0aW9ucy5pbmNsdWRlKSB7XG4gICAgICAgIG5jdUNvbW1hbmQucHVzaChgLS1maWx0ZXI9JyR7dGhpcy5vcHRpb25zLmluY2x1ZGUuam9pbignLCcpfSdgKTtcbiAgICAgIH1cblxuICAgICAgdGFzay5leGVjKG5jdUNvbW1hbmQuam9pbignICcpKTtcblxuICAgIH1cblxuICAgIC8vIHJ1biBcInlhcm4vbnBtIGluc3RhbGxcIiB0byB1cGRhdGUgdGhlIGxvY2tmaWxlIGFuZCBpbnN0YWxsIGFueSBkZXBzIChzdWNoIGFzIHByb2plbilcbiAgICB0YXNrLmV4ZWModGhpcy5fcHJvamVjdC5wYWNrYWdlLmluc3RhbGxBbmRVcGRhdGVMb2NrZmlsZUNvbW1hbmQpO1xuXG4gICAgLy8gcnVuIHVwZ3JhZGUgY29tbWFuZCB0byB1cGdyYWRlIHRyYW5zaXRpdmUgZGVwcyBhcyB3ZWxsXG4gICAgdGFzay5leGVjKHRoaXMuX3Byb2plY3QucGFja2FnZS5yZW5kZXJVcGdyYWRlUGFja2FnZXNDb21tYW5kKGV4Y2x1ZGUsIHRoaXMub3B0aW9ucy5pbmNsdWRlKSk7XG5cbiAgICAvLyBydW4gXCJwcm9qZW5cIiB0byBnaXZlIHByb2plbiBhIGNoYW5jZSB0byB1cGRhdGUgZGVwZW5kZW5jaWVzIChpdCB3aWxsIGFsc28gcnVuIFwieWFybiBpbnN0YWxsXCIpXG4gICAgdGFzay5leGVjKHRoaXMuX3Byb2plY3QucHJvamVuQ29tbWFuZCk7XG5cbiAgICByZXR1cm4gdGFzaztcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlV29ya2Zsb3codGFzazogVGFzaywgZ2l0aHViOiBHaXRIdWIsIGJyYW5jaD86IHN0cmluZyk6IEdpdGh1YldvcmtmbG93IHtcbiAgICBjb25zdCBzY2hlZHVsZSA9IHRoaXMub3B0aW9ucy53b3JrZmxvd09wdGlvbnM/LnNjaGVkdWxlID8/IFVwZ3JhZGVEZXBlbmRlbmNpZXNTY2hlZHVsZS5EQUlMWTtcblxuICAgIGNvbnN0IHdvcmtmbG93TmFtZSA9IGAke3Rhc2submFtZX0ke2JyYW5jaCA/IGAtJHticmFuY2gucmVwbGFjZSgvXFwvL2csICctJyl9YCA6ICcnfWA7XG4gICAgY29uc3Qgd29ya2Zsb3cgPSBnaXRodWIuYWRkV29ya2Zsb3cod29ya2Zsb3dOYW1lKTtcbiAgICBjb25zdCB0cmlnZ2Vyczogd29ya2Zsb3dzLlRyaWdnZXJzID0ge1xuICAgICAgd29ya2Zsb3dEaXNwYXRjaDoge30sXG4gICAgICBzY2hlZHVsZTogc2NoZWR1bGUuY3JvbiA/IHNjaGVkdWxlLmNyb24ubWFwKGUgPT4gKHsgY3JvbjogZSB9KSkgOiB1bmRlZmluZWQsXG4gICAgfTtcbiAgICB3b3JrZmxvdy5vbih0cmlnZ2Vycyk7XG5cbiAgICBjb25zdCB1cGdyYWRlID0gdGhpcy5jcmVhdGVVcGdyYWRlKHRhc2ssIGJyYW5jaCk7XG4gICAgY29uc3QgcHIgPSB0aGlzLmNyZWF0ZVByKHdvcmtmbG93LCB1cGdyYWRlKTtcblxuICAgIGNvbnN0IGpvYnM6IFJlY29yZDxzdHJpbmcsIHdvcmtmbG93cy5Kb2I+ID0ge307XG4gICAgam9ic1t1cGdyYWRlLmpvYklkXSA9IHVwZ3JhZGUuam9iO1xuICAgIGpvYnNbcHIuam9iSWRdID0gcHIuam9iO1xuXG4gICAgd29ya2Zsb3cuYWRkSm9icyhqb2JzKTtcbiAgICByZXR1cm4gd29ya2Zsb3c7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZVVwZ3JhZGUodGFzazogVGFzaywgYnJhbmNoPzogc3RyaW5nKTogVXBncmFkZSB7XG5cbiAgICBjb25zdCBidWlsZCA9IHRoaXMub3B0aW9ucy53b3JrZmxvd09wdGlvbnM/LnJlYnVpbGQgPz8gdHJ1ZTtcbiAgICBjb25zdCBwYXRjaEZpbGUgPSAnLnVwZ3JhZGUudG1wLnBhdGNoJztcbiAgICBjb25zdCBidWlsZFN0ZXBJZCA9ICdidWlsZCc7XG4gICAgY29uc3QgY29uY2x1c2lvbiA9ICdjb25jbHVzaW9uJztcblxuICAgIC8vIHRoYXRzIGFsbCB3ZSBzaG91bGQgbmVlZCBhdCB0aGlzIHN0YWdlIHNpbmNlIGFsbCB3ZSBkbyBpcyBjbG9uZS5cbiAgICAvLyBub3RlIHRoYXQgdGhpcyBhbHNvIHByZXZlbnRzIG5ldyBjb2RlIHRoYXQgaXMgaW50cm9kdWNlZCBpbiB0aGUgdXBncmFkZVxuICAgIC8vIHRvIGhhdmUgd3JpdGUgYWNjZXNzIHRvIGFueXRoaW5nLCBpbiBjYXNlIGl0cyBzb21laG93IGV4ZWN1dGVkLiAoZm9yIGV4YW1wbGUgZHVyaW5nIGJ1aWxkKVxuICAgIGNvbnN0IHBlcm1pc3Npb25zOiB3b3JrZmxvd3MuSm9iUGVybWlzc2lvbnMgPSB7XG4gICAgICBjb250ZW50czogd29ya2Zsb3dzLkpvYlBlcm1pc3Npb24uUkVBRCxcbiAgICB9O1xuXG4gICAgY29uc3Qgb3V0cHV0czogUmVjb3JkPHN0cmluZywgd29ya2Zsb3dzLkpvYlN0ZXBPdXRwdXQ+ID0ge307XG4gICAgY29uc3Qgc3RlcHM6IHdvcmtmbG93cy5Kb2JTdGVwW10gPSBbXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdDaGVja291dCcsXG4gICAgICAgIHVzZXM6ICdhY3Rpb25zL2NoZWNrb3V0QHYyJyxcbiAgICAgICAgd2l0aDogYnJhbmNoID8geyByZWY6IGJyYW5jaCB9IDogdW5kZWZpbmVkLFxuICAgICAgfSxcbiAgICAgIHNldEdpdElkZW50aXR5U3RlcCh0aGlzLmdpdElkZW50aXR5KSxcbiAgICAgIC4uLnRoaXMuX3Byb2plY3QuaW5zdGFsbFdvcmtmbG93U3RlcHMsXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdVcGdyYWRlIGRlcGVuZGVuY2llcycsXG4gICAgICAgIHJ1bjogdGhpcy5fcHJvamVjdC5ydW5UYXNrQ29tbWFuZCh0YXNrKSxcbiAgICAgIH0sXG4gICAgXTtcblxuICAgIGlmIChidWlsZCkge1xuICAgICAgc3RlcHMucHVzaCh7XG4gICAgICAgIG5hbWU6ICdCdWlsZCcsXG4gICAgICAgIGlkOiBidWlsZFN0ZXBJZCxcbiAgICAgICAgcnVuOiBgJHt0aGlzLl9wcm9qZWN0LnJ1blRhc2tDb21tYW5kKHRoaXMuX3Byb2plY3QuYnVpbGRUYXNrKX0gJiYgJHtzZXRPdXRwdXQoY29uY2x1c2lvbiwgJ3N1Y2Nlc3MnKX0gfHwgJHtzZXRPdXRwdXQoY29uY2x1c2lvbiwgJ2ZhaWx1cmUnKX1gLFxuICAgICAgfSk7XG5cbiAgICAgIG91dHB1dHNbY29uY2x1c2lvbl0gPSB7XG4gICAgICAgIHN0ZXBJZDogYnVpbGRTdGVwSWQsXG4gICAgICAgIG91dHB1dE5hbWU6IGNvbmNsdXNpb24sXG4gICAgICB9O1xuICAgIH1cblxuICAgIHN0ZXBzLnB1c2goXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdDcmVhdGUgUGF0Y2gnLFxuICAgICAgICBydW46IFtcbiAgICAgICAgICAnZ2l0IGFkZCAuJyxcbiAgICAgICAgICBgZ2l0IGRpZmYgLS1wYXRjaCAtLXN0YWdlZCA+ICR7cGF0Y2hGaWxlfWAsXG4gICAgICAgIF0uam9pbignXFxuJyksXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAnVXBsb2FkIHBhdGNoJyxcbiAgICAgICAgdXNlczogJ2FjdGlvbnMvdXBsb2FkLWFydGlmYWN0QHYyJyxcbiAgICAgICAgd2l0aDogeyBuYW1lOiBwYXRjaEZpbGUsIHBhdGg6IHBhdGNoRmlsZSB9LFxuICAgICAgfSxcbiAgICApO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGpvYjoge1xuICAgICAgICBuYW1lOiAnVXBncmFkZScsXG4gICAgICAgIGNvbnRhaW5lcjogdGhpcy5vcHRpb25zLndvcmtmbG93T3B0aW9ucz8uY29udGFpbmVyLFxuICAgICAgICBwZXJtaXNzaW9uczogcGVybWlzc2lvbnMsXG4gICAgICAgIHJ1bnNPbjogVUJVTlRVX0xBVEVTVCxcbiAgICAgICAgb3V0cHV0czogb3V0cHV0cyxcbiAgICAgICAgc3RlcHM6IHN0ZXBzLFxuICAgICAgfSxcbiAgICAgIGpvYklkOiAndXBncmFkZScsXG4gICAgICBwYXRjaEZpbGU6IHBhdGNoRmlsZSxcbiAgICAgIGJ1aWxkOiBidWlsZCxcbiAgICAgIGJ1aWxkQ29uY2x1c2lvbk91dHB1dDogY29uY2x1c2lvbixcbiAgICAgIHJlZjogYnJhbmNoLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZVByKHdvcmtmbG93OiBHaXRodWJXb3JrZmxvdywgdXBncmFkZTogVXBncmFkZSk6IFBSIHtcblxuICAgIGNvbnN0IGN1c3RvbVRva2VuID0gdGhpcy5vcHRpb25zLndvcmtmbG93T3B0aW9ucz8uc2VjcmV0ID8gY29udGV4dChgc2VjcmV0cy4ke3RoaXMub3B0aW9ucy53b3JrZmxvd09wdGlvbnMuc2VjcmV0fWApIDogdW5kZWZpbmVkO1xuICAgIGNvbnN0IHdvcmtmbG93TmFtZSA9IHdvcmtmbG93Lm5hbWU7XG4gICAgY29uc3QgYnJhbmNoTmFtZSA9IGBnaXRodWItYWN0aW9ucy8ke3dvcmtmbG93TmFtZX1gO1xuICAgIGNvbnN0IHByU3RlcElkID0gJ2NyZWF0ZS1wcic7XG5cbiAgICBjb25zdCB0aXRsZSA9IGBjaG9yZShkZXBzKTogJHt0aGlzLnB1bGxSZXF1ZXN0VGl0bGV9YDtcbiAgICBjb25zdCBkZXNjcmlwdGlvbiA9IFtcbiAgICAgICdVcGdyYWRlcyBwcm9qZWN0IGRlcGVuZGVuY2llcy4gU2VlIGRldGFpbHMgaW4gW3dvcmtmbG93IHJ1bl0uJyxcbiAgICAgICcnLFxuICAgICAgYFtXb3JrZmxvdyBSdW5dOiAke1JVTl9VUkx9YCxcbiAgICAgICcnLFxuICAgICAgJy0tLS0tLScsXG4gICAgICAnJyxcbiAgICAgIGAqQXV0b21hdGljYWxseSBjcmVhdGVkIGJ5IHByb2plbiB2aWEgdGhlIFwiJHt3b3JrZmxvdy5uYW1lfVwiIHdvcmtmbG93KmAsXG4gICAgXS5qb2luKCdcXG4nKTtcblxuICAgIGNvbnN0IGNvbWl0dGVyID0gYCR7dGhpcy5naXRJZGVudGl0eS5uYW1lfSA8JHt0aGlzLmdpdElkZW50aXR5LmVtYWlsfT5gO1xuXG4gICAgY29uc3Qgc3RlcHM6IHdvcmtmbG93cy5Kb2JTdGVwW10gPSBbXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdDaGVja291dCcsXG4gICAgICAgIHVzZXM6ICdhY3Rpb25zL2NoZWNrb3V0QHYyJyxcbiAgICAgICAgd2l0aDogdXBncmFkZS5yZWYgPyB7IHJlZjogdXBncmFkZS5yZWYgfSA6IHVuZGVmaW5lZCxcbiAgICAgIH0sXG4gICAgICBzZXRHaXRJZGVudGl0eVN0ZXAodGhpcy5naXRJZGVudGl0eSksXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdEb3dubG9hZCBwYXRjaCcsXG4gICAgICAgIHVzZXM6ICdhY3Rpb25zL2Rvd25sb2FkLWFydGlmYWN0QHYyJyxcbiAgICAgICAgd2l0aDogeyBuYW1lOiB1cGdyYWRlLnBhdGNoRmlsZSwgcGF0aDogUlVOTkVSX1RFTVAgfSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdBcHBseSBwYXRjaCcsXG4gICAgICAgIHJ1bjogYFsgLXMgJHtSVU5ORVJfVEVNUH0vJHt1cGdyYWRlLnBhdGNoRmlsZX0gXSAmJiBnaXQgYXBwbHkgJHtSVU5ORVJfVEVNUH0vJHt1cGdyYWRlLnBhdGNoRmlsZX0gfHwgZWNobyBcIkVtcHR5IHBhdGNoLiBTa2lwcGluZy5cImAsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAnQ3JlYXRlIFB1bGwgUmVxdWVzdCcsXG4gICAgICAgIGlkOiBwclN0ZXBJZCxcbiAgICAgICAgdXNlczogJ3BldGVyLWV2YW5zL2NyZWF0ZS1wdWxsLXJlcXVlc3RAdjMnLFxuICAgICAgICB3aXRoOiB7XG4gICAgICAgICAgLy8gdGhlIHByIGNhbiBtb2RpZnkgd29ya2Zsb3cgZmlsZXMsIHNvIHdlIG5lZWQgdG8gdXNlIHRoZSBjdXN0b21cbiAgICAgICAgICAvLyBzZWNyZXQgaWYgb25lIGlzIGNvbmZpZ3VyZWQuXG4gICAgICAgICAgJ3Rva2VuJzogY3VzdG9tVG9rZW4gPz8gREVGQVVMVF9UT0tFTixcbiAgICAgICAgICAnY29tbWl0LW1lc3NhZ2UnOiBgJHt0aXRsZX1cXG5cXG4ke2Rlc2NyaXB0aW9ufWAsXG4gICAgICAgICAgJ2JyYW5jaCc6IGJyYW5jaE5hbWUsXG4gICAgICAgICAgJ3RpdGxlJzogdGl0bGUsXG4gICAgICAgICAgJ2xhYmVscyc6IHRoaXMub3B0aW9ucy53b3JrZmxvd09wdGlvbnM/LmxhYmVscz8uam9pbignLCcpIHx8IHVuZGVmaW5lZCxcbiAgICAgICAgICAnYm9keSc6IGRlc2NyaXB0aW9uLFxuICAgICAgICAgICdhdXRob3InOiBjb21pdHRlcixcbiAgICAgICAgICAnY29tbWl0dGVyJzogY29taXR0ZXIsXG4gICAgICAgICAgJ3NpZ25vZmYnOiB0aGlzLm9wdGlvbnMuc2lnbm9mZiA/PyB0cnVlLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICBdO1xuXG4gICAgbGV0IHdyaXRlQ2hlY2tzUGVybWlzc2lvbiA9IGZhbHNlO1xuICAgIGlmICh0aGlzLl9wcm9qZWN0LmJ1aWxkV29ya2Zsb3dKb2JJZCAmJiB1cGdyYWRlLmJ1aWxkKSB7XG4gICAgICBjb25zdCBib2R5ID0ge1xuICAgICAgICBuYW1lOiB0aGlzLl9wcm9qZWN0LmJ1aWxkV29ya2Zsb3dKb2JJZCxcbiAgICAgICAgaGVhZF9zaGE6IGJyYW5jaE5hbWUsXG4gICAgICAgIHN0YXR1czogJ2NvbXBsZXRlZCcsXG4gICAgICAgIGNvbmNsdXNpb246IGNvbnRleHQoYG5lZWRzLiR7dXBncmFkZS5qb2JJZH0ub3V0cHV0cy4ke3VwZ3JhZGUuYnVpbGRDb25jbHVzaW9uT3V0cHV0fWApLFxuICAgICAgICBvdXRwdXQ6IHtcbiAgICAgICAgICB0aXRsZTogYENyZWF0ZWQgdmlhIHRoZSAke3dvcmtmbG93TmFtZX0gd29ya2Zsb3cuYCxcbiAgICAgICAgICBzdW1tYXJ5OiBgQWN0aW9uIHJ1biBVUkw6ICR7UlVOX1VSTH1gLFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICAgIHN0ZXBzLnB1c2goe1xuICAgICAgICBuYW1lOiAnVXBkYXRlIHN0YXR1cyBjaGVjaycsXG4gICAgICAgIGlmOiBgc3RlcHMuJHtwclN0ZXBJZH0ub3V0cHV0cy5wdWxsLXJlcXVlc3QtdXJsICE9IFxcJ1xcJ2AsXG4gICAgICAgIHJ1bjogJ2N1cmwgLWkgLS1mYWlsICdcbiAgICAgICAgICAgICAgICArICctWCBQT1NUICdcbiAgICAgICAgICAgICAgICArICctSCBcIkFjY2VwdDogYXBwbGljYXRpb24vdm5kLmdpdGh1Yi52Mytqc29uXCIgJ1xuICAgICAgICAgICAgICAgICsgYC1IIFwiQXV0aG9yaXphdGlvbjogdG9rZW4gXFwke0dJVEhVQl9UT0tFTn1cIiBodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zLyR7UkVQT30vY2hlY2stcnVucyBgXG4gICAgICAgICAgICAgICAgKyBgLWQgJyR7SlNPTi5zdHJpbmdpZnkoYm9keSl9J2AsXG4gICAgICAgIGVudjogeyBHSVRIVUJfVE9LRU46IERFRkFVTFRfVE9LRU4gfSxcbiAgICAgIH0pO1xuXG4gICAgICAvLyBuZWNlc3NhcnkgdG8gdXBkYXRlIHN0YXR1cyBjaGVja3NcbiAgICAgIHdyaXRlQ2hlY2tzUGVybWlzc2lvbiA9IHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGpvYjoge1xuICAgICAgICBuYW1lOiAnQ3JlYXRlIFB1bGwgUmVxdWVzdCcsXG4gICAgICAgIG5lZWRzOiBbdXBncmFkZS5qb2JJZF0sXG4gICAgICAgIHBlcm1pc3Npb25zOiB7XG4gICAgICAgICAgY29udGVudHM6IHdvcmtmbG93cy5Kb2JQZXJtaXNzaW9uLldSSVRFLFxuICAgICAgICAgIHB1bGxSZXF1ZXN0czogd29ya2Zsb3dzLkpvYlBlcm1pc3Npb24uV1JJVEUsXG4gICAgICAgICAgY2hlY2tzOiB3cml0ZUNoZWNrc1Blcm1pc3Npb24gPyB3b3JrZmxvd3MuSm9iUGVybWlzc2lvbi5XUklURSA6IHVuZGVmaW5lZCxcbiAgICAgICAgfSxcbiAgICAgICAgcnVuc09uOiBVQlVOVFVfTEFURVNULFxuICAgICAgICBzdGVwczogc3RlcHMsXG4gICAgICB9LFxuICAgICAgam9iSWQ6ICdwcicsXG4gICAgfTtcbiAgfVxufVxuXG5pbnRlcmZhY2UgVXBncmFkZSB7XG4gIHJlYWRvbmx5IHJlZj86IHN0cmluZztcbiAgcmVhZG9ubHkgam9iOiB3b3JrZmxvd3MuSm9iO1xuICByZWFkb25seSBqb2JJZDogc3RyaW5nO1xuICByZWFkb25seSBwYXRjaEZpbGU6IHN0cmluZztcbiAgcmVhZG9ubHkgYnVpbGQ6IGJvb2xlYW47XG4gIHJlYWRvbmx5IGJ1aWxkQ29uY2x1c2lvbk91dHB1dDogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgUFIge1xuICByZWFkb25seSBqb2I6IHdvcmtmbG93cy5Kb2I7XG4gIHJlYWRvbmx5IGpvYklkOiBzdHJpbmc7XG59XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbmV4cG9ydCBpbnRlcmZhY2UgVXBncmFkZURlcGVuZGVuY2llc1dvcmtmbG93T3B0aW9ucyB7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIHJlYWRvbmx5IHNjaGVkdWxlPzogVXBncmFkZURlcGVuZGVuY2llc1NjaGVkdWxlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcmVhZG9ubHkgc2VjcmV0Pzogc3RyaW5nO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcmVhZG9ubHkgbGFiZWxzPzogc3RyaW5nW107XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICByZWFkb25seSByZWJ1aWxkPzogYm9vbGVhbjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIHJlYWRvbmx5IGNvbnRhaW5lcj86IHdvcmtmbG93cy5Db250YWluZXJPcHRpb25zO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcmVhZG9ubHkgYnJhbmNoZXM/OiBzdHJpbmdbXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcmVhZG9ubHkgZ2l0SWRlbnRpdHk/OiBHaXRJZGVudGl0eTtcbn1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbmV4cG9ydCBjbGFzcyBVcGdyYWRlRGVwZW5kZW5jaWVzU2NoZWR1bGUge1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBORVZFUiA9IG5ldyBVcGdyYWRlRGVwZW5kZW5jaWVzU2NoZWR1bGUoW10pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IERBSUxZID0gbmV3IFVwZ3JhZGVEZXBlbmRlbmNpZXNTY2hlZHVsZShbJzAgMCAqICogKiddKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBXRUVLREFZID0gbmV3IFVwZ3JhZGVEZXBlbmRlbmNpZXNTY2hlZHVsZShbJzAgMCAqICogMS01J10pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBXRUVLTFkgPSBuZXcgVXBncmFkZURlcGVuZGVuY2llc1NjaGVkdWxlKFsnMCAwICogKiAxJ10pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IE1PTlRITFkgPSBuZXcgVXBncmFkZURlcGVuZGVuY2llc1NjaGVkdWxlKFsnMCAwIDEgKiAqJ10pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICBwdWJsaWMgc3RhdGljIGV4cHJlc3Npb25zKGNyb246IHN0cmluZ1tdKSB7XG4gICAgcmV0dXJuIG5ldyBVcGdyYWRlRGVwZW5kZW5jaWVzU2NoZWR1bGUoY3Jvbik7XG4gIH1cblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKHB1YmxpYyByZWFkb25seSBjcm9uOiBzdHJpbmdbXSkge31cbn1cbiJdfQ==
|