cdklabs-projen-project-types 0.3.35 → 0.4.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 +10 -10
- 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/monorepo-release.js +191 -72
- package/lib/yarn/monorepo.js +2 -2
- package/lib/yarn/typescript-workspace-release.js +1 -1
- package/lib/yarn/typescript-workspace.js +1 -1
- package/node_modules/yaml/browser/dist/compose/composer.js +4 -2
- package/node_modules/yaml/browser/dist/parse/lexer.js +28 -24
- package/node_modules/yaml/browser/dist/parse/parser.js +12 -4
- package/node_modules/yaml/dist/compose/composer.js +4 -2
- package/node_modules/yaml/dist/parse/lexer.js +28 -24
- package/node_modules/yaml/dist/parse/parser.js +12 -4
- package/node_modules/yaml/package.json +1 -1
- package/package.json +7 -7
package/.jsii
CHANGED
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
]
|
|
9
9
|
},
|
|
10
10
|
"bundled": {
|
|
11
|
-
"yaml": "^2.
|
|
11
|
+
"yaml": "^2.9.0"
|
|
12
12
|
},
|
|
13
13
|
"dependencies": {
|
|
14
14
|
"constructs": "^10.0.0",
|
|
@@ -87,7 +87,7 @@
|
|
|
87
87
|
"stability": "stable"
|
|
88
88
|
},
|
|
89
89
|
"homepage": "https://github.com/cdklabs/cdklabs-projen-project-types.git",
|
|
90
|
-
"jsiiVersion": "5.9.
|
|
90
|
+
"jsiiVersion": "5.9.41 (build 8930737)",
|
|
91
91
|
"license": "Apache-2.0",
|
|
92
92
|
"metadata": {
|
|
93
93
|
"jsii": {
|
|
@@ -11533,7 +11533,7 @@
|
|
|
11533
11533
|
},
|
|
11534
11534
|
"locationInModule": {
|
|
11535
11535
|
"filename": "src/yarn/monorepo-release.ts",
|
|
11536
|
-
"line":
|
|
11536
|
+
"line": 43
|
|
11537
11537
|
},
|
|
11538
11538
|
"parameters": [
|
|
11539
11539
|
{
|
|
@@ -11554,7 +11554,7 @@
|
|
|
11554
11554
|
"kind": "class",
|
|
11555
11555
|
"locationInModule": {
|
|
11556
11556
|
"filename": "src/yarn/monorepo-release.ts",
|
|
11557
|
-
"line":
|
|
11557
|
+
"line": 14
|
|
11558
11558
|
},
|
|
11559
11559
|
"methods": [
|
|
11560
11560
|
{
|
|
@@ -11564,7 +11564,7 @@
|
|
|
11564
11564
|
},
|
|
11565
11565
|
"locationInModule": {
|
|
11566
11566
|
"filename": "src/yarn/monorepo-release.ts",
|
|
11567
|
-
"line":
|
|
11567
|
+
"line": 19
|
|
11568
11568
|
},
|
|
11569
11569
|
"name": "of",
|
|
11570
11570
|
"parameters": [
|
|
@@ -11589,7 +11589,7 @@
|
|
|
11589
11589
|
},
|
|
11590
11590
|
"locationInModule": {
|
|
11591
11591
|
"filename": "src/yarn/monorepo-release.ts",
|
|
11592
|
-
"line":
|
|
11592
|
+
"line": 65
|
|
11593
11593
|
},
|
|
11594
11594
|
"name": "addWorkspace",
|
|
11595
11595
|
"parameters": [
|
|
@@ -11614,7 +11614,7 @@
|
|
|
11614
11614
|
},
|
|
11615
11615
|
"locationInModule": {
|
|
11616
11616
|
"filename": "src/yarn/monorepo-release.ts",
|
|
11617
|
-
"line":
|
|
11617
|
+
"line": 99
|
|
11618
11618
|
},
|
|
11619
11619
|
"name": "preSynthesize",
|
|
11620
11620
|
"overrides": "projen.Component"
|
|
@@ -11625,7 +11625,7 @@
|
|
|
11625
11625
|
},
|
|
11626
11626
|
"locationInModule": {
|
|
11627
11627
|
"filename": "src/yarn/monorepo-release.ts",
|
|
11628
|
-
"line":
|
|
11628
|
+
"line": 57
|
|
11629
11629
|
},
|
|
11630
11630
|
"name": "workspaceRelease",
|
|
11631
11631
|
"parameters": [
|
|
@@ -15675,6 +15675,6 @@
|
|
|
15675
15675
|
"usedFeatures": [
|
|
15676
15676
|
"class-covariant-overrides"
|
|
15677
15677
|
],
|
|
15678
|
-
"version": "0.
|
|
15679
|
-
"fingerprint": "
|
|
15678
|
+
"version": "0.4.0",
|
|
15679
|
+
"fingerprint": "Ygn/wS2X2hjHUKvc2ukP3RXsiUurr4uioM4nMa8GRSk="
|
|
15680
15680
|
}
|
package/.yarn/install-state.gz
CHANGED
|
Binary file
|
package/lib/cdk.js
CHANGED
|
@@ -55,7 +55,7 @@ class CdkConstructLibrary extends projen_1.awscdk.AwsCdkConstructLibrary {
|
|
|
55
55
|
}
|
|
56
56
|
exports.CdkConstructLibrary = CdkConstructLibrary;
|
|
57
57
|
_a = JSII_RTTI_SYMBOL_1;
|
|
58
|
-
CdkConstructLibrary[_a] = { fqn: "cdklabs-projen-project-types.CdkConstructLibrary", version: "0.
|
|
58
|
+
CdkConstructLibrary[_a] = { fqn: "cdklabs-projen-project-types.CdkConstructLibrary", version: "0.4.0" };
|
|
59
59
|
/**
|
|
60
60
|
* Create a Cdk TypeScript Project
|
|
61
61
|
*
|
|
@@ -71,5 +71,5 @@ class CdkTypeScriptProject extends projen_1.typescript.TypeScriptProject {
|
|
|
71
71
|
}
|
|
72
72
|
exports.CdkTypeScriptProject = CdkTypeScriptProject;
|
|
73
73
|
_b = JSII_RTTI_SYMBOL_1;
|
|
74
|
-
CdkTypeScriptProject[_b] = { fqn: "cdklabs-projen-project-types.CdkTypeScriptProject", version: "0.
|
|
74
|
+
CdkTypeScriptProject[_b] = { fqn: "cdklabs-projen-project-types.CdkTypeScriptProject", version: "0.4.0" };
|
|
75
75
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2RrLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2Nkay50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLG1DQUFpRDtBQUdqRCxxREFBd0Y7QUFDeEYsaURBQTZDO0FBQzdDLHVDQUFvQztBQUdwQzs7OztHQUlHO0FBQ0gsTUFBYSxtQkFBb0IsU0FBUSxlQUFNLENBQUMsc0JBQXNCO0lBQzVELE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxPQUFtQztRQUN0RSxNQUFNLE1BQU0sR0FBYSxFQUFFLENBQUM7UUFDNUIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUMzQixNQUFNLENBQUMsSUFBSSxDQUFDLCtEQUErRCxDQUFDLENBQUM7UUFDL0UsQ0FBQztRQUNELElBQUksQ0FBQyxPQUFPLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDNUIsTUFBTSxDQUFDLElBQUksQ0FBQyw4REFBOEQsQ0FBQyxDQUFDO1FBQzlFLENBQUM7UUFDRCxJQUFJLENBQUMsT0FBTyxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQzVCLE1BQU0sQ0FBQyxJQUFJLENBQUMsOERBQThELENBQUMsQ0FBQztRQUM5RSxDQUFDO1FBQ0QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUN6QixNQUFNLENBQUMsSUFBSSxDQUFDLDJEQUEyRCxDQUFDLENBQUM7UUFDM0UsQ0FBQztRQUNELE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFJRCxZQUFZLE9BQW1DO1FBQzdDLElBQUksT0FBTyxDQUFDLFNBQVMsS0FBSyxZQUFHLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQy9DLE1BQU0sTUFBTSxHQUFHLG1CQUFtQixDQUFDLHFCQUFxQixDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ2xFLElBQUksTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDdEIsTUFBTSxJQUFJLEtBQUssQ0FBQyxvRkFBb0YsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDN0gsQ0FBQztRQUNILENBQUM7UUFFRCxNQUFNLElBQUksR0FBRyxJQUFBLDBDQUF5QixFQUFDO1lBQ3JDLEdBQUcsT0FBTztZQUNWLGtEQUFrRDtZQUNsRCxVQUFVLEVBQUUsT0FBTyxDQUFDLFVBQVUsSUFBSSxPQUFPLENBQUMsYUFBYTtTQUN4RCxDQUFDLENBQUM7UUFFSCxLQUFLLENBQUM7WUFDSixTQUFTLEVBQUUsWUFBRyxDQUFDLFNBQVMsQ0FBQyxZQUFZO1lBQ3JDLHNEQUFzRDtZQUN0RCxhQUFhLEVBQUUsSUFBSSxDQUFDLFVBQVU7WUFDOUIsR0FBRyxJQUFJO1NBQ1IsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO1FBRTVCLElBQUksaUJBQU8sQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQzFDLElBQUksMEJBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUV0QixJQUFBLDBDQUF5QixFQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztJQUN4QyxDQUFDOztBQTlDSCxrREErQ0M7OztBQUlEOzs7O0dBSUc7QUFDSCxNQUFhLG9CQUFxQixTQUFRLG1CQUFVLENBQUMsaUJBQWlCO0lBR3BFLFlBQVksT0FBb0M7UUFDOUMsTUFBTSxJQUFJLEdBQUcsSUFBQSwwQ0FBeUIsRUFBQyxPQUFPLENBQUMsQ0FBQztRQUNoRCxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDWixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUM7UUFFNUIsSUFBQSwwQ0FBeUIsRUFBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDeEMsQ0FBQzs7QUFUSCxvREFVQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGF3c2NkaywgY2RrLCB0eXBlc2NyaXB0IH0gZnJvbSAncHJvamVuJztcbmltcG9ydCB7IENka0NvbW1vbk9wdGlvbnMgfSBmcm9tICcuL2Nkay1jb21tb24tb3B0aW9ucyc7XG5pbXBvcnQgeyBDZGtDb25zdHJ1Y3RMaWJyYXJ5T3B0aW9ucyB9IGZyb20gJy4vY2RrLWNvbnN0cnVjdC1saWJyYXJ5LW9wdGlvbnMnO1xuaW1wb3J0IHsgY29uZmlndXJlQ29tbW9uQ29tcG9uZW50cywgd2l0aENvbW1vbk9wdGlvbnNEZWZhdWx0cyB9IGZyb20gJy4vY29tbW9uLW9wdGlvbnMnO1xuaW1wb3J0IHsgSW50ZWdSdW5uZXIgfSBmcm9tICcuL2ludGVnLXJ1bm5lcic7XG5pbXBvcnQgeyBSb3NldHRhIH0gZnJvbSAnLi9yb3NldHRhJztcblxuXG4vKipcbiAqIENyZWF0ZSBhIENkayBDb25zdHJ1Y3QgTGlicmFyeSBQcm9qZWN0XG4gKlxuICogQHBqaWQgY2RrLWNvbnN0cnVjdC1saWJcbiAqL1xuZXhwb3J0IGNsYXNzIENka0NvbnN0cnVjdExpYnJhcnkgZXh0ZW5kcyBhd3NjZGsuQXdzQ2RrQ29uc3RydWN0TGlicmFyeSB7XG4gIHByaXZhdGUgc3RhdGljIHN0YWJpbGl0eVJlcXVpcmVtZW50cyhvcHRpb25zOiBDZGtDb25zdHJ1Y3RMaWJyYXJ5T3B0aW9ucyk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBlcnJvcnM6IHN0cmluZ1tdID0gW107XG4gICAgaWYgKCFvcHRpb25zLnB1Ymxpc2hUb1B5cGkpIHtcbiAgICAgIGVycm9ycy5wdXNoKCdQdWJsaXNoaW5nIEVycm9yOiBwcm9qZWN0IG5vdCBjb25maWd1cmVkIHRvIHB1Ymxpc2ggdG8gUHl0aG9uJyk7XG4gICAgfVxuICAgIGlmICghb3B0aW9ucy5wdWJsaXNoVG9NYXZlbikge1xuICAgICAgZXJyb3JzLnB1c2goJ1B1Ymxpc2hpbmcgRXJyb3I6IHByb2plY3Qgbm90IGNvbmZpZ3VyZWQgdG8gcHVibGlzaCB0byBNYXZlbicpO1xuICAgIH1cbiAgICBpZiAoIW9wdGlvbnMucHVibGlzaFRvTnVnZXQpIHtcbiAgICAgIGVycm9ycy5wdXNoKCdQdWJsaXNoaW5nIEVycm9yOiBwcm9qZWN0IG5vdCBjb25maWd1cmVkIHRvIHB1Ymxpc2ggdG8gTnVnZXQnKTtcbiAgICB9XG4gICAgaWYgKCFvcHRpb25zLnB1Ymxpc2hUb0dvKSB7XG4gICAgICBlcnJvcnMucHVzaCgnUHVibGlzaGluZyBFcnJvcjogcHJvamVjdCBub3QgY29uZmlndXJlZCB0byBwdWJsaXNoIHRvIEdvJyk7XG4gICAgfVxuICAgIHJldHVybiBlcnJvcnM7XG4gIH1cblxuICBwdWJsaWMgcmVhZG9ubHkgcHJpdmF0ZTogYm9vbGVhbjtcblxuICBjb25zdHJ1Y3RvcihvcHRpb25zOiBDZGtDb25zdHJ1Y3RMaWJyYXJ5T3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zLnN0YWJpbGl0eSA9PT0gY2RrLlN0YWJpbGl0eS5TVEFCTEUpIHtcbiAgICAgIGNvbnN0IGVycm9ycyA9IENka0NvbnN0cnVjdExpYnJhcnkuc3RhYmlsaXR5UmVxdWlyZW1lbnRzKG9wdGlvbnMpO1xuICAgICAgaWYgKGVycm9ycy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVGhlIHByb2plY3QgZG9lcyBub3QgcGFzcyBzdGFiaWxpdHkgcmVxdWlyZW1lbnRzIGR1ZSB0byB0aGUgZm9sbG93aW5nIGVycm9yczpcXG4gICR7ZXJyb3JzLmpvaW4oJ1xcbiAgJyl9YCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3Qgb3B0cyA9IHdpdGhDb21tb25PcHRpb25zRGVmYXVsdHMoe1xuICAgICAgLi4ub3B0aW9ucyxcbiAgICAgIC8vIGFsc28gYWNjZXB0IHRoZSBkZXByZWNhdGVkIHJlcG9zaXRvcnlVcmwgb3B0aW9uXG4gICAgICByZXBvc2l0b3J5OiBvcHRpb25zLnJlcG9zaXRvcnkgPz8gb3B0aW9ucy5yZXBvc2l0b3J5VXJsLFxuICAgIH0pO1xuXG4gICAgc3VwZXIoe1xuICAgICAgc3RhYmlsaXR5OiBjZGsuU3RhYmlsaXR5LkVYUEVSSU1FTlRBTCxcbiAgICAgIC8vIHVwc3RyZWFtIEpzaWlQcm9qZWN0IHVzZXMgYSBkaWZmZXJlbnQgbmFtZSBmb3IgdGhpc1xuICAgICAgcmVwb3NpdG9yeVVybDogb3B0cy5yZXBvc2l0b3J5LFxuICAgICAgLi4ub3B0cyxcbiAgICB9KTtcbiAgICB0aGlzLnByaXZhdGUgPSBvcHRzLnByaXZhdGU7XG5cbiAgICBuZXcgUm9zZXR0YSh0aGlzLCBvcHRpb25zLnJvc2V0dGFPcHRpb25zKTtcbiAgICBuZXcgSW50ZWdSdW5uZXIodGhpcyk7XG5cbiAgICBjb25maWd1cmVDb21tb25Db21wb25lbnRzKHRoaXMsIG9wdHMpO1xuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2RrVHlwZVNjcmlwdFByb2plY3RPcHRpb25zIGV4dGVuZHMgdHlwZXNjcmlwdC5UeXBlU2NyaXB0UHJvamVjdE9wdGlvbnMsIENka0NvbW1vbk9wdGlvbnMgeyB9XG5cbi8qKlxuICogQ3JlYXRlIGEgQ2RrIFR5cGVTY3JpcHQgUHJvamVjdFxuICpcbiAqIEBwamlkIGNkay10cy1wcm9qXG4gKi9cbmV4cG9ydCBjbGFzcyBDZGtUeXBlU2NyaXB0UHJvamVjdCBleHRlbmRzIHR5cGVzY3JpcHQuVHlwZVNjcmlwdFByb2plY3Qge1xuICBwdWJsaWMgcmVhZG9ubHkgcHJpdmF0ZTogYm9vbGVhbjtcblxuICBjb25zdHJ1Y3RvcihvcHRpb25zOiBDZGtUeXBlU2NyaXB0UHJvamVjdE9wdGlvbnMpIHtcbiAgICBjb25zdCBvcHRzID0gd2l0aENvbW1vbk9wdGlvbnNEZWZhdWx0cyhvcHRpb25zKTtcbiAgICBzdXBlcihvcHRzKTtcbiAgICB0aGlzLnByaXZhdGUgPSBvcHRzLnByaXZhdGU7XG5cbiAgICBjb25maWd1cmVDb21tb25Db21wb25lbnRzKHRoaXMsIG9wdHMpO1xuICB9XG59XG4iXX0=
|
package/lib/cdklabs.js
CHANGED
|
@@ -129,7 +129,7 @@ class CdklabsConstructLibrary extends cdk_1.CdkConstructLibrary {
|
|
|
129
129
|
}
|
|
130
130
|
exports.CdklabsConstructLibrary = CdklabsConstructLibrary;
|
|
131
131
|
_a = JSII_RTTI_SYMBOL_1;
|
|
132
|
-
CdklabsConstructLibrary[_a] = { fqn: "cdklabs-projen-project-types.CdklabsConstructLibrary", version: "0.
|
|
132
|
+
CdklabsConstructLibrary[_a] = { fqn: "cdklabs-projen-project-types.CdklabsConstructLibrary", version: "0.4.0" };
|
|
133
133
|
/**
|
|
134
134
|
* Create a Cdklabs TypeScript Project
|
|
135
135
|
*
|
|
@@ -150,7 +150,7 @@ class CdklabsTypeScriptProject extends cdk_1.CdkTypeScriptProject {
|
|
|
150
150
|
}
|
|
151
151
|
exports.CdklabsTypeScriptProject = CdklabsTypeScriptProject;
|
|
152
152
|
_b = JSII_RTTI_SYMBOL_1;
|
|
153
|
-
CdklabsTypeScriptProject[_b] = { fqn: "cdklabs-projen-project-types.CdklabsTypeScriptProject", version: "0.
|
|
153
|
+
CdklabsTypeScriptProject[_b] = { fqn: "cdklabs-projen-project-types.CdklabsTypeScriptProject", version: "0.4.0" };
|
|
154
154
|
/**
|
|
155
155
|
* Create a Cdklabs Jsii Project
|
|
156
156
|
*
|
|
@@ -173,5 +173,5 @@ class CdklabsJsiiProject extends jsii_1.CdkJsiiProject {
|
|
|
173
173
|
}
|
|
174
174
|
exports.CdklabsJsiiProject = CdklabsJsiiProject;
|
|
175
175
|
_c = JSII_RTTI_SYMBOL_1;
|
|
176
|
-
CdklabsJsiiProject[_c] = { fqn: "cdklabs-projen-project-types.CdklabsJsiiProject", version: "0.
|
|
176
|
+
CdklabsJsiiProject[_c] = { fqn: "cdklabs-projen-project-types.CdklabsJsiiProject", version: "0.4.0" };
|
|
177
177
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2RrbGFicy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9jZGtsYWJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsK0JBQWdDO0FBQ2hDLHNEQUF1RDtBQUN2RCwwQ0FBNEM7QUFFNUMsSUFBWSxZQUtYO0FBTEQsV0FBWSxZQUFZO0lBQ3RCLG1EQUFNLENBQUE7SUFDTiwrQ0FBSSxDQUFBO0lBQ0osbURBQU0sQ0FBQTtJQUNOLDJDQUFFLENBQUE7QUFDSixDQUFDLEVBTFcsWUFBWSw0QkFBWixZQUFZLFFBS3ZCO0FBQUEsQ0FBQztBQUVGLCtCQUllO0FBR2YsaUNBQXdDO0FBQ3hDLHdDQUF3QztBQUN4QyxtQ0FBMkM7QUFFM0Msd0VBQXdFO0FBQ3hFLE1BQU0sa0JBQWtCLEdBQUc7SUFDekIsTUFBTSxFQUFFLHFCQUFxQjtJQUM3QixVQUFVLEVBQUUscUJBQXFCO0lBQ2pDLGFBQWEsRUFBRSx3QkFBd0I7SUFDdkMsV0FBVyxFQUFFLHdCQUF3QjtJQUNyQyxrQkFBa0IsRUFBRSxJQUFJO0NBQ3pCLENBQUM7QUFFRixNQUFNLG1CQUFtQixHQUE0QztJQUNuRSxtQkFBbUIsRUFBRSxJQUFJO0lBQ3pCLGNBQWMsRUFBRSxTQUFTO0lBQ3pCLG1CQUFtQixFQUFFLE9BQU87SUFDNUIsV0FBVyxFQUFFO1FBQ1gsY0FBYyxFQUFFLDJCQUFjLENBQUMsTUFBTTtLQUN0QztJQUNELG9CQUFvQixFQUFFLE1BQU07SUFDNUIsbUZBQW1GO0lBQ25GLHdGQUF3RjtJQUN4RixvREFBb0Q7SUFDcEQsaUJBQWlCLEVBQUUsMEJBQWlCLENBQUMsZ0JBQWdCLEVBQUU7SUFDdkQsV0FBVyxFQUFFLE1BQU07Q0FDcEIsQ0FBQztBQUVGLFNBQVMsK0JBQStCLENBQUMsY0FBc0IsRUFBRSxLQUFzQjtJQUNyRixNQUFNLGVBQWUsR0FBRyxJQUFBLGVBQVEsRUFBQyxjQUFjLENBQUMsQ0FBQztJQUVqRCxPQUFPLHdCQUF3QixDQUFDLFNBQVMsRUFB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QWtDO1FBQzVDLE1BQU0sNkJBQTZCLEdBQXdCLENBQUMsT0FBTyxDQUFDLHlCQUF5QixJQUFJLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDdEcsK0JBQStCLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ2xGLDJEQUEyRDtRQUMzRCxNQUFNLGFBQWEsR0FBRyxJQUFBLGdCQUFTLEVBQUM7WUFDOUIsRUFBRTtZQUNGLG1CQUFtQjtZQUNuQiw2QkFBNkI7WUFDN0IsT0FBTztZQUNQLGtCQUFrQjtTQUNuQixDQUE4QixDQUFDO1FBRWhDLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUN2QixDQUFDOztBQWRILGdEQWVDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgYmFzZW5hbWUgfSBmcm9tICdwYXRoJztcbmltcG9ydCB7IFVwZGF0ZVNuYXBzaG90IH0gZnJvbSAncHJvamVuL2xpYi9qYXZhc2NyaXB0JztcbmltcG9ydCB7IGRlZXBNZXJnZSB9IGZyb20gJ3Byb2plbi9saWIvdXRpbCc7XG5cbmV4cG9ydCBlbnVtIEpzaWlMYW5ndWFnZSB7XG4gIFBZVEhPTixcbiAgSkFWQSxcbiAgRE9UTkVULFxuICBHTyxcbn07XG5cbmltcG9ydCB7XG4gIENka0NvbnN0cnVjdExpYnJhcnksXG4gIENka1R5cGVTY3JpcHRQcm9qZWN0LFxuICBDZGtUeXBlU2NyaXB0UHJvamVjdE9wdGlvbnMsXG59IGZyb20gJy4vY2RrJztcbmltcG9ydCB7IENka0NvbnN0cnVjdExpYnJhcnlPcHRpb25zIH0gZnJvbSAnLi9jZGstY29uc3RydWN0LWxpYnJhcnktb3B0aW9ucyc7XG5pbXBvcnQgeyBDZGtKc2lpUHJvamVjdE9wdGlvbnMgfSBmcm9tICcuL2Nkay1qc2lpLW9wdGlvbnMnO1xuaW1wb3J0IHsgQ2RrSnNpaVByb2plY3QgfSBmcm9tICcuL2pzaWknO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9vcmRlclxuaW1wb3J0IHsgUmVsZWFzYWJsZUNvbW1pdHMgfSBmcm9tICdwcm9qZW4nO1xuXG4vLyBvdmVycmlkZSB0aGVzZSBwcm9wZXJ0aWVzIG5vIG1hdHRlciB3aGF0IHZhbHVlcyBhcmUgZ2l2ZW4gY2xpZW50LXNpZGVcbmNvbnN0IGNka2xhYnNGb3JjZWRQcm9wcyA9IHtcbiAgYXV0aG9yOiAnQW1hem9uIFdlYiBTZXJ2aWNlcycsXG4gIGF1dGhvck5hbWU6ICdBbWF6b24gV2ViIFNlcnZpY2VzJyxcbiAgYXV0aG9yQWRkcmVzczogJ2F3cy1jZGstZGV2QGFtYXpvbi5jb20nLFxuICBhdXRob3JFbWFpbDogJ2F3cy1jZGstZGV2QGFtYXpvbi5jb20nLFxuICBhdXRob3JPcmdhbml6YXRpb246IHRydWUsXG59O1xuXG5jb25zdCBjZGtsYWJzRGVmYXVsdFByb3BzOiBQYXJ0aWFsPENka2xhYnNDb25zdHJ1Y3RMaWJyYXJ5T3B0aW9ucz4gPSB7XG4gIGF1dG9BcHByb3ZlVXBncmFkZXM6IHRydWUsXG4gIG1pbk5vZGVWZXJzaW9uOiAnMTguMTIuMCcsXG4gIHdvcmtmbG93Tm9kZVZlcnNpb246ICdsdHMvKicsXG4gIGplc3RPcHRpb25zOiB7XG4gICAgdXBkYXRlU25hcHNob3Q6IFVwZGF0ZVNuYXBzaG90LkFMV0FZUyxcbiAgfSxcbiAgZGVmYXVsdFJlbGVhc2VCcmFuY2g6ICdtYWluJyxcbiAgLy8gRGVmYXVsdCBpcyB0byByZWxlYXNlIG9ubHkgZmVhdHVyZXMgYW5kIGZpeGVzLiBJZiB3ZSBkb24ndCBkbyB0aGlzLCBldmVyeSBwcm9qZW5cbiAgLy8gcHJvamVjdCB3aWxsIGJhc2ljYWxseSByZWxlYXNlIGV2ZXJ5IGRheSwgYmVjYXVzZSBpdCB3aWxsIHNlZSBkZXZEZXBlbmRlbmNpZXMgdXBkYXRlc1xuICAvLyBldmVyeSBkYXksIGV2ZW4gdGhvdWdoIHRob3NlIGFyZSBub3QgaW50ZXJlc3RpbmcuXG4gIHJlbGVhc2FibGVDb21taXRzOiBSZWxlYXNhYmxlQ29tbWl0cy5mZWF0dXJlc0FuZEZpeGVzKCksXG4gIGpzaWlWZXJzaW9uOiAnfjUuOScsXG59O1xuXG5mdW5jdGlvbiBjcmVhdGVDZGtsYWJzUHVibGlzaGluZ0RlZmF1bHRzKG5wbVBhY2thZ2VOYW1lOiBzdHJpbmcsIGxhbmdzPzogSnNpaUxhbmd1YWdlW10pIHtcbiAgY29uc3QgcGFja2FnZUJhc2VuYW1lID0gYmFzZW5hbWUobnBtUGFja2FnZU5hbWUpO1xuXG4gIHJldHVybiBjcmVhdGVQdWJsaXNoaW5nRGVmYXVsdHMoJ2Nka2xhYnMnLCBwYWNrYWdlQmFzZW5hbWUsIEJvb2xlYW4ocGFja2FnZUJhc2VuYW1lICE9PSBucG1QYWNrYWdlTmFtZSksIGxhbmdzKTtcbn07XG5cbmZ1bmN0aW9uIGNyZWF0ZVB1Ymxpc2hpbmdEZWZhdWx0cyhuYW1lc3BhY2U6IHN0cmluZywgcGFja2FnZUJhc2VuYW1lOiBzdHJpbmcsIGFsd2F5c1VzZU5hbWVzcGFjZSA9IHRydWUsIGxhbmdzPzogSnNpaUxhbmd1YWdlW10pIHtcbiAgY29uc3QgcGlQeVByZWZpeCA9IGFsd2F5c1VzZU5hbWVzcGFjZSA/IGAke25hbWVzcGFjZX0uYCA6ICcnO1xuICBjb25zdCBudWdldFByZWZpeCA9IGFsd2F5c1VzZU5hbWVzcGFjZSA/IGAke3VwcGVyQ2FzZU5hbWUobmFtZXNwYWNlKX0uYCA6IGAke3VwcGVyQ2FzZU5hbWUobmFtZXNwYWNlKX1gO1xuXG4gIHJldHVybiB7XG4gICAgLi4uY3JlYXRlTnBtUHVibGlzaGluZ0RlZmF1bHRzKCksXG4gICAgLi4ucHVibGlzaExhbmd1YWdlV3JhcHBlcihKc2lpTGFuZ3VhZ2UuUFlUSE9OLCB7XG4gICAgICBwdWJsaXNoVG9QeXBpOiB7XG4gICAgICAgIHRydXN0ZWRQdWJsaXNoaW5nOiAxLFxuICAgICAgICBkaXN0TmFtZTogYCR7cGlQeVByZWZpeH0ke3BhY2thZ2VCYXNlbmFtZX1gLFxuICAgICAgICBtb2R1bGU6IGAke3BpUHlQcmVmaXh9JHtjaGFuZ2VEZWxpbWl0ZXIocGFja2FnZUJhc2VuYW1lLCAnXycpfWAsXG4gICAgICB9LFxuICAgIH0pLFxuICAgIC4uLnB1Ymxpc2hMYW5ndWFnZVdyYXBwZXIoSnNpaUxhbmd1YWdlLkpBVkEsIHtcbiAgICAgIHB1Ymxpc2hUb01hdmVuOiB7XG4gICAgICAgIGphdmFQYWNrYWdlOiBgaW8uZ2l0aHViLiR7bmFtZXNwYWNlfS4ke2NoYW5nZURlbGltaXRlcihwYWNrYWdlQmFzZW5hbWUsICcuJyl9YCxcbiAgICAgICAgbWF2ZW5Hcm91cElkOiBgaW8uZ2l0aHViLiR7bmFtZXNwYWNlfWAsXG4gICAgICAgIG1hdmVuQXJ0aWZhY3RJZDogcGFja2FnZUJhc2VuYW1lLFxuICAgICAgICBtYXZlblNlcnZlcklkOiAnY2VudHJhbC1vc3NyaCcsXG4gICAgICB9LFxuICAgIH0pLFxuICAgIC4uLnB1Ymxpc2hMYW5ndWFnZVdyYXBwZXIoSnNpaUxhbmd1YWdlLkRPVE5FVCwge1xuICAgICAgcHVibGlzaFRvTnVnZXQ6IHtcbiAgICAgICAgdHJ1c3RlZFB1Ymxpc2hpbmc6IDEsXG4gICAgICAgIGRvdE5ldE5hbWVzcGFjZTogYCR7bnVnZXRQcmVmaXh9JHt1cHBlckNhc2VOYW1lKHBhY2thZ2VCYXNlbmFtZSl9YCxcbiAgICAgICAgcGFja2FnZUlkOiBgJHtudWdldFByZWZpeH0ke3VwcGVyQ2FzZU5hbWUocGFja2FnZUJhc2VuYW1lKX1gLFxuICAgICAgfSxcbiAgICB9KSxcbiAgICAuLi5wdWJsaXNoTGFuZ3VhZ2VXcmFwcGVyKEpzaWlMYW5ndWFnZS5HTywge1xuICAgICAgcHVibGlzaFRvR286IHtcbiAgICAgICAgbW9kdWxlTmFtZTogYGdpdGh1Yi5jb20vJHtuYW1lc3BhY2V9LyR7cGFja2FnZUJhc2VuYW1lfS1nb2AsXG4gICAgICB9LFxuICAgIH0pLFxuICB9O1xuXG4gIGZ1bmN0aW9uIHB1Ymxpc2hMYW5ndWFnZVdyYXBwZXIobGFuZzogSnNpaUxhbmd1YWdlLCBvYmo6IFJlY29yZDxzdHJpbmcsIGFueT4pIHtcbiAgICByZXR1cm4gcHVibGlzaExhbmd1YWdlKGxhbmcpID8gb2JqIDoge307XG4gIH1cblxuICBmdW5jdGlvbiBwdWJsaXNoTGFuZ3VhZ2UobGFuZzogSnNpaUxhbmd1YWdlKTogYm9vbGVhbiB7XG4gICAgLy8gbGFuZ3Mgbm90IHNwZWNpZmllZCA9PT0gYWxsIGxhbmd1YWdlcyBwdWJsaXNoZWRcbiAgICBpZiAoIWxhbmdzKSB7IHJldHVybiB0cnVlOyB9XG4gICAgaWYgKGxhbmdzLmluY2x1ZGVzKGxhbmcpKSB7IHJldHVybiB0cnVlOyB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgZnVuY3Rpb24gdXBwZXJDYXNlTmFtZShzdHI6IHN0cmluZykge1xuICAgIGxldCB3b3JkcyA9IHN0ci5zcGxpdCgnLScpO1xuICAgIHdvcmRzID0gd29yZHMubWFwKCh3KSA9PiB3WzBdLnRvVXBwZXJDYXNlKCkgKyB3LnN1YnN0cmluZygxKSk7XG4gICAgcmV0dXJuIHdvcmRzLmpvaW4oJycpO1xuICB9XG5cbiAgZnVuY3Rpb24gY2hhbmdlRGVsaW1pdGVyKHN0cjogc3RyaW5nLCBkZWxpbTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHN0ci5zcGxpdCgnLScpLmpvaW4oZGVsaW0pO1xuICB9XG59O1xuXG5mdW5jdGlvbiBjcmVhdGVOcG1QdWJsaXNoaW5nRGVmYXVsdHMoKSB7XG4gIHJldHVybiB7XG4gICAgbnBtVHJ1c3RlZFB1Ymxpc2hpbmc6IHRydWUsXG4gICAgcmVsZWFzZUVudmlyb25tZW50OiAncmVsZWFzZScsXG4gIH07XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2RrbGFic1B1Ymxpc2hpbmdQcm9qZWN0T3B0aW9ucyB7XG4gIC8qKlxuICAgKiBTZXQgZGVmYXVsdCBwdWJsaXNoaW5nIHByb3BlcnRpZXMuIFNldHRpbmcgdGhpcyBwcm9wZXJ0eSBndWFyYW50ZWVzXG4gICAqIHRoYXQgeW91ciBwcm9qZWN0IHdpbGwgaGF2ZSByZWFzb25hYmxlIHB1Ymxpc2hpbmcgbmFtZXMuIFlvdSBjYW4gY2hvb3NlXG4gICAqIHRvIG1vZGlmeSB0aGVtIGhvd2V2ZXIgeW91IHdpc2ggd2l0aCB0aGUgdHJhZGl0aW9uYWwgYHB1Ymxpc2hUb1B5cGlgLFxuICAgKiBgcHVibGlzaFRvTWF2ZW5gLCBgcHVibGlzaFRvTnVnZXRgLCBhbmQgYHB1Ymxpc2hUb0dvYCBwcm9wZXJ0aWVzLCBhbmRcbiAgICogeW91ciBjb25maWd1cmF0aW9uIHdpbGwgYmUgcmVzcGVjdGVkLlxuICAgKlxuICAgKiBUaGlzIHNob3VsZCBiZSBzZXQgdG8gZmFsc2Ugb25seSBpZiB5b3UgZG8gbm90IHBsYW4gb24gcmVsZWFzaW5nIHRoZSBwYWNrYWdlLlxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICByZWFkb25seSBjZGtsYWJzUHVibGlzaGluZ0RlZmF1bHRzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogU3BlY2lmeSBzcGVjaWZpYyBsYW5ndWFnZXMgdG8gcHVibGlzaCB0by4gVGhpcyBjYW4gYmUgdXNlZCB3aGVuIHRoZSBsaWJyYXJ5XG4gICAqIGlzIGV4cGVyaW1lbnRhbCBvbmx5LCBiZWNhdXNlIHN0YWJsZSBsaWJyYXJpZXMgbXVzdCBwdWJsaXNoIHRvIGFsbCBqc2lpIGxhbmd1YWdlcy5cbiAgICogVGhpcyBzaG91bGQgYmUgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIGBjZGtsYWJzUHVibGlzaGluZ0RlZmF1bHRzOiB0cnVlYDsgb3RoZXJ3aXNlXG4gICAqIGl0IGlzIGEgbm8tb3AuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gYWxsIGpzaWkgdGFyZ2V0IGxhbmd1YWdlc1xuICAgKi9cbiAgcmVhZG9ubHkganNpaVRhcmdldExhbmd1YWdlcz86IEpzaWlMYW5ndWFnZVtdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENka2xhYnNDb25zdHJ1Y3RMaWJyYXJ5T3B0aW9ucyBleHRlbmRzIENka0NvbnN0cnVjdExpYnJhcnlPcHRpb25zLCBDZGtsYWJzUHVibGlzaGluZ1Byb2plY3RPcHRpb25zIHsgfVxuXG4vKipcbiAqIENyZWF0ZSBhIENka2xhYnMgQ29uc3RydWN0IExpYnJhcnkgUHJvamVjdFxuICpcbiAqIEBwamlkIGNka2xhYnMtY29uc3RydWN0LWxpYlxuICovXG5leHBvcnQgY2xhc3MgQ2RrbGFic0NvbnN0cnVjdExpYnJhcnkgZXh0ZW5kcyBDZGtDb25zdHJ1Y3RMaWJyYXJ5IHtcbiAgY29uc3RydWN0b3Iob3B0aW9uczogQ2RrbGFic0NvbnN0cnVjdExpYnJhcnlPcHRpb25zKSB7XG4gICAgY29uc3QgY2RrbGFic1B1Ymxpc2hpbmdEZWZhdWx0UHJvcHM6IFJlY29yZDxzdHJpbmcsIGFueT4gPSAob3B0aW9ucy5jZGtsYWJzUHVibGlzaGluZ0RlZmF1bHRzID8/IHRydWUpID9cbiAgICAgIGNyZWF0ZUNka2xhYnNQdWJsaXNoaW5nRGVmYXVsdHMob3B0aW9ucy5uYW1lLCBvcHRpb25zLmpzaWlUYXJnZXRMYW5ndWFnZXMpIDoge307XG5cbiAgICAvLyB0aGUgbGVmdG1vc3Qgb2JqZWN0IGlzIG11dGF0ZWQgYW5kIHJldHVybmVkIGJ5IGRlZXBNZXJnZVxuICAgIGNvbnN0IG1lcmdlZE9wdGlvbnMgPSBkZWVwTWVyZ2UoW1xuICAgICAge30sXG4gICAgICBjZGtsYWJzRGVmYXVsdFByb3BzLFxuICAgICAgY2RrbGFic1B1Ymxpc2hpbmdEZWZhdWx0UHJvcHMsXG4gICAgICBvcHRpb25zLFxuICAgICAgY2RrbGFic0ZvcmNlZFByb3BzLFxuICAgIF0pIGFzIENka0NvbnN0cnVjdExpYnJhcnlPcHRpb25zO1xuXG4gICAgc3VwZXIobWVyZ2VkT3B0aW9ucyk7XG4gIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBDZGtsYWJzVHlwZVNjcmlwdFByb2plY3RPcHRpb25zIGV4dGVuZHMgQ2RrVHlwZVNjcmlwdFByb2plY3RPcHRpb25zIHsgfVxuXG4vKipcbiAqIENyZWF0ZSBhIENka2xhYnMgVHlwZVNjcmlwdCBQcm9qZWN0XG4gKlxuICogQHBqaWQgY2RrbGFicy10cy1wcm9qXG4gKi9cbmV4cG9ydCBjbGFzcyBDZGtsYWJzVHlwZVNjcmlwdFByb2plY3QgZXh0ZW5kcyBDZGtUeXBlU2NyaXB0UHJvamVjdCB7XG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM6IENka2xhYnNUeXBlU2NyaXB0UHJvamVjdE9wdGlvbnMpIHtcbiAgICAvLyB0aGUgbGVmdG1vc3Qgb2JqZWN0IGlzIG11dGF0ZWQgYW5kIHJldHVybmVkIGJ5IGRlZXBNZXJnZVxuICAgIGNvbnN0IG1lcmdlZE9wdGlvbnMgPSBkZWVwTWVyZ2UoW1xuICAgICAge30sXG4gICAgICBjZGtsYWJzRGVmYXVsdFByb3BzLFxuICAgICAgY3JlYXRlTnBtUHVibGlzaGluZ0RlZmF1bHRzKCksXG4gICAgICBvcHRpb25zLFxuICAgICAgY2RrbGFic0ZvcmNlZFByb3BzLFxuICAgIF0pIGFzIENka0NvbnN0cnVjdExpYnJhcnlPcHRpb25zO1xuXG4gICAgc3VwZXIobWVyZ2VkT3B0aW9ucyk7XG4gIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBDZGtsYWJzSnNpaVByb2plY3RPcHRpb25zIGV4dGVuZHMgQ2RrSnNpaVByb2plY3RPcHRpb25zLCBDZGtsYWJzUHVibGlzaGluZ1Byb2plY3RPcHRpb25zIHsgfVxuXG4vKipcbiAqIENyZWF0ZSBhIENka2xhYnMgSnNpaSBQcm9qZWN0XG4gKlxuICogQHBqaWQgY2RrbGFicy1qc2lpLXByb2pcbiAqL1xuZXhwb3J0IGNsYXNzIENka2xhYnNKc2lpUHJvamVjdCBleHRlbmRzIENka0pzaWlQcm9qZWN0IHtcbiAgY29uc3RydWN0b3Iob3B0aW9uczogQ2RrbGFic0pzaWlQcm9qZWN0T3B0aW9ucykge1xuICAgIGNvbnN0IGNka2xhYnNQdWJsaXNoaW5nRGVmYXVsdFByb3BzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0gKG9wdGlvbnMuY2RrbGFic1B1Ymxpc2hpbmdEZWZhdWx0cyA/PyB0cnVlKSA/XG4gICAgICBjcmVhdGVDZGtsYWJzUHVibGlzaGluZ0RlZmF1bHRzKG9wdGlvbnMubmFtZSwgb3B0aW9ucy5qc2lpVGFyZ2V0TGFuZ3VhZ2VzKSA6IHt9O1xuICAgIC8vIHRoZSBsZWZ0bW9zdCBvYmplY3QgaXMgbXV0YXRlZCBhbmQgcmV0dXJuZWQgYnkgZGVlcE1lcmdlXG4gICAgY29uc3QgbWVyZ2VkT3B0aW9ucyA9IGRlZXBNZXJnZShbXG4gICAgICB7fSxcbiAgICAgIGNka2xhYnNEZWZhdWx0UHJvcHMsXG4gICAgICBjZGtsYWJzUHVibGlzaGluZ0RlZmF1bHRQcm9wcyxcbiAgICAgIG9wdGlvbnMsXG4gICAgICBjZGtsYWJzRm9yY2VkUHJvcHMsXG4gICAgXSkgYXMgQ2RrbGFic0pzaWlQcm9qZWN0T3B0aW9ucztcblxuICAgIHN1cGVyKG1lcmdlZE9wdGlvbnMpO1xuICB9XG59XG4iXX0=
|
package/lib/jsii.js
CHANGED
|
@@ -28,5 +28,5 @@ class CdkJsiiProject extends projen_1.cdk.JsiiProject {
|
|
|
28
28
|
}
|
|
29
29
|
exports.CdkJsiiProject = CdkJsiiProject;
|
|
30
30
|
_a = JSII_RTTI_SYMBOL_1;
|
|
31
|
-
CdkJsiiProject[_a] = { fqn: "cdklabs-projen-project-types.CdkJsiiProject", version: "0.
|
|
31
|
+
CdkJsiiProject[_a] = { fqn: "cdklabs-projen-project-types.CdkJsiiProject", version: "0.4.0" };
|
|
32
32
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoianNpaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9qc2lpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsbUNBQTZCO0FBRTdCLHFEQUF3RjtBQUV4Rjs7OztHQUlHO0FBQ0gsTUFBYSxjQUFlLFNBQVEsWUFBRyxDQUFDLFdBQVc7SUFHakQsWUFBWSxPQUE4QjtRQUN4QyxNQUFNLElBQUksR0FBRyxJQUFBLDBDQUF5QixFQUFDO1lBQ3JDLEdBQUcsT0FBTztZQUNWLGtEQUFrRDtZQUNsRCxVQUFVLEVBQUUsT0FBTyxDQUFDLFVBQVUsSUFBSSxPQUFPLENBQUMsYUFBYTtTQUN4RCxDQUFDLENBQUM7UUFDSCxLQUFLLENBQUM7WUFDSixHQUFHLElBQUk7WUFDUCxzREFBc0Q7WUFDdEQsYUFBYSxFQUFFLElBQUksQ0FBQyxVQUFVO1NBQy9CLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztRQUU1QixJQUFBLDBDQUF5QixFQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztJQUN4QyxDQUFDOztBQWpCSCx3Q0FrQkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjZGsgfSBmcm9tICdwcm9qZW4nO1xuaW1wb3J0IHsgQ2RrSnNpaVByb2plY3RPcHRpb25zIH0gZnJvbSAnLi9jZGstanNpaS1vcHRpb25zJztcbmltcG9ydCB7IGNvbmZpZ3VyZUNvbW1vbkNvbXBvbmVudHMsIHdpdGhDb21tb25PcHRpb25zRGVmYXVsdHMgfSBmcm9tICcuL2NvbW1vbi1vcHRpb25zJztcblxuLyoqXG4gKiBDcmVhdGUgYSBDZGsgSnNpaSBKc2lpIHByb2plY3RcbiAqXG4gKiBAcGppZCBjZGstanNpaS1wcm9qXG4gKi9cbmV4cG9ydCBjbGFzcyBDZGtKc2lpUHJvamVjdCBleHRlbmRzIGNkay5Kc2lpUHJvamVjdCB7XG4gIHB1YmxpYyByZWFkb25seSBwcml2YXRlOiBib29sZWFuO1xuXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM6IENka0pzaWlQcm9qZWN0T3B0aW9ucykge1xuICAgIGNvbnN0IG9wdHMgPSB3aXRoQ29tbW9uT3B0aW9uc0RlZmF1bHRzKHtcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAvLyBhbHNvIGFjY2VwdCB0aGUgZGVwcmVjYXRlZCByZXBvc2l0b3J5VXJsIG9wdGlvblxuICAgICAgcmVwb3NpdG9yeTogb3B0aW9ucy5yZXBvc2l0b3J5ID8/IG9wdGlvbnMucmVwb3NpdG9yeVVybCxcbiAgICB9KTtcbiAgICBzdXBlcih7XG4gICAgICAuLi5vcHRzLFxuICAgICAgLy8gdXBzdHJlYW0gSnNpaVByb2plY3QgdXNlcyBhIGRpZmZlcmVudCBuYW1lIGZvciB0aGlzXG4gICAgICByZXBvc2l0b3J5VXJsOiBvcHRzLnJlcG9zaXRvcnksXG4gICAgfSk7XG4gICAgdGhpcy5wcml2YXRlID0gb3B0cy5wcml2YXRlO1xuXG4gICAgY29uZmlndXJlQ29tbW9uQ29tcG9uZW50cyh0aGlzLCBvcHRzKTtcbiAgfVxufVxuIl19
|
package/lib/rosetta.js
CHANGED
|
@@ -49,5 +49,5 @@ class Rosetta extends projen_1.Component {
|
|
|
49
49
|
}
|
|
50
50
|
exports.Rosetta = Rosetta;
|
|
51
51
|
_a = JSII_RTTI_SYMBOL_1;
|
|
52
|
-
Rosetta[_a] = { fqn: "cdklabs-projen-project-types.Rosetta", version: "0.
|
|
52
|
+
Rosetta[_a] = { fqn: "cdklabs-projen-project-types.Rosetta", version: "0.4.0" };
|
|
53
53
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm9zZXR0YS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9yb3NldHRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsbUNBQW9EO0FBa0JwRDs7Ozs7R0FLRztBQUNILE1BQWEsT0FBUSxTQUFRLGtCQUFTO0lBQ3BDLFlBQVksT0FBd0IsRUFBRSxVQUEwQixFQUFFO1FBQ2hFLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUVmLE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDO1FBRXRDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNaLG9HQUFvRztZQUNwRyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyx1R0FBdUcsQ0FBQyxDQUFDO1FBQy9ILENBQUM7UUFFRCxhQUFhO1FBQ2IsTUFBTSxVQUFVLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDO1FBQ3hGLE9BQU8sQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUM7UUFFL0IsTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsRUFBRTtZQUNyRCxXQUFXLEVBQUUsc0JBQXNCO1lBQ25DLElBQUksRUFBRSx3QkFBd0IsTUFBTSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRTtTQUNoRSxDQUFDLENBQUM7UUFDSCxPQUFPLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUMzQyxPQUFPLENBQUMsWUFBWSxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDeEMsSUFBSSxtQkFBVSxDQUFDLE9BQU8sRUFBRSw0QkFBNEIsRUFBRTtZQUNwRCxRQUFRLEVBQUU7Z0JBQ1IscURBQXFEO2dCQUNyRCx5Q0FBeUM7Z0JBQ3pDLFVBQVU7Z0JBQ1YsVUFBVTtnQkFDVix1QkFBdUI7Z0JBQ3ZCLEVBQUU7Z0JBQ0YsK0JBQStCO2dCQUMvQiwrQ0FBK0M7Z0JBQy9DLHVCQUF1QjtnQkFDdkIsRUFBRTtnQkFDRixjQUFjO2dCQUNkLEtBQUs7Z0JBQ0wsR0FBRzthQUNKLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztTQUNiLENBQUMsQ0FBQztRQUNILE9BQU8sQ0FBQyxZQUFZLENBQUMsOEJBQThCLENBQUMsQ0FBQztJQUN2RCxDQUFDOztBQXZDSCwwQkF3Q0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIFNhbXBsZUZpbGUsIGNkayB9IGZyb20gJ3Byb2plbic7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUm9zZXR0YU9wdGlvbnMge1xuICAvKipcbiAgICogRW5hYmxlIG9yIGRpc2FibGUgc3RyaWN0IG1vZGUuXG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIHJlYWRvbmx5IHN0cmljdD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFNldCBhbiBleHBsaWNpdCB2ZXJzaW9uIG9mIHJvc2V0dGEuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gdmVyc2lvbiBpcyBzZXQsIHVzZSBhdXRvbWF0aWMgZGV0ZWN0aW9uXG4gICAqL1xuICByZWFkb25seSB2ZXJzaW9uPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFRoZSBSb3NldHRhIGNvbXBvbmVudCBhZGRzIGJ1aWx0aW4gcm9zZXR0YSBzdXBwb3J0XG4gKiBmb3IgYSBjb25zdHJ1Y3QgbGlicmFyeS4gU2luY2UgQ29uc3RydWN0SHViIHdpbGwgcnVuXG4gKiByb3NldHRhIGZvciByZWFsLCB0aGlzIGp1c3QgYWRkcyBhIGNoZWNrIHRvIHRoZSBidWlsZCB0b1xuICogZW5zdXJlIHRoYXQgcm9zZXR0YSB3aWxsIHJ1biBzdWNjZXNzZnVsbHlcbiAqL1xuZXhwb3J0IGNsYXNzIFJvc2V0dGEgZXh0ZW5kcyBDb21wb25lbnQge1xuICBjb25zdHJ1Y3Rvcihwcm9qZWN0OiBjZGsuSnNpaVByb2plY3QsIG9wdGlvbnM6IFJvc2V0dGFPcHRpb25zID0ge30pIHtcbiAgICBzdXBlcihwcm9qZWN0KTtcblxuICAgIGNvbnN0IHN0cmljdCA9IG9wdGlvbnMuc3RyaWN0ID8/IHRydWU7XG5cbiAgICBpZiAoIXN0cmljdCkge1xuICAgICAgLy8gYmVmb3JlIHJlbW92aW5nIHRoaXMsIGNvbnNpZGVyIGh0dHBzOi8vZ2l0aHViLmNvbS9jZGtsYWJzL2Nka2xhYnMtcHJvamVuLXByb2plY3QtdHlwZXMvaXNzdWVzLzkwNFxuICAgICAgcHJvamVjdC5sb2dnZXIud2FybignUm9zZXR0YSBpcyBOT1Qgb3BlcmF0aW5nIGluIHN0cmljdCBtb2RlLiBXZSBhcmUgZ29pbmcgdG8gZW5mb3JjZSB0aGlzIHNvb24uXFxuUGxlYXNlIGZpeCBhbnkgZXhhbXBsZXMuJyk7XG4gICAgfVxuXG4gICAgLy8gQWRkIERldkRlcFxuICAgIGNvbnN0IHJvc2V0dGFEZXAgPSBvcHRpb25zLnZlcnNpb24gPyBganNpaS1yb3NldHRhQCR7b3B0aW9ucy52ZXJzaW9ufWAgOiAnanNpaS1yb3NldHRhJztcbiAgICBwcm9qZWN0LmFkZERldkRlcHMocm9zZXR0YURlcCk7XG5cbiAgICBjb25zdCByb3NldHRhVGFzayA9IHByb2plY3QuYWRkVGFzaygncm9zZXR0YTpleHRyYWN0Jywge1xuICAgICAgZGVzY3JpcHRpb246ICdUZXN0IHJvc2V0dGEgZXh0cmFjdCcsXG4gICAgICBleGVjOiBganNpaS1yb3NldHRhIGV4dHJhY3QgJHtzdHJpY3QgPyAnLS1zdHJpY3QnIDogJyd9YC50cmltKCksXG4gICAgfSk7XG4gICAgcHJvamVjdC5wb3N0Q29tcGlsZVRhc2suc3Bhd24ocm9zZXR0YVRhc2spO1xuICAgIHByb2plY3QuYWRkR2l0SWdub3JlKCcuanNpaS50YWJsLmpzb24nKTtcbiAgICBuZXcgU2FtcGxlRmlsZShwcm9qZWN0LCAncm9zZXR0YS9kZWZhdWx0LnRzLWZpeHR1cmUnLCB7XG4gICAgICBjb250ZW50czogW1xuICAgICAgICAnLy8gRml4dHVyZSB3aXRoIHBhY2thZ2VzIGltcG9ydGVkLCBidXQgbm90aGluZyBlbHNlJyxcbiAgICAgICAgXCJpbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcIixcbiAgICAgICAgJ2ltcG9ydCB7JyxcbiAgICAgICAgJyAgU3RhY2ssJyxcbiAgICAgICAgXCJ9IGZyb20gJ2F3cy1jZGstbGliJztcIixcbiAgICAgICAgJycsXG4gICAgICAgICdjbGFzcyBGaXh0dXJlIGV4dGVuZHMgU3RhY2sgeycsXG4gICAgICAgICcgIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcpIHsnLFxuICAgICAgICAnICAgIHN1cGVyKHNjb3BlLCBpZCk7JyxcbiAgICAgICAgJycsXG4gICAgICAgICcgICAgLy8vIGhlcmUnLFxuICAgICAgICAnICB9JyxcbiAgICAgICAgJ30nLFxuICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICB9KTtcbiAgICBwcm9qZWN0LmFkZEdpdElnbm9yZSgnIS9yb3NldHRhL2RlZmF1bHQudHMtZml4dHVyZScpO1xuICB9XG59XG4iXX0=
|
package/lib/yarn/constraints.js
CHANGED
|
@@ -34,7 +34,7 @@ class Constraints extends projen_1.Component {
|
|
|
34
34
|
}
|
|
35
35
|
exports.Constraints = Constraints;
|
|
36
36
|
_a = JSII_RTTI_SYMBOL_1;
|
|
37
|
-
Constraints[_a] = { fqn: "cdklabs-projen-project-types.yarn.Constraints", version: "0.
|
|
37
|
+
Constraints[_a] = { fqn: "cdklabs-projen-project-types.yarn.Constraints", version: "0.4.0" };
|
|
38
38
|
class ConstraintsFile extends projen_1.FileBase {
|
|
39
39
|
constructor(project, packages) {
|
|
40
40
|
super(project, 'yarn.config.cjs', { editGitignore: true });
|
|
@@ -107,77 +107,65 @@ class MonorepoRelease extends projen_1.Component {
|
|
|
107
107
|
}
|
|
108
108
|
}
|
|
109
109
|
renderPublishJobs() {
|
|
110
|
-
|
|
111
|
-
const
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
]
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
// own custom properties.
|
|
158
|
-
const toolsRebuilt = {
|
|
159
|
-
...job.tools,
|
|
160
|
-
node: {
|
|
161
|
-
...job.tools?.node ?? {},
|
|
162
|
-
// use the node version specified on the mono repo.
|
|
163
|
-
version: this.options.nodeVersion ?? job.tools?.node?.version ?? 'lts/*',
|
|
164
|
-
},
|
|
165
|
-
};
|
|
166
|
-
const condition = `needs.release.outputs.latest_commit == github.sha && needs.release.outputs.${publishProjectOutputId(release.workspace)} == 'true'`;
|
|
167
|
-
const packageFilter = `(!github.event.inputs.package || github.event.inputs.package == '${ALL_PACKAGES_INPUT}' || ${shouldReleaseExpression(release.workspace.name, this._releaseSetByChoice)})`;
|
|
168
|
-
return [
|
|
169
|
-
`${prefix}_${key}`,
|
|
170
|
-
{
|
|
171
|
-
...job,
|
|
172
|
-
tools: toolsRebuilt,
|
|
173
|
-
needs,
|
|
174
|
-
if: runtimeDepJobKeys.length > 0
|
|
175
|
-
? `\${{ !cancelled() && !failure() && ${condition} && ${packageFilter} }}`
|
|
176
|
-
: `\${{ ${condition} && ${packageFilter} }}`,
|
|
177
|
-
name: `${release.workspace.name}: ${job.name}`,
|
|
110
|
+
const GATE_JOBID = 'release_gate';
|
|
111
|
+
const GATE_OUTPUT_STEP = 'collect';
|
|
112
|
+
// Build the release tree
|
|
113
|
+
const tree = new ReleaseTree(this.packagesToRelease, this.branchName);
|
|
114
|
+
// Render the release_gate job
|
|
115
|
+
const gateSteps = tree.nodes.map((node) => {
|
|
116
|
+
const packageFilter = `(!github.event.inputs.package || github.event.inputs.package == '${ALL_PACKAGES_INPUT}' || ${shouldReleaseExpression(node.name, this._releaseSetByChoice)})`;
|
|
117
|
+
return {
|
|
118
|
+
name: `${node.name}: Check publish`,
|
|
119
|
+
run: [
|
|
120
|
+
`should_publish="\${{ needs.${RELEASE_JOBID}.outputs.${publishProjectOutputId(node.workspace)} }}"`,
|
|
121
|
+
`package_filter="\${{ ${packageFilter} }}"`,
|
|
122
|
+
'if [[ "$should_publish" != "true" ]]; then',
|
|
123
|
+
` echo "⏭️ Skipping ${node.name}: release tag already exists"`,
|
|
124
|
+
'elif [[ "$package_filter" != "true" ]]; then',
|
|
125
|
+
` echo "⏭️ Skipping ${node.name}: not selected for release"`,
|
|
126
|
+
'else',
|
|
127
|
+
` echo "✅ Will publish ${node.name}"`,
|
|
128
|
+
` echo "${node.name}" >> publish.txt`,
|
|
129
|
+
'fi',
|
|
130
|
+
].join('\n'),
|
|
131
|
+
};
|
|
132
|
+
});
|
|
133
|
+
gateSteps.push({
|
|
134
|
+
id: GATE_OUTPUT_STEP,
|
|
135
|
+
name: 'Collect packages to publish',
|
|
136
|
+
run: [
|
|
137
|
+
'if [ -f publish.txt ]; then',
|
|
138
|
+
' packages=$(jq -Rc \'.\' publish.txt | jq -sc \'.\')',
|
|
139
|
+
'else',
|
|
140
|
+
' packages=\'[]\'',
|
|
141
|
+
'fi',
|
|
142
|
+
'echo "packages_to_publish=$packages" >> $GITHUB_OUTPUT',
|
|
143
|
+
'echo "Publishing: $packages"',
|
|
144
|
+
].join('\n'),
|
|
145
|
+
});
|
|
146
|
+
this.workflow?.addJobs({
|
|
147
|
+
[GATE_JOBID]: {
|
|
148
|
+
runsOn: ['ubuntu-latest'],
|
|
149
|
+
needs: [RELEASE_JOBID],
|
|
150
|
+
permissions: {},
|
|
151
|
+
if: `\${{ needs.${RELEASE_JOBID}.outputs.latest_commit == github.sha }}`,
|
|
152
|
+
name: 'Publish gate',
|
|
153
|
+
outputs: {
|
|
154
|
+
packages_to_publish: {
|
|
155
|
+
stepId: GATE_OUTPUT_STEP,
|
|
156
|
+
outputName: 'packages_to_publish',
|
|
178
157
|
},
|
|
179
|
-
|
|
180
|
-
|
|
158
|
+
},
|
|
159
|
+
steps: gateSteps,
|
|
160
|
+
},
|
|
161
|
+
});
|
|
162
|
+
// Render per-package gate jobs and publish jobs from the tree
|
|
163
|
+
for (const node of tree.nodes) {
|
|
164
|
+
this.workflow?.addJobs({
|
|
165
|
+
[node.gateJobId]: node.renderGateJob(GATE_JOBID),
|
|
166
|
+
...node.renderPublishJobs(this.options.nodeVersion),
|
|
167
|
+
[node.doneJobId]: node.renderDoneJob(),
|
|
168
|
+
});
|
|
181
169
|
}
|
|
182
170
|
}
|
|
183
171
|
obtainReleaseTask() {
|
|
@@ -367,7 +355,138 @@ class MonorepoRelease extends projen_1.Component {
|
|
|
367
355
|
}
|
|
368
356
|
exports.MonorepoRelease = MonorepoRelease;
|
|
369
357
|
_a = JSII_RTTI_SYMBOL_1;
|
|
370
|
-
MonorepoRelease[_a] = { fqn: "cdklabs-projen-project-types.yarn.MonorepoRelease", version: "0.
|
|
358
|
+
MonorepoRelease[_a] = { fqn: "cdklabs-projen-project-types.yarn.MonorepoRelease", version: "0.4.0" };
|
|
359
|
+
/**
|
|
360
|
+
* A node representing a single publish job (e.g. npm, maven, github).
|
|
361
|
+
*/
|
|
362
|
+
class PublishJobNode {
|
|
363
|
+
constructor(parent, key, job) {
|
|
364
|
+
this.parent = parent;
|
|
365
|
+
this.jobId = `${parent.prefix}_${key}`;
|
|
366
|
+
this.job = job;
|
|
367
|
+
}
|
|
368
|
+
/**
|
|
369
|
+
* Compute the `needs` for this publish job.
|
|
370
|
+
* Jobs with sibling deps (e.g. github depends on npm) use those;
|
|
371
|
+
* the first job in the chain depends on the gate + upstream done jobs.
|
|
372
|
+
*/
|
|
373
|
+
get needs() {
|
|
374
|
+
const siblingDeps = (this.job.needs ?? [])
|
|
375
|
+
.filter((dep) => dep !== 'release')
|
|
376
|
+
.map((dep) => `${this.parent.prefix}_${dep}`);
|
|
377
|
+
if (siblingDeps.length > 0) {
|
|
378
|
+
return siblingDeps;
|
|
379
|
+
}
|
|
380
|
+
// First publish job: depends on gate + upstream packages' done jobs
|
|
381
|
+
return [
|
|
382
|
+
this.parent.gateJobId,
|
|
383
|
+
...this.parent.upstream.map((n) => n.doneJobId),
|
|
384
|
+
];
|
|
385
|
+
}
|
|
386
|
+
}
|
|
387
|
+
/**
|
|
388
|
+
* A node representing a package's release gate, publish jobs, and done signal.
|
|
389
|
+
*/
|
|
390
|
+
class PackageReleaseNode {
|
|
391
|
+
constructor(workspace, publishJobs) {
|
|
392
|
+
this.upstream = [];
|
|
393
|
+
this.name = workspace.name;
|
|
394
|
+
this.workspace = workspace;
|
|
395
|
+
this.prefix = slugify(workspace.name);
|
|
396
|
+
this.gateJobId = `${this.prefix}_release`;
|
|
397
|
+
this.doneJobId = `${this.prefix}_release_done`;
|
|
398
|
+
this.publishJobs = Object.entries(publishJobs).map(([key, job]) => new PublishJobNode(this, key, job));
|
|
399
|
+
}
|
|
400
|
+
/**
|
|
401
|
+
* Render the package gate job — purely checks if this package should publish.
|
|
402
|
+
*/
|
|
403
|
+
renderGateJob(releaseGateJobId) {
|
|
404
|
+
const condition = `contains(fromJSON(needs.${releaseGateJobId}.outputs.packages_to_publish), '${this.name}')`;
|
|
405
|
+
return {
|
|
406
|
+
runsOn: ['ubuntu-latest'],
|
|
407
|
+
needs: [releaseGateJobId],
|
|
408
|
+
permissions: {},
|
|
409
|
+
if: `\${{ ${condition} }}`,
|
|
410
|
+
name: `${this.name}: Release`,
|
|
411
|
+
steps: [{ run: `echo "Releasing ${this.name}..."` }],
|
|
412
|
+
};
|
|
413
|
+
}
|
|
414
|
+
/**
|
|
415
|
+
* Render all publish job definitions for this package.
|
|
416
|
+
*/
|
|
417
|
+
renderPublishJobs(nodeVersion) {
|
|
418
|
+
return Object.fromEntries(this.publishJobs.map((pubNode) => [
|
|
419
|
+
pubNode.jobId,
|
|
420
|
+
{
|
|
421
|
+
...pubNode.job,
|
|
422
|
+
if: undefined,
|
|
423
|
+
tools: {
|
|
424
|
+
...pubNode.job.tools,
|
|
425
|
+
node: {
|
|
426
|
+
...pubNode.job.tools?.node ?? {},
|
|
427
|
+
version: nodeVersion ?? pubNode.job.tools?.node?.version ?? 'lts/*',
|
|
428
|
+
},
|
|
429
|
+
},
|
|
430
|
+
needs: pubNode.needs,
|
|
431
|
+
name: `${this.name}: ${pubNode.job.name}`,
|
|
432
|
+
},
|
|
433
|
+
]));
|
|
434
|
+
}
|
|
435
|
+
/**
|
|
436
|
+
* Render the done job — fan-in that signals all publishing for this package is complete.
|
|
437
|
+
*/
|
|
438
|
+
renderDoneJob() {
|
|
439
|
+
return {
|
|
440
|
+
runsOn: ['ubuntu-latest'],
|
|
441
|
+
needs: this.publishJobs.map((p) => p.jobId),
|
|
442
|
+
permissions: {},
|
|
443
|
+
// Use !cancelled() && !failure() so that:
|
|
444
|
+
// - If publish jobs are skipped (package has no changes, gate was skipped), done still succeeds
|
|
445
|
+
// → allows downstream packages to proceed with their own release
|
|
446
|
+
// - If a publish job fails, done is skipped (failure() is true)
|
|
447
|
+
// → blocks downstream packages from releasing
|
|
448
|
+
if: '${{ !cancelled() && !failure() }}',
|
|
449
|
+
name: `${this.name}: Release complete`,
|
|
450
|
+
steps: [{ run: 'echo "All publish jobs complete"' }],
|
|
451
|
+
};
|
|
452
|
+
}
|
|
453
|
+
}
|
|
454
|
+
/**
|
|
455
|
+
* A topological tree of packages to release.
|
|
456
|
+
* Each node knows its upstream dependencies (runtime + peer).
|
|
457
|
+
*/
|
|
458
|
+
class ReleaseTree {
|
|
459
|
+
constructor(packagesToRelease, branchName) {
|
|
460
|
+
this.nodesByName = new Map();
|
|
461
|
+
// Create nodes
|
|
462
|
+
for (const { release } of packagesToRelease) {
|
|
463
|
+
const publishJobs = release.publisher._renderJobsForBranch(branchName, release.options);
|
|
464
|
+
// Fix download steps to use artifact name instead of immutable artifact IDs
|
|
465
|
+
for (const job of Object.values(publishJobs)) {
|
|
466
|
+
const downloadStep = job.steps.find((j) => j.uses?.startsWith('actions/download-artifact@'));
|
|
467
|
+
if (!downloadStep) {
|
|
468
|
+
throw new Error(`Could not find downloadStep among steps: ${JSON.stringify(job.steps, undefined, 2)}`);
|
|
469
|
+
}
|
|
470
|
+
if (downloadStep.with) {
|
|
471
|
+
delete downloadStep.with['artifact-ids'];
|
|
472
|
+
downloadStep.with.name = buildArtifactName(release.workspace);
|
|
473
|
+
}
|
|
474
|
+
}
|
|
475
|
+
const node = new PackageReleaseNode(release.workspace, publishJobs);
|
|
476
|
+
this.nodesByName.set(node.name, node);
|
|
477
|
+
}
|
|
478
|
+
// Resolve upstream edges
|
|
479
|
+
for (const node of this.nodesByName.values()) {
|
|
480
|
+
for (const dep of node.workspace.workspaceDependencies([projen_1.DependencyType.RUNTIME, projen_1.DependencyType.PEER])) {
|
|
481
|
+
const upstream = this.nodesByName.get(dep.name);
|
|
482
|
+
if (upstream) {
|
|
483
|
+
node.upstream.push(upstream);
|
|
484
|
+
}
|
|
485
|
+
}
|
|
486
|
+
}
|
|
487
|
+
this.nodes = [...this.nodesByName.values()];
|
|
488
|
+
}
|
|
489
|
+
}
|
|
371
490
|
function slugify(x) {
|
|
372
491
|
return x.replace(/[^a-zA-Z0-9_-]/g, '-').replace(/^[0-9-]+/, '');
|
|
373
492
|
}
|
|
@@ -394,4 +513,4 @@ function shouldReleaseExpression(workspaceName, releaseSetByChoice) {
|
|
|
394
513
|
.map(([pkg]) => pkg);
|
|
395
514
|
return `contains(fromJSON('${JSON.stringify(triggeringPackages)}'), github.event.inputs.package)`;
|
|
396
515
|
}
|
|
397
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9ub3JlcG8tcmVsZWFzZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy95YXJuL21vbm9yZXBvLXJlbGVhc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSw2QkFBNkI7QUFDN0IsbUNBQW9HO0FBQ3BHLDJEQUEwRjtBQUcxRixpRUFBNkQ7QUFDN0QsaUZBQTJGO0FBRTNGLGdDQUFnQztBQUNoQyxNQUFNLGFBQWEsR0FBRyxTQUFTLENBQUM7QUFDaEMsTUFBTSxpQkFBaUIsR0FBRyxZQUFZLENBQUM7QUFDdkMsTUFBTSxvQkFBb0IsR0FBRyxlQUFlLENBQUM7QUFDN0MsTUFBTSxrQkFBa0IsR0FBRyxnQkFBZ0IsQ0FBQztBQUU1QyxNQUFhLGVBQWdCLFNBQVEsa0JBQVM7SUFDNUM7OztPQUdHO0lBQ0ksTUFBTSxDQUFDLEVBQUUsQ0FBQyxPQUFnQjtRQUMvQixNQUFNLHlCQUF5QixHQUFHLENBQUMsQ0FBWSxFQUF3QixFQUFFLENBQUMsQ0FBQyxZQUFZLGVBQWUsQ0FBQztRQUN2RyxPQUFPLE9BQU8sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLHlCQUF5QixDQUFDLENBQUM7SUFDNUQsQ0FBQztJQXFCRCxZQUFZLE9BQWdCLEVBQW1CLFVBQWtDLEVBQUU7UUFDakYsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRDhCLFlBQU8sR0FBUCxPQUFPLENBQTZCO1FBZGxFLHNCQUFpQixHQUFHLElBQUksS0FBSyxFQU8xQyxDQUFDO1FBSVksc0JBQWlCLEdBQUcsSUFBSSxHQUFHLEVBQXlDLENBQUM7UUFDOUUsd0JBQW1CLEdBQUcsSUFBSSxHQUFHLEVBQXVCLENBQUM7UUFLM0QsSUFBSSxDQUFDLFVBQVUsR0FBRyxPQUFPLENBQUMsVUFBVSxJQUFJLE1BQU0sQ0FBQztRQUMvQyxNQUFNLEVBQUUsR0FBRyxlQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNyQyxJQUFJLENBQUMs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RSxDQUFDLENBQUM7QUFDbkUsQ0FBQztBQUVELFNBQVMsaUJBQWlCLENBQUMsT0FBZ0I7SUFDekMsT0FBTyxPQUFPLENBQUMsR0FBRyxPQUFPLENBQUMsSUFBSSxJQUFJLCtCQUFtQixFQUFFLENBQUMsQ0FBQztBQUMzRCxDQUFDO0FBRUQsU0FBUyxzQkFBc0IsQ0FBQyxPQUFnQjtJQUM5QyxPQUFPLFdBQVcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQzVDLENBQUM7QUFFRCxTQUFTLDBCQUEwQixDQUFDLE9BQWdCO0lBQ2xELE9BQU8sU0FBUyxzQkFBc0IsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO0FBQ3BELENBQUM7QUFFRDs7Ozs7O0dBTUc7QUFDSCxTQUFTLHVCQUF1QixDQUFDLGFBQXFCLEVBQUUsa0JBQTRDO0lBQ2xHLDhEQUE4RDtJQUM5RCxNQUFNLGtCQUFrQixHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsT0FBTyxFQUFFLENBQUM7U0FDaEUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsVUFBVSxDQUFDLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLENBQUM7U0FDMUQsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7SUFFdkIsT0FBTyxzQkFBc0IsSUFBSSxDQUFDLFNBQVMsQ0FBQyxrQkFBa0IsQ0FBQyxrQ0FBa0MsQ0FBQztBQUNwRyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7IERlcGVuZGVuY3lUeXBlLCBnaXRodWIsIHJlbGVhc2UgYXMgcHJvamVuUmVsZWFzZSwgQ29tcG9uZW50LCBQcm9qZWN0LCBUYXNrIH0gZnJvbSAncHJvamVuJztcbmltcG9ydCB7IEJVSUxEX0FSVElGQUNUX05BTUUsIFBFUk1JU1NJT05fQkFDS1VQX0ZJTEUgfSBmcm9tICdwcm9qZW4vbGliL2dpdGh1Yi9jb25zdGFudHMnO1xuaW1wb3J0IHsgVG9vbHMgfSBmcm9tICdwcm9qZW4vbGliL2dpdGh1Yi93b3JrZmxvd3MtbW9kZWwnO1xuaW1wb3J0IHsgTW9ub3JlcG9SZWxlYXNlT3B0aW9ucyB9IGZyb20gJy4vbW9ub3JlcG8tcmVsZWFzZS1vcHRpb25zJztcbmltcG9ydCB7IFR5cGVTY3JpcHRXb3Jrc3BhY2UgfSBmcm9tICcuL3R5cGVzY3JpcHQtd29ya3NwYWNlJztcbmltcG9ydCB7IFdvcmtzcGFjZVJlbGVhc2UsIFdvcmtzcGFjZVJlbGVhc2VPcHRpb25zIH0gZnJvbSAnLi90eXBlc2NyaXB0LXdvcmtzcGFjZS1yZWxlYXNlJztcblxuLy8gY29waWVkIGZyb20gcHJvamVuL3JlbGVhc2UudHNcbmNvbnN0IFJFTEVBU0VfSk9CSUQgPSAncmVsZWFzZSc7XG5jb25zdCBHSVRfUkVNT1RFX1NURVBJRCA9ICdnaXRfcmVtb3RlJztcbmNvbnN0IExBVEVTVF9DT01NSVRfT1VUUFVUID0gJ2xhdGVzdF9jb21taXQnO1xuY29uc3QgQUxMX1BBQ0tBR0VTX0lOUFVUID0gJyphbGwgcGFja2FnZXMqJztcblxuZXhwb3J0IGNsYXNzIE1vbm9yZXBvUmVsZWFzZSBleHRlbmRzIENvbXBvbmVudCB7XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBgTW9ub3JlcG9SZWxlYXNlV29ya2Zsb3dgIGNvbXBvbmVudCBvZiBhIHByb2plY3Qgb3IgYHVuZGVmaW5lZGAgaWYgdGhlIHByb2plY3RcbiAgICogZG9lcyBub3QgaGF2ZSBhIE1vbm9yZXBvUmVsZWFzZVdvcmtmbG93IGNvbXBvbmVudC5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgb2YocHJvamVjdDogUHJvamVjdCk6IE1vbm9yZXBvUmVsZWFzZSB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgaXNNb25vcmVwb1JlbGVhc2VXb3JrZmxvdyA9IChjOiBDb21wb25lbnQpOiBjIGlzIE1vbm9yZXBvUmVsZWFzZSA9PiBjIGluc3RhbmNlb2YgTW9ub3JlcG9SZWxlYXNlO1xuICAgIHJldHVybiBwcm9qZWN0LmNvbXBvbmVudHMuZmluZChpc01vbm9yZXBvUmVsZWFzZVdvcmtmbG93KTtcbiAgfVxuXG4gIHByaXZhdGUgcmVhZG9ubHkgYnJhbmNoTmFtZTogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IGdpdGh1YjogZ2l0aHViLkdpdEh1YjtcbiAgcHJpdmF0ZSByZWFkb25seSByZWxlYXNlVHJpZ2dlcjogcHJvamVuUmVsZWFzZS5SZWxlYXNlVHJpZ2dlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBidWlsZFdpdGhOeDogYm9vbGVhbjtcbiAgcHJpdmF0ZSByZWFkb25seSB3c1J1bjogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IHBhY2thZ2VzVG9SZWxlYXNlID0gbmV3IEFycmF5PHtcbiAgICByZWFkb25seSB3b3Jrc3BhY2VEaXJlY3Rvcnk6IHN0cmluZztcbiAgICByZWFkb25seSByZWxlYXNlOiB7XG4gICAgICByZWFkb25seSB3b3Jrc3BhY2U6IFR5cGVTY3JpcHRXb3Jrc3BhY2U7XG4gICAgICByZWFkb25seSBwdWJsaXNoZXI6IHByb2plblJlbGVhc2UuUHVibGlzaGVyO1xuICAgICAgcmVhZG9ubHkgb3B0aW9uczogUGFydGlhbDxwcm9qZW5SZWxlYXNlLkJyYW5jaE9wdGlvbnM+O1xuICAgIH07XG4gIH0+KCk7XG5cbiAgcHJpdmF0ZSB3b3JrZmxvdz86IGdpdGh1Yi5UYXNrV29ya2Zsb3c7XG4gIHByaXZhdGUgcmVsZWFzZVRhc2s/OiBUYXNrO1xuICBwcml2YXRlIHJlYWRvbmx5IHdvcmtzcGFjZVJlbGVhc2VzID0gbmV3IE1hcDxUeXBlU2NyaXB0V29ya3NwYWNlLCBXb3Jrc3BhY2VSZWxlYXNlPigpO1xuICBwcml2YXRlIF9yZWxlYXNlU2V0QnlDaG9pY2UgPSBuZXcgTWFwPHN0cmluZywgU2V0PHN0cmluZz4+KCk7XG5cbiAgY29uc3RydWN0b3IocHJvamVjdDogUHJvamVjdCwgcHJpdmF0ZSByZWFkb25seSBvcHRpb25zOiBNb25vcmVwb1JlbGVhc2VPcHRpb25zID0ge30pIHtcbiAgICBzdXBlcihwcm9qZWN0KTtcblxuICAgIHRoaXMuYnJhbmNoTmFtZSA9IG9wdGlvbnMuYnJhbmNoTmFtZSA/PyAnbWFpbic7XG4gICAgY29uc3QgZ2ggPSBnaXRodWIuR2l0SHViLm9mKHByb2plY3QpO1xuICAgIGlmICghZ2gpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgUHJvamVjdCBpcyBub3QgYSBHaXRIdWIgcHJvamVjdDogJHtwcm9qZWN0fWApO1xuICAgIH1cbiAgICB0aGlzLmdpdGh1YiA9IGdoO1xuICAgIHRoaXMucmVsZWFzZVRyaWdnZXIgPSBvcHRpb25zLnJlbGVhc2VUcmlnZ2VyID8/IHByb2plblJlbGVhc2UuUmVsZWFzZVRyaWdnZXIuY29udGludW91cygpO1xuICAgIHRoaXMuYnVpbGRXaXRoTnggPSBvcHRpb25zLmJ1aWxkV2l0aE54ID8/IGZhbHNlO1xuICAgIHRoaXMud3NSdW4gPSBvcHRpb25zLnlhcm5CZXJyeSA/ICd5YXJuIHdvcmtzcGFjZXMgZm9yZWFjaCAtLWFsbCAtLWV4Y2x1ZGUgLiAtLXRvcG9sb2dpY2FsLWRldiBydW4nIDogJ3lhcm4gd29ya3NwYWNlcyBydW4nO1xuICB9XG5cbiAgcHVibGljIHdvcmtzcGFjZVJlbGVhc2UocHJvamVjdDogVHlwZVNjcmlwdFdvcmtzcGFjZSkge1xuICAgIGNvbnN0IHJldCA9IHRoaXMud29ya3NwYWNlUmVsZWFzZXMuZ2V0KHByb2plY3QpO1xuICAgIGlmICghcmV0KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIHJlbGVhc2UgZm9yIHByb2plY3QgJHtwcm9qZWN0Lm5hbWV9YCk7XG4gICAgfVxuICAgIHJldHVybiByZXQ7XG4gIH1cblxuICBwdWJsaWMgYWRkV29ya3NwYWNlKHByb2plY3Q6IFR5cGVTY3JpcHRXb3Jrc3BhY2UsIG9wdGlvbnM6IFdvcmtzcGFjZVJlbGVhc2VPcHRpb25zKSB7XG4gICAgY29uc3Qgd29ya3NwYWNlUmVsZWFzZSA9IG5ldyBXb3Jrc3BhY2VSZWxlYXNlKHByb2plY3QsIHtcbiAgICAgIHB1Ymxpc2hUb05wbTogdGhpcy5vcHRpb25zLnB1Ymxpc2hUb05wbSxcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgfSk7XG5cbiAgICAvLyBNYWtlIHRoZXNlIHB1YmxpY2x5IGFjY2Vzc2libGVcbiAgICB0aGlzLndvcmtzcGFjZVJlbGVhc2VzLnNldChwcm9qZWN0LCB3b3Jrc3BhY2VSZWxlYXNlKTtcblxuICAgIGlmICghb3B0aW9ucy5wcml2YXRlICYmIHdvcmtzcGFjZVJlbGVhc2UucHVibGlzaGVyKSB7XG4gICAgICB0aGlzLm9idGFpblJlbGVhc2VUYXNrKCk7XG5cbiAgICAgIHRoaXMucGFja2FnZXNUb1JlbGVhc2UucHVzaCh7XG4gICAgICAgIHdvcmtzcGFjZURpcmVjdG9yeTogcHJvamVjdC53b3Jrc3BhY2VEaXJlY3RvcnksXG4gICAgICAgIHJlbGVhc2U6IHtcbiAgICAgICAgICB3b3Jrc3BhY2U6IHdvcmtzcGFjZVJlbGVhc2Uud29ya3NwYWNlLFxuICAgICAgICAgIHB1Ymxpc2hlcjogd29ya3NwYWNlUmVsZWFzZS5wdWJsaXNoZXIsXG4gICAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgICAgLy8gZW5mb3JjZWQgb3B0aW9uc1xuICAgICAgICAgICAgd29ya2Zsb3dOYW1lOiB0aGlzLm9wdGlvbnMucmVsZWFzZVdvcmtmbG93TmFtZSxcbiAgICAgICAgICAgIHRhZ1ByZWZpeDogYCR7cHJvamVjdC5uYW1lfUBgLFxuXG4gICAgICAgICAgICAvLyBvcHRpb25zIHRoYXQgbWF5IGJlIG92ZXJyaWRlIGxvY2FsbHlcbiAgICAgICAgICAgIG1ham9yVmVyc2lvbjogb3B0aW9ucy52ZXJzaW9uQnJhbmNoT3B0aW9ucy5tYWpvclZlcnNpb24gPz8gdGhpcy5vcHRpb25zLm1ham9yVmVyc2lvbixcbiAgICAgICAgICAgIG1pbk1ham9yVmVyc2lvbjogb3B0aW9ucy52ZXJzaW9uQnJhbmNoT3B0aW9ucy5taW5NYWpvclZlcnNpb24gPz8gdGhpcy5vcHRpb25zLm1pbk1ham9yVmVyc2lvbixcbiAgICAgICAgICAgIHByZXJlbGVhc2U6IG9wdGlvbnMudmVyc2lvbkJyYW5jaE9wdGlvbnMucHJlcmVsZWFzZSA/PyB0aGlzLm9wdGlvbnMucHJlcmVsZWFzZSxcbiAgICAgICAgICAgIG5wbURpc3RUYWc6IG9wdGlvbnMubnBtRGlzdFRhZyA/PyB0aGlzLm9wdGlvbnMubnBtRGlzdFRhZyxcbiAgICAgICAgICAgIGVudmlyb25tZW50OiBvcHRpb25zLmVudmlyb25tZW50LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgcHJlU3ludGhlc2l6ZSgpIHtcbiAgICBpZiAoIXRoaXMucmVsZWFzZVRhc2spIHtcbiAgICAgIC8vIFdlIGRpZG4ndCBlbmQgdXAgYWRkaW5nIGFueSBwYWNrYWdlc1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuY29tcHV0ZVJlbGVhc2VTZXRzKCk7XG4gICAgdGhpcy5jcmVhdGVQdWJsaXNoaW5nTWVjaGFuaXNtKCk7XG4gICAgdGhpcy5yZW5kZXJQYWNrYWdlVXBsb2FkcygpO1xuICAgIHRoaXMucmVuZGVyUHVibGlzaEpvYnMoKTtcbiAgICB0aGlzLnJlbmRlcldvcmtmbG93RGlzcGF0Y2hJbnB1dCgpO1xuICB9XG5cbiAgcHJpdmF0ZSByZW5kZXJQYWNrYWdlVXBsb2FkcygpIHtcbiAgICBjb25zdCBub05ld0NvbW1pdHMgPSBgXFwke3sgc3RlcHMuJHtHSVRfUkVNT1RFX1NURVBJRH0ub3V0cHV0cy4ke0xBVEVTVF9DT01NSVRfT1VUUFVUfSA9PSBnaXRodWIuc2hhIH19YDtcblxuICAgIGZvciAoY29uc3QgeyB3b3Jrc3BhY2VEaXJlY3RvcnksIHJlbGVhc2UgfSBvZiB0aGlzLnBhY2thZ2VzVG9SZWxlYXNlKSB7XG4gICAgICBjb25zdCBqb2IgPSB0aGlzLndvcmtmbG93Py5nZXRKb2IoUkVMRUFTRV9KT0JJRCkgYXMgZ2l0aHViLndvcmtmbG93cy5Kb2IgfCB1bmRlZmluZWQ7XG4gICAgICBqb2I/LnN0ZXBzLnB1c2goXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBgJHtyZWxlYXNlLndvcmtzcGFjZS5uYW1lfTogQmFja3VwIGFydGlmYWN0IHBlcm1pc3Npb25zYCxcbiAgICAgICAgICBpZjogbm9OZXdDb21taXRzLFxuICAgICAgICAgIGNvbnRpbnVlT25FcnJvcjogdHJ1ZSxcbiAgICAgICAgICBydW46IGBjZCAke3JlbGVhc2Uud29ya3NwYWNlLmFydGlmYWN0c0RpcmVjdG9yeX0gJiYgZ2V0ZmFjbCAtUiAuID4gJHtQRVJNSVNTSU9OX0JBQ0tVUF9GSUxFfWAsXG4gICAgICAgICAgd29ya2luZ0RpcmVjdG9yeTogd29ya3NwYWNlRGlyZWN0b3J5LFxuICAgICAgICB9LFxuICAgICAgICBnaXRodWIuV29ya2Zsb3dTdGVwcy51cGxvYWRBcnRpZmFjdCh7XG4gICAgICAgICAgbmFtZTogYCR7cmVsZWFzZS53b3Jrc3BhY2UubmFtZX06IFVwbG9hZCBhcnRpZmFjdGAsXG4gICAgICAgICAgaWY6IG5vTmV3Q29tbWl0cyxcbiAgICAgICAgICB3aXRoOiB7XG4gICAgICAgICAgICAvLyBFdmVyeSBhcnRpZmFjdCBtdXN0IGhhdmUgYSB1bmlxdWUgbmFtZVxuICAgICAgICAgICAgbmFtZTogYnVpbGRBcnRpZmFjdE5hbWUocmVsZWFzZS53b3Jrc3BhY2UpLFxuICAgICAgICAgICAgcGF0aDogcGF0aC5qb2luKHdvcmtzcGFjZURpcmVjdG9yeSwgcmVsZWFzZS53b3Jrc3BhY2UuYXJ0aWZhY3RzRGlyZWN0b3J5KSxcbiAgICAgICAgICB9LFxuICAgICAgICB9KSxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSByZW5kZXJQdWJsaXNoSm9icygpIHtcbiAgICAvLyBGaXJzdCBwYXNzOiByZW5kZXIgam9icyBhbmQgY29sbGVjdCBwcmVmaXhlZCBqb2Iga2V5cyBwZXIgd29ya3NwYWNlXG4gICAgY29uc3QgcHVibGlzaEpvYnNCeVdvcmtzcGFjZSA9IG5ldyBNYXA8c3RyaW5nLCB7XG4gICAgICBwcmVmaXg6IHN0cmluZztcbiAgICAgIGpvYnM6IFJlY29yZDxzdHJpbmcsIGdpdGh1Yi53b3JrZmxvd3MuSm9iPjtcbiAgICAgIHJlbGVhc2U6IHsgd29ya3NwYWNlOiBUeXBlU2NyaXB0V29ya3NwYWNlOyBwdWJsaXNoZXI6IHByb2plblJlbGVhc2UuUHVibGlzaGVyOyBvcHRpb25zOiBQYXJ0aWFsPHByb2plblJlbGVhc2UuQnJhbmNoT3B0aW9ucz4gfTtcbiAgICAgIGpvYktleXM6IHN0cmluZ1tdO1xuICAgIH0+KCk7XG5cbiAgICBmb3IgKGNvbnN0IHsgcmVsZWFzZSB9IG9mIHRoaXMucGFja2FnZXNUb1JlbGVhc2UpIHtcbiAgICAgIGNvbnN0IGpvYnMgPSByZWxlYXNlLnB1Ymxpc2hlci5fcmVuZGVySm9ic0ZvckJyYW5jaCh0aGlzLmJyYW5jaE5hbWUsIHJlbGVhc2Uub3B0aW9ucyk7XG4gICAgICBjb25zdCBwcmVmaXggPSBzbHVnaWZ5KGAke3JlbGVhc2Uud29ya3NwYWNlLm5hbWV9YCk7XG5cbiAgICAgIGZvciAoY29uc3Qgam9iIG9mIE9iamVjdC52YWx1ZXMoam9icykpIHtcbiAgICAgICAgLy8gUmVwbGFjZSB0aGUgYnVpbGQgYXJ0aWZhY3QgbmFtZSB3aXRoIHRoZSB1bmlxdWUgcGVyLXByb2plY3Qgb25lXG4gICAgICAgIGNvbnN0IGRvd25sb2FkU3RlcCA9IGpvYi5zdGVwcy5maW5kKChqKSA9PiBqLnVzZXM/LnN0YXJ0c1dpdGgoJ2FjdGlvbnMvZG93bmxvYWQtYXJ0aWZhY3RAJykpO1xuICAgICAgICBpZiAoIWRvd25sb2FkU3RlcCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQ291bGQgbm90IGZpbmQgZG93bmxvYWRTdGVwIGFtb25nIHN0ZXBzOiAke0pTT04uc3RyaW5naWZ5KGpvYi5zdGVwcywgdW5kZWZpbmVkLCAyKX1gKTtcbiAgICAgICAgfVxuICAgICAgICAoZG93bmxvYWRTdGVwLndpdGggPz8ge30pLm5hbWUgPSBidWlsZEFydGlmYWN0TmFtZShyZWxlYXNlLndvcmtzcGFjZSk7XG4gICAgICB9XG5cbiAgICAgIHB1Ymxpc2hKb2JzQnlXb3Jrc3BhY2Uuc2V0KHJlbGVhc2Uud29ya3NwYWNlLm5hbWUsIHtcbiAgICAgICAgcHJlZml4LFxuICAgICAgICBqb2JzLFxuICAgICAgICByZWxlYXNlLFxuICAgICAgICBqb2JLZXlzOiBPYmplY3Qua2V5cyhqb2JzKS5tYXAoayA9PiBgJHtwcmVmaXh9XyR7a31gKSxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIFNlY29uZCBwYXNzOiBhZGQgdG9wb2xvZ2ljYWwgbmVlZHMgYW5kIGluamVjdCBqb2JzIGludG8gd29ya2Zsb3dcbiAgICBmb3IgKGNvbnN0IHsgcHJlZml4LCBqb2JzLCByZWxlYXNlIH0gb2YgcHVibGlzaEpvYnNCeVdvcmtzcGFjZS52YWx1ZXMoKSkge1xuXG4gICAgICAvLyBEZXRlcm1pbmUgcnVudGltZSBkZXBlbmRlbmN5IGpvYiBrZXlzIGZvciB0b3BvbG9naWNhbCBvcmRlcmluZ1xuICAgICAgY29uc3QgcnVudGltZURlcEpvYktleXMgPSByZWxlYXNlLndvcmtzcGFjZS53b3Jrc3BhY2VEZXBlbmRlbmNpZXMoW0RlcGVuZGVuY3lUeXBlLlJVTlRJTUUsIERlcGVuZGVuY3lUeXBlLlBFRVJdKVxuICAgICAgICAuZmxhdE1hcCgoZGVwOiBQcm9qZWN0KSA9PiBwdWJsaXNoSm9ic0J5V29ya3NwYWNlLmdldChkZXAubmFtZSk/LmpvYktleXMgPz8gW10pO1xuXG4gICAgICAvLyBNYWtlIHRoZSBqb2IgbmFtZXMgdW5pcXVlXG4gICAgICB0aGlzLndvcmtmbG93Py5hZGRKb2JzKFxuICAgICAgICBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgICAgICAgT2JqZWN0LmVudHJpZXMoam9icykubWFwKChba2V5LCBqb2JdKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBuZWVkcyA9IFtcbiAgICAgICAgICAgICAgLi4uKGpvYi5uZWVkcyA/PyBbXSkubWFwKChkZXA6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgICAgIC8vIEFsbCBwdWJsaXNoIGpvYnMgZGVwZW5kIG9uIHRoZSBtYWluIHJlbGVhc2Ugam9iXG4gICAgICAgICAgICAgICAgaWYgKGRlcCA9PT0gJ3JlbGVhc2UnKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gZGVwO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8vIC4uLiBhbmQgcG9zc2libHkgb24gaW5kaXZpZHVhbCBwdWJsaXNoIGpvYnMgdGhhdCBhcmUgcHJlZml4ZWRcbiAgICAgICAgICAgICAgICByZXR1cm4gYCR7cHJlZml4fV8ke2RlcH1gO1xuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgLy8gQWRkIHRvcG9sb2dpY2FsIGRlcGVuZGVuY2llcyBvbiBydW50aW1lIGRlcCBwdWJsaXNoIGpvYnNcbiAgICAgICAgICAgICAgLi4ucnVudGltZURlcEpvYktleXMsXG4gICAgICAgICAgICBdLmZpbHRlcigoZGVwKSA9PiB7XG4gICAgICAgICAgICAgIC8vIElmIHdlIGhhdmUgdG9wb2xvZ2ljYWwgZGVwcywgdGhlICdyZWxlYXNlJyBkZXBlbmRlbmN5IGlzIHRyYW5zaXRpdmVseVxuICAgICAgICAgICAgICAvLyBzYXRpc2ZpZWQgdGhyb3VnaCB1cHN0cmVhbSBwYWNrYWdlcyDigJQgbm8gbmVlZCB0byBhZGQgaXQgZGlyZWN0bHkuXG4gICAgICAgICAgICAgIGlmIChkZXAgPT09ICdyZWxlYXNlJyAmJiBydW50aW1lRGVwSm9iS2V5cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIC8vIHdlIGJ1aWxkIHRoZSB0b29scyBvYmplY3Qgc28gdGhhdCB3ZSBjYW4gbW9kaWZ5IGl0IHdpdGggb3VyXG4gICAgICAgICAgICAvLyBvd24gY3VzdG9tIHByb3BlcnRpZXMuXG4gICAgICAgICAgICBjb25zdCB0b29sc1JlYnVpbHQ6IFRvb2xzID0ge1xuICAgICAgICAgICAgICAuLi5qb2IudG9vbHMsXG4gICAgICAgICAgICAgIG5vZGU6IHtcbiAgICAgICAgICAgICAgICAuLi5qb2IudG9vbHM/Lm5vZGUgPz8ge30sXG4gICAgICAgICAgICAgICAgLy8gdXNlIHRoZSBub2RlIHZlcnNpb24gc3BlY2lmaWVkIG9uIHRoZSBtb25vIHJlcG8uXG4gICAgICAgICAgICAgICAgdmVyc2lvbjogdGhpcy5vcHRpb25zLm5vZGVWZXJzaW9uID8/IGpvYi50b29scz8ubm9kZT8udmVyc2lvbiA/PyAnbHRzLyonLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgY29uc3QgY29uZGl0aW9uID0gYG5lZWRzLnJlbGVhc2Uub3V0cHV0cy5sYXRlc3RfY29tbWl0ID09IGdpdGh1Yi5zaGEgJiYgbmVlZHMucmVsZWFzZS5vdXRwdXRzLiR7cHVibGlzaFByb2plY3RPdXRwdXRJZChcbiAgICAgICAgICAgICAgcmVsZWFzZS53b3Jrc3BhY2UsXG4gICAgICAgICAgICApfSA9PSAndHJ1ZSdgO1xuXG4gICAgICAgICAgICBjb25zdCBwYWNrYWdlRmlsdGVyID0gYCghZ2l0aHViLmV2ZW50LmlucHV0cy5wYWNrYWdlIHx8IGdpdGh1Yi5ldmVudC5pbnB1dHMucGFja2FnZSA9PSAnJHtBTExfUEFDS0FHRVNfSU5QVVR9JyB8fCAke3Nob3VsZFJlbGVhc2VFeHByZXNzaW9uKHJlbGVhc2Uud29ya3NwYWNlLm5hbWUsIHRoaXMuX3JlbGVhc2VTZXRCeUNob2ljZSl9KWA7XG5cbiAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgIGAke3ByZWZpeH1fJHtrZXl9YCxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIC4uLmpvYixcbiAgICAgICAgICAgICAgICB0b29sczogdG9vbHNSZWJ1aWx0LFxuICAgICAgICAgICAgICAgIG5lZWRzLFxuICAgICAgICAgICAgICAgIGlmOiBydW50aW1lRGVwSm9iS2V5cy5sZW5ndGggPiAwXG4gICAgICAgICAgICAgICAgICA/IGBcXCR7eyAhY2FuY2VsbGVkKCkgJiYgIWZhaWx1cmUoKSAmJiAke2NvbmRpdGlvbn0gJiYgJHtwYWNrYWdlRmlsdGVyfSB9fWBcbiAgICAgICAgICAgICAgICAgIDogYFxcJHt7ICR7Y29uZGl0aW9ufSAmJiAke3BhY2thZ2VGaWx0ZXJ9IH19YCxcbiAgICAgICAgICAgICAgICBuYW1lOiBgJHtyZWxlYXNlLndvcmtzcGFjZS5uYW1lfTogJHtqb2IubmFtZX1gLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgXTtcbiAgICAgICAgICB9KSxcbiAgICAgICAgKSxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBvYnRhaW5SZWxlYXNlVGFzaygpOiBUYXNrIHtcbiAgICBpZiAodGhpcy5yZWxlYXNlVGFzaykge1xuICAgICAgcmV0dXJuIHRoaXMucmVsZWFzZVRhc2s7XG4gICAgfVxuXG4gICAgY29uc3QgZW52OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICAgICAgUkVMRUFTRTogJ3RydWUnLFxuICAgIH07XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLm1ham9yVmVyc2lvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBlbnYuTUFKT1IgPSB0aGlzLm9wdGlvbnMubWFqb3JWZXJzaW9uLnRvU3RyaW5nKCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5taW5NYWpvclZlcnNpb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKHRoaXMub3B0aW9ucy5tYWpvclZlcnNpb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ21pbk1ham9yVmVyc2lvbiBhbmQgbWFqb3JWZXJzaW9uIGNhbm5vdCBiZSB1c2VkIHRvZ2V0aGVyLicpO1xuICAgICAgfVxuXG4gICAgICBlbnYuTUlOX01BSk9SID0gdGhpcy5vcHRpb25zLm1pbk1ham9yVmVyc2lvbi50b1N0cmluZygpO1xuICAgIH1cblxuICAgIHRoaXMucmVsZWFzZVRhc2sgPSB0aGlzLnByb2plY3QuYWRkVGFzaygncmVsZWFzZScsIHtcbiAgICAgIGRlc2NyaXB0aW9uOiAnUHJlcGFyZSBhIHJlbGVhc2UgZnJvbSBhbGwgbW9ub3JlcG8gcGFja2FnZXMnLFxuICAgICAgZW52LFxuICAgIH0pO1xuICAgIC8vIFVucm9sbCBvdXQgdGhlICdyZWxlYXNlJyB0YXNrLCBhbmQgZG8gYWxsIHRoZSBwaGFzZXMgZm9yIGVhY2ggaW5kaXZpZHVhbCBwYWNrYWdlLiBXZSBuZWVkIHRvICdidW1wJyBhdCB0aGUgc2FtZVxuICAgIC8vIHRpbWUgc28gdGhhdCB0aGUgZGVwZW5kZW5jeSB2ZXJzaW9ucyBpbiBhbGwgJ3BhY2thZ2UuanNvbidzIGFyZSBjb3JyZWN0LlxuICAgIHRoaXMucmVsZWFzZVRhc2suZXhlYyhgJHt0aGlzLndzUnVufSBzaHggcm0gLXJmIGRpc3RgKTtcbiAgICB0aGlzLnJlbGVhc2VUYXNrLmV4ZWMoYCR7dGhpcy53c1J1bn0gYnVtcGApO1xuICAgIGlmICh0aGlzLmJ1aWxkV2l0aE54KSB7XG4gICAgICB0aGlzLnJlbGVhc2VUYXNrLmV4ZWMoJ254IHJ1bi1tYW55IC10IGJ1aWxkJyk7XG4gICAgICB0aGlzLnJlbGVhc2VUYXNrLmVudignTlhfU0tJUF9OWF9DQUNIRScsICd0cnVlJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucmVsZWFzZVRhc2suZXhlYyhgJHt0aGlzLndzUnVufSBidWlsZGApO1xuICAgIH1cbiAgICB0aGlzLnJlbGVhc2VUYXNrLmV4ZWMoYCR7dGhpcy53c1J1bn0gdW5idW1wYCk7XG4gICAgLy8gYW50aS10YW1wZXIgY2hlY2sgKGZhaWxzIGlmIHRoZXJlIHdlcmUgY2hhbmdlcyB0byBjb21taXR0ZWQgZmlsZXMpXG4gICAgLy8gdGhpcyB3aWxsIGlkZW50aWZ5IGFueSBub24tY29tbWl0dGVkIGZpbGVzIGdlbmVyYXRlZCBkdXJpbmcgYnVpbGQgKGUuZy4gdGVzdCBzbmFwc2hvdHMpXG4gICAgdGhpcy5yZWxlYXNlVGFzay5leGVjKHByb2plblJlbGVhc2UuUmVsZWFzZS5BTlRJX1RBTVBFUl9DTUQpO1xuXG4gICAgcmV0dXJuIHRoaXMucmVsZWFzZVRhc2s7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZVB1Ymxpc2hpbmdNZWNoYW5pc20oKSB7XG4gICAgaWYgKHRoaXMucmVsZWFzZVRyaWdnZXIuaXNNYW51YWwpIHtcbiAgICAgIHRoaXMuY3JlYXRlUHVibGlzaFRhc2soKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jcmVhdGVQdWJsaXNoV29ya2Zsb3coKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZVB1Ymxpc2hUYXNrKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignTWFudWFsIHB1Ymxpc2hpbmcgaXMgbm90IHN1cHBvcnRlZCByaWdodCBub3cnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb21wdXRlIHRoZSB0cmFuc2l0aXZlIHVwc3RyZWFtIGRlcGVuZGVuY2llcyAocnVudGltZSArIHBlZXIpIG9mIGEgd29ya3NwYWNlLlxuICAgKi9cbiAgcHJpdmF0ZSB1cHN0cmVhbVBhY2thZ2VOYW1lcyh3b3Jrc3BhY2U6IFR5cGVTY3JpcHRXb3Jrc3BhY2UpOiBTZXQ8c3RyaW5nPiB7XG4gICAgY29uc3QgcmVzdWx0ID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgY29uc3QgdmlzaXQgPSAod3M6IFR5cGVTY3JpcHRXb3Jrc3BhY2UpID0+IHtcbiAgICAgIGZvciAoY29uc3QgZGVwIG9mIHdzLndvcmtzcGFjZURlcGVuZGVuY2llcyhbRGVwZW5kZW5jeVR5cGUuUlVOVElNRSwgRGVwZW5kZW5jeVR5cGUuUEVFUl0pKSB7XG4gICAgICAgIGlmICghcmVzdWx0LmhhcyhkZXAubmFtZSkpIHtcbiAgICAgICAgICByZXN1bHQuYWRkKGRlcC5uYW1lKTtcbiAgICAgICAgICBpZiAoZGVwIGluc3RhbmNlb2YgVHlwZVNjcmlwdFdvcmtzcGFjZSkge1xuICAgICAgICAgICAgdmlzaXQoZGVwKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICAgIHZpc2l0KHdvcmtzcGFjZSk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgd29ya2Zsb3dfZGlzcGF0Y2ggaW5wdXQgd2l0aCBhIGNob2ljZSBvZiBwYWNrYWdlcy5cbiAgICogV2hlbiBhIHBhY2thZ2UgaXMgc2VsZWN0ZWQsIG9ubHkgdGhhdCBwYWNrYWdlIGFuZCBpdHMgdXBzdHJlYW0gZGVwcyBhcmUgcmVsZWFzZWQuXG4gICAqL1xuICBwcml2YXRlIHJlbmRlcldvcmtmbG93RGlzcGF0Y2hJbnB1dCgpIHtcbiAgICBpZiAoIXRoaXMud29ya2Zsb3c/LmZpbGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBwYWNrYWdlTmFtZXMgPSB0aGlzLnBhY2thZ2VzVG9SZWxlYXNlLm1hcChwID0+IHAucmVsZWFzZS53b3Jrc3BhY2UubmFtZSk7XG5cbiAgICB0aGlzLndvcmtmbG93LmZpbGUuYWRkT3ZlcnJpZGUoJ29uLndvcmtmbG93X2Rpc3BhdGNoLmlucHV0cy5wYWNrYWdlJywge1xuICAgICAgZGVzY3JpcHRpb246ICdTZWxlY3Qgc3BlY2lmaWMgcGFja2FnZSB0byByZWxlYXNlJyxcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgIHR5cGU6ICdjaG9pY2UnLFxuICAgICAgb3B0aW9uczogW0FMTF9QQUNLQUdFU19JTlBVVCwgLi4ucGFja2FnZU5hbWVzXSxcbiAgICAgIGRlZmF1bHQ6IEFMTF9QQUNLQUdFU19JTlBVVCxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb21wdXRlIHRoZSByZWxlYXNlIHNldCBmb3IgZWFjaCBwYWNrYWdlIChpdHNlbGYgKyB0cmFuc2l0aXZlIHVwc3RyZWFtIGRlcHMpLlxuICAgKi9cbiAgcHJpdmF0ZSBjb21wdXRlUmVsZWFzZVNldHMoKSB7XG4gICAgZm9yIChjb25zdCB7IHJlbGVhc2UgfSBvZiB0aGlzLnBhY2thZ2VzVG9SZWxlYXNlKSB7XG4gICAgICBjb25zdCB1cHN0cmVhbSA9IHRoaXMudXBzdHJlYW1QYWNrYWdlTmFtZXMocmVsZWFzZS53b3Jrc3BhY2UpO1xuICAgICAgdXBzdHJlYW0uYWRkKHJlbGVhc2Uud29ya3NwYWNlLm5hbWUpO1xuICAgICAgdGhpcy5fcmVsZWFzZVNldEJ5Q2hvaWNlLnNldChyZWxlYXNlLndvcmtzcGFjZS5uYW1lLCB1cHN0cmVhbSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVQdWJsaXNoV29ya2Zsb3coKSB7XG4gICAgY29uc3Qgd29ya2Zsb3dOYW1lID1cbiAgICAgIHRoaXMub3B0aW9ucy5yZWxlYXNlV29ya2Zsb3dOYW1lID8/XG4gICAgICAoWydtYXN0ZXInLCAnbWFpbiddLmluY2x1ZGVzKHRoaXMuYnJhbmNoTmFtZSkgPyAncmVsZWFzZScgOiBgcmVsZWFzZS0ke3RoaXMuYnJhbmNoTmFtZX1gKTtcblxuICAgIC8vIFRoZSBhcnJheXMgYXJlIGJlaW5nIGNsb25lZCB0byBhdm9pZCBhY2N1bXVsYXRpbmcgdmFsdWVzIGZyb20gcHJldmlvdXMgYnJhbmNoZXNcbiAgICBjb25zdCBwcmVCdWlsZFN0ZXBzID0gW1xuICAgICAgLi4uKHRoaXMucHJvamVjdCBhcyBhbnkpLnJlbmRlcldvcmtmbG93U2V0dXAoeyBtdXRhYmxlOiBmYWxzZSB9KSxcbiAgICAgIC4uLih0aGlzLm9wdGlvbnMucmVsZWFzZVdvcmtmbG93U2V0dXBTdGVwcyA/PyBbXSksXG4gICAgXTtcbiAgICBjb25zdCBwb3N0QnVpbGRTdGVwcyA9IFsuLi4odGhpcy5vcHRpb25zLnBvc3RCdWlsZFN0ZXBzID8/IFtdKV07XG5cbiAgICAvLyBBZGQgYW4gb3V0cHV0IHRvIHRoZSBqb2IgdG8gaW5kaWNhdGUgaWYgYSBjZXJ0YWluIHBhY2thZ2UgbmVlZHMgcHVibGlzaGluZ1xuICAgIGNvbnN0IHNob3VsZFB1Ymxpc2hPdXRwdXRzID0gT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgICAgdGhpcy5wYWNrYWdlc1RvUmVsZWFzZS5tYXAoKHsgcmVsZWFzZSB9KSA9PiB7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgcHVibGlzaFByb2plY3RPdXRwdXRJZChyZWxlYXNlLndvcmtzcGFjZSksXG4gICAgICAgICAge1xuICAgICAgICAgICAgc3RlcElkOiBzaG91bGRQdWJsaXNoUHJvamVjdFN0ZXBJZChyZWxlYXNlLndvcmtzcGFjZSksXG4gICAgICAgICAgICBvdXRwdXROYW1lOiAncHVibGlzaCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgXTtcbiAgICAgIH0pLFxuICAgICk7XG5cbiAgICAvLyBDaGVjayBpZiB0aGUgcHJvcG9zZWQgcmVsZWFzZSB0YWcgYWxyZWFkeSBleGlzdHNcbiAgICAvLyBPbmx5IGlmIGl0IGRvZXNuJ3QgZXhpc3QgeWV0IHNob3VsZCB3ZSBwdWJsaXNoXG4gICAgZm9yIChjb25zdCB7IHdvcmtzcGFjZURpcmVjdG9yeSwgcmVsZWFzZSB9IG9mIHRoaXMucGFja2FnZXNUb1JlbGVhc2UpIHtcbiAgICAgIHBvc3RCdWlsZFN0ZXBzLnB1c2goe1xuICAgICAgICBpZDogc2hvdWxkUHVibGlzaFByb2plY3RTdGVwSWQocmVsZWFzZS53b3Jrc3BhY2UpLFxuICAgICAgICB3b3JraW5nRGlyZWN0b3J5OiB3b3Jrc3BhY2VEaXJlY3RvcnksXG4gICAgICAgIHJ1bjogJyhnaXQgbHMtcmVtb3RlIC1xIC0tZXhpdC1jb2RlIC0tdGFncyBvcmlnaW4gJChjYXQgZGlzdC9yZWxlYXNldGFnLnR4dCkgJiYgKGVjaG8gXCJwdWJsaXNoPWZhbHNlXCIgPj4gJEdJVEhVQl9PVVRQVVQpKSB8fCBlY2hvIFwicHVibGlzaD10cnVlXCIgPj4gJEdJVEhVQl9PVVRQVVQnLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gY2hlY2sgaWYgbmV3IGNvbW1pdHMgd2VyZSBwdXNoZWQgdG8gdGhlIHJlcG8gd2hpbGUgd2Ugd2VyZSBidWlsZGluZy5cbiAgICAvLyBpZiBuZXcgY29tbWl0cyBoYXZlIGJlZW4gcHVzaGVkLCB3ZSB3aWxsIGNhbmNlbCB0aGlzIHJlbGVhc2VcbiAgICBpZiAodGhpcy5vcHRpb25zLnJlbGVhc2VUcmlnZ2VyPy5pc0NvbnRpbnVvdXMgPz8gdHJ1ZSkge1xuICAgICAgcG9zdEJ1aWxkU3RlcHMucHVzaCh7XG4gICAgICAgIG5hbWU6ICdDaGVjayBmb3IgbmV3IGNvbW1pdHMnLFxuICAgICAgICBpZDogR0lUX1JFTU9URV9TVEVQSUQsXG4gICAgICAgIHJ1bjogYGVjaG8gXCIke0xBVEVTVF9DT01NSVRfT1VUUFVUfT0kKGdpdCBscy1yZW1vdGUgb3JpZ2luIC1oIFxcJHt7IGdpdGh1Yi5yZWYgfX0gfCBjdXQgLWYxKVwiID4+ICRHSVRIVUJfT1VUUFVUYCxcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBGb3Igbm9uLWNvbnRpbnVvdXMgYnVpbGRzIHdlJ2xsIGp1c3QgcHV0IHRoZSB2YWx1ZSB0aGVyZSB0aGF0IGRvd25zdHJlYW0gc3RlcHMgYXJlIGdvaW5nIHRvIGNvbXBhcmUgYWdhaW5zdFxuICAgICAgcG9zdEJ1aWxkU3RlcHMucHVzaCh7XG4gICAgICAgIG5hbWU6ICdPdXRwdXQgdGhlIHNoYSB2YWx1ZSB0aGF0IGRvd25zdHJlYW0gY2hlY2tzIGV4cGVjdCcsXG4gICAgICAgIGlkOiBHSVRfUkVNT1RFX1NURVBJRCxcbiAgICAgICAgcnVuOiBgZWNobyBcIiR7TEFURVNUX0NPTU1JVF9PVVRQVVR9PVxcJHt7IGdpdGh1Yi5zaGEgfX1cIiA+PiAkR0lUSFVCX09VVFBVVGAsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB0aGlzLndvcmtmbG93ID0gbmV3IGdpdGh1Yi5UYXNrV29ya2Zsb3codGhpcy5naXRodWIsIHtcbiAgICAgIG5hbWU6IHdvcmtmbG93TmFtZSxcbiAgICAgIGpvYklkOiBSRUxFQVNFX0pPQklELFxuICAgICAgb3V0cHV0czoge1xuICAgICAgICBsYXRlc3RfY29tbWl0OiB7XG4gICAgICAgICAgc3RlcElkOiBHSVRfUkVNT1RFX1NURVBJRCxcbiAgICAgICAgICBvdXRwdXROYW1lOiBMQVRFU1RfQ09NTUlUX09VVFBVVCxcbiAgICAgICAgfSxcbiAgICAgICAgLi4uc2hvdWxkUHVibGlzaE91dHB1dHMsXG4gICAgICB9LFxuICAgICAgdHJpZ2dlcnM6IHtcbiAgICAgICAgc2NoZWR1bGU6IHRoaXMucmVsZWFzZVRyaWdnZXIuc2NoZWR1bGUgPyBbeyBjcm9uOiB0aGlzLnJlbGVhc2VUcmlnZ2VyLnNjaGVkdWxlIH1dIDogdW5kZWZpbmVkLFxuICAgICAgICBwdXNoOiB0aGlzLnJlbGVhc2VUcmlnZ2VyLmlzQ29udGludW91cyA/IHsgYnJhbmNoZXM6IFt0aGlzLmJyYW5jaE5hbWVdIH0gOiB1bmRlZmluZWQsXG4gICAgICAgIHdvcmtmbG93RGlzcGF0Y2g6IHt9LFxuICAgICAgfSxcbiAgICAgIGNvbnRhaW5lcjogdGhpcy5vcHRpb25zLndvcmtmbG93Q29udGFpbmVySW1hZ2UgPyB7IGltYWdlOiB0aGlzLm9wdGlvbnMud29ya2Zsb3dDb250YWluZXJJbWFnZSB9IDogdW5kZWZpbmVkLFxuICAgICAgZW52OiB7XG4gICAgICAgIENJOiAndHJ1ZScsXG4gICAgICB9LFxuICAgICAgcGVybWlzc2lvbnM6IHtcbiAgICAgICAgY29udGVudHM6ICd3cml0ZScgYXMgYW55LFxuICAgICAgfSxcbiAgICAgIGNoZWNrb3V0V2l0aDoge1xuICAgICAgICAvLyB3ZSBtdXN0IHVzZSAnZmV0Y2gtZGVwdGg9MCcgaW4gb3JkZXIgdG8gZmV0Y2ggYWxsIHRhZ3NcbiAgICAgICAgLy8gb3RoZXJ3aXNlIHRhZ3MgYXJlIG5vdCBjaGVja2VkIG91dFxuICAgICAgICBmZXRjaERlcHRoOiAwLFxuICAgICAgfSxcbiAgICAgIHByZUJ1aWxkU3RlcHMsXG4gICAgICB0YXNrOiB0aGlzLnJlbGVhc2VUYXNrISxcbiAgICAgIHBvc3RCdWlsZFN0ZXBzLFxuICAgICAgcnVuc09uOiB0aGlzLm9wdGlvbnMud29ya2Zsb3dSdW5zT24sXG4gICAgfSk7XG5cbiAgICAvLyBPdmVycmlkZSB0aGUgZGVmYXVsdCBlbXB0eSB3b3JrZmxvd19kaXNwYXRjaCBhZGRlZCBieSBUYXNrV29ya2Zsb3dcbiAgICAvLyB0byBpbmNsdWRlIHRoZSBkcnlfcnVuIGlucHV0IGZvciB0ZXN0aW5nIHRoZSByZWxlYXNlIHBpcGVsaW5lXG4gICAgdGhpcy53b3JrZmxvdy5vbih7XG4gICAgICB3b3JrZmxvd0Rpc3BhdGNoOiB7XG4gICAgICAgIGlucHV0czoge1xuICAgICAgICAgIGRyeV9ydW46IHtcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnRHJ5IHJ1biAoc2tpcCBhY3R1YWwgcHVibGlzaGluZyknLFxuICAgICAgICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgICAgICAgdHlwZTogJ2Jvb2xlYW4nLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG59XG5cbmZ1bmN0aW9uIHNsdWdpZnkoeDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHgucmVwbGFjZSgvW15hLXpBLVowLTlfLV0vZywgJy0nKS5yZXBsYWNlKC9eWzAtOS1dKy8sICcnKTtcbn1cblxuZnVuY3Rpb24gYnVpbGRBcnRpZmFjdE5hbWUocHJvamVjdDogUHJvamVjdCkge1xuICByZXR1cm4gc2x1Z2lmeShgJHtwcm9qZWN0Lm5hbWV9XyR7QlVJTERfQVJUSUZBQ1RfTkFNRX1gKTtcbn1cblxuZnVuY3Rpb24gcHVibGlzaFByb2plY3RPdXRwdXRJZChwcm9qZWN0OiBQcm9qZWN0KSB7XG4gIHJldHVybiBgcHVibGlzaC0ke3NsdWdpZnkocHJvamVjdC5uYW1lKX1gO1xufVxuXG5mdW5jdGlvbiBzaG91bGRQdWJsaXNoUHJvamVjdFN0ZXBJZChwcm9qZWN0OiBQcm9qZWN0KSB7XG4gIHJldHVybiBgY2hlY2stJHtwdWJsaXNoUHJvamVjdE91dHB1dElkKHByb2plY3QpfWA7XG59XG5cbi8qKlxuICogUmV0dXJucyBhIEdpdEh1YiBBY3Rpb25zIGV4cHJlc3Npb24gdGhhdCBldmFsdWF0ZXMgdG8gdHJ1ZSBpZiB0aGUgZ2l2ZW4gd29ya3NwYWNlXG4gKiBzaG91bGQgYmUgcmVsZWFzZWQgYmFzZWQgb24gdGhlIHNlbGVjdGVkIHBhY2thZ2UgaW5wdXQuXG4gKlxuICogQSB3b3Jrc3BhY2Ugc2hvdWxkIGJlIHJlbGVhc2VkIGlmIHRoZSBzZWxlY3RlZCBwYWNrYWdlIGlzIG9uZSBmb3Igd2hpY2ggdGhpcyB3b3Jrc3BhY2VcbiAqIGlzIGluIHRoZSByZWxlYXNlIHNldCAoaS5lLiwgdGhlIHdvcmtzcGFjZSBpcyB0aGUgc2VsZWN0ZWQgcGFja2FnZSBpdHNlbGYgb3IgYW4gdXBzdHJlYW0gZGVwKS5cbiAqL1xuZnVuY3Rpb24gc2hvdWxkUmVsZWFzZUV4cHJlc3Npb24od29ya3NwYWNlTmFtZTogc3RyaW5nLCByZWxlYXNlU2V0QnlDaG9pY2U6IE1hcDxzdHJpbmcsIFNldDxzdHJpbmc+Pik6IHN0cmluZyB7XG4gIC8vIEZpbmQgYWxsIHBhY2thZ2VzIHdob3NlIHJlbGVhc2Ugc2V0IGluY2x1ZGVzIHRoaXMgd29ya3NwYWNlXG4gIGNvbnN0IHRyaWdnZXJpbmdQYWNrYWdlcyA9IEFycmF5LmZyb20ocmVsZWFzZVNldEJ5Q2hvaWNlLmVudHJpZXMoKSlcbiAgICAuZmlsdGVyKChbXywgcmVsZWFzZVNldF0pID0+IHJlbGVhc2VTZXQuaGFzKHdvcmtzcGFjZU5hbWUpKVxuICAgIC5tYXAoKFtwa2ddKSA9PiBwa2cpO1xuXG4gIHJldHVybiBgY29udGFpbnMoZnJvbUpTT04oJyR7SlNPTi5zdHJpbmdpZnkodHJpZ2dlcmluZ1BhY2thZ2VzKX0nKSwgZ2l0aHViLmV2ZW50LmlucHV0cy5wYWNrYWdlKWA7XG59XG4iXX0=
|
|
516
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9ub3JlcG8tcmVsZWFzZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy95YXJuL21vbm9yZXBvLXJlbGVhc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSw2QkFBNkI7QUFDN0IsbUNBQW9HO0FBQ3BHLDJEQUEwRjtBQUUxRixpRUFBNkQ7QUFDN0QsaUZBQTJGO0FBRTNGLGdDQUFnQztBQUNoQyxNQUFNLGFBQWEsR0FBRyxTQUFTLENBQUM7QUFDaEMsTUFBTSxpQkFBaUIsR0FBRyxZQUFZLENBQUM7QUFDdkMsTUFBTSxvQkFBb0IsR0FBRyxlQUFlLENBQUM7QUFDN0MsTUFBTSxrQkFBa0IsR0FBRyxnQkFBZ0IsQ0FBQztBQUU1QyxNQUFhLGVBQWdCLFNBQVEsa0JBQVM7SUFDNUM7OztPQUdHO0lBQ0ksTUFBTSxDQUFDLEVBQUUsQ0FBQyxPQUFnQjtRQUMvQixNQUFNLHlCQUF5QixHQUFHLENBQUMsQ0FBWSxFQUF3QixFQUFFLENBQUMsQ0FBQyxZQUFZLGVBQWUsQ0FBQztRQUN2RyxPQUFPLE9BQU8sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLHlCQUF5QixDQUFDLENBQUM7SUFDNUQsQ0FBQztJQXFCRCxZQUFZLE9BQWdCLEVBQW1CLFVBQWtDLEVBQUU7UUFDakYsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRDhCLFlBQU8sR0FBUCxPQUFPLENBQTZCO1FBZGxFLHNCQUFpQixHQUFHLElBQUksS0FBSyxFQU8xQyxDQUFDO1FBSVksc0JBQWlCLEdBQUcsSUFBSSxHQUFHLEVBQXlDLENBQUM7UUFDOUUsd0JBQW1CLEdBQUcsSUFBSSxHQUFHLEVBQXVCLENBQUM7UUFLM0QsSUFBSSxDQUFDLFVBQVUsR0FBRyxPQUFPLENBQUMsVUFBVSxJQUFJLE1BQU0sQ0FBQztRQUMvQyxNQUFNLEVBQUUsR0FBRyxlQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNyQyxJQUFJLENBQUMs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QUN4QixPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUMsaUJBQWlCLEVBQUUsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUNuRSxDQUFDO0FBRUQsU0FBUyxpQkFBaUIsQ0FBQyxPQUFnQjtJQUN6QyxPQUFPLE9BQU8sQ0FBQyxHQUFHLE9BQU8sQ0FBQyxJQUFJLElBQUksK0JBQW1CLEVBQUUsQ0FBQyxDQUFDO0FBQzNELENBQUM7QUFFRCxTQUFTLHNCQUFzQixDQUFDLE9BQWdCO0lBQzlDLE9BQU8sV0FBVyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDNUMsQ0FBQztBQUVELFNBQVMsMEJBQTBCLENBQUMsT0FBZ0I7SUFDbEQsT0FBTyxTQUFTLHNCQUFzQixDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7QUFDcEQsQ0FBQztBQUVEOzs7Ozs7R0FNRztBQUNILFNBQVMsdUJBQXVCLENBQUMsYUFBcUIsRUFBRSxrQkFBNEM7SUFDbEcsOERBQThEO0lBQzlELE1BQU0sa0JBQWtCLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLEVBQUUsQ0FBQztTQUNoRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxVQUFVLENBQUMsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQztTQUMxRCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUV2QixPQUFPLHNCQUFzQixJQUFJLENBQUMsU0FBUyxDQUFDLGtCQUFrQixDQUFDLGtDQUFrQyxDQUFDO0FBQ3BHLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgRGVwZW5kZW5jeVR5cGUsIGdpdGh1YiwgcmVsZWFzZSBhcyBwcm9qZW5SZWxlYXNlLCBDb21wb25lbnQsIFByb2plY3QsIFRhc2sgfSBmcm9tICdwcm9qZW4nO1xuaW1wb3J0IHsgQlVJTERfQVJUSUZBQ1RfTkFNRSwgUEVSTUlTU0lPTl9CQUNLVVBfRklMRSB9IGZyb20gJ3Byb2plbi9saWIvZ2l0aHViL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBNb25vcmVwb1JlbGVhc2VPcHRpb25zIH0gZnJvbSAnLi9tb25vcmVwby1yZWxlYXNlLW9wdGlvbnMnO1xuaW1wb3J0IHsgVHlwZVNjcmlwdFdvcmtzcGFjZSB9IGZyb20gJy4vdHlwZXNjcmlwdC13b3Jrc3BhY2UnO1xuaW1wb3J0IHsgV29ya3NwYWNlUmVsZWFzZSwgV29ya3NwYWNlUmVsZWFzZU9wdGlvbnMgfSBmcm9tICcuL3R5cGVzY3JpcHQtd29ya3NwYWNlLXJlbGVhc2UnO1xuXG4vLyBjb3BpZWQgZnJvbSBwcm9qZW4vcmVsZWFzZS50c1xuY29uc3QgUkVMRUFTRV9KT0JJRCA9ICdyZWxlYXNlJztcbmNvbnN0IEdJVF9SRU1PVEVfU1RFUElEID0gJ2dpdF9yZW1vdGUnO1xuY29uc3QgTEFURVNUX0NPTU1JVF9PVVRQVVQgPSAnbGF0ZXN0X2NvbW1pdCc7XG5jb25zdCBBTExfUEFDS0FHRVNfSU5QVVQgPSAnKmFsbCBwYWNrYWdlcyonO1xuXG5leHBvcnQgY2xhc3MgTW9ub3JlcG9SZWxlYXNlIGV4dGVuZHMgQ29tcG9uZW50IHtcbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGBNb25vcmVwb1JlbGVhc2VXb3JrZmxvd2AgY29tcG9uZW50IG9mIGEgcHJvamVjdCBvciBgdW5kZWZpbmVkYCBpZiB0aGUgcHJvamVjdFxuICAgKiBkb2VzIG5vdCBoYXZlIGEgTW9ub3JlcG9SZWxlYXNlV29ya2Zsb3cgY29tcG9uZW50LlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBvZihwcm9qZWN0OiBQcm9qZWN0KTogTW9ub3JlcG9SZWxlYXNlIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBpc01vbm9yZXBvUmVsZWFzZVdvcmtmbG93ID0gKGM6IENvbXBvbmVudCk6IGMgaXMgTW9ub3JlcG9SZWxlYXNlID0+IGMgaW5zdGFuY2VvZiBNb25vcmVwb1JlbGVhc2U7XG4gICAgcmV0dXJuIHByb2plY3QuY29tcG9uZW50cy5maW5kKGlzTW9ub3JlcG9SZWxlYXNlV29ya2Zsb3cpO1xuICB9XG5cbiAgcHJpdmF0ZSByZWFkb25seSBicmFuY2hOYW1lOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgZ2l0aHViOiBnaXRodWIuR2l0SHViO1xuICBwcml2YXRlIHJlYWRvbmx5IHJlbGVhc2VUcmlnZ2VyOiBwcm9qZW5SZWxlYXNlLlJlbGVhc2VUcmlnZ2VyO1xuICBwcml2YXRlIHJlYWRvbmx5IGJ1aWxkV2l0aE54OiBib29sZWFuO1xuICBwcml2YXRlIHJlYWRvbmx5IHdzUnVuOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgcGFja2FnZXNUb1JlbGVhc2UgPSBuZXcgQXJyYXk8e1xuICAgIHJlYWRvbmx5IHdvcmtzcGFjZURpcmVjdG9yeTogc3RyaW5nO1xuICAgIHJlYWRvbmx5IHJlbGVhc2U6IHtcbiAgICAgIHJlYWRvbmx5IHdvcmtzcGFjZTogVHlwZVNjcmlwdFdvcmtzcGFjZTtcbiAgICAgIHJlYWRvbmx5IHB1Ymxpc2hlcjogcHJvamVuUmVsZWFzZS5QdWJsaXNoZXI7XG4gICAgICByZWFkb25seSBvcHRpb25zOiBQYXJ0aWFsPHByb2plblJlbGVhc2UuQnJhbmNoT3B0aW9ucz47XG4gICAgfTtcbiAgfT4oKTtcblxuICBwcml2YXRlIHdvcmtmbG93PzogZ2l0aHViLlRhc2tXb3JrZmxvdztcbiAgcHJpdmF0ZSByZWxlYXNlVGFzaz86IFRhc2s7XG4gIHByaXZhdGUgcmVhZG9ubHkgd29ya3NwYWNlUmVsZWFzZXMgPSBuZXcgTWFwPFR5cGVTY3JpcHRXb3Jrc3BhY2UsIFdvcmtzcGFjZVJlbGVhc2U+KCk7XG4gIHByaXZhdGUgX3JlbGVhc2VTZXRCeUNob2ljZSA9IG5ldyBNYXA8c3RyaW5nLCBTZXQ8c3RyaW5nPj4oKTtcblxuICBjb25zdHJ1Y3Rvcihwcm9qZWN0OiBQcm9qZWN0LCBwcml2YXRlIHJlYWRvbmx5IG9wdGlvbnM6IE1vbm9yZXBvUmVsZWFzZU9wdGlvbnMgPSB7fSkge1xuICAgIHN1cGVyKHByb2plY3QpO1xuXG4gICAgdGhpcy5icmFuY2hOYW1lID0gb3B0aW9ucy5icmFuY2hOYW1lID8/ICdtYWluJztcbiAgICBjb25zdCBnaCA9IGdpdGh1Yi5HaXRIdWIub2YocHJvamVjdCk7XG4gICAgaWYgKCFnaCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBQcm9qZWN0IGlzIG5vdCBhIEdpdEh1YiBwcm9qZWN0OiAke3Byb2plY3R9YCk7XG4gICAgfVxuICAgIHRoaXMuZ2l0aHViID0gZ2g7XG4gICAgdGhpcy5yZWxlYXNlVHJpZ2dlciA9IG9wdGlvbnMucmVsZWFzZVRyaWdnZXIgPz8gcHJvamVuUmVsZWFzZS5SZWxlYXNlVHJpZ2dlci5jb250aW51b3VzKCk7XG4gICAgdGhpcy5idWlsZFdpdGhOeCA9IG9wdGlvbnMuYnVpbGRXaXRoTnggPz8gZmFsc2U7XG4gICAgdGhpcy53c1J1biA9IG9wdGlvbnMueWFybkJlcnJ5ID8gJ3lhcm4gd29ya3NwYWNlcyBmb3JlYWNoIC0tYWxsIC0tZXhjbHVkZSAuIC0tdG9wb2xvZ2ljYWwtZGV2IHJ1bicgOiAneWFybiB3b3Jrc3BhY2VzIHJ1bic7XG4gIH1cblxuICBwdWJsaWMgd29ya3NwYWNlUmVsZWFzZShwcm9qZWN0OiBUeXBlU2NyaXB0V29ya3NwYWNlKSB7XG4gICAgY29uc3QgcmV0ID0gdGhpcy53b3Jrc3BhY2VSZWxlYXNlcy5nZXQocHJvamVjdCk7XG4gICAgaWYgKCFyZXQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgTm8gcmVsZWFzZSBmb3IgcHJvamVjdCAke3Byb2plY3QubmFtZX1gKTtcbiAgICB9XG4gICAgcmV0dXJuIHJldDtcbiAgfVxuXG4gIHB1YmxpYyBhZGRXb3Jrc3BhY2UocHJvamVjdDogVHlwZVNjcmlwdFdvcmtzcGFjZSwgb3B0aW9uczogV29ya3NwYWNlUmVsZWFzZU9wdGlvbnMpIHtcbiAgICBjb25zdCB3b3Jrc3BhY2VSZWxlYXNlID0gbmV3IFdvcmtzcGFjZVJlbGVhc2UocHJvamVjdCwge1xuICAgICAgcHVibGlzaFRvTnBtOiB0aGlzLm9wdGlvbnMucHVibGlzaFRvTnBtLFxuICAgICAgLi4ub3B0aW9ucyxcbiAgICB9KTtcblxuICAgIC8vIE1ha2UgdGhlc2UgcHVibGljbHkgYWNjZXNzaWJsZVxuICAgIHRoaXMud29ya3NwYWNlUmVsZWFzZXMuc2V0KHByb2plY3QsIHdvcmtzcGFjZVJlbGVhc2UpO1xuXG4gICAgaWYgKCFvcHRpb25zLnByaXZhdGUgJiYgd29ya3NwYWNlUmVsZWFzZS5wdWJsaXNoZXIpIHtcbiAgICAgIHRoaXMub2J0YWluUmVsZWFzZVRhc2soKTtcblxuICAgICAgdGhpcy5wYWNrYWdlc1RvUmVsZWFzZS5wdXNoKHtcbiAgICAgICAgd29ya3NwYWNlRGlyZWN0b3J5OiBwcm9qZWN0LndvcmtzcGFjZURpcmVjdG9yeSxcbiAgICAgICAgcmVsZWFzZToge1xuICAgICAgICAgIHdvcmtzcGFjZTogd29ya3NwYWNlUmVsZWFzZS53b3Jrc3BhY2UsXG4gICAgICAgICAgcHVibGlzaGVyOiB3b3Jrc3BhY2VSZWxlYXNlLnB1Ymxpc2hlcixcbiAgICAgICAgICBvcHRpb25zOiB7XG4gICAgICAgICAgICAvLyBlbmZvcmNlZCBvcHRpb25zXG4gICAgICAgICAgICB3b3JrZmxvd05hbWU6IHRoaXMub3B0aW9ucy5yZWxlYXNlV29ya2Zsb3dOYW1lLFxuICAgICAgICAgICAgdGFnUHJlZml4OiBgJHtwcm9qZWN0Lm5hbWV9QGAsXG5cbiAgICAgICAgICAgIC8vIG9wdGlvbnMgdGhhdCBtYXkgYmUgb3ZlcnJpZGUgbG9jYWxseVxuICAgICAgICAgICAgbWFqb3JWZXJzaW9uOiBvcHRpb25zLnZlcnNpb25CcmFuY2hPcHRpb25zLm1ham9yVmVyc2lvbiA/PyB0aGlzLm9wdGlvbnMubWFqb3JWZXJzaW9uLFxuICAgICAgICAgICAgbWluTWFqb3JWZXJzaW9uOiBvcHRpb25zLnZlcnNpb25CcmFuY2hPcHRpb25zLm1pbk1ham9yVmVyc2lvbiA/PyB0aGlzLm9wdGlvbnMubWluTWFqb3JWZXJzaW9uLFxuICAgICAgICAgICAgcHJlcmVsZWFzZTogb3B0aW9ucy52ZXJzaW9uQnJhbmNoT3B0aW9ucy5wcmVyZWxlYXNlID8/IHRoaXMub3B0aW9ucy5wcmVyZWxlYXNlLFxuICAgICAgICAgICAgbnBtRGlzdFRhZzogb3B0aW9ucy5ucG1EaXN0VGFnID8/IHRoaXMub3B0aW9ucy5ucG1EaXN0VGFnLFxuICAgICAgICAgICAgZW52aXJvbm1lbnQ6IG9wdGlvbnMuZW52aXJvbm1lbnQsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBwcmVTeW50aGVzaXplKCkge1xuICAgIGlmICghdGhpcy5yZWxlYXNlVGFzaykge1xuICAgICAgLy8gV2UgZGlkbid0IGVuZCB1cCBhZGRpbmcgYW55IHBhY2thZ2VzXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5jb21wdXRlUmVsZWFzZVNldHMoKTtcbiAgICB0aGlzLmNyZWF0ZVB1Ymxpc2hpbmdNZWNoYW5pc20oKTtcbiAgICB0aGlzLnJlbmRlclBhY2thZ2VVcGxvYWRzKCk7XG4gICAgdGhpcy5yZW5kZXJQdWJsaXNoSm9icygpO1xuICAgIHRoaXMucmVuZGVyV29ya2Zsb3dEaXNwYXRjaElucHV0KCk7XG4gIH1cblxuICBwcml2YXRlIHJlbmRlclBhY2thZ2VVcGxvYWRzKCkge1xuICAgIGNvbnN0IG5vTmV3Q29tbWl0cyA9IGBcXCR7eyBzdGVwcy4ke0dJVF9SRU1PVEVfU1RFUElEfS5vdXRwdXRzLiR7TEFURVNUX0NPTU1JVF9PVVRQVVR9ID09IGdpdGh1Yi5zaGEgfX1gO1xuXG4gICAgZm9yIChjb25zdCB7IHdvcmtzcGFjZURpcmVjdG9yeSwgcmVsZWFzZSB9IG9mIHRoaXMucGFja2FnZXNUb1JlbGVhc2UpIHtcbiAgICAgIGNvbnN0IGpvYiA9IHRoaXMud29ya2Zsb3c/LmdldEpvYihSRUxFQVNFX0pPQklEKSBhcyBnaXRodWIud29ya2Zsb3dzLkpvYiB8IHVuZGVmaW5lZDtcbiAgICAgIGpvYj8uc3RlcHMucHVzaChcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IGAke3JlbGVhc2Uud29ya3NwYWNlLm5hbWV9OiBCYWNrdXAgYXJ0aWZhY3QgcGVybWlzc2lvbnNgLFxuICAgICAgICAgIGlmOiBub05ld0NvbW1pdHMsXG4gICAgICAgICAgY29udGludWVPbkVycm9yOiB0cnVlLFxuICAgICAgICAgIHJ1bjogYGNkICR7cmVsZWFzZS53b3Jrc3BhY2UuYXJ0aWZhY3RzRGlyZWN0b3J5fSAmJiBnZXRmYWNsIC1SIC4gPiAke1BFUk1JU1NJT05fQkFDS1VQX0ZJTEV9YCxcbiAgICAgICAgICB3b3JraW5nRGlyZWN0b3J5OiB3b3Jrc3BhY2VEaXJlY3RvcnksXG4gICAgICAgIH0sXG4gICAgICAgIGdpdGh1Yi5Xb3JrZmxvd1N0ZXBzLnVwbG9hZEFydGlmYWN0KHtcbiAgICAgICAgICBuYW1lOiBgJHtyZWxlYXNlLndvcmtzcGFjZS5uYW1lfTogVXBsb2FkIGFydGlmYWN0YCxcbiAgICAgICAgICBpZjogbm9OZXdDb21taXRzLFxuICAgICAgICAgIHdpdGg6IHtcbiAgICAgICAgICAgIC8vIEV2ZXJ5IGFydGlmYWN0IG11c3QgaGF2ZSBhIHVuaXF1ZSBuYW1lXG4gICAgICAgICAgICBuYW1lOiBidWlsZEFydGlmYWN0TmFtZShyZWxlYXNlLndvcmtzcGFjZSksXG4gICAgICAgICAgICBwYXRoOiBwYXRoLmpvaW4od29ya3NwYWNlRGlyZWN0b3J5LCByZWxlYXNlLndvcmtzcGFjZS5hcnRpZmFjdHNEaXJlY3RvcnkpLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pLFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHJlbmRlclB1Ymxpc2hKb2JzKCkge1xuICAgIGNvbnN0IEdBVEVfSk9CSUQgPSAncmVsZWFzZV9nYXRlJztcbiAgICBjb25zdCBHQVRFX09VVFBVVF9TVEVQID0gJ2NvbGxlY3QnO1xuXG4gICAgLy8gQnVpbGQgdGhlIHJlbGVhc2UgdHJlZVxuICAgIGNvbnN0IHRyZWUgPSBuZXcgUmVsZWFzZVRyZWUodGhpcy5wYWNrYWdlc1RvUmVsZWFzZSwgdGhpcy5icmFuY2hOYW1lKTtcblxuICAgIC8vIFJlbmRlciB0aGUgcmVsZWFzZV9nYXRlIGpvYlxuICAgIGNvbnN0IGdhdGVTdGVwczogZ2l0aHViLndvcmtmbG93cy5Kb2JTdGVwW10gPSB0cmVlLm5vZGVzLm1hcCgobm9kZSkgPT4ge1xuICAgICAgY29uc3QgcGFja2FnZUZpbHRlciA9IGAoIWdpdGh1Yi5ldmVudC5pbnB1dHMucGFja2FnZSB8fCBnaXRodWIuZXZlbnQuaW5wdXRzLnBhY2thZ2UgPT0gJyR7QUxMX1BBQ0tBR0VTX0lOUFVUfScgfHwgJHtzaG91bGRSZWxlYXNlRXhwcmVzc2lvbihub2RlLm5hbWUsIHRoaXMuX3JlbGVhc2VTZXRCeUNob2ljZSl9KWA7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBuYW1lOiBgJHtub2RlLm5hbWV9OiBDaGVjayBwdWJsaXNoYCxcbiAgICAgICAgcnVuOiBbXG4gICAgICAgICAgYHNob3VsZF9wdWJsaXNoPVwiXFwke3sgbmVlZHMuJHtSRUxFQVNFX0pPQklEfS5vdXRwdXRzLiR7cHVibGlzaFByb2plY3RPdXRwdXRJZChub2RlLndvcmtzcGFjZSl9IH19XCJgLFxuICAgICAgICAgIGBwYWNrYWdlX2ZpbHRlcj1cIlxcJHt7ICR7cGFja2FnZUZpbHRlcn0gfX1cImAsXG4gICAgICAgICAgJ2lmIFtbIFwiJHNob3VsZF9wdWJsaXNoXCIgIT0gXCJ0cnVlXCIgXV07IHRoZW4nLFxuICAgICAgICAgIGAgIGVjaG8gXCLij63vuI8gU2tpcHBpbmcgJHtub2RlLm5hbWV9OiByZWxlYXNlIHRhZyBhbHJlYWR5IGV4aXN0c1wiYCxcbiAgICAgICAgICAnZWxpZiBbWyBcIiRwYWNrYWdlX2ZpbHRlclwiICE9IFwidHJ1ZVwiIF1dOyB0aGVuJyxcbiAgICAgICAgICBgICBlY2hvIFwi4o+t77iPIFNraXBwaW5nICR7bm9kZS5uYW1lfTogbm90IHNlbGVjdGVkIGZvciByZWxlYXNlXCJgLFxuICAgICAgICAgICdlbHNlJyxcbiAgICAgICAgICBgICBlY2hvIFwi4pyFIFdpbGwgcHVibGlzaCAke25vZGUubmFtZX1cImAsXG4gICAgICAgICAgYCAgZWNobyBcIiR7bm9kZS5uYW1lfVwiID4+IHB1Ymxpc2gudHh0YCxcbiAgICAgICAgICAnZmknLFxuICAgICAgICBdLmpvaW4oJ1xcbicpLFxuICAgICAgfTtcbiAgICB9KTtcbiAgICBnYXRlU3RlcHMucHVzaCh7XG4gICAgICBpZDogR0FURV9PVVRQVVRfU1RFUCxcbiAgICAgIG5hbWU6ICdDb2xsZWN0IHBhY2thZ2VzIHRvIHB1Ymxpc2gnLFxuICAgICAgcnVuOiBbXG4gICAgICAgICdpZiBbIC1mIHB1Ymxpc2gudHh0IF07IHRoZW4nLFxuICAgICAgICAnICBwYWNrYWdlcz0kKGpxIC1SYyBcXCcuXFwnIHB1Ymxpc2gudHh0IHwganEgLXNjIFxcJy5cXCcpJyxcbiAgICAgICAgJ2Vsc2UnLFxuICAgICAgICAnICBwYWNrYWdlcz1cXCdbXVxcJycsXG4gICAgICAgICdmaScsXG4gICAgICAgICdlY2hvIFwicGFja2FnZXNfdG9fcHVibGlzaD0kcGFja2FnZXNcIiA+PiAkR0lUSFVCX09VVFBVVCcsXG4gICAgICAgICdlY2hvIFwiUHVibGlzaGluZzogJHBhY2thZ2VzXCInLFxuICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICB9KTtcblxuICAgIHRoaXMud29ya2Zsb3c/LmFkZEpvYnMoe1xuICAgICAgW0dBVEVfSk9CSURdOiB7XG4gICAgICAgIHJ1bnNPbjogWyd1YnVudHUtbGF0ZXN0J10sXG4gICAgICAgIG5lZWRzOiBbUkVMRUFTRV9KT0JJRF0sXG4gICAgICAgIHBlcm1pc3Npb25zOiB7fSxcbiAgICAgICAgaWY6IGBcXCR7eyBuZWVkcy4ke1JFTEVBU0VfSk9CSUR9Lm91dHB1dHMubGF0ZXN0X2NvbW1pdCA9PSBnaXRodWIuc2hhIH19YCxcbiAgICAgICAgbmFtZTogJ1B1Ymxpc2ggZ2F0ZScsXG4gICAgICAgIG91dHB1dHM6IHtcbiAgICAgICAgICBwYWNrYWdlc190b19wdWJsaXNoOiB7XG4gICAgICAgICAgICBzdGVwSWQ6IEdBVEVfT1VUUFVUX1NURVAsXG4gICAgICAgICAgICBvdXRwdXROYW1lOiAncGFja2FnZXNfdG9fcHVibGlzaCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgc3RlcHM6IGdhdGVTdGVwcyxcbiAgICAgIH0gYXMgYW55LFxuICAgIH0pO1xuXG4gICAgLy8gUmVuZGVyIHBlci1wYWNrYWdlIGdhdGUgam9icyBhbmQgcHVibGlzaCBqb2JzIGZyb20gdGhlIHRyZWVcbiAgICBmb3IgKGNvbnN0IG5vZGUgb2YgdHJlZS5ub2Rlcykge1xuICAgICAgdGhpcy53b3JrZmxvdz8uYWRkSm9icyh7XG4gICAgICAgIFtub2RlLmdhdGVKb2JJZF06IG5vZGUucmVuZGVyR2F0ZUpvYihHQVRFX0pPQklEKSxcbiAgICAgICAgLi4ubm9kZS5yZW5kZXJQdWJsaXNoSm9icyh0aGlzLm9wdGlvbnMubm9kZVZlcnNpb24pLFxuICAgICAgICBbbm9kZS5kb25lSm9iSWRdOiBub2RlLnJlbmRlckRvbmVKb2IoKSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgb2J0YWluUmVsZWFzZVRhc2soKTogVGFzayB7XG4gICAgaWYgKHRoaXMucmVsZWFzZVRhc2spIHtcbiAgICAgIHJldHVybiB0aGlzLnJlbGVhc2VUYXNrO1xuICAgIH1cblxuICAgIGNvbnN0IGVudjogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgICAgIFJFTEVBU0U6ICd0cnVlJyxcbiAgICB9O1xuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5tYWpvclZlcnNpb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgZW52Lk1BSk9SID0gdGhpcy5vcHRpb25zLm1ham9yVmVyc2lvbi50b1N0cmluZygpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdGlvbnMubWluTWFqb3JWZXJzaW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMubWFqb3JWZXJzaW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdtaW5NYWpvclZlcnNpb24gYW5kIG1ham9yVmVyc2lvbiBjYW5ub3QgYmUgdXNlZCB0b2dldGhlci4nKTtcbiAgICAgIH1cblxuICAgICAgZW52Lk1JTl9NQUpPUiA9IHRoaXMub3B0aW9ucy5taW5NYWpvclZlcnNpb24udG9TdHJpbmcoKTtcbiAgICB9XG5cbiAgICB0aGlzLnJlbGVhc2VUYXNrID0gdGhpcy5wcm9qZWN0LmFkZFRhc2soJ3JlbGVhc2UnLCB7XG4gICAgICBkZXNjcmlwdGlvbjogJ1ByZXBhcmUgYSByZWxlYXNlIGZyb20gYWxsIG1vbm9yZXBvIHBhY2thZ2VzJyxcbiAgICAgIGVudixcbiAgICB9KTtcbiAgICAvLyBVbnJvbGwgb3V0IHRoZSAncmVsZWFzZScgdGFzaywgYW5kIGRvIGFsbCB0aGUgcGhhc2VzIGZvciBlYWNoIGluZGl2aWR1YWwgcGFja2FnZS4gV2UgbmVlZCB0byAnYnVtcCcgYXQgdGhlIHNhbWVcbiAgICAvLyB0aW1lIHNvIHRoYXQgdGhlIGRlcGVuZGVuY3kgdmVyc2lvbnMgaW4gYWxsICdwYWNrYWdlLmpzb24ncyBhcmUgY29ycmVjdC5cbiAgICB0aGlzLnJlbGVhc2VUYXNrLmV4ZWMoYCR7dGhpcy53c1J1bn0gc2h4IHJtIC1yZiBkaXN0YCk7XG4gICAgdGhpcy5yZWxlYXNlVGFzay5leGVjKGAke3RoaXMud3NSdW59IGJ1bXBgKTtcbiAgICBpZiAodGhpcy5idWlsZFdpdGhOeCkge1xuICAgICAgdGhpcy5yZWxlYXNlVGFzay5leGVjKCdueCBydW4tbWFueSAtdCBidWlsZCcpO1xuICAgICAgdGhpcy5yZWxlYXNlVGFzay5lbnYoJ05YX1NLSVBfTlhfQ0FDSEUnLCAndHJ1ZScpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnJlbGVhc2VUYXNrLmV4ZWMoYCR7dGhpcy53c1J1bn0gYnVpbGRgKTtcbiAgICB9XG4gICAgdGhpcy5yZWxlYXNlVGFzay5leGVjKGAke3RoaXMud3NSdW59IHVuYnVtcGApO1xuICAgIC8vIGFudGktdGFtcGVyIGNoZWNrIChmYWlscyBpZiB0aGVyZSB3ZXJlIGNoYW5nZXMgdG8gY29tbWl0dGVkIGZpbGVzKVxuICAgIC8vIHRoaXMgd2lsbCBpZGVudGlmeSBhbnkgbm9uLWNvbW1pdHRlZCBmaWxlcyBnZW5lcmF0ZWQgZHVyaW5nIGJ1aWxkIChlLmcuIHRlc3Qgc25hcHNob3RzKVxuICAgIHRoaXMucmVsZWFzZVRhc2suZXhlYyhwcm9qZW5SZWxlYXNlLlJlbGVhc2UuQU5USV9UQU1QRVJfQ01EKTtcblxuICAgIHJldHVybiB0aGlzLnJlbGVhc2VUYXNrO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVQdWJsaXNoaW5nTWVjaGFuaXNtKCkge1xuICAgIGlmICh0aGlzLnJlbGVhc2VUcmlnZ2VyLmlzTWFudWFsKSB7XG4gICAgICB0aGlzLmNyZWF0ZVB1Ymxpc2hUYXNrKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY3JlYXRlUHVibGlzaFdvcmtmbG93KCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVQdWJsaXNoVGFzaygpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ01hbnVhbCBwdWJsaXNoaW5nIGlzIG5vdCBzdXBwb3J0ZWQgcmlnaHQgbm93Jyk7XG4gIH1cblxuICAvKipcbiAgICogQ29tcHV0ZSB0aGUgdHJhbnNpdGl2ZSB1cHN0cmVhbSBkZXBlbmRlbmNpZXMgKHJ1bnRpbWUgKyBwZWVyKSBvZiBhIHdvcmtzcGFjZS5cbiAgICovXG4gIHByaXZhdGUgdXBzdHJlYW1QYWNrYWdlTmFtZXMod29ya3NwYWNlOiBUeXBlU2NyaXB0V29ya3NwYWNlKTogU2V0PHN0cmluZz4ge1xuICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgIGNvbnN0IHZpc2l0ID0gKHdzOiBUeXBlU2NyaXB0V29ya3NwYWNlKSA9PiB7XG4gICAgICBmb3IgKGNvbnN0IGRlcCBvZiB3cy53b3Jrc3BhY2VEZXBlbmRlbmNpZXMoW0RlcGVuZGVuY3lUeXBlLlJVTlRJTUUsIERlcGVuZGVuY3lUeXBlLlBFRVJdKSkge1xuICAgICAgICBpZiAoIXJlc3VsdC5oYXMoZGVwLm5hbWUpKSB7XG4gICAgICAgICAgcmVzdWx0LmFkZChkZXAubmFtZSk7XG4gICAgICAgICAgaWYgKGRlcCBpbnN0YW5jZW9mIFR5cGVTY3JpcHRXb3Jrc3BhY2UpIHtcbiAgICAgICAgICAgIHZpc2l0KGRlcCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgICB2aXNpdCh3b3Jrc3BhY2UpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICogQWRkIHdvcmtmbG93X2Rpc3BhdGNoIGlucHV0IHdpdGggYSBjaG9pY2Ugb2YgcGFja2FnZXMuXG4gICAqIFdoZW4gYSBwYWNrYWdlIGlzIHNlbGVjdGVkLCBvbmx5IHRoYXQgcGFja2FnZSBhbmQgaXRzIHVwc3RyZWFtIGRlcHMgYXJlIHJlbGVhc2VkLlxuICAgKi9cbiAgcHJpdmF0ZSByZW5kZXJXb3JrZmxvd0Rpc3BhdGNoSW5wdXQoKSB7XG4gICAgaWYgKCF0aGlzLndvcmtmbG93Py5maWxlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgcGFja2FnZU5hbWVzID0gdGhpcy5wYWNrYWdlc1RvUmVsZWFzZS5tYXAocCA9PiBwLnJlbGVhc2Uud29ya3NwYWNlLm5hbWUpO1xuXG4gICAgdGhpcy53b3JrZmxvdy5maWxlLmFkZE92ZXJyaWRlKCdvbi53b3JrZmxvd19kaXNwYXRjaC5pbnB1dHMucGFja2FnZScsIHtcbiAgICAgIGRlc2NyaXB0aW9uOiAnU2VsZWN0IHNwZWNpZmljIHBhY2thZ2UgdG8gcmVsZWFzZScsXG4gICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICB0eXBlOiAnY2hvaWNlJyxcbiAgICAgIG9wdGlvbnM6IFtBTExfUEFDS0FHRVNfSU5QVVQsIC4uLnBhY2thZ2VOYW1lc10sXG4gICAgICBkZWZhdWx0OiBBTExfUEFDS0FHRVNfSU5QVVQsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ29tcHV0ZSB0aGUgcmVsZWFzZSBzZXQgZm9yIGVhY2ggcGFja2FnZSAoaXRzZWxmICsgdHJhbnNpdGl2ZSB1cHN0cmVhbSBkZXBzKS5cbiAgICovXG4gIHByaXZhdGUgY29tcHV0ZVJlbGVhc2VTZXRzKCkge1xuICAgIGZvciAoY29uc3QgeyByZWxlYXNlIH0gb2YgdGhpcy5wYWNrYWdlc1RvUmVsZWFzZSkge1xuICAgICAgY29uc3QgdXBzdHJlYW0gPSB0aGlzLnVwc3RyZWFtUGFja2FnZU5hbWVzKHJlbGVhc2Uud29ya3NwYWNlKTtcbiAgICAgIHVwc3RyZWFtLmFkZChyZWxlYXNlLndvcmtzcGFjZS5uYW1lKTtcbiAgICAgIHRoaXMuX3JlbGVhc2VTZXRCeUNob2ljZS5zZXQocmVsZWFzZS53b3Jrc3BhY2UubmFtZSwgdXBzdHJlYW0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlUHVibGlzaFdvcmtmbG93KCkge1xuICAgIGNvbnN0IHdvcmtmbG93TmFtZSA9XG4gICAgICB0aGlzLm9wdGlvbnMucmVsZWFzZVdvcmtmbG93TmFtZSA/P1xuICAgICAgKFsnbWFzdGVyJywgJ21haW4nXS5pbmNsdWRlcyh0aGlzLmJyYW5jaE5hbWUpID8gJ3JlbGVhc2UnIDogYHJlbGVhc2UtJHt0aGlzLmJyYW5jaE5hbWV9YCk7XG5cbiAgICAvLyBUaGUgYXJyYXlzIGFyZSBiZWluZyBjbG9uZWQgdG8gYXZvaWQgYWNjdW11bGF0aW5nIHZhbHVlcyBmcm9tIHByZXZpb3VzIGJyYW5jaGVzXG4gICAgY29uc3QgcHJlQnVpbGRTdGVwcyA9IFtcbiAgICAgIC4uLih0aGlzLnByb2plY3QgYXMgYW55KS5yZW5kZXJXb3JrZmxvd1NldHVwKHsgbXV0YWJsZTogZmFsc2UgfSksXG4gICAgICAuLi4odGhpcy5vcHRpb25zLnJlbGVhc2VXb3JrZmxvd1NldHVwU3RlcHMgPz8gW10pLFxuICAgIF07XG4gICAgY29uc3QgcG9zdEJ1aWxkU3RlcHMgPSBbLi4uKHRoaXMub3B0aW9ucy5wb3N0QnVpbGRTdGVwcyA/PyBbXSldO1xuXG4gICAgLy8gQWRkIGFuIG91dHB1dCB0byB0aGUgam9iIHRvIGluZGljYXRlIGlmIGEgY2VydGFpbiBwYWNrYWdlIG5lZWRzIHB1Ymxpc2hpbmdcbiAgICBjb25zdCBzaG91bGRQdWJsaXNoT3V0cHV0cyA9IE9iamVjdC5mcm9tRW50cmllcyhcbiAgICAgIHRoaXMucGFja2FnZXNUb1JlbGVhc2UubWFwKCh7IHJlbGVhc2UgfSkgPT4ge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgIHB1Ymxpc2hQcm9qZWN0T3V0cHV0SWQocmVsZWFzZS53b3Jrc3BhY2UpLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHN0ZXBJZDogc2hvdWxkUHVibGlzaFByb2plY3RTdGVwSWQocmVsZWFzZS53b3Jrc3BhY2UpLFxuICAgICAgICAgICAgb3V0cHV0TmFtZTogJ3B1Ymxpc2gnLFxuICAgICAgICAgIH0sXG4gICAgICAgIF07XG4gICAgICB9KSxcbiAgICApO1xuXG4gICAgLy8gQ2hlY2sgaWYgdGhlIHByb3Bvc2VkIHJlbGVhc2UgdGFnIGFscmVhZHkgZXhpc3RzXG4gICAgLy8gT25seSBpZiBpdCBkb2Vzbid0IGV4aXN0IHlldCBzaG91bGQgd2UgcHVibGlzaFxuICAgIGZvciAoY29uc3QgeyB3b3Jrc3BhY2VEaXJlY3RvcnksIHJlbGVhc2UgfSBvZiB0aGlzLnBhY2thZ2VzVG9SZWxlYXNlKSB7XG4gICAgICBwb3N0QnVpbGRTdGVwcy5wdXNoKHtcbiAgICAgICAgaWQ6IHNob3VsZFB1Ymxpc2hQcm9qZWN0U3RlcElkKHJlbGVhc2Uud29ya3NwYWNlKSxcbiAgICAgICAgd29ya2luZ0RpcmVjdG9yeTogd29ya3NwYWNlRGlyZWN0b3J5LFxuICAgICAgICBydW46ICcoZ2l0IGxzLXJlbW90ZSAtcSAtLWV4aXQtY29kZSAtLXRhZ3Mgb3JpZ2luICQoY2F0IGRpc3QvcmVsZWFzZXRhZy50eHQpICYmIChlY2hvIFwicHVibGlzaD1mYWxzZVwiID4+ICRHSVRIVUJfT1VUUFVUKSkgfHwgZWNobyBcInB1Ymxpc2g9dHJ1ZVwiID4+ICRHSVRIVUJfT1VUUFVUJyxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIGNoZWNrIGlmIG5ldyBjb21taXRzIHdlcmUgcHVzaGVkIHRvIHRoZSByZXBvIHdoaWxlIHdlIHdlcmUgYnVpbGRpbmcuXG4gICAgLy8gaWYgbmV3IGNvbW1pdHMgaGF2ZSBiZWVuIHB1c2hlZCwgd2Ugd2lsbCBjYW5jZWwgdGhpcyByZWxlYXNlXG4gICAgaWYgKHRoaXMub3B0aW9ucy5yZWxlYXNlVHJpZ2dlcj8uaXNDb250aW51b3VzID8/IHRydWUpIHtcbiAgICAgIHBvc3RCdWlsZFN0ZXBzLnB1c2goe1xuICAgICAgICBuYW1lOiAnQ2hlY2sgZm9yIG5ldyBjb21taXRzJyxcbiAgICAgICAgaWQ6IEdJVF9SRU1PVEVfU1RFUElELFxuICAgICAgICBydW46IGBlY2hvIFwiJHtMQVRFU1RfQ09NTUlUX09VVFBVVH09JChnaXQgbHMtcmVtb3RlIG9yaWdpbiAtaCBcXCR7eyBnaXRodWIucmVmIH19IHwgY3V0IC1mMSlcIiA+PiAkR0lUSFVCX09VVFBVVGAsXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gRm9yIG5vbi1jb250aW51b3VzIGJ1aWxkcyB3ZSdsbCBqdXN0IHB1dCB0aGUgdmFsdWUgdGhlcmUgdGhhdCBkb3duc3RyZWFtIHN0ZXBzIGFyZSBnb2luZyB0byBjb21wYXJlIGFnYWluc3RcbiAgICAgIHBvc3RCdWlsZFN0ZXBzLnB1c2goe1xuICAgICAgICBuYW1lOiAnT3V0cHV0IHRoZSBzaGEgdmFsdWUgdGhhdCBkb3duc3RyZWFtIGNoZWNrcyBleHBlY3QnLFxuICAgICAgICBpZDogR0lUX1JFTU9URV9TVEVQSUQsXG4gICAgICAgIHJ1bjogYGVjaG8gXCIke0xBVEVTVF9DT01NSVRfT1VUUFVUfT1cXCR7eyBnaXRodWIuc2hhIH19XCIgPj4gJEdJVEhVQl9PVVRQVVRgLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgdGhpcy53b3JrZmxvdyA9IG5ldyBnaXRodWIuVGFza1dvcmtmbG93KHRoaXMuZ2l0aHViLCB7XG4gICAgICBuYW1lOiB3b3JrZmxvd05hbWUsXG4gICAgICBqb2JJZDogUkVMRUFTRV9KT0JJRCxcbiAgICAgIG91dHB1dHM6IHtcbiAgICAgICAgbGF0ZXN0X2NvbW1pdDoge1xuICAgICAgICAgIHN0ZXBJZDogR0lUX1JFTU9URV9TVEVQSUQsXG4gICAgICAgICAgb3V0cHV0TmFtZTogTEFURVNUX0NPTU1JVF9PVVRQVVQsXG4gICAgICAgIH0sXG4gICAgICAgIC4uLnNob3VsZFB1Ymxpc2hPdXRwdXRzLFxuICAgICAgfSxcbiAgICAgIHRyaWdnZXJzOiB7XG4gICAgICAgIHNjaGVkdWxlOiB0aGlzLnJlbGVhc2VUcmlnZ2VyLnNjaGVkdWxlID8gW3sgY3JvbjogdGhpcy5yZWxlYXNlVHJpZ2dlci5zY2hlZHVsZSB9XSA6IHVuZGVmaW5lZCxcbiAgICAgICAgcHVzaDogdGhpcy5yZWxlYXNlVHJpZ2dlci5pc0NvbnRpbnVvdXMgPyB7IGJyYW5jaGVzOiBbdGhpcy5icmFuY2hOYW1lXSB9IDogdW5kZWZpbmVkLFxuICAgICAgICB3b3JrZmxvd0Rpc3BhdGNoOiB7fSxcbiAgICAgIH0sXG4gICAgICBjb250YWluZXI6IHRoaXMub3B0aW9ucy53b3JrZmxvd0NvbnRhaW5lckltYWdlID8geyBpbWFnZTogdGhpcy5vcHRpb25zLndvcmtmbG93Q29udGFpbmVySW1hZ2UgfSA6IHVuZGVmaW5lZCxcbiAgICAgIGVudjoge1xuICAgICAgICBDSTogJ3RydWUnLFxuICAgICAgfSxcbiAgICAgIHBlcm1pc3Npb25zOiB7XG4gICAgICAgIGNvbnRlbnRzOiAnd3JpdGUnIGFzIGFueSxcbiAgICAgIH0sXG4gICAgICBjaGVja291dFdpdGg6IHtcbiAgICAgICAgLy8gd2UgbXVzdCB1c2UgJ2ZldGNoLWRlcHRoPTAnIGluIG9yZGVyIHRvIGZldGNoIGFsbCB0YWdzXG4gICAgICAgIC8vIG90aGVyd2lzZSB0YWdzIGFyZSBub3QgY2hlY2tlZCBvdXRcbiAgICAgICAgZmV0Y2hEZXB0aDogMCxcbiAgICAgIH0sXG4gICAgICBwcmVCdWlsZFN0ZXBzLFxuICAgICAgdGFzazogdGhpcy5yZWxlYXNlVGFzayEsXG4gICAgICBwb3N0QnVpbGRTdGVwcyxcbiAgICAgIHJ1bnNPbjogdGhpcy5vcHRpb25zLndvcmtmbG93UnVuc09uLFxuICAgIH0pO1xuXG4gICAgLy8gT3ZlcnJpZGUgdGhlIGRlZmF1bHQgZW1wdHkgd29ya2Zsb3dfZGlzcGF0Y2ggYWRkZWQgYnkgVGFza1dvcmtmbG93XG4gICAgLy8gdG8gaW5jbHVkZSB0aGUgZHJ5X3J1biBpbnB1dCBmb3IgdGVzdGluZyB0aGUgcmVsZWFzZSBwaXBlbGluZVxuICAgIHRoaXMud29ya2Zsb3cub24oe1xuICAgICAgd29ya2Zsb3dEaXNwYXRjaDoge1xuICAgICAgICBpbnB1dHM6IHtcbiAgICAgICAgICBkcnlfcnVuOiB7XG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogJ0RyeSBydW4gKHNraXAgYWN0dWFsIHB1Ymxpc2hpbmcpJyxcbiAgICAgICAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgICAgICAgIHR5cGU6ICdib29sZWFuJyxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxufVxuXG4vKipcbiAqIEEgbm9kZSByZXByZXNlbnRpbmcgYSBzaW5nbGUgcHVibGlzaCBqb2IgKGUuZy4gbnBtLCBtYXZlbiwgZ2l0aHViKS5cbiAqL1xuY2xhc3MgUHVibGlzaEpvYk5vZGUge1xuICBwdWJsaWMgcmVhZG9ubHkgam9iSWQ6IHN0cmluZztcbiAgcHVibGljIHJlYWRvbmx5IGpvYjogZ2l0aHViLndvcmtmbG93cy5Kb2I7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIHJlYWRvbmx5IHBhcmVudDogUGFja2FnZVJlbGVhc2VOb2RlLFxuICAgIGtleTogc3RyaW5nLFxuICAgIGpvYjogZ2l0aHViLndvcmtmbG93cy5Kb2IsXG4gICkge1xuICAgIHRoaXMuam9iSWQgPSBgJHtwYXJlbnQucHJlZml4fV8ke2tleX1gO1xuICAgIHRoaXMuam9iID0gam9iO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbXB1dGUgdGhlIGBuZWVkc2AgZm9yIHRoaXMgcHVibGlzaCBqb2IuXG4gICAqIEpvYnMgd2l0aCBzaWJsaW5nIGRlcHMgKGUuZy4gZ2l0aHViIGRlcGVuZHMgb24gbnBtKSB1c2UgdGhvc2U7XG4gICAqIHRoZSBmaXJzdCBqb2IgaW4gdGhlIGNoYWluIGRlcGVuZHMgb24gdGhlIGdhdGUgKyB1cHN0cmVhbSBkb25lIGpvYnMuXG4gICAqL1xuICBwdWJsaWMgZ2V0IG5lZWRzKCk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBzaWJsaW5nRGVwcyA9ICh0aGlzLmpvYi5uZWVkcyA/PyBbXSlcbiAgICAgIC5maWx0ZXIoKGRlcDogc3RyaW5nKSA9PiBkZXAgIT09ICdyZWxlYXNlJylcbiAgICAgIC5tYXAoKGRlcDogc3RyaW5nKSA9PiBgJHt0aGlzLnBhcmVudC5wcmVmaXh9XyR7ZGVwfWApO1xuXG4gICAgaWYgKHNpYmxpbmdEZXBzLmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVybiBzaWJsaW5nRGVwcztcbiAgICB9XG5cbiAgICAvLyBGaXJzdCBwdWJsaXNoIGpvYjogZGVwZW5kcyBvbiBnYXRlICsgdXBzdHJlYW0gcGFja2FnZXMnIGRvbmUgam9ic1xuICAgIHJldHVybiBbXG4gICAgICB0aGlzLnBhcmVudC5nYXRlSm9iSWQsXG4gICAgICAuLi50aGlzLnBhcmVudC51cHN0cmVhbS5tYXAoKG4pID0+IG4uZG9uZUpvYklkKSxcbiAgICBdO1xuICB9XG59XG5cbi8qKlxuICogQSBub2RlIHJlcHJlc2VudGluZyBhIHBhY2thZ2UncyByZWxlYXNlIGdhdGUsIHB1Ymxpc2ggam9icywgYW5kIGRvbmUgc2lnbmFsLlxuICovXG5jbGFzcyBQYWNrYWdlUmVsZWFzZU5vZGUge1xuICBwdWJsaWMgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuICBwdWJsaWMgcmVhZG9ubHkgd29ya3NwYWNlOiBUeXBlU2NyaXB0V29ya3NwYWNlO1xuICBwdWJsaWMgcmVhZG9ubHkgcHJlZml4OiBzdHJpbmc7XG4gIHB1YmxpYyByZWFkb25seSBnYXRlSm9iSWQ6IHN0cmluZztcbiAgcHVibGljIHJlYWRvbmx5IGRvbmVKb2JJZDogc3RyaW5nO1xuICBwdWJsaWMgcmVhZG9ubHkgcHVibGlzaEpvYnM6IFB1Ymxpc2hKb2JOb2RlW107XG4gIHB1YmxpYyByZWFkb25seSB1cHN0cmVhbTogUGFja2FnZVJlbGVhc2VOb2RlW10gPSBbXTtcblxuICBjb25zdHJ1Y3Rvcih3b3Jrc3BhY2U6IFR5cGVTY3JpcHRXb3Jrc3BhY2UsIHB1Ymxpc2hKb2JzOiBSZWNvcmQ8c3RyaW5nLCBnaXRodWIud29ya2Zsb3dzLkpvYj4pIHtcbiAgICB0aGlzLm5hbWUgPSB3b3Jrc3BhY2UubmFtZTtcbiAgICB0aGlzLndvcmtzcGFjZSA9IHdvcmtzcGFjZTtcbiAgICB0aGlzLnByZWZpeCA9IHNsdWdpZnkod29ya3NwYWNlLm5hbWUpO1xuICAgIHRoaXMuZ2F0ZUpvYklkID0gYCR7dGhpcy5wcmVmaXh9X3JlbGVhc2VgO1xuICAgIHRoaXMuZG9uZUpvYklkID0gYCR7dGhpcy5wcmVmaXh9X3JlbGVhc2VfZG9uZWA7XG4gICAgdGhpcy5wdWJsaXNoSm9icyA9IE9iamVjdC5lbnRyaWVzKHB1Ymxpc2hKb2JzKS5tYXAoXG4gICAgICAoW2tleSwgam9iXSkgPT4gbmV3IFB1Ymxpc2hKb2JOb2RlKHRoaXMsIGtleSwgam9iKSxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbmRlciB0aGUgcGFja2FnZSBnYXRlIGpvYiDigJQgcHVyZWx5IGNoZWNrcyBpZiB0aGlzIHBhY2thZ2Ugc2hvdWxkIHB1Ymxpc2guXG4gICAqL1xuICBwdWJsaWMgcmVuZGVyR2F0ZUpvYihyZWxlYXNlR2F0ZUpvYklkOiBzdHJpbmcpOiBhbnkge1xuICAgIGNvbnN0IGNvbmRpdGlvbiA9IGBjb250YWlucyhmcm9tSlNPTihuZWVkcy4ke3JlbGVhc2VHYXRlSm9iSWR9Lm91dHB1dHMucGFja2FnZXNfdG9fcHVibGlzaCksICcke3RoaXMubmFtZX0nKWA7XG4gICAgcmV0dXJuIHtcbiAgICAgIHJ1bnNPbjogWyd1YnVudHUtbGF0ZXN0J10sXG4gICAgICBuZWVkczogW3JlbGVhc2VHYXRlSm9iSWRdLFxuICAgICAgcGVybWlzc2lvbnM6IHt9LFxuICAgICAgaWY6IGBcXCR7eyAke2NvbmRpdGlvbn0gfX1gLFxuICAgICAgbmFtZTogYCR7dGhpcy5uYW1lfTogUmVsZWFzZWAsXG4gICAgICBzdGVwczogW3sgcnVuOiBgZWNobyBcIlJlbGVhc2luZyAke3RoaXMubmFtZX0uLi5cImAgfV0sXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW5kZXIgYWxsIHB1Ymxpc2ggam9iIGRlZmluaXRpb25zIGZvciB0aGlzIHBhY2thZ2UuXG4gICAqL1xuICBwdWJsaWMgcmVuZGVyUHVibGlzaEpvYnMobm9kZVZlcnNpb24/OiBzdHJpbmcpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHtcbiAgICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgICAgdGhpcy5wdWJsaXNoSm9icy5tYXAoKHB1Yk5vZGUpID0+IFtcbiAgICAgICAgcHViTm9kZS5qb2JJZCxcbiAgICAgICAge1xuICAgICAgICAgIC4uLnB1Yk5vZGUuam9iLFxuICAgICAgICAgIGlmOiB1bmRlZmluZWQsXG4gICAgICAgICAgdG9vbHM6IHtcbiAgICAgICAgICAgIC4uLnB1Yk5vZGUuam9iLnRvb2xzLFxuICAgICAgICAgICAgbm9kZToge1xuICAgICAgICAgICAgICAuLi5wdWJOb2RlLmpvYi50b29scz8ubm9kZSA/PyB7fSxcbiAgICAgICAgICAgICAgdmVyc2lvbjogbm9kZVZlcnNpb24gPz8gcHViTm9kZS5qb2IudG9vbHM/Lm5vZGU/LnZlcnNpb24gPz8gJ2x0cy8qJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICBuZWVkczogcHViTm9kZS5uZWVkcyxcbiAgICAgICAgICBuYW1lOiBgJHt0aGlzLm5hbWV9OiAke3B1Yk5vZGUuam9iLm5hbWV9YCxcbiAgICAgICAgfSxcbiAgICAgIF0pLFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogUmVuZGVyIHRoZSBkb25lIGpvYiDigJQgZmFuLWluIHRoYXQgc2lnbmFscyBhbGwgcHVibGlzaGluZyBmb3IgdGhpcyBwYWNrYWdlIGlzIGNvbXBsZXRlLlxuICAgKi9cbiAgcHVibGljIHJlbmRlckRvbmVKb2IoKTogYW55IHtcbiAgICByZXR1cm4ge1xuICAgICAgcnVuc09uOiBbJ3VidW50dS1sYXRlc3QnXSxcbiAgICAgIG5lZWRzOiB0aGlzLnB1Ymxpc2hKb2JzLm1hcCgocCkgPT4gcC5qb2JJZCksXG4gICAgICBwZXJtaXNzaW9uczoge30sXG4gICAgICAvLyBVc2UgIWNhbmNlbGxlZCgpICYmICFmYWlsdXJlKCkgc28gdGhhdDpcbiAgICAgIC8vIC0gSWYgcHVibGlzaCBqb2JzIGFyZSBza2lwcGVkIChwYWNrYWdlIGhhcyBubyBjaGFuZ2VzLCBnYXRlIHdhcyBza2lwcGVkKSwgZG9uZSBzdGlsbCBzdWNjZWVkc1xuICAgICAgLy8gICDihpIgYWxsb3dzIGRvd25zdHJlYW0gcGFja2FnZXMgdG8gcHJvY2VlZCB3aXRoIHRoZWlyIG93biByZWxlYXNlXG4gICAgICAvLyAtIElmIGEgcHVibGlzaCBqb2IgZmFpbHMsIGRvbmUgaXMgc2tpcHBlZCAoZmFpbHVyZSgpIGlzIHRydWUpXG4gICAgICAvLyAgIOKGkiBibG9ja3MgZG93bnN0cmVhbSBwYWNrYWdlcyBmcm9tIHJlbGVhc2luZ1xuICAgICAgaWY6ICcke3sgIWNhbmNlbGxlZCgpICYmICFmYWlsdXJlKCkgfX0nLFxuICAgICAgbmFtZTogYCR7dGhpcy5uYW1lfTogUmVsZWFzZSBjb21wbGV0ZWAsXG4gICAgICBzdGVwczogW3sgcnVuOiAnZWNobyBcIkFsbCBwdWJsaXNoIGpvYnMgY29tcGxldGVcIicgfV0sXG4gICAgfTtcbiAgfVxufVxuXG4vKipcbiAqIEEgdG9wb2xvZ2ljYWwgdHJlZSBvZiBwYWNrYWdlcyB0byByZWxlYXNlLlxuICogRWFjaCBub2RlIGtub3dzIGl0cyB1cHN0cmVhbSBkZXBlbmRlbmNpZXMgKHJ1bnRpbWUgKyBwZWVyKS5cbiAqL1xuY2xhc3MgUmVsZWFzZVRyZWUge1xuICBwdWJsaWMgcmVhZG9ubHkgbm9kZXM6IFBhY2thZ2VSZWxlYXNlTm9kZVtdO1xuICBwcml2YXRlIHJlYWRvbmx5IG5vZGVzQnlOYW1lID0gbmV3IE1hcDxzdHJpbmcsIFBhY2thZ2VSZWxlYXNlTm9kZT4oKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwYWNrYWdlc1RvUmVsZWFzZTogQXJyYXk8e1xuICAgICAgcmVhZG9ubHkgd29ya3NwYWNlRGlyZWN0b3J5OiBzdHJpbmc7XG4gICAgICByZWFkb25seSByZWxlYXNlOiB7XG4gICAgICAgIHJlYWRvbmx5IHdvcmtzcGFjZTogVHlwZVNjcmlwdFdvcmtzcGFjZTtcbiAgICAgICAgcmVhZG9ubHkgcHVibGlzaGVyOiBwcm9qZW5SZWxlYXNlLlB1Ymxpc2hlcjtcbiAgICAgICAgcmVhZG9ubHkgb3B0aW9uczogUGFydGlhbDxwcm9qZW5SZWxlYXNlLkJyYW5jaE9wdGlvbnM+O1xuICAgICAgfTtcbiAgICB9PixcbiAgICBicmFuY2hOYW1lOiBzdHJpbmcsXG4gICkge1xuICAgIC8vIENyZWF0ZSBub2Rlc1xuICAgIGZvciAoY29uc3QgeyByZWxlYXNlIH0gb2YgcGFja2FnZXNUb1JlbGVhc2UpIHtcbiAgICAgIGNvbnN0IHB1Ymxpc2hKb2JzID0gcmVsZWFzZS5wdWJsaXNoZXIuX3JlbmRlckpvYnNGb3JCcmFuY2goYnJhbmNoTmFtZSwgcmVsZWFzZS5vcHRpb25zKTtcblxuICAgICAgLy8gRml4IGRvd25sb2FkIHN0ZXBzIHRvIHVzZSBhcnRpZmFjdCBuYW1lIGluc3RlYWQgb2YgaW1tdXRhYmxlIGFydGlmYWN0IElEc1xuICAgICAgZm9yIChjb25zdCBqb2Igb2YgT2JqZWN0LnZhbHVlcyhwdWJsaXNoSm9icykpIHtcbiAgICAgICAgY29uc3QgZG93bmxvYWRTdGVwID0gam9iLnN0ZXBzLmZpbmQoKGopID0+IGoudXNlcz8uc3RhcnRzV2l0aCgnYWN0aW9ucy9kb3dubG9hZC1hcnRpZmFjdEAnKSk7XG4gICAgICAgIGlmICghZG93bmxvYWRTdGVwKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb3VsZCBub3QgZmluZCBkb3dubG9hZFN0ZXAgYW1vbmcgc3RlcHM6ICR7SlNPTi5zdHJpbmdpZnkoam9iLnN0ZXBzLCB1bmRlZmluZWQsIDIpfWApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChkb3dubG9hZFN0ZXAud2l0aCkge1xuICAgICAgICAgIGRlbGV0ZSBkb3dubG9hZFN0ZXAud2l0aFsnYXJ0aWZhY3QtaWRzJ107XG4gICAgICAgICAgZG93bmxvYWRTdGVwLndpdGgubmFtZSA9IGJ1aWxkQXJ0aWZhY3ROYW1lKHJlbGVhc2Uud29ya3NwYWNlKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb25zdCBub2RlID0gbmV3IFBhY2thZ2VSZWxlYXNlTm9kZShyZWxlYXNlLndvcmtzcGFjZSwgcHVibGlzaEpvYnMpO1xuICAgICAgdGhpcy5ub2Rlc0J5TmFtZS5zZXQobm9kZS5uYW1lLCBub2RlKTtcbiAgICB9XG5cbiAgICAvLyBSZXNvbHZlIHVwc3RyZWFtIGVkZ2VzXG4gICAgZm9yIChjb25zdCBub2RlIG9mIHRoaXMubm9kZXNCeU5hbWUudmFsdWVzKCkpIHtcbiAgICAgIGZvciAoY29uc3QgZGVwIG9mIG5vZGUud29ya3NwYWNlLndvcmtzcGFjZURlcGVuZGVuY2llcyhbRGVwZW5kZW5jeVR5cGUuUlVOVElNRSwgRGVwZW5kZW5jeVR5cGUuUEVFUl0pKSB7XG4gICAgICAgIGNvbnN0IHVwc3RyZWFtID0gdGhpcy5ub2Rlc0J5TmFtZS5nZXQoZGVwLm5hbWUpO1xuICAgICAgICBpZiAodXBzdHJlYW0pIHtcbiAgICAgICAgICBub2RlLnVwc3RyZWFtLnB1c2godXBzdHJlYW0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5ub2RlcyA9IFsuLi50aGlzLm5vZGVzQnlOYW1lLnZhbHVlcygpXTtcbiAgfVxufVxuXG5mdW5jdGlvbiBzbHVnaWZ5KHg6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiB4LnJlcGxhY2UoL1teYS16QS1aMC05Xy1dL2csICctJykucmVwbGFjZSgvXlswLTktXSsvLCAnJyk7XG59XG5cbmZ1bmN0aW9uIGJ1aWxkQXJ0aWZhY3ROYW1lKHByb2plY3Q6IFByb2plY3QpIHtcbiAgcmV0dXJuIHNsdWdpZnkoYCR7cHJvamVjdC5uYW1lfV8ke0JVSUxEX0FSVElGQUNUX05BTUV9YCk7XG59XG5cbmZ1bmN0aW9uIHB1Ymxpc2hQcm9qZWN0T3V0cHV0SWQocHJvamVjdDogUHJvamVjdCkge1xuICByZXR1cm4gYHB1Ymxpc2gtJHtzbHVnaWZ5KHByb2plY3QubmFtZSl9YDtcbn1cblxuZnVuY3Rpb24gc2hvdWxkUHVibGlzaFByb2plY3RTdGVwSWQocHJvamVjdDogUHJvamVjdCkge1xuICByZXR1cm4gYGNoZWNrLSR7cHVibGlzaFByb2plY3RPdXRwdXRJZChwcm9qZWN0KX1gO1xufVxuXG4vKipcbiAqIFJldHVybnMgYSBHaXRIdWIgQWN0aW9ucyBleHByZXNzaW9uIHRoYXQgZXZhbHVhdGVzIHRvIHRydWUgaWYgdGhlIGdpdmVuIHdvcmtzcGFjZVxuICogc2hvdWxkIGJlIHJlbGVhc2VkIGJhc2VkIG9uIHRoZSBzZWxlY3RlZCBwYWNrYWdlIGlucHV0LlxuICpcbiAqIEEgd29ya3NwYWNlIHNob3VsZCBiZSByZWxlYXNlZCBpZiB0aGUgc2VsZWN0ZWQgcGFja2FnZSBpcyBvbmUgZm9yIHdoaWNoIHRoaXMgd29ya3NwYWNlXG4gKiBpcyBpbiB0aGUgcmVsZWFzZSBzZXQgKGkuZS4sIHRoZSB3b3Jrc3BhY2UgaXMgdGhlIHNlbGVjdGVkIHBhY2thZ2UgaXRzZWxmIG9yIGFuIHVwc3RyZWFtIGRlcCkuXG4gKi9cbmZ1bmN0aW9uIHNob3VsZFJlbGVhc2VFeHByZXNzaW9uKHdvcmtzcGFjZU5hbWU6IHN0cmluZywgcmVsZWFzZVNldEJ5Q2hvaWNlOiBNYXA8c3RyaW5nLCBTZXQ8c3RyaW5nPj4pOiBzdHJpbmcge1xuICAvLyBGaW5kIGFsbCBwYWNrYWdlcyB3aG9zZSByZWxlYXNlIHNldCBpbmNsdWRlcyB0aGlzIHdvcmtzcGFjZVxuICBjb25zdCB0cmlnZ2VyaW5nUGFja2FnZXMgPSBBcnJheS5mcm9tKHJlbGVhc2VTZXRCeUNob2ljZS5lbnRyaWVzKCkpXG4gICAgLmZpbHRlcigoW18sIHJlbGVhc2VTZXRdKSA9PiByZWxlYXNlU2V0Lmhhcyh3b3Jrc3BhY2VOYW1lKSlcbiAgICAubWFwKChbcGtnXSkgPT4gcGtnKTtcblxuICByZXR1cm4gYGNvbnRhaW5zKGZyb21KU09OKCcke0pTT04uc3RyaW5naWZ5KHRyaWdnZXJpbmdQYWNrYWdlcyl9JyksIGdpdGh1Yi5ldmVudC5pbnB1dHMucGFja2FnZSlgO1xufVxuIl19
|
package/lib/yarn/monorepo.js
CHANGED
|
@@ -256,7 +256,7 @@ class Monorepo extends projen_1.typescript.TypeScriptProject {
|
|
|
256
256
|
}
|
|
257
257
|
exports.Monorepo = Monorepo;
|
|
258
258
|
_a = JSII_RTTI_SYMBOL_1;
|
|
259
|
-
Monorepo[_a] = { fqn: "cdklabs-projen-project-types.yarn.Monorepo", version: "0.
|
|
259
|
+
Monorepo[_a] = { fqn: "cdklabs-projen-project-types.yarn.Monorepo", version: "0.4.0" };
|
|
260
260
|
function getObjFromFile(project, file) {
|
|
261
261
|
return project.tryFindObjectFile(file)?.obj;
|
|
262
262
|
}
|
|
@@ -292,5 +292,5 @@ class CdkLabsMonorepo extends Monorepo {
|
|
|
292
292
|
}
|
|
293
293
|
exports.CdkLabsMonorepo = CdkLabsMonorepo;
|
|
294
294
|
_b = JSII_RTTI_SYMBOL_1;
|
|
295
|
-
CdkLabsMonorepo[_b] = { fqn: "cdklabs-projen-project-types.yarn.CdkLabsMonorepo", version: "0.
|
|
295
|
+
CdkLabsMonorepo[_b] = { fqn: "cdklabs-projen-project-types.yarn.CdkLabsMonorepo", version: "0.4.0" };
|
|
296
296
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9ub3JlcG8uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMveWFybi9tb25vcmVwby50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLDZDQUE2QztBQUM3QyxtQ0FBc0c7QUFDdEcsK0NBQTRDO0FBRTVDLHlEQUFxRDtBQUNyRCw2QkFBMEI7QUFHMUIsTUFBTSxZQUFZLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyw0Q0FBNEMsQ0FBQyxDQUFDO0FBRTlFOztHQUVHO0FBQ0gsTUFBYSxRQUFTLFNBQVEsbUJBQVUsQ0FBQyxpQkFBaUI7SUFDakQsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFVO1FBQ2pDLE9BQU8sT0FBTyxDQUFDLENBQUMsSUFBSSxPQUFPLENBQUMsS0FBSyxRQUFRLElBQUksWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ2xFLENBQUM7SUFjRCxZQUE0QixPQUF3QjtRQUNsRCxLQUFLLENBQUM7WUFDSixHQUFHLE9BQU87WUFDVixjQUFjLEVBQUUsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsbUJBQVUsQ0FBQyxrQkFBa0IsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLG1CQUFVLENBQUMsa0JBQWtCLENBQUMsWUFBWTtZQUN6SCxnQkFBZ0IsRUFBRSxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztnQkFDcEMsR0FBRyxPQUFPLENBQUMsZ0JBQWdCO2dCQUMzQixhQUFhLEVBQUU7b0JBQ2IsVUFBVSxFQUFFLG1CQUFVLENBQUMsY0FBYyxDQUFDLFlBQVk7b0JBQ2xELEdBQUcsT0FBTyxDQUFDLGdCQUFnQixFQUFFLGFBQWE7aUJBQzNDO2FBQ0YsQ0FBQyxDQUFDLENBQUMsU0FBUztZQUNiLFVBQVUsRUFBRSxLQUFLO1lBQ2pCLElBQUksRUFBRSxLQUFLO1lBQ1gsTUFBTSxFQUFFLEtBQUs7WUFDYixPQUFPLEVBQUUsS0FBSztTQUNmLENBQUMsQ0FBQztRQWZ1QixZQUFPLEdBQVAsT0FB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Qzs7O0FBTUQsU0FBUyxjQUFjLENBQUMsT0FBZ0IsRUFBRSxJQUFZO0lBQ3BELE9BQVEsT0FBTyxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBUyxFQUFFLEdBQUcsQ0FBQztBQUN2RCxDQUFDO0FBT0Q7OztHQUdHO0FBQ0gsTUFBYSxlQUFnQixTQUFRLFFBQVE7SUFDM0MsWUFBWSxPQUErQjtRQUN6QyxLQUFLLENBQUM7WUFDSixVQUFVLEVBQUUsSUFBSTtZQUVoQixtQkFBbUIsRUFBRSxJQUFJO1lBQ3pCLGtCQUFrQixFQUFFO2dCQUNsQixnQkFBZ0IsRUFBRSxDQUFDLFlBQVksRUFBRSxvQkFBb0IsRUFBRSxpQkFBaUIsQ0FBQztnQkFDekUsTUFBTSxFQUFFLGNBQWM7YUFDdkI7WUFDRCxHQUFHLE9BQU87WUFDVixhQUFhLEVBQUU7Z0JBQ2IsR0FBRyxPQUFPLENBQUMsYUFBYTtnQkFDeEIsT0FBTyxFQUFFLEtBQUs7Z0JBQ2QsZ0JBQWdCLEVBQUUsSUFBSTthQUN2QjtZQUNELDZHQUE2RztZQUM3RywrRkFBK0Y7WUFDL0YsbUJBQW1CLEVBQUUsT0FBTyxDQUFDLG1CQUFtQixJQUFJLE9BQU87U0FDNUQsQ0FBQyxDQUFDO1FBRUgsSUFBSSxlQUFNLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRTtZQUMxQixnQkFBZ0IsRUFBRTtnQkFDaEIsaUJBQWlCLEVBQUUsZUFBTSxDQUFDLGlCQUFpQixDQUFDLHVCQUF1QixDQUFDLEVBQUUsTUFBTSxFQUFFLHFCQUFxQixFQUFFLENBQUM7YUFDdkc7U0FDRixDQUFDLENBQUM7SUFDTCxDQUFDOztBQTFCSCwwQ0EyQkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBwYXRoUG9zaXggZnJvbSAnbm9kZTpwYXRoL3Bvc2l4JztcbmltcG9ydCB7IEpzb25GaWxlLCBQcm9qZWN0LCBqYXZhc2NyaXB0LCB0eXBlc2NyaXB0LCBnaXRodWIsIERlcGVuZGVuY3lUeXBlLCBKc29uUGF0Y2ggfSBmcm9tICdwcm9qZW4nO1xuaW1wb3J0IHsgQ29uc3RyYWludHMgfSBmcm9tICcuL2NvbnN0cmFpbnRzJztcbmltcG9ydCB7IE1vbm9yZXBvT3B0aW9ucyB9IGZyb20gJy4vbW9ub3JlcG8tb3B0aW9ucyc7XG5pbXBvcnQgeyBNb25vcmVwb1JlbGVhc2UgfSBmcm9tICcuL21vbm9yZXBvLXJlbGVhc2UnO1xuaW1wb3J0IHsgTnggfSBmcm9tICcuL254JztcbmltcG9ydCB7IFR5cGVTY3JpcHRXb3Jrc3BhY2UgfSBmcm9tICcuL3R5cGVzY3JpcHQtd29ya3NwYWNlJztcblxuY29uc3QgTU9OT1JFUE9fU1lNID0gU3ltYm9sLmZvcignY2RrbGFicy1wcm9qZW4tcHJvamVjdC10eXBlcy55YXJuLk1vbm9yZXBvJyk7XG5cbi8qKlxuICogQSBtb25vcmVwbyB1c2luZyB5YXJuIHdvcmtzcGFjZXMuXG4gKi9cbmV4cG9ydCBjbGFzcyBNb25vcmVwbyBleHRlbmRzIHR5cGVzY3JpcHQuVHlwZVNjcmlwdFByb2plY3Qge1xuICBwdWJsaWMgc3RhdGljIGlzTW9ub3JlcG8oeDogUHJvamVjdCk6IHggaXMgTW9ub3JlcG8ge1xuICAgIHJldHVybiBCb29sZWFuKHggJiYgdHlwZW9mIHggPT09ICdvYmplY3QnICYmIE1PTk9SRVBPX1NZTSBpbiB4KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgTW9ub3JlcG8gUmVsZWFzZSBjb21wb25lbnRcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBtb25vcmVwb1JlbGVhc2U/OiBNb25vcmVwb1JlbGVhc2U7XG5cbiAgLyoqXG4gICAqIFRoZSBVUkwgd2hlcmUgdGhlIGFjdHVhbCBjb2RlIGZvciB0aGUgcGFja2FnZSBsaXZlcy5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSByZXBvc2l0b3J5VXJsPzogc3RyaW5nO1xuXG4gIHByaXZhdGUgcG9zdEluc3RhbGxEZXBlbmRlbmNpZXMgPSBuZXcgQXJyYXk8KCkgPT4gc3RyaW5nW10+KCk7XG5cbiAgY29uc3RydWN0b3IocHVibGljIHJlYWRvbmx5IG9wdGlvbnM6IE1vbm9yZXBvT3B0aW9ucykge1xuICAgIHN1cGVyKHtcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgICBwYWNrYWdlTWFuYWdlcjogb3B0aW9ucy55YXJuQmVycnkgPyBqYXZhc2NyaXB0Lk5vZGVQYWNrYWdlTWFuYWdlci5ZQVJOX0JFUlJZIDogamF2YXNjcmlwdC5Ob2RlUGFja2FnZU1hbmFnZXIuWUFSTl9DTEFTU0lDLFxuICAgICAgeWFybkJlcnJ5T3B0aW9uczogb3B0aW9ucy55YXJuQmVycnkgPyB7XG4gICAgICAgIC4uLm9wdGlvbnMueWFybkJlcnJ5T3B0aW9ucyxcbiAgICAgICAgeWFyblJjT3B0aW9uczoge1xuICAgICAgICAgIG5vZGVMaW5rZXI6IGphdmFzY3JpcHQuWWFybk5vZGVMaW5rZXIuTk9ERV9NT0RVTEVTLFxuICAgICAgICAgIC4uLm9wdGlvbnMueWFybkJlcnJ5T3B0aW9ucz8ueWFyblJjT3B0aW9ucyxcbiAgICAgICAgfSxcbiAgICAgIH0gOiB1bmRlZmluZWQsXG4gICAgICBzYW1wbGVDb2RlOiBmYWxzZSxcbiAgICAgIGplc3Q6IGZhbHNlLFxuICAgICAgZXNsaW50OiBmYWxzZSxcbiAgICAgIHJlbGVhc2U6IGZhbHNlLFxuICAgIH0pO1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIE1PTk9SRVBPX1NZTSwgeyB2YWx1ZTogdHJ1ZSB9KTtcblxuICAgIHRoaXMucmVwb3NpdG9yeVVybCA9IG9wdGlvbnMucmVwb3NpdG9yeTtcbiAgICBjb25zdCBidWlsZFdpdGhOeCA9IEJvb2xlYW4ob3B0aW9ucy5ueCAmJiBvcHRpb25zLmJ1aWxkV2l0aE54KTtcblxuICAgIC8vIFlhcm4gQmVycnkgZGVwZW5kZW5jaWVzTWV0YSBmb3IgYnVpbGRhYmxlIHBhY2thZ2VzXG4gICAgaWYgKG9wdGlvbnMuYnVpbGRhYmxlUGFja2FnZXM/Lmxlbmd0aCkge1xuICAgICAgdGhpcy5wYWNrYWdlLmFkZEZpZWxkKCdkZXBlbmRlbmNpZXNNZXRhJywgT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgICAgICBvcHRpb25zLmJ1aWxkYWJsZVBhY2thZ2VzLm1hcCgocGtnKSA9PiBbcGtnLCB7IGJ1aWx0OiB0cnVlIH1dKSxcbiAgICAgICkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFByZXR0aWVyIGZvcm1hdHRpbmdcbiAgICAgKi9cbiAgICBpZiAob3B0aW9ucy5wcmV0dGllcikge1xuICAgICAgdGhpcy5hZGREZXZEZXBzKCdlc2xpbnQtY29uZmlnLXByZXR0aWVyJywgJ2VzbGludC1wbHVnaW4tcHJldHRpZXInKTtcbiAgICAgIG5ldyBKc29uRmlsZSh0aGlzLCAnLmVzbGludHJjLmpzb24nLCB7XG4gICAgICAgIGFsbG93Q29tbWVudHM6IHRydWUsXG4gICAgICAgIG9iajoge1xuICAgICAgICAgIHBsdWdpbnM6IFsnQHR5cGVzY3JpcHQtZXNsaW50JywgJ3ByZXR0aWVyJ10sXG4gICAgICAgICAgcGFyc2VyOiAnQHR5cGVzY3JpcHQtZXNsaW50L3BhcnNlcicsXG4gICAgICAgICAgcGFyc2VyT3B0aW9uczoge1xuICAgICAgICAgICAgZWNtYVZlcnNpb246IDIwMTgsXG4gICAgICAgICAgICBzb3VyY2VUeXBlOiAnbW9kdWxlJyxcbiAgICAgICAgICAgIHByb2plY3Q6ICcuL3RzY29uZmlnLmRldi5qc29uJyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGlnbm9yZVBhdHRlcm5zOiBbJyEucHJvamVucmMudHMnXSxcbiAgICAgICAgICBleHRlbmRzOiBbJ3BsdWdpbjpwcmV0dGllci9yZWNvbW1lbmRlZCddLFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgICB0aGlzLnRhc2tzLmFkZFRhc2soJ2ZtdCcsIHsgZXhlYzogJ2VzbGludCAtLWV4dCAudHMgLS1maXggLS1uby1lcnJvci1vbi11bm1hdGNoZWQtcGF0dGVybiBwcm9qZW5yYyAucHJvamVucmMudHMnIH0pO1xuXG4gICAgICB0aGlzLnZzY29kZT8uZXh0ZW5zaW9ucy5hZGRSZWNvbW1lbmRhdGlvbnMoJ2VzYmVucC5wcmV0dGllci12c2NvZGUnLCAnZGJhZXVtZXIudnNjb2RlLWVzbGludCcpO1xuICAgICAgdGhpcy52c2NvZGU/LnNldHRpbmdzLmFkZFNldHRpbmcoJ2VkaXRvci5kZWZhdWx0Rm9ybWF0dGVyJywgJ2VzYmVucC5wcmV0dGllci12c2NvZGUnKTtcbiAgICAgIHRoaXMudnNjb2RlPy5zZXR0aW5ncy5hZGRTZXR0aW5nKCdlc2xpbnQuZm9ybWF0LmVuYWJsZScsIHRydWUpO1xuICAgICAgdGhpcy52c2NvZGU/LnNldHRpbmdzLmFkZFNldHRpbmdzKHsgJ2VkaXRvci5kZWZhdWx0Rm9ybWF0dGVyJzogJ2RiYWV1bWVyLnZzY29kZS1lc2xpbnQnIH0sIFtcbiAgICAgICAgJ2phdmFzY3JpcHQnLFxuICAgICAgICAndHlwZXNjcmlwdCcsXG4gICAgICBdKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYSBWU0NvZGUgV29ya3NwYWNlXG4gICAgICovXG4gICAgaWYgKG9wdGlvbnMudnNjb2RlV29ya3NwYWNlKSB7XG4gICAgICBjb25zdCB3b3Jrc3BhY2VGaWxlID0gYCR7dGhpcy5uYW1lfS5jb2RlLXdvcmtzcGFjZWA7XG4gICAgICBuZXcgSnNvbkZpbGUodGhpcywgd29ya3NwYWNlRmlsZSwge1xuICAgICAgICBhbGxvd0NvbW1lbnRzOiB0cnVlLFxuICAgICAgICBvYmo6ICgpID0+ICh7XG4gICAgICAgICAgZm9sZGVyczogKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZm9sZGVyczogQXJyYXk8e1xuICAgICAgICAgICAgICBwYXRoOiBzdHJpbmc7XG4gICAgICAgICAgICAgIG5hbWU/OiBzdHJpbmc7XG4gICAgICAgICAgICB9PiA9IHRoaXMuc3VicHJvamVjdHNcbiAgICAgICAgICAgICAgLnNvcnQoKHAxLCBwMikgPT4gcDEubmFtZS5sb2NhbGVDb21wYXJlKHAyLm5hbWUpKVxuICAgICAgICAgICAgICAubWFwKChwKSA9PiAoeyBwYXRoOiBwLndvcmtzcGFjZURpcmVjdG9yeSB9KSk7XG5cbiAgICAgICAgICAgIGlmIChvcHRpb25zLnZzY29kZVdvcmtzcGFjZU9wdGlvbnM/LmluY2x1ZGVSb290V29ya3NwYWNlKSB7XG4gICAgICAgICAgICAgIGZvbGRlcnMudW5zaGlmdCh7IHBhdGg6ICcuJywgbmFtZTogb3B0aW9ucy52c2NvZGVXb3Jrc3BhY2VPcHRpb25zPy5yb290V29ya3NwYWNlTmFtZSA/PyAnPHJvb3Q+JyB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIGZvbGRlcnM7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBzZXR0aW5nczogKCkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc2V0dGluZ3MgPSAoZ2V0T2JqRnJvbUZpbGUodGhpcywgJy52c2NvZGUvc2V0dGluZ3MuanNvbicpID8/IHt9KSBhcyBhbnk7XG4gICAgICAgICAgICBpZiAob3B0aW9ucy52c2NvZGVXb3Jrc3BhY2VPcHRpb25zPy5pbmNsdWRlUm9vdFdvcmtzcGFjZSAmJiB0aGlzLnN1YnByb2plY3RzLmxlbmd0aCkge1xuICAgICAgICAgICAgICBzZXR0aW5nc1snZmlsZXMuZXhjbHVkZSddID0gdGhpcy5zdWJwcm9qZWN0cy5yZWR1Y2UoKGV4Y2x1ZGVzLCBwKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgIC4uLmV4Y2x1ZGVzLFxuICAgICAgICAgICAgICAgICAgW3Aud29ya3NwYWNlRGlyZWN0b3J5LnNwbGl0KHBhdGhQb3NpeC5zZXApWzBdXTogdHJ1ZSxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICB9LCBzZXR0aW5nc1snZmlsZXMuZXhjbHVkZSddID8/IHt9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBzZXR0aW5ncztcbiAgICAgICAgICB9LFxuICAgICAgICAgIGV4dGVuc2lvbnM6ICgpID0+IGdldE9iakZyb21GaWxlKHRoaXMsICcudnNjb2RlL2V4dGVuc2lvbnMuanNvbicpLFxuICAgICAgICB9KSxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRhc2tzXG4gICAgICovXG4gICAgLy8gYnVpbGQgdGFza1xuICAgIHRoaXMudGFza3MucmVtb3ZlVGFzaygnYnVpbGQnKTtcbiAgICBjb25zdCBmbXRUYXNrID0gdGhpcy50YXNrcy50cnlGaW5kKCdmbXQnKTtcbiAgICBjb25zdCBidWlsZFRhc2sgPSB0aGlzLnRhc2tzLmFkZFRhc2soJ2J1aWxkJyk7XG4gICAgaWYgKHRoaXMuZGVmYXVsdFRhc2spIHtcbiAgICAgIGJ1aWxkVGFzay5zcGF3bih0aGlzLmRlZmF1bHRUYXNrKTtcbiAgICB9XG4gICAgaWYgKGZtdFRhc2spIHtcbiAgICAgIGJ1aWxkVGFzay5zcGF3bihmbXRUYXNrKTtcbiAgICB9XG4gICAgY29uc3Qgd3NSdW4gPSBvcHRpb25zLnlhcm5CZXJyeSA/ICd5YXJuIHdvcmtzcGFjZXMgZm9yZWFjaCAtLWFsbCAtLWV4Y2x1ZGUgLiAtLXRvcG9sb2dpY2FsLWRldiBydW4nIDogJ3lhcm4gd29ya3NwYWNlcyBydW4nO1xuXG4gICAgaWYgKGJ1aWxkV2l0aE54KSB7XG4gICAgICBidWlsZFRhc2suZXhlYygnbnggcnVuLW1hbnkgLXQgYnVpbGQnKTtcbiAgICAgIHRoaXMuZ2l0aHViPy50cnlGaW5kV29ya2Zsb3coJ2J1aWxkJyk/LmZpbGU/LnBhdGNoKFxuICAgICAgICBKc29uUGF0Y2guYWRkKCcvam9icy9idWlsZC9lbnYvTlhfU0tJUF9OWF9DQUNIRScsICd0cnVlJyksXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICBidWlsZFRhc2suZXhlYyhgJHt3c1J1bn0gYnVpbGRgKTtcbiAgICB9XG5cbiAgICAvLyBSdW4gaW4gYWxsIHdvcmtzcGFjZXMgdGFza3NcbiAgICB0aGlzLnRhc2tzLnRyeUZpbmQoJ2NvbXBpbGUnKT8ucmVzZXQoYCR7d3NSdW59IGNvbXBpbGVgKTtcbiAgICB0aGlzLnRhc2tzLnRyeUZpbmQoJ3BhY2thZ2UnKT8ucmVzZXQoYCR7d3NSdW59IHBhY2thZ2VgKTtcbiAgICB0aGlzLnRhc2tzLnRyeUZpbmQoJ3Rlc3QnKT8ucmVzZXQoYCR7d3NSdW59IHRlc3RgKTtcbiAgICB0aGlzLmFkZFRhc2soJ3J1bicsIHtcbiAgICAgIGV4ZWM6IHdzUnVuLFxuICAgICAgcmVjZWl2ZUFyZ3M6IHRydWUsXG4gICAgfSk7XG5cbiAgICAvLyBVcGdyYWRlIGFsbCBwYWNrYWdlc1xuICAgIGNvbnN0IGNvb2xkb3duID0gb3B0aW9ucy5kZXBzVXBncmFkZU9wdGlvbnM/LmNvb2xkb3duID8/IChvcHRpb25zLnlhcm5CZXJyeSA/IDMgOiB1bmRlZmluZWQpO1xuICAgIGNvbnN0IHVwZ3JhZGVFbnYgPSB7IC4uLnRoaXMudXBncmFkZVdvcmtmbG93Py51cGdyYWRlVGFzay5lbnZWYXJzIHx8IHt9IH07XG4gICAgaWYgKGNvb2xkb3duICYmIG9wdGlvbnMueWFybkJlcnJ5KSB7XG4gICAgICB1cGdyYWRlRW52LllBUk5fTlBNX01JTklNQUxfQUdFX0dBVEUgPSBTdHJpbmcoY29vbGRvd24gKiAyNCAqIDYwKTtcbiAgICB9XG4gICAgdGhpcy50YXNrcy5yZW1vdmVUYXNrKCd1cGdyYWRlJyk7XG4gICAgdGhpcy50YXNrcy5hZGRUYXNrKCd1cGdyYWRlJywge1xuICAgICAgZW52OiB1cGdyYWRlRW52LFxuICAgICAgZGVzY3JpcHRpb246ICdVcGdyYWRlIGRlcGVuZGVuY2llcyBpbiBhbGwgd29ya3NwYWNlcycsXG4gICAgICBzdGVwczogW1xuICAgICAgICAvLyBJdCBpcyBub3Qgc2FmZSBhbnltb3JlIHRvIGhhdmUgJ25wbS1jaGVjay11cGRhdGVzJyBpbiBhIFlhcm4gMSBkZXBlbmRlbmN5IHRyZWUsIHNvIHJ1biBpdCBpbiBhIHNlcGFyYXRlIHRyZWUuXG4gICAgICAgIHsgZXhlYzogYCR7b3B0aW9ucy55YXJuQmVycnkgPyAneWFybiBkbHgnIDogJ25weCd9IG5wbS1jaGVjay11cGRhdGVzQDIwIC0tZGVwPWRldixvcHRpb25hbCxwZWVyLHByb2QsYnVuZGxlIC0tdXBncmFkZSAtLXRhcmdldD1taW5vciR7Y29vbGRvd24gPyBgIC0tY29vbGRvd249JHtjb29sZG93bn1gIDogJyd9YCB9LFxuICAgICAgICB7IGV4ZWM6IGAke3dzUnVufSBjaGVjay1mb3ItdXBkYXRlc2AgfSxcbiAgICAgICAgeyBleGVjOiBvcHRpb25zLnlhcm5CZXJyeSA/ICd5YXJuIGluc3RhbGwnIDogJ3lhcm4gaW5zdGFsbCAtLWNoZWNrLWZpbGVzJyB9LFxuICAgICAgICB7IGV4ZWM6IG9wdGlvbnMueWFybkJlcnJ5ID8gJ3lhcm4gdXAnIDogJ3lhcm4gdXBncmFkZScgfSxcbiAgICAgICAgeyBzcGF3bjogJ2RlZmF1bHQnIH0sXG4gICAgICAgIHsgc3Bhd246ICdwb3N0LXVwZ3JhZGUnIH0sXG4gICAgICBdLFxuICAgIH0pO1xuXG4gICAgLy8gQ2xlYW4gdXAgdGFza3Mgbm90IHJlcXVpcmVkIGF0IHRvcC1sZXZlbFxuICAgIHRoaXMudGFza3MucmVtb3ZlVGFzaygnZWplY3QnKTtcbiAgICB0aGlzLnRhc2tzLnJlbW92ZVRhc2soJ3dhdGNoJyk7XG4gICAgdGhpcy50YXNrcy5yZW1vdmVUYXNrKCdwcmUtY29tcGlsZScpO1xuICAgIHRoaXMudGFza3MucmVtb3ZlVGFzaygncG9zdC1jb21waWxlJyk7XG5cbiAgICAvLyBOeFxuICAgIGlmIChvcHRpb25zLm54KSB7XG4gICAgICBuZXcgTngodGhpcywge1xuICAgICAgICBkZWZhdWx0QmFzZTogb3B0aW9ucy5kZWZhdWx0UmVsZWFzZUJyYW5jaCxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIFlhcm4gQ29uc3RyYWludHNcbiAgICBjb25zdCBjb25zaXN0ZW50VmVyc2lvbnMgPSBbLi4uKG9wdGlvbnMuY29uc2lzdGVudFZlcnNpb25zID8/IFtdKV07XG4gICAgaWYgKG9wdGlvbnMubngpIHtcbiAgICAgIGNvbnNpc3RlbnRWZXJzaW9ucy5wdXNoKCdueCcpO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucy55YXJuQmVycnkgJiYgY29uc2lzdGVudFZlcnNpb25zLmxlbmd0aCkge1xuICAgICAgbmV3IENvbnN0cmFpbnRzKHRoaXMsIHsgY29uc2lzdGVudFZlcnNpb25zIH0pO1xuICAgIH1cblxuICAgIC8vIFJlbGVhc2UgV29ya2Zsb3dcbiAgICBpZiAob3B0aW9ucy5yZWxlYXNlKSB7XG4gICAgICB0aGlzLm1vbm9yZXBvUmVsZWFzZSA9IG5ldyBNb25vcmVwb1JlbGVhc2UodGhpcywge1xuICAgICAgICB3b3JrZmxvd1J1bnNPbjogb3B0aW9ucy53b3JrZmxvd1J1bnNPbixcbiAgICAgICAgYnVpbGRXaXRoTngsXG4gICAgICAgIHlhcm5CZXJyeTogb3B0aW9ucy55YXJuQmVycnksXG4gICAgICAgIC4uLm9wdGlvbnMucmVsZWFzZU9wdGlvbnMsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgb3ZlcnJpZGUgZ2V0IHN1YnByb2plY3RzKCk6IFR5cGVTY3JpcHRXb3Jrc3BhY2VbXSB7XG4gICAgcmV0dXJuIHN1cGVyLnN1YnByb2plY3RzIGFzIFR5cGVTY3JpcHRXb3Jrc3BhY2VbXTtcbiAgfVxuXG4gIHB1YmxpYyBzeW50aCgpIHtcbiAgICB0aGlzLmZpbmFsRXNjYXBlSGF0Y2hlcygpO1xuICAgIHN1cGVyLnN5bnRoKCk7XG4gIH1cblxuICAvKipcbiAgICogQWxsb3dzIGEgc3ViIHByb2plY3QgdG8gcmVxdWVzdCBpbnN0YWxsYXRpb24gb2YgZGVwZW5kZW5jeSBhdCB0aGUgTW9ub3JlcG8gcm9vdFxuICAgKiBUaGV5IG11c3QgcHJvdmlkZSBhIGZ1bmN0aW9uIHRoYXQgaXMgZXhlY3V0ZWQgYWZ0ZXIgZGVwZW5kZW5jaWVzIGhhdmUgYmVlbiBpbnN0YWxsZWRcbiAgICogSWYgdGhpcyBmdW5jdGlvbiByZXR1cm5zIHRydWUsIHRoZSBpbnN0YWxsIGNvbW1hbmQgaXMgcnVuIGZvciBhIHNlY29uZCB0aW1lIGFmdGVyIGFsbCBzdWIgcHJvamVjdCByZXF1ZXN0cyBoYXZlIHJ1bi5cbiAgICogVGhpcyBpcyB1c2VkIHRvIHJlc29sdmUgZGVwZW5kZW5jeSB2ZXJzaW9ucyBmcm9tIGAqYCB0byBhIGNvbmNyZXRlIHZlcnNpb24gY29uc3RyYWludC5cbiAgICovXG4gIHB1YmxpYyByZXF1ZXN0SW5zdGFsbERlcGVuZGVuY2llcyhyZXNvbHZlcjogSURlcGVuZGVuY3lSZXNvbHZlcikge1xuICAgIHRoaXMucG9zdEluc3RhbGxEZXBlbmRlbmNpZXMucHVzaChyZXNvbHZlci5yZXNvbHZlRGVwc0FuZFdyaXRlUGFja2FnZUpzb24pO1xuICB9XG5cbiAgLyoqXG4gICAqIENvZGUgdGhhdCBuZWVkcyB0byBydW4ganVzdCBiZWZvcmUgc3ludGgsIGJ1dCBhZnRlciBhbGwgb3RoZXIgY29kZVxuICAgKi9cbiAgcHJpdmF0ZSBmaW5hbEVzY2FwZUhhdGNoZXMoKSB7XG4gICAgLy8gR2V0IHRoZSBPYmplY3RGaWxlXG4gICAgdGhpcy5wYWNrYWdlLmFkZEZpZWxkKCdwcml2YXRlJywgdHJ1ZSk7XG4gICAgdGhpcy5wYWNrYWdlLmFkZEZpZWxkKCd3b3Jrc3BhY2VzJywge1xuICAgICAgcGFja2FnZXM6IHRoaXMuc3VicHJvamVjdHMubWFwKChwKSA9PiBwLndvcmtzcGFjZURpcmVjdG9yeSksXG4gICAgICAuLi4oIXRoaXMub3B0aW9ucy55YXJuQmVycnkgPyB0aGlzLnJlbmRlck5vSG9pc3QoKSA6IHVuZGVmaW5lZCksXG4gICAgfSk7XG5cbiAgICAvLyBBdXRvLXNldCBob2lzdGluZ0xpbWl0cyBmb3Igd29ya3NwYWNlcyB3aXRoIGJ1bmRsZWQgZGVwcyB3aGVuIHVzaW5nIFlhcm4gQmVycnlcbiAgICBpZiAodGhpcy5vcHRpb25zLnlhcm5CZXJyeSkge1xuICAgICAgZm9yIChjb25zdCBwIG9mIHRoaXMuc3VicHJvamVjdHMpIHtcbiAgICAgICAgaWYgKHAuYnVuZGxlZERlcHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHAucGFja2FnZS5hZGRGaWVsZCgnaW5zdGFsbENvbmZpZycsIHsgaG9pc3RpbmdMaW1pdHM6ICd3b3Jrc3BhY2VzJyB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMudHNjb25maWc/LmZpbGUuYWRkT3ZlcnJpZGUoJ2luY2x1ZGUnLCBbXSk7XG4gICAgdGhpcy50c2NvbmZpZ0Rldj8uZmlsZS5hZGRPdmVycmlkZSgnaW5jbHVkZScsIFsnLnByb2plbnJjLnRzJywgJ3Byb2plbnJjLyoqLyoudHMnXSk7XG4gICAgZm9yIChjb25zdCB0c2NvbmZpZyBvZiBbdGhpcy50c2NvbmZpZywgdGhpcy50c2NvbmZpZ0Rldl0pIHtcbiAgICAgIHRzY29uZmlnPy5maWxlLmFkZE92ZXJyaWRlKFxuICAgICAgICAncmVmZXJlbmNlcycsXG4gICAgICAgIHRoaXMuc3VicHJvamVjdHMubWFwKChwKSA9PiAoeyBwYXRoOiBwLndvcmtzcGFjZURpcmVjdG9yeSB9KSksXG4gICAgICApO1xuICAgIH1cblxuICAgIHRoaXMucGFja2FnZS5hZGRGaWVsZCgnamVzdCcsIHtcbiAgICAgIHByb2plY3RzOiB0aGlzLnN1YnByb2plY3RzLm1hcCgocCkgPT4gYDxyb290RGlyPi8ke3Aud29ya3NwYWNlRGlyZWN0b3J5fWApLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbmRlciB0aGUgJ25vaG9pc3QnIGRpcmVjdGl2ZVxuICAgKlxuICAgKiBCdW5kbGVkIGRlcGVuZGVuY2llcyBtdXN0IGJlIG5vaG9pc3QnZWQsIG90aGVyd2lzZSBOUE0gc2lsZW50bHkgd29uJ3QgYnVuZGxlIHRoZW0uXG4gICAqXG4gICAqIFJlbmRlcnMgYW4gb2JqZWN0IHRoYXQgc2hvdWxkIGJlIG1peGVkIGludG8gdGhlIGB3b3Jrc3BhY2VzYCBvYmplY3QuXG4gICAqL1xuICBwcml2YXRlIHJlbmRlck5vSG9pc3QoKTogYW55IHtcbiAgICBjb25zdCBub2hvaXN0ID0gdGhpcy5zdWJwcm9qZWN0cy5mbGF0TWFwKChwKSA9PlxuICAgICAgcC5kZXBzLmFsbFxuICAgICAgICAuZmlsdGVyKChkZXApID0+IGRlcC50eXBlID09PSBEZXBlbmRlbmN5VHlwZS5CVU5ETEVEKVxuICAgICAgICAuZmxhdE1hcCgoZGVwKSA9PiBbXG4gICAgICAgICAgYCR7cC5uYW1lfS8ke2RlcC5uYW1lfWAsXG4gICAgICAgICAgYCR7cC5uYW1lfS8ke2RlcC5uYW1lfS8qKmAsXG4gICAgICAgIF0pLFxuICAgICk7XG4gICAgcmV0dXJuIG5vaG9pc3QubGVuZ3RoID4gMCA/IHsgbm9ob2lzdCB9IDogdW5kZWZpbmVkO1xuICB9XG5cbiAgLyoqXG4gICAqIEhvb2tzIGludG8gdGhlIGluc3RhbGwgZGVwZW5kZW5jaWVzIGN5Y2xlXG4gICAqL1xuICBwdWJsaWMgcG9zdFN5bnRoZXNpemUoKSB7XG4gICAgaWYgKHRoaXMucG9zdEluc3RhbGxEZXBlbmRlbmNpZXMubGVuZ3RoKSB7XG4gICAgICBjb25zdCBub2RlUGtnOiBhbnkgPSB0aGlzLnBhY2thZ2U7XG4gICAgICBub2RlUGtnLmluc3RhbGxEZXBlbmRlbmNpZXMoeyByZWFzb246IGphdmFzY3JpcHQuSW5zdGFsbFJlYXNvbi5QQUNLQUdFX0pTT05fQ0hBTkdFRCB9KTtcblxuICAgICAgY29uc3QgcmVzb2x1dGlvbnMgPSB0aGlzLnBvc3RJbnN0YWxsRGVwZW5kZW5jaWVzLmZsYXRNYXAoKHJlcXVlc3QpID0+IHJlcXVlc3QoKSk7XG4gICAgICBpZiAocmVzb2x1dGlvbnMubGVuZ3RoKSB7XG4gICAgICAgIG5vZGVQa2cuaW5zdGFsbERlcGVuZGVuY2llcyh7IHJlYXNvbjogamF2YXNjcmlwdC5JbnN0YWxsUmVhc29uLkRFUFNfUkVTT0xWRUQsIHJlc29sdXRpb25zIH0pO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnBvc3RJbnN0YWxsRGVwZW5kZW5jaWVzID0gW107XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSURlcGVuZGVuY3lSZXNvbHZlciB7XG4gIHJlc29sdmVEZXBzQW5kV3JpdGVQYWNrYWdlSnNvbigpOiBzdHJpbmdbXTtcbn1cblxuZnVuY3Rpb24gZ2V0T2JqRnJvbUZpbGUocHJvamVjdDogUHJvamVjdCwgZmlsZTogc3RyaW5nKTogb2JqZWN0IHtcbiAgcmV0dXJuIChwcm9qZWN0LnRyeUZpbmRPYmplY3RGaWxlKGZpbGUpIGFzIGFueSk/Lm9iajtcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciBDZGtMYWJzTW9ub3JlcG9cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDZGtMYWJzTW9ub3JlcG9PcHRpb25zIGV4dGVuZHMgTW9ub3JlcG9PcHRpb25zIHt9XG5cbi8qKlxuICogT3BpbmlvbmF0ZWQgaW1wbGVtZW50YXRpb24gb2YgeWFybi5Nb25vcmVwb1xuICogQHBqaWQgY2RrbGFicy15YXJuLW1vbm9yZXBvXG4gKi9cbmV4cG9ydCBjbGFzcyBDZGtMYWJzTW9ub3JlcG8gZXh0ZW5kcyBNb25vcmVwbyB7XG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM6IENka0xhYnNNb25vcmVwb09wdGlvbnMpIHtcbiAgICBzdXBlcih7XG4gICAgICBwcm9qZW5yY1RzOiB0cnVlLFxuXG4gICAgICBhdXRvQXBwcm92ZVVwZ3JhZGVzOiB0cnVlLFxuICAgICAgYXV0b0FwcHJvdmVPcHRpb25zOiB7XG4gICAgICAgIGFsbG93ZWRVc2VybmFtZXM6IFsnZ2l0aHViLWJvdCcsICdjZGtsYWJzLWF1dG9tYXRpb24nLCAnZGVwZW5kYWJvdFtib3RdJ10sXG4gICAgICAgIHNlY3JldDogJ0dJVEhVQl9UT0tFTicsXG4gICAgICB9LFxuICAgICAgLi4ub3B0aW9ucyxcbiAgICAgIGdpdGh1Yk9wdGlvbnM6IHtcbiAgICAgICAgLi4ub3B0aW9ucy5naXRodWJPcHRpb25zLFxuICAgICAgICBtZXJnaWZ5OiBmYWxzZSxcbiAgICAgICAgZGVwZW5kZW5jeVJldmlldzogdHJ1ZSxcbiAgICAgIH0sXG4gICAgICAvLyBEZXZpYXRpb24gZnJvbSB1cHN0cmVhbSBwcm9qZW46IHVwc3RyZWFtIHByb2plbiBkZWZhdWx0cyB0byBtaW5Ob2RlVmVyc2lvbiwgYnV0IHdlIGhhdmUgdG9vIG1hbnkgd29ya2Zsb3dzXG4gICAgICAvLyB0aGF0IHVzZSB0b29scyB0aGF0IHdhbnQgYSByZWNlbnQgTm9kZSB2ZXJzaW9uLCBzbyBkZWZhdWx0IHRvIGEgcmVhc29uYWJsZSBmbG9hdGluZyB2ZXJzaW9uLlxuICAgICAgd29ya2Zsb3dOb2RlVmVyc2lvbjogb3B0aW9ucy53b3JrZmxvd05vZGVWZXJzaW9uID8/ICdsdHMvKicsXG4gICAgfSk7XG5cbiAgICBuZXcgZ2l0aHViLk1lcmdlUXVldWUodGhpcywge1xuICAgICAgYXV0b1F1ZXVlT3B0aW9uczoge1xuICAgICAgICBwcm9qZW5DcmVkZW50aWFsczogZ2l0aHViLkdpdGh1YkNyZWRlbnRpYWxzLmZyb21QZXJzb25hbEFjY2Vzc1Rva2VuKHsgc2VjcmV0OiAnUFJPSkVOX0dJVEhVQl9UT0tFTicgfSksXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG59XG4iXX0=
|
|
@@ -116,5 +116,5 @@ class WorkspaceRelease extends projen_1.Component {
|
|
|
116
116
|
}
|
|
117
117
|
exports.WorkspaceRelease = WorkspaceRelease;
|
|
118
118
|
_a = JSII_RTTI_SYMBOL_1;
|
|
119
|
-
WorkspaceRelease[_a] = { fqn: "cdklabs-projen-project-types.yarn.WorkspaceRelease", version: "0.
|
|
119
|
+
WorkspaceRelease[_a] = { fqn: "cdklabs-projen-project-types.yarn.WorkspaceRelease", version: "0.4.0" };
|
|
120
120
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXNjcmlwdC13b3Jrc3BhY2UtcmVsZWFzZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy95YXJuL3R5cGVzY3JpcHQtd29ya3NwYWNlLXJlbGVhc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxrQ0FBa0M7QUFDbEMsbUNBQW9HO0FBQ3BHLGlFQUErRTtBQXNCL0UsTUFBYSxnQkFBaUIsU0FBUSxrQkFBUztJQUs3QyxZQUFtQixPQUE0QixFQUFFLE9BQWdDO1FBQy9FLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNmLElBQUksQ0FBQyxTQUFTLEdBQUcsT0FBTyxDQUFDO1FBRXpCLCtEQUErRDtRQUMvRCxtRUFBbUU7UUFDbkUsMEVBQTBFO1FBQzFFLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDckIsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLGdCQUFPLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRTtnQkFDekMsZ0JBQWdCLEVBQUUsY0FBYyxFQUFFLDRDQUE0QztnQkFDOUUsa0JBQWtCLEVBQUUsT0FBTyxDQUFDLGtCQUFrQjtnQkFDOUMsZ0JBQWdCLEVBQUU7b0JBQ2hCLElBQUksRUFBRSxHQUFHLEVBQUUsMEZBQTBGO2lCQUN0RztnQkFDRCxpREFBaUQ7Z0JBQ2pELG9EQUFvRDtnQkFDcEQsdURBQXVEO2dCQUN2RCxTQUFTLEVBQUUsR0FBRyxPQUFPLENBQUMsSUFBSSxHQUFHO2dCQUU3QixrRUFBa0U7Z0JBQ2xFLHlFQUF5RTtnQkFDekUsaUJBQWlCLEVBQUUsT0FBTyxDQUFDLGlCQUFpQixJQUFJLDBCQUFpQixDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUM7Z0JBRWxGLGtCQUFrQixFQUFFLE9BQU8sQ0FBQyxrQkFBa0I7YUFDL0MsQ0FBQyxDQUFDO1lBRUgsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLGdCQUFPLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxTQUFTLEVB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QUFPLENBQ0wsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQztZQUNwQyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUU7Z0JBQzdCLFdBQVcsRUFBRSxzQ0FBc0M7YUFDcEQsQ0FBQyxDQUNILENBQUM7SUFDSixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ssZ0JBQWdCO1FBQ3RCLE9BQU8sQ0FDTCxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDO1lBQ3RDLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRTtnQkFDL0IsV0FBVyxFQUFFLGdEQUFnRDthQUM5RCxDQUFDLENBQ0gsQ0FBQztJQUNKLENBQUM7O0FBOUhILDRDQStIQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIHBhdGggZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCB7IENvbXBvbmVudCwgUmVsZWFzYWJsZUNvbW1pdHMsIFRhc2ssIFZlcnNpb24sIFZlcnNpb25CcmFuY2hPcHRpb25zLCByZWxlYXNlIH0gZnJvbSAncHJvamVuJztcbmltcG9ydCB7IEdhdGhlclZlcnNpb25zLCBHYXRoZXJWZXJzaW9uc09wdGlvbnMgfSBmcm9tICcuL2dhdGhlci12ZXJzaW9ucy50YXNrJztcbmltcG9ydCB7IFR5cGVTY3JpcHRXb3Jrc3BhY2UgfSBmcm9tICcuL3R5cGVzY3JpcHQtd29ya3NwYWNlJztcblxuZXhwb3J0IGludGVyZmFjZSBXb3Jrc3BhY2VSZWxlYXNlT3B0aW9ucyB7XG4gIHJlYWRvbmx5IHByaXZhdGU6IGJvb2xlYW47XG5cbiAgLyoqIEBkZWZhdWx0ICdsdHMvKicgKi9cbiAgcmVhZG9ubHkgd29ya2Zsb3dOb2RlVmVyc2lvbj86IHN0cmluZztcbiAgcmVhZG9ubHkgcHVibGlzaFRvTnBtPzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgbnBtRGlzdFRhZz86IHN0cmluZztcbiAgcmVhZG9ubHkgcmVsZWFzYWJsZUNvbW1pdHM/OiBSZWxlYXNhYmxlQ29tbWl0cztcbiAgcmVhZG9ubHkgbmV4dFZlcnNpb25Db21tYW5kPzogc3RyaW5nO1xuICByZWFkb25seSBucG1UcnVzdGVkUHVibGlzaGluZz86IGJvb2xlYW47XG4gIHJlYWRvbmx5IGVudmlyb25tZW50Pzogc3RyaW5nO1xuICByZWFkb25seSB2ZXJzaW9uQnJhbmNoT3B0aW9uczogVmVyc2lvbkJyYW5jaE9wdGlvbnM7XG5cbiAgLyoqXG4gICAqIEZvciBydW50aW1lIGFuZCBwZWVyIGRlcGVuZGVuY2llcywgdGhlIHR5cGUgb2YgZGVwZW5kZW5jeSB3ZSB0YWtlIG9uIGVhY2ggcGFja2FnZVxuICAgKi9cbiAgcmVhZG9ubHkgcmVwb1J1bnRpbWVEZXBlbmRlbmNpZXM/OiBHYXRoZXJWZXJzaW9uc09wdGlvbnNbJ3JlcG9SdW50aW1lRGVwZW5kZW5jaWVzJ107XG59XG5cbmV4cG9ydCBjbGFzcyBXb3Jrc3BhY2VSZWxlYXNlIGV4dGVuZHMgQ29tcG9uZW50IHtcbiAgcHVibGljIHJlYWRvbmx5IHB1Ymxpc2hlcj86IHJlbGVhc2UuUHVibGlzaGVyO1xuICBwdWJsaWMgcmVhZG9ubHkgdmVyc2lvbj86IFZlcnNpb247XG4gIHB1YmxpYyByZWFkb25seSB3b3Jrc3BhY2U6IFR5cGVTY3JpcHRXb3Jrc3BhY2U7XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKHByb2plY3Q6IFR5cGVTY3JpcHRXb3Jrc3BhY2UsIG9wdGlvbnM6IFdvcmtzcGFjZVJlbGVhc2VPcHRpb25zKSB7XG4gICAgc3VwZXIocHJvamVjdCk7XG4gICAgdGhpcy53b3Jrc3BhY2UgPSBwcm9qZWN0O1xuXG4gICAgLy8gVGhlIHJvb3QgcGFja2FnZSBpcyByZWxlYXNlLWF3YXJlLiBFaXRoZXIgd2UgY3JlYXRlIGEgcHJvcGVyXG4gICAgLy8gJ3lhcm4gcmVsZWFzZScgdGFzayBoZXJlLCBvciB3ZSBjcmVhdGUgYSBmYWtlIG9uZSB0aGF0IGp1c3QgZG9lc1xuICAgIC8vIGEgJ2J1aWxkJyAod2lsbCBiZSBydW4gaW4gZGVwZW5kZW5jeSBvcmRlciBieSB0aGUgcGFyZW50IHJlbGVhc2UgdGFzaykuXG4gICAgaWYgKCFvcHRpb25zLnByaXZhdGUpIHtcbiAgICAgIHRoaXMudmVyc2lvbiA9IG5ldyBWZXJzaW9uKHRoaXMud29ya3NwYWNlLCB7XG4gICAgICAgIHZlcnNpb25JbnB1dEZpbGU6ICdwYWNrYWdlLmpzb24nLCAvLyB0aGlzIGlzIHdoZXJlIFwidmVyc2lvblwiIGlzIHNldCBhZnRlciBidW1wXG4gICAgICAgIGFydGlmYWN0c0RpcmVjdG9yeTogcHJvamVjdC5hcnRpZmFjdHNEaXJlY3RvcnksXG4gICAgICAgIHZlcnNpb25yY09wdGlvbnM6IHtcbiAgICAgICAgICBwYXRoOiAnLicsIC8vIEluIGEgbW9ub3JlcG8sIHdlIHdhbnQgc3RhbmRhcmQtdmVyc2lvbiB0byBvbmx5IGNvbnNpZGVyIHRoZSBkaXJlY3Rvcnkgb2YgdGhlIHdvcmtzcGFjZVxuICAgICAgICB9LFxuICAgICAgICAvLyBUaGlzIG1peGVzIHRoZSBwYWNrYWdlIG5hbWUgaW50byB0aGUgdGFnIG5hbWUsXG4gICAgICAgIC8vIHNvIHRoYXQgd2UgY2FuIGdpdmUgcGFja2FnZXMgaW5kaXZpZHVhbCB2ZXJzaW9ucy5cbiAgICAgICAgLy8gVGFncyBlbmQgdXAgbG9va2luZyBsaWtlIHRoaXM6IEBzY29wZS9wYWNrYWdlQHYxLjIuM1xuICAgICAgICB0YWdQcmVmaXg6IGAke3Byb2plY3QubmFtZX1AYCxcblxuICAgICAgICAvLyBJbiBhIG1vbm9yZXBvLCBvbmx5IGNvbnNpZGVyIGNoYW5nZXMgcmVsZXZhbnQgdG8gdGhlIHN1YnByb2plY3RcbiAgICAgICAgLy8gUGF0aCBpcyByZWxhdGl2ZSB0byB0aGUgc3VicHJvamVjdCBvdXRkaXIsIHNvICcuJyBpcyB3aGF0IHdlIHdhbnQgaGVyZVxuICAgICAgICByZWxlYXNhYmxlQ29tbWl0czogb3B0aW9ucy5yZWxlYXNhYmxlQ29tbWl0cyA/PyBSZWxlYXNhYmxlQ29tbWl0cy5ldmVyeUNvbW1pdCgnLicpLFxuXG4gICAgICAgIG5leHRWZXJzaW9uQ29tbWFuZDogb3B0aW9ucy5uZXh0VmVyc2lvbkNvbW1hbmQsXG4gICAgICB9KTtcblxuICAgICAgdGhpcy5wdWJsaXNoZXIgPSBuZXcgcmVsZWFzZS5QdWJsaXNoZXIodGhpcy53b3Jrc3BhY2UsIHtcbiAgICAgICAgYXJ0aWZhY3ROYW1lOiBwcm9qZWN0LmFydGlmYWN0c0RpcmVjdG9yeSxcbiAgICAgICAgY29uZGl0aW9uOiAnbmVlZHMucmVsZWFzZS5vdXRwdXRzLmxhdGVzdF9jb21taXQgPT0gZ2l0aHViLnNoYScsXG4gICAgICAgIGJ1aWxkSm9iSWQ6ICdyZWxlYXNlJyxcbiAgICAgICAgd29ya2Zsb3dOb2RlVmVyc2lvbjogb3B0aW9ucy53b3JrZmxvd05vZGVWZXJzaW9uID8/ICdsdHMvKicsXG4gICAgICB9KTtcblxuICAgICAgdGhpcy5wdWJsaXNoZXIucHVibGlzaFRvR2l0SHViUmVsZWFzZXMoe1xuICAgICAgICBjaGFuZ2Vsb2dGaWxlOiBwYXRoLnBvc2l4LmpvaW4ocHJvamVjdC5hcnRpZmFjdHNEaXJlY3RvcnksIHRoaXMudmVyc2lvbi5jaGFuZ2Vsb2dGaWxlTmFtZSksXG4gICAgICAgIHZlcnNpb25GaWxlOiBwYXRoLnBvc2l4LmpvaW4ocHJvamVjdC5hcnRpZmFjdHNEaXJlY3RvcnksIHRoaXMudmVyc2lvbi52ZXJzaW9uRmlsZU5hbWUpLFxuICAgICAgICByZWxlYXNlVGFnRmlsZTogcGF0aC5wb3NpeC5qb2luKHByb2plY3QuYXJ0aWZhY3RzRGlyZWN0b3J5LCB0aGlzLnZlcnNpb24ucmVsZWFzZVRhZ0ZpbGVOYW1lKSxcbiAgICAgIH0pO1xuXG4gICAgICAvLyBHaXRIdWIgUmVsZWFzZXMgY29tZXMgZm9yIGZyZWUgd2l0aCBhIGBSZWxlYXNlYCBjb21wb25lbnQsIE5QTSBtdXN0IGJlIGFkZGVkIGV4cGxpY2l0bHlcbiAgICAgIGlmIChvcHRpb25zLnB1Ymxpc2hUb05wbSA/PyB0cnVlKSB7XG4gICAgICAgIHRoaXMucHVibGlzaGVyLnB1Ymxpc2hUb05wbSh7XG4gICAgICAgICAgcmVnaXN0cnk6IHByb2plY3QucGFja2FnZS5ucG1SZWdpc3RyeSxcbiAgICAgICAgICBucG1Ub2tlblNlY3JldDogb3B0aW9ucy5ucG1UcnVzdGVkUHVibGlzaGluZyA/IHVuZGVmaW5lZCA6IHByb2plY3QucGFja2FnZS5ucG1Ub2tlblNlY3JldCxcbiAgICAgICAgICBucG1Qcm92ZW5hbmNlOiBwcm9qZWN0LnBhY2thZ2UubnBtUHJvdmVuYW5jZSxcbiAgICAgICAgICB0cnVzdGVkUHVibGlzaGluZzogb3B0aW9ucy5ucG1UcnVzdGVkUHVibGlzaGluZyxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gVGhpcyB0YXNrcyBzZXRzIGFsbCBsb2NhbCBkZXBlbmRlbmNpZXMgdG8gdGhlaXIgY3VycmVudCB2ZXJzaW9uXG4gICAgLy8gSW4gdGhlIG1vbm9yZXBvIHdlIGNhbGwgdGhpcyB0YXNrIGluIHRvcG9sb2dpY2FsIG9yZGVyLlxuICAgIC8vIFRoZXJlZm9yIGl0IGlzIGd1YXJhbnRlZWQgdGhhdCBhbnkgbG9jYWwgcGFja2FnZXMgYSBwYWNrYWdlIGRlcGVuZHMgb24sXG4gICAgLy8gYWxyZWFkeSBoYXZlIGJlZW4gYnVtcGVkLlxuICAgIGNvbnN0IGdhdGhlclZlcnNpb25zID0gcHJvamVjdC5hZGRUYXNrKCdnYXRoZXItdmVyc2lvbnMnLCB7XG4gICAgICBzdGVwczogW25ldyBHYXRoZXJWZXJzaW9ucyhwcm9qZWN0LCB7XG4gICAgICAgIHJlcG9SdW50aW1lRGVwZW5kZW5jaWVzOiBvcHRpb25zLnJlcG9SdW50aW1lRGVwZW5kZW5jaWVzID8/IHt9LFxuICAgICAgfSldLFxuICAgIH0pO1xuXG4gICAgY29uc3QgYnVtcFRhc2sgPSB0aGlzLm9idGFpbkJ1bXBUYXNrKCk7XG4gICAgYnVtcFRhc2sucHJlcGVuZFNwYXduKGdhdGhlclZlcnNpb25zKTtcbiAgICAvLyBUaGUgYnVtcFRhc2sgbmVlZHMgdG8gYmUgZXhlY3V0ZWQgd2l0aCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgdGhhdCBjb250cm9sXG4gICAgLy8gdmVyc2lvbiBpbmZvcm1hdGlvbi4gVGhlc2UgYXJlIG5vdCBwYXJ0IG9mIHRoZSB1cHN0cmVhbSB0YXNrIGl0c2VsZiB5ZXQsXG4gICAgLy8gc2luY2UgdGhleSBhcmUgcGFydCBvZiB0aGUgaW52b2NhdGlvbiB0aGVyZS4gV2UgYWxzbyBuZWVkIHRvIG1ha2UgdGhlbSBwYXJ0XG4gICAgLy8gb2YgdGhlIGludm9jYXRpb24gaGVyZS5cbiAgICBpZiAodGhpcy52ZXJzaW9uKSB7XG4gICAgICBpZiAob3B0aW9ucy52ZXJzaW9uQnJhbmNoT3B0aW9ucz8udGFnUHJlZml4KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignRG8gbm90IHNldCB2ZXJzaW9uQnJhbmNoT3B0aW9ucy50YWdQcmVmaXg7IGl0IGlzIGNvbmZpZ3VyZWQgYW5vdGhlciB3YXknKTtcbiAgICAgIH1cbiAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMudmVyc2lvbi5lbnZGb3JCcmFuY2goe1xuICAgICAgICAuLi5vcHRpb25zLnZlcnNpb25CcmFuY2hPcHRpb25zLFxuICAgICAgfSkpKSB7XG4gICAgICAgIGJ1bXBUYXNrLmVudihrZXksIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG5cblxuICAgIC8vIEFmdGVyIHdlIGhhdmUgdW5idW1wZWQgcGFja2FnZSB2ZXJzaW9ucyBiYWNrIHRvIF4wLjAuMCxcbiAgICAvLyB3ZSBjYW4gcnVuIHRoZSBnYXRoZXItdmVyc2lvbnMgdGFzayBhZ2FpbiB3aGljaCB3aWxsIG5vdyByZXBsYWNlIHRoZSB0by1iZS1yZWxlYXNlIHZlcnNpb25zIHdpdGggXjAuMC4wXG4gICAgLy9cbiAgICAvLyBXZSBuZWVkIHRvIHNldCBhbiBlbnZpcm9ubWVudCB2YXJpYWJsZSB0byBnZXQgYGdhdGhlclZlcnNpb25zYCB0byBiZWhhdmUgZGlmZmVyZW50bHkgaW4gdGhlIHVuYnVtcFxuICAgIC8vIGludm9jYXRpb24gKGluIHRoZSBidW1wIGludm9jYXRpb24sIGl0IG1heSBjaGFuZ2UgdGhlIHBhY2thZ2UuanNvbiBkZXBlbmRlbmN5IHJhbmdlIGZyb20gYF4wLjAuMGAgdG8gYDEuMi4zYDtcbiAgICAvLyB1c2luZyBhIGRpZmZlcmVudCByYW5nZSBzeW1ib2wpLCBidXQgd2hlbiB1bmJ1bXBpbmcgaXQgbXVzdCBhbHdheXMgcmVzZXQgYmFjayB0byB0aGUgYF4wLjAuMGAgdmVyc2lvbi5cbiAgICB0aGlzLm9idGFpblVuYnVtcFRhc2soKS5zcGF3bihnYXRoZXJWZXJzaW9ucywge1xuICAgICAgZW52OiB7XG4gICAgICAgIFJFU0VUX1ZFUlNJT05TOiAndHJ1ZScsXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgYnVtcCB2ZXJzaW9uIHRhc2tcbiAgICpcbiAgICogSWYgdGhpcyBpcyBhIHByaXZhdGUgcGFja2FnZSwgaXQgd29uJ3QgaGF2ZSBhIGJ1bXAgdGFzayB5ZXQuXG4gICAqIFNvIGluc3RlYWQgd2UgY3JlYXRlIGFuIGVtcHR5IG9uZSB0aGF0IGNhbiBiZSBjYWxsZWQgZnJvbSB0aGUgbW9ub3JlcG8gcm9vdFxuICAgKiBhbmQgc2VydmUgYXMgYSBjb250YWluZXIgZm9yIG90aGVyIHN0ZXBzIHRoYXQgbmVlZCB0byBvY2N1ciBhcyBwYXJ0IG9mIHRoZSByZWxlYXNlXG4gICAqL1xuICBwcml2YXRlIG9idGFpbkJ1bXBUYXNrKCk6IFRhc2sge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLndvcmtzcGFjZS50YXNrcy50cnlGaW5kKCdidW1wJykgPz9cbiAgICAgIHRoaXMud29ya3NwYWNlLmFkZFRhc2soJ2J1bXAnLCB7XG4gICAgICAgIGRlc2NyaXB0aW9uOiAnQnVtcHMgdmVyc2lvbnMgb2YgbG9jYWwgZGVwZW5kZW5jaWVzJyxcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIHVuYnVtcCB2ZXJzaW9uIHRhc2tcbiAgICouXG4gICAqIElmIHRoaXMgaXMgYSBwcml2YXRlIHBhY2thZ2UsIGl0IHdvbid0IGhhdmUgYSBidW1wIHRhc2sgeWV0XG4gICAqIFNvIGluc3RlYWQgd2UgY3JlYXRlIGFuIGVtcHR5IG9uZSB0aGF0IGNhbiBiZSBjYWxsZWQgZnJvbSB0aGUgbW9ub3JlcG8gcm9vdFxuICAgKiBhbmQgc2VydmUgYXMgYSBjb250YWluZXIgZm9yIG90aGVyIHN0ZXBzIHRoYXQgbmVlZCB0byBvY2N1ciBhcyBwYXJ0IG9mIHRoZSByZWxlYXNlXG4gICAqL1xuICBwcml2YXRlIG9idGFpblVuYnVtcFRhc2soKTogVGFzayB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMud29ya3NwYWNlLnRhc2tzLnRyeUZpbmQoJ3VuYnVtcCcpID8/XG4gICAgICB0aGlzLndvcmtzcGFjZS5hZGRUYXNrKCd1bmJ1bXAnLCB7XG4gICAgICAgIGRlc2NyaXB0aW9uOiAnUmVzZXRzIHZlcnNpb25zIG9mIGxvY2FsIGRlcGVuZGVuY2llcyB0byAwLjAuMCcsXG4gICAgICB9KVxuICAgICk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -243,7 +243,7 @@ class TypeScriptWorkspace extends projen_1.typescript.TypeScriptProject {
|
|
|
243
243
|
}
|
|
244
244
|
exports.TypeScriptWorkspace = TypeScriptWorkspace;
|
|
245
245
|
_a = JSII_RTTI_SYMBOL_1;
|
|
246
|
-
TypeScriptWorkspace[_a] = { fqn: "cdklabs-projen-project-types.yarn.TypeScriptWorkspace", version: "0.
|
|
246
|
+
TypeScriptWorkspace[_a] = { fqn: "cdklabs-projen-project-types.yarn.TypeScriptWorkspace", version: "0.4.0" };
|
|
247
247
|
function packageNames(xs) {
|
|
248
248
|
if (!xs) {
|
|
249
249
|
return undefined;
|
|
@@ -94,8 +94,10 @@ class Composer {
|
|
|
94
94
|
}
|
|
95
95
|
}
|
|
96
96
|
if (afterDoc) {
|
|
97
|
-
|
|
98
|
-
|
|
97
|
+
for (let i = 0; i < this.errors.length; ++i)
|
|
98
|
+
doc.errors.push(this.errors[i]);
|
|
99
|
+
for (let i = 0; i < this.warnings.length; ++i)
|
|
100
|
+
doc.warnings.push(this.warnings[i]);
|
|
99
101
|
}
|
|
100
102
|
else {
|
|
101
103
|
doc.errors = this.errors;
|
|
@@ -310,7 +310,7 @@ class Lexer {
|
|
|
310
310
|
const n = (yield* this.pushCount(1)) + (yield* this.pushSpaces(true));
|
|
311
311
|
this.indentNext = this.indentValue + 1;
|
|
312
312
|
this.indentValue += n;
|
|
313
|
-
return
|
|
313
|
+
return 'block-start';
|
|
314
314
|
}
|
|
315
315
|
return 'doc';
|
|
316
316
|
}
|
|
@@ -631,32 +631,36 @@ class Lexer {
|
|
|
631
631
|
return 0;
|
|
632
632
|
}
|
|
633
633
|
*pushIndicators() {
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
|
|
634
|
+
let n = 0;
|
|
635
|
+
loop: while (true) {
|
|
636
|
+
switch (this.charAt(0)) {
|
|
637
|
+
case '!':
|
|
638
|
+
n += yield* this.pushTag();
|
|
639
|
+
n += yield* this.pushSpaces(true);
|
|
640
|
+
continue loop;
|
|
641
|
+
case '&':
|
|
642
|
+
n += yield* this.pushUntil(isNotAnchorChar);
|
|
643
|
+
n += yield* this.pushSpaces(true);
|
|
644
|
+
continue loop;
|
|
645
|
+
case '-': // this is an error
|
|
646
|
+
case '?': // this is an error outside flow collections
|
|
647
|
+
case ':': {
|
|
648
|
+
const inFlow = this.flowLevel > 0;
|
|
649
|
+
const ch1 = this.charAt(1);
|
|
650
|
+
if (isEmpty(ch1) || (inFlow && flowIndicatorChars.has(ch1))) {
|
|
651
|
+
if (!inFlow)
|
|
652
|
+
this.indentNext = this.indentValue + 1;
|
|
653
|
+
else if (this.flowKey)
|
|
654
|
+
this.flowKey = false;
|
|
655
|
+
n += yield* this.pushCount(1);
|
|
656
|
+
n += yield* this.pushSpaces(true);
|
|
657
|
+
continue loop;
|
|
658
|
+
}
|
|
656
659
|
}
|
|
657
660
|
}
|
|
661
|
+
break loop;
|
|
658
662
|
}
|
|
659
|
-
return
|
|
663
|
+
return n;
|
|
660
664
|
}
|
|
661
665
|
*pushTag() {
|
|
662
666
|
if (this.charAt(1) === '<') {
|
|
@@ -67,6 +67,14 @@ function getFirstKeyStartProps(prev) {
|
|
|
67
67
|
}
|
|
68
68
|
return prev.splice(i, prev.length);
|
|
69
69
|
}
|
|
70
|
+
function arrayPushArray(target, source) {
|
|
71
|
+
// May exhaust call stack with large `source` array
|
|
72
|
+
if (source.length < 1e5)
|
|
73
|
+
Array.prototype.push.apply(target, source);
|
|
74
|
+
else
|
|
75
|
+
for (let i = 0; i < source.length; ++i)
|
|
76
|
+
target.push(source[i]);
|
|
77
|
+
}
|
|
70
78
|
function fixFlowSeqItems(fc) {
|
|
71
79
|
if (fc.start.type === 'flow-seq-start') {
|
|
72
80
|
for (const it of fc.items) {
|
|
@@ -79,12 +87,12 @@ function fixFlowSeqItems(fc) {
|
|
|
79
87
|
delete it.key;
|
|
80
88
|
if (isFlowToken(it.value)) {
|
|
81
89
|
if (it.value.end)
|
|
82
|
-
|
|
90
|
+
arrayPushArray(it.value.end, it.sep);
|
|
83
91
|
else
|
|
84
92
|
it.value.end = it.sep;
|
|
85
93
|
}
|
|
86
94
|
else
|
|
87
|
-
|
|
95
|
+
arrayPushArray(it.start, it.sep);
|
|
88
96
|
delete it.sep;
|
|
89
97
|
}
|
|
90
98
|
}
|
|
@@ -502,7 +510,7 @@ class Parser {
|
|
|
502
510
|
const prev = map.items[map.items.length - 2];
|
|
503
511
|
const end = prev?.value?.end;
|
|
504
512
|
if (Array.isArray(end)) {
|
|
505
|
-
|
|
513
|
+
arrayPushArray(end, it.start);
|
|
506
514
|
end.push(this.sourceToken);
|
|
507
515
|
map.items.pop();
|
|
508
516
|
return;
|
|
@@ -717,7 +725,7 @@ class Parser {
|
|
|
717
725
|
const prev = seq.items[seq.items.length - 2];
|
|
718
726
|
const end = prev?.value?.end;
|
|
719
727
|
if (Array.isArray(end)) {
|
|
720
|
-
|
|
728
|
+
arrayPushArray(end, it.start);
|
|
721
729
|
end.push(this.sourceToken);
|
|
722
730
|
seq.items.pop();
|
|
723
731
|
return;
|
|
@@ -97,8 +97,10 @@ class Composer {
|
|
|
97
97
|
}
|
|
98
98
|
}
|
|
99
99
|
if (afterDoc) {
|
|
100
|
-
|
|
101
|
-
|
|
100
|
+
for (let i = 0; i < this.errors.length; ++i)
|
|
101
|
+
doc.errors.push(this.errors[i]);
|
|
102
|
+
for (let i = 0; i < this.warnings.length; ++i)
|
|
103
|
+
doc.warnings.push(this.warnings[i]);
|
|
102
104
|
}
|
|
103
105
|
else {
|
|
104
106
|
doc.errors = this.errors;
|
|
@@ -312,7 +312,7 @@ class Lexer {
|
|
|
312
312
|
const n = (yield* this.pushCount(1)) + (yield* this.pushSpaces(true));
|
|
313
313
|
this.indentNext = this.indentValue + 1;
|
|
314
314
|
this.indentValue += n;
|
|
315
|
-
return
|
|
315
|
+
return 'block-start';
|
|
316
316
|
}
|
|
317
317
|
return 'doc';
|
|
318
318
|
}
|
|
@@ -633,32 +633,36 @@ class Lexer {
|
|
|
633
633
|
return 0;
|
|
634
634
|
}
|
|
635
635
|
*pushIndicators() {
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
|
|
636
|
+
let n = 0;
|
|
637
|
+
loop: while (true) {
|
|
638
|
+
switch (this.charAt(0)) {
|
|
639
|
+
case '!':
|
|
640
|
+
n += yield* this.pushTag();
|
|
641
|
+
n += yield* this.pushSpaces(true);
|
|
642
|
+
continue loop;
|
|
643
|
+
case '&':
|
|
644
|
+
n += yield* this.pushUntil(isNotAnchorChar);
|
|
645
|
+
n += yield* this.pushSpaces(true);
|
|
646
|
+
continue loop;
|
|
647
|
+
case '-': // this is an error
|
|
648
|
+
case '?': // this is an error outside flow collections
|
|
649
|
+
case ':': {
|
|
650
|
+
const inFlow = this.flowLevel > 0;
|
|
651
|
+
const ch1 = this.charAt(1);
|
|
652
|
+
if (isEmpty(ch1) || (inFlow && flowIndicatorChars.has(ch1))) {
|
|
653
|
+
if (!inFlow)
|
|
654
|
+
this.indentNext = this.indentValue + 1;
|
|
655
|
+
else if (this.flowKey)
|
|
656
|
+
this.flowKey = false;
|
|
657
|
+
n += yield* this.pushCount(1);
|
|
658
|
+
n += yield* this.pushSpaces(true);
|
|
659
|
+
continue loop;
|
|
660
|
+
}
|
|
658
661
|
}
|
|
659
662
|
}
|
|
663
|
+
break loop;
|
|
660
664
|
}
|
|
661
|
-
return
|
|
665
|
+
return n;
|
|
662
666
|
}
|
|
663
667
|
*pushTag() {
|
|
664
668
|
if (this.charAt(1) === '<') {
|
|
@@ -70,6 +70,14 @@ function getFirstKeyStartProps(prev) {
|
|
|
70
70
|
}
|
|
71
71
|
return prev.splice(i, prev.length);
|
|
72
72
|
}
|
|
73
|
+
function arrayPushArray(target, source) {
|
|
74
|
+
// May exhaust call stack with large `source` array
|
|
75
|
+
if (source.length < 1e5)
|
|
76
|
+
Array.prototype.push.apply(target, source);
|
|
77
|
+
else
|
|
78
|
+
for (let i = 0; i < source.length; ++i)
|
|
79
|
+
target.push(source[i]);
|
|
80
|
+
}
|
|
73
81
|
function fixFlowSeqItems(fc) {
|
|
74
82
|
if (fc.start.type === 'flow-seq-start') {
|
|
75
83
|
for (const it of fc.items) {
|
|
@@ -82,12 +90,12 @@ function fixFlowSeqItems(fc) {
|
|
|
82
90
|
delete it.key;
|
|
83
91
|
if (isFlowToken(it.value)) {
|
|
84
92
|
if (it.value.end)
|
|
85
|
-
|
|
93
|
+
arrayPushArray(it.value.end, it.sep);
|
|
86
94
|
else
|
|
87
95
|
it.value.end = it.sep;
|
|
88
96
|
}
|
|
89
97
|
else
|
|
90
|
-
|
|
98
|
+
arrayPushArray(it.start, it.sep);
|
|
91
99
|
delete it.sep;
|
|
92
100
|
}
|
|
93
101
|
}
|
|
@@ -507,7 +515,7 @@ class Parser {
|
|
|
507
515
|
const prev = map.items[map.items.length - 2];
|
|
508
516
|
const end = prev?.value?.end;
|
|
509
517
|
if (Array.isArray(end)) {
|
|
510
|
-
|
|
518
|
+
arrayPushArray(end, it.start);
|
|
511
519
|
end.push(this.sourceToken);
|
|
512
520
|
map.items.pop();
|
|
513
521
|
return;
|
|
@@ -722,7 +730,7 @@ class Parser {
|
|
|
722
730
|
const prev = seq.items[seq.items.length - 2];
|
|
723
731
|
const end = prev?.value?.end;
|
|
724
732
|
if (Array.isArray(end)) {
|
|
725
|
-
|
|
733
|
+
arrayPushArray(end, it.start);
|
|
726
734
|
end.push(this.sourceToken);
|
|
727
735
|
seq.items.pop();
|
|
728
736
|
return;
|
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.132.0",
|
|
39
39
|
"@stylistic/eslint-plugin": "^2",
|
|
40
40
|
"@types/jest": "^29",
|
|
41
41
|
"@types/node": "^18",
|
|
@@ -49,12 +49,12 @@
|
|
|
49
49
|
"jest": "^29",
|
|
50
50
|
"jest-junit": "^17",
|
|
51
51
|
"jsii": "~5.9",
|
|
52
|
-
"jsii-diff": "^1.
|
|
52
|
+
"jsii-diff": "^1.132.0",
|
|
53
53
|
"jsii-docgen": "^10.5.0",
|
|
54
|
-
"jsii-pacmak": "^1.
|
|
55
|
-
"jsii-reflect": "^1.
|
|
54
|
+
"jsii-pacmak": "^1.132.0",
|
|
55
|
+
"jsii-reflect": "^1.132.0",
|
|
56
56
|
"jsii-rosetta": "~5.9",
|
|
57
|
-
"projen": "^0.99.
|
|
57
|
+
"projen": "^0.99.67",
|
|
58
58
|
"ts-jest": "^29",
|
|
59
59
|
"ts-node": "^10.9.2",
|
|
60
60
|
"typescript": "~5.9"
|
|
@@ -64,7 +64,7 @@
|
|
|
64
64
|
"projen": ">=0.99.48 <1.0.0"
|
|
65
65
|
},
|
|
66
66
|
"dependencies": {
|
|
67
|
-
"yaml": "^2.
|
|
67
|
+
"yaml": "^2.9.0"
|
|
68
68
|
},
|
|
69
69
|
"bundledDependencies": [
|
|
70
70
|
"yaml"
|
|
@@ -81,7 +81,7 @@
|
|
|
81
81
|
"publishConfig": {
|
|
82
82
|
"access": "public"
|
|
83
83
|
},
|
|
84
|
-
"version": "0.
|
|
84
|
+
"version": "0.4.0",
|
|
85
85
|
"packageManager": "yarn@4.13.0",
|
|
86
86
|
"jest": {
|
|
87
87
|
"coverageProvider": "v8",
|