cdklabs-projen-project-types 0.6.0 → 0.6.1
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 +7 -7
- package/.yarn/install-state.gz +0 -0
- package/lib/cdk.js +2 -2
- package/lib/cdklabs.js +3 -3
- package/lib/jsii.js +1 -1
- package/lib/rosetta.js +1 -1
- package/lib/yarn/constraints.js +1 -1
- package/lib/yarn/jsii-build.js +1 -1
- package/lib/yarn/monorepo-release.js +1 -1
- package/lib/yarn/monorepo.js +2 -2
- package/lib/yarn/typescript-workspace-release.js +1 -1
- package/lib/yarn/typescript-workspace.js +6 -4
- package/package.json +5 -5
package/.jsii
CHANGED
|
@@ -11663,7 +11663,7 @@
|
|
|
11663
11663
|
"kind": "interface",
|
|
11664
11664
|
"locationInModule": {
|
|
11665
11665
|
"filename": "src/yarn/typescript-workspace.ts",
|
|
11666
|
-
"line":
|
|
11666
|
+
"line": 423
|
|
11667
11667
|
},
|
|
11668
11668
|
"name": "ReferenceOptions",
|
|
11669
11669
|
"namespace": "yarn",
|
|
@@ -11679,7 +11679,7 @@
|
|
|
11679
11679
|
"immutable": true,
|
|
11680
11680
|
"locationInModule": {
|
|
11681
11681
|
"filename": "src/yarn/typescript-workspace.ts",
|
|
11682
|
-
"line":
|
|
11682
|
+
"line": 434
|
|
11683
11683
|
},
|
|
11684
11684
|
"name": "versionType",
|
|
11685
11685
|
"optional": true,
|
|
@@ -11783,7 +11783,7 @@
|
|
|
11783
11783
|
},
|
|
11784
11784
|
"locationInModule": {
|
|
11785
11785
|
"filename": "src/yarn/typescript-workspace.ts",
|
|
11786
|
-
"line":
|
|
11786
|
+
"line": 410
|
|
11787
11787
|
},
|
|
11788
11788
|
"name": "customizeReference",
|
|
11789
11789
|
"parameters": [
|
|
@@ -11808,7 +11808,7 @@
|
|
|
11808
11808
|
},
|
|
11809
11809
|
"locationInModule": {
|
|
11810
11810
|
"filename": "src/yarn/typescript-workspace.ts",
|
|
11811
|
-
"line":
|
|
11811
|
+
"line": 364
|
|
11812
11812
|
},
|
|
11813
11813
|
"name": "preSynthesize",
|
|
11814
11814
|
"overrides": "projen.Project"
|
|
@@ -11821,7 +11821,7 @@
|
|
|
11821
11821
|
},
|
|
11822
11822
|
"locationInModule": {
|
|
11823
11823
|
"filename": "src/yarn/typescript-workspace.ts",
|
|
11824
|
-
"line":
|
|
11824
|
+
"line": 401
|
|
11825
11825
|
},
|
|
11826
11826
|
"name": "workspaceDependencies",
|
|
11827
11827
|
"parameters": [
|
|
@@ -15241,6 +15241,6 @@
|
|
|
15241
15241
|
"usedFeatures": [
|
|
15242
15242
|
"class-covariant-overrides"
|
|
15243
15243
|
],
|
|
15244
|
-
"version": "0.6.
|
|
15245
|
-
"fingerprint": "
|
|
15244
|
+
"version": "0.6.1",
|
|
15245
|
+
"fingerprint": "y2gdol/Sa0BhinajNQsxdgcDrKYIO8MqP6VOGJ5Yz80="
|
|
15246
15246
|
}
|
package/.yarn/install-state.gz
CHANGED
|
Binary file
|
package/lib/cdk.js
CHANGED
|
@@ -12,7 +12,7 @@ const rosetta_1 = require("./rosetta");
|
|
|
12
12
|
* @pjid cdk-construct-lib
|
|
13
13
|
*/
|
|
14
14
|
class CdkConstructLibrary extends projen_1.awscdk.AwsCdkConstructLibrary {
|
|
15
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "cdklabs-projen-project-types.CdkConstructLibrary", version: "0.6.
|
|
15
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "cdklabs-projen-project-types.CdkConstructLibrary", version: "0.6.1" };
|
|
16
16
|
static stabilityRequirements(options) {
|
|
17
17
|
const errors = [];
|
|
18
18
|
if (!options.publishToPypi) {
|
|
@@ -61,7 +61,7 @@ exports.CdkConstructLibrary = CdkConstructLibrary;
|
|
|
61
61
|
* @pjid cdk-ts-proj
|
|
62
62
|
*/
|
|
63
63
|
class CdkTypeScriptProject extends projen_1.typescript.TypeScriptProject {
|
|
64
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "cdklabs-projen-project-types.CdkTypeScriptProject", version: "0.6.
|
|
64
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "cdklabs-projen-project-types.CdkTypeScriptProject", version: "0.6.1" };
|
|
65
65
|
private;
|
|
66
66
|
constructor(options) {
|
|
67
67
|
const opts = (0, common_options_1.withCommonOptionsDefaults)(options);
|
package/lib/cdklabs.js
CHANGED
|
@@ -112,7 +112,7 @@ function createNpmPublishingDefaults() {
|
|
|
112
112
|
* @pjid cdklabs-construct-lib
|
|
113
113
|
*/
|
|
114
114
|
class CdklabsConstructLibrary extends cdk_1.CdkConstructLibrary {
|
|
115
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "cdklabs-projen-project-types.CdklabsConstructLibrary", version: "0.6.
|
|
115
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "cdklabs-projen-project-types.CdklabsConstructLibrary", version: "0.6.1" };
|
|
116
116
|
constructor(options) {
|
|
117
117
|
const cdklabsPublishingDefaultProps = (options.cdklabsPublishingDefaults ?? true) ?
|
|
118
118
|
createCdklabsPublishingDefaults(options.name, options.jsiiTargetLanguages) : {};
|
|
@@ -134,7 +134,7 @@ exports.CdklabsConstructLibrary = CdklabsConstructLibrary;
|
|
|
134
134
|
* @pjid cdklabs-ts-proj
|
|
135
135
|
*/
|
|
136
136
|
class CdklabsTypeScriptProject extends cdk_1.CdkTypeScriptProject {
|
|
137
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "cdklabs-projen-project-types.CdklabsTypeScriptProject", version: "0.6.
|
|
137
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "cdklabs-projen-project-types.CdklabsTypeScriptProject", version: "0.6.1" };
|
|
138
138
|
constructor(options) {
|
|
139
139
|
// the leftmost object is mutated and returned by deepMerge
|
|
140
140
|
const mergedOptions = (0, util_1.deepMerge)([
|
|
@@ -154,7 +154,7 @@ exports.CdklabsTypeScriptProject = CdklabsTypeScriptProject;
|
|
|
154
154
|
* @pjid cdklabs-jsii-proj
|
|
155
155
|
*/
|
|
156
156
|
class CdklabsJsiiProject extends jsii_1.CdkJsiiProject {
|
|
157
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "cdklabs-projen-project-types.CdklabsJsiiProject", version: "0.6.
|
|
157
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "cdklabs-projen-project-types.CdklabsJsiiProject", version: "0.6.1" };
|
|
158
158
|
constructor(options) {
|
|
159
159
|
const cdklabsPublishingDefaultProps = (options.cdklabsPublishingDefaults ?? true) ?
|
|
160
160
|
createCdklabsPublishingDefaults(options.name, options.jsiiTargetLanguages) : {};
|
package/lib/jsii.js
CHANGED
|
@@ -10,7 +10,7 @@ const common_options_1 = require("./common-options");
|
|
|
10
10
|
* @pjid cdk-jsii-proj
|
|
11
11
|
*/
|
|
12
12
|
class CdkJsiiProject extends projen_1.cdk.JsiiProject {
|
|
13
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "cdklabs-projen-project-types.CdkJsiiProject", version: "0.6.
|
|
13
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "cdklabs-projen-project-types.CdkJsiiProject", version: "0.6.1" };
|
|
14
14
|
private;
|
|
15
15
|
constructor(options) {
|
|
16
16
|
const opts = (0, common_options_1.withCommonOptionsDefaults)({
|
package/lib/rosetta.js
CHANGED
|
@@ -10,7 +10,7 @@ const projen_1 = require("projen");
|
|
|
10
10
|
* ensure that rosetta will run successfully
|
|
11
11
|
*/
|
|
12
12
|
class Rosetta extends projen_1.Component {
|
|
13
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "cdklabs-projen-project-types.Rosetta", version: "0.6.
|
|
13
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "cdklabs-projen-project-types.Rosetta", version: "0.6.1" };
|
|
14
14
|
constructor(project, options = {}) {
|
|
15
15
|
super(project);
|
|
16
16
|
const strict = options.strict ?? true;
|
package/lib/yarn/constraints.js
CHANGED
|
@@ -5,7 +5,7 @@ const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
|
|
|
5
5
|
const projen_1 = require("projen");
|
|
6
6
|
const DEV_DEP_TYPES = [projen_1.DependencyType.BUILD, projen_1.DependencyType.DEVENV, projen_1.DependencyType.TEST];
|
|
7
7
|
class Constraints extends projen_1.Component {
|
|
8
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "cdklabs-projen-project-types.yarn.Constraints", version: "0.6.
|
|
8
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "cdklabs-projen-project-types.yarn.Constraints", version: "0.6.1" };
|
|
9
9
|
packages;
|
|
10
10
|
constructor(project, options) {
|
|
11
11
|
super(project);
|
package/lib/yarn/jsii-build.js
CHANGED
|
@@ -11,7 +11,7 @@ const rosetta_1 = require("../rosetta");
|
|
|
11
11
|
* adding monorepo-appropriate defaults (Rosetta, composite, pypiClassifiers).
|
|
12
12
|
*/
|
|
13
13
|
class WorkspaceJsiiBuild {
|
|
14
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "cdklabs-projen-project-types.yarn.WorkspaceJsiiBuild", version: "0.6.
|
|
14
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "cdklabs-projen-project-types.yarn.WorkspaceJsiiBuild", version: "0.6.1" };
|
|
15
15
|
options;
|
|
16
16
|
constructor(options = {}) {
|
|
17
17
|
this.options = options;
|
|
@@ -47,7 +47,7 @@ const LATEST_COMMIT_OUTPUT = 'latest_commit';
|
|
|
47
47
|
const ALL_PACKAGES_INPUT = '*all packages*';
|
|
48
48
|
class MonorepoRelease extends projen_1.Component {
|
|
49
49
|
options;
|
|
50
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "cdklabs-projen-project-types.yarn.MonorepoRelease", version: "0.6.
|
|
50
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "cdklabs-projen-project-types.yarn.MonorepoRelease", version: "0.6.1" };
|
|
51
51
|
/**
|
|
52
52
|
* Returns the `MonorepoReleaseWorkflow` component of a project or `undefined` if the project
|
|
53
53
|
* does not have a MonorepoReleaseWorkflow component.
|
package/lib/yarn/monorepo.js
CHANGED
|
@@ -46,7 +46,7 @@ const MONOREPO_SYM = Symbol.for('cdklabs-projen-project-types.yarn.Monorepo');
|
|
|
46
46
|
*/
|
|
47
47
|
class Monorepo extends projen_1.typescript.TypeScriptProject {
|
|
48
48
|
settings;
|
|
49
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "cdklabs-projen-project-types.yarn.Monorepo", version: "0.6.
|
|
49
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "cdklabs-projen-project-types.yarn.Monorepo", version: "0.6.1" };
|
|
50
50
|
static isMonorepo(x) {
|
|
51
51
|
return Boolean(x && typeof x === 'object' && MONOREPO_SYM in x);
|
|
52
52
|
}
|
|
@@ -305,7 +305,7 @@ function getObjFromFile(project, file) {
|
|
|
305
305
|
* @pjid cdklabs-yarn-monorepo
|
|
306
306
|
*/
|
|
307
307
|
class CdkLabsMonorepo extends Monorepo {
|
|
308
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "cdklabs-projen-project-types.yarn.CdkLabsMonorepo", version: "0.6.
|
|
308
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "cdklabs-projen-project-types.yarn.CdkLabsMonorepo", version: "0.6.1" };
|
|
309
309
|
constructor(options) {
|
|
310
310
|
super({
|
|
311
311
|
projenrcTs: true,
|
|
@@ -39,7 +39,7 @@ const path = __importStar(require("node:path"));
|
|
|
39
39
|
const projen_1 = require("projen");
|
|
40
40
|
const gather_versions_task_1 = require("./gather-versions.task");
|
|
41
41
|
class WorkspaceRelease extends projen_1.Component {
|
|
42
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "cdklabs-projen-project-types.yarn.WorkspaceRelease", version: "0.6.
|
|
42
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "cdklabs-projen-project-types.yarn.WorkspaceRelease", version: "0.6.1" };
|
|
43
43
|
publisher;
|
|
44
44
|
version;
|
|
45
45
|
workspace;
|
|
@@ -8,7 +8,7 @@ const projen_1 = require("projen");
|
|
|
8
8
|
* A TypeScript workspace in a `yarn.Monorepo`
|
|
9
9
|
*/
|
|
10
10
|
class TypeScriptWorkspace extends projen_1.typescript.TypeScriptProject {
|
|
11
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "cdklabs-projen-project-types.yarn.TypeScriptWorkspace", version: "0.6.
|
|
11
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "cdklabs-projen-project-types.yarn.TypeScriptWorkspace", version: "0.6.1" };
|
|
12
12
|
workspaceDirectory;
|
|
13
13
|
bundledDeps = [];
|
|
14
14
|
isPrivatePackage;
|
|
@@ -248,9 +248,11 @@ class TypeScriptWorkspace extends projen_1.typescript.TypeScriptProject {
|
|
|
248
248
|
default:
|
|
249
249
|
this.addDeps(ref.name);
|
|
250
250
|
}
|
|
251
|
-
const relativePath = (0, path_1.relative)(this.outdir, ref.outdir);
|
|
252
251
|
for (const tsconfig of [this.tsconfig, this.tsconfigDev]) {
|
|
253
|
-
tsconfig
|
|
252
|
+
if (tsconfig) {
|
|
253
|
+
const relativePath = (0, path_1.relative)((0, path_1.dirname)(tsconfig.file.absolutePath), ref.outdir);
|
|
254
|
+
tsconfig?.file.addToArray('references', { path: relativePath });
|
|
255
|
+
}
|
|
254
256
|
}
|
|
255
257
|
this.excludeFromUpgrade.push(ref.name);
|
|
256
258
|
if (type === projen_1.DependencyType.RUNTIME || type === projen_1.DependencyType.PEER) {
|
|
@@ -319,4 +321,4 @@ function isWorkspaceReference(x) {
|
|
|
319
321
|
function isNotWorkspaceReference(x) {
|
|
320
322
|
return !isWorkspaceReference(x);
|
|
321
323
|
}
|
|
322
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXNjcmlwdC13b3Jrc3BhY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMveWFybi90eXBlc2NyaXB0LXdvcmtzcGFjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQ0EsK0JBQWdDO0FBQ2hDLG1DQUEwRztBQW1EMUc7O0dBRUc7QUFDSCxNQUFhLG1CQUFvQixTQUFRLG1CQUFVLENBQUMsaUJBQWlCOztJQUVuRCxrQkFBa0IsQ0FBUztJQUMzQixXQUFXLEdBQWEsRUFBRSxDQUFDO0lBQzNCLGdCQUFnQixDQUFVO0lBQzFCLFdBQVcsR0FBRyxjQUFjLENBQUM7SUFFNUIsUUFBUSxDQUFXO0lBQ25CLGdCQUFnQixDQUFVO0lBQzFCLGtCQUFrQixDQUFXO0lBQzdCLGVBQWUsR0FBZ0MsRUFBRSxDQUFDO0lBRW5FLFlBQVksT0FBbUM7UUFDN0MsTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUN2QixPQUFPLEVBQ1AsUUFBUSxFQUNSLE1BQU0sRUFDTixhQUFhLEVBQ2IsTUFBTSxFQUNOLFVBQVUsRUFDVixTQUFTLEVBQ1Qsd0JBQXdCLEVBQ3hCLFlBQVksRUFDWixxQkFBcUIsRUFDckIsa0JBQWtCLENBQ25CLENBQUM7UUFFRixNQUFNLFNBQVMsR0FBRyxTQUFTLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQztRQUMzQyxNQUFNLFdBQVcsR0FBRyxTQUFTLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQztRQUUvQyxNQUFNLE9BQU8sR0FBRyxTQUFTLENBQUMsY0FBYyxJQUFJLFVBQVUsQ0FBQztRQUN2RCxNQUFNLGtCQUFrQixHQUFHLEdBQUcsT0FBTyxJQUFJLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUV4RCxNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLGVBQWUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLG1CQUFVLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENB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J3BhdGgnO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBqYXZhc2NyaXB0LCB0eXBlc2NyaXB0LCBUYXNrU3RlcCwgU291cmNlQ29kZSwgRGVwZW5kZW5jeVR5cGUsIFByb2plY3QgfSBmcm9tICdwcm9qZW4nO1xuaW1wb3J0IHsgTW9ub3JlcG8gfSBmcm9tICcuL21vbm9yZXBvJztcbmltcG9ydCB7IFR5cGVTY3JpcHRXb3Jrc3BhY2VPcHRpb25zIH0gZnJvbSAnLi90eXBlc2NyaXB0LXdvcmtzcGFjZS1vcHRpb25zJztcblxuLyoqXG4gKiBXaGF0IGtpbmQgb2Ygc2VtdmVyIGRlcGVuZGVuY3kgdG8gdGFrZVxuICpcbiAqIC0gJ2FueS1taW5vcicgY29ycmVzcG9uZHMgdG8gJ14xJ1xuICogLSAnZnV0dXJlLW1pbm9yJyBjb3JyZXNwb25kcyB0byAnXjEuMi4zJ1xuICogLSAnYW55LXBhdGNoJyB0byAnfjEuMidcbiAqIC0gJ2Z1dHVyZS1wYXRjaCcgY29ycmVzcG9uZHMgdG8gJ34xLjIuMydcbiAqIC0gJ2V4YWN0JyBjb3JyZXNwb25kcyB0byAnMS4yLjMnXG4gKiAtICdhbnktZnV0dXJlJyBjb3JyZXNwb25kcyB0byAnPj0xLjIuMydcbiAqIC0gJ2FueScgY29ycmVzcG9uZHMgdG8gJyonXG4gKi9cbmV4cG9ydCB0eXBlIFZlcnNpb25UeXBlID0gJ2FueS1taW5vcicgfCAnZnV0dXJlLW1pbm9yJyB8ICdhbnktcGF0Y2gnIHwgJ2Z1dHVyZS1wYXRjaCcgfCAnZXhhY3QnIHwgJ2FueS1mdXR1cmUnIHwgJ2FueSc7XG5cbi8qKlxuICogQSByZWZlcmVuY2UgdG8gYSB3b3Jrc3BhY2UgaW4gdGhlIHNhbWUgbW9ub3JlcG9cbiAqXG4gKiBUaGlzIGNhbiBiZSB1c2VkIHRvIHJlZmVyZW5jZSBwYWNrYWdlcyBpbiB0aGUgc2FtZSBtb25vcmVwbyB3aGVuIGRlY2xhcmluZ1xuICogYGRlcHNgIGFuZCBgZGV2RGVwc2AuXG4gKlxuICogQnkgZGVmYXVsdCwgYWxsIGBUeXBlU2NyaXB0V29ya3NwYWNlYHMgaW1wbGVtZW50IHRoaXMgaW50ZXJmYWNlLCByZXByZXNlbnRpbmcgdGhlbXNlbHZlc1xuICogd2l0aCBhIGBeYCBkZXBlbmRlbmN5IGFuZCBhIHJlc3RyaWN0aW9uIHRoYXQgcHVibGljIHBhY2thZ2VzIG11c3QgaGF2ZSBwdWJsaWMgZGVwZW5kZW5jaWVzLlxuICpcbiAqIFRoZSBtZXRob2QgYC5jdXN0b21pemVSZWZlcmVuY2UoeyAuLi4gfSlgIGNhbiBiZSB1c2VkIHRvIGNyZWF0ZSBhIHdvcmtzcGFjZSByZWZlcmVuY2Ugd2l0aFxuICogZGlmZmVyZW50IGJlaGF2aW9yLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElXb3Jrc3BhY2VSZWZlcmVuY2Uge1xuICAvKipcbiAgICogV2hldGhlciB0aGUgcmVmZXJlbmNlZCB3b3Jrc3BhY2UgcGFja2FnZSBpcyBwcml2YXRlXG4gICAqL1xuICByZWFkb25seSBpc1ByaXZhdGVQYWNrYWdlOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgZGVwZW5kZW5jeSBuYW1lIG9mIHRoZSBwYWNrYWdlXG4gICAqL1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBzZW12ZXIgcmFuZ2UgdGhhdCBzaG91bGQgYmUgdXNlZCB0byByZWZlcmVuY2UgdGhpcyBwYWNrYWdlIHdoZW4gaXQgaXMgcmVsZWFzZWRcbiAgICovXG4gIHJlYWRvbmx5IHZlcnNpb25UeXBlOiBWZXJzaW9uVHlwZTtcblxuICAvKipcbiAgICogVGhlIGRpcmVjdG9yeSB0aGF0IGhvbGRzIHRoaXMgcGFja2FnZSBpbiB0aGUgbW9ub3JlcG9cbiAgICovXG4gIHJlYWRvbmx5IG91dGRpcjogc3RyaW5nO1xufVxuXG4vKipcbiAqIEEgVHlwZVNjcmlwdCB3b3Jrc3BhY2UgaW4gYSBgeWFybi5Nb25vcmVwb2BcbiAqL1xuZXhwb3J0IGNsYXNzIFR5cGVTY3JpcHRXb3Jrc3BhY2UgZXh0ZW5kcyB0eXBlc2NyaXB0LlR5cGVTY3JpcHRQcm9qZWN0IGltcGxlbWVudHMgSVdvcmtzcGFjZVJlZmVyZW5jZSB7XG4gIHB1YmxpYyBkZWNsYXJlIHJlYWRvbmx5IHBhcmVudDogTW9ub3JlcG8gfCB1bmRlZmluZWQ7XG4gIHB1YmxpYyByZWFkb25seSB3b3Jrc3BhY2VEaXJlY3Rvcnk6IHN0cmluZztcbiAgcHVibGljIHJlYWRvbmx5IGJ1bmRsZWREZXBzOiBzdHJpbmdbXSA9IFtdO1xuICBwdWJsaWMgcmVhZG9ubHkgaXNQcml2YXRlUGFja2FnZTogYm9vbGVhbjtcbiAgcHVibGljIHJlYWRvbmx5IHZlcnNpb25UeXBlID0gJ2Z1dHVyZS1taW5vcic7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBtb25vcmVwbzogTW9ub3JlcG87XG4gIHByaXZhdGUgcmVhZG9ubHkgYWxsb3dQcml2YXRlRGVwczogYm9vbGVhbjtcbiAgcHJpdmF0ZSByZWFkb25seSBleGNsdWRlRnJvbVVwZ3JhZGU6IHN0cmluZ1tdO1xuICBwcml2YXRlIHJlYWRvbmx5IHJlcG9SdW50aW1lRGVwczogUmVjb3JkPHN0cmluZywgVmVyc2lvblR5cGU+ID0ge307XG5cbiAgY29uc3RydWN0b3Iob3B0aW9uczogVHlwZVNjcmlwdFdvcmtzcGFjZU9wdGlvbnMpIHtcbiAgICBjb25zdCByZW1haW5kZXIgPSB3aXRob3V0KFxuICAgICAgb3B0aW9ucyxcbiAgICAgICdwYXJlbnQnLFxuICAgICAgJ25hbWUnLFxuICAgICAgJ2Rlc2NyaXB0aW9uJyxcbiAgICAgICdkZXBzJyxcbiAgICAgICdwZWVyRGVwcycsXG4gICAgICAnZGV2RGVwcycsXG4gICAgICAnZXhjbHVkZURlcHNGcm9tVXBncmFkZScsXG4gICAgICAncmVwb3NpdG9yeScsXG4gICAgICAnd29ya2Zsb3dOb2RlVmVyc2lvbicsXG4gICAgICAnYWxsb3dQcml2YXRlRGVwcycsXG4gICAgKTtcblxuICAgIGNvbnN0IHVzZUVzbGludCA9IHJlbWFpbmRlci5lc2xpbnQgPz8gdHJ1ZTtcbiAgICBjb25zdCB1c2VQcmV0dGllciA9IHJlbWFpbmRlci5wcmV0dGllciA/PyB0cnVlO1xuXG4gICAgY29uc3Qgd3NTY29wZSA9IHJlbWFpbmRlci53b3Jrc3BhY2VTY29wZSA/PyAncGFja2FnZXMnO1xuICAgIGNvbnN0IHdvcmtzcGFjZURpcmVjdG9yeSA9IGAke3dzU2NvcGV9LyR7b3B0aW9ucy5uYW1lfWA7XG5cbiAgICBjb25zdCBucG1BY2Nlc3MgPSBvcHRpb25zLnBhcmVudC5tb25vcmVwb1JlbGVhc2UgJiYgIW9wdGlvbnMucHJpdmF0ZSA/IGphdmFzY3JpcHQuTnBtQWNjZXNzLlBVQkxJQyA6IHVuZGVmaW5lZDtcblxuICAgIGNvbnN0IHJlbGVhc2VFbnZpcm9ubWVudCA9IG9wdGlvbnMucmVsZWFzZUVudmlyb25tZW50ID8/IG9wdGlvbnMucGFyZW50LnNldHRpbmdzLnJlbGVhc2VFbnZpcm9ubWVudDtcblxuICAgIGNvbnN0IGV4Y2x1ZGVGcm9tVXBncmFkZSA9IFtcbiAgICAgIC4uLihvcHRpb25zLmV4Y2x1ZGVEZXBzRnJvbVVwZ3JhZGUgPz8gW10pLFxuICAgIF07XG5cbiAgICBzdXBlcih7XG4gICAgICBwYXJlbnQ6IG9wdGlvbnMucGFyZW50LFxuICAgICAgbmFtZTogb3B0aW9ucy5uYW1lLFxuICAgICAgZGVzY3JpcHRpb246IG9wdGlvbnMuZGVzY3JpcHRpb24sXG4gICAgICByZXBvc2l0b3J5OiBvcHRpb25zLnJlcG9zaXRvcnkgPz8gb3B0aW9ucy5wYXJlbnQucmVwb3NpdG9yeVVybCxcbiAgICAgIHJlcG9zaXRvcnlEaXJlY3Rvcnk6IHdvcmtzcGFjZURpcmVjdG9yeSxcbiAgICAgIG91dGRpcjogd29ya3NwYWNlRGlyZWN0b3J5LFxuICAgICAgZGVmYXVsdFJlbGVhc2VCcmFuY2g6ICdSRVFVSVJFRC1CVVQtU0hPVUxELU5PVC1CRScsXG4gICAgICBwYWNrYWdlTWFuYWdlcjogb3B0aW9ucy5wYXJlbnQucGFja2FnZS5wYWNrYWdlTWFuYWdlcixcbiAgICAgIHJlbGVhc2U6IGZhbHNlLFxuICAgICAgcGFja2FnZTogIW9wdGlvbnMucHJpdmF0ZSxcbiAgICAgIGVzbGludDogdXNlRXNsaW50LFxuICAgICAgcHJldHRpZXI6IHVzZVByZXR0aWVyLFxuICAgICAgcHJldHRpZXJPcHRpb25zOiB1c2VQcmV0dGllclxuICAgICAgICA/IHtcbiAgICAgICAgICBvdmVycmlkZXM6IG9wdGlvbnMucGFyZW50LnByZXR0aWVyPy5vdmVycmlkZXMsXG4gICAgICAgICAgc2V0dGluZ3M6IG9wdGlvbnMucGFyZW50LnByZXR0aWVyPy5zZXR0aW5ncyxcbiAgICAgICAgICAuLi5yZW1haW5kZXIucHJldHRpZXJPcHRpb25zLFxuICAgICAgICB9XG4gICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgZXNsaW50T3B0aW9uczogdXNlRXNsaW50XG4gICAgICAgID8ge1xuICAgICAgICAgIGRpcnM6IFtyZW1haW5kZXIuc3JjZGlyID8/ICdzcmMnXSxcbiAgICAgICAgICBkZXZkaXJzOiBbcmVtYWluZGVyLnRlc3RkaXIgPz8gJ3Rlc3QnLCAnYnVpbGQtdG9vbHMnXSxcbiAgICAgICAgICAuLi5yZW1haW5kZXIuZXNsaW50T3B0aW9ucyxcbiAgICAgICAgICBwcmV0dGllcjogdXNlUHJldHRpZXIsXG4gICAgICAgIH1cbiAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICBzYW1wbGVDb2RlOiBmYWxzZSxcblxuICAgICAgLy8gYWRkIG5vbiB3b3Jrc3BhY2UgZGVwZW5kZW5jaWVzIGhlcmVcbiAgICAgIC8vIHdvcmtzcGFjZSByZWZzIGFyZSBhZGRlZCBsYXRlclxuICAgICAgZGVwczogb3B0aW9ucy5kZXBzPy5maWx0ZXIoaXNOb3RXb3Jrc3BhY2VSZWZlcmVuY2UpLFxuICAgICAgcGVlckRlcHM6IG9wdGlvbnMucGVlckRlcHM/LmZpbHRlcihpc05vdFdvcmtzcGFjZVJlZmVyZW5jZSksXG4gICAgICBkZXZEZXBzOiBvcHRpb25zLmRldkRlcHM/LmZpbHRlcihpc05vdFdvcmtzcGFjZVJlZmVyZW5jZSksXG5cbiAgICAgIHByb2plbkRldkRlcGVuZGVuY3k6IHRydWUsXG4gICAgICByZWxlYXNlRW52aXJvbm1lbnQsXG5cbiAgICAgIGRlcHNVcGdyYWRlOiBvcHRpb25zLmRlcHNVcGdyYWRlID8/IHRydWUsXG4gICAgICBkZXBzVXBncmFkZU9wdGlvbnM6IHtcbiAgICAgICAgd29ya2Zsb3c6IGZhbHNlLFxuICAgICAgICBjb29sZG93bjogb3B0aW9ucy5wYXJlbnQuc2V0dGluZ3MuZGVwc1VwZ3JhZGVPcHRpb25zPy5jb29sZG93biA/PyAob3B0aW9ucy5wYXJlbnQuc2V0dGluZ3MueWFybkJlcnJ5ID8gMyA6IHVuZGVmaW5lZCksXG4gICAgICAgIGV4Y2x1ZGU6IGV4Y2x1ZGVGcm9tVXBncmFkZSxcbiAgICAgIH0sXG5cbiAgICAgIG5wbUFjY2VzcyxcblxuICAgICAgLy8gRGV2aWF0aW9uIGZyb20gdXBzdHJlYW0gcHJvamVuOiB1cHN0cmVhbSBwcm9qZW4gZGVmYXVsdHMgdG8gbWluTm9kZVZlcnNpb24sIGJ1dCB3ZSBoYXZlIHRvbyBtYW55IHdvcmtmbG93c1xuICAgICAgLy8gdGhhdCB1c2UgdG9vbHMgdGhhdCB3YW50IGEgcmVjZW50IE5vZGUgdmVyc2lvbiwgc28gZGVmYXVsdCB0byBhIHJlYXNvbmFibGUgZmxvYXRpbmcgdmVyc2lvbi5cbiAgICAgIHdvcmtmbG93Tm9kZVZlcnNpb246IG9wdGlvbnMud29ya2Zsb3dOb2RlVmVyc2lvbiA/PyAnbHRzLyonLFxuXG4gICAgICAuLi5yZW1haW5kZXIsXG4gICAgfSk7XG5cbiAgICB0aGlzLm1vbm9yZXBvID0gb3B0aW9ucy5wYXJlbnQ7XG4gICAgdGhpcy5pc1ByaXZhdGVQYWNrYWdlID0gb3B0aW9ucy5wcml2YXRlID8/IGZhbHNlO1xuICAgIHRoaXMuYWxsb3dQcml2YXRlRGVwcyA9IG9wdGlvbnMuYWxsb3dQcml2YXRlRGVwcyA/PyBmYWxzZTtcbiAgICB0aGlzLmV4Y2x1ZGVGcm9tVXBncmFkZSA9IGV4Y2x1ZGVGcm9tVXBncmFkZTtcbiAgICB0aGlzLndvcmtzcGFjZURpcmVjdG9yeSA9IHdvcmtzcGFjZURpcmVjdG9yeTtcblxuICAgIC8vIFJlZ2lzdGVyIHdpdGggcmVsZWFzZSB3b3JrZmxvd1xuICAgIHRoaXMubW9ub3JlcG8ubW9ub3JlcG9SZWxlYXNlPy5hZGRXb3Jrc3BhY2UodGhpcywge1xuICAgICAgcHJpdmF0ZTogdGhpcy5pc1ByaXZhdGVQYWNrYWdlLFxuICAgICAgd29ya2Zsb3dOb2RlVmVyc2lvbjogdGhpcy5ub2RlVmVyc2lvbixcbiAgICAgIG5wbURpc3RUYWc6IG9wdGlvbnMubnBtRGlzdFRhZyxcbiAgICAgIC8vIEluaGVyaXQgc2V0dGluZyBmcm9tIE1vbm9yZXBvIGlmIGNvbmZpZ3VyZWRcbiAgICAgIG5wbVRydXN0ZWRQdWJsaXNoaW5nOiBvcHRpb25zLm5wbVRydXN0ZWRQdWJsaXNoaW5nID8/IHRoaXMubW9ub3JlcG8uc2V0dGluZ3MubnBtVHJ1c3RlZFB1Ymxpc2hpbmcsXG4gICAgICBlbnZpcm9ubWVudDogcmVsZWFzZUVudmlyb25tZW50LFxuICAgICAgcmVsZWFzYWJsZUNvbW1pdHM6IG9wdGlvbnMucmVsZWFzYWJsZUNvbW1pdHMsXG4gICAgICBuZXh0VmVyc2lvbkNvbW1hbmQ6IG9wdGlvbnMubmV4dFZlcnNpb25Db21tYW5kLFxuICAgICAgdmVyc2lvbkJyYW5jaE9wdGlvbnM6IHtcbiAgICAgICAgbWFqb3JWZXJzaW9uOiBvcHRpb25zLm1ham9yVmVyc2lvbixcbiAgICAgICAgbWluTWFqb3JWZXJzaW9uOiBvcHRpb25zLm1pbk1ham9yVmVyc2lvbixcbiAgICAgICAgcHJlcmVsZWFzZTogb3B0aW9ucy5wcmVyZWxlYXNlLFxuICAgICAgfSxcbiAgICAgIHJlcG9SdW50aW1lRGVwZW5kZW5jaWVzOiB0aGlzLnJlcG9SdW50aW1lRGVwcyxcbiAgICB9KTtcblxuICAgIC8vIEV4cG9zZSB0aGUgbW9ub3JlcG8gcHVibGlzaGVyIGFzIHByb2plY3QucmVsZWFzZSBzbyB0aGF0IG90aGVyIGNvZGUgY2FuIGZpbmQgaXQgdmlhIHByb2plY3QucmVsZWFzZT8ucHVibGlzaGVyXG4gICAgLy8gTVVTVCBiZSBjYWxsZWQgYWZ0ZXIgYHRoaXMubW9ub3JlcG8ubW9ub3JlcG9SZWxlYXNlPy5hZGRXb3Jrc3BhY2UoLi4uKWBcbiAgICAvLyBAdHMtaWdub3JlIC0gcmVhZG9ubHkgcHJvcGVydHksIGJ1dCB3ZSBuZWVkIHRvIHNldCBpdCBmb3IgdXBzdHJlYW0gbWl4aW4gY29tcGF0aWJpbGl0eVxuICAgIHRoaXMucmVsZWFzZSA9IHRoaXMubW9ub3JlcG8ubW9ub3JlcG9SZWxlYXNlPy53b3Jrc3BhY2VSZWxlYXNlKHRoaXMpO1xuXG4gICAgLy8gamVzdCBjb25maWdcbiAgICBpZiAodGhpcy5qZXN0Py5jb25maWcgJiYgdGhpcy5qZXN0LmNvbmZpZy5wcmVzZXQgPT09ICd0cy1qZXN0Jykge1xuICAgICAgZGVsZXRlIHRoaXMuamVzdC5jb25maWcuZ2xvYmFscz8uWyd0cy1qZXN0J107XG4gICAgICB0aGlzLmplc3QuY29uZmlnLnRyYW5zZm9ybSA9IHtcbiAgICAgICAgJ14uK1xcXFwudHN4PyQnOiBbXG4gICAgICAgICAgJ3RzLWplc3QnLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHRzY29uZmlnOiB0aGlzLnRzY29uZmlnRGV2LmZpbGVOYW1lLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9O1xuICAgIH1cblxuICAgIC8vIFRhc2tzXG4gICAgdGhpcy50YXNrcy50cnlGaW5kKCdkZWZhdWx0Jyk/LnJlc2V0KCdwcm9qZW4gZGVmYXVsdCcsIHsgY3dkOiByZWxhdGl2ZSh0aGlzLm91dGRpciwgb3B0aW9ucy5wYXJlbnQub3V0ZGlyKSB9KTtcbiAgICB0aGlzLnRhc2tzLnJlbW92ZVRhc2soJ2Nsb2JiZXInKTtcbiAgICB0aGlzLnRhc2tzLnJlbW92ZVRhc2soJ2VqZWN0Jyk7XG5cbiAgICBjb25zdCB1cGdyYWRlVGFza05hbWUgPSAndXBncmFkZSc7XG4gICAgY29uc3QgdXBncmFkZXMgPSB0aGlzLmNvbXBvbmVudHMuZmluZChcbiAgICAgIChjOiBDb21wb25lbnQpOiBjIGlzIGphdmFzY3JpcHQuVXBncmFkZURlcGVuZGVuY2llcyA9PiAoXG4gICAgICAgIGMgaW5zdGFuY2VvZiBqYXZhc2NyaXB0LlVwZ3JhZGVEZXBlbmRlbmNpZXMgJiYgYy51cGdyYWRlVGFzay5uYW1lID09PSB1cGdyYWRlVGFza05hbWVcbiAgICAgICksXG4gICAgKTtcblxuICAgIGlmICh1cGdyYWRlcykge1xuICAgICAgdGhpcy50YXNrcy5yZW1vdmVUYXNrKHVwZ3JhZGVzLnVwZ3JhZGVUYXNrLm5hbWUpO1xuICAgICAgdGhpcy50YXNrcy5yZW1vdmVUYXNrKHVwZ3JhZGVzLnBvc3RVcGdyYWRlVGFzay5uYW1lKTtcbiAgICAgIHRoaXMudGFza3MuYWRkVGFzaygnY2hlY2stZm9yLXVwZGF0ZXMnLCB7XG4gICAgICAgIGVudjogeyAuLi51cGdyYWRlcy51cGdyYWRlVGFzay5lbnZWYXJzIH0sXG4gICAgICAgIHN0ZXBzOiB7XG4gICAgICAgICAgdG9KU09OOiAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzdGVwcyA9ICh1cGdyYWRlcyBhcyBhbnkpLnJlbmRlclRhc2tTdGVwcygpIGFzIFRhc2tTdGVwW107XG4gICAgICAgICAgICByZXR1cm4gc3RlcHMuZmlsdGVyKFxuICAgICAgICAgICAgICAoc3RlcCkgPT4gc3RlcC5leGVjICYmIHR5cGVvZiBzdGVwLmV4ZWMgPT09ICdzdHJpbmcnICYmIHN0ZXAuZXhlYz8uaW5jbHVkZXMoJ25wbS1jaGVjay11cGRhdGVzJyksXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0sXG4gICAgICAgIH0gYXMgYW55LFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gQ29tcG9zaXRlIHByb2plY3QgYW5kIHJlZmVyZW5jZXNcbiAgICBmb3IgKGNvbnN0IHRzY29uZmlnIG9mIFt0aGlzLnRzY29uZmlnLCB0aGlzLnRzY29uZmlnRGV2XSkge1xuICAgICAgdHNjb25maWc/LmZpbGUuYWRkT3ZlcnJpZGUoJ2NvbXBpbGVyT3B0aW9ucy5jb21wb3NpdGUnLCB0cnVlKTtcbiAgICAgIHRzY29uZmlnPy5maWxlLmFkZE92ZXJyaWRlKCdyZWZlcmVuY2VzJywgW10pO1xuICAgIH1cblxuICAgIC8vIEFkZCB3b3Jrc3BhY2UgcmVmZXJlbmNlc1xuICAgIGZvciAoY29uc3QgZGVwIG9mIG9wdGlvbnMuZGVwcz8uZmlsdGVyKGlzV29ya3NwYWNlUmVmZXJlbmNlKSA/PyBbXSkge1xuICAgICAgdGhpcy5hZGRXb3Jrc3BhY2VEZXAoZGVwLCBEZXBlbmRlbmN5VHlwZS5SVU5USU1FKTtcbiAgICB9XG4gICAgZm9yIChjb25zdCBkZXAgb2Ygb3B0aW9ucy5wZWVyRGVwcz8uZmlsdGVyKGlzV29ya3NwYWNlUmVmZXJlbmNlKSA/PyBbXSkge1xuICAgICAgdGhpcy5hZGRXb3Jrc3BhY2VEZXAoZGVwLCBEZXBlbmRlbmN5VHlwZS5QRUVSKTtcbiAgICB9XG4gICAgZm9yIChjb25zdCBkZXAgb2Ygb3B0aW9ucy5kZXZEZXBzPy5maWx0ZXIoaXNXb3Jrc3BhY2VSZWZlcmVuY2UpID8/IFtdKSB7XG4gICAgICB0aGlzLmFkZFdvcmtzcGFjZURlcChkZXAsIERlcGVuZGVuY3lUeXBlLkJVSUxEKTtcbiAgICB9XG5cbiAgICAvLyBBbGxvdyBwYXNzaW5nIGFkZGl0aW9uYWwgYXJncyBsaWtlIGAtLWZvcmNlYCB0byB0aGUgY29tcGlsZSB0YXNrXG4gICAgLy8gTmVlZGVkIGJlY2F1c2Ugd2UgdXNlIGNvbXBvc2l0ZSBwcm9qZWN0cyB0aGF0IG9mdGVuIG5lZWQgYSB0c2MgLS1idWlsZCAtLWZvcmNlXG4gICAgdGhpcy50YXNrcy50cnlGaW5kKCdjb21waWxlJyk/LnJlc2V0KCd0c2MgLS1idWlsZCcsIHtcbiAgICAgIHJlY2VpdmVBcmdzOiB0cnVlLFxuICAgIH0pO1xuXG4gICAgLy8gV2UgaGFuZGxlIGRlcGVuZGVuY2llcyB2aWEgdGhlIHBhcmVudCBwcm9qZWN0XG5cbiAgICAvLyBEaXNhYmxlIHdvcmtzcGFjZSByZXNvbHZlRGVwc0FuZFdyaXRlUGFja2FnZUpzb25cbiAgICAvKiBAdHMtaWdub3JlIGFjY2VzcyBwcml2YXRlIG1ldGhvZCAqL1xuICAgIGNvbnN0IG9yaWdpbmFsUmVzb2x2ZSA9IHRoaXMucGFja2FnZS5yZXNvbHZlRGVwc0FuZFdyaXRlUGFja2FnZUpzb247XG4gICAgLyogQHRzLWlnbm9yZSBhY2Nlc3MgcHJpdmF0ZSBtZXRob2QgKi9cbiAgICB0aGlzLnBhY2thZ2UucmVzb2x2ZURlcHNBbmRXcml0ZVBhY2thZ2VKc29uID0gKCkgPT4gW107XG5cbiAgICAvLyBJbnN0ZWFkIG9mIGluc3RhbGxpbmcgZGVwZW5kZW5jaWVzLCByZXF1ZXN0IGZyb20gdGhlIHBhcmVudFxuICAgIC8qIEB0cy1pZ25vcmUgYWNjZXNzIHByaXZhdGUgbWV0aG9kICovXG4gICAgdGhpcy5wYWNrYWdlLmluc3RhbGxEZXBlbmRlbmNpZXMgPSAodHJpZ2dlcjogamF2YXNjcmlwdC5JbnN0YWxsVHJpZ2dlcikgPT4ge1xuICAgICAgaWYgKHRyaWdnZXIucmVhc29uID09PSBqYXZhc2NyaXB0Lkluc3RhbGxSZWFzb24uTk9fTk9ERV9NT0RVTEVTKSB7XG4gICAgICAgIC8vIEluIGEgbW9ub3JlcG8sIGEgd29ya3NwYWNlIG5vZGVfbW9kdWxlcyBtYXkgbGVnaXRpbWF0ZWx5IG5vdCBleGlzdCBkdWUgdG8gaG9pc3RpbmcuIFdlIGp1c3Qgc2tpcCB0aGlzIGNhc2UuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIG9wdGlvbnMucGFyZW50LnJlcXVlc3RJbnN0YWxsRGVwZW5kZW5jaWVzKHsgcmVzb2x2ZURlcHNBbmRXcml0ZVBhY2thZ2VKc29uOiAoKSA9PiBvcmlnaW5hbFJlc29sdmUuYXBwbHkodGhpcy5wYWNrYWdlKSB9KTtcbiAgICB9O1xuXG4gICAgLy8gRml4IHRoZSBpbnN0YWxsIHRyaWdnZXIgbG9nZ2luZyB0byBtYXRjaCBhY3R1YWwgcmVxdWVzdHNcbiAgICAvKiBAdHMtaWdub3JlIGFjY2VzcyBwcml2YXRlIG1ldGhvZCAqL1xuICAgIGNvbnN0IG9yaWdpbmFsTG9nVHJpZ2dlciA9IHRoaXMucGFja2FnZS5sb2dJbnN0YWxsVHJpZ2dlcjtcbiAgICAvKiBAdHMtaWdub3JlIGFjY2VzcyBwcml2YXRlIG1ldGhvZCAqL1xuICAgIHRoaXMucGFja2FnZS5sb2dJbnN0YWxsVHJpZ2dlciA9ICh0cmlnZ2VyOiBJbnN0YWxsVHJpZ2dlcikgPT4ge1xuICAgICAgaWYgKHRyaWdnZXIucmVhc29uID09PSBqYXZhc2NyaXB0Lkluc3RhbGxSZWFzb24uTk9fTk9ERV9NT0RVTEVTKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIC8qIEB0cy1pZ25vcmUgYWNjZXNzIHByaXZhdGUgbWV0aG9kICovXG4gICAgICByZXR1cm4gb3JpZ2luYWxMb2dUcmlnZ2VyLmFwcGx5KHRoaXMucGFja2FnZSwgW3RyaWdnZXJdKTtcbiAgICB9O1xuXG4gICAgLy8gUHJpdmF0ZSBwYWNrYWdlXG4gICAgaWYgKG9wdGlvbnMucHJpdmF0ZSkge1xuICAgICAgdGhpcy5wYWNrYWdlLmFkZEZpZWxkKCdwcml2YXRlJywgdHJ1ZSk7XG4gICAgfVxuXG4gICAgLy8gWWFybiBCZXJyeSBpbnN0YWxsQ29uZmlnXG4gICAgaWYgKG9wdGlvbnMuaG9pc3RpbmdMaW1pdHMpIHtcbiAgICAgIHRoaXMucGFja2FnZS5hZGRGaWVsZCgnaW5zdGFsbENvbmZpZycsIHsgaG9pc3RpbmdMaW1pdHM6IG9wdGlvbnMuaG9pc3RpbmdMaW1pdHMgfSk7XG4gICAgfVxuXG4gICAgLy8gRml4ZXNcbiAgICB0aGlzLmFkZFRzY29uZmlnRGV2Rml4KCk7XG4gICAgdGhpcy5hZGRFc2xpbnRSY0ZpeCgpO1xuXG4gICAgdGhpcy5idW5kbGVkRGVwcy5wdXNoKC4uLm9wdGlvbnMuYnVuZGxlZERlcHMgPz8gW10pO1xuXG4gICAgLy8gSW5kaXZpZHVhbCB3b3Jrc3BhY2UgcGFja2FnZXMgc2hvdWxkbid0IGRlcGVuZCBvbiBcInByb2plblwiLCBpdCBnZXRzIGJyb3VnaHQgaW4gYXQgdGhlIG1vbm9yZXBvIHJvb3RcbiAgICB0aGlzLmRlcHMucmVtb3ZlRGVwZW5kZW5jeSgncHJvamVuJyk7XG4gIH1cblxuICAvKipcbiAgICogSSBkb24ndCBrbm93IHdoeSBgdHNjb25maWcuZGV2Lmpzb25gIGRvZXNuJ3QgaGF2ZSBhbiBvdXRkaXIsIG9yIHdoZXJlIGl0J3MgdXNlZCxcbiAgICogYnV0IGl0J3MgY2F1c2luZyBpbi1wbGFjZSBgLmpzYCBmaWxlcyB0byBhcHBlYXIuXG4gICAqL1xuICBwcm90ZWN0ZWQgYWRkVHNjb25maWdEZXZGaXgoKSB7XG4gICAgdGhpcy50c2NvbmZpZ0Rldi5maWxlLmFkZE92ZXJyaWRlKCdjb21waWxlck9wdGlvbnMub3V0RGlyJywgJ2xpYicpO1xuICB9XG5cbiAgLyoqXG4gICAqIE5lZWQgdG8gaGFjayBFU0xpbnQgY29uZmlnXG4gICAqXG4gICAqIC5lc2xpbnRyYy5qcyB3aWxsIHRha2UgcHJlY2VkZW5jZSBvdmVyIHRoZSBKU09OIGZpbGUsIGl0IHdpbGwgbG9hZCB0aGVcbiAgICogSlNPTiBmaWxlIGFuZCBwYXRjaCBpdCB3aXRoIGEgZHluYW1pYyBkaXJlY3RvcnkgbmFtZSB0aGF0IGNhbm5vdCBiZSByZXByZXNlbnRlZCBpblxuICAgKiBwbGFpbiBKU09OIChzZWUgaHR0cHM6Ly9naXRodWIuY29tL3Byb2plbi9wcm9qZW4vaXNzdWVzLzI0MDUpLlxuICAgKlxuICAgKiBTaW5jZSBlc2xpbnQgY29uZmlnIGlzIGxvYWRlZCB3aXRoIGRpZmZlcmVudCBjd2QncyBkZXBlbmRpbmcgb24gd2hldGhlciBpdCdzXG4gICAqIGZyb20gdGhlIFZTQ29kZSBwbHVnaW4gb3IgZnJvbSB0aGUgY29tbWFuZCBsaW5lLCB1c2UgYWJzb2x1dGUgcGF0aHMgZXZlcnl3aGVyZS5cbiAgICovXG4gIHByb3RlY3RlZCBhZGRFc2xpbnRSY0ZpeCgpIHtcbiAgICBjb25zdCBlc2xpbnRSYyA9IG5ldyBTb3VyY2VDb2RlKHRoaXMsICcuZXNsaW50cmMuanMnKTtcbiAgICBlc2xpbnRSYy5saW5lKCd2YXIgcGF0aCA9IHJlcXVpcmUoXFwncGF0aFxcJyk7Jyk7XG4gICAgZXNsaW50UmMubGluZSgndmFyIGZzID0gcmVxdWlyZShcXCdmc1xcJyk7Jyk7XG4gICAgZXNsaW50UmMubGluZSgndmFyIGNvbnRlbnRzID0gZnMucmVhZEZpbGVTeW5jKGAke19fZGlybmFtZX0vLmVzbGludHJjLmpzb25gLCB7IGVuY29kaW5nOiBcXCd1dGYtOFxcJyB9KTsnKTtcbiAgICBlc2xpbnRSYy5saW5lKCcvLyBTdHJpcCBjb21tZW50cywgSlNPTi5wYXJzZSgpIGRvZXNuXFwndCBsaWtlIHRob3NlJyk7XG4gICAgZXNsaW50UmMubGluZSgnY29udGVudHMgPSBjb250ZW50cy5yZXBsYWNlKC9eXFxcXC9cXFxcLy4qJC9tLCBcXCdcXCcpOycpO1xuICAgIGVzbGludFJjLmxpbmUoJ3ZhciBqc29uID0gSlNPTi5wYXJzZShjb250ZW50cyk7Jyk7XG4gICAgZXNsaW50UmMubGluZSgnLy8gUGF0Y2ggdGhlIC5qc29uIGNvbmZpZyB3aXRoIHNvbWV0aGluZyB0aGF0IGNhbiBvbmx5IGJlIHJlcHJlc2VudGVkIGluIEpTJyk7XG4gICAgZXNsaW50UmMubGluZSgnanNvbi5wYXJzZXJPcHRpb25zLnRzY29uZmlnUm9vdERpciA9IF9fZGlybmFtZTsnKTtcbiAgICBlc2xpbnRSYy5saW5lKCdtb2R1bGUuZXhwb3J0cyA9IGpzb247Jyk7XG4gIH1cblxuICAvKipcbiAgICogQWRkIGEgd29ya3NwYWNlIHBhY2thZ2UgYXMgYSBkZXBlbmRlbmN5LCBpbmNsdWRpbmcgdHNjb25maWcgcHJvamVjdCByZWZlcmVuY2VzLlxuICAgKlxuICAgKiBVc2UgdGhpcyB0byBhZGQgd29ya3NwYWNlIGRlcGVuZGVuY2llcyBhZnRlciBjb25zdHJ1Y3Rpb24gKGUuZy4gZnJvbSBhIG1peGluKS5cbiAgICogSXQgZG9lcyB0aGUgc2FtZSBhcyBwYXNzaW5nIHRoZSB3b3Jrc3BhY2UgaW4gdGhlIGBkZXBzYC9gZGV2RGVwc2AvYHBlZXJEZXBzYCBjb25zdHJ1Y3RvciBvcHRpb24uXG4gICAqL1xuICBwdWJsaWMgYWRkV29ya3NwYWNlRGVwKHJlZjogSVdvcmtzcGFjZVJlZmVyZW5jZSwgdHlwZTogRGVwZW5kZW5jeVR5cGUgPSBEZXBlbmRlbmN5VHlwZS5SVU5USU1FKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZGVwcy50cnlHZXREZXBlbmRlbmN5KHJlZi5uYW1lKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgIGNhc2UgRGVwZW5kZW5jeVR5cGUuUlVOVElNRTpcbiAgICAgICAgdGhpcy5hZGREZXBzKHJlZi5uYW1lKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIERlcGVuZGVuY3lUeXBlLlBFRVI6XG4gICAgICAgIHRoaXMuYWRkUGVlckRlcHMocmVmLm5hbWUpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgRGVwZW5kZW5jeVR5cGUuREVWRU5WOlxuICAgICAgY2FzZSBEZXBlbmRlbmN5VHlwZS5CVUlMRDpcbiAgICAgIGNhc2UgRGVwZW5kZW5jeVR5cGUuVEVTVDpcbiAgICAgICAgdGhpcy5hZGREZXZEZXBzKHJlZi5uYW1lKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aGlzLmFkZERlcHMocmVmLm5hbWUpO1xuICAgIH1cbiAgICBjb25zdCByZWxhdGl2ZVBhdGggPSByZWxhdGl2ZSh0aGlzLm91dGRpciwgcmVmLm91dGRpcik7XG4gICAgZm9yIChjb25zdCB0c2NvbmZpZyBvZiBbdGhpcy50c2NvbmZpZywgdGhpcy50c2NvbmZpZ0Rldl0pIHtcbiAgICAgIHRzY29uZmlnPy5maWxlLmFkZFRvQXJyYXkoJ3JlZmVyZW5jZXMnLCB7IHBhdGg6IHJlbGF0aXZlUGF0aCB9KTtcbiAgICB9XG4gICAgdGhpcy5leGNsdWRlRnJvbVVwZ3JhZGUucHVzaChyZWYubmFtZSk7XG4gICAgaWYgKHR5cGUgPT09IERlcGVuZGVuY3lUeXBlLlJVTlRJTUUgfHwgdHlwZSA9PT0gRGVwZW5kZW5jeVR5cGUuUEVFUikge1xuICAgICAgdGhpcy5yZXBvUnVudGltZURlcHNbcmVmLm5hbWVdID0gcmVmLnZlcnNpb25UeXBlO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBwcmVTeW50aGVzaXplKCk6IHZvaWQge1xuICAgIHN1cGVyLnByZVN5bnRoZXNpemUoKTtcbiAgICB0aGlzLnZhbGlkYXRlTm9Qcml2YXRlV29ya3NwYWNlRGVwcygpO1xuICB9XG5cbiAgcHJpdmF0ZSB2YWxpZGF0ZU5vUHJpdmF0ZVdvcmtzcGFjZURlcHMoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNQcml2YXRlUGFja2FnZSkgcmV0dXJuO1xuXG4gICAgY29uc3Qgc2libGluZ3MgPSBuZXcgTWFwKFxuICAgICAgdGhpcy5tb25vcmVwby5zdWJwcm9qZWN0c1xuICAgICAgICAuZmlsdGVyKChwKTogcCBpcyBUeXBlU2NyaXB0V29ya3NwYWNlID0+IHAgaW5zdGFuY2VvZiBUeXBlU2NyaXB0V29ya3NwYWNlKVxuICAgICAgICAubWFwKChwKSA9PiBbcC5uYW1lLCBwXSksXG4gICAgKTtcblxuICAgIGNvbnN0IGlsbGVnYWxEZXBzID0gdGhpcy5kZXBzLmFsbFxuICAgICAgLmZpbHRlcigoZCkgPT4gZC50eXBlID09PSBEZXBlbmRlbmN5VHlwZS5SVU5USU1FIHx8IGQudHlwZSA9PT0gRGVwZW5kZW5jeVR5cGUuUEVFUilcbiAgICAgIC5maWx0ZXIoKGQpID0+IHtcbiAgICAgICAgY29uc3Qgd3MgPSBzaWJsaW5ncy5nZXQoZC5uYW1lKTtcbiAgICAgICAgaWYgKCF3cz8uaXNQcml2YXRlUGFja2FnZSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICBpZiAoZC50eXBlID09PSBEZXBlbmRlbmN5VHlwZS5SVU5USU1FICYmIHRoaXMuYWxsb3dQcml2YXRlRGVwcykgcmV0dXJuIGZhbHNlO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0pXG4gICAgICAubWFwKChkKSA9PiBkLm5hbWUpO1xuXG4gICAgaWYgKGlsbGVnYWxEZXBzLmxlbmd0aCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFtcbiAgICAgICAgYCR7dGhpcy5uYW1lfSBpcyBwdWJsaWMgYW5kIGNhbm5vdCBkZXBlbmQgb24gcHJpdmF0ZSB3b3Jrc3BhY2UgcGFja2FnZXMuYCxcbiAgICAgICAgYElsbGVnYWwgZGVwZW5kZW5jaWVzOlxcbiAgICAtICR7aWxsZWdhbERlcHMuam9pbignXFxuICAgIC0gJyl9YCxcbiAgICAgIF0uam9pbignXFxuJykpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYWxsIFByb2plY3RzIGluIHRoZSB3b3Jrc3BhY2UgdGhhdCBhcmUgYWxzbyBkZXBlbmRlbmNpZXMuXG4gICAqXG4gICAqIE9wdGlvbmFsbHkgZmlsdGVyIGJ5IGRlcGVuZGVuY3kgdHlwZS5cbiAgICovXG4gIHB1YmxpYyB3b3Jrc3BhY2VEZXBlbmRlbmNpZXModHlwZXM/OiBEZXBlbmRlbmN5VHlwZVtdKTogUHJvamVjdFtdIHtcbiAgICByZXR1cm4gdGhpcy5tb25vcmVwby5zdWJwcm9qZWN0cy5maWx0ZXIoKHNpYmxpbmcpID0+XG4gICAgICB0aGlzLmRlcHMuYWxsLnNvbWUoKGQpID0+IGQubmFtZSA9PT0gc2libGluZy5uYW1lICYmICghdHlwZXMgfHwgdHlwZXMuaW5jbHVkZXMoZC50eXBlKSkpLFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGEgc3BlY2lhbGl6ZWQgcmVmZXJlbmNlIHRvIHRoaXMgd29ya3NwYWNlXG4gICAqL1xuICBwdWJsaWMgY3VzdG9taXplUmVmZXJlbmNlKHJlZk9wdHM/OiBSZWZlcmVuY2VPcHRpb25zKTogSVdvcmtzcGFjZVJlZmVyZW5jZSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG5hbWU6IHRoaXMubmFtZSxcbiAgICAgIG91dGRpcjogdGhpcy5vdXRkaXIsXG4gICAgICBpc1ByaXZhdGVQYWNrYWdlOiB0aGlzLmlzUHJpdmF0ZVBhY2thZ2UsXG4gICAgICB2ZXJzaW9uVHlwZTogcmVmT3B0cz8udmVyc2lvblR5cGUgPz8gdGhpcy52ZXJzaW9uVHlwZSxcbiAgICB9O1xuICB9XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgdGhlIGB3b3Jrc3BhY2UuY3VzdG9taXplUmVmZXJlbmNlKClgIG1ldGhvZFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlZmVyZW5jZU9wdGlvbnMge1xuICAvKipcbiAgICogV2hhdCB0eXBlIG9mIGRlcGVuZGVuY3kgdG8gdGFrZSBvbiB0aGlzIHBhY2thZ2VcbiAgICpcbiAgICogQnkgZGVmYXVsdCwgZGVwZW5kZW5jaWVzIHdpbGwgYmUgcmVmZXJlbmNlZCB3aXRoIGEgYF5gLCB3aGljaCBtZWFucyB0aGF0XG4gICAqIGNvbWUgaW5zdGFsbCB0aW1lIGEgbmV3ZXIgdmVyc2lvbiBtYXkgYmUgaW5zdGFsbGVkLlxuICAgKlxuICAgKiBDaG9vc2UgYSBkaWZmZXJlbnQgcmFuZ2UgdHlwZSB0byB0YWtlLCBmb3IgZXhhbXBsZSwgYW4gYGV4YWN0YCBkZXBlbmRlbmN5LlxuICAgKlxuICAgKiBAZGVmYXVsdCAnZnV0dXJlLW1pbm9yJ1xuICAgKi9cbiAgcmVhZG9ubHkgdmVyc2lvblR5cGU/OiBWZXJzaW9uVHlwZTtcbn1cblxuZnVuY3Rpb24gd2l0aG91dDxBIGV4dGVuZHMgb2JqZWN0LCBLIGV4dGVuZHMga2V5b2YgQT4oeDogQSwgLi4ua3M6IEtbXSk6IE9taXQ8QSwgSz4ge1xuICBjb25zdCByZXQgPSB7IC4uLnggfTtcbiAgZm9yIChjb25zdCBrIG9mIGtzKSB7XG4gICAgZGVsZXRlIHJldFtrXTtcbiAgfVxuICByZXR1cm4gcmV0O1xufVxuXG5mdW5jdGlvbiBpc1dvcmtzcGFjZVJlZmVyZW5jZSh4OiB1bmtub3duKTogeCBpcyBJV29ya3NwYWNlUmVmZXJlbmNlIHtcbiAgcmV0dXJuIHR5cGVvZiB4ID09PSAnb2JqZWN0JyAmJiAhIXggJiYgKFsnaXNQcml2YXRlUGFja2FnZScsICd2ZXJzaW9uVHlwZScsICduYW1lJywgJ291dGRpciddIHNhdGlzZmllcyBBcnJheTxrZXlvZiBJV29ya3NwYWNlUmVmZXJlbmNlPikuZXZlcnkoayA9PiAoeCBhcyBhbnkpW2tdICE9PSB1bmRlZmluZWQpO1xufVxuXG5mdW5jdGlvbiBpc05vdFdvcmtzcGFjZVJlZmVyZW5jZSh4OiB1bmtub3duKTogeCBpcyBzdHJpbmcge1xuICByZXR1cm4gIWlzV29ya3NwYWNlUmVmZXJlbmNlKHgpO1xufVxuIl19
|
|
324
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXNjcmlwdC13b3Jrc3BhY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMveWFybi90eXBlc2NyaXB0LXdvcmtzcGFjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQ0EsK0JBQXlDO0FBQ3pDLG1DQUEwRztBQW1EMUc7O0dBRUc7QUFDSCxNQUFhLG1CQUFvQixTQUFRLG1CQUFVLENBQUMsaUJBQWlCOztJQUVuRCxrQkFBa0IsQ0FBUztJQUMzQixXQUFXLEdBQWEsRUFBRSxDQUFDO0lBQzNCLGdCQUFnQixDQUFVO0lBQzFCLFdBQVcsR0FBRyxjQUFjLENBQUM7SUFFNUIsUUFBUSxDQUFXO0lBQ25CLGdCQUFnQixDQUFVO0lBQzFCLGtCQUFrQixDQUFXO0lBQzdCLGVBQWUsR0FBZ0MsRUFBRSxDQUFDO0lBRW5FLFlBQVksT0FBbUM7UUFDN0MsTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUN2QixPQUFPLEVBQ1AsUUFBUSxFQUNSLE1BQU0sRUFDTixhQUFhLEVBQ2IsTUFBTSxFQUNOLFVBQVUsRUFDVixTQUFTLEVBQ1Qsd0JBQXdCLEVBQ3hCLFlBQVksRUFDWixxQkFBcUIsRUFDckIsa0JBQWtCLENBQ25CLENBQUM7UUFFRixNQUFNLFNBQVMsR0FBRyxTQUFTLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQztRQUMzQyxNQUFNLFdBQVcsR0FBRyxTQUFTLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQztRQUUvQyxNQUFNLE9BQU8sR0FBRyxTQUFTLENBQUMsY0FBYyxJQUFJLFVBQVUsQ0FBQztRQUN2RCxNQUFNLGtCQUFrQixHQUFHLEdBQUcsT0FBTyxJQUFJLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUV4RCxNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLGVBQWUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLG1CQUFVLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENB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QUFDLENBQUM7QUFDbEMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIlxuaW1wb3J0IHsgZGlybmFtZSwgcmVsYXRpdmUgfSBmcm9tICdwYXRoJztcbmltcG9ydCB7IENvbXBvbmVudCwgamF2YXNjcmlwdCwgdHlwZXNjcmlwdCwgVGFza1N0ZXAsIFNvdXJjZUNvZGUsIERlcGVuZGVuY3lUeXBlLCBQcm9qZWN0IH0gZnJvbSAncHJvamVuJztcbmltcG9ydCB7IE1vbm9yZXBvIH0gZnJvbSAnLi9tb25vcmVwbyc7XG5pbXBvcnQgeyBUeXBlU2NyaXB0V29ya3NwYWNlT3B0aW9ucyB9IGZyb20gJy4vdHlwZXNjcmlwdC13b3Jrc3BhY2Utb3B0aW9ucyc7XG5cbi8qKlxuICogV2hhdCBraW5kIG9mIHNlbXZlciBkZXBlbmRlbmN5IHRvIHRha2VcbiAqXG4gKiAtICdhbnktbWlub3InIGNvcnJlc3BvbmRzIHRvICdeMSdcbiAqIC0gJ2Z1dHVyZS1taW5vcicgY29ycmVzcG9uZHMgdG8gJ14xLjIuMydcbiAqIC0gJ2FueS1wYXRjaCcgdG8gJ34xLjInXG4gKiAtICdmdXR1cmUtcGF0Y2gnIGNvcnJlc3BvbmRzIHRvICd+MS4yLjMnXG4gKiAtICdleGFjdCcgY29ycmVzcG9uZHMgdG8gJzEuMi4zJ1xuICogLSAnYW55LWZ1dHVyZScgY29ycmVzcG9uZHMgdG8gJz49MS4yLjMnXG4gKiAtICdhbnknIGNvcnJlc3BvbmRzIHRvICcqJ1xuICovXG5leHBvcnQgdHlwZSBWZXJzaW9uVHlwZSA9ICdhbnktbWlub3InIHwgJ2Z1dHVyZS1taW5vcicgfCAnYW55LXBhdGNoJyB8ICdmdXR1cmUtcGF0Y2gnIHwgJ2V4YWN0JyB8ICdhbnktZnV0dXJlJyB8ICdhbnknO1xuXG4vKipcbiAqIEEgcmVmZXJlbmNlIHRvIGEgd29ya3NwYWNlIGluIHRoZSBzYW1lIG1vbm9yZXBvXG4gKlxuICogVGhpcyBjYW4gYmUgdXNlZCB0byByZWZlcmVuY2UgcGFja2FnZXMgaW4gdGhlIHNhbWUgbW9ub3JlcG8gd2hlbiBkZWNsYXJpbmdcbiAqIGBkZXBzYCBhbmQgYGRldkRlcHNgLlxuICpcbiAqIEJ5IGRlZmF1bHQsIGFsbCBgVHlwZVNjcmlwdFdvcmtzcGFjZWBzIGltcGxlbWVudCB0aGlzIGludGVyZmFjZSwgcmVwcmVzZW50aW5nIHRoZW1zZWx2ZXNcbiAqIHdpdGggYSBgXmAgZGVwZW5kZW5jeSBhbmQgYSByZXN0cmljdGlvbiB0aGF0IHB1YmxpYyBwYWNrYWdlcyBtdXN0IGhhdmUgcHVibGljIGRlcGVuZGVuY2llcy5cbiAqXG4gKiBUaGUgbWV0aG9kIGAuY3VzdG9taXplUmVmZXJlbmNlKHsgLi4uIH0pYCBjYW4gYmUgdXNlZCB0byBjcmVhdGUgYSB3b3Jrc3BhY2UgcmVmZXJlbmNlIHdpdGhcbiAqIGRpZmZlcmVudCBiZWhhdmlvci5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJV29ya3NwYWNlUmVmZXJlbmNlIHtcbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIHJlZmVyZW5jZWQgd29ya3NwYWNlIHBhY2thZ2UgaXMgcHJpdmF0ZVxuICAgKi9cbiAgcmVhZG9ubHkgaXNQcml2YXRlUGFja2FnZTogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIGRlcGVuZGVuY3kgbmFtZSBvZiB0aGUgcGFja2FnZVxuICAgKi9cbiAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgc2VtdmVyIHJhbmdlIHRoYXQgc2hvdWxkIGJlIHVzZWQgdG8gcmVmZXJlbmNlIHRoaXMgcGFja2FnZSB3aGVuIGl0IGlzIHJlbGVhc2VkXG4gICAqL1xuICByZWFkb25seSB2ZXJzaW9uVHlwZTogVmVyc2lvblR5cGU7XG5cbiAgLyoqXG4gICAqIFRoZSBkaXJlY3RvcnkgdGhhdCBob2xkcyB0aGlzIHBhY2thZ2UgaW4gdGhlIG1vbm9yZXBvXG4gICAqL1xuICByZWFkb25seSBvdXRkaXI6IHN0cmluZztcbn1cblxuLyoqXG4gKiBBIFR5cGVTY3JpcHQgd29ya3NwYWNlIGluIGEgYHlhcm4uTW9ub3JlcG9gXG4gKi9cbmV4cG9ydCBjbGFzcyBUeXBlU2NyaXB0V29ya3NwYWNlIGV4dGVuZHMgdHlwZXNjcmlwdC5UeXBlU2NyaXB0UHJvamVjdCBpbXBsZW1lbnRzIElXb3Jrc3BhY2VSZWZlcmVuY2Uge1xuICBwdWJsaWMgZGVjbGFyZSByZWFkb25seSBwYXJlbnQ6IE1vbm9yZXBvIHwgdW5kZWZpbmVkO1xuICBwdWJsaWMgcmVhZG9ubHkgd29ya3NwYWNlRGlyZWN0b3J5OiBzdHJpbmc7XG4gIHB1YmxpYyByZWFkb25seSBidW5kbGVkRGVwczogc3RyaW5nW10gPSBbXTtcbiAgcHVibGljIHJlYWRvbmx5IGlzUHJpdmF0ZVBhY2thZ2U6IGJvb2xlYW47XG4gIHB1YmxpYyByZWFkb25seSB2ZXJzaW9uVHlwZSA9ICdmdXR1cmUtbWlub3InO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgbW9ub3JlcG86IE1vbm9yZXBvO1xuICBwcml2YXRlIHJlYWRvbmx5IGFsbG93UHJpdmF0ZURlcHM6IGJvb2xlYW47XG4gIHByaXZhdGUgcmVhZG9ubHkgZXhjbHVkZUZyb21VcGdyYWRlOiBzdHJpbmdbXTtcbiAgcHJpdmF0ZSByZWFkb25seSByZXBvUnVudGltZURlcHM6IFJlY29yZDxzdHJpbmcsIFZlcnNpb25UeXBlPiA9IHt9O1xuXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM6IFR5cGVTY3JpcHRXb3Jrc3BhY2VPcHRpb25zKSB7XG4gICAgY29uc3QgcmVtYWluZGVyID0gd2l0aG91dChcbiAgICAgIG9wdGlvbnMsXG4gICAgICAncGFyZW50JyxcbiAgICAgICduYW1lJyxcbiAgICAgICdkZXNjcmlwdGlvbicsXG4gICAgICAnZGVwcycsXG4gICAgICAncGVlckRlcHMnLFxuICAgICAgJ2RldkRlcHMnLFxuICAgICAgJ2V4Y2x1ZGVEZXBzRnJvbVVwZ3JhZGUnLFxuICAgICAgJ3JlcG9zaXRvcnknLFxuICAgICAgJ3dvcmtmbG93Tm9kZVZlcnNpb24nLFxuICAgICAgJ2FsbG93UHJpdmF0ZURlcHMnLFxuICAgICk7XG5cbiAgICBjb25zdCB1c2VFc2xpbnQgPSByZW1haW5kZXIuZXNsaW50ID8/IHRydWU7XG4gICAgY29uc3QgdXNlUHJldHRpZXIgPSByZW1haW5kZXIucHJldHRpZXIgPz8gdHJ1ZTtcblxuICAgIGNvbnN0IHdzU2NvcGUgPSByZW1haW5kZXIud29ya3NwYWNlU2NvcGUgPz8gJ3BhY2thZ2VzJztcbiAgICBjb25zdCB3b3Jrc3BhY2VEaXJlY3RvcnkgPSBgJHt3c1Njb3BlfS8ke29wdGlvbnMubmFtZX1gO1xuXG4gICAgY29uc3QgbnBtQWNjZXNzID0gb3B0aW9ucy5wYXJlbnQubW9ub3JlcG9SZWxlYXNlICYmICFvcHRpb25zLnByaXZhdGUgPyBqYXZhc2NyaXB0Lk5wbUFjY2Vzcy5QVUJMSUMgOiB1bmRlZmluZWQ7XG5cbiAgICBjb25zdCByZWxlYXNlRW52aXJvbm1lbnQgPSBvcHRpb25zLnJlbGVhc2VFbnZpcm9ubWVudCA/PyBvcHRpb25zLnBhcmVudC5zZXR0aW5ncy5yZWxlYXNlRW52aXJvbm1lbnQ7XG5cbiAgICBjb25zdCBleGNsdWRlRnJvbVVwZ3JhZGUgPSBbXG4gICAgICAuLi4ob3B0aW9ucy5leGNsdWRlRGVwc0Zyb21VcGdyYWRlID8/IFtdKSxcbiAgICBdO1xuXG4gICAgc3VwZXIoe1xuICAgICAgcGFyZW50OiBvcHRpb25zLnBhcmVudCxcbiAgICAgIG5hbWU6IG9wdGlvbnMubmFtZSxcbiAgICAgIGRlc2NyaXB0aW9uOiBvcHRpb25zLmRlc2NyaXB0aW9uLFxuICAgICAgcmVwb3NpdG9yeTogb3B0aW9ucy5yZXBvc2l0b3J5ID8/IG9wdGlvbnMucGFyZW50LnJlcG9zaXRvcnlVcmwsXG4gICAgICByZXBvc2l0b3J5RGlyZWN0b3J5OiB3b3Jrc3BhY2VEaXJlY3RvcnksXG4gICAgICBvdXRkaXI6IHdvcmtzcGFjZURpcmVjdG9yeSxcbiAgICAgIGRlZmF1bHRSZWxlYXNlQnJhbmNoOiAnUkVRVUlSRUQtQlVULVNIT1VMRC1OT1QtQkUnLFxuICAgICAgcGFja2FnZU1hbmFnZXI6IG9wdGlvbnMucGFyZW50LnBhY2thZ2UucGFja2FnZU1hbmFnZXIsXG4gICAgICByZWxlYXNlOiBmYWxzZSxcbiAgICAgIHBhY2thZ2U6ICFvcHRpb25zLnByaXZhdGUsXG4gICAgICBlc2xpbnQ6IHVzZUVzbGludCxcbiAgICAgIHByZXR0aWVyOiB1c2VQcmV0dGllcixcbiAgICAgIHByZXR0aWVyT3B0aW9uczogdXNlUHJldHRpZXJcbiAgICAgICAgPyB7XG4gICAgICAgICAgb3ZlcnJpZGVzOiBvcHRpb25zLnBhcmVudC5wcmV0dGllcj8ub3ZlcnJpZGVzLFxuICAgICAgICAgIHNldHRpbmdzOiBvcHRpb25zLnBhcmVudC5wcmV0dGllcj8uc2V0dGluZ3MsXG4gICAgICAgICAgLi4ucmVtYWluZGVyLnByZXR0aWVyT3B0aW9ucyxcbiAgICAgICAgfVxuICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgIGVzbGludE9wdGlvbnM6IHVzZUVzbGludFxuICAgICAgICA/IHtcbiAgICAgICAgICBkaXJzOiBbcmVtYWluZGVyLnNyY2RpciA/PyAnc3JjJ10sXG4gICAgICAgICAgZGV2ZGlyczogW3JlbWFpbmRlci50ZXN0ZGlyID8/ICd0ZXN0JywgJ2J1aWxkLXRvb2xzJ10sXG4gICAgICAgICAgLi4ucmVtYWluZGVyLmVzbGludE9wdGlvbnMsXG4gICAgICAgICAgcHJldHRpZXI6IHVzZVByZXR0aWVyLFxuICAgICAgICB9XG4gICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgc2FtcGxlQ29kZTogZmFsc2UsXG5cbiAgICAgIC8vIGFkZCBub24gd29ya3NwYWNlIGRlcGVuZGVuY2llcyBoZXJlXG4gICAgICAvLyB3b3Jrc3BhY2UgcmVmcyBhcmUgYWRkZWQgbGF0ZXJcbiAgICAgIGRlcHM6IG9wdGlvbnMuZGVwcz8uZmlsdGVyKGlzTm90V29ya3NwYWNlUmVmZXJlbmNlKSxcbiAgICAgIHBlZXJEZXBzOiBvcHRpb25zLnBlZXJEZXBzPy5maWx0ZXIoaXNOb3RXb3Jrc3BhY2VSZWZlcmVuY2UpLFxuICAgICAgZGV2RGVwczogb3B0aW9ucy5kZXZEZXBzPy5maWx0ZXIoaXNOb3RXb3Jrc3BhY2VSZWZlcmVuY2UpLFxuXG4gICAgICBwcm9qZW5EZXZEZXBlbmRlbmN5OiB0cnVlLFxuICAgICAgcmVsZWFzZUVudmlyb25tZW50LFxuXG4gICAgICBkZXBzVXBncmFkZTogb3B0aW9ucy5kZXBzVXBncmFkZSA/PyB0cnVlLFxuICAgICAgZGVwc1VwZ3JhZGVPcHRpb25zOiB7XG4gICAgICAgIHdvcmtmbG93OiBmYWxzZSxcbiAgICAgICAgY29vbGRvd246IG9wdGlvbnMucGFyZW50LnNldHRpbmdzLmRlcHNVcGdyYWRlT3B0aW9ucz8uY29vbGRvd24gPz8gKG9wdGlvbnMucGFyZW50LnNldHRpbmdzLnlhcm5CZXJyeSA/IDMgOiB1bmRlZmluZWQpLFxuICAgICAgICBleGNsdWRlOiBleGNsdWRlRnJvbVVwZ3JhZGUsXG4gICAgICB9LFxuXG4gICAgICBucG1BY2Nlc3MsXG5cbiAgICAgIC8vIERldmlhdGlvbiBmcm9tIHVwc3RyZWFtIHByb2plbjogdXBzdHJlYW0gcHJvamVuIGRlZmF1bHRzIHRvIG1pbk5vZGVWZXJzaW9uLCBidXQgd2UgaGF2ZSB0b28gbWFueSB3b3JrZmxvd3NcbiAgICAgIC8vIHRoYXQgdXNlIHRvb2xzIHRoYXQgd2FudCBhIHJlY2VudCBOb2RlIHZlcnNpb24sIHNvIGRlZmF1bHQgdG8gYSByZWFzb25hYmxlIGZsb2F0aW5nIHZlcnNpb24uXG4gICAgICB3b3JrZmxvd05vZGVWZXJzaW9uOiBvcHRpb25zLndvcmtmbG93Tm9kZVZlcnNpb24gPz8gJ2x0cy8qJyxcblxuICAgICAgLi4ucmVtYWluZGVyLFxuICAgIH0pO1xuXG4gICAgdGhpcy5tb25vcmVwbyA9IG9wdGlvbnMucGFyZW50O1xuICAgIHRoaXMuaXNQcml2YXRlUGFja2FnZSA9IG9wdGlvbnMucHJpdmF0ZSA/PyBmYWxzZTtcbiAgICB0aGlzLmFsbG93UHJpdmF0ZURlcHMgPSBvcHRpb25zLmFsbG93UHJpdmF0ZURlcHMgPz8gZmFsc2U7XG4gICAgdGhpcy5leGNsdWRlRnJvbVVwZ3JhZGUgPSBleGNsdWRlRnJvbVVwZ3JhZGU7XG4gICAgdGhpcy53b3Jrc3BhY2VEaXJlY3RvcnkgPSB3b3Jrc3BhY2VEaXJlY3Rvcnk7XG5cbiAgICAvLyBSZWdpc3RlciB3aXRoIHJlbGVhc2Ugd29ya2Zsb3dcbiAgICB0aGlzLm1vbm9yZXBvLm1vbm9yZXBvUmVsZWFzZT8uYWRkV29ya3NwYWNlKHRoaXMsIHtcbiAgICAgIHByaXZhdGU6IHRoaXMuaXNQcml2YXRlUGFja2FnZSxcbiAgICAgIHdvcmtmbG93Tm9kZVZlcnNpb246IHRoaXMubm9kZVZlcnNpb24sXG4gICAgICBucG1EaXN0VGFnOiBvcHRpb25zLm5wbURpc3RUYWcsXG4gICAgICAvLyBJbmhlcml0IHNldHRpbmcgZnJvbSBNb25vcmVwbyBpZiBjb25maWd1cmVkXG4gICAgICBucG1UcnVzdGVkUHVibGlzaGluZzogb3B0aW9ucy5ucG1UcnVzdGVkUHVibGlzaGluZyA/PyB0aGlzLm1vbm9yZXBvLnNldHRpbmdzLm5wbVRydXN0ZWRQdWJsaXNoaW5nLFxuICAgICAgZW52aXJvbm1lbnQ6IHJlbGVhc2VFbnZpcm9ubWVudCxcbiAgICAgIHJlbGVhc2FibGVDb21taXRzOiBvcHRpb25zLnJlbGVhc2FibGVDb21taXRzLFxuICAgICAgbmV4dFZlcnNpb25Db21tYW5kOiBvcHRpb25zLm5leHRWZXJzaW9uQ29tbWFuZCxcbiAgICAgIHZlcnNpb25CcmFuY2hPcHRpb25zOiB7XG4gICAgICAgIG1ham9yVmVyc2lvbjogb3B0aW9ucy5tYWpvclZlcnNpb24sXG4gICAgICAgIG1pbk1ham9yVmVyc2lvbjogb3B0aW9ucy5taW5NYWpvclZlcnNpb24sXG4gICAgICAgIHByZXJlbGVhc2U6IG9wdGlvbnMucHJlcmVsZWFzZSxcbiAgICAgIH0sXG4gICAgICByZXBvUnVudGltZURlcGVuZGVuY2llczogdGhpcy5yZXBvUnVudGltZURlcHMsXG4gICAgfSk7XG5cbiAgICAvLyBFeHBvc2UgdGhlIG1vbm9yZXBvIHB1Ymxpc2hlciBhcyBwcm9qZWN0LnJlbGVhc2Ugc28gdGhhdCBvdGhlciBjb2RlIGNhbiBmaW5kIGl0IHZpYSBwcm9qZWN0LnJlbGVhc2U/LnB1Ymxpc2hlclxuICAgIC8vIE1VU1QgYmUgY2FsbGVkIGFmdGVyIGB0aGlzLm1vbm9yZXBvLm1vbm9yZXBvUmVsZWFzZT8uYWRkV29ya3NwYWNlKC4uLilgXG4gICAgLy8gQHRzLWlnbm9yZSAtIHJlYWRvbmx5IHByb3BlcnR5LCBidXQgd2UgbmVlZCB0byBzZXQgaXQgZm9yIHVwc3RyZWFtIG1peGluIGNvbXBhdGliaWxpdHlcbiAgICB0aGlzLnJlbGVhc2UgPSB0aGlzLm1vbm9yZXBvLm1vbm9yZXBvUmVsZWFzZT8ud29ya3NwYWNlUmVsZWFzZSh0aGlzKTtcblxuICAgIC8vIGplc3QgY29uZmlnXG4gICAgaWYgKHRoaXMuamVzdD8uY29uZmlnICYmIHRoaXMuamVzdC5jb25maWcucHJlc2V0ID09PSAndHMtamVzdCcpIHtcbiAgICAgIGRlbGV0ZSB0aGlzLmplc3QuY29uZmlnLmdsb2JhbHM/LlsndHMtamVzdCddO1xuICAgICAgdGhpcy5qZXN0LmNvbmZpZy50cmFuc2Zvcm0gPSB7XG4gICAgICAgICdeLitcXFxcLnRzeD8kJzogW1xuICAgICAgICAgICd0cy1qZXN0JyxcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0c2NvbmZpZzogdGhpcy50c2NvbmZpZ0Rldi5maWxlTmFtZSxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBUYXNrc1xuICAgIHRoaXMudGFza3MudHJ5RmluZCgnZGVmYXVsdCcpPy5yZXNldCgncHJvamVuIGRlZmF1bHQnLCB7IGN3ZDogcmVsYXRpdmUodGhpcy5vdXRkaXIsIG9wdGlvbnMucGFyZW50Lm91dGRpcikgfSk7XG4gICAgdGhpcy50YXNrcy5yZW1vdmVUYXNrKCdjbG9iYmVyJyk7XG4gICAgdGhpcy50YXNrcy5yZW1vdmVUYXNrKCdlamVjdCcpO1xuXG4gICAgY29uc3QgdXBncmFkZVRhc2tOYW1lID0gJ3VwZ3JhZGUnO1xuICAgIGNvbnN0IHVwZ3JhZGVzID0gdGhpcy5jb21wb25lbnRzLmZpbmQoXG4gICAgICAoYzogQ29tcG9uZW50KTogYyBpcyBqYXZhc2NyaXB0LlVwZ3JhZGVEZXBlbmRlbmNpZXMgPT4gKFxuICAgICAgICBjIGluc3RhbmNlb2YgamF2YXNjcmlwdC5VcGdyYWRlRGVwZW5kZW5jaWVzICYmIGMudXBncmFkZVRhc2submFtZSA9PT0gdXBncmFkZVRhc2tOYW1lXG4gICAgICApLFxuICAgICk7XG5cbiAgICBpZiAodXBncmFkZXMpIHtcbiAgICAgIHRoaXMudGFza3MucmVtb3ZlVGFzayh1cGdyYWRlcy51cGdyYWRlVGFzay5uYW1lKTtcbiAgICAgIHRoaXMudGFza3MucmVtb3ZlVGFzayh1cGdyYWRlcy5wb3N0VXBncmFkZVRhc2submFtZSk7XG4gICAgICB0aGlzLnRhc2tzLmFkZFRhc2soJ2NoZWNrLWZvci11cGRhdGVzJywge1xuICAgICAgICBlbnY6IHsgLi4udXBncmFkZXMudXBncmFkZVRhc2suZW52VmFycyB9LFxuICAgICAgICBzdGVwczoge1xuICAgICAgICAgIHRvSlNPTjogKCkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc3RlcHMgPSAodXBncmFkZXMgYXMgYW55KS5yZW5kZXJUYXNrU3RlcHMoKSBhcyBUYXNrU3RlcFtdO1xuICAgICAgICAgICAgcmV0dXJuIHN0ZXBzLmZpbHRlcihcbiAgICAgICAgICAgICAgKHN0ZXApID0+IHN0ZXAuZXhlYyAmJiB0eXBlb2Ygc3RlcC5leGVjID09PSAnc3RyaW5nJyAmJiBzdGVwLmV4ZWM/LmluY2x1ZGVzKCducG0tY2hlY2stdXBkYXRlcycpLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9LFxuICAgICAgICB9IGFzIGFueSxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIENvbXBvc2l0ZSBwcm9qZWN0IGFuZCByZWZlcmVuY2VzXG4gICAgZm9yIChjb25zdCB0c2NvbmZpZyBvZiBbdGhpcy50c2NvbmZpZywgdGhpcy50c2NvbmZpZ0Rldl0pIHtcbiAgICAgIHRzY29uZmlnPy5maWxlLmFkZE92ZXJyaWRlKCdjb21waWxlck9wdGlvbnMuY29tcG9zaXRlJywgdHJ1ZSk7XG4gICAgICB0c2NvbmZpZz8uZmlsZS5hZGRPdmVycmlkZSgncmVmZXJlbmNlcycsIFtdKTtcbiAgICB9XG5cbiAgICAvLyBBZGQgd29ya3NwYWNlIHJlZmVyZW5jZXNcbiAgICBmb3IgKGNvbnN0IGRlcCBvZiBvcHRpb25zLmRlcHM/LmZpbHRlcihpc1dvcmtzcGFjZVJlZmVyZW5jZSkgPz8gW10pIHtcbiAgICAgIHRoaXMuYWRkV29ya3NwYWNlRGVwKGRlcCwgRGVwZW5kZW5jeVR5cGUuUlVOVElNRSk7XG4gICAgfVxuICAgIGZvciAoY29uc3QgZGVwIG9mIG9wdGlvbnMucGVlckRlcHM/LmZpbHRlcihpc1dvcmtzcGFjZVJlZmVyZW5jZSkgPz8gW10pIHtcbiAgICAgIHRoaXMuYWRkV29ya3NwYWNlRGVwKGRlcCwgRGVwZW5kZW5jeVR5cGUuUEVFUik7XG4gICAgfVxuICAgIGZvciAoY29uc3QgZGVwIG9mIG9wdGlvbnMuZGV2RGVwcz8uZmlsdGVyKGlzV29ya3NwYWNlUmVmZXJlbmNlKSA/PyBbXSkge1xuICAgICAgdGhpcy5hZGRXb3Jrc3BhY2VEZXAoZGVwLCBEZXBlbmRlbmN5VHlwZS5CVUlMRCk7XG4gICAgfVxuXG4gICAgLy8gQWxsb3cgcGFzc2luZyBhZGRpdGlvbmFsIGFyZ3MgbGlrZSBgLS1mb3JjZWAgdG8gdGhlIGNvbXBpbGUgdGFza1xuICAgIC8vIE5lZWRlZCBiZWNhdXNlIHdlIHVzZSBjb21wb3NpdGUgcHJvamVjdHMgdGhhdCBvZnRlbiBuZWVkIGEgdHNjIC0tYnVpbGQgLS1mb3JjZVxuICAgIHRoaXMudGFza3MudHJ5RmluZCgnY29tcGlsZScpPy5yZXNldCgndHNjIC0tYnVpbGQnLCB7XG4gICAgICByZWNlaXZlQXJnczogdHJ1ZSxcbiAgICB9KTtcblxuICAgIC8vIFdlIGhhbmRsZSBkZXBlbmRlbmNpZXMgdmlhIHRoZSBwYXJlbnQgcHJvamVjdFxuXG4gICAgLy8gRGlzYWJsZSB3b3Jrc3BhY2UgcmVzb2x2ZURlcHNBbmRXcml0ZVBhY2thZ2VKc29uXG4gICAgLyogQHRzLWlnbm9yZSBhY2Nlc3MgcHJpdmF0ZSBtZXRob2QgKi9cbiAgICBjb25zdCBvcmlnaW5hbFJlc29sdmUgPSB0aGlzLnBhY2thZ2UucmVzb2x2ZURlcHNBbmRXcml0ZVBhY2thZ2VKc29uO1xuICAgIC8qIEB0cy1pZ25vcmUgYWNjZXNzIHByaXZhdGUgbWV0aG9kICovXG4gICAgdGhpcy5wYWNrYWdlLnJlc29sdmVEZXBzQW5kV3JpdGVQYWNrYWdlSnNvbiA9ICgpID0+IFtdO1xuXG4gICAgLy8gSW5zdGVhZCBvZiBpbnN0YWxsaW5nIGRlcGVuZGVuY2llcywgcmVxdWVzdCBmcm9tIHRoZSBwYXJlbnRcbiAgICAvKiBAdHMtaWdub3JlIGFjY2VzcyBwcml2YXRlIG1ldGhvZCAqL1xuICAgIHRoaXMucGFja2FnZS5pbnN0YWxsRGVwZW5kZW5jaWVzID0gKHRyaWdnZXI6IGphdmFzY3JpcHQuSW5zdGFsbFRyaWdnZXIpID0+IHtcbiAgICAgIGlmICh0cmlnZ2VyLnJlYXNvbiA9PT0gamF2YXNjcmlwdC5JbnN0YWxsUmVhc29uLk5PX05PREVfTU9EVUxFUykge1xuICAgICAgICAvLyBJbiBhIG1vbm9yZXBvLCBhIHdvcmtzcGFjZSBub2RlX21vZHVsZXMgbWF5IGxlZ2l0aW1hdGVseSBub3QgZXhpc3QgZHVlIHRvIGhvaXN0aW5nLiBXZSBqdXN0IHNraXAgdGhpcyBjYXNlLlxuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBvcHRpb25zLnBhcmVudC5yZXF1ZXN0SW5zdGFsbERlcGVuZGVuY2llcyh7IHJlc29sdmVEZXBzQW5kV3JpdGVQYWNrYWdlSnNvbjogKCkgPT4gb3JpZ2luYWxSZXNvbHZlLmFwcGx5KHRoaXMucGFja2FnZSkgfSk7XG4gICAgfTtcblxuICAgIC8vIEZpeCB0aGUgaW5zdGFsbCB0cmlnZ2VyIGxvZ2dpbmcgdG8gbWF0Y2ggYWN0dWFsIHJlcXVlc3RzXG4gICAgLyogQHRzLWlnbm9yZSBhY2Nlc3MgcHJpdmF0ZSBtZXRob2QgKi9cbiAgICBjb25zdCBvcmlnaW5hbExvZ1RyaWdnZXIgPSB0aGlzLnBhY2thZ2UubG9nSW5zdGFsbFRyaWdnZXI7XG4gICAgLyogQHRzLWlnbm9yZSBhY2Nlc3MgcHJpdmF0ZSBtZXRob2QgKi9cbiAgICB0aGlzLnBhY2thZ2UubG9nSW5zdGFsbFRyaWdnZXIgPSAodHJpZ2dlcjogSW5zdGFsbFRyaWdnZXIpID0+IHtcbiAgICAgIGlmICh0cmlnZ2VyLnJlYXNvbiA9PT0gamF2YXNjcmlwdC5JbnN0YWxsUmVhc29uLk5PX05PREVfTU9EVUxFUykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICAvKiBAdHMtaWdub3JlIGFjY2VzcyBwcml2YXRlIG1ldGhvZCAqL1xuICAgICAgcmV0dXJuIG9yaWdpbmFsTG9nVHJpZ2dlci5hcHBseSh0aGlzLnBhY2thZ2UsIFt0cmlnZ2VyXSk7XG4gICAgfTtcblxuICAgIC8vIFByaXZhdGUgcGFja2FnZVxuICAgIGlmIChvcHRpb25zLnByaXZhdGUpIHtcbiAgICAgIHRoaXMucGFja2FnZS5hZGRGaWVsZCgncHJpdmF0ZScsIHRydWUpO1xuICAgIH1cblxuICAgIC8vIFlhcm4gQmVycnkgaW5zdGFsbENvbmZpZ1xuICAgIGlmIChvcHRpb25zLmhvaXN0aW5nTGltaXRzKSB7XG4gICAgICB0aGlzLnBhY2thZ2UuYWRkRmllbGQoJ2luc3RhbGxDb25maWcnLCB7IGhvaXN0aW5nTGltaXRzOiBvcHRpb25zLmhvaXN0aW5nTGltaXRzIH0pO1xuICAgIH1cblxuICAgIC8vIEZpeGVzXG4gICAgdGhpcy5hZGRUc2NvbmZpZ0RldkZpeCgpO1xuICAgIHRoaXMuYWRkRXNsaW50UmNGaXgoKTtcblxuICAgIHRoaXMuYnVuZGxlZERlcHMucHVzaCguLi5vcHRpb25zLmJ1bmRsZWREZXBzID8/IFtdKTtcblxuICAgIC8vIEluZGl2aWR1YWwgd29ya3NwYWNlIHBhY2thZ2VzIHNob3VsZG4ndCBkZXBlbmQgb24gXCJwcm9qZW5cIiwgaXQgZ2V0cyBicm91Z2h0IGluIGF0IHRoZSBtb25vcmVwbyByb290XG4gICAgdGhpcy5kZXBzLnJlbW92ZURlcGVuZGVuY3koJ3Byb2plbicpO1xuICB9XG5cbiAgLyoqXG4gICAqIEkgZG9uJ3Qga25vdyB3aHkgYHRzY29uZmlnLmRldi5qc29uYCBkb2Vzbid0IGhhdmUgYW4gb3V0ZGlyLCBvciB3aGVyZSBpdCdzIHVzZWQsXG4gICAqIGJ1dCBpdCdzIGNhdXNpbmcgaW4tcGxhY2UgYC5qc2AgZmlsZXMgdG8gYXBwZWFyLlxuICAgKi9cbiAgcHJvdGVjdGVkIGFkZFRzY29uZmlnRGV2Rml4KCkge1xuICAgIHRoaXMudHNjb25maWdEZXYuZmlsZS5hZGRPdmVycmlkZSgnY29tcGlsZXJPcHRpb25zLm91dERpcicsICdsaWInKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBOZWVkIHRvIGhhY2sgRVNMaW50IGNvbmZpZ1xuICAgKlxuICAgKiAuZXNsaW50cmMuanMgd2lsbCB0YWtlIHByZWNlZGVuY2Ugb3ZlciB0aGUgSlNPTiBmaWxlLCBpdCB3aWxsIGxvYWQgdGhlXG4gICAqIEpTT04gZmlsZSBhbmQgcGF0Y2ggaXQgd2l0aCBhIGR5bmFtaWMgZGlyZWN0b3J5IG5hbWUgdGhhdCBjYW5ub3QgYmUgcmVwcmVzZW50ZWQgaW5cbiAgICogcGxhaW4gSlNPTiAoc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9wcm9qZW4vcHJvamVuL2lzc3Vlcy8yNDA1KS5cbiAgICpcbiAgICogU2luY2UgZXNsaW50IGNvbmZpZyBpcyBsb2FkZWQgd2l0aCBkaWZmZXJlbnQgY3dkJ3MgZGVwZW5kaW5nIG9uIHdoZXRoZXIgaXQnc1xuICAgKiBmcm9tIHRoZSBWU0NvZGUgcGx1Z2luIG9yIGZyb20gdGhlIGNvbW1hbmQgbGluZSwgdXNlIGFic29sdXRlIHBhdGhzIGV2ZXJ5d2hlcmUuXG4gICAqL1xuICBwcm90ZWN0ZWQgYWRkRXNsaW50UmNGaXgoKSB7XG4gICAgY29uc3QgZXNsaW50UmMgPSBuZXcgU291cmNlQ29kZSh0aGlzLCAnLmVzbGludHJjLmpzJyk7XG4gICAgZXNsaW50UmMubGluZSgndmFyIHBhdGggPSByZXF1aXJlKFxcJ3BhdGhcXCcpOycpO1xuICAgIGVzbGludFJjLmxpbmUoJ3ZhciBmcyA9IHJlcXVpcmUoXFwnZnNcXCcpOycpO1xuICAgIGVzbGludFJjLmxpbmUoJ3ZhciBjb250ZW50cyA9IGZzLnJlYWRGaWxlU3luYyhgJHtfX2Rpcm5hbWV9Ly5lc2xpbnRyYy5qc29uYCwgeyBlbmNvZGluZzogXFwndXRmLThcXCcgfSk7Jyk7XG4gICAgZXNsaW50UmMubGluZSgnLy8gU3RyaXAgY29tbWVudHMsIEpTT04ucGFyc2UoKSBkb2VzblxcJ3QgbGlrZSB0aG9zZScpO1xuICAgIGVzbGludFJjLmxpbmUoJ2NvbnRlbnRzID0gY29udGVudHMucmVwbGFjZSgvXlxcXFwvXFxcXC8uKiQvbSwgXFwnXFwnKTsnKTtcbiAgICBlc2xpbnRSYy5saW5lKCd2YXIganNvbiA9IEpTT04ucGFyc2UoY29udGVudHMpOycpO1xuICAgIGVzbGludFJjLmxpbmUoJy8vIFBhdGNoIHRoZSAuanNvbiBjb25maWcgd2l0aCBzb21ldGhpbmcgdGhhdCBjYW4gb25seSBiZSByZXByZXNlbnRlZCBpbiBKUycpO1xuICAgIGVzbGludFJjLmxpbmUoJ2pzb24ucGFyc2VyT3B0aW9ucy50c2NvbmZpZ1Jvb3REaXIgPSBfX2Rpcm5hbWU7Jyk7XG4gICAgZXNsaW50UmMubGluZSgnbW9kdWxlLmV4cG9ydHMgPSBqc29uOycpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhIHdvcmtzcGFjZSBwYWNrYWdlIGFzIGEgZGVwZW5kZW5jeSwgaW5jbHVkaW5nIHRzY29uZmlnIHByb2plY3QgcmVmZXJlbmNlcy5cbiAgICpcbiAgICogVXNlIHRoaXMgdG8gYWRkIHdvcmtzcGFjZSBkZXBlbmRlbmNpZXMgYWZ0ZXIgY29uc3RydWN0aW9uIChlLmcuIGZyb20gYSBtaXhpbikuXG4gICAqIEl0IGRvZXMgdGhlIHNhbWUgYXMgcGFzc2luZyB0aGUgd29ya3NwYWNlIGluIHRoZSBgZGVwc2AvYGRldkRlcHNgL2BwZWVyRGVwc2AgY29uc3RydWN0b3Igb3B0aW9uLlxuICAgKi9cbiAgcHVibGljIGFkZFdvcmtzcGFjZURlcChyZWY6IElXb3Jrc3BhY2VSZWZlcmVuY2UsIHR5cGU6IERlcGVuZGVuY3lUeXBlID0gRGVwZW5kZW5jeVR5cGUuUlVOVElNRSk6IHZvaWQge1xuICAgIGlmICh0aGlzLmRlcHMudHJ5R2V0RGVwZW5kZW5jeShyZWYubmFtZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICBjYXNlIERlcGVuZGVuY3lUeXBlLlJVTlRJTUU6XG4gICAgICAgIHRoaXMuYWRkRGVwcyhyZWYubmFtZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBEZXBlbmRlbmN5VHlwZS5QRUVSOlxuICAgICAgICB0aGlzLmFkZFBlZXJEZXBzKHJlZi5uYW1lKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIERlcGVuZGVuY3lUeXBlLkRFVkVOVjpcbiAgICAgIGNhc2UgRGVwZW5kZW5jeVR5cGUuQlVJTEQ6XG4gICAgICBjYXNlIERlcGVuZGVuY3lUeXBlLlRFU1Q6XG4gICAgICAgIHRoaXMuYWRkRGV2RGVwcyhyZWYubmFtZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhpcy5hZGREZXBzKHJlZi5uYW1lKTtcbiAgICB9XG4gICAgZm9yIChjb25zdCB0c2NvbmZpZyBvZiBbdGhpcy50c2NvbmZpZywgdGhpcy50c2NvbmZpZ0Rldl0pIHtcbiAgICAgIGlmICh0c2NvbmZpZykge1xuICAgICAgICBjb25zdCByZWxhdGl2ZVBhdGggPSByZWxhdGl2ZShkaXJuYW1lKHRzY29uZmlnLmZpbGUuYWJzb2x1dGVQYXRoKSwgcmVmLm91dGRpcik7XG4gICAgICAgIHRzY29uZmlnPy5maWxlLmFkZFRvQXJyYXkoJ3JlZmVyZW5jZXMnLCB7IHBhdGg6IHJlbGF0aXZlUGF0aCB9KTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5leGNsdWRlRnJvbVVwZ3JhZGUucHVzaChyZWYubmFtZSk7XG4gICAgaWYgKHR5cGUgPT09IERlcGVuZGVuY3lUeXBlLlJVTlRJTUUgfHwgdHlwZSA9PT0gRGVwZW5kZW5jeVR5cGUuUEVFUikge1xuICAgICAgdGhpcy5yZXBvUnVudGltZURlcHNbcmVmLm5hbWVdID0gcmVmLnZlcnNpb25UeXBlO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBwcmVTeW50aGVzaXplKCk6IHZvaWQge1xuICAgIHN1cGVyLnByZVN5bnRoZXNpemUoKTtcbiAgICB0aGlzLnZhbGlkYXRlTm9Qcml2YXRlV29ya3NwYWNlRGVwcygpO1xuICB9XG5cbiAgcHJpdmF0ZSB2YWxpZGF0ZU5vUHJpdmF0ZVdvcmtzcGFjZURlcHMoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNQcml2YXRlUGFja2FnZSkgcmV0dXJuO1xuXG4gICAgY29uc3Qgc2libGluZ3MgPSBuZXcgTWFwKFxuICAgICAgdGhpcy5tb25vcmVwby5zdWJwcm9qZWN0c1xuICAgICAgICAuZmlsdGVyKChwKTogcCBpcyBUeXBlU2NyaXB0V29ya3NwYWNlID0+IHAgaW5zdGFuY2VvZiBUeXBlU2NyaXB0V29ya3NwYWNlKVxuICAgICAgICAubWFwKChwKSA9PiBbcC5uYW1lLCBwXSksXG4gICAgKTtcblxuICAgIGNvbnN0IGlsbGVnYWxEZXBzID0gdGhpcy5kZXBzLmFsbFxuICAgICAgLmZpbHRlcigoZCkgPT4gZC50eXBlID09PSBEZXBlbmRlbmN5VHlwZS5SVU5USU1FIHx8IGQudHlwZSA9PT0gRGVwZW5kZW5jeVR5cGUuUEVFUilcbiAgICAgIC5maWx0ZXIoKGQpID0+IHtcbiAgICAgICAgY29uc3Qgd3MgPSBzaWJsaW5ncy5nZXQoZC5uYW1lKTtcbiAgICAgICAgaWYgKCF3cz8uaXNQcml2YXRlUGFja2FnZSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICBpZiAoZC50eXBlID09PSBEZXBlbmRlbmN5VHlwZS5SVU5USU1FICYmIHRoaXMuYWxsb3dQcml2YXRlRGVwcykgcmV0dXJuIGZhbHNlO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0pXG4gICAgICAubWFwKChkKSA9PiBkLm5hbWUpO1xuXG4gICAgaWYgKGlsbGVnYWxEZXBzLmxlbmd0aCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFtcbiAgICAgICAgYCR7dGhpcy5uYW1lfSBpcyBwdWJsaWMgYW5kIGNhbm5vdCBkZXBlbmQgb24gcHJpdmF0ZSB3b3Jrc3BhY2UgcGFja2FnZXMuYCxcbiAgICAgICAgYElsbGVnYWwgZGVwZW5kZW5jaWVzOlxcbiAgICAtICR7aWxsZWdhbERlcHMuam9pbignXFxuICAgIC0gJyl9YCxcbiAgICAgIF0uam9pbignXFxuJykpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYWxsIFByb2plY3RzIGluIHRoZSB3b3Jrc3BhY2UgdGhhdCBhcmUgYWxzbyBkZXBlbmRlbmNpZXMuXG4gICAqXG4gICAqIE9wdGlvbmFsbHkgZmlsdGVyIGJ5IGRlcGVuZGVuY3kgdHlwZS5cbiAgICovXG4gIHB1YmxpYyB3b3Jrc3BhY2VEZXBlbmRlbmNpZXModHlwZXM/OiBEZXBlbmRlbmN5VHlwZVtdKTogUHJvamVjdFtdIHtcbiAgICByZXR1cm4gdGhpcy5tb25vcmVwby5zdWJwcm9qZWN0cy5maWx0ZXIoKHNpYmxpbmcpID0+XG4gICAgICB0aGlzLmRlcHMuYWxsLnNvbWUoKGQpID0+IGQubmFtZSA9PT0gc2libGluZy5uYW1lICYmICghdHlwZXMgfHwgdHlwZXMuaW5jbHVkZXMoZC50eXBlKSkpLFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGEgc3BlY2lhbGl6ZWQgcmVmZXJlbmNlIHRvIHRoaXMgd29ya3NwYWNlXG4gICAqL1xuICBwdWJsaWMgY3VzdG9taXplUmVmZXJlbmNlKHJlZk9wdHM/OiBSZWZlcmVuY2VPcHRpb25zKTogSVdvcmtzcGFjZVJlZmVyZW5jZSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG5hbWU6IHRoaXMubmFtZSxcbiAgICAgIG91dGRpcjogdGhpcy5vdXRkaXIsXG4gICAgICBpc1ByaXZhdGVQYWNrYWdlOiB0aGlzLmlzUHJpdmF0ZVBhY2thZ2UsXG4gICAgICB2ZXJzaW9uVHlwZTogcmVmT3B0cz8udmVyc2lvblR5cGUgPz8gdGhpcy52ZXJzaW9uVHlwZSxcbiAgICB9O1xuICB9XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgdGhlIGB3b3Jrc3BhY2UuY3VzdG9taXplUmVmZXJlbmNlKClgIG1ldGhvZFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlZmVyZW5jZU9wdGlvbnMge1xuICAvKipcbiAgICogV2hhdCB0eXBlIG9mIGRlcGVuZGVuY3kgdG8gdGFrZSBvbiB0aGlzIHBhY2thZ2VcbiAgICpcbiAgICogQnkgZGVmYXVsdCwgZGVwZW5kZW5jaWVzIHdpbGwgYmUgcmVmZXJlbmNlZCB3aXRoIGEgYF5gLCB3aGljaCBtZWFucyB0aGF0XG4gICAqIGNvbWUgaW5zdGFsbCB0aW1lIGEgbmV3ZXIgdmVyc2lvbiBtYXkgYmUgaW5zdGFsbGVkLlxuICAgKlxuICAgKiBDaG9vc2UgYSBkaWZmZXJlbnQgcmFuZ2UgdHlwZSB0byB0YWtlLCBmb3IgZXhhbXBsZSwgYW4gYGV4YWN0YCBkZXBlbmRlbmN5LlxuICAgKlxuICAgKiBAZGVmYXVsdCAnZnV0dXJlLW1pbm9yJ1xuICAgKi9cbiAgcmVhZG9ubHkgdmVyc2lvblR5cGU/OiBWZXJzaW9uVHlwZTtcbn1cblxuZnVuY3Rpb24gd2l0aG91dDxBIGV4dGVuZHMgb2JqZWN0LCBLIGV4dGVuZHMga2V5b2YgQT4oeDogQSwgLi4ua3M6IEtbXSk6IE9taXQ8QSwgSz4ge1xuICBjb25zdCByZXQgPSB7IC4uLnggfTtcbiAgZm9yIChjb25zdCBrIG9mIGtzKSB7XG4gICAgZGVsZXRlIHJldFtrXTtcbiAgfVxuICByZXR1cm4gcmV0O1xufVxuXG5mdW5jdGlvbiBpc1dvcmtzcGFjZVJlZmVyZW5jZSh4OiB1bmtub3duKTogeCBpcyBJV29ya3NwYWNlUmVmZXJlbmNlIHtcbiAgcmV0dXJuIHR5cGVvZiB4ID09PSAnb2JqZWN0JyAmJiAhIXggJiYgKFsnaXNQcml2YXRlUGFja2FnZScsICd2ZXJzaW9uVHlwZScsICduYW1lJywgJ291dGRpciddIHNhdGlzZmllcyBBcnJheTxrZXlvZiBJV29ya3NwYWNlUmVmZXJlbmNlPikuZXZlcnkoayA9PiAoeCBhcyBhbnkpW2tdICE9PSB1bmRlZmluZWQpO1xufVxuXG5mdW5jdGlvbiBpc05vdFdvcmtzcGFjZVJlZmVyZW5jZSh4OiB1bmtub3duKTogeCBpcyBzdHJpbmcge1xuICByZXR1cm4gIWlzV29ya3NwYWNlUmVmZXJlbmNlKHgpO1xufVxuIl19
|
package/package.json
CHANGED
|
@@ -35,7 +35,7 @@
|
|
|
35
35
|
"organization": true
|
|
36
36
|
},
|
|
37
37
|
"devDependencies": {
|
|
38
|
-
"@jsii/spec": "^1.
|
|
38
|
+
"@jsii/spec": "^1.137.0",
|
|
39
39
|
"@stylistic/eslint-plugin": "^2",
|
|
40
40
|
"@types/jest": "^29",
|
|
41
41
|
"@types/node": "^18",
|
|
@@ -49,10 +49,10 @@
|
|
|
49
49
|
"jest": "^29",
|
|
50
50
|
"jest-junit": "^17",
|
|
51
51
|
"jsii": "~5.9",
|
|
52
|
-
"jsii-diff": "^1.
|
|
52
|
+
"jsii-diff": "^1.137.0",
|
|
53
53
|
"jsii-docgen": "^10.5.0",
|
|
54
|
-
"jsii-pacmak": "^1.
|
|
55
|
-
"jsii-reflect": "^1.
|
|
54
|
+
"jsii-pacmak": "^1.137.0",
|
|
55
|
+
"jsii-reflect": "^1.137.0",
|
|
56
56
|
"jsii-rosetta": "~5.9",
|
|
57
57
|
"projen": "^0.100.5",
|
|
58
58
|
"ts-jest": "^29",
|
|
@@ -82,7 +82,7 @@
|
|
|
82
82
|
"publishConfig": {
|
|
83
83
|
"access": "public"
|
|
84
84
|
},
|
|
85
|
-
"version": "0.6.
|
|
85
|
+
"version": "0.6.1",
|
|
86
86
|
"packageManager": "yarn@4.13.0",
|
|
87
87
|
"jest": {
|
|
88
88
|
"coverageProvider": "v8",
|