construct-hub 0.3.274 → 0.3.275
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 +2 -2
- package/changelog.md +6 -1
- package/lib/backend/ingestion/framework-detection.lambda-shared.d.ts +1 -1
- package/lib/backend/ingestion/framework-detection.lambda-shared.js +76 -57
- package/lib/backend/ingestion/ingestion.lambda.bundle/index.js +109 -111
- package/lib/backend/ingestion/ingestion.lambda.bundle/index.js.map +2 -2
- package/lib/backend/ingestion/ingestion.lambda.js +4 -4
- package/lib/construct-hub.js +1 -1
- package/lib/package-sources/code-artifact.js +1 -1
- package/lib/package-sources/npmjs.js +1 -1
- package/lib/package-tag/index.js +3 -3
- package/lib/package-tag-group/index.js +2 -2
- package/lib/preload-file/index.js +1 -1
- package/lib/s3/storage.js +1 -1
- package/lib/spdx-license.js +1 -1
- package/package.json +1 -1
- package/releasetag.txt +1 -1
- package/version.txt +1 -1
package/.jsii
CHANGED
@@ -14540,6 +14540,6 @@
|
|
14540
14540
|
"symbolId": "src/package-sources/npmjs:NpmJsProps"
|
14541
14541
|
}
|
14542
14542
|
},
|
14543
|
-
"version": "0.3.
|
14544
|
-
"fingerprint": "
|
14543
|
+
"version": "0.3.275",
|
14544
|
+
"fingerprint": "61ipjh2Rs2qxaJlMHcIQ6A5ZXmqKyIPsjTRunohsDCI="
|
14545
14545
|
}
|
package/changelog.md
CHANGED
@@ -1,2 +1,7 @@
|
|
1
1
|
|
2
|
-
### [0.3.
|
2
|
+
### [0.3.275](https://github.com/cdklabs/construct-hub/compare/v0.3.274...v0.3.275) (2022-03-15)
|
3
|
+
|
4
|
+
|
5
|
+
### Features
|
6
|
+
|
7
|
+
* tag packages with multiple construct frameworks ([#794](https://github.com/cdklabs/construct-hub/issues/794)) ([78ea2dd](https://github.com/cdklabs/construct-hub/commit/78ea2dd76aef0556fea83b07c85d50039d199301)), closes [#717](https://github.com/cdklabs/construct-hub/issues/717)
|
@@ -23,4 +23,4 @@ export interface ConstructFramework {
|
|
23
23
|
*
|
24
24
|
* @returns a construct framework if one could be identified.
|
25
25
|
*/
|
26
|
-
export declare function
|
26
|
+
export declare function detectConstructFrameworks(assembly: Assembly): ConstructFramework[];
|
@@ -1,7 +1,20 @@
|
|
1
1
|
"use strict";
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
-
exports.
|
3
|
+
exports.detectConstructFrameworks = void 0;
|
4
|
+
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
5
|
+
const assert = require("assert");
|
4
6
|
const semver_1 = require("semver");
|
7
|
+
/**
|
8
|
+
* Predicates that determine whether a package is indicative of the CDK
|
9
|
+
* framework someone is using.
|
10
|
+
*/
|
11
|
+
const FRAMEWORK_MATCHERS = {
|
12
|
+
["aws-cdk" /* AWS_CDK */]: (name) => name.startsWith('@aws-cdk/') || name === 'aws-cdk-lib' || name === 'monocdk',
|
13
|
+
["cdk8s" /* CDK8S */]: (name) => name === 'cdk8s' || /^cdk8s-plus(?:-(?:17|20|21|22))?$/.test(name),
|
14
|
+
// cdktf providers dependencies ("@cdktf/provider-xxx") are major versioned
|
15
|
+
// differently than the core library, so do not take them into account
|
16
|
+
["cdktf" /* CDKTF */]: (name) => name === 'cdktf',
|
17
|
+
};
|
5
18
|
/**
|
6
19
|
* Determines the Construct framework used by the provided assembly.
|
7
20
|
*
|
@@ -10,69 +23,75 @@ const semver_1 = require("semver");
|
|
10
23
|
*
|
11
24
|
* @returns a construct framework if one could be identified.
|
12
25
|
*/
|
13
|
-
function
|
14
|
-
var _a
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
// also take other CDK types as dependencies
|
21
|
-
if (assembly.name.startsWith('@cdktf/')) {
|
22
|
-
name = "cdktf" /* CDKTF */;
|
23
|
-
if ('cdktf' in ((_a = assembly.dependencyClosure) !== null && _a !== void 0 ? _a : {})) {
|
24
|
-
detectConstructFrameworkPackage('cdktf');
|
25
|
-
}
|
26
|
-
return { name, majorVersion };
|
27
|
-
}
|
26
|
+
function detectConstructFrameworks(assembly) {
|
27
|
+
var _a;
|
28
|
+
// "not-sure" means we haven't seen a major version for the framework yet,
|
29
|
+
// e.g. in the case of a transitive dependency where the info isn't provided
|
30
|
+
// "ambiguous" means we have seen multiple major versions so it's impossible
|
31
|
+
// to resolve a single number
|
32
|
+
const detectedFrameworks = {};
|
28
33
|
detectConstructFrameworkPackage(assembly.name, assembly.version);
|
29
|
-
for (const depName of Object.keys((
|
34
|
+
for (const depName of Object.keys((_a = assembly.dependencyClosure) !== null && _a !== void 0 ? _a : {})) {
|
30
35
|
detectConstructFrameworkPackage(depName);
|
31
|
-
if (nameAmbiguous) {
|
32
|
-
return undefined;
|
33
|
-
}
|
34
36
|
}
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
if (
|
39
|
-
|
40
|
-
if (name && name !== "aws-cdk" /* AWS_CDK */) {
|
41
|
-
// Identified multiple candidates, so returning ambiguous...
|
42
|
-
nameAmbiguous = true;
|
43
|
-
return;
|
44
|
-
}
|
45
|
-
name = "aws-cdk" /* AWS_CDK */;
|
46
|
-
}
|
47
|
-
else if (packageName === 'cdktf') {
|
48
|
-
if (name && name !== "cdktf" /* CDKTF */) {
|
49
|
-
// Identified multiple candidates, so returning ambiguous...
|
50
|
-
nameAmbiguous = true;
|
51
|
-
return;
|
52
|
-
}
|
53
|
-
name = "cdktf" /* CDKTF */;
|
37
|
+
const frameworks = new Array();
|
38
|
+
for (const [frameworkName, majorVersion] of Object.entries(detectedFrameworks)) {
|
39
|
+
const name = frameworkName;
|
40
|
+
if (majorVersion === undefined) {
|
41
|
+
continue;
|
54
42
|
}
|
55
|
-
else if (
|
56
|
-
|
57
|
-
// Identified multiple candidates, so returning ambiguous...
|
58
|
-
nameAmbiguous = true;
|
59
|
-
return;
|
60
|
-
}
|
61
|
-
name = "cdk8s" /* CDK8S */;
|
43
|
+
else if (majorVersion === 'ambiguous' || majorVersion === 'no-data') {
|
44
|
+
frameworks.push({ name });
|
62
45
|
}
|
63
|
-
else {
|
64
|
-
|
46
|
+
else if (typeof majorVersion === 'number') {
|
47
|
+
frameworks.push({ name, majorVersion });
|
65
48
|
}
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
49
|
+
}
|
50
|
+
return frameworks;
|
51
|
+
/**
|
52
|
+
* Analyses the package name and version range, and updates
|
53
|
+
* `detectedFrameworks` from the parent scope appropriately
|
54
|
+
*/
|
55
|
+
function detectConstructFrameworkPackage(packageName, versionRange) {
|
56
|
+
var _a, _b, _c;
|
57
|
+
if (versionRange === void 0) { versionRange = (_a = assembly.dependencies) === null || _a === void 0 ? void 0 : _a[packageName]; }
|
58
|
+
for (const frameworkName of ["aws-cdk" /* AWS_CDK */, "cdk8s" /* CDK8S */, "cdktf" /* CDKTF */]) {
|
59
|
+
const matchesFramework = FRAMEWORK_MATCHERS[frameworkName];
|
60
|
+
if (matchesFramework(packageName)) {
|
61
|
+
const frameworkVersion = detectedFrameworks[frameworkName];
|
62
|
+
if (frameworkVersion === 'ambiguous') {
|
63
|
+
// We have already seen multiple major versions and have determined
|
64
|
+
// the major version is ambiguous, so this package won't give
|
65
|
+
// us any new information.
|
66
|
+
return;
|
67
|
+
}
|
68
|
+
const packageMajor = (_c = (versionRange ? (_b = semver_1.minVersion(versionRange)) === null || _b === void 0 ? void 0 : _b.major : undefined)) !== null && _c !== void 0 ? _c : 'no-data';
|
69
|
+
if (frameworkVersion === undefined) {
|
70
|
+
// It's the first time seeing this major version, so we record
|
71
|
+
// whatever new information we found ("no-data" or number).
|
72
|
+
detectedFrameworks[frameworkName] = packageMajor;
|
73
|
+
return;
|
74
|
+
}
|
75
|
+
else if (frameworkVersion === 'no-data') {
|
76
|
+
// We've seen this framework before but haven't seen a major version,
|
77
|
+
// so record whatever new information we found ("no-data" or number).
|
78
|
+
detectedFrameworks[frameworkName] = packageMajor;
|
79
|
+
return;
|
80
|
+
}
|
81
|
+
else {
|
82
|
+
// At this point, frameworkVersion can only be a MV number
|
83
|
+
assert(typeof frameworkVersion === 'number');
|
84
|
+
// We've seen evidence of a particular major version for this
|
85
|
+
// framework, so only update if this package conflicts with what
|
86
|
+
// we're expecting.
|
87
|
+
if (packageMajor !== 'no-data' && frameworkVersion !== packageMajor) {
|
88
|
+
detectedFrameworks[frameworkName] = 'ambiguous';
|
89
|
+
}
|
90
|
+
return;
|
91
|
+
}
|
71
92
|
}
|
72
|
-
majorVersion = major;
|
73
93
|
}
|
74
|
-
return;
|
75
94
|
}
|
76
95
|
}
|
77
|
-
exports.
|
78
|
-
//# sourceMappingURL=data:application/json;base64,
|
96
|
+
exports.detectConstructFrameworks = detectConstructFrameworks;
|
97
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnJhbWV3b3JrLWRldGVjdGlvbi5sYW1iZGEtc2hhcmVkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2JhY2tlbmQvaW5nZXN0aW9uL2ZyYW1ld29yay1kZXRlY3Rpb24ubGFtYmRhLXNoYXJlZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxpRUFBaUU7QUFDakUsaUNBQWtDO0FBR2xDLG1DQUFvQztBQXNCcEM7OztHQUdHO0FBQ0gsTUFBTSxrQkFBa0IsR0FBOEQ7SUFDcEYseUJBQWdDLEVBQUUsQ0FBQyxJQUFZLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLElBQUksSUFBSSxLQUFLLGFBQWEsSUFBSSxJQUFJLEtBQUssU0FBUztJQUNoSSxxQkFBOEIsRUFBRSxDQUFDLElBQVksRUFBRSxFQUFFLENBQUMsSUFBSSxLQUFLLE9BQU8sSUFBSSxtQ0FBbUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO0lBQ3BILDJFQUEyRTtJQUMzRSxzRUFBc0U7SUFDdEUscUJBQThCLEVBQUUsQ0FBQyxJQUFZLEVBQUUsRUFBRSxDQUFDLElBQUksS0FBSyxPQUFPO0NBQ25FLENBQUM7QUFFRjs7Ozs7OztHQU9HO0FBQ0gsU0FBZ0IseUJBQXlCLENBQUMsUUFBa0I7O0lBQzFELDBFQUEwRTtJQUMxRSw0RUFBNEU7SUFDNUUsNEVBQTRFO0lBQzVFLDZCQUE2QjtJQUM3QixNQUFNLGtCQUFrQixHQUF5RSxFQUFFLENBQUM7SUFFcEcsK0JBQStCLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDakUsS0FBSyxNQUFNLE9BQU8sSUFBSSxNQUFNLENBQUMsSUFBSSxPQUFDLFFBQVEsQ0FBQyxpQkFBaUIsbUNBQUksRUFBRSxDQUFDLEVBQUU7UUFDbkUsK0JBQStCLENBQUMsT0FBTyxDQUFDLENBQUM7S0FDMUM7SUFFRCxNQUFNLFVBQVUsR0FBRyxJQUFJLEtBQUssRUFBc0IsQ0FBQztJQUNuRCxLQUFLLE1BQU0sQ0FBQyxhQUFhLEVBQUUsWUFBWSxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFO1FBQzlFLE1BQU0sSUFBSSxHQUFHLGFBQXVDLENBQUM7UUFDckQsSUFBSSxZQUFZLEtBQUssU0FBUyxFQUFFO1lBQzlCLFNBQVM7U0FDVjthQUFNLElBQUksWUFBWSxLQUFLLFdBQVcsSUFBSSxZQUFZLEtBQUssU0FBUyxFQUFFO1lBQ3JFLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1NBQzNCO2FBQU0sSUFBSSxPQUFPLFlBQVksS0FBSyxRQUFRLEVBQUU7WUFDM0MsVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxZQUFZLEVBQUUsQ0FBQyxDQUFDO1NBQ3pDO0tBQ0Y7SUFFRCxPQUFPLFVBQVUsQ0FBQztJQUVsQjs7O09BR0c7SUFDSCxTQUFTLCtCQUErQixDQUFDLFdBQW1CLEVBQUUsWUFBbUQ7O3FDQUFuRCxFQUFBLHFCQUFlLFFBQVEsQ0FBQyxZQUFZLDBDQUFHLFdBQVcsQ0FBQztRQUMvRyxLQUFLLE1BQU0sYUFBYSxJQUFJLG1FQUE0RixFQUFFO1lBQ3hILE1BQU0sZ0JBQWdCLEdBQUcsa0JBQWtCLENBQUMsYUFBYSxDQUFDLENBQUM7WUFDM0QsSUFBSSxnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsRUFBRTtnQkFDakMsTUFBTSxnQkFBZ0IsR0FBRyxrQkFBa0IsQ0FBQyxhQUFhLENBQUMsQ0FBQztnQkFDM0QsSUFBSSxnQkFBZ0IsS0FBSyxXQUFXLEVBQUU7b0JBQ3BDLG1FQUFtRTtvQkFDbkUsNkRBQTZEO29CQUM3RCwwQkFBMEI7b0JBQzFCLE9BQU87aUJBQ1I7Z0JBRUQsTUFBTSxZQUFZLFNBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQyxPQUFDLG1CQUFVLENBQUMsWUFBWSxDQUFDLDBDQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLG1DQUFJLFNBQVMsQ0FBQztnQkFFL0YsSUFBSSxnQkFBZ0IsS0FBSyxTQUFTLEVBQUU7b0JBQ2xDLDhEQUE4RDtvQkFDOUQsMkRBQTJEO29CQUMzRCxrQkFBa0IsQ0FBQyxhQUFhLENBQUMsR0FBRyxZQUFZLENBQUM7b0JBQ2pELE9BQU87aUJBQ1I7cUJBQU0sSUFBSSxnQkFBZ0IsS0FBSyxTQUFTLEVBQUU7b0JBQ3pDLHFFQUFxRTtvQkFDckUscUVBQXFFO29CQUNyRSxrQkFBa0IsQ0FBQyxhQUFhLENBQUMsR0FBRyxZQUFZLENBQUM7b0JBQ2pELE9BQU87aUJBQ1I7cUJBQU07b0JBQ0wsMERBQTBEO29CQUMxRCxNQUFNLENBQUMsT0FBTyxnQkFBZ0IsS0FBSyxRQUFRLENBQUMsQ0FBQztvQkFFN0MsNkRBQTZEO29CQUM3RCxnRUFBZ0U7b0JBQ2hFLG1CQUFtQjtvQkFDbkIsSUFBSSxZQUFZLEtBQUssU0FBUyxJQUFJLGdCQUFnQixLQUFLLFlBQVksRUFBRTt3QkFDbkUsa0JBQWtCLENBQUMsYUFBYSxDQUFDLEdBQUcsV0FBVyxDQUFDO3FCQUNqRDtvQkFDRCxPQUFPO2lCQUNSO2FBQ0Y7U0FDRjtJQUNILENBQUM7QUFDSCxDQUFDO0FBckVELDhEQXFFQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tcmVxdWlyZS1pbXBvcnRzXG5pbXBvcnQgYXNzZXJ0ID0gcmVxdWlyZSgnYXNzZXJ0Jyk7XG5cbmltcG9ydCB7IEFzc2VtYmx5IH0gZnJvbSAnQGpzaWkvc3BlYyc7XG5pbXBvcnQgeyBtaW5WZXJzaW9uIH0gZnJvbSAnc2VtdmVyJztcblxuXG5leHBvcnQgY29uc3QgZW51bSBDb25zdHJ1Y3RGcmFtZXdvcmtOYW1lIHtcbiAgQVdTX0NESyA9ICdhd3MtY2RrJyxcbiAgQ0RLOFMgPSAnY2RrOHMnLFxuICBDREtURiA9ICdjZGt0ZicsXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29uc3RydWN0RnJhbWV3b3JrIHtcbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBjb25zdHJ1Y3QgZnJhbWV3b3JrLlxuICAgKi9cbiAgcmVhZG9ubHkgbmFtZTogQ29uc3RydWN0RnJhbWV3b3JrTmFtZTtcblxuICAvKipcbiAgICogVGhlIG1ham9yIHZlcnNpb24gb2YgdGhlIGNvbnN0cnVjdCBmcmFtZXdvcmsgdGhhdCBpcyB1c2VkLCBpZiBpdCBjb3VsZCBiZVxuICAgKiBpZGVudGlmaWVkLlxuICAgKi9cbiAgcmVhZG9ubHkgbWFqb3JWZXJzaW9uPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIFByZWRpY2F0ZXMgdGhhdCBkZXRlcm1pbmUgd2hldGhlciBhIHBhY2thZ2UgaXMgaW5kaWNhdGl2ZSBvZiB0aGUgQ0RLXG4gKiBmcmFtZXdvcmsgc29tZW9uZSBpcyB1c2luZy5cbiAqL1xuY29uc3QgRlJBTUVXT1JLX01BVENIRVJTOiBSZWNvcmQ8Q29uc3RydWN0RnJhbWV3b3JrTmFtZSwgKG5hbWU6IHN0cmluZykgPT4gYm9vbGVhbj4gPSB7XG4gIFtDb25zdHJ1Y3RGcmFtZXdvcmtOYW1lLkFXU19DREtdOiAobmFtZTogc3RyaW5nKSA9PiBuYW1lLnN0YXJ0c1dpdGgoJ0Bhd3MtY2RrLycpIHx8IG5hbWUgPT09ICdhd3MtY2RrLWxpYicgfHwgbmFtZSA9PT0gJ21vbm9jZGsnLFxuICBbQ29uc3RydWN0RnJhbWV3b3JrTmFtZS5DREs4U106IChuYW1lOiBzdHJpbmcpID0+IG5hbWUgPT09ICdjZGs4cycgfHwgL15jZGs4cy1wbHVzKD86LSg/OjE3fDIwfDIxfDIyKSk/JC8udGVzdChuYW1lKSxcbiAgLy8gY2RrdGYgcHJvdmlkZXJzIGRlcGVuZGVuY2llcyAoXCJAY2RrdGYvcHJvdmlkZXIteHh4XCIpIGFyZSBtYWpvciB2ZXJzaW9uZWRcbiAgLy8gZGlmZmVyZW50bHkgdGhhbiB0aGUgY29yZSBsaWJyYXJ5LCBzbyBkbyBub3QgdGFrZSB0aGVtIGludG8gYWNjb3VudFxuICBbQ29uc3RydWN0RnJhbWV3b3JrTmFtZS5DREtURl06IChuYW1lOiBzdHJpbmcpID0+IG5hbWUgPT09ICdjZGt0ZicsXG59O1xuXG4vKipcbiAqIERldGVybWluZXMgdGhlIENvbnN0cnVjdCBmcmFtZXdvcmsgdXNlZCBieSB0aGUgcHJvdmlkZWQgYXNzZW1ibHkuXG4gKlxuICogQHBhcmFtIGFzc2VtYmx5IHRoZSBhc3NlbWJseSBmb3Igd2hpY2ggYSBjb25zdHJ1Y3QgZnJhbWV3b3JrIHNob3VsZCBiZVxuICogICAgICAgICAgICAgICAgIGlkZW50aWZpZWQuXG4gKlxuICogQHJldHVybnMgYSBjb25zdHJ1Y3QgZnJhbWV3b3JrIGlmIG9uZSBjb3VsZCBiZSBpZGVudGlmaWVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZGV0ZWN0Q29uc3RydWN0RnJhbWV3b3Jrcyhhc3NlbWJseTogQXNzZW1ibHkpOiBDb25zdHJ1Y3RGcmFtZXdvcmtbXSB7XG4gIC8vIFwibm90LXN1cmVcIiBtZWFucyB3ZSBoYXZlbid0IHNlZW4gYSBtYWpvciB2ZXJzaW9uIGZvciB0aGUgZnJhbWV3b3JrIHlldCxcbiAgLy8gZS5nLiBpbiB0aGUgY2FzZSBvZiBhIHRyYW5zaXRpdmUgZGVwZW5kZW5jeSB3aGVyZSB0aGUgaW5mbyBpc24ndCBwcm92aWRlZFxuICAvLyBcImFtYmlndW91c1wiIG1lYW5zIHdlIGhhdmUgc2VlbiBtdWx0aXBsZSBtYWpvciB2ZXJzaW9ucyBzbyBpdCdzIGltcG9zc2libGVcbiAgLy8gdG8gcmVzb2x2ZSBhIHNpbmdsZSBudW1iZXJcbiAgY29uc3QgZGV0ZWN0ZWRGcmFtZXdvcmtzOiB7IFtQIGluIENvbnN0cnVjdEZyYW1ld29ya05hbWVdPzogbnVtYmVyIHwgJ25vLWRhdGEnIHwgJ2FtYmlndW91cycgfSA9IHt9O1xuXG4gIGRldGVjdENvbnN0cnVjdEZyYW1ld29ya1BhY2thZ2UoYXNzZW1ibHkubmFtZSwgYXNzZW1ibHkudmVyc2lvbik7XG4gIGZvciAoY29uc3QgZGVwTmFtZSBvZiBPYmplY3Qua2V5cyhhc3NlbWJseS5kZXBlbmRlbmN5Q2xvc3VyZSA/PyB7fSkpIHtcbiAgICBkZXRlY3RDb25zdHJ1Y3RGcmFtZXdvcmtQYWNrYWdlKGRlcE5hbWUpO1xuICB9XG5cbiAgY29uc3QgZnJhbWV3b3JrcyA9IG5ldyBBcnJheTxDb25zdHJ1Y3RGcmFtZXdvcms+KCk7XG4gIGZvciAoY29uc3QgW2ZyYW1ld29ya05hbWUsIG1ham9yVmVyc2lvbl0gb2YgT2JqZWN0LmVudHJpZXMoZGV0ZWN0ZWRGcmFtZXdvcmtzKSkge1xuICAgIGNvbnN0IG5hbWUgPSBmcmFtZXdvcmtOYW1lIGFzIENvbnN0cnVjdEZyYW1ld29ya05hbWU7XG4gICAgaWYgKG1ham9yVmVyc2lvbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9IGVsc2UgaWYgKG1ham9yVmVyc2lvbiA9PT0gJ2FtYmlndW91cycgfHwgbWFqb3JWZXJzaW9uID09PSAnbm8tZGF0YScpIHtcbiAgICAgIGZyYW1ld29ya3MucHVzaCh7IG5hbWUgfSk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgbWFqb3JWZXJzaW9uID09PSAnbnVtYmVyJykge1xuICAgICAgZnJhbWV3b3Jrcy5wdXNoKHsgbmFtZSwgbWFqb3JWZXJzaW9uIH0pO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmcmFtZXdvcmtzO1xuXG4gIC8qKlxuICAgKiBBbmFseXNlcyB0aGUgcGFja2FnZSBuYW1lIGFuZCB2ZXJzaW9uIHJhbmdlLCBhbmQgdXBkYXRlc1xuICAgKiBgZGV0ZWN0ZWRGcmFtZXdvcmtzYCBmcm9tIHRoZSBwYXJlbnQgc2NvcGUgYXBwcm9wcmlhdGVseVxuICAgKi9cbiAgZnVuY3Rpb24gZGV0ZWN0Q29uc3RydWN0RnJhbWV3b3JrUGFja2FnZShwYWNrYWdlTmFtZTogc3RyaW5nLCB2ZXJzaW9uUmFuZ2UgPSBhc3NlbWJseS5kZXBlbmRlbmNpZXM/LltwYWNrYWdlTmFtZV0pOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IGZyYW1ld29ya05hbWUgb2YgW0NvbnN0cnVjdEZyYW1ld29ya05hbWUuQVdTX0NESywgQ29uc3RydWN0RnJhbWV3b3JrTmFtZS5DREs4UywgQ29uc3RydWN0RnJhbWV3b3JrTmFtZS5DREtURl0pIHtcbiAgICAgIGNvbnN0IG1hdGNoZXNGcmFtZXdvcmsgPSBGUkFNRVdPUktfTUFUQ0hFUlNbZnJhbWV3b3JrTmFtZV07XG4gICAgICBpZiAobWF0Y2hlc0ZyYW1ld29yayhwYWNrYWdlTmFtZSkpIHtcbiAgICAgICAgY29uc3QgZnJhbWV3b3JrVmVyc2lvbiA9IGRldGVjdGVkRnJhbWV3b3Jrc1tmcmFtZXdvcmtOYW1lXTtcbiAgICAgICAgaWYgKGZyYW1ld29ya1ZlcnNpb24gPT09ICdhbWJpZ3VvdXMnKSB7XG4gICAgICAgICAgLy8gV2UgaGF2ZSBhbHJlYWR5IHNlZW4gbXVsdGlwbGUgbWFqb3IgdmVyc2lvbnMgYW5kIGhhdmUgZGV0ZXJtaW5lZFxuICAgICAgICAgIC8vIHRoZSBtYWpvciB2ZXJzaW9uIGlzIGFtYmlndW91cywgc28gdGhpcyBwYWNrYWdlIHdvbid0IGdpdmVcbiAgICAgICAgICAvLyB1cyBhbnkgbmV3IGluZm9ybWF0aW9uLlxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHBhY2thZ2VNYWpvciA9ICh2ZXJzaW9uUmFuZ2UgPyBtaW5WZXJzaW9uKHZlcnNpb25SYW5nZSk/Lm1ham9yIDogdW5kZWZpbmVkKSA/PyAnbm8tZGF0YSc7XG5cbiAgICAgICAgaWYgKGZyYW1ld29ya1ZlcnNpb24gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIC8vIEl0J3MgdGhlIGZpcnN0IHRpbWUgc2VlaW5nIHRoaXMgbWFqb3IgdmVyc2lvbiwgc28gd2UgcmVjb3JkXG4gICAgICAgICAgLy8gd2hhdGV2ZXIgbmV3IGluZm9ybWF0aW9uIHdlIGZvdW5kIChcIm5vLWRhdGFcIiBvciBudW1iZXIpLlxuICAgICAgICAgIGRldGVjdGVkRnJhbWV3b3Jrc1tmcmFtZXdvcmtOYW1lXSA9IHBhY2thZ2VNYWpvcjtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH0gZWxzZSBpZiAoZnJhbWV3b3JrVmVyc2lvbiA9PT0gJ25vLWRhdGEnKSB7XG4gICAgICAgICAgLy8gV2UndmUgc2VlbiB0aGlzIGZyYW1ld29yayBiZWZvcmUgYnV0IGhhdmVuJ3Qgc2VlbiBhIG1ham9yIHZlcnNpb24sXG4gICAgICAgICAgLy8gc28gcmVjb3JkIHdoYXRldmVyIG5ldyBpbmZvcm1hdGlvbiB3ZSBmb3VuZCAoXCJuby1kYXRhXCIgb3IgbnVtYmVyKS5cbiAgICAgICAgICBkZXRlY3RlZEZyYW1ld29ya3NbZnJhbWV3b3JrTmFtZV0gPSBwYWNrYWdlTWFqb3I7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIEF0IHRoaXMgcG9pbnQsIGZyYW1ld29ya1ZlcnNpb24gY2FuIG9ubHkgYmUgYSBNViBudW1iZXJcbiAgICAgICAgICBhc3NlcnQodHlwZW9mIGZyYW1ld29ya1ZlcnNpb24gPT09ICdudW1iZXInKTtcblxuICAgICAgICAgIC8vIFdlJ3ZlIHNlZW4gZXZpZGVuY2Ugb2YgYSBwYXJ0aWN1bGFyIG1ham9yIHZlcnNpb24gZm9yIHRoaXNcbiAgICAgICAgICAvLyBmcmFtZXdvcmssIHNvIG9ubHkgdXBkYXRlIGlmIHRoaXMgcGFja2FnZSBjb25mbGljdHMgd2l0aCB3aGF0XG4gICAgICAgICAgLy8gd2UncmUgZXhwZWN0aW5nLlxuICAgICAgICAgIGlmIChwYWNrYWdlTWFqb3IgIT09ICduby1kYXRhJyAmJiBmcmFtZXdvcmtWZXJzaW9uICE9PSBwYWNrYWdlTWFqb3IpIHtcbiAgICAgICAgICAgIGRldGVjdGVkRnJhbWV3b3Jrc1tmcmFtZXdvcmtOYW1lXSA9ICdhbWJpZ3VvdXMnO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiJdfQ==
|