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
package/lib/deps/dependencies.js
DELETED
|
@@ -1,192 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var _a;
|
|
3
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
-
exports.Dependencies = void 0;
|
|
5
|
-
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
|
|
6
|
-
const path = require("path");
|
|
7
|
-
const common_1 = require("../common");
|
|
8
|
-
const component_1 = require("../component");
|
|
9
|
-
const json_1 = require("../json");
|
|
10
|
-
/**
|
|
11
|
-
* (experimental) The `Dependencies` component is responsible to track the list of dependencies a project has, and then used by project types as the model for rendering project-specific dependency manifests such as the dependencies section `package.json` files.
|
|
12
|
-
*
|
|
13
|
-
* To add a dependency you can use a project-type specific API such as
|
|
14
|
-
* `nodeProject.addDeps()` or use the generic API of `project.deps`:
|
|
15
|
-
*
|
|
16
|
-
* @experimental
|
|
17
|
-
*/
|
|
18
|
-
class Dependencies extends component_1.Component {
|
|
19
|
-
/**
|
|
20
|
-
* (experimental) Adds a dependencies component to the project.
|
|
21
|
-
*
|
|
22
|
-
* @param project The parent project.
|
|
23
|
-
* @experimental
|
|
24
|
-
*/
|
|
25
|
-
constructor(project) {
|
|
26
|
-
super(project);
|
|
27
|
-
this._deps = new Array();
|
|
28
|
-
// this is not really required at the moment, but actually quite useful as a
|
|
29
|
-
// checked-in source of truth for dependencies and will potentially be
|
|
30
|
-
// valuable in the future for CLI tools.
|
|
31
|
-
new json_1.JsonFile(project, Dependencies.MANIFEST_FILE, {
|
|
32
|
-
omitEmpty: true,
|
|
33
|
-
obj: () => this.toJson(),
|
|
34
|
-
});
|
|
35
|
-
}
|
|
36
|
-
/**
|
|
37
|
-
* (experimental) Returns the coordinates of a dependency spec.
|
|
38
|
-
*
|
|
39
|
-
* Given `foo@^3.4.0` returns `{ name: "foo", version: "^3.4.0" }`.
|
|
40
|
-
* Given `bar@npm:@bar/legacy` returns `{ name: "bar", version: "npm:@bar/legacy" }`.
|
|
41
|
-
*
|
|
42
|
-
* @experimental
|
|
43
|
-
*/
|
|
44
|
-
static parseDependency(spec) {
|
|
45
|
-
const scope = spec.startsWith('@');
|
|
46
|
-
if (scope) {
|
|
47
|
-
spec = spec.substr(1);
|
|
48
|
-
}
|
|
49
|
-
const [module, ...version] = spec.split('@');
|
|
50
|
-
const name = scope ? `@${module}` : module;
|
|
51
|
-
if (version.length == 0) {
|
|
52
|
-
return { name };
|
|
53
|
-
}
|
|
54
|
-
else {
|
|
55
|
-
return { name, version: version === null || version === void 0 ? void 0 : version.join('@') };
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
/**
|
|
59
|
-
* (experimental) A copy of all dependencies recorded for this project.
|
|
60
|
-
*
|
|
61
|
-
* The list is sorted by type->name->version
|
|
62
|
-
*
|
|
63
|
-
* @experimental
|
|
64
|
-
*/
|
|
65
|
-
get all() {
|
|
66
|
-
return [...this._deps].sort(compareDeps).map(normalizeDep);
|
|
67
|
-
}
|
|
68
|
-
/**
|
|
69
|
-
* (experimental) Returns a dependency by name.
|
|
70
|
-
*
|
|
71
|
-
* Fails if there is no dependency defined by that name or if `type` is not
|
|
72
|
-
* provided and there is more then one dependency type for this dependency.
|
|
73
|
-
*
|
|
74
|
-
* @param name The name of the dependency.
|
|
75
|
-
* @param type The dependency type.
|
|
76
|
-
* @returns a copy (cannot be modified)
|
|
77
|
-
* @experimental
|
|
78
|
-
*/
|
|
79
|
-
getDependency(name, type) {
|
|
80
|
-
const idx = this.tryGetDependencyIndex(name, type);
|
|
81
|
-
if (idx === -1) {
|
|
82
|
-
const msg = type
|
|
83
|
-
? `there is no ${type} dependency defined on "${name}"`
|
|
84
|
-
: `there is no dependency defined on "${name}"`;
|
|
85
|
-
throw new Error(msg);
|
|
86
|
-
}
|
|
87
|
-
return {
|
|
88
|
-
...normalizeDep(this._deps[idx]),
|
|
89
|
-
};
|
|
90
|
-
}
|
|
91
|
-
/**
|
|
92
|
-
* (experimental) Adds a dependency to this project.
|
|
93
|
-
*
|
|
94
|
-
* @param spec The dependency spec in the format `MODULE[@VERSION]` where `MODULE` is the package-manager-specific module name and `VERSION` is an optional semantic version requirement (e.g. `^3.4.0`).
|
|
95
|
-
* @param type The type of the dependency.
|
|
96
|
-
* @experimental
|
|
97
|
-
*/
|
|
98
|
-
addDependency(spec, type, metadata = {}) {
|
|
99
|
-
this.project.logger.debug(`${type}-dep ${spec}`);
|
|
100
|
-
const dep = {
|
|
101
|
-
...Dependencies.parseDependency(spec),
|
|
102
|
-
type,
|
|
103
|
-
metadata,
|
|
104
|
-
};
|
|
105
|
-
const existingDepIndex = this.tryGetDependencyIndex(dep.name, type);
|
|
106
|
-
if (existingDepIndex !== -1) {
|
|
107
|
-
const existingDep = this._deps[existingDepIndex];
|
|
108
|
-
if (dep.version === existingDep.version || existingDep.version === undefined) {
|
|
109
|
-
this.project.logger.debug(`updating existing ${dep.type}-dep ${dep.name} with more specific version/metadata`);
|
|
110
|
-
this._deps[existingDepIndex] = dep;
|
|
111
|
-
}
|
|
112
|
-
else {
|
|
113
|
-
throw new Error(`"${dep.name}" is already specified with different version: ${existingDep.version}`);
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
else {
|
|
117
|
-
this._deps.push(dep);
|
|
118
|
-
}
|
|
119
|
-
return dep;
|
|
120
|
-
}
|
|
121
|
-
/**
|
|
122
|
-
* (experimental) Removes a dependency.
|
|
123
|
-
*
|
|
124
|
-
* @param name The name of the module to remove (without the version).
|
|
125
|
-
* @param type The dependency type.
|
|
126
|
-
* @experimental
|
|
127
|
-
*/
|
|
128
|
-
removeDependency(name, type) {
|
|
129
|
-
const removeIndex = this.tryGetDependencyIndex(name, type);
|
|
130
|
-
if (removeIndex === -1) {
|
|
131
|
-
return;
|
|
132
|
-
}
|
|
133
|
-
this._deps.splice(removeIndex, 1);
|
|
134
|
-
}
|
|
135
|
-
tryGetDependencyIndex(name, type) {
|
|
136
|
-
const deps = this._deps.filter(d => d.name === name);
|
|
137
|
-
if (deps.length === 0) {
|
|
138
|
-
return -1; // not found
|
|
139
|
-
}
|
|
140
|
-
if (!type) {
|
|
141
|
-
if (deps.length > 1) {
|
|
142
|
-
throw new Error(`"${name}" is defined for multiple dependency types: ${deps.map(d => d.type).join(',')}. Please specify dependency type`);
|
|
143
|
-
}
|
|
144
|
-
type = deps[0].type;
|
|
145
|
-
}
|
|
146
|
-
return this._deps.findIndex(dep => dep.name === name && dep.type === type);
|
|
147
|
-
}
|
|
148
|
-
toJson() {
|
|
149
|
-
if (this._deps.length === 0) {
|
|
150
|
-
return undefined;
|
|
151
|
-
}
|
|
152
|
-
return {
|
|
153
|
-
dependencies: this._deps.sort(compareDeps).map(normalizeDep),
|
|
154
|
-
};
|
|
155
|
-
}
|
|
156
|
-
}
|
|
157
|
-
exports.Dependencies = Dependencies;
|
|
158
|
-
_a = JSII_RTTI_SYMBOL_1;
|
|
159
|
-
Dependencies[_a] = { fqn: "projen.deps.Dependencies", version: "0.36.5" };
|
|
160
|
-
/**
|
|
161
|
-
* (experimental) The project-relative path of the deps manifest file.
|
|
162
|
-
*
|
|
163
|
-
* @experimental
|
|
164
|
-
*/
|
|
165
|
-
Dependencies.MANIFEST_FILE = path.posix.join(common_1.PROJEN_DIR, 'deps.json');
|
|
166
|
-
function normalizeDep(d) {
|
|
167
|
-
const obj = {};
|
|
168
|
-
for (const [k, v] of Object.entries(d)) {
|
|
169
|
-
if (v == undefined) {
|
|
170
|
-
continue;
|
|
171
|
-
}
|
|
172
|
-
if (typeof (v) === 'object' && Object.keys(v).length === 0) {
|
|
173
|
-
continue;
|
|
174
|
-
}
|
|
175
|
-
if (Array.isArray(v) && v.length === 0) {
|
|
176
|
-
continue;
|
|
177
|
-
}
|
|
178
|
-
obj[k] = v;
|
|
179
|
-
}
|
|
180
|
-
return obj;
|
|
181
|
-
}
|
|
182
|
-
function compareDeps(d1, d2) {
|
|
183
|
-
return specOf(d1).localeCompare(specOf(d2));
|
|
184
|
-
function specOf(dep) {
|
|
185
|
-
let spec = dep.type + ':' + dep.name;
|
|
186
|
-
if (dep.version) {
|
|
187
|
-
spec += '@' + dep.version;
|
|
188
|
-
}
|
|
189
|
-
return spec;
|
|
190
|
-
}
|
|
191
|
-
}
|
|
192
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVwZW5kZW5jaWVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2RlcHMvZGVwZW5kZW5jaWVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsNkJBQTZCO0FBQzdCLHNDQUF1QztBQUN2Qyw0Q0FBeUM7QUFDekMsa0NBQW1DOzs7Ozs7Ozs7QUFLbkMsTUFBYSxZQUFhLFNBQVEscUJBQVM7Ozs7Ozs7SUF1QnpDLFlBQVksT0FBZ0I7UUFDMUIsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBSkEsVUFBSyxHQUFHLElBQUksS0FBSyxFQUFjLENBQUM7UUFNL0MsNEVBQTRFO1FBQzVFLHNFQUFzRTtRQUN0RSx3Q0FBd0M7UUFDeEMsSUFBSSxlQUFRLENBQUMsT0FBTyxFQUFFLFlBQVksQ0FBQyxhQUFhLEVBQUU7WUFDaEQsU0FBUyxFQUFFLElBQUk7WUFDZixHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRTtTQUN6QixDQUFDLENBQUM7SUFDTCxDQUFDOzs7Ozs7Ozs7SUE1Qk0sTUFBTSxDQUFDLGVBQWUsQ0FBQyxJQUFZO1FBQ3hDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDbkMsSUFBSSxLQUFLLEVBQUU7WUFDVCxJQUFJLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUN2QjtRQUVELE1BQU0sQ0FBQyxNQUFNLEVBQUUsR0FBRyxPQUFPLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzdDLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO1FBQzNDLElBQUksT0FBTyxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUU7WUFDdkIsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDO1NBQ2pC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TSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFO1FBQ3RDLElBQUksQ0FBQyxJQUFJLFNBQVMsRUFBRTtZQUFDLFNBQVM7U0FBQztRQUMvQixJQUFJLE9BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxRQUFRLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1lBQUMsU0FBUztTQUFDO1FBQ3RFLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtZQUFDLFNBQVM7U0FBQztRQUNuRCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0tBQ1o7SUFFRCxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFFRCxTQUFTLFdBQVcsQ0FBQyxFQUFjLEVBQUUsRUFBYztJQUNqRCxPQUFPLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFFNUMsU0FBUyxNQUFNLENBQUMsR0FBZTtRQUM3QixJQUFJLElBQUksR0FBRyxHQUFHLENBQUMsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDO1FBQ3JDLElBQUksR0FBRyxDQUFDLE9BQU8sRUFBRTtZQUNmLElBQUksSUFBSSxHQUFHLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQztTQUMzQjtRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgUFJPSkVOX0RJUiB9IGZyb20gJy4uL2NvbW1vbic7XG5pbXBvcnQgeyBDb21wb25lbnQgfSBmcm9tICcuLi9jb21wb25lbnQnO1xuaW1wb3J0IHsgSnNvbkZpbGUgfSBmcm9tICcuLi9qc29uJztcbmltcG9ydCB7IFByb2plY3QgfSBmcm9tICcuLi9wcm9qZWN0JztcbmltcG9ydCB7IERlcGVuZGVuY3ksIERlcGVuZGVuY3lDb29yZGluYXRlcywgRGVwZW5kZW5jeVR5cGUsIERlcHNNYW5pZmVzdCB9IGZyb20gJy4vbW9kZWwnO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5leHBvcnQgY2xhc3MgRGVwZW5kZW5jaWVzIGV4dGVuZHMgQ29tcG9uZW50IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IE1BTklGRVNUX0ZJTEUgPSBwYXRoLnBvc2l4LmpvaW4oUFJPSkVOX0RJUiwgJ2RlcHMuanNvbicpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcHVibGljIHN0YXRpYyBwYXJzZURlcGVuZGVuY3koc3BlYzogc3RyaW5nKTogRGVwZW5kZW5jeUNvb3JkaW5hdGVzIHtcbiAgICBjb25zdCBzY29wZSA9IHNwZWMuc3RhcnRzV2l0aCgnQCcpO1xuICAgIGlmIChzY29wZSkge1xuICAgICAgc3BlYyA9IHNwZWMuc3Vic3RyKDEpO1xuICAgIH1cblxuICAgIGNvbnN0IFttb2R1bGUsIC4uLnZlcnNpb25dID0gc3BlYy5zcGxpdCgnQCcpO1xuICAgIGNvbnN0IG5hbWUgPSBzY29wZSA/IGBAJHttb2R1bGV9YCA6IG1vZHVsZTtcbiAgICBpZiAodmVyc2lvbi5sZW5ndGggPT0gMCkge1xuICAgICAgcmV0dXJuIHsgbmFtZSB9O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4geyBuYW1lLCB2ZXJzaW9uOiB2ZXJzaW9uPy5qb2luKCdAJykgfTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHJlYWRvbmx5IF9kZXBzID0gbmV3IEFycmF5PERlcGVuZGVuY3k+KCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIGNvbnN0cnVjdG9yKHByb2plY3Q6IFByb2plY3QpIHtcbiAgICBzdXBlcihwcm9qZWN0KTtcblxuICAgIC8vIHRoaXMgaXMgbm90IHJlYWxseSByZXF1aXJlZCBhdCB0aGUgbW9tZW50LCBidXQgYWN0dWFsbHkgcXVpdGUgdXNlZnVsIGFzIGFcbiAgICAvLyBjaGVja2VkLWluIHNvdXJjZSBvZiB0cnV0aCBmb3IgZGVwZW5kZW5jaWVzIGFuZCB3aWxsIHBvdGVudGlhbGx5IGJlXG4gICAgLy8gdmFsdWFibGUgaW4gdGhlIGZ1dHVyZSBmb3IgQ0xJIHRvb2xzLlxuICAgIG5ldyBKc29uRmlsZShwcm9qZWN0LCBEZXBlbmRlbmNpZXMuTUFOSUZFU1RfRklMRSwge1xuICAgICAgb21pdEVtcHR5OiB0cnVlLFxuICAgICAgb2JqOiAoKSA9PiB0aGlzLnRvSnNvbigpLFxuICAgIH0pO1xuICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIHB1YmxpYyBnZXQgYWxsKCk6IERlcGVuZGVuY3lbXSB7XG4gICAgcmV0dXJuIFsuLi50aGlzLl9kZXBzXS5zb3J0KGNvbXBhcmVEZXBzKS5tYXAobm9ybWFsaXplRGVwKTtcbiAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIHB1YmxpYyBnZXREZXBlbmRlbmN5KG5hbWU6IHN0cmluZywgdHlwZT86IERlcGVuZGVuY3lUeXBlKTogRGVwZW5kZW5jeSB7XG4gICAgY29uc3QgaWR4ID0gdGhpcy50cnlHZXREZXBlbmRlbmN5SW5kZXgobmFtZSwgdHlwZSk7XG4gICAgaWYgKGlkeCA9PT0gLTEpIHtcbiAgICAgIGNvbnN0IG1zZyA9IHR5cGVcbiAgICAgICAgPyBgdGhlcmUgaXMgbm8gJHt0eXBlfSBkZXBlbmRlbmN5IGRlZmluZWQgb24gXCIke25hbWV9XCJgXG4gICAgICAgIDogYHRoZXJlIGlzIG5vIGRlcGVuZGVuY3kgZGVmaW5lZCBvbiBcIiR7bmFtZX1cImA7XG5cbiAgICAgIHRocm93IG5ldyBFcnJvcihtc2cpO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAuLi5ub3JtYWxpemVEZXAodGhpcy5fZGVwc1tpZHhdKSxcbiAgICB9O1xuICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcHVibGljIGFkZERlcGVuZGVuY3koc3BlYzogc3RyaW5nLCB0eXBlOiBEZXBlbmRlbmN5VHlwZSwgbWV0YWRhdGE6IHsgW2tleTogc3RyaW5nXTogYW55IH0gPSB7IH0pOiBEZXBlbmRlbmN5IHtcbiAgICB0aGlzLnByb2plY3QubG9nZ2VyLmRlYnVnKGAke3R5cGV9LWRlcCAke3NwZWN9YCk7XG5cbiAgICBjb25zdCBkZXA6IERlcGVuZGVuY3kgPSB7XG4gICAgICAuLi5EZXBlbmRlbmNpZXMucGFyc2VEZXBlbmRlbmN5KHNwZWMpLFxuICAgICAgdHlwZSxcbiAgICAgIG1ldGFkYXRhLFxuICAgIH07XG5cbiAgICBjb25zdCBleGlzdGluZ0RlcEluZGV4ID0gdGhpcy50cnlHZXREZXBlbmRlbmN5SW5kZXgoZGVwLm5hbWUsIHR5cGUpO1xuXG4gICAgaWYgKGV4aXN0aW5nRGVwSW5kZXggIT09IC0xKSB7XG4gICAgICBjb25zdCBleGlzdGluZ0RlcCA9IHRoaXMuX2RlcHNbZXhpc3RpbmdEZXBJbmRleF07XG4gICAgICBpZiAoZGVwLnZlcnNpb24gPT09IGV4aXN0aW5nRGVwLnZlcnNpb24gfHwgZXhpc3RpbmdEZXAudmVyc2lvbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMucHJvamVjdC5sb2dnZXIuZGVidWcoYHVwZGF0aW5nIGV4aXN0aW5nICR7ZGVwLnR5cGV9LWRlcCAke2RlcC5uYW1lfSB3aXRoIG1vcmUgc3BlY2lmaWMgdmVyc2lvbi9tZXRhZGF0YWApO1xuICAgICAgICB0aGlzLl9kZXBzW2V4aXN0aW5nRGVwSW5kZXhdID0gZGVwO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBcIiR7ZGVwLm5hbWV9XCIgaXMgYWxyZWFkeSBzcGVjaWZpZWQgd2l0aCBkaWZmZXJlbnQgdmVyc2lvbjogJHtleGlzdGluZ0RlcC52ZXJzaW9ufWApO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9kZXBzLnB1c2goZGVwKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZGVwO1xuICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIHB1YmxpYyByZW1vdmVEZXBlbmRlbmN5KG5hbWU6IHN0cmluZywgdHlwZT86IERlcGVuZGVuY3lUeXBlKSB7XG4gICAgY29uc3QgcmVtb3ZlSW5kZXggPSB0aGlzLnRyeUdldERlcGVuZGVuY3lJbmRleChuYW1lLCB0eXBlKTtcbiAgICBpZiAocmVtb3ZlSW5kZXggPT09IC0xKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fZGVwcy5zcGxpY2UocmVtb3ZlSW5kZXgsIDEpO1xuICB9XG5cbiAgcHJpdmF0ZSB0cnlHZXREZXBlbmRlbmN5SW5kZXgobmFtZTogc3RyaW5nLCB0eXBlPzogRGVwZW5kZW5jeVR5cGUpOiBudW1iZXIge1xuICAgIGNvbnN0IGRlcHMgPSB0aGlzLl9kZXBzLmZpbHRlcihkID0+IGQubmFtZSA9PT0gbmFtZSk7XG4gICAgaWYgKGRlcHMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gLTE7IC8vIG5vdCBmb3VuZFxuICAgIH1cblxuICAgIGlmICghdHlwZSkge1xuICAgICAgaWYgKGRlcHMubGVuZ3RoID4gMSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFwiJHtuYW1lfVwiIGlzIGRlZmluZWQgZm9yIG11bHRpcGxlIGRlcGVuZGVuY3kgdHlwZXM6ICR7ZGVwcy5tYXAoZCA9PiBkLnR5cGUpLmpvaW4oJywnKX0uIFBsZWFzZSBzcGVjaWZ5IGRlcGVuZGVuY3kgdHlwZWApO1xuICAgICAgfVxuXG4gICAgICB0eXBlID0gZGVwc1swXS50eXBlO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9kZXBzLmZpbmRJbmRleChkZXAgPT4gZGVwLm5hbWUgPT09IG5hbWUgJiYgZGVwLnR5cGUgPT09IHR5cGUpO1xuICB9XG5cbiAgcHJpdmF0ZSB0b0pzb24oKTogRGVwc01hbmlmZXN0IHwgdW5kZWZpbmVkIHtcbiAgICBpZiAodGhpcy5fZGVwcy5sZW5ndGggPT09IDApIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICAgIHJldHVybiB7XG4gICAgICBkZXBlbmRlbmNpZXM6IHRoaXMuX2RlcHMuc29ydChjb21wYXJlRGVwcykubWFwKG5vcm1hbGl6ZURlcCksXG4gICAgfTtcbiAgfVxufVxuXG5mdW5jdGlvbiBub3JtYWxpemVEZXAoZDogRGVwZW5kZW5jeSkge1xuICBjb25zdCBvYmo6IGFueSA9IHsgfTtcbiAgZm9yIChjb25zdCBbaywgdl0gb2YgT2JqZWN0LmVudHJpZXMoZCkpIHtcbiAgICBpZiAodiA9PSB1bmRlZmluZWQpIHtjb250aW51ZTt9XG4gICAgaWYgKHR5cGVvZih2KSA9PT0gJ29iamVjdCcgJiYgT2JqZWN0LmtleXModikubGVuZ3RoID09PSAwKSB7Y29udGludWU7fVxuICAgIGlmIChBcnJheS5pc0FycmF5KHYpICYmIHYubGVuZ3RoID09PSAwKSB7Y29udGludWU7fVxuICAgIG9ialtrXSA9IHY7XG4gIH1cblxuICByZXR1cm4gb2JqO1xufVxuXG5mdW5jdGlvbiBjb21wYXJlRGVwcyhkMTogRGVwZW5kZW5jeSwgZDI6IERlcGVuZGVuY3kpIHtcbiAgcmV0dXJuIHNwZWNPZihkMSkubG9jYWxlQ29tcGFyZShzcGVjT2YoZDIpKTtcblxuICBmdW5jdGlvbiBzcGVjT2YoZGVwOiBEZXBlbmRlbmN5KSB7XG4gICAgbGV0IHNwZWMgPSBkZXAudHlwZSArICc6JyArIGRlcC5uYW1lO1xuICAgIGlmIChkZXAudmVyc2lvbikge1xuICAgICAgc3BlYyArPSAnQCcgKyBkZXAudmVyc2lvbjtcbiAgICB9XG4gICAgcmV0dXJuIHNwZWM7XG4gIH1cbn1cblxuIl19
|
package/lib/deps/index.d.ts
DELETED
package/lib/deps/model.d.ts
DELETED
|
@@ -1,99 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @experimental
|
|
3
|
-
*/
|
|
4
|
-
export interface DepsManifest {
|
|
5
|
-
/**
|
|
6
|
-
* (experimental) All dependencies of this module.
|
|
7
|
-
*
|
|
8
|
-
* @experimental
|
|
9
|
-
*/
|
|
10
|
-
readonly dependencies: Dependency[];
|
|
11
|
-
}
|
|
12
|
-
/**
|
|
13
|
-
* (experimental) Coordinates of the dependency (name and version).
|
|
14
|
-
*
|
|
15
|
-
* @experimental
|
|
16
|
-
*/
|
|
17
|
-
export interface DependencyCoordinates {
|
|
18
|
-
/**
|
|
19
|
-
* (experimental) The package manager name of the dependency (e.g. `leftpad` for npm).
|
|
20
|
-
*
|
|
21
|
-
* NOTE: For package managers that use complex coordinates (like Maven), we
|
|
22
|
-
* will codify it into a string somehow.
|
|
23
|
-
*
|
|
24
|
-
* @experimental
|
|
25
|
-
*/
|
|
26
|
-
readonly name: string;
|
|
27
|
-
/**
|
|
28
|
-
* (experimental) Semantic version version requirement.
|
|
29
|
-
*
|
|
30
|
-
* @default - requirement is managed by the package manager (e.g. npm/yarn).
|
|
31
|
-
* @experimental
|
|
32
|
-
*/
|
|
33
|
-
readonly version?: string;
|
|
34
|
-
}
|
|
35
|
-
/**
|
|
36
|
-
* (experimental) Represents a project dependency.
|
|
37
|
-
*
|
|
38
|
-
* @experimental
|
|
39
|
-
*/
|
|
40
|
-
export interface Dependency extends DependencyCoordinates {
|
|
41
|
-
/**
|
|
42
|
-
* (experimental) Which type of dependency this is (runtime, build-time, etc).
|
|
43
|
-
*
|
|
44
|
-
* @experimental
|
|
45
|
-
*/
|
|
46
|
-
readonly type: DependencyType;
|
|
47
|
-
/**
|
|
48
|
-
* (experimental) Additional JSON metadata associated with the dependency (package manager specific).
|
|
49
|
-
*
|
|
50
|
-
* @default {}
|
|
51
|
-
* @experimental
|
|
52
|
-
*/
|
|
53
|
-
readonly metadata?: {
|
|
54
|
-
[key: string]: any;
|
|
55
|
-
};
|
|
56
|
-
}
|
|
57
|
-
/**
|
|
58
|
-
* (experimental) Type of dependency.
|
|
59
|
-
*
|
|
60
|
-
* @experimental
|
|
61
|
-
*/
|
|
62
|
-
export declare enum DependencyType {
|
|
63
|
-
/**
|
|
64
|
-
* (experimental) The dependency is required for the program/library during runtime.
|
|
65
|
-
*
|
|
66
|
-
* @experimental
|
|
67
|
-
*/
|
|
68
|
-
RUNTIME = "runtime",
|
|
69
|
-
/**
|
|
70
|
-
* (experimental) The dependency is required at runtime but expected to be installed by the consumer.
|
|
71
|
-
*
|
|
72
|
-
* @experimental
|
|
73
|
-
*/
|
|
74
|
-
PEER = "peer",
|
|
75
|
-
/**
|
|
76
|
-
* (experimental) The dependency is bundled and shipped with the module, so consumers are not required to install it.
|
|
77
|
-
*
|
|
78
|
-
* @experimental
|
|
79
|
-
*/
|
|
80
|
-
BUNDLED = "bundled",
|
|
81
|
-
/**
|
|
82
|
-
* (experimental) The dependency is required to run the `build` task.
|
|
83
|
-
*
|
|
84
|
-
* @experimental
|
|
85
|
-
*/
|
|
86
|
-
BUILD = "build",
|
|
87
|
-
/**
|
|
88
|
-
* (experimental) The dependency is required to run the `test` task.
|
|
89
|
-
*
|
|
90
|
-
* @experimental
|
|
91
|
-
*/
|
|
92
|
-
TEST = "test",
|
|
93
|
-
/**
|
|
94
|
-
* (experimental) The dependency is required for development (e.g. IDE plugins).
|
|
95
|
-
*
|
|
96
|
-
* @experimental
|
|
97
|
-
*/
|
|
98
|
-
DEVENV = "devenv"
|
|
99
|
-
}
|
package/lib/deps/model.js
DELETED
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.DependencyType = void 0;
|
|
4
|
-
/**
|
|
5
|
-
* (experimental) Type of dependency.
|
|
6
|
-
*
|
|
7
|
-
* @experimental
|
|
8
|
-
*/
|
|
9
|
-
var DependencyType;
|
|
10
|
-
(function (DependencyType) {
|
|
11
|
-
DependencyType["RUNTIME"] = "runtime";
|
|
12
|
-
DependencyType["PEER"] = "peer";
|
|
13
|
-
DependencyType["BUNDLED"] = "bundled";
|
|
14
|
-
DependencyType["BUILD"] = "build";
|
|
15
|
-
DependencyType["TEST"] = "test";
|
|
16
|
-
DependencyType["DEVENV"] = "devenv";
|
|
17
|
-
})(DependencyType = exports.DependencyType || (exports.DependencyType = {}));
|
|
18
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZGVwcy9tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQXlCQSxJQUFZLGNBa0JYO0FBbEJELFdBQVksY0FBYztJQUV4QixxQ0FBbUIsQ0FBQTtJQUduQiwrQkFBYSxDQUFBO0lBR2IscUNBQW1CLENBQUE7SUFHbkIsaUNBQWUsQ0FBQTtJQUdmLCtCQUFhLENBQUE7SUFHYixtQ0FBaUIsQ0FBQTtBQUNuQixDQUFDLEVBbEJXLGNBQWMsR0FBZCxzQkFBYyxLQUFkLHNCQUFjLFFBa0J6QiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBpbnRlcmZhY2UgRGVwc01hbmlmZXN0IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcmVhZG9ubHkgZGVwZW5kZW5jaWVzOiBEZXBlbmRlbmN5W107XG59XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuZXhwb3J0IGludGVyZmFjZSBEZXBlbmRlbmN5Q29vcmRpbmF0ZXMge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICByZWFkb25seSB2ZXJzaW9uPzogc3RyaW5nO1xufVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5leHBvcnQgaW50ZXJmYWNlIERlcGVuZGVuY3kgZXh0ZW5kcyBEZXBlbmRlbmN5Q29vcmRpbmF0ZXMge1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICByZWFkb25seSB0eXBlOiBEZXBlbmRlbmN5VHlwZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcmVhZG9ubHkgbWV0YWRhdGE/OiB7IFtrZXk6IHN0cmluZ106IGFueSB9O1xufVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbmV4cG9ydCBlbnVtIERlcGVuZGVuY3lUeXBlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIFJVTlRJTUUgPSAncnVudGltZScsXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICBQRUVSID0gJ3BlZXInLFxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIEJVTkRMRUQgPSAnYnVuZGxlZCcsXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIEJVSUxEID0gJ2J1aWxkJyxcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICBURVNUID0gJ3Rlc3QnLFxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIERFVkVOViA9ICdkZXZlbnYnLFxufVxuIl19
|
package/lib/eslint.js
DELETED
|
@@ -1,261 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var _a;
|
|
3
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
-
exports.Eslint = void 0;
|
|
5
|
-
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
|
|
6
|
-
const common_1 = require("./common");
|
|
7
|
-
const component_1 = require("./component");
|
|
8
|
-
const json_1 = require("./json");
|
|
9
|
-
/**
|
|
10
|
-
* (experimental) Represents eslint configuration.
|
|
11
|
-
*
|
|
12
|
-
* @experimental
|
|
13
|
-
*/
|
|
14
|
-
class Eslint extends component_1.Component {
|
|
15
|
-
/**
|
|
16
|
-
* @experimental
|
|
17
|
-
*/
|
|
18
|
-
constructor(project, options) {
|
|
19
|
-
var _b, _c, _d, _e, _f, _g;
|
|
20
|
-
super(project);
|
|
21
|
-
project.addDevDeps('eslint@^8', '@typescript-eslint/eslint-plugin@^5', '@typescript-eslint/parser@^5', 'eslint-import-resolver-node', 'eslint-import-resolver-typescript', 'eslint-plugin-import', 'json-schema');
|
|
22
|
-
if (options.prettier) {
|
|
23
|
-
project.addDevDeps('prettier', 'eslint-plugin-prettier', 'eslint-config-prettier');
|
|
24
|
-
}
|
|
25
|
-
if (options.aliasMap) {
|
|
26
|
-
project.addDevDeps('eslint-import-resolver-alias');
|
|
27
|
-
}
|
|
28
|
-
const devdirs = (_b = options.devdirs) !== null && _b !== void 0 ? _b : [];
|
|
29
|
-
const dirs = [...options.dirs, ...devdirs];
|
|
30
|
-
const fileExtensions = (_c = options.fileExtensions) !== null && _c !== void 0 ? _c : ['.ts'];
|
|
31
|
-
this._allowDevDeps = new Set((devdirs !== null && devdirs !== void 0 ? devdirs : []).map(dir => `**/${dir}/**`));
|
|
32
|
-
const lintProjenRc = (_d = options.lintProjenRc) !== null && _d !== void 0 ? _d : true;
|
|
33
|
-
const eslint = project.addTask('eslint', {
|
|
34
|
-
description: 'Runs eslint against the codebase',
|
|
35
|
-
exec: [
|
|
36
|
-
'eslint',
|
|
37
|
-
`--ext ${fileExtensions.join(',')}`,
|
|
38
|
-
'--fix',
|
|
39
|
-
'--no-error-on-unmatched-pattern',
|
|
40
|
-
...dirs,
|
|
41
|
-
...lintProjenRc ? [common_1.PROJEN_RC] : [],
|
|
42
|
-
].join(' '),
|
|
43
|
-
});
|
|
44
|
-
project.testTask.spawn(eslint);
|
|
45
|
-
// exclude some files
|
|
46
|
-
(_e = project.npmignore) === null || _e === void 0 ? void 0 : _e.exclude('/.eslintrc.json');
|
|
47
|
-
const formattingRules = options.prettier ? {
|
|
48
|
-
'prettier/prettier': ['error'],
|
|
49
|
-
} : {
|
|
50
|
-
// see https://github.com/typescript-eslint/typescript-eslint/blob/master/packages/eslint-plugin/docs/rules/indent.md
|
|
51
|
-
'indent': ['off'],
|
|
52
|
-
'@typescript-eslint/indent': ['error', 2],
|
|
53
|
-
// Style
|
|
54
|
-
'quotes': ['error', 'single', { avoidEscape: true }],
|
|
55
|
-
'comma-dangle': ['error', 'always-multiline'],
|
|
56
|
-
'comma-spacing': ['error', { before: false, after: true }],
|
|
57
|
-
'no-multi-spaces': ['error', { ignoreEOLComments: false }],
|
|
58
|
-
'array-bracket-spacing': ['error', 'never'],
|
|
59
|
-
'array-bracket-newline': ['error', 'consistent'],
|
|
60
|
-
'object-curly-spacing': ['error', 'always'],
|
|
61
|
-
'object-curly-newline': ['error', { multiline: true, consistent: true }],
|
|
62
|
-
'object-property-newline': ['error', { allowAllPropertiesOnSameLine: true }],
|
|
63
|
-
'keyword-spacing': ['error'],
|
|
64
|
-
'brace-style': ['error', '1tbs', { allowSingleLine: true }],
|
|
65
|
-
'space-before-blocks': ['error'],
|
|
66
|
-
'curly': ['error', 'multi-line', 'consistent'],
|
|
67
|
-
'@typescript-eslint/member-delimiter-style': ['error'],
|
|
68
|
-
// Require semicolons
|
|
69
|
-
'semi': ['error', 'always'],
|
|
70
|
-
// Max line lengths
|
|
71
|
-
'max-len': ['error', {
|
|
72
|
-
code: 150,
|
|
73
|
-
ignoreUrls: true,
|
|
74
|
-
ignoreStrings: true,
|
|
75
|
-
ignoreTemplateLiterals: true,
|
|
76
|
-
ignoreComments: true,
|
|
77
|
-
ignoreRegExpLiterals: true,
|
|
78
|
-
}],
|
|
79
|
-
// Don't unnecessarily quote properties
|
|
80
|
-
'quote-props': ['error', 'consistent-as-needed'],
|
|
81
|
-
};
|
|
82
|
-
this.rules = {
|
|
83
|
-
...formattingRules,
|
|
84
|
-
// Require use of the `import { foo } from 'bar';` form instead of `import foo = require('bar');`
|
|
85
|
-
'@typescript-eslint/no-require-imports': ['error'],
|
|
86
|
-
// Require all imported dependencies are actually declared in package.json
|
|
87
|
-
'import/no-extraneous-dependencies': [
|
|
88
|
-
'error',
|
|
89
|
-
{
|
|
90
|
-
// Only allow importing devDependencies from "devdirs".
|
|
91
|
-
devDependencies: () => this.renderDevDepsAllowList(),
|
|
92
|
-
optionalDependencies: false,
|
|
93
|
-
peerDependencies: true,
|
|
94
|
-
},
|
|
95
|
-
],
|
|
96
|
-
// Require all imported libraries actually resolve (!!required for import/no-extraneous-dependencies to work!!)
|
|
97
|
-
'import/no-unresolved': ['error'],
|
|
98
|
-
// Require an ordering on all imports
|
|
99
|
-
'import/order': ['warn', {
|
|
100
|
-
groups: ['builtin', 'external'],
|
|
101
|
-
alphabetize: { order: 'asc', caseInsensitive: true },
|
|
102
|
-
}],
|
|
103
|
-
// Cannot import from the same module twice
|
|
104
|
-
'no-duplicate-imports': ['error'],
|
|
105
|
-
// Cannot shadow names
|
|
106
|
-
'no-shadow': ['off'],
|
|
107
|
-
'@typescript-eslint/no-shadow': ['error'],
|
|
108
|
-
// Required spacing in property declarations (copied from TSLint, defaults are good)
|
|
109
|
-
'key-spacing': ['error'],
|
|
110
|
-
// No multiple empty lines
|
|
111
|
-
'no-multiple-empty-lines': ['error'],
|
|
112
|
-
// One of the easiest mistakes to make
|
|
113
|
-
'@typescript-eslint/no-floating-promises': ['error'],
|
|
114
|
-
// Make sure that inside try/catch blocks, promises are 'return await'ed
|
|
115
|
-
// (must disable the base rule as it can report incorrect errors)
|
|
116
|
-
'no-return-await': ['off'],
|
|
117
|
-
'@typescript-eslint/return-await': ['error'],
|
|
118
|
-
// Useless diff results
|
|
119
|
-
'no-trailing-spaces': ['error'],
|
|
120
|
-
// Must use foo.bar instead of foo['bar'] if possible
|
|
121
|
-
'dot-notation': ['error'],
|
|
122
|
-
// Are you sure | is not a typo for || ?
|
|
123
|
-
'no-bitwise': ['error'],
|
|
124
|
-
// Member ordering
|
|
125
|
-
'@typescript-eslint/member-ordering': ['error', {
|
|
126
|
-
default: [
|
|
127
|
-
'public-static-field',
|
|
128
|
-
'public-static-method',
|
|
129
|
-
'protected-static-field',
|
|
130
|
-
'protected-static-method',
|
|
131
|
-
'private-static-field',
|
|
132
|
-
'private-static-method',
|
|
133
|
-
'field',
|
|
134
|
-
// Constructors
|
|
135
|
-
'constructor',
|
|
136
|
-
// Methods
|
|
137
|
-
'method',
|
|
138
|
-
],
|
|
139
|
-
}],
|
|
140
|
-
};
|
|
141
|
-
// Overrides for .projenrc.js
|
|
142
|
-
this.overrides = [
|
|
143
|
-
{
|
|
144
|
-
files: [common_1.PROJEN_RC],
|
|
145
|
-
rules: {
|
|
146
|
-
'@typescript-eslint/no-require-imports': 'off',
|
|
147
|
-
'import/no-extraneous-dependencies': 'off',
|
|
148
|
-
},
|
|
149
|
-
},
|
|
150
|
-
];
|
|
151
|
-
this.ignorePatterns = (_f = options.ignorePatterns) !== null && _f !== void 0 ? _f : [
|
|
152
|
-
'*.js',
|
|
153
|
-
`!${common_1.PROJEN_RC}`,
|
|
154
|
-
'*.d.ts',
|
|
155
|
-
'node_modules/',
|
|
156
|
-
'*.generated.ts',
|
|
157
|
-
'coverage',
|
|
158
|
-
];
|
|
159
|
-
const tsconfig = (_g = options.tsconfigPath) !== null && _g !== void 0 ? _g : './tsconfig.json';
|
|
160
|
-
const plugins = [
|
|
161
|
-
'@typescript-eslint',
|
|
162
|
-
'import',
|
|
163
|
-
...(options.prettier ? ['prettier'] : []),
|
|
164
|
-
];
|
|
165
|
-
const extendsConf = [
|
|
166
|
-
'plugin:import/typescript',
|
|
167
|
-
...(options.prettier ? [
|
|
168
|
-
'prettier',
|
|
169
|
-
'plugin:prettier/recommended',
|
|
170
|
-
] : []),
|
|
171
|
-
];
|
|
172
|
-
this.config = {
|
|
173
|
-
env: {
|
|
174
|
-
jest: true,
|
|
175
|
-
node: true,
|
|
176
|
-
},
|
|
177
|
-
root: true,
|
|
178
|
-
plugins,
|
|
179
|
-
parser: '@typescript-eslint/parser',
|
|
180
|
-
parserOptions: {
|
|
181
|
-
ecmaVersion: 2018,
|
|
182
|
-
sourceType: 'module',
|
|
183
|
-
project: tsconfig,
|
|
184
|
-
},
|
|
185
|
-
extends: extendsConf,
|
|
186
|
-
settings: {
|
|
187
|
-
'import/parsers': {
|
|
188
|
-
'@typescript-eslint/parser': ['.ts', '.tsx'],
|
|
189
|
-
},
|
|
190
|
-
'import/resolver': {
|
|
191
|
-
...(options.aliasMap && {
|
|
192
|
-
alias: {
|
|
193
|
-
map: Object.entries(options.aliasMap).map(([k, v]) => [k, v]),
|
|
194
|
-
extensions: options.aliasExtensions,
|
|
195
|
-
},
|
|
196
|
-
}),
|
|
197
|
-
node: {},
|
|
198
|
-
typescript: {
|
|
199
|
-
project: tsconfig,
|
|
200
|
-
...(options.tsAlwaysTryTypes !== false && { alwaysTryTypes: true }),
|
|
201
|
-
},
|
|
202
|
-
},
|
|
203
|
-
},
|
|
204
|
-
ignorePatterns: this.ignorePatterns,
|
|
205
|
-
rules: this.rules,
|
|
206
|
-
overrides: this.overrides,
|
|
207
|
-
};
|
|
208
|
-
new json_1.JsonFile(project, '.eslintrc.json', { obj: this.config, marker: false });
|
|
209
|
-
}
|
|
210
|
-
/**
|
|
211
|
-
* (experimental) Returns the singletone Eslint component of a project or undefined if there is none.
|
|
212
|
-
*
|
|
213
|
-
* @experimental
|
|
214
|
-
*/
|
|
215
|
-
static of(project) {
|
|
216
|
-
const isEslint = (c) => c instanceof Eslint;
|
|
217
|
-
return project.components.find(isEslint);
|
|
218
|
-
}
|
|
219
|
-
/**
|
|
220
|
-
* (experimental) Add an eslint rule.
|
|
221
|
-
*
|
|
222
|
-
* @experimental
|
|
223
|
-
*/
|
|
224
|
-
addRules(rules) {
|
|
225
|
-
for (const [k, v] of Object.entries(rules)) {
|
|
226
|
-
this.rules[k] = v;
|
|
227
|
-
}
|
|
228
|
-
}
|
|
229
|
-
/**
|
|
230
|
-
* (experimental) Add an eslint override.
|
|
231
|
-
*
|
|
232
|
-
* @experimental
|
|
233
|
-
*/
|
|
234
|
-
addOverride(override) {
|
|
235
|
-
this.overrides.push(override);
|
|
236
|
-
}
|
|
237
|
-
/**
|
|
238
|
-
* (experimental) Do not lint these files.
|
|
239
|
-
*
|
|
240
|
-
* @experimental
|
|
241
|
-
*/
|
|
242
|
-
addIgnorePattern(pattern) {
|
|
243
|
-
this.ignorePatterns.push(pattern);
|
|
244
|
-
}
|
|
245
|
-
/**
|
|
246
|
-
* (experimental) Add a glob file pattern which allows importing dev dependencies.
|
|
247
|
-
*
|
|
248
|
-
* @param pattern glob pattern.
|
|
249
|
-
* @experimental
|
|
250
|
-
*/
|
|
251
|
-
allowDevDeps(pattern) {
|
|
252
|
-
this._allowDevDeps.add(pattern);
|
|
253
|
-
}
|
|
254
|
-
renderDevDepsAllowList() {
|
|
255
|
-
return Array.from(this._allowDevDeps);
|
|
256
|
-
}
|
|
257
|
-
}
|
|
258
|
-
exports.Eslint = Eslint;
|
|
259
|
-
_a = JSII_RTTI_SYMBOL_1;
|
|
260
|
-
Eslint[_a] = { fqn: "projen.Eslint", version: "0.36.5" };
|
|
261
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXNsaW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2VzbGludC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUNBLHFDQUFxQztBQUNyQywyQ0FBd0M7QUFDeEMsaUNBQWtDOzs7Ozs7QUE4Q2xDLE1BQWEsTUFBTyxTQUFRLHFCQUFTOzs7O0lBc0JuQyxZQUFZLE9BQW9CLEVBQUUsT0FBc0I7O1FBQ3RELEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUVmLE9BQU8sQ0FBQyxVQUFVLENBQ2hCLFdBQVcsRUFDWCxxQ0FBcUMsRUFDckMsOEJBQThCLEVBQzlCLDZCQUE2QixFQUM3QixtQ0FBbUMsRUFDbkMsc0JBQXNCLEVBQ3RCLGFBQWEsQ0FDZCxDQUFDO1FBRUYsSUFBSSxPQUFPLENBQUMsUUFBUSxFQUFFO1lBQ3BCLE9BQU8sQ0FBQyxVQUFVLENBQ2hCLFVBQVUsRUFDVix3QkFBd0IsRUFDeEIsd0JBQXdCLENBQ3pCLENBQUM7U0FDSDtRQUVELElBQUksT0FBTyxDQUFDLFFBQVEsRUFBRTtZQUNwQixPQUFPLENBQUMsVUFBVSxDQUFDLDhCQUE4QixDQUFDLENBQUM7U0FDcEQ7UUFFRCxNQUFNLE9BQU8sU0FBRyxPQUFPLENBQUMsT0FBTyxtQ0FBSSxFQUFFLENBQUM7UUFFdEMsTUFBTSxJQUFJLEdBQUcsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxJQUFJLEVBQUUsR0FBRyxPQUFPLENBQUMsQ0FBQztRQUMzQyxNQUFNLGNBQWMsU0FBRyxPQUFPLENBQUMsY0FBYyxtQ0FBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRXpELElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxPQUFPLGFBQVAsT0FBTyxjQUFQLE9BQU8sR0FBSSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUV6RSxNQUFNLFlBQVksU0FBRyxPQUFPLENBQUMsWUFBWSxtQ0FBSSxJQUFJLENBQUM7UUFFbEQsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUU7WUFDdkMsV0FBVyxFQUFFLGtDQUFrQztZQUMvQyxJQUFJLEVBQUU7Z0JBQ0osUUFBUTtnQkFDUixTQUFTLGNBQWMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUU7Z0JBQ25DLE9BQU87Z0JBQ1AsaUNBQWlDO2dCQUNqQyxHQUFHLElBQUk7Z0JBQ1AsR0FBRyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsa0JBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO2FBQ25DLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQztTQUNaLENBQUMsQ0FBQztRQUVILE9BQU8sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRS9CLHFCQUFxQjtRQUNyQixNQUFBLE9BQU8sQ0FBQyxTQUFTLDBDQUFFLE9BQU8sQ0FBQyxpQkFBaUIsRUFBRTtRQUU5QyxNQUFNLGVBQWUsR0FBNEIsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7WUFDbEUsbUJBQW1CLEVBQUUsQ0FBQyxPQUFPLENBQUM7U0FDL0IsQ0FBQyxDQUFDLENBQUM7WUFDRixxSEFBcUg7WUFDckgsUUFBUSxFQUFFLENBQUMsS0FBSyxDQUFDO1lBQ2pCLDJCQUEyQixFQUFFLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztZQUV6QyxRQUFRO1lBQ1IsUUFBUSxFQUFFLENBQUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsQ0FBQztZQUNwRCxjQUFjLEVBQUUsQ0FBQyxPQUFPLEVBQUUsa0JBQWtCLENBQUM7WUFDN0MsZUFBZSxFQUFFLENBQUMsT0FBTyxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUM7WUFDMUQsaUJBQWlCLEVBQUUsQ0FBQyxPQUFPLEVBQUUsRUFBRSxpQkFBaUIsRUFBRSxLQUFLLEVBQUUsQ0FBQztZQUMxRCx1QkFBdUIsRUFBRSxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUM7WUFDM0MsdUJBQXVCLEVBQUUsQ0FBQyxPQUFPLEVBQUUsWUFBWSxDQUFDO1lBQ2hELHNCQUFzQixFQUFFLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQztZQUMzQyxzQkFBc0IsRUFBRSxDQUFDLE9BQU8sRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxDQUFDO1lBQ3hFLHlCQUF5QixFQUFFLENBQUMsT0FBTyxFQUFFLEVBQUUsNEJBQTRCLEVBQUUsSUFBSSxFQUFFLENBQUM7WUFDNUUsaUJBQWlCLEVBQUUsQ0FBQyxPQUFPLENBQUM7WUFDNUIsYUFBYSxFQUFFLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFLGVBQWUsRUFBRSxJQUFJLEVBQUUsQ0FBQztZQUMzRCxxQkFBcUIsRUFBRSxDQUFDLE9BQU8sQ0FBQztZQUNoQyxPQUFPLEVBQUUsQ0FBQyxPQUFPLEVBQUUsWUFBWSxFQUFFLFlBQVksQ0FBQztZQUM5QywyQ0FBMkMsRUFBRSxDQUFDLE9BQU8sQ0FBQztZQUV0RCxxQkFBcUI7WUFDckIsTUFBTSxFQUFFLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQztZQUUzQixtQkFBbUI7WUFDbkIsU0FBUyxFQUFFLENBQUMsT0FBTyxFQUFFO29CQUNuQixJQUFJLEVBQUUsR0FBRztvQkFDVCxVQUFVLEVBQUUsSUFBSTtvQkFDaEIsYUFBYSxFQUFFLElBQUk7b0JBQ25CLHNCQUFzQixFQUFFLElBQUk7b0JBQzVCLGNBQWMsRUFBRSxJQUFJO29CQUNwQixvQkFBb0IsRUFBRSxJQUFJO2lCQUMzQixDQUFDO1lBRUYsdUNBQXVDO1lBQ3ZDLGFBQWEsRUFBRSxDQUFDLE9BQU8sRUFBRSxzQkFBc0IsQ0FBQztTQUNqRCxDQUFDO1FBRUYsSUFBSSxDQUFDLEtBQUssR0FBRztZQUNYLEdBQUcsZUFBZTtZQUNsQixpR0FBaUc7WUFDakcsdUNBQXVDLEVBQUUsQ0FBQyxPQUFPLENBQUM7WUFFbEQsMEVBQTBFO1lBQzFFLG1DQUFtQyxFQUFFO2dCQUNuQyxPQUFPO2dCQUNQO29CQUNFLHVEQUF1RDtvQkFDdkQsZUFBZSxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxzQkFBc0IsRUFBRTtvQkFDcEQsb0JBQW9CLEVBQUUsS0FBSztvQkFDM0IsZ0JBQWdCLEVBQUUsSUFBSTtpQkFDdkI7YUFDRjtZQUVELCtHQUErRztZQUMvRyxzQkFBc0IsRUFBRSxDQUFDLE9BQU8sQ0FBQztZQUVqQyxxQ0FBcUM7WUFDckMsY0FBYyxFQUFFLENBQUMsTUFBTSxFQUFFO29CQUN2QixNQUFNLEVBQUUsQ0FBQyxTQUFTLEVBQUUsVUFBVSxDQUFDO29CQUMvQixXQUFXLEVBQUUsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLGVBQWUsRUFBRSxJQUFJLEVBQUU7aUJBQ3JELENBQUM7WUFFRiwyQ0FBMkM7WUFDM0Msc0JBQXNCLEVBQUUsQ0FBQyxPQUFPLENBQUM7WUFFakMsc0JBQXNCO1lBQ3RCLFdBQVcsRUFBRSxDQUFDLEtBQUssQ0FBQztZQUNwQiw4QkFBOEIsRUFBRSxDQUFDLE9BQU8sQ0FBQztZQUV6QyxvRkFBb0Y7WUFDcEYsYUFBYSxFQUFFLENBQUMsT0FBTyxDQUFDO1lBRXhCLDBCQUEwQjtZQUMxQix5QkFBeUIsRUFBRSxDQUFDLE9BQU8sQ0FBQztZQUVwQyxzQ0FBc0M7WUFDdEMseUNBQXlDLEVBQUUsQ0FBQyxPQUFPLENBQUM7WUFFcEQsd0VBQXdFO1lBQ3hFLGlFQUFpRTtZQUNqRSxpQkFBaUIsRUFBRSxDQUFDLEtBQUssQ0FBQztZQUMxQixpQ0FBaUMsRUFBRSxDQUFDLE9BQU8sQ0FBQztZQUU1Qyx1QkFBdUI7WUFDdkIsb0JBQW9CLEVBQUUsQ0FBQyxPQUFPLENBQUM7WUFFL0IscURBQXFEO1lBQ3JELGNBQWMsRUFBRSxDQUFDLE9BQU8sQ0FBQztZQUV6Qix3Q0FBd0M7WUFDeEMsWUFBWSxFQUFFLENBQUMsT0FBTyxDQUFDO1lBRXZCLGtCQUFrQjtZQUNsQixvQ0FBb0MsRUFBRSxDQUFDLE9BQU8sRUFBRTtvQkFDOUMsT0FBTyxFQUFFO3dCQUNQLHFCQUFxQjt3QkFDckIsc0JBQXNCO3dCQUN0Qix3QkFBd0I7d0JBQ3hCLHlCQUF5Qjt3QkFDekIsc0JBQXNCO3dCQUN0Qix1QkFBdUI7d0JBRXZCLE9BQU87d0JBRVAsZUFBZTt3QkFDZixhQUFhO3dCQUViLFVBQVU7d0JBQ1YsUUFBUTtxQkFDVDtpQkFDRixDQUFDO1NBQ0gsQ0FBQztRQUVGLDZCQUE2QjtRQUM3QixJQUFJLENBQUMsU0FBUyxHQUFHO1lBQ2Y7Z0JBQ0UsS0FBSyxFQUFFLENBQUMsa0JBQVMsQ0FBQztnQkFDbEIsS0FBSyxFQUFFO29CQUNMLHVDQUF1QyxFQUFFLEtBQUs7b0JBQzlDLG1DQUFtQyxFQUFFLEtBQUs7aUJBQzNDO2FBQ0Y7U0FDRixDQUFDO1FBRUYsSUFBSSxDQUFDLGNBQWMsU0FBRyxPQUFPLENBQUMsY0FBYyxtQ0FBSTtZQUM5QyxNQUFNO1lBQ04sSUFBSSxrQkFBUyxFQUFFO1lBQ2YsUUFBUTtZQUNSLGVBQWU7WUFDZixnQkFBZ0I7WUFDaEIsVUFBVTtTQUNYLENBQUM7UUFFRixNQUFNLFFBQVEsU0FBRyxPQUFPLENBQUMsWUFBWSxtQ0FBSSxpQkFBaUIsQ0FBQztRQUUzRCxNQUFNLE9BQU8sR0FBRztZQUNkLG9CQUFvQjtZQUNwQixRQUFRO1lBQ1IsR0FBRyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztTQUMxQyxDQUFDO1FBRUYsTUFBTSxXQUFXLEdBQUc7WUFDbEIsMEJBQTBCO1lBQzFCLEdBQUcsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztnQkFDckIsVUFBVTtnQkFDViw2QkFBNkI7YUFDOUIsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1NBQ1IsQ0FBQztRQUVGLElBQUksQ0FBQyxNQUFNLEdBQUc7WUFDWixHQUFHLEVBQUU7Z0JBQ0gsSUFBSSxFQUFFLElBQUk7Z0JBQ1YsSUFBSSxFQUFFLElBQUk7YUFDWDtZQUNELElBQUksRUFBRSxJQUFJO1lBQ1YsT0FBTztZQUNQLE1BQU0sRUFBRSwyQkFBMkI7WUFDbkMsYUFBYSxFQUFFO2dCQUNiLFdBQVcsRUFBRSxJQUFJO2dCQUNqQixVQUFVLEVBQUUsUUFBUTtnQkFDcEIsT0FBTyxFQUFFLFFBQVE7YUFDbEI7WUFDRCxPQUFPLEVBQUUsV0FBVztZQUNwQixRQUFRLEVBQUU7Z0JBQ1IsZ0JBQWdCLEVBQUU7b0JBQ2hCLDJCQUEyQixFQUFFLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQztpQkFDN0M7Z0JBQ0QsaUJBQWlCLEVBQUU7b0JBQ2pCLEdBQUcsQ0FBRSxPQUFPLENBQUMsUUFBUSxJQUFJO3dCQUN2QixLQUFLLEVBQUU7NEJBQ0wsR0FBRyxFQUFFLE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQzs0QkFDN0QsVUFBVSxFQUFFLE9BQU8sQ0FBQyxlQUFlO3lCQUNwQztxQkFDRixDQUFDO29CQUNGLElBQUksRUFBRSxFQUFFO29CQUNSLFVBQVUsRUFBRTt3QkFDVixPQUFPLEVBQUUsUUFBUTt3QkFDakIsR0FBRyxDQUFFLE9BQU8sQ0FBQyxnQkFBZ0IsS0FBSyxLQUFLLElBQUksRUFBRSxjQUFjLEVBQUUsSUFBSSxFQUFFLENBQUU7cUJBQ3RFO2lCQUNGO2FBQ0Y7WUFDRCxjQUFjLEVBQUUsSUFBSSxDQUFDLGNBQWM7WUFDbkMsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLO1lBQ2pCLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUztTQUMxQixDQUFDO1FBRUYsSUFBSSxlQUFRLENBQUMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDL0UsQ0FBQzs7Ozs7O0lBcFFNLE1BQU0sQ0FBQyxFQUFFLENBQUMsT0FBZ0I7UUFDL0IsTUFBTSxRQUFRLEdBQUcsQ0FBQyxDQUFZLEVBQWUsRUFBRSxDQUFDLENBQUMsWUFBWSxNQUFNLENBQUM7UUFDcEUsT0FBTyxPQUFPLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUMzQyxDQUFDOzs7Ozs7SUFvUU0sUUFBUSxDQUFDLEtBQThCO1FBQzVDLEtBQUssTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQzFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ25CO0lBQ0gsQ0FBQzs7Ozs7O0lBR00sV0FBVyxDQUFDLFFBQXdCO1FBQ3pDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ2hDLENBQUM7Ozs7OztJQUdNLGdCQUFnQixDQUFDLE9BQWU7UUFDckMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDcEMsQ0FBQzs7Ozs7OztJQUdNLFlBQVksQ0FBQyxPQUFlO1FBQ2pDLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFFTyxzQkFBc0I7UUFDNUIsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUN4QyxDQUFDOztBQWpTSCx3QkFrU0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQcm9qZWN0IH0gZnJvbSAnLic7XG5pbXBvcnQgeyBQUk9KRU5fUkMgfSBmcm9tICcuL2NvbW1vbic7XG5pbXBvcnQgeyBDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudCc7XG5pbXBvcnQgeyBKc29uRmlsZSB9IGZyb20gJy4vanNvbic7XG5pbXBvcnQgeyBOb2RlUHJvamVjdCB9IGZyb20gJy4vbm9kZS1wcm9qZWN0JztcblxuXG5leHBvcnQgaW50ZXJmYWNlIEVzbGludE9wdGlvbnMge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcmVhZG9ubHkgdHNjb25maWdQYXRoPzogc3RyaW5nO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICByZWFkb25seSBkaXJzOiBzdHJpbmdbXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcmVhZG9ubHkgZGV2ZGlycz86IHN0cmluZ1tdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICByZWFkb25seSBmaWxlRXh0ZW5zaW9ucz86IHN0cmluZ1tdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICByZWFkb25seSBpZ25vcmVQYXR0ZXJucz86IHN0cmluZ1tdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcmVhZG9ubHkgbGludFByb2plblJjPzogYm9vbGVhbjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIHJlYWRvbmx5IHByZXR0aWVyPzogYm9vbGVhbjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcmVhZG9ubHkgYWxpYXNNYXA/OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICByZWFkb25seSBhbGlhc0V4dGVuc2lvbnM/OiBzdHJpbmdbXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcmVhZG9ubHkgdHNBbHdheXNUcnlUeXBlcz86IGJvb2xlYW47XG59XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5leHBvcnQgaW50ZXJmYWNlIEVzbGludE92ZXJyaWRlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcmVhZG9ubHkgZmlsZXM6IHN0cmluZ1tdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcmVhZG9ubHkgcnVsZXM6IHsgW3J1bGU6IHN0cmluZ106IGFueSB9O1xufVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5leHBvcnQgY2xhc3MgRXNsaW50IGV4dGVuZHMgQ29tcG9uZW50IHtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICBwdWJsaWMgc3RhdGljIG9mKHByb2plY3Q6IFByb2plY3QpOiBFc2xpbnQgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IGlzRXNsaW50ID0gKGM6IENvbXBvbmVudCk6IGMgaXMgRXNsaW50ID0+IGMgaW5zdGFuY2VvZiBFc2xpbnQ7XG4gICAgcmV0dXJuIHByb2plY3QuY29tcG9uZW50cy5maW5kKGlzRXNsaW50KTtcbiAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcHVibGljIHJlYWRvbmx5IHJ1bGVzOiB7IFtydWxlOiBzdHJpbmddOiBhbnlbXSB9O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIHB1YmxpYyByZWFkb25seSBvdmVycmlkZXM6IEVzbGludE92ZXJyaWRlW107XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcHVibGljIHJlYWRvbmx5IGNvbmZpZzogYW55O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICBwdWJsaWMgcmVhZG9ubHkgaWdub3JlUGF0dGVybnM6IHN0cmluZ1tdO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX2FsbG93RGV2RGVwczogU2V0PHN0cmluZz47XG5cbiAgY29uc3RydWN0b3IocHJvamVjdDogTm9kZVByb2plY3QsIG9wdGlvbnM6IEVzbGludE9wdGlvbnMpIHtcbiAgICBzdXBlcihwcm9qZWN0KTtcblxuICAgIHByb2plY3QuYWRkRGV2RGVwcyhcbiAgICAgICdlc2xpbnRAXjgnLFxuICAgICAgJ0B0eXBlc2NyaXB0LWVzbGludC9lc2xpbnQtcGx1Z2luQF41JyxcbiAgICAgICdAdHlwZXNjcmlwdC1lc2xpbnQvcGFyc2VyQF41JyxcbiAgICAgICdlc2xpbnQtaW1wb3J0LXJlc29sdmVyLW5vZGUnLFxuICAgICAgJ2VzbGludC1pbXBvcnQtcmVzb2x2ZXItdHlwZXNjcmlwdCcsXG4gICAgICAnZXNsaW50LXBsdWdpbi1pbXBvcnQnLFxuICAgICAgJ2pzb24tc2NoZW1hJyxcbiAgICApO1xuXG4gICAgaWYgKG9wdGlvbnMucHJldHRpZXIpIHtcbiAgICAgIHByb2plY3QuYWRkRGV2RGVwcyhcbiAgICAgICAgJ3ByZXR0aWVyJyxcbiAgICAgICAgJ2VzbGludC1wbHVnaW4tcHJldHRpZXInLFxuICAgICAgICAnZXNsaW50LWNvbmZpZy1wcmV0dGllcicsXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zLmFsaWFzTWFwKSB7XG4gICAgICBwcm9qZWN0LmFkZERldkRlcHMoJ2VzbGludC1pbXBvcnQtcmVzb2x2ZXItYWxpYXMnKTtcbiAgICB9XG5cbiAgICBjb25zdCBkZXZkaXJzID0gb3B0aW9ucy5kZXZkaXJzID8/IFtdO1xuXG4gICAgY29uc3QgZGlycyA9IFsuLi5vcHRpb25zLmRpcnMsIC4uLmRldmRpcnNdO1xuICAgIGNvbnN0IGZpbGVFeHRlbnNpb25zID0gb3B0aW9ucy5maWxlRXh0ZW5zaW9ucyA/PyBbJy50cyddO1xuXG4gICAgdGhpcy5fYWxsb3dEZXZEZXBzID0gbmV3IFNldCgoZGV2ZGlycyA/PyBbXSkubWFwKGRpciA9PiBgKiovJHtkaXJ9LyoqYCkpO1xuXG4gICAgY29uc3QgbGludFByb2plblJjID0gb3B0aW9ucy5saW50UHJvamVuUmMgPz8gdHJ1ZTtcblxuICAgIGNvbnN0IGVzbGludCA9IHByb2plY3QuYWRkVGFzaygnZXNsaW50Jywge1xuICAgICAgZGVzY3JpcHRpb246ICdSdW5zIGVzbGludCBhZ2FpbnN0IHRoZSBjb2RlYmFzZScsXG4gICAgICBleGVjOiBbXG4gICAgICAgICdlc2xpbnQnLFxuICAgICAgICBgLS1leHQgJHtmaWxlRXh0ZW5zaW9ucy5qb2luKCcsJyl9YCxcbiAgICAgICAgJy0tZml4JyxcbiAgICAgICAgJy0tbm8tZXJyb3Itb24tdW5tYXRjaGVkLXBhdHRlcm4nLFxuICAgICAgICAuLi5kaXJzLFxuICAgICAgICAuLi5saW50UHJvamVuUmMgPyBbUFJPSkVOX1JDXSA6IFtdLFxuICAgICAgXS5qb2luKCcgJyksXG4gICAgfSk7XG5cbiAgICBwcm9qZWN0LnRlc3RUYXNrLnNwYXduKGVzbGludCk7XG5cbiAgICAvLyBleGNsdWRlIHNvbWUgZmlsZXNcbiAgICBwcm9qZWN0Lm5wbWlnbm9yZT8uZXhjbHVkZSgnLy5lc2xpbnRyYy5qc29uJyk7XG5cbiAgICBjb25zdCBmb3JtYXR0aW5nUnVsZXM6IHsgW3J1bGU6IHN0cmluZ106IGFueSB9ID0gb3B0aW9ucy5wcmV0dGllciA/IHtcbiAgICAgICdwcmV0dGllci9wcmV0dGllcic6IFsnZXJyb3InXSxcbiAgICB9IDoge1xuICAgICAgLy8gc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS90eXBlc2NyaXB0LWVzbGludC90eXBlc2NyaXB0LWVzbGludC9ibG9iL21hc3Rlci9wYWNrYWdlcy9lc2xpbnQtcGx1Z2luL2RvY3MvcnVsZXMvaW5kZW50Lm1kXG4gICAgICAnaW5kZW50JzogWydvZmYnXSxcbiAgICAgICdAdHlwZXNjcmlwdC1lc2xpbnQvaW5kZW50JzogWydlcnJvcicsIDJdLFxuXG4gICAgICAvLyBTdHlsZVxuICAgICAgJ3F1b3Rlcyc6IFsnZXJyb3InLCAnc2luZ2xlJywgeyBhdm9pZEVzY2FwZTogdHJ1ZSB9XSxcbiAgICAgICdjb21tYS1kYW5nbGUnOiBbJ2Vycm9yJywgJ2Fsd2F5cy1tdWx0aWxpbmUnXSwgLy8gZW5zdXJlcyBjbGVhbiBkaWZmcywgc2VlIGh0dHBzOi8vbWVkaXVtLmNvbS9AbmlrZ3JhZi93aHkteW91LXNob3VsZC1lbmZvcmNlLWRhbmdsaW5nLWNvbW1hcy1mb3ItbXVsdGlsaW5lLXN0YXRlbWVudHMtZDAzNGM5OGUzNmY4XG4gICAgICAnY29tbWEtc3BhY2luZyc6IFsnZXJyb3InLCB7IGJlZm9yZTogZmFsc2UsIGFmdGVyOiB0cnVlIH1dLCAvLyBzcGFjZSBhZnRlciwgbm8gc3BhY2UgYmVmb3JlXG4gICAgICAnbm8tbXVsdGktc3BhY2VzJzogWydlcnJvcicsIHsgaWdub3JlRU9MQ29tbWVudHM6IGZhbHNlIH1dLCAvLyBubyBtdWx0aSBzcGFjZXNcbiAgICAgICdhcnJheS1icmFja2V0LXNwYWNpbmcnOiBbJ2Vycm9yJywgJ25ldmVyJ10sIC8vIFsxLCAyLCAzXVxuICAgICAgJ2FycmF5LWJyYWNrZXQtbmV3bGluZSc6IFsnZXJyb3InLCAnY29uc2lzdGVudCddLCAvLyBlbmZvcmNlIGNvbnNpc3RlbnQgbGluZSBicmVha3MgYmV0d2VlbiBicmFja2V0c1xuICAgICAgJ29iamVjdC1jdXJseS1zcGFjaW5nJzogWydlcnJvcicsICdhbHdheXMnXSwgLy8geyBrZXk6ICd2YWx1ZScgfVxuICAgICAgJ29iamVjdC1jdXJseS1uZXdsaW5lJzogWydlcnJvcicsIHsgbXVsdGlsaW5lOiB0cnVlLCBjb25zaXN0ZW50OiB0cnVlIH1dLCAvLyBlbmZvcmNlIGNvbnNpc3RlbnQgbGluZSBicmVha3MgYmV0d2VlbiBicmFjZXNcbiAgICAgICdvYmplY3QtcHJvcGVydHktbmV3bGluZSc6IFsnZXJyb3InLCB7IGFsbG93QWxsUHJvcGVydGllc09uU2FtZUxpbmU6IHRydWUgfV0sIC8vIGVuZm9yY2UgXCJzYW1lIGxpbmVcIiBvciBcIm11bHRpcGxlIGxpbmVcIiBvbiBvYmplY3QgcHJvcGVydGllc1xuICAgICAgJ2tleXdvcmQtc3BhY2luZyc6IFsnZXJyb3InXSwgLy8gcmVxdWlyZSBhIHNwYWNlIGJlZm9yZSAmIGFmdGVyIGtleXdvcmRzXG4gICAgICAnYnJhY2Utc3R5bGUnOiBbJ2Vycm9yJywgJzF0YnMnLCB7IGFsbG93U2luZ2xlTGluZTogdHJ1ZSB9XSwgLy8gZW5mb3JjZSBvbmUgdHJ1ZSBicmFjZSBzdHlsZVxuICAgICAgJ3NwYWNlLWJlZm9yZS1ibG9ja3MnOiBbJ2Vycm9yJ10sIC8vIHJlcXVpcmUgc3BhY2UgYmVmb3JlIGJsb2Nrc1xuICAgICAgJ2N1cmx5JzogWydlcnJvcicsICdtdWx0aS1saW5lJywgJ2NvbnNpc3RlbnQnXSwgLy8gcmVxdWlyZSBjdXJseSBicmFjZXMgZm9yIG11bHRpbGluZSBjb250cm9sIHN0YXRlbWVudHNcbiAgICAgICdAdHlwZXNjcmlwdC1lc2xpbnQvbWVtYmVyLWRlbGltaXRlci1zdHlsZSc6IFsnZXJyb3InXSxcblxuICAgICAgLy8gUmVxdWlyZSBzZW1pY29sb25zXG4gICAgICAnc2VtaSc6IFsnZXJyb3InLCAnYWx3YXlzJ10sXG5cbiAgICAgIC8vIE1heCBsaW5lIGxlbmd0aHNcbiAgICAgICdtYXgtbGVuJzogWydlcnJvcicsIHtcbiAgICAgICAgY29kZTogMTUwLFxuICAgICAgICBpZ25vcmVVcmxzOiB0cnVlLCAvLyBNb3N0IGNvbW1vbiByZWFzb24gdG8gZGlzYWJsZSBpdFxuICAgICAgICBpZ25vcmVTdHJpbmdzOiB0cnVlLCAvLyBUaGVzZSBhcmUgbm90IGZhbnRhc3RpYyBidXQgbmVjZXNzYXJ5IGZvciBlcnJvciBtZXNzYWdlc1xuICAgICAgICBpZ25vcmVUZW1wbGF0ZUxpdGVyYWxzOiB0cnVlLFxuICAgICAgICBpZ25vcmVDb21tZW50czogdHJ1ZSxcbiAgICAgICAgaWdub3JlUmVnRXhwTGl0ZXJhbHM6IHRydWUsXG4gICAgICB9XSxcblxuICAgICAgLy8gRG9uJ3QgdW5uZWNlc3NhcmlseSBxdW90ZSBwcm9wZXJ0aWVzXG4gICAgICAncXVvdGUtcHJvcHMnOiBbJ2Vycm9yJywgJ2NvbnNpc3RlbnQtYXMtbmVlZGVkJ10sXG4gICAgfTtcblxuICAgIHRoaXMucnVsZXMgPSB7XG4gICAgICAuLi5mb3JtYXR0aW5nUnVsZXMsXG4gICAgICAvLyBSZXF1aXJlIHVzZSBvZiB0aGUgYGltcG9ydCB7IGZvbyB9IGZyb20gJ2Jhcic7YCBmb3JtIGluc3RlYWQgb2YgYGltcG9ydCBmb28gPSByZXF1aXJlKCdiYXInKTtgXG4gICAgICAnQHR5cGVzY3JpcHQtZXNsaW50L25vLXJlcXVpcmUtaW1wb3J0cyc6IFsnZXJyb3InXSxcblxuICAgICAgLy8gUmVxdWlyZSBhbGwgaW1wb3J0ZWQgZGVwZW5kZW5jaWVzIGFyZSBhY3R1YWxseSBkZWNsYXJlZCBpbiBwYWNrYWdlLmpzb25cbiAgICAgICdpbXBvcnQvbm8tZXh0cmFuZW91cy1kZXBlbmRlbmNpZXMnOiBbXG4gICAgICAgICdlcnJvcicsXG4gICAgICAgIHtcbiAgICAgICAgICAvLyBPbmx5IGFsbG93IGltcG9ydGluZyBkZXZEZXBlbmRlbmNpZXMgZnJvbSBcImRldmRpcnNcIi5cbiAgICAgICAgICBkZXZEZXBlbmRlbmNpZXM6ICgpID0+IHRoaXMucmVuZGVyRGV2RGVwc0FsbG93TGlzdCgpLFxuICAgICAgICAgIG9wdGlvbmFsRGVwZW5kZW5jaWVzOiBmYWxzZSwgLy8gRGlzYWxsb3cgaW1wb3J0aW5nIG9wdGlvbmFsIGRlcGVuZGVuY2llcyAodGhvc2Ugc2hvdWxkbid0IGJlIGluIHVzZSBpbiB0aGUgcHJvamVjdClcbiAgICAgICAgICBwZWVyRGVwZW5kZW5jaWVzOiB0cnVlLCAvLyBBbGxvdyBpbXBvcnRpbmcgcGVlciBkZXBlbmRlbmNpZXMgKHRoYXQgYXJlbid0IGFsc28gZGlyZWN0IGRlcGVuZGVuY2llcylcbiAgICAgICAgfSxcbiAgICAgIF0sXG5cbiAgICAgIC8vIFJlcXVpcmUgYWxsIGltcG9ydGVkIGxpYnJhcmllcyBhY3R1YWxseSByZXNvbHZlICghIXJlcXVpcmVkIGZvciBpbXBvcnQvbm8tZXh0cmFuZW91cy1kZXBlbmRlbmNpZXMgdG8gd29yayEhKVxuICAgICAgJ2ltcG9ydC9uby11bnJlc29sdmVkJzogWydlcnJvciddLFxuXG4gICAgICAvLyBSZXF1aXJlIGFuIG9yZGVyaW5nIG9uIGFsbCBpbXBvcnRzXG4gICAgICAnaW1wb3J0L29yZGVyJzogWyd3YXJuJywge1xuICAgICAgICBncm91cHM6IFsnYnVpbHRpbicsICdleHRlcm5hbCddLFxuICAgICAgICBhbHBoYWJldGl6ZTogeyBvcmRlcjogJ2FzYycsIGNhc2VJbnNlbnNpdGl2ZTogdHJ1ZSB9LFxuICAgICAgfV0sXG5cbiAgICAgIC8vIENhbm5vdCBpbXBvcnQgZnJvbSB0aGUgc2FtZSBtb2R1bGUgdHdpY2VcbiAgICAgICduby1kdXBsaWNhdGUtaW1wb3J0cyc6IFsnZXJyb3InXSxcblxuICAgICAgLy8gQ2Fubm90IHNoYWRvdyBuYW1lc1xuICAgICAgJ25vLXNoYWRvdyc6IFsnb2ZmJ10sXG4gICAgICAnQHR5cGVzY3JpcHQtZXNsaW50L25vLXNoYWRvdyc6IFsnZXJyb3InXSxcblxuICAgICAgLy8gUmVxdWlyZWQgc3BhY2luZyBpbiBwcm9wZXJ0eSBkZWNsYXJhdGlvbnMgKGNvcGllZCBmcm9tIFRTTGludCwgZGVmYXVsdHMgYXJlIGdvb2QpXG4gICAgICAna2V5LXNwYWNpbmcnOiBbJ2Vycm9yJ10sXG5cbiAgICAgIC8vIE5vIG11bHRpcGxlIGVtcHR5IGxpbmVzXG4gICAgICAnbm8tbXVsdGlwbGUtZW1wdHktbGluZXMnOiBbJ2Vycm9yJ10sXG5cbiAgICAgIC8vIE9uZSBvZiB0aGUgZWFzaWVzdCBtaXN0YWtlcyB0byBtYWtlXG4gICAgICAnQHR5cGVzY3JpcHQtZXNsaW50L25vLWZsb2F0aW5nLXByb21pc2VzJzogWydlcnJvciddLFxuXG4gICAgICAvLyBNYWtlIHN1cmUgdGhhdCBpbnNpZGUgdHJ5L2NhdGNoIGJsb2NrcywgcHJvbWlzZXMgYXJlICdyZXR1cm4gYXdhaXQnZWRcbiAgICAgIC8vIChtdXN0IGRpc2FibGUgdGhlIGJhc2UgcnVsZSBhcyBpdCBjYW4gcmVwb3J0IGluY29ycmVjdCBlcnJvcnMpXG4gICAgICAnbm8tcmV0dXJuLWF3YWl0JzogWydvZmYnXSxcbiAgICAgICdAdHlwZXNjcmlwdC1lc2xpbnQvcmV0dXJuLWF3YWl0JzogWydlcnJvciddLFxuXG4gICAgICAvLyBVc2VsZXNzIGRpZmYgcmVzdWx0c1xuICAgICAgJ25vLXRyYWlsaW5nLXNwYWNlcyc6IFsnZXJyb3InXSxcblxuICAgICAgLy8gTXVzdCB1c2UgZm9vLmJhciBpbnN0ZWFkIG9mIGZvb1snYmFyJ10gaWYgcG9zc2libGVcbiAgICAgICdkb3Qtbm90YXRpb24nOiBbJ2Vycm9yJ10sXG5cbiAgICAgIC8vIEFyZSB5b3Ugc3VyZSB8IGlzIG5vdCBhIHR5cG8gZm9yIHx8ID9cbiAgICAgICduby1iaXR3aXNlJzogWydlcnJvciddLFxuXG4gICAgICAvLyBNZW1iZXIgb3JkZXJpbmdcbiAgICAgICdAdHlwZXNjcmlwdC1lc2xpbnQvbWVtYmVyLW9yZGVyaW5nJzogWydlcnJvcicsIHtcbiAgICAgICAgZGVmYXVsdDogW1xuICAgICAgICAgICdwdWJsaWMtc3RhdGljLWZpZWxkJyxcbiAgICAgICAgICAncHVibGljLXN0YXRpYy1tZXRob2QnLFxuICAgICAgICAgICdwcm90ZWN0ZWQtc3RhdGljLWZpZWxkJyxcbiAgICAgICAgICAncHJvdGVjdGVkLXN0YXRpYy1tZXRob2QnLFxuICAgICAgICAgICdwcml2YXRlLXN0YXRpYy1maWVsZCcsXG4gICAgICAgICAgJ3ByaXZhdGUtc3RhdGljLW1ldGhvZCcsXG5cbiAgICAgICAgICAnZmllbGQnLFxuXG4gICAgICAgICAgLy8gQ29uc3RydWN0b3JzXG4gICAgICAgICAgJ2NvbnN0cnVjdG9yJywgLy8gPSBbXCJwdWJsaWMtY29uc3RydWN0b3JcIiwgXCJwcm90ZWN0ZWQtY29uc3RydWN0b3JcIiwgXCJwcml2YXRlLWNvbnN0cnVjdG9yXCJdXG5cbiAgICAgICAgICAvLyBNZXRob2RzXG4gICAgICAgICAgJ21ldGhvZCcsXG4gICAgICAgIF0sXG4gICAgICB9XSxcbiAgICB9O1xuXG4gICAgLy8gT3ZlcnJpZGVzIGZvciAucHJvamVucmMuanNcbiAgICB0aGlzLm92ZXJyaWRlcyA9IFtcbiAgICAgIHtcbiAgICAgICAgZmlsZXM6IFtQUk9KRU5fUkNdLFxuICAgICAgICBydWxlczoge1xuICAgICAgICAgICdAdHlwZXNjcmlwdC1lc2xpbnQvbm8tcmVxdWlyZS1pbXBvcnRzJzogJ29mZicsXG4gICAgICAgICAgJ2ltcG9ydC9uby1leHRyYW5lb3VzLWRlcGVuZGVuY2llcyc6ICdvZmYnLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICBdO1xuXG4gICAgdGhpcy5pZ25vcmVQYXR0ZXJucyA9IG9wdGlvbnMuaWdub3JlUGF0dGVybnMgPz8gW1xuICAgICAgJyouanMnLFxuICAgICAgYCEke1BST0pFTl9SQ31gLFxuICAgICAgJyouZC50cycsXG4gICAgICAnbm9kZV9tb2R1bGVzLycsXG4gICAgICAnKi5nZW5lcmF0ZWQudHMnLFxuICAgICAgJ2NvdmVyYWdlJyxcbiAgICBdO1xuXG4gICAgY29uc3QgdHNjb25maWcgPSBvcHRpb25zLnRzY29uZmlnUGF0aCA/PyAnLi90c2NvbmZpZy5qc29uJztcblxuICAgIGNvbnN0IHBsdWdpbnMgPSBbXG4gICAgICAnQHR5cGVzY3JpcHQtZXNsaW50JyxcbiAgICAgICdpbXBvcnQnLFxuICAgICAgLi4uKG9wdGlvbnMucHJldHRpZXIgPyBbJ3ByZXR0aWVyJ10gOiBbXSksXG4gICAgXTtcblxuICAgIGNvbnN0IGV4dGVuZHNDb25mID0gW1xuICAgICAgJ3BsdWdpbjppbXBvcnQvdHlwZXNjcmlwdCcsXG4gICAgICAuLi4ob3B0aW9ucy5wcmV0dGllciA/IFtcbiAgICAgICAgJ3ByZXR0aWVyJyxcbiAgICAgICAgJ3BsdWdpbjpwcmV0dGllci9yZWNvbW1lbmRlZCcsXG4gICAgICBdIDogW10pLFxuICAgIF07XG5cbiAgICB0aGlzLmNvbmZpZyA9IHtcbiAgICAgIGVudjoge1xuICAgICAgICBqZXN0OiB0cnVlLFxuICAgICAgICBub2RlOiB0cnVlLFxuICAgICAgfSxcbiAgICAgIHJvb3Q6IHRydWUsXG4gICAgICBwbHVnaW5zLFxuICAgICAgcGFyc2VyOiAnQHR5cGVzY3JpcHQtZXNsaW50L3BhcnNlcicsXG4gICAgICBwYXJzZXJPcHRpb25zOiB7XG4gICAgICAgIGVjbWFWZXJzaW9uOiAyMDE4LFxuICAgICAgICBzb3VyY2VUeXBlOiAnbW9kdWxlJyxcbiAgICAgICAgcHJvamVjdDogdHNjb25maWcsXG4gICAgICB9LFxuICAgICAgZXh0ZW5kczogZXh0ZW5kc0NvbmYsXG4gICAgICBzZXR0aW5nczoge1xuICAgICAgICAnaW1wb3J0L3BhcnNlcnMnOiB7XG4gICAgICAgICAgJ0B0eXBlc2NyaXB0LWVzbGludC9wYXJzZXInOiBbJy50cycsICcudHN4J10sXG4gICAgICAgIH0sXG4gICAgICAgICdpbXBvcnQvcmVzb2x2ZXInOiB7XG4gICAgICAgICAgLi4uKCBvcHRpb25zLmFsaWFzTWFwICYmIHtcbiAgICAgICAgICAgIGFsaWFzOiB7XG4gICAgICAgICAgICAgIG1hcDogT2JqZWN0LmVudHJpZXMob3B0aW9ucy5hbGlhc01hcCkubWFwKChbaywgdl0pID0+IFtrLCB2XSksXG4gICAgICAgICAgICAgIGV4dGVuc2lvbnM6IG9wdGlvbnMuYWxpYXNFeHRlbnNpb25zLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBub2RlOiB7fSxcbiAgICAgICAgICB0eXBlc2NyaXB0OiB7XG4gICAgICAgICAgICBwcm9qZWN0OiB0c2NvbmZpZyxcbiAgICAgICAgICAgIC4uLiggb3B0aW9ucy50c0Fsd2F5c1RyeVR5cGVzICE9PSBmYWxzZSAmJiB7IGFsd2F5c1RyeVR5cGVzOiB0cnVlIH0gKSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIGlnbm9yZVBhdHRlcm5zOiB0aGlzLmlnbm9yZVBhdHRlcm5zLFxuICAgICAgcnVsZXM6IHRoaXMucnVsZXMsXG4gICAgICBvdmVycmlkZXM6IHRoaXMub3ZlcnJpZGVzLFxuICAgIH07XG5cbiAgICBuZXcgSnNvbkZpbGUocHJvamVjdCwgJy5lc2xpbnRyYy5qc29uJywgeyBvYmo6IHRoaXMuY29uZmlnLCBtYXJrZXI6IGZhbHNlIH0pO1xuICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICBwdWJsaWMgYWRkUnVsZXMocnVsZXM6IHsgW3J1bGU6IHN0cmluZ106IGFueSB9KSB7XG4gICAgZm9yIChjb25zdCBbaywgdl0gb2YgT2JqZWN0LmVudHJpZXMocnVsZXMpKSB7XG4gICAgICB0aGlzLnJ1bGVzW2tdID0gdjtcbiAgICB9XG4gIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICBwdWJsaWMgYWRkT3ZlcnJpZGUob3ZlcnJpZGU6IEVzbGludE92ZXJyaWRlKSB7XG4gICAgdGhpcy5vdmVycmlkZXMucHVzaChvdmVycmlkZSk7XG4gIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcHVibGljIGFkZElnbm9yZVBhdHRlcm4ocGF0dGVybjogc3RyaW5nKSB7XG4gICAgdGhpcy5pZ25vcmVQYXR0ZXJucy5wdXNoKHBhdHRlcm4pO1xuICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcHVibGljIGFsbG93RGV2RGVwcyhwYXR0ZXJuOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9hbGxvd0RldkRlcHMuYWRkKHBhdHRlcm4pO1xuICB9XG5cbiAgcHJpdmF0ZSByZW5kZXJEZXZEZXBzQWxsb3dMaXN0KCkge1xuICAgIHJldHVybiBBcnJheS5mcm9tKHRoaXMuX2FsbG93RGV2RGVwcyk7XG4gIH1cbn1cbiJdfQ==
|