construct-hub 0.3.274 → 0.3.275
Sign up to get free protection for your applications and to get access to all the features.
- 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==
|