node-backpack 0.0.556 → 1.0.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/README.md +15 -21
- package/lib/api/_attributions.js +4 -5
- package/lib/api/bundle.d.ts +45 -0
- package/lib/api/bundle.js +36 -29
- package/lib/api/index.js +1 -1
- package/lib/api/violation.js +1 -1
- package/lib/cli-main.d.ts +1 -0
- package/lib/cli-main.js +140 -0
- package/lib/cli.js +3 -113
- package/lib/index.js +1 -1
- package/package.json +9 -7
- package/CONTRIBUTING.md +0 -59
package/README.md
CHANGED
|
@@ -1,4 +1,7 @@
|
|
|
1
|
-
# node-
|
|
1
|
+
# node-bundle
|
|
2
|
+
|
|
3
|
+
> **NOTE:** This tool should only be used on packages in this repository,
|
|
4
|
+
> and is not intended for external usage.
|
|
2
5
|
|
|
3
6
|
You can use this tool to help create bundled packages with minimal dependencies and appropriate license attributions.
|
|
4
7
|
|
|
@@ -80,14 +83,14 @@ only CLI applications.
|
|
|
80
83
|
Run the tool from the root directory of your package.
|
|
81
84
|
|
|
82
85
|
```console
|
|
83
|
-
$ node-
|
|
84
|
-
Usage: node-
|
|
86
|
+
$ node-bundle --help
|
|
87
|
+
Usage: node-bundle COMMAND
|
|
85
88
|
|
|
86
89
|
Commands:
|
|
87
|
-
node-
|
|
88
|
-
node-
|
|
90
|
+
node-bundle validate Validate the package is ready for bundling
|
|
91
|
+
node-bundle write Write the bundled version of the project to a temp
|
|
89
92
|
directory
|
|
90
|
-
node-
|
|
93
|
+
node-bundle pack Write the bundle and create the tarball
|
|
91
94
|
|
|
92
95
|
Options:
|
|
93
96
|
--entrypoint List of entrypoints to bundle [array]
|
|
@@ -110,7 +113,7 @@ Options:
|
|
|
110
113
|
You can also use the programmatic access:
|
|
111
114
|
|
|
112
115
|
```ts
|
|
113
|
-
import { Bundle } from 'node-
|
|
116
|
+
import { Bundle } from '@aws-cdk/node-bundle';
|
|
114
117
|
|
|
115
118
|
const bundle = new Bundle({
|
|
116
119
|
packageDir: process.cwd(),
|
|
@@ -124,15 +127,15 @@ bundle.pack();
|
|
|
124
127
|
|
|
125
128
|
We recommend to integrate this tool in the following way:
|
|
126
129
|
|
|
127
|
-
1. Add a `node-
|
|
128
|
-
2. Set your packaging command to `node-
|
|
130
|
+
1. Add a `node-bundle validate` command as a post compile step.
|
|
131
|
+
2. Set your packaging command to `node-bundle pack`.
|
|
129
132
|
|
|
130
133
|
This way, you can validate local dev builds not to break any functionality needed for bundling.
|
|
131
|
-
In addition, developers can run `node-
|
|
134
|
+
In addition, developers can run `node-bundle validate --fix` to automatically fix any (fixable) violations
|
|
132
135
|
and commit that to source control.
|
|
133
136
|
|
|
134
137
|
For example, if a dependency is added but the attribution file has not been re-generated,
|
|
135
|
-
you can use `node-
|
|
138
|
+
you can use `node-bundle validate` to catch this, and regenerate it with `node-bundle validate --fix`.
|
|
136
139
|
|
|
137
140
|
## Take into account
|
|
138
141
|
|
|
@@ -148,13 +151,4 @@ Note that this will balloon up the package size significantly.
|
|
|
148
151
|
If you are bundling a CLI application that also has top level exports, we suggest to extract
|
|
149
152
|
the CLI functionality into a function, and add this function as an export to `index.js`.
|
|
150
153
|
|
|
151
|
-
> See [aws-cdk](https://github.com/aws/aws-cdk/blob/
|
|
152
|
-
|
|
153
|
-
## Security
|
|
154
|
-
|
|
155
|
-
See [CONTRIBUTING](CONTRIBUTING.md#security-issue-notifications) for more information.
|
|
156
|
-
|
|
157
|
-
## License
|
|
158
|
-
|
|
159
|
-
This project is licensed under the Apache-2.0 License.
|
|
160
|
-
|
|
154
|
+
> See [aws-cdk](https://github.com/aws/aws-cdk-cli/blob/main/packages/aws-cdk/bin/cdk) as an example.
|
package/lib/api/_attributions.js
CHANGED
|
@@ -109,7 +109,6 @@ class Attributions {
|
|
|
109
109
|
.join('\n');
|
|
110
110
|
}
|
|
111
111
|
generateAttributions() {
|
|
112
|
-
var _a, _b;
|
|
113
112
|
if (this.dependencies.length === 0) {
|
|
114
113
|
return new Map();
|
|
115
114
|
}
|
|
@@ -131,7 +130,7 @@ class Attributions {
|
|
|
131
130
|
// sometimes the dependency might not exist from fetching information globally,
|
|
132
131
|
// so we try fetching a concrete package. this can happen for example when
|
|
133
132
|
// two different major versions exist of the same dependency.
|
|
134
|
-
const info =
|
|
133
|
+
const info = infos[key] ?? fetchInfos(dep.path, [pkg(dep)])[key];
|
|
135
134
|
if (!info) {
|
|
136
135
|
// make sure all dependencies are accounted for.
|
|
137
136
|
throw new Error(`Unable to locate license information for ${key} (${dep.path})`);
|
|
@@ -141,7 +140,7 @@ class Attributions {
|
|
|
141
140
|
// text. this seems strange, disabling that for now.
|
|
142
141
|
// see https://github.com/davglass/license-checker/blob/master/lib/license-files.js#L9
|
|
143
142
|
// note that a non existing license file is ok as long as the license type could be extracted.
|
|
144
|
-
const licenseFile =
|
|
143
|
+
const licenseFile = info.licenseFile?.toLowerCase().endsWith('.md') ? undefined : info.licenseFile;
|
|
145
144
|
const licenseText = licenseFile ? fs.readFileSync(licenseFile, { encoding: 'utf-8' }) : undefined;
|
|
146
145
|
// the licenses key comes in different types but we convert it here
|
|
147
146
|
// to always be an array.
|
|
@@ -149,7 +148,7 @@ class Attributions {
|
|
|
149
148
|
attributions.set(key, {
|
|
150
149
|
package: key,
|
|
151
150
|
url: `https://www.npmjs.com/package/${dep.name}/v/${dep.version}`,
|
|
152
|
-
licenses: licenses
|
|
151
|
+
licenses: licenses ?? [],
|
|
153
152
|
licenseText,
|
|
154
153
|
noticeText,
|
|
155
154
|
});
|
|
@@ -158,4 +157,4 @@ class Attributions {
|
|
|
158
157
|
}
|
|
159
158
|
}
|
|
160
159
|
exports.Attributions = Attributions;
|
|
161
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiX2F0dHJpYnV0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hcGkvX2F0dHJpYnV0aW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLDJDQUE2QjtBQUM3Qiw2Q0FBK0I7QUFFL0IscUNBQWlDO0FBRWpDLDJDQUF5RTtBQUd6RSxNQUFNLHFCQUFxQixHQUFHLHNCQUFzQixDQUFDO0FBdUNyRDs7R0FFRztBQUNILE1BQWEsWUFBWTtJQVl2QixZQUFZLEtBQXdCO1FBQ2xDLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDLFVBQVUsQ0FBQztRQUNuQyxJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQyxXQUFXLENBQUM7UUFDckMsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzNELElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLElBQUksQ0FBQyxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQzlHLElBQUksQ0FBQyxlQUFlLEdBQUcsS0FBSyxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztRQUN2RSxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsS0FBSyxDQUFDLGdCQUFnQixDQUFDO1FBRS9DLG1FQUFtRTtRQUNuRSw4Q0FBOEM7UUFDOUMsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztRQUNoRCxJQUFJLENBQUMs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QyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQztZQUNuRyxNQUFNLFdBQVcsR0FBRyxXQUFXLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsV0FBVyxFQUFFLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztZQUVsRyxtRUFBbUU7WUFDbkUseUJBQXlCO1lBQ3pCLE1BQU0sUUFBUSxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1lBRS9HLFlBQVksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFO2dCQUNwQixPQUFPLEVBQUUsR0FBRztnQkFDWixHQUFHLEVBQUUsaUNBQWlDLEdBQUcsQ0FBQyxJQUFJLE1BQU0sR0FBRyxDQUFDLE9BQU8sRUFBRTtnQkFDakUsUUFBUSxFQUFFLFFBQVEsYUFBUixRQUFRLGNBQVIsUUFBUSxHQUFJLEVBQUU7Z0JBQ3hCLFdBQVc7Z0JBQ1gsVUFBVTthQUNYLENBQUMsQ0FBQztTQUNKO1FBRUQsT0FBTyxZQUFZLENBQUM7SUFDdEIsQ0FBQztDQUVGO0FBMUtELG9DQTBLQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgKiBhcyBmcyBmcm9tICdmcy1leHRyYSc7XG5pbXBvcnQgdHlwZSB7IE1vZHVsZUluZm8gfSBmcm9tICdsaWNlbnNlLWNoZWNrZXInO1xuaW1wb3J0IHsgc2hlbGwgfSBmcm9tICcuL19zaGVsbCc7XG5pbXBvcnQgdHlwZSB7IFBhY2thZ2UgfSBmcm9tICcuL2J1bmRsZSc7XG5pbXBvcnQgeyBWaW9sYXRpb24sIFZpb2xhdGlvblR5cGUsIFZpb2xhdGlvbnNSZXBvcnQgfSBmcm9tICcuL3Zpb2xhdGlvbic7XG5cblxuY29uc3QgQVRUUklCVVRJT05fU0VQQVJBVE9SID0gJ1xcbi0tLS0tLS0tLS0tLS0tLS1cXG4nO1xuXG4vKipcbiAqIFByb3BlcnRpZXMgZm9yIGBBdHRyaWJ1dGlvbnNgLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEF0dHJpYnV0aW9uc1Byb3BzIHtcbiAgLyoqXG4gICAqIFRoZSBwYWNrYWdlIHJvb3QgZGlyZWN0b3J5LlxuICAgKi9cbiAgcmVhZG9ubHkgcGFja2FnZURpcjogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIHBhY2thZ2UuXG4gICAqL1xuICByZWFkb25seSBwYWNrYWdlTmFtZTogc3RyaW5nO1xuICAvKipcbiAgICogUGFja2FnZSBkZXBlbmRlbmNpZXMuXG4gICAqL1xuICByZWFkb25seSBkZXBlbmRlbmNpZXM6IFBhY2thZ2VbXTtcbiAgLyoqXG4gICAqIFRoZSBwYXJlbnQgZGlyZWN0b3J5IHVuZGVyd2hpY2ggYWxsIGRlcGVuZGVuY2llcyBsaXZlLlxuICAgKi9cbiAgcmVhZG9ubHkgZGVwZW5kZW5jaWVzUm9vdDogc3RyaW5nO1xuICAvKipcbiAgICogUGF0aCB0byB0aGUgbm90aWNlIGZpbGUgdG8gY3JlYXRlZCAvIHZhbGlkYXRlZC5cbiAgICovXG4gIHJlYWRvbmx5IGZpbGVQYXRoOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBMaXN0IG9mIGFsbG93ZWQgbGljZW5zZXMuXG4gICAqXG4gICAqL1xuICByZWFkb25seSBhbGxvd2VkTGljZW5zZXM6IHN0cmluZ1tdO1xuICAvKipcbiAgICogRGVwZW5kZW5jaWVzIG1hdGNoaW5nIHRoaXMgcGF0dGVybiB3aWxsIGJlIGV4Y2x1ZGVkIGZyb20gYXR0cmlidXRpb24uXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gZXhjbHVzaW9ucy5cbiAgICovXG4gIHJlYWRvbmx5IGV4Y2x1ZGU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogYEF0dHJpYnV0aW9uc2AgcmVwcmVzZW50cyBhbiBhdHRyaWJ1dGlvbnMgZmlsZSBjb250YWluaW5nIHRoaXJkLXBhcnR5IGxpY2Vuc2UgaW5mb3JtYXRpb24uXG4gKi9cbmV4cG9ydCBjbGFzcyBBdHRyaWJ1dGlvbnMge1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgcGFja2FnZURpcjogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IHBhY2thZ2VOYW1lOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgZGVwZW5kZW5jaWVzOiBQYWNrYWdlW107XG4gIHByaXZhdGUgcmVhZG9ubHkgYWxsb3dlZExpY2Vuc2VzOiBzdHJpbmdbXTtcbiAgcHJpdmF0ZSByZWFkb25seSBkZXBlbmRlbmNpZXNSb290OiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgZmlsZVBhdGg6IHN0cmluZztcblxuICBwcml2YXRlIHJlYWRvbmx5IGF0dHJpYnV0aW9uczogTWFwPHN0cmluZywgQXR0cmlidXRpb24+O1xuICBwcml2YXRlIHJlYWRvbmx5IGNvbnRlbnQ6IHN0cmluZztcblxuICBjb25zdHJ1Y3Rvcihwcm9wczogQXR0cmlidXRpb25zUHJvcHMpIHtcbiAgICB0aGlzLnBhY2thZ2VEaXIgPSBwcm9wcy5wYWNrYWdlRGlyO1xuICAgIHRoaXMucGFja2FnZU5hbWUgPSBwcm9wcy5wYWNrYWdlTmFtZTtcbiAgICB0aGlzLmZpbGVQYXRoID0gcGF0aC5qb2luKHRoaXMucGFja2FnZURpciwgcHJvcHMuZmlsZVBhdGgpO1xuICAgIHRoaXMuZGVwZW5kZW5jaWVzID0gcHJvcHMuZGVwZW5kZW5jaWVzLmZpbHRlcihkID0+ICFwcm9wcy5leGNsdWRlIHx8ICFuZXcgUmVnRXhwKHByb3BzLmV4Y2x1ZGUpLnRlc3QoZC5uYW1lKSk7XG4gICAgdGhpcy5hbGxvd2VkTGljZW5zZXMgPSBwcm9wcy5hbGxvd2VkTGljZW5zZXMubWFwKGwgPT4gbC50b0xvd2VyQ2FzZSgpKTtcbiAgICB0aGlzLmRlcGVuZGVuY2llc1Jvb3QgPSBwcm9wcy5kZXBlbmRlbmNpZXNSb290O1xuXG4gICAgLy8gd2l0aG91dCB0aGUgZ2VuZXJhdGVkIG5vdGljZSBjb250ZW50LCB0aGlzIG9iamVjdCBpcyBwcmV0dHkgbXVjaFxuICAgIC8vIHVzZWxlc3MsIHNvIGxldHMgZ2VuZXJhdGUgdGhvc2Ugb2YgdGhlIGJhdC5cbiAgICB0aGlzLmF0dHJpYnV0aW9ucyA9IHRoaXMuZ2VuZXJhdGVBdHRyaWJ1dGlvbnMoKTtcbiAgICB0aGlzLmNvbnRlbnQgPSB0aGlzLnJlbmRlcih0aGlzLmF0dHJpYnV0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGUgdGhlIGN1cnJlbnQgbm90aWNlIGZpbGUuXG4gICAqXG4gICAqIFRoaXMgbWV0aG9kIG5ldmVyIHRocm93cy4gVGhlIENhbGxlciBpcyByZXNwb25zaWJsZSBmb3IgaW5zcGVjdGluZyB0aGUgcmVwb3J0IHJldHVybmVkIGFuZCBhY3QgYWNjb3JkaW5hZ2x5LlxuICAgKi9cbiAgcHVibGljIHZhbGlkYXRlKCk6IFZpb2xhdGlvbnNSZXBvcnQge1xuXG4gICAgY29uc3QgdmlvbGF0aW9uczogVmlvbGF0aW9uW10gPSBbXTtcbiAgICBjb25zdCByZWxOb3RpY2VQYXRoID0gcGF0aC5yZWxhdGl2ZSh0aGlzLnBhY2thZ2VEaXIsIHRoaXMuZmlsZVBhdGgpO1xuXG4gICAgY29uc3QgZml4ID0gKCkgPT4gdGhpcy5mbHVzaCgpO1xuXG4gICAgY29uc3QgbWlzc2luZyA9ICFmcy5leGlzdHNTeW5jKHRoaXMuZmlsZVBhdGgpO1xuICAgIGNvbnN0IGF0dHJpYnV0aW9ucyA9IG1pc3NpbmcgPyB1bmRlZmluZWQgOiBmcy5yZWFkRmlsZVN5bmModGhpcy5maWxlUGF0aCwgeyBlbmNvZGluZzogJ3V0Zi04JyB9KTtcbiAgICBjb25zdCBvdXRkYXRlZCA9IGF0dHJpYnV0aW9ucyAhPT0gdW5kZWZpbmVkICYmIGF0dHJpYnV0aW9ucyAhPT0gdGhpcy5jb250ZW50O1xuXG4gICAgaWYgKG1pc3NpbmcpIHtcbiAgICAgIHZpb2xhdGlvbnMucHVzaCh7IHR5cGU6IFZpb2xhdGlvblR5cGUuTUlTU0lOR19OT1RJQ0UsIG1lc3NhZ2U6IGAke3JlbE5vdGljZVBhdGh9IGlzIG1pc3NpbmdgLCBmaXggfSk7XG4gICAgfVxuXG4gICAgaWYgKG91dGRhdGVkKSB7XG4gICAgICB2aW9sYXRpb25zLnB1c2goeyB0eXBlOiBWaW9sYXRpb25UeXBlLk9VVERBVEVEX0FUVFJJQlVUSU9OUywgbWVzc2FnZTogYCR7cmVsTm90aWNlUGF0aH0gaXMgb3V0ZGF0ZWRgLCBmaXggfSk7XG4gICAgfVxuXG4gICAgY29uc3QgaW52YWxpZExpY2Vuc2U6IFZpb2xhdGlvbltdID0gQXJyYXkuZnJvbSh0aGlzLmF0dHJpYnV0aW9ucy52YWx1ZXMoKSlcbiAgICAgIC5maWx0ZXIoYSA9PiBhLmxpY2Vuc2VzLmxlbmd0aCA9PT0gMSAmJiAhdGhpcy5hbGxvd2VkTGljZW5zZXMuaW5jbHVkZXMoYS5saWNlbnNlc1swXS50b0xvd2VyQ2FzZSgpKSlcbiAgICAgIC5tYXAoYSA9PiAoeyB0eXBlOiBWaW9sYXRpb25UeXBlLklOVkFMSURfTElDRU5TRSwgbWVzc2FnZTogYERlcGVuZGVuY3kgJHthLnBhY2thZ2V9IGhhcyBhbiBpbnZhbGlkIGxpY2Vuc2U6ICR7YS5saWNlbnNlc1swXX1gIH0pKTtcblxuICAgIGNvbnN0IG5vTGljZW5zZTogVmlvbGF0aW9uW10gPSBBcnJheS5mcm9tKHRoaXMuYXR0cmlidXRpb25zLnZhbHVlcygpKVxuICAgICAgLmZpbHRlcihhID0+IGEubGljZW5zZXMubGVuZ3RoID09PSAwKVxuICAgICAgLm1hcChhID0+ICh7IHR5cGU6IFZpb2xhdGlvblR5cGUuTk9fTElDRU5TRSwgbWVzc2FnZTogYERlcGVuZGVuY3kgJHthLnBhY2thZ2V9IGhhcyBubyBsaWNlbnNlYCB9KSk7XG5cbiAgICBjb25zdCBtdWx0aUxpY2Vuc2U6IFZpb2xhdGlvbltdID0gQXJyYXkuZnJvbSh0aGlzLmF0dHJpYnV0aW9ucy52YWx1ZXMoKSlcbiAgICAgIC5maWx0ZXIoYSA9PiBhLmxpY2Vuc2VzLmxlbmd0aCA+IDEpXG4gICAgICAubWFwKGEgPT4gKHsgdHlwZTogVmlvbGF0aW9uVHlwZS5NVUxUSVBMRV9MSUNFTlNFLCBtZXNzYWdlOiBgRGVwZW5kZW5jeSAke2EucGFja2FnZX0gaGFzIG11bHRpcGxlIGxpY2Vuc2VzOiAke2EubGljZW5zZXN9YCB9KSk7XG5cbiAgICB2aW9sYXRpb25zLnB1c2goLi4uaW52YWxpZExpY2Vuc2UpO1xuICAgIHZpb2xhdGlvbnMucHVzaCguLi5ub0xpY2Vuc2UpO1xuICAgIHZpb2xhdGlvbnMucHVzaCguLi5tdWx0aUxpY2Vuc2UpO1xuXG4gICAgcmV0dXJuIG5ldyBWaW9sYXRpb25zUmVwb3J0KHZpb2xhdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZsdXNoIHRoZSBnZW5lcmF0ZWQgbm90aWNlIGZpbGUgdG8gZGlzay5cbiAgICovXG4gIHB1YmxpYyBmbHVzaCgpIHtcbiAgICBmcy53cml0ZUZpbGVTeW5jKHRoaXMuZmlsZVBhdGgsIHRoaXMuY29udGVudCk7XG4gIH1cblxuICBwcml2YXRlIHJlbmRlcihhdHRyaWJ1dGlvbnM6IE1hcDxzdHJpbmcsIEF0dHJpYnV0aW9uPik6IHN0cmluZyB7XG5cbiAgICBjb25zdCBjb250ZW50ID0gW107XG5cbiAgICBpZiAoYXR0cmlidXRpb25zLnNpemUgPiAwKSB7XG4gICAgICBjb250ZW50LnB1c2goYFRoZSAke3RoaXMucGFja2FnZU5hbWV9IHBhY2thZ2UgaW5jbHVkZXMgdGhlIGZvbGxvd2luZyB0aGlyZC1wYXJ0eSBzb2Z0d2FyZS9saWNlbnNpbmc6YCk7XG4gICAgICBjb250ZW50LnB1c2goJycpO1xuICAgIH1cblxuICAgIC8vIHNvcnQgdGhlIGF0dHJpYnV0aW9ucyBzbyB0aGUgZmlsZSBkb2Vzbid0IGNoYW5nZSBkdWUgdG8gb3JkZXJpbmcgaXNzdWVzXG4gICAgY29uc3Qgb3JkZXJlZCA9IEFycmF5LmZyb20oYXR0cmlidXRpb25zLnZhbHVlcygpKS5zb3J0KChhMSwgYTIpID0+IGExLnBhY2thZ2UubG9jYWxlQ29tcGFyZShhMi5wYWNrYWdlKSk7XG5cbiAgICBmb3IgKGNvbnN0IGF0dHIgb2Ygb3JkZXJlZCkge1xuICAgICAgY29udGVudC5wdXNoKGAqKiAke2F0dHIucGFja2FnZX0gLSAke2F0dHIudXJsfSB8ICR7YXR0ci5saWNlbnNlc1swXX1gKTtcblxuICAgICAgLy8gcHJlZmVyIG5vdGljZSBvdmVyIGxpY2Vuc2VcbiAgICAgIGlmIChhdHRyLm5vdGljZVRleHQpIHtcbiAgICAgICAgY29udGVudC5wdXNoKGF0dHIubm90aWNlVGV4dCk7XG4gICAgICB9IGVsc2UgaWYgKGF0dHIubGljZW5zZVRleHQpIHtcbiAgICAgICAgY29udGVudC5wdXNoKGF0dHIubGljZW5zZVRleHQpO1xuICAgICAgfVxuICAgICAgY29udGVudC5wdXNoKEFUVFJJQlVUSU9OX1NFUEFSQVRPUik7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbnRlbnRcbiAgICAgIC8vIHNpbmNlIHdlIGFyZSBlbWJlZGRpbmcgZXh0ZXJuYWwgZmlsZXMsIHRob3NlIGNhbiBkaWZmZXJlbnQgbGluZVxuICAgICAgLy8gZW5kaW5ncywgc28gd2Ugc3RhbmRhcmRpemUgdG8gTEYuXG4gICAgICAubWFwKGwgPT4gbC5yZXBsYWNlKC9cXHJcXG4vZywgJ1xcbicpKVxuICAgICAgLmpvaW4oJ1xcbicpO1xuXG4gIH1cblxuICBwcml2YXRlIGdlbmVyYXRlQXR0cmlidXRpb25zKCk6IE1hcDxzdHJpbmcsIEF0dHJpYnV0aW9uPiB7XG5cbiAgICBpZiAodGhpcy5kZXBlbmRlbmNpZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gbmV3IE1hcCgpO1xuICAgIH1cblxuICAgIGNvbnN0IGF0dHJpYnV0aW9uczogTWFwPHN0cmluZywgQXR0cmlidXRpb24+ID0gbmV3IE1hcCgpO1xuXG4gICAgY29uc3QgcGtnID0gKGQ6IFBhY2thZ2UpID0+IGAke2QubmFtZX1AJHtkLnZlcnNpb259YDtcblxuICAgIGNvbnN0IHBhY2thZ2VzID0gdGhpcy5kZXBlbmRlbmNpZXMubWFwKGQgPT4gcGtnKGQpKTtcblxuICAgIGZ1bmN0aW9uIGZldGNoSW5mb3MoX2N3ZDogc3RyaW5nLCBfcGFja2FnZXM6IHN0cmluZ1tdKSB7XG4gICAgICAvLyB3ZSBkb24ndCB1c2UgdGhlIHByb2dyYW1tYXRpYyBBUEkgc2luY2UgaXQgb25seSBvZmZlcnMgYW4gYXN5bmMgQVBJLlxuICAgICAgLy8gcHJlZmVyIHRvIHN0YXkgc3luYyBmb3Igbm93IHNpbmNlIGl0cyBlYXNpZXIgdG8gaW50ZWdyYXRlIHdpdGggb3RoZXIgdG9vbGluZy5cbiAgICAgIC8vIHdpbGwgb2ZmZXIgYW4gYXN5bmMgQVBJIGZ1cnRoZXIgZG93biB0aGUgcm9hZC5cbiAgICAgIGNvbnN0IGNvbW1hbmQgPSBgJHtyZXF1aXJlLnJlc29sdmUoJ2xpY2Vuc2UtY2hlY2tlci9iaW4vbGljZW5zZS1jaGVja2VyJyl9IC0tanNvbiAtLXBhY2thZ2VzIFwiJHtfcGFja2FnZXMuam9pbignOycpfVwiYDtcbiAgICAgIGNvbnN0IG91dHB1dCA9IHNoZWxsKGNvbW1hbmQsIHsgY3dkOiBfY3dkLCBxdWlldDogdHJ1ZSB9KTtcbiAgICAgIHJldHVybiBKU09OLnBhcnNlKG91dHB1dCk7XG4gICAgfVxuXG4gICAgLy8gZmlyc3QgcnVuIGEgZ2xvYmFsIGNvbW1hbmQgdG8gZmV0Y2ggYXMgbXVjaCBpbmZvcm1hdGlvbiBpbiBvbmUgc2hvdFxuICAgIGNvbnN0IGluZm9zID0gZmV0Y2hJbmZvcyh0aGlzLmRlcGVuZGVuY2llc1Jvb3QsIHBhY2thZ2VzKTtcblxuICAgIGZvciAoY29uc3QgZGVwIG9mIHRoaXMuZGVwZW5kZW5jaWVzKSB7XG4gICAgICBjb25zdCBrZXkgPSBwa2coZGVwKTtcblxuICAgICAgLy8gc29tZXRpbWVzIHRoZSBkZXBlbmRlbmN5IG1pZ2h0IG5vdCBleGlzdCBmcm9tIGZldGNoaW5nIGluZm9ybWF0aW9uIGdsb2JhbGx5LFxuICAgICAgLy8gc28gd2UgdHJ5IGZldGNoaW5nIGEgY29uY3JldGUgcGFja2FnZS4gdGhpcyBjYW4gaGFwcGVuIGZvciBleGFtcGxlIHdoZW5cbiAgICAgIC8vIHR3byBkaWZmZXJlbnQgbWFqb3IgdmVyc2lvbnMgZXhpc3Qgb2YgdGhlIHNhbWUgZGVwZW5kZW5jeS5cbiAgICAgIGNvbnN0IGluZm86IE1vZHVsZUluZm8gPSBpbmZvc1trZXldID8/IGZldGNoSW5mb3MoZGVwLnBhdGgsIFtwa2coZGVwKV0pW2tleV07XG5cbiAgICAgIGlmICghaW5mbykge1xuICAgICAgICAvLyBtYWtlIHN1cmUgYWxsIGRlcGVuZGVuY2llcyBhcmUgYWNjb3VudGVkIGZvci5cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmFibGUgdG8gbG9jYXRlIGxpY2Vuc2UgaW5mb3JtYXRpb24gZm9yICR7a2V5fSAoJHtkZXAucGF0aH0pYCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG5vdGljZVRleHQgPSBpbmZvLm5vdGljZUZpbGUgPyBmcy5yZWFkRmlsZVN5bmMoaW5mby5ub3RpY2VGaWxlLCB7IGVuY29kaW5nOiAndXRmLTgnIH0pIDogdW5kZWZpbmVkO1xuXG4gICAgICAvLyBmb3Igc29tZSByZWFzb24sIHRoZSBsaWNlbnNlLWNoZWNrZXIgcGFja2FnZSBmYWxscyBiYWNrIHRvIHRoZSBSRUFETUUubWQgZmlsZSBvZiB0aGUgcGFja2FnZSBmb3IgbGljZW5zZVxuICAgICAgLy8gdGV4dC4gdGhpcyBzZWVtcyBzdHJhbmdlLCBkaXNhYmxpbmcgdGhhdCBmb3Igbm93LlxuICAgICAgLy8gc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9kYXZnbGFzcy9saWNlbnNlLWNoZWNrZXIvYmxvYi9tYXN0ZXIvbGliL2xpY2Vuc2UtZmlsZXMuanMjTDlcbiAgICAgIC8vIG5vdGUgdGhhdCBhIG5vbiBleGlzdGluZyBsaWNlbnNlIGZpbGUgaXMgb2sgYXMgbG9uZyBhcyB0aGUgbGljZW5zZSB0eXBlIGNvdWxkIGJlIGV4dHJhY3RlZC5cbiAgICAgIGNvbnN0IGxpY2Vuc2VGaWxlID0gaW5mby5saWNlbnNlRmlsZT8udG9Mb3dlckNhc2UoKS5lbmRzV2l0aCgnLm1kJykgPyB1bmRlZmluZWQgOiBpbmZvLmxpY2Vuc2VGaWxlO1xuICAgICAgY29uc3QgbGljZW5zZVRleHQgPSBsaWNlbnNlRmlsZSA/IGZzLnJlYWRGaWxlU3luYyhsaWNlbnNlRmlsZSwgeyBlbmNvZGluZzogJ3V0Zi04JyB9KSA6IHVuZGVmaW5lZDtcblxuICAgICAgLy8gdGhlIGxpY2Vuc2VzIGtleSBjb21lcyBpbiBkaWZmZXJlbnQgdHlwZXMgYnV0IHdlIGNvbnZlcnQgaXQgaGVyZVxuICAgICAgLy8gdG8gYWx3YXlzIGJlIGFuIGFycmF5LlxuICAgICAgY29uc3QgbGljZW5zZXMgPSAhaW5mby5saWNlbnNlcyA/IHVuZGVmaW5lZCA6IChBcnJheS5pc0FycmF5KGluZm8ubGljZW5zZXMpID8gaW5mby5saWNlbnNlcyA6IFtpbmZvLmxpY2Vuc2VzXSk7XG5cbiAgICAgIGF0dHJpYnV0aW9ucy5zZXQoa2V5LCB7XG4gICAgICAgIHBhY2thZ2U6IGtleSxcbiAgICAgICAgdXJsOiBgaHR0cHM6Ly93d3cubnBtanMuY29tL3BhY2thZ2UvJHtkZXAubmFtZX0vdi8ke2RlcC52ZXJzaW9ufWAsXG4gICAgICAgIGxpY2Vuc2VzOiBsaWNlbnNlcyA/PyBbXSxcbiAgICAgICAgbGljZW5zZVRleHQsXG4gICAgICAgIG5vdGljZVRleHQsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gYXR0cmlidXRpb25zO1xuICB9XG5cbn1cblxuLyoqXG4gKiBBdHRyaWJ1dGlvbiBvZiBhIHNwZWNpZmljIGRlcGVuZGVuY3kuXG4gKi9cbmludGVyZmFjZSBBdHRyaWJ1dGlvbiB7XG4gIC8qKlxuICAgKiBBdHRyaWJ1dGVkIHBhY2thZ2UgKG5hbWUgKyB2ZXJzaW9uKVxuICAgKi9cbiAgcmVhZG9ubHkgcGFja2FnZTogc3RyaW5nO1xuICAvKipcbiAgICogVVJMIHRvIHRoZSBwYWNrYWdlLlxuICAgKi9cbiAgcmVhZG9ubHkgdXJsOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBQYWNrYWdlIGxpY2Vuc2VzLlxuICAgKlxuICAgKiBOb3RlIHRoYXQgc29tZSBwYWNrYWdlcyB3aWxsIG1heSBoYXZlIG11bHRpcGxlIGxpY2Vuc2VzLFxuICAgKiB3aGljaCBpcyB3aHkgdGhpcyBpcyBhbiBhcnJheS4gSW4gc3VjaCBjYXNlcywgdGhlIGxpY2Vuc2VcbiAgICogdmFsaWRhdGlvbiB3aWxsIGZhaWwgc2luY2Ugd2UgY3VycmVudGx5IGRpc2FsbG93IHRoaXMuXG4gICAqL1xuICByZWFkb25seSBsaWNlbnNlczogc3RyaW5nW107XG4gIC8qKlxuICAgKiBQYWNrYWdlIGxpY2Vuc2UgY29udGVudC5cbiAgICpcbiAgICogSW4gY2FzZSBhIHBhY2thZ2UgaGFzIG11bHRpcGxlIGxpY2Vuc2VzLCB0aGlzIHdpbGxcbiAgICogY29udGFpbi4uLm9uZSBvZiB0aGVtLiBJdCBjdXJyZW50bHkgZG9lc24ndCBtYXR0ZXIgd2hpY2hcbiAgICogb25lIHNpbmNlIGl0IHdpbGwgbm90IHBhc3MgdmFsaWRhdGlvbiBhbnl3YXkuXG4gICAqL1xuICByZWFkb25seSBsaWNlbnNlVGV4dD86IHN0cmluZztcbiAgLyoqXG4gICAqIFBhY2thZ2Ugbm90aWNlLlxuICAgKi9cbiAgcmVhZG9ubHkgbm90aWNlVGV4dD86IHN0cmluZztcbn1cbiJdfQ==
|
|
160
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiX2F0dHJpYnV0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hcGkvX2F0dHJpYnV0aW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLDJDQUE2QjtBQUM3Qiw2Q0FBK0I7QUFFL0IscUNBQWlDO0FBR2pDLDJDQUE4RDtBQUU5RCxNQUFNLHFCQUFxQixHQUFHLHNCQUFzQixDQUFDO0FBdUNyRDs7R0FFRztBQUNILE1BQWEsWUFBWTtJQVd2QixZQUFZLEtBQXdCO1FBQ2xDLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDLFVBQVUsQ0FBQztRQUNuQyxJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQyxXQUFXLENBQUM7UUFDckMsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzNELElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLElBQUksQ0FBQyxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQzlHLElBQUksQ0FBQyxlQUFlLEdBQUcsS0FBSyxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztRQUN2RSxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsS0FBSyxDQUFDLGdCQUFnQixDQUFDO1FBRS9DLG1FQUFtRTtRQUNuRSw4Q0FBOEM7UUFDOUMsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztRQUNoRCxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksUUFBUTtRQUNiLE1BQU0sVUFBVSxHQUFnQixFQUFFLENBQUM7UUFDbkMsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUVwRSxNQUFNLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7UUFFL0IsTUFBTSxPQUFPLEdBQUcsQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUM5QyxNQUFNLFlBQVksR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7UUFDakcsTUFBTSxRQUFRLEdBQUcsWUFBWSxLQUFLLFNBQVMsSUFBSSxZQUFZLEtBQUssSUFBSSxDQUFDLE9BQU8sQ0FBQztRQUU3RSxJQUFJLE9BQU8sRUFBRTtZQUNYLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUseUJBQWEsQ0FBQyxjQUFjLEVBQUUsT0FBTyxFQUFFLEdBQUcsYUFBYSxhQUFhLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztTQUN0RztRQUVELElBQUksUUFBUSxFQUFFO1lBQ1osVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSx5QkFBYSxDQUFDLHFCQUFxQixFQUFFLE9BQU8sRUFBRSxHQUFHLGFBQWEsY0FBYyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7U0FDOUc7UUFFRCxNQUFNLGNBQWMsR0FBZ0IsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxDQUFDO2FBQ3ZFLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsTUFBTSxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQzthQUNuRyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLHlCQUFhLENBQUMsZUFBZSxFQUFFLE9BQU8sRUFBRSxjQUFjLENBQUMsQ0FBQyxPQUFPLDRCQUE0QixDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFFcEksTUFBTSxTQUFTLEdBQWdCLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsQ0FBQzthQUNsRSxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUM7YUFDcEMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSx5QkFBYSxDQUFDLFVBQVUsRUFBRSxPQUFPLEVBQUUsY0FBYyxDQUFDLENBQUMsT0FBTyxpQkFBaUIsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUVyRyxNQUFNLFlBQVksR0FBZ0IsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxDQUFDO2FBQ3JFLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQzthQUNsQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLHlCQUFhLENBQUMsZ0JBQWdCLEVBQUUsT0FBTyxFQUFFLGNBQWMsQ0FBQyxDQUFDLE9BQU8sMkJBQTJCLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUVqSSxVQUFVLENBQUMsSUFBSSxDQUFDLEdBQUcsY0FBYyxDQUFDLENBQUM7UUFDbkMsVUFBVSxDQUFDLElBQUksQ0FBQyxHQUFHLFNBQVMsQ0FBQyxDQUFDO1FBQzlCLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxZQUFZLENBQUMsQ0FBQztRQUVqQyxPQUFPLElBQUksNEJBQWdCLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDMUMsQ0FBQztJQUVEOztPQUVHO0lBQ0ksS0FBSztRQUNWLEVBQUUsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDaEQsQ0FBQztJQUVPLE1BQU0sQ0FBQyxZQUFzQztRQUNuRCxNQUFNLE9BQU8sR0FBRyxFQUFFLENBQUM7UUFFbkIsSUFBSSxZQUFZLENBQUMsSUFBSSxHQUFHLENBQUMsRUFBRTtZQUN6QixPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sSUFBSSxDQUFDLFdBQVcsaUVBQWlFLENBQUMsQ0FBQztZQUN2RyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1NBQ2xCO1FBRUQsMEVBQTBFO1FBQzFFLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7UUFFekcsS0FBSyxNQUFNLElBQUksSUFBSSxPQUFPLEVBQUU7WUFDMUIsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxPQUFPLE1BQU0sSUFBSSxDQUFDLEdBQUcsTUFBTSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUV2RSw2QkFBNkI7WUFDN0IsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFO2dCQUNuQixPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQzthQUMvQjtpQkFBTSxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUU7Z0JBQzNCLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO2FBQ2hDO1lBQ0QsT0FBTyxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1NBQ3JDO1FBRUQsT0FBTyxPQUFPO1lBQ1osa0VBQWtFO1lBQ2xFLG9DQUFvQzthQUNuQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQzthQUNsQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDaEIsQ0FBQztJQUVPLG9CQUFvQjtRQUMxQixJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtZQUNsQyxPQUFPLElBQUksR0FBRyxFQUFFLENBQUM7U0FDbEI7UUFFRCxNQUFNLFlBQVksR0FBNkIsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUV6RCxNQUFNLEdBQUcsR0FBRyxDQUFDLENBQVUsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUVyRCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRXBELFNBQVMsVUFBVSxDQUFDLElBQVksRUFBRSxTQUFtQjtZQUNuRCx1RUFBdUU7WUFDdkUsZ0ZBQWdGO1lBQ2hGLGlEQUFpRDtZQUNqRCxNQUFNLE9BQU8sR0FBRyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMscUNBQXFDLENBQUMsdUJBQXVCLFNBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQztZQUN2SCxNQUFNLE1BQU0sR0FBRyxJQUFBLGNBQUssRUFBQyxPQUFPLEVBQUUsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBQzFELE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM1QixDQUFDO1FBRUQsc0VBQXNFO1FBQ3RFLE1BQU0sS0FBSyxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFFMUQsS0FBSyxNQUFNLEdBQUcsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFO1lBQ25DLE1BQU0sR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUVyQiwrRUFBK0U7WUFDL0UsMEVBQTBFO1lBQzFFLDZEQUE2RDtZQUM3RCxNQUFNLElBQUksR0FBZSxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksVUFBVSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBRTdFLElBQUksQ0FBQyxJQUFJLEVBQUU7Z0JBQ1QsZ0RBQWdEO2dCQUNoRCxNQUFNLElBQUksS0FBSyxDQUFDLDRDQUE0QyxHQUFHLEtBQUssR0FBRyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUM7YUFDbEY7WUFFRCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO1lBRXpHLDJHQUEyRztZQUMzRyxvREFBb0Q7WUFDcEQsc0ZBQXNGO1lBQ3RGLDhGQUE4RjtZQUM5RixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLFdBQVcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDO1lBQ25HLE1BQU0sV0FBVyxHQUFHLFdBQVcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxXQUFXLEVBQUUsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO1lBRWxHLG1FQUFtRTtZQUNuRSx5QkFBeUI7WUFDekIsTUFBTSxRQUFRLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7WUFFL0csWUFBWSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUU7Z0JBQ3BCLE9BQU8sRUFBRSxHQUFHO2dCQUNaLEdBQUcsRUFBRSxpQ0FBaUMsR0FBRyxDQUFDLElBQUksTUFBTSxHQUFHLENBQUMsT0FBTyxFQUFFO2dCQUNqRSxRQUFRLEVBQUUsUUFBUSxJQUFJLEVBQUU7Z0JBQ3hCLFdBQVc7Z0JBQ1gsVUFBVTthQUNYLENBQUMsQ0FBQztTQUNKO1FBRUQsT0FBTyxZQUFZLENBQUM7SUFDdEIsQ0FBQztDQUNGO0FBcEtELG9DQW9LQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgKiBhcyBmcyBmcm9tICdmcy1leHRyYSc7XG5pbXBvcnQgdHlwZSB7IE1vZHVsZUluZm8gfSBmcm9tICdsaWNlbnNlLWNoZWNrZXInO1xuaW1wb3J0IHsgc2hlbGwgfSBmcm9tICcuL19zaGVsbCc7XG5pbXBvcnQgdHlwZSB7IFBhY2thZ2UgfSBmcm9tICcuL2J1bmRsZSc7XG5pbXBvcnQgdHlwZSB7IFZpb2xhdGlvbiB9IGZyb20gJy4vdmlvbGF0aW9uJztcbmltcG9ydCB7IFZpb2xhdGlvblR5cGUsIFZpb2xhdGlvbnNSZXBvcnQgfSBmcm9tICcuL3Zpb2xhdGlvbic7XG5cbmNvbnN0IEFUVFJJQlVUSU9OX1NFUEFSQVRPUiA9ICdcXG4tLS0tLS0tLS0tLS0tLS0tXFxuJztcblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciBgQXR0cmlidXRpb25zYC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBdHRyaWJ1dGlvbnNQcm9wcyB7XG4gIC8qKlxuICAgKiBUaGUgcGFja2FnZSByb290IGRpcmVjdG9yeS5cbiAgICovXG4gIHJlYWRvbmx5IHBhY2thZ2VEaXI6IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBwYWNrYWdlLlxuICAgKi9cbiAgcmVhZG9ubHkgcGFja2FnZU5hbWU6IHN0cmluZztcbiAgLyoqXG4gICAqIFBhY2thZ2UgZGVwZW5kZW5jaWVzLlxuICAgKi9cbiAgcmVhZG9ubHkgZGVwZW5kZW5jaWVzOiBQYWNrYWdlW107XG4gIC8qKlxuICAgKiBUaGUgcGFyZW50IGRpcmVjdG9yeSB1bmRlcndoaWNoIGFsbCBkZXBlbmRlbmNpZXMgbGl2ZS5cbiAgICovXG4gIHJlYWRvbmx5IGRlcGVuZGVuY2llc1Jvb3Q6IHN0cmluZztcbiAgLyoqXG4gICAqIFBhdGggdG8gdGhlIG5vdGljZSBmaWxlIHRvIGNyZWF0ZWQgLyB2YWxpZGF0ZWQuXG4gICAqL1xuICByZWFkb25seSBmaWxlUGF0aDogc3RyaW5nO1xuICAvKipcbiAgICogTGlzdCBvZiBhbGxvd2VkIGxpY2Vuc2VzLlxuICAgKlxuICAgKi9cbiAgcmVhZG9ubHkgYWxsb3dlZExpY2Vuc2VzOiBzdHJpbmdbXTtcbiAgLyoqXG4gICAqIERlcGVuZGVuY2llcyBtYXRjaGluZyB0aGlzIHBhdHRlcm4gd2lsbCBiZSBleGNsdWRlZCBmcm9tIGF0dHJpYnV0aW9uLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vIGV4Y2x1c2lvbnMuXG4gICAqL1xuICByZWFkb25seSBleGNsdWRlPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIGBBdHRyaWJ1dGlvbnNgIHJlcHJlc2VudHMgYW4gYXR0cmlidXRpb25zIGZpbGUgY29udGFpbmluZyB0aGlyZC1wYXJ0eSBsaWNlbnNlIGluZm9ybWF0aW9uLlxuICovXG5leHBvcnQgY2xhc3MgQXR0cmlidXRpb25zIHtcbiAgcHJpdmF0ZSByZWFkb25seSBwYWNrYWdlRGlyOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgcGFja2FnZU5hbWU6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBkZXBlbmRlbmNpZXM6IFBhY2thZ2VbXTtcbiAgcHJpdmF0ZSByZWFkb25seSBhbGxvd2VkTGljZW5zZXM6IHN0cmluZ1tdO1xuICBwcml2YXRlIHJlYWRvbmx5IGRlcGVuZGVuY2llc1Jvb3Q6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBmaWxlUGF0aDogc3RyaW5nO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgYXR0cmlidXRpb25zOiBNYXA8c3RyaW5nLCBBdHRyaWJ1dGlvbj47XG4gIHByaXZhdGUgcmVhZG9ubHkgY29udGVudDogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKHByb3BzOiBBdHRyaWJ1dGlvbnNQcm9wcykge1xuICAgIHRoaXMucGFja2FnZURpciA9IHByb3BzLnBhY2thZ2VEaXI7XG4gICAgdGhpcy5wYWNrYWdlTmFtZSA9IHByb3BzLnBhY2thZ2VOYW1lO1xuICAgIHRoaXMuZmlsZVBhdGggPSBwYXRoLmpvaW4odGhpcy5wYWNrYWdlRGlyLCBwcm9wcy5maWxlUGF0aCk7XG4gICAgdGhpcy5kZXBlbmRlbmNpZXMgPSBwcm9wcy5kZXBlbmRlbmNpZXMuZmlsdGVyKGQgPT4gIXByb3BzLmV4Y2x1ZGUgfHwgIW5ldyBSZWdFeHAocHJvcHMuZXhjbHVkZSkudGVzdChkLm5hbWUpKTtcbiAgICB0aGlzLmFsbG93ZWRMaWNlbnNlcyA9IHByb3BzLmFsbG93ZWRMaWNlbnNlcy5tYXAobCA9PiBsLnRvTG93ZXJDYXNlKCkpO1xuICAgIHRoaXMuZGVwZW5kZW5jaWVzUm9vdCA9IHByb3BzLmRlcGVuZGVuY2llc1Jvb3Q7XG5cbiAgICAvLyB3aXRob3V0IHRoZSBnZW5lcmF0ZWQgbm90aWNlIGNvbnRlbnQsIHRoaXMgb2JqZWN0IGlzIHByZXR0eSBtdWNoXG4gICAgLy8gdXNlbGVzcywgc28gbGV0cyBnZW5lcmF0ZSB0aG9zZSBvZiB0aGUgYmF0LlxuICAgIHRoaXMuYXR0cmlidXRpb25zID0gdGhpcy5nZW5lcmF0ZUF0dHJpYnV0aW9ucygpO1xuICAgIHRoaXMuY29udGVudCA9IHRoaXMucmVuZGVyKHRoaXMuYXR0cmlidXRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZSB0aGUgY3VycmVudCBub3RpY2UgZmlsZS5cbiAgICpcbiAgICogVGhpcyBtZXRob2QgbmV2ZXIgdGhyb3dzLiBUaGUgQ2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvciBpbnNwZWN0aW5nIHRoZSByZXBvcnQgcmV0dXJuZWQgYW5kIGFjdCBhY2NvcmRpbmFnbHkuXG4gICAqL1xuICBwdWJsaWMgdmFsaWRhdGUoKTogVmlvbGF0aW9uc1JlcG9ydCB7XG4gICAgY29uc3QgdmlvbGF0aW9uczogVmlvbGF0aW9uW10gPSBbXTtcbiAgICBjb25zdCByZWxOb3RpY2VQYXRoID0gcGF0aC5yZWxhdGl2ZSh0aGlzLnBhY2thZ2VEaXIsIHRoaXMuZmlsZVBhdGgpO1xuXG4gICAgY29uc3QgZml4ID0gKCkgPT4gdGhpcy5mbHVzaCgpO1xuXG4gICAgY29uc3QgbWlzc2luZyA9ICFmcy5leGlzdHNTeW5jKHRoaXMuZmlsZVBhdGgpO1xuICAgIGNvbnN0IGF0dHJpYnV0aW9ucyA9IG1pc3NpbmcgPyB1bmRlZmluZWQgOiBmcy5yZWFkRmlsZVN5bmModGhpcy5maWxlUGF0aCwgeyBlbmNvZGluZzogJ3V0Zi04JyB9KTtcbiAgICBjb25zdCBvdXRkYXRlZCA9IGF0dHJpYnV0aW9ucyAhPT0gdW5kZWZpbmVkICYmIGF0dHJpYnV0aW9ucyAhPT0gdGhpcy5jb250ZW50O1xuXG4gICAgaWYgKG1pc3NpbmcpIHtcbiAgICAgIHZpb2xhdGlvbnMucHVzaCh7IHR5cGU6IFZpb2xhdGlvblR5cGUuTUlTU0lOR19OT1RJQ0UsIG1lc3NhZ2U6IGAke3JlbE5vdGljZVBhdGh9IGlzIG1pc3NpbmdgLCBmaXggfSk7XG4gICAgfVxuXG4gICAgaWYgKG91dGRhdGVkKSB7XG4gICAgICB2aW9sYXRpb25zLnB1c2goeyB0eXBlOiBWaW9sYXRpb25UeXBlLk9VVERBVEVEX0FUVFJJQlVUSU9OUywgbWVzc2FnZTogYCR7cmVsTm90aWNlUGF0aH0gaXMgb3V0ZGF0ZWRgLCBmaXggfSk7XG4gICAgfVxuXG4gICAgY29uc3QgaW52YWxpZExpY2Vuc2U6IFZpb2xhdGlvbltdID0gQXJyYXkuZnJvbSh0aGlzLmF0dHJpYnV0aW9ucy52YWx1ZXMoKSlcbiAgICAgIC5maWx0ZXIoYSA9PiBhLmxpY2Vuc2VzLmxlbmd0aCA9PT0gMSAmJiAhdGhpcy5hbGxvd2VkTGljZW5zZXMuaW5jbHVkZXMoYS5saWNlbnNlc1swXS50b0xvd2VyQ2FzZSgpKSlcbiAgICAgIC5tYXAoYSA9PiAoeyB0eXBlOiBWaW9sYXRpb25UeXBlLklOVkFMSURfTElDRU5TRSwgbWVzc2FnZTogYERlcGVuZGVuY3kgJHthLnBhY2thZ2V9IGhhcyBhbiBpbnZhbGlkIGxpY2Vuc2U6ICR7YS5saWNlbnNlc1swXX1gIH0pKTtcblxuICAgIGNvbnN0IG5vTGljZW5zZTogVmlvbGF0aW9uW10gPSBBcnJheS5mcm9tKHRoaXMuYXR0cmlidXRpb25zLnZhbHVlcygpKVxuICAgICAgLmZpbHRlcihhID0+IGEubGljZW5zZXMubGVuZ3RoID09PSAwKVxuICAgICAgLm1hcChhID0+ICh7IHR5cGU6IFZpb2xhdGlvblR5cGUuTk9fTElDRU5TRSwgbWVzc2FnZTogYERlcGVuZGVuY3kgJHthLnBhY2thZ2V9IGhhcyBubyBsaWNlbnNlYCB9KSk7XG5cbiAgICBjb25zdCBtdWx0aUxpY2Vuc2U6IFZpb2xhdGlvbltdID0gQXJyYXkuZnJvbSh0aGlzLmF0dHJpYnV0aW9ucy52YWx1ZXMoKSlcbiAgICAgIC5maWx0ZXIoYSA9PiBhLmxpY2Vuc2VzLmxlbmd0aCA+IDEpXG4gICAgICAubWFwKGEgPT4gKHsgdHlwZTogVmlvbGF0aW9uVHlwZS5NVUxUSVBMRV9MSUNFTlNFLCBtZXNzYWdlOiBgRGVwZW5kZW5jeSAke2EucGFja2FnZX0gaGFzIG11bHRpcGxlIGxpY2Vuc2VzOiAke2EubGljZW5zZXN9YCB9KSk7XG5cbiAgICB2aW9sYXRpb25zLnB1c2goLi4uaW52YWxpZExpY2Vuc2UpO1xuICAgIHZpb2xhdGlvbnMucHVzaCguLi5ub0xpY2Vuc2UpO1xuICAgIHZpb2xhdGlvbnMucHVzaCguLi5tdWx0aUxpY2Vuc2UpO1xuXG4gICAgcmV0dXJuIG5ldyBWaW9sYXRpb25zUmVwb3J0KHZpb2xhdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZsdXNoIHRoZSBnZW5lcmF0ZWQgbm90aWNlIGZpbGUgdG8gZGlzay5cbiAgICovXG4gIHB1YmxpYyBmbHVzaCgpIHtcbiAgICBmcy53cml0ZUZpbGVTeW5jKHRoaXMuZmlsZVBhdGgsIHRoaXMuY29udGVudCk7XG4gIH1cblxuICBwcml2YXRlIHJlbmRlcihhdHRyaWJ1dGlvbnM6IE1hcDxzdHJpbmcsIEF0dHJpYnV0aW9uPik6IHN0cmluZyB7XG4gICAgY29uc3QgY29udGVudCA9IFtdO1xuXG4gICAgaWYgKGF0dHJpYnV0aW9ucy5zaXplID4gMCkge1xuICAgICAgY29udGVudC5wdXNoKGBUaGUgJHt0aGlzLnBhY2thZ2VOYW1lfSBwYWNrYWdlIGluY2x1ZGVzIHRoZSBmb2xsb3dpbmcgdGhpcmQtcGFydHkgc29mdHdhcmUvbGljZW5zaW5nOmApO1xuICAgICAgY29udGVudC5wdXNoKCcnKTtcbiAgICB9XG5cbiAgICAvLyBzb3J0IHRoZSBhdHRyaWJ1dGlvbnMgc28gdGhlIGZpbGUgZG9lc24ndCBjaGFuZ2UgZHVlIHRvIG9yZGVyaW5nIGlzc3Vlc1xuICAgIGNvbnN0IG9yZGVyZWQgPSBBcnJheS5mcm9tKGF0dHJpYnV0aW9ucy52YWx1ZXMoKSkuc29ydCgoYTEsIGEyKSA9PiBhMS5wYWNrYWdlLmxvY2FsZUNvbXBhcmUoYTIucGFja2FnZSkpO1xuXG4gICAgZm9yIChjb25zdCBhdHRyIG9mIG9yZGVyZWQpIHtcbiAgICAgIGNvbnRlbnQucHVzaChgKiogJHthdHRyLnBhY2thZ2V9IC0gJHthdHRyLnVybH0gfCAke2F0dHIubGljZW5zZXNbMF19YCk7XG5cbiAgICAgIC8vIHByZWZlciBub3RpY2Ugb3ZlciBsaWNlbnNlXG4gICAgICBpZiAoYXR0ci5ub3RpY2VUZXh0KSB7XG4gICAgICAgIGNvbnRlbnQucHVzaChhdHRyLm5vdGljZVRleHQpO1xuICAgICAgfSBlbHNlIGlmIChhdHRyLmxpY2Vuc2VUZXh0KSB7XG4gICAgICAgIGNvbnRlbnQucHVzaChhdHRyLmxpY2Vuc2VUZXh0KTtcbiAgICAgIH1cbiAgICAgIGNvbnRlbnQucHVzaChBVFRSSUJVVElPTl9TRVBBUkFUT1IpO1xuICAgIH1cblxuICAgIHJldHVybiBjb250ZW50XG4gICAgICAvLyBzaW5jZSB3ZSBhcmUgZW1iZWRkaW5nIGV4dGVybmFsIGZpbGVzLCB0aG9zZSBjYW4gZGlmZmVyZW50IGxpbmVcbiAgICAgIC8vIGVuZGluZ3MsIHNvIHdlIHN0YW5kYXJkaXplIHRvIExGLlxuICAgICAgLm1hcChsID0+IGwucmVwbGFjZSgvXFxyXFxuL2csICdcXG4nKSlcbiAgICAgIC5qb2luKCdcXG4nKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2VuZXJhdGVBdHRyaWJ1dGlvbnMoKTogTWFwPHN0cmluZywgQXR0cmlidXRpb24+IHtcbiAgICBpZiAodGhpcy5kZXBlbmRlbmNpZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gbmV3IE1hcCgpO1xuICAgIH1cblxuICAgIGNvbnN0IGF0dHJpYnV0aW9uczogTWFwPHN0cmluZywgQXR0cmlidXRpb24+ID0gbmV3IE1hcCgpO1xuXG4gICAgY29uc3QgcGtnID0gKGQ6IFBhY2thZ2UpID0+IGAke2QubmFtZX1AJHtkLnZlcnNpb259YDtcblxuICAgIGNvbnN0IHBhY2thZ2VzID0gdGhpcy5kZXBlbmRlbmNpZXMubWFwKGQgPT4gcGtnKGQpKTtcblxuICAgIGZ1bmN0aW9uIGZldGNoSW5mb3MoX2N3ZDogc3RyaW5nLCBfcGFja2FnZXM6IHN0cmluZ1tdKSB7XG4gICAgICAvLyB3ZSBkb24ndCB1c2UgdGhlIHByb2dyYW1tYXRpYyBBUEkgc2luY2UgaXQgb25seSBvZmZlcnMgYW4gYXN5bmMgQVBJLlxuICAgICAgLy8gcHJlZmVyIHRvIHN0YXkgc3luYyBmb3Igbm93IHNpbmNlIGl0cyBlYXNpZXIgdG8gaW50ZWdyYXRlIHdpdGggb3RoZXIgdG9vbGluZy5cbiAgICAgIC8vIHdpbGwgb2ZmZXIgYW4gYXN5bmMgQVBJIGZ1cnRoZXIgZG93biB0aGUgcm9hZC5cbiAgICAgIGNvbnN0IGNvbW1hbmQgPSBgJHtyZXF1aXJlLnJlc29sdmUoJ2xpY2Vuc2UtY2hlY2tlci9iaW4vbGljZW5zZS1jaGVja2VyJyl9IC0tanNvbiAtLXBhY2thZ2VzIFwiJHtfcGFja2FnZXMuam9pbignOycpfVwiYDtcbiAgICAgIGNvbnN0IG91dHB1dCA9IHNoZWxsKGNvbW1hbmQsIHsgY3dkOiBfY3dkLCBxdWlldDogdHJ1ZSB9KTtcbiAgICAgIHJldHVybiBKU09OLnBhcnNlKG91dHB1dCk7XG4gICAgfVxuXG4gICAgLy8gZmlyc3QgcnVuIGEgZ2xvYmFsIGNvbW1hbmQgdG8gZmV0Y2ggYXMgbXVjaCBpbmZvcm1hdGlvbiBpbiBvbmUgc2hvdFxuICAgIGNvbnN0IGluZm9zID0gZmV0Y2hJbmZvcyh0aGlzLmRlcGVuZGVuY2llc1Jvb3QsIHBhY2thZ2VzKTtcblxuICAgIGZvciAoY29uc3QgZGVwIG9mIHRoaXMuZGVwZW5kZW5jaWVzKSB7XG4gICAgICBjb25zdCBrZXkgPSBwa2coZGVwKTtcblxuICAgICAgLy8gc29tZXRpbWVzIHRoZSBkZXBlbmRlbmN5IG1pZ2h0IG5vdCBleGlzdCBmcm9tIGZldGNoaW5nIGluZm9ybWF0aW9uIGdsb2JhbGx5LFxuICAgICAgLy8gc28gd2UgdHJ5IGZldGNoaW5nIGEgY29uY3JldGUgcGFja2FnZS4gdGhpcyBjYW4gaGFwcGVuIGZvciBleGFtcGxlIHdoZW5cbiAgICAgIC8vIHR3byBkaWZmZXJlbnQgbWFqb3IgdmVyc2lvbnMgZXhpc3Qgb2YgdGhlIHNhbWUgZGVwZW5kZW5jeS5cbiAgICAgIGNvbnN0IGluZm86IE1vZHVsZUluZm8gPSBpbmZvc1trZXldID8/IGZldGNoSW5mb3MoZGVwLnBhdGgsIFtwa2coZGVwKV0pW2tleV07XG5cbiAgICAgIGlmICghaW5mbykge1xuICAgICAgICAvLyBtYWtlIHN1cmUgYWxsIGRlcGVuZGVuY2llcyBhcmUgYWNjb3VudGVkIGZvci5cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmFibGUgdG8gbG9jYXRlIGxpY2Vuc2UgaW5mb3JtYXRpb24gZm9yICR7a2V5fSAoJHtkZXAucGF0aH0pYCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG5vdGljZVRleHQgPSBpbmZvLm5vdGljZUZpbGUgPyBmcy5yZWFkRmlsZVN5bmMoaW5mby5ub3RpY2VGaWxlLCB7IGVuY29kaW5nOiAndXRmLTgnIH0pIDogdW5kZWZpbmVkO1xuXG4gICAgICAvLyBmb3Igc29tZSByZWFzb24sIHRoZSBsaWNlbnNlLWNoZWNrZXIgcGFja2FnZSBmYWxscyBiYWNrIHRvIHRoZSBSRUFETUUubWQgZmlsZSBvZiB0aGUgcGFja2FnZSBmb3IgbGljZW5zZVxuICAgICAgLy8gdGV4dC4gdGhpcyBzZWVtcyBzdHJhbmdlLCBkaXNhYmxpbmcgdGhhdCBmb3Igbm93LlxuICAgICAgLy8gc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9kYXZnbGFzcy9saWNlbnNlLWNoZWNrZXIvYmxvYi9tYXN0ZXIvbGliL2xpY2Vuc2UtZmlsZXMuanMjTDlcbiAgICAgIC8vIG5vdGUgdGhhdCBhIG5vbiBleGlzdGluZyBsaWNlbnNlIGZpbGUgaXMgb2sgYXMgbG9uZyBhcyB0aGUgbGljZW5zZSB0eXBlIGNvdWxkIGJlIGV4dHJhY3RlZC5cbiAgICAgIGNvbnN0IGxpY2Vuc2VGaWxlID0gaW5mby5saWNlbnNlRmlsZT8udG9Mb3dlckNhc2UoKS5lbmRzV2l0aCgnLm1kJykgPyB1bmRlZmluZWQgOiBpbmZvLmxpY2Vuc2VGaWxlO1xuICAgICAgY29uc3QgbGljZW5zZVRleHQgPSBsaWNlbnNlRmlsZSA/IGZzLnJlYWRGaWxlU3luYyhsaWNlbnNlRmlsZSwgeyBlbmNvZGluZzogJ3V0Zi04JyB9KSA6IHVuZGVmaW5lZDtcblxuICAgICAgLy8gdGhlIGxpY2Vuc2VzIGtleSBjb21lcyBpbiBkaWZmZXJlbnQgdHlwZXMgYnV0IHdlIGNvbnZlcnQgaXQgaGVyZVxuICAgICAgLy8gdG8gYWx3YXlzIGJlIGFuIGFycmF5LlxuICAgICAgY29uc3QgbGljZW5zZXMgPSAhaW5mby5saWNlbnNlcyA/IHVuZGVmaW5lZCA6IChBcnJheS5pc0FycmF5KGluZm8ubGljZW5zZXMpID8gaW5mby5saWNlbnNlcyA6IFtpbmZvLmxpY2Vuc2VzXSk7XG5cbiAgICAgIGF0dHJpYnV0aW9ucy5zZXQoa2V5LCB7XG4gICAgICAgIHBhY2thZ2U6IGtleSxcbiAgICAgICAgdXJsOiBgaHR0cHM6Ly93d3cubnBtanMuY29tL3BhY2thZ2UvJHtkZXAubmFtZX0vdi8ke2RlcC52ZXJzaW9ufWAsXG4gICAgICAgIGxpY2Vuc2VzOiBsaWNlbnNlcyA/PyBbXSxcbiAgICAgICAgbGljZW5zZVRleHQsXG4gICAgICAgIG5vdGljZVRleHQsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gYXR0cmlidXRpb25zO1xuICB9XG59XG5cbi8qKlxuICogQXR0cmlidXRpb24gb2YgYSBzcGVjaWZpYyBkZXBlbmRlbmN5LlxuICovXG5pbnRlcmZhY2UgQXR0cmlidXRpb24ge1xuICAvKipcbiAgICogQXR0cmlidXRlZCBwYWNrYWdlIChuYW1lICsgdmVyc2lvbilcbiAgICovXG4gIHJlYWRvbmx5IHBhY2thZ2U6IHN0cmluZztcbiAgLyoqXG4gICAqIFVSTCB0byB0aGUgcGFja2FnZS5cbiAgICovXG4gIHJlYWRvbmx5IHVybDogc3RyaW5nO1xuICAvKipcbiAgICogUGFja2FnZSBsaWNlbnNlcy5cbiAgICpcbiAgICogTm90ZSB0aGF0IHNvbWUgcGFja2FnZXMgd2lsbCBtYXkgaGF2ZSBtdWx0aXBsZSBsaWNlbnNlcyxcbiAgICogd2hpY2ggaXMgd2h5IHRoaXMgaXMgYW4gYXJyYXkuIEluIHN1Y2ggY2FzZXMsIHRoZSBsaWNlbnNlXG4gICAqIHZhbGlkYXRpb24gd2lsbCBmYWlsIHNpbmNlIHdlIGN1cnJlbnRseSBkaXNhbGxvdyB0aGlzLlxuICAgKi9cbiAgcmVhZG9ubHkgbGljZW5zZXM6IHN0cmluZ1tdO1xuICAvKipcbiAgICogUGFja2FnZSBsaWNlbnNlIGNvbnRlbnQuXG4gICAqXG4gICAqIEluIGNhc2UgYSBwYWNrYWdlIGhhcyBtdWx0aXBsZSBsaWNlbnNlcywgdGhpcyB3aWxsXG4gICAqIGNvbnRhaW4uLi5vbmUgb2YgdGhlbS4gSXQgY3VycmVudGx5IGRvZXNuJ3QgbWF0dGVyIHdoaWNoXG4gICAqIG9uZSBzaW5jZSBpdCB3aWxsIG5vdCBwYXNzIHZhbGlkYXRpb24gYW55d2F5LlxuICAgKi9cbiAgcmVhZG9ubHkgbGljZW5zZVRleHQ/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBQYWNrYWdlIG5vdGljZS5cbiAgICovXG4gIHJlYWRvbmx5IG5vdGljZVRleHQ/OiBzdHJpbmc7XG59XG4iXX0=
|
package/lib/api/bundle.d.ts
CHANGED
|
@@ -51,6 +51,45 @@ export interface BundleProps {
|
|
|
51
51
|
* @default - no check.
|
|
52
52
|
*/
|
|
53
53
|
readonly test?: string;
|
|
54
|
+
/**
|
|
55
|
+
* Include a sourcemap in the bundle.
|
|
56
|
+
*
|
|
57
|
+
* @default "inline"
|
|
58
|
+
*/
|
|
59
|
+
readonly sourcemap?: 'linked' | 'inline' | 'external' | 'both';
|
|
60
|
+
/**
|
|
61
|
+
* Minifies the bundled code.
|
|
62
|
+
*
|
|
63
|
+
* @default false
|
|
64
|
+
*/
|
|
65
|
+
readonly minify?: boolean;
|
|
66
|
+
/**
|
|
67
|
+
* Removes whitespace from the code.
|
|
68
|
+
* This is enabled by default when `minify` is used.
|
|
69
|
+
*
|
|
70
|
+
* @default false
|
|
71
|
+
*/
|
|
72
|
+
readonly minifyWhitespace?: boolean;
|
|
73
|
+
/**
|
|
74
|
+
* Renames local variables to be shorter.
|
|
75
|
+
* This is enabled by default when `minify` is used.
|
|
76
|
+
*
|
|
77
|
+
* @default false
|
|
78
|
+
*/
|
|
79
|
+
readonly minifyIdentifiers?: boolean;
|
|
80
|
+
/**
|
|
81
|
+
* Rewrites syntax to a more compact format.
|
|
82
|
+
* This is enabled by default when `minify` is used.
|
|
83
|
+
*
|
|
84
|
+
* @default false
|
|
85
|
+
*/
|
|
86
|
+
readonly minifySyntax?: boolean;
|
|
87
|
+
/**
|
|
88
|
+
* Write the metafile into this location.
|
|
89
|
+
*
|
|
90
|
+
* @default - no metafile is written
|
|
91
|
+
*/
|
|
92
|
+
readonly metafile?: string;
|
|
54
93
|
}
|
|
55
94
|
/**
|
|
56
95
|
* Options for `Bundle.pack`.
|
|
@@ -116,6 +155,12 @@ export declare class Bundle {
|
|
|
116
155
|
private readonly allowedLicenses;
|
|
117
156
|
private readonly dontAttribute?;
|
|
118
157
|
private readonly test?;
|
|
158
|
+
private readonly sourcemap?;
|
|
159
|
+
private readonly minify?;
|
|
160
|
+
private readonly minifyWhitespace?;
|
|
161
|
+
private readonly minifyIdentifiers?;
|
|
162
|
+
private readonly minifySyntax?;
|
|
163
|
+
private readonly metafile?;
|
|
119
164
|
private _bundle?;
|
|
120
165
|
private _dependencies?;
|
|
121
166
|
private _dependenciesRoot?;
|
package/lib/api/bundle.js
CHANGED
|
@@ -38,23 +38,29 @@ const DEFAULT_ALLOWED_LICENSES = [
|
|
|
38
38
|
'ISC',
|
|
39
39
|
'BSD-2-Clause',
|
|
40
40
|
'0BSD',
|
|
41
|
+
'MIT OR Apache-2.0',
|
|
41
42
|
];
|
|
42
43
|
/**
|
|
43
44
|
* Bundle class to validate and pack nodejs bundles.
|
|
44
45
|
*/
|
|
45
46
|
class Bundle {
|
|
46
47
|
constructor(props) {
|
|
47
|
-
var _a, _b, _c, _d, _e;
|
|
48
48
|
this.packageDir = props.packageDir;
|
|
49
|
-
this.noticePath =
|
|
49
|
+
this.noticePath = props.attributionsFile ?? 'THIRD_PARTY_LICENSES';
|
|
50
50
|
this.manifest = fs.readJsonSync(path.join(this.packageDir, 'package.json'));
|
|
51
|
-
this.externals =
|
|
52
|
-
this.resources =
|
|
51
|
+
this.externals = props.externals ?? {};
|
|
52
|
+
this.resources = props.resources ?? {};
|
|
53
53
|
this.test = props.test;
|
|
54
|
-
this.allowedLicenses =
|
|
54
|
+
this.allowedLicenses = props.allowedLicenses ?? DEFAULT_ALLOWED_LICENSES;
|
|
55
55
|
this.dontAttribute = props.dontAttribute;
|
|
56
56
|
this.entryPoints = {};
|
|
57
|
-
|
|
57
|
+
this.sourcemap = props.sourcemap;
|
|
58
|
+
this.minify = props.minify;
|
|
59
|
+
this.minifyWhitespace = props.minifyWhitespace;
|
|
60
|
+
this.minifyIdentifiers = props.minifyIdentifiers;
|
|
61
|
+
this.minifySyntax = props.minifySyntax;
|
|
62
|
+
this.metafile = props.metafile;
|
|
63
|
+
const entryPoints = props.entryPoints ?? (this.manifest.main ? [this.manifest.main] : []);
|
|
58
64
|
if (entryPoints.length === 0) {
|
|
59
65
|
throw new Error('Must configure at least 1 entrypoint');
|
|
60
66
|
}
|
|
@@ -75,8 +81,7 @@ class Bundle {
|
|
|
75
81
|
* returned report and act accordingly.
|
|
76
82
|
*/
|
|
77
83
|
validate(options = {}) {
|
|
78
|
-
|
|
79
|
-
const fix = (_a = options.fix) !== null && _a !== void 0 ? _a : false;
|
|
84
|
+
const fix = options.fix ?? false;
|
|
80
85
|
// first validate
|
|
81
86
|
const circularImports = this.validateCircularImports();
|
|
82
87
|
const resources = this.validateResources();
|
|
@@ -124,8 +129,7 @@ class Bundle {
|
|
|
124
129
|
* Returns the location of the tarball.
|
|
125
130
|
*/
|
|
126
131
|
pack(options = {}) {
|
|
127
|
-
|
|
128
|
-
const target = (_a = options.target) !== null && _a !== void 0 ? _a : this.packageDir;
|
|
132
|
+
const target = options.target ?? this.packageDir;
|
|
129
133
|
const report = this.validate();
|
|
130
134
|
if (!report.success) {
|
|
131
135
|
throw new Error(`Unable to pack due to validation errors.\n\n${report.summary}`);
|
|
@@ -143,7 +147,7 @@ class Bundle {
|
|
|
143
147
|
try {
|
|
144
148
|
if (this.test) {
|
|
145
149
|
const command = `${path.join(bundleDir, this.test)}`;
|
|
146
|
-
console.log(`Running
|
|
150
|
+
console.log(`Running sanity test: ${command}`);
|
|
147
151
|
(0, _shell_1.shell)(command, { cwd: bundleDir });
|
|
148
152
|
}
|
|
149
153
|
// create the tarball
|
|
@@ -170,7 +174,7 @@ class Bundle {
|
|
|
170
174
|
}
|
|
171
175
|
const inputs = Object.keys(this.bundle.metafile.inputs);
|
|
172
176
|
const packages = new Set(Array.from(inputs).map(i => this.closestPackagePath(path.join(this.packageDir, i))));
|
|
173
|
-
this._dependencies = Array.from(packages).map(p => this.createPackage(p)).filter(d => d.name !== this.manifest.name);
|
|
177
|
+
this._dependencies = Array.from(packages).map(p => this.createPackage(p)).filter(d => d.name !== undefined && d.name !== this.manifest.name);
|
|
174
178
|
return this._dependencies;
|
|
175
179
|
}
|
|
176
180
|
get dependenciesRoot() {
|
|
@@ -196,15 +200,14 @@ class Bundle {
|
|
|
196
200
|
return this._attributions;
|
|
197
201
|
}
|
|
198
202
|
findExternalDependencyVersion(name) {
|
|
199
|
-
var _a, _b;
|
|
200
203
|
const versions = new Set();
|
|
201
204
|
// external dependencies will not exist in the dependencies list
|
|
202
205
|
// since esbuild skips over them. but they will exist as a dependency of
|
|
203
206
|
// one of them (or of us)
|
|
204
207
|
for (const pkg of [...this.dependencies, this.createPackage(this.packageDir)]) {
|
|
205
208
|
const manifest = fs.readJSONSync(path.join(pkg.path, 'package.json'));
|
|
206
|
-
const runtime = (
|
|
207
|
-
const optional = (
|
|
209
|
+
const runtime = (manifest.dependencies ?? {})[name];
|
|
210
|
+
const optional = (manifest.optionalDependencies ?? {})[name];
|
|
208
211
|
const pin = (version) => (version.startsWith('^') || version.startsWith('~')) ? version.substring(1) : version;
|
|
209
212
|
if (runtime) {
|
|
210
213
|
versions.add(pin(runtime));
|
|
@@ -236,21 +239,28 @@ class Bundle {
|
|
|
236
239
|
return { path: packageDir, name: manifest.name, version: manifest.version };
|
|
237
240
|
}
|
|
238
241
|
esbuild() {
|
|
239
|
-
var _a, _b;
|
|
240
242
|
const bundle = esbuild.buildSync({
|
|
241
243
|
entryPoints: this.entryPoints,
|
|
242
244
|
bundle: true,
|
|
243
|
-
target: '
|
|
245
|
+
target: 'node18',
|
|
244
246
|
platform: 'node',
|
|
245
|
-
sourcemap:
|
|
247
|
+
sourcemap: this.sourcemap,
|
|
246
248
|
metafile: true,
|
|
249
|
+
minify: this.minify,
|
|
250
|
+
minifyWhitespace: this.minifyWhitespace,
|
|
251
|
+
minifyIdentifiers: this.minifyIdentifiers,
|
|
252
|
+
minifySyntax: this.minifySyntax,
|
|
247
253
|
treeShaking: true,
|
|
248
254
|
absWorkingDir: this.packageDir,
|
|
249
|
-
external: [...(
|
|
255
|
+
external: [...(this.externals.dependencies ?? []), ...(this.externals.optionalDependencies ?? [])],
|
|
250
256
|
write: false,
|
|
251
257
|
outdir: this.packageDir,
|
|
252
258
|
allowOverwrite: true,
|
|
253
259
|
});
|
|
260
|
+
// Write metafile only when requested
|
|
261
|
+
if (this.metafile) {
|
|
262
|
+
fs.writeFileSync(this.metafile, JSON.stringify(bundle.metafile, null, 2));
|
|
263
|
+
}
|
|
254
264
|
if (bundle.warnings.length > 0) {
|
|
255
265
|
// esbuild warnings are usually important, lets try to be strict here.
|
|
256
266
|
// the warnings themselves are printed on screen.
|
|
@@ -295,31 +305,28 @@ class Bundle {
|
|
|
295
305
|
return this.attributions.validate().violations;
|
|
296
306
|
}
|
|
297
307
|
addExternals(manifest) {
|
|
298
|
-
var _a, _b, _c, _d;
|
|
299
308
|
// external dependencies should be specified as runtime dependencies
|
|
300
|
-
for (const external of
|
|
309
|
+
for (const external of this.externals.dependencies ?? []) {
|
|
301
310
|
const version = this.findExternalDependencyVersion(external);
|
|
302
|
-
manifest.dependencies =
|
|
311
|
+
manifest.dependencies = manifest.dependencies ?? {};
|
|
303
312
|
manifest.dependencies[external] = version;
|
|
304
313
|
}
|
|
305
314
|
// external dependencies should be specified as optional dependencies
|
|
306
|
-
for (const external of
|
|
315
|
+
for (const external of this.externals.optionalDependencies ?? []) {
|
|
307
316
|
const version = this.findExternalDependencyVersion(external);
|
|
308
|
-
manifest.optionalDependencies =
|
|
317
|
+
manifest.optionalDependencies = manifest.optionalDependencies ?? {};
|
|
309
318
|
manifest.optionalDependencies[external] = version;
|
|
310
319
|
}
|
|
311
320
|
}
|
|
312
321
|
removeDependencies(manifest) {
|
|
313
|
-
var _a;
|
|
314
322
|
for (const [d, v] of Object.entries(this.manifest.dependencies)) {
|
|
315
|
-
manifest.devDependencies =
|
|
323
|
+
manifest.devDependencies = manifest.devDependencies ?? {};
|
|
316
324
|
manifest.devDependencies[d] = v;
|
|
317
325
|
delete manifest.dependencies[d];
|
|
318
326
|
}
|
|
319
327
|
}
|
|
320
328
|
writeOutputs(workDir) {
|
|
321
|
-
|
|
322
|
-
for (const output of (_a = this.bundle.outputFiles) !== null && _a !== void 0 ? _a : []) {
|
|
329
|
+
for (const output of this.bundle.outputFiles ?? []) {
|
|
323
330
|
const out = output.path.replace(this.packageDir, workDir);
|
|
324
331
|
fs.writeFileSync(out, output.contents);
|
|
325
332
|
}
|
|
@@ -349,4 +356,4 @@ function longestCommonParent(paths) {
|
|
|
349
356
|
}
|
|
350
357
|
return paths.reduce(_longestCommonParent);
|
|
351
358
|
}
|
|
352
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVuZGxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FwaS9idW5kbGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSx1Q0FBeUI7QUFDekIsMkNBQTZCO0FBQzdCLGlEQUFtQztBQUNuQyw2Q0FBK0I7QUFDL0IsbURBQStDO0FBQy9DLHFDQUFpQztBQUNqQywyQ0FBeUU7QUFFekUsTUFBTSx3QkFBd0IsR0FBRztJQUMvQixZQUFZO0lBQ1osS0FBSztJQUNMLGNBQWM7SUFDZCxLQUFLO0lBQ0wsY0FBYztJQUNkLE1BQU07Q0FDUCxDQUFDO0FBd0hGOztHQUVHO0FBQ0gsTUFBYSxNQUFNO0lBbUJqQixZQUFZLEtBQWtCOztRQUM1QixJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQyxVQUFVLENBQUM7UUFDbkMsSUFBSSxDQUFDLFVBQVUsR0FBRyxNQUFBLEtBQUssQ0FBQyxnQkFBZ0IsbUNBQUksc0JBQXNCLENBQUM7UUFDbkUsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxjQUFjLENBQUMsQ0FBQyxDQUFDO1FBQzVFLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBQSxLQUFLLENBQUMsU0FBUyxtQ0FBSSxFQUFFLENBQUM7UUFDdkMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFBLEtBQUssQ0FBQyxTQUFTLG1DQUFJLEVBQUUsQ0FBQztRQUN2QyxJQUFJLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUM7UUFDdkIsSUFBSSxDQUFDLGVBQWUsR0FBRyxNQUFBLEtBQUssQ0FBQyxlQUFlLG1DQUFJLHdCQUF3QixDQUFDO1FBQ3pFLElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDLGFBQWEsQ0FBQztRQUN6QyxJQUFJLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQztR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cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgb3MgZnJvbSAnb3MnO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCAqIGFzIGVzYnVpbGQgZnJvbSAnZXNidWlsZCc7XG5pbXBvcnQgKiBhcyBmcyBmcm9tICdmcy1leHRyYSc7XG5pbXBvcnQgeyBBdHRyaWJ1dGlvbnMgfSBmcm9tICcuL19hdHRyaWJ1dGlvbnMnO1xuaW1wb3J0IHsgc2hlbGwgfSBmcm9tICcuL19zaGVsbCc7XG5pbXBvcnQgeyBWaW9sYXRpb24sIFZpb2xhdGlvblR5cGUsIFZpb2xhdGlvbnNSZXBvcnQgfSBmcm9tICcuL3Zpb2xhdGlvbic7XG5cbmNvbnN0IERFRkFVTFRfQUxMT1dFRF9MSUNFTlNFUyA9IFtcbiAgJ0FwYWNoZS0yLjAnLFxuICAnTUlUJyxcbiAgJ0JTRC0zLUNsYXVzZScsXG4gICdJU0MnLFxuICAnQlNELTItQ2xhdXNlJyxcbiAgJzBCU0QnLFxuXTtcblxuLyoqXG4gKiBCdW5kbGluZyBwcm9wZXJ0aWVzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEJ1bmRsZVByb3BzIHtcblxuICAvKipcbiAgICogRGlyZWN0b3J5IHdoZXJlIHRoZSBwYWNrYWdlIHRvIGJ1bmRsZSBpcyBsb2NhdGVkIGF0LlxuICAgKi9cbiAgcmVhZG9ubHkgcGFja2FnZURpcjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBMaXN0IG9mIGVudHJ5LXBvaW50cyB0byBidW5kbGUuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gdGhlICdtYWluJyBmaWxlIGFzIHNwZWNpZmllZCBpbiBwYWNrYWdlLmpzb24uXG4gICAqL1xuICByZWFkb25seSBlbnRyeVBvaW50cz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBQYXRoIHRvIGF0dHJpYnV0aW9ucyBmaWxlIHRoYXQgd2lsbCBiZSBjcmVhdGVkIC8gdmFsaWRhdGVkLlxuICAgKiBUaGlzIHBhdGggaXMgcmVsYXRpdmUgdG8gdGhlIHBhY2thZ2UgZGlyZWN0b3J5LlxuICAgKlxuICAgKiBAZGVmYXVsdCAnVEhJUkRfUEFSVFlfTElDRU5TRVMnXG4gICAqL1xuICByZWFkb25seSBhdHRyaWJ1dGlvbnNGaWxlPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBFeHRlcm5hbCBwYWNrYWdlcyB0aGF0IGNhbm5vdCBiZSBidW5kbGVkLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vIGV4dGVybmFsIHJlZmVyZW5jZXMuXG4gICAqL1xuICByZWFkb25seSBleHRlcm5hbHM/OiBFeHRlcm5hbHM7XG5cbiAgLyoqXG4gICAqIEV4dGVybmFsIHJlc291cmNlcyB0aGF0IG5lZWQgdG8gYmUgZW1iZWRkZWQgaW4gdGhlIGJ1bmRsZS5cbiAgICpcbiAgICogVGhlc2Ugd2lsbCBiZSBjb3BpZWQgb3ZlciB0byB0aGUgYXBwcm9wcmlhdGUgcGF0aHMgYmVmb3JlIHBhY2thZ2luZy5cbiAgICovXG4gIHJlYWRvbmx5IHJlc291cmNlcz86IHtbc3JjOiBzdHJpbmddOiBzdHJpbmd9O1xuXG4gIC8qKlxuICAgKiBBIGxpc3Qgb2YgbGljZW5zZXMgdGhhdCBhcmUgYWxsb3dlZCBmb3IgYnVuZGxpbmcuXG4gICAqIElmIGFueSBkZXBlbmRlbmN5IGNvbnRhaW5zIGEgbGljZW5zZSBub3QgaW4gdGhpcyBsaXN0LCBidW5kbGluZyB3aWxsIGZhaWwuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gRGVmYXVsdCBsaXN0XG4gICAqL1xuICByZWFkb25seSBhbGxvd2VkTGljZW5zZXM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogUGFja2FnZXMgbWF0Y2hpbmcgdGhpcyByZWd1bGFyIGV4cHJlc3Npb24gd2lsbCBiZSBleGNsdWRlZCBmcm9tIGF0dHJpYnV0aW9uLlxuICAgKi9cbiAgcmVhZG9ubHkgZG9udEF0dHJpYnV0ZT86IHN0cmluZztcblxuICAvKipcbiAgICogQmFzaWMgc2FuaXR5IGNoZWNrIHRvIHJ1biBhZ2FpbnN0IHRoZSBjcmVhdGVkIGJ1bmRsZS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBubyBjaGVjay5cbiAgICovXG4gIHJlYWRvbmx5IHRlc3Q/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgYEJ1bmRsZS5wYWNrYC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCdW5kbGVQYWNrT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgdGFyZ2V0IGRpcmVjdG9yeSB0byBjcmVhdGUgdGhlIHBhY2thZ2UgaW4uXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gdGhlIHBhY2thZ2UgZGlyZWN0b3J5LlxuICAgKi9cbiAgcmVhZG9ubHkgdGFyZ2V0Pzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEJ1bmRsZVZhbGlkYXRlT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBBdXRvbWF0aWNhbGx5IGZpeCBhbnkgKGZpeGFibGUpIHZpb2xhdGlvbnMuXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBmaXg/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIFBhY2thZ2Ugb24gdGhlIGxvY2FsIGZpbGUgc3lzdGVtLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBhY2thZ2Uge1xuICAvKipcbiAgICogUGF0aCBvZiB0aGUgZGVwZW5kZW5jeSBvbiB0aGUgbG9jYWwgZmlsZSBzeXN0ZW0uXG4gICAqL1xuICByZWFkb25seSBwYXRoOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBEZXBlbmRlbmN5IG5hbWUuXG4gICAqL1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBEZXBlbmRlbmN5IHZlcnNpb24uXG4gICAqL1xuICByZWFkb25seSB2ZXJzaW9uOiBzdHJpbmc7XG59XG5cbi8qKlxuICogRXh0ZXJuYWwgcGFja2FnZXMgdGhhdCBjYW5ub3QgYmUgYnVuZGxlZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFeHRlcm5hbHMge1xuXG4gIC8qKlxuICAgKiBFeHRlcm5hbCBwYWNrYWdlcyB0aGF0IHNob3VsZCBiZSBsaXN0ZWQgaW4gdGhlIGBkZXBlbmRlbmNpZXNgIHNlY3Rpb25cbiAgICogb2YgdGhlIG1hbmlmZXN0LlxuICAgKi9cbiAgcmVhZG9ubHkgZGVwZW5kZW5jaWVzPzogcmVhZG9ubHkgc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIEV4dGVybmFsIHBhY2thZ2VzIHRoYXQgc2hvdWxkIGJlIGxpc3RlZCBpbiB0aGUgYG9wdGlvbmFsRGVwZW5kZW5jaWVzYCBzZWN0aW9uXG4gICAqIG9mIHRoZSBtYW5pZmVzdC5cbiAgICovXG4gIHJlYWRvbmx5IG9wdGlvbmFsRGVwZW5kZW5jaWVzPzogcmVhZG9ubHkgc3RyaW5nW107XG5cbn1cblxuLyoqXG4gKiBCdW5kbGUgY2xhc3MgdG8gdmFsaWRhdGUgYW5kIHBhY2sgbm9kZWpzIGJ1bmRsZXMuXG4gKi9cbmV4cG9ydCBjbGFzcyBCdW5kbGUge1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgbWFuaWZlc3Q6IGFueTtcbiAgcHJpdmF0ZSByZWFkb25seSBub3RpY2VQYXRoOiBzdHJpbmc7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBwYWNrYWdlRGlyOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgZW50cnlQb2ludHM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIHByaXZhdGUgcmVhZG9ubHkgZXh0ZXJuYWxzOiBFeHRlcm5hbHM7XG4gIHByaXZhdGUgcmVhZG9ubHkgcmVzb3VyY2VzOiB7W3NyYzogc3RyaW5nXTogc3RyaW5nfTtcbiAgcHJpdmF0ZSByZWFkb25seSBhbGxvd2VkTGljZW5zZXM6IHN0cmluZ1tdO1xuICBwcml2YXRlIHJlYWRvbmx5IGRvbnRBdHRyaWJ1dGU/OiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgdGVzdD86IHN0cmluZztcblxuICBwcml2YXRlIF9idW5kbGU/OiBlc2J1aWxkLkJ1aWxkUmVzdWx0O1xuICBwcml2YXRlIF9kZXBlbmRlbmNpZXM/OiBQYWNrYWdlW107XG4gIHByaXZhdGUgX2RlcGVuZGVuY2llc1Jvb3Q/OiBzdHJpbmc7XG5cbiAgcHJpdmF0ZSBfYXR0cmlidXRpb25zPzogQXR0cmlidXRpb25zO1xuXG4gIGNvbnN0cnVjdG9yKHByb3BzOiBCdW5kbGVQcm9wcykge1xuICAgIHRoaXMucGFja2FnZURpciA9IHByb3BzLnBhY2thZ2VEaXI7XG4gICAgdGhpcy5ub3RpY2VQYXRoID0gcHJvcHMuYXR0cmlidXRpb25zRmlsZSA/PyAnVEhJUkRfUEFSVFlfTElDRU5TRVMnO1xuICAgIHRoaXMubWFuaWZlc3QgPSBmcy5yZWFkSnNvblN5bmMocGF0aC5qb2luKHRoaXMucGFja2FnZURpciwgJ3BhY2thZ2UuanNvbicpKTtcbiAgICB0aGlzLmV4dGVybmFscyA9IHByb3BzLmV4dGVybmFscyA/PyB7fTtcbiAgICB0aGlzLnJlc291cmNlcyA9IHByb3BzLnJlc291cmNlcyA/PyB7fTtcbiAgICB0aGlzLnRlc3QgPSBwcm9wcy50ZXN0O1xuICAgIHRoaXMuYWxsb3dlZExpY2Vuc2VzID0gcHJvcHMuYWxsb3dlZExpY2Vuc2VzID8/IERFRkFVTFRfQUxMT1dFRF9MSUNFTlNFUztcbiAgICB0aGlzLmRvbnRBdHRyaWJ1dGUgPSBwcm9wcy5kb250QXR0cmlidXRlO1xuICAgIHRoaXMuZW50cnlQb2ludHMgPSB7fTtcblxuICAgIGNvbnN0IGVudHJ5UG9pbnRzID0gcHJvcHMuZW50cnlQb2ludHMgPz8gKHRoaXMubWFuaWZlc3QubWFpbiA/IFt0aGlzLm1hbmlmZXN0Lm1haW5dIDogW10pO1xuXG4gICAgaWYgKGVudHJ5UG9pbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdNdXN0IGNvbmZpZ3VyZSBhdCBsZWFzdCAxIGVudHJ5cG9pbnQnKTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGVudHJ5cG9pbnQgb2YgZW50cnlQb2ludHMpIHtcbiAgICAgIGlmICghZnMuZXhpc3RzU3luYyhwYXRoLmpvaW4odGhpcy5wYWNrYWdlRGlyLCBlbnRyeXBvaW50KSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmFibGUgdG8gbG9jYXRlIGVudHJ5cG9pbnQ6ICR7ZW50cnlwb2ludH1gKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuZW50cnlQb2ludHNbZW50cnlwb2ludC5yZXBsYWNlKCcuanMnLCAnJyldID0gZW50cnlwb2ludDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGUgdGhlIGJ1bmRsZSBmb3IgdmlvbGF0aW9ucy5cbiAgICpcbiAgICogSWYgYGZpeGAgaXMgc2V0IHRvIHRydWUsIHRoaXMgbWV0aG9kIHdpbGwgcmV0dXJuIHRoZSByZW1haW5pbmdcbiAgICogdmlvbGF0aW9ucyBhZnRlciB0aGUgZml4ZXMgd2VyZSBhcHBsaWVkLlxuICAgKlxuICAgKiBUaGlzIG1ldGhvZCBuZXZlciB0aHJvd3MuIFRoZSBDYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIGluc3BlY3RpbmcgdGhlXG4gICAqIHJldHVybmVkIHJlcG9ydCBhbmQgYWN0IGFjY29yZGluZ2x5LlxuICAgKi9cbiAgcHVibGljIHZhbGlkYXRlKG9wdGlvbnM6IEJ1bmRsZVZhbGlkYXRlT3B0aW9ucyA9IHt9KTogVmlvbGF0aW9uc1JlcG9ydCB7XG5cbiAgICBjb25zdCBmaXggPSBvcHRpb25zLmZpeCA/PyBmYWxzZTtcblxuICAgIC8vIGZpcnN0IHZhbGlkYXRlXG4gICAgY29uc3QgY2lyY3VsYXJJbXBvcnRzID0gdGhpcy52YWxpZGF0ZUNpcmN1bGFySW1wb3J0cygpO1xuICAgIGNvbnN0IHJlc291cmNlcyA9IHRoaXMudmFsaWRhdGVSZXNvdXJjZXMoKTtcbiAgICBjb25zdCBhdHRyaWJ1dGlvbnMgPSB0aGlzLnZhbGlkYXRlQXR0cmlidXRpb25zKCk7XG5cbiAgICBjb25zdCByZXBvcnQgPSBuZXcgVmlvbGF0aW9uc1JlcG9ydChbLi4uY2lyY3VsYXJJbXBvcnRzLCAuLi5yZXNvdXJjZXMsIC4uLmF0dHJpYnV0aW9uc10pO1xuXG4gICAgaWYgKCFmaXgpIHtcbiAgICAgIHJldHVybiByZXBvcnQ7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCB2aW9sYXRpb24gb2YgcmVwb3J0LnZpb2xhdGlvbnMpIHtcbiAgICAgIGlmICh2aW9sYXRpb24uZml4KSB7XG4gICAgICAgIHZpb2xhdGlvbi5maXgoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyByZXR1cm4gdGhlIHVuIGZpeGFibGUgdmlvbGF0aW9uc1xuICAgIHJldHVybiBuZXcgVmlvbGF0aW9uc1JlcG9ydChyZXBvcnQudmlvbGF0aW9ucy5maWx0ZXIodiA9PiAhdi5maXgpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXcml0ZSB0aGUgYnVuZGxlIHZlcnNpb24gb2YgdGhlIHByb2plY3QgdG8gYSB0ZW1wIGRpcmVjdG9yeS5cbiAgICogVGhpcyBkaXJlY3RvcnkgaXMgd2hhdCB0aGUgdG9vbCB3aWxsIGVuZCB1cCBwYWNraW5nLlxuICAgKlxuICAgKiBSZXR1cm5zIHRoZSB0ZW1wIGRpcmVjdG9yeSBsb2NhdGlvbi5cbiAgICovXG4gIHB1YmxpYyB3cml0ZSgpOiBzdHJpbmcge1xuXG4gICAgY29uc3QgdGFyZ2V0ID0gZnMubWtkdGVtcFN5bmMocGF0aC5qb2luKG9zLnRtcGRpcigpLCAnYnVuZGxlLXdyaXRlLScpKTtcblxuICAgIC8vIHdlIGRlZmluaXRlbHkgZG9uJ3QgbmVlZCB0aGVzZSBkaXJlY3RvcmllcyBpbiB0aGUgcGFja2FnZVxuICAgIC8vIHNvIG5vIG5lZWQgdG8gY29weSB0aGVtIG92ZXIuXG4gICAgY29uc3QgaWdub3JlRGlyZWN0b3JpZXMgPSBbJ25vZGVfbW9kdWxlcycsICcuZ2l0J107XG5cbiAgICAvLyBjb3B5IHRoZSBlbnRpcmUgcHJvamVjdCBzaW5jZSB3ZSBhcmUgcmV0YWluaW5nIHRoZSBvcmlnaW5hbCBmaWxlcy5cbiAgICBmcy5jb3B5U3luYyh0aGlzLnBhY2thZ2VEaXIsIHRhcmdldCwgeyBmaWx0ZXI6IG4gPT4gIW4uc3BsaXQocGF0aC5zZXApLnNvbWUoKHAgPT4gaWdub3JlRGlyZWN0b3JpZXMuaW5jbHVkZXMocCkpKSB9KTtcblxuICAgIC8vIGNsb25lIHRoZSBvcmlnaW5hbCBtYW5pZmVzdCBzaW5jZSB3ZSBhcmUgZ29pbmcgdG9cbiAgICAvLyB0byBtdXRhdGUgaXQuXG4gICAgY29uc3QgbWFuaWZlc3QgPSB7IC4uLnRoaXMubWFuaWZlc3QgfTtcblxuICAgIC8vIG1hbmlmZXN0IG11dGF0aW9uc1xuICAgIHRoaXMucmVtb3ZlRGVwZW5kZW5jaWVzKG1hbmlmZXN0KTtcbiAgICB0aGlzLmFkZEV4dGVybmFscyhtYW5pZmVzdCk7XG5cbiAgICAvLyB3cml0ZSBhcnRpZmFjdHNcbiAgICB0aGlzLndyaXRlT3V0cHV0cyh0YXJnZXQpO1xuICAgIHRoaXMud3JpdGVSZXNvdXJjZXModGFyZ2V0KTtcbiAgICB0aGlzLndyaXRlTWFuaWZlc3QodGFyZ2V0LCBtYW5pZmVzdCk7XG5cbiAgICByZXR1cm4gdGFyZ2V0O1xuICB9XG5cbiAgLyoqXG4gICAqIFdyaXRlIHRoZSBidW5kbGUgYW5kIGNyZWF0ZSB0aGUgdGFyYmFsbC5cbiAgICpcbiAgICogUmV0dXJucyB0aGUgbG9jYXRpb24gb2YgdGhlIHRhcmJhbGwuXG4gICAqL1xuICBwdWJsaWMgcGFjayhvcHRpb25zOiBCdW5kbGVQYWNrT3B0aW9ucyA9IHt9KTogc3RyaW5nIHtcblxuICAgIGNvbnN0IHRhcmdldCA9IG9wdGlvbnMudGFyZ2V0ID8/IHRoaXMucGFja2FnZURpcjtcblxuICAgIGNvbnN0IHJlcG9ydCA9IHRoaXMudmFsaWRhdGUoKTtcbiAgICBpZiAoIXJlcG9ydC5zdWNjZXNzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuYWJsZSB0byBwYWNrIGR1ZSB0byB2YWxpZGF0aW9uIGVycm9ycy5cXG5cXG4ke3JlcG9ydC5zdW1tYXJ5fWApO1xuICAgIH1cblxuICAgIGlmICghZnMuZXhpc3RzU3luYyh0YXJnZXQpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFRhcmdldCBkb2VzbnQgZXhpc3Q6ICR7dGFyZ2V0fWApO1xuICAgIH1cblxuICAgIC8vIHJlc29sdmUgc3ltbGlua3MuXG4gICAgY29uc3QgcmVhbFRhcmdldCA9IGZzLnJlYWxwYXRoU3luYyh0YXJnZXQpO1xuXG4gICAgaWYgKCFmcy5sc3RhdFN5bmMocmVhbFRhcmdldCkuaXNEaXJlY3RvcnkoKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBUYXJnZXQgbXVzdCBiZSBhIGRpcmVjdG9yeTogJHt0YXJnZXR9YCk7XG4gICAgfVxuXG4gICAgY29uc29sZS5sb2coJ1dyaXRpbmcgYnVuZGxlJyk7XG4gICAgY29uc3QgYnVuZGxlRGlyID0gdGhpcy53cml0ZSgpO1xuICAgIHRyeSB7XG5cbiAgICAgIGlmICh0aGlzLnRlc3QpIHtcbiAgICAgICAgY29uc3QgY29tbWFuZCA9IGAke3BhdGguam9pbihidW5kbGVEaXIsIHRoaXMudGVzdCl9YDtcbiAgICAgICAgY29uc29sZS5sb2coYFJ1bm5pbmcgc2FudGl5IHRlc3Q6ICR7Y29tbWFuZH1gKTtcbiAgICAgICAgc2hlbGwoY29tbWFuZCwgeyBjd2Q6IGJ1bmRsZURpciB9KTtcbiAgICAgIH1cblxuICAgICAgLy8gY3JlYXRlIHRoZSB0YXJiYWxsXG4gICAgICBjb25zb2xlLmxvZygnUGFja2luZycpO1xuICAgICAgY29uc3QgdGFyYmFsbCA9IHNoZWxsKCducG0gcGFjaycsIHsgcXVpZXQ6IHRydWUsIGN3ZDogYnVuZGxlRGlyIH0pLnRyaW0oKTtcbiAgICAgIGNvbnN0IGRlc3QgPSBwYXRoLmpvaW4ocmVhbFRhcmdldCwgdGFyYmFsbCk7XG4gICAgICBmcy5jb3B5U3luYyhwYXRoLmpvaW4oYnVuZGxlRGlyLCB0YXJiYWxsKSwgZGVzdCwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgICByZXR1cm4gZGVzdDtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgZnMucmVtb3ZlU3luYyhidW5kbGVEaXIpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0IGJ1bmRsZSgpOiBlc2J1aWxkLkJ1aWxkUmVzdWx0IHtcbiAgICBpZiAodGhpcy5fYnVuZGxlKSB7XG4gICAgICByZXR1cm4gdGhpcy5fYnVuZGxlO1xuICAgIH1cbiAgICB0aGlzLl9idW5kbGUgPSB0aGlzLmVzYnVpbGQoKTtcbiAgICByZXR1cm4gdGhpcy5fYnVuZGxlO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgZGVwZW5kZW5jaWVzKCk6IFBhY2thZ2VbXSB7XG4gICAgaWYgKHRoaXMuX2RlcGVuZGVuY2llcykge1xuICAgICAgcmV0dXJuIHRoaXMuX2RlcGVuZGVuY2llcztcbiAgICB9XG4gICAgY29uc3QgaW5wdXRzID0gT2JqZWN0LmtleXModGhpcy5idW5kbGUubWV0YWZpbGUhLmlucHV0cyk7XG4gICAgY29uc3QgcGFja2FnZXMgPSBuZXcgU2V0KEFycmF5LmZyb20oaW5wdXRzKS5tYXAoaSA9PiB0aGlzLmNsb3Nlc3RQYWNrYWdlUGF0aChwYXRoLmpvaW4odGhpcy5wYWNrYWdlRGlyLCBpKSkpKTtcbiAgICB0aGlzLl9kZXBlbmRlbmNpZXMgPSBBcnJheS5mcm9tKHBhY2thZ2VzKS5tYXAocCA9PiB0aGlzLmNyZWF0ZVBhY2thZ2UocCkpLmZpbHRlcihkID0+IGQubmFtZSAhPT0gdGhpcy5tYW5pZmVzdC5uYW1lKTtcbiAgICByZXR1cm4gdGhpcy5fZGVwZW5kZW5jaWVzO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgZGVwZW5kZW5jaWVzUm9vdCgpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLl9kZXBlbmRlbmNpZXNSb290KSB7XG4gICAgICByZXR1cm4gdGhpcy5fZGVwZW5kZW5jaWVzUm9vdDtcbiAgICB9XG4gICAgY29uc3QgbGNwID0gbG9uZ2VzdENvbW1vblBhcmVudCh0aGlzLmRlcGVuZGVuY2llcy5tYXAoZCA9PiBkLnBhdGgpKTtcbiAgICB0aGlzLl9kZXBlbmRlbmNpZXNSb290ID0gdGhpcy5jbG9zZXN0UGFja2FnZVBhdGgobGNwKTtcbiAgICByZXR1cm4gdGhpcy5fZGVwZW5kZW5jaWVzUm9vdDtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IGF0dHJpYnV0aW9ucygpOiBBdHRyaWJ1dGlvbnMge1xuICAgIGlmICh0aGlzLl9hdHRyaWJ1dGlvbnMgPT0gbnVsbCkge1xuICAgICAgdGhpcy5fYXR0cmlidXRpb25zID0gbmV3IEF0dHJpYnV0aW9ucyh7XG4gICAgICAgIHBhY2thZ2VEaXI6IHRoaXMucGFja2FnZURpcixcbiAgICAgICAgcGFja2FnZU5hbWU6IHRoaXMubWFuaWZlc3QubmFtZSxcbiAgICAgICAgZmlsZVBhdGg6IHRoaXMubm90aWNlUGF0aCxcbiAgICAgICAgZGVwZW5kZW5jaWVzOiB0aGlzLmRlcGVuZGVuY2llcyxcbiAgICAgICAgZGVwZW5kZW5jaWVzUm9vdDogdGhpcy5kZXBlbmRlbmNpZXNSb290LFxuICAgICAgICBleGNsdWRlOiB0aGlzLmRvbnRBdHRyaWJ1dGUsXG4gICAgICAgIGFsbG93ZWRMaWNlbnNlczogdGhpcy5hbGxvd2VkTGljZW5zZXMsXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX2F0dHJpYnV0aW9ucztcbiAgfVxuXG4gIHByaXZhdGUgZmluZEV4dGVybmFsRGVwZW5kZW5jeVZlcnNpb24obmFtZTogc3RyaW5nKTogc3RyaW5nIHtcblxuICAgIGNvbnN0IHZlcnNpb25zID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cbiAgICAvLyBleHRlcm5hbCBkZXBlbmRlbmNpZXMgd2lsbCBub3QgZXhpc3QgaW4gdGhlIGRlcGVuZGVuY2llcyBsaXN0XG4gICAgLy8gc2luY2UgZXNidWlsZCBza2lwcyBvdmVyIHRoZW0uIGJ1dCB0aGV5IHdpbGwgZXhpc3QgYXMgYSBkZXBlbmRlbmN5IG9mXG4gICAgLy8gb25lIG9mIHRoZW0gKG9yIG9mIHVzKVxuICAgIGZvciAoY29uc3QgcGtnIG9mIFsuLi50aGlzLmRlcGVuZGVuY2llcywgdGhpcy5jcmVhdGVQYWNrYWdlKHRoaXMucGFja2FnZURpcildKSB7XG4gICAgICBjb25zdCBtYW5pZmVzdCA9IGZzLnJlYWRKU09OU3luYyhwYXRoLmpvaW4ocGtnLnBhdGgsICdwYWNrYWdlLmpzb24nKSk7XG4gICAgICBjb25zdCBydW50aW1lID0gKG1hbmlmZXN0LmRlcGVuZGVuY2llcyA/PyB7fSlbbmFtZV07XG4gICAgICBjb25zdCBvcHRpb25hbCA9IChtYW5pZmVzdC5vcHRpb25hbERlcGVuZGVuY2llcyA/PyB7fSlbbmFtZV07XG5cbiAgICAgIGNvbnN0IHBpbiA9ICh2ZXJzaW9uOiBzdHJpbmcpID0+ICh2ZXJzaW9uLnN0YXJ0c1dpdGgoJ14nKSB8fCB2ZXJzaW9uLnN0YXJ0c1dpdGgoJ34nKSkgPyB2ZXJzaW9uLnN1YnN0cmluZygxKSA6IHZlcnNpb247XG5cbiAgICAgIGlmIChydW50aW1lKSB7XG4gICAgICAgIHZlcnNpb25zLmFkZChwaW4ocnVudGltZSkpO1xuICAgICAgfVxuICAgICAgaWYgKG9wdGlvbmFsKSB7XG4gICAgICAgIHZlcnNpb25zLmFkZChwaW4ob3B0aW9uYWwpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodmVyc2lvbnMuc2l6ZSA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmFibGUgdG8gZGV0ZWN0IHZlcnNpb24gZm9yIGV4dGVybmFsIGRlcGVuZGVuY3k6ICR7bmFtZX1gKTtcbiAgICB9XG5cbiAgICBpZiAodmVyc2lvbnMuc2l6ZSA+IDEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgTXVsdGlwbGUgdmVyc2lvbnMgZGV0ZWN0ZWQgZm9yIGV4dGVybmFsIGRlcGVuZGVuY3k6ICR7bmFtZX0gKCR7QXJyYXkuZnJvbSh2ZXJzaW9ucykuam9pbignLCcpfSlgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmVyc2lvbnMudmFsdWVzKCkubmV4dCgpLnZhbHVlO1xuICB9XG5cbiAgcHJpdmF0ZSBjbG9zZXN0UGFja2FnZVBhdGgoZmRwOiBzdHJpbmcpOiBzdHJpbmcge1xuXG4gICAgaWYgKGZzLmV4aXN0c1N5bmMocGF0aC5qb2luKGZkcCwgJ3BhY2thZ2UuanNvbicpKSkge1xuICAgICAgcmV0dXJuIGZkcDtcbiAgICB9XG5cbiAgICBpZiAocGF0aC5kaXJuYW1lKGZkcCkgPT09IGZkcCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmFibGUgdG8gZmluZCBwYWNrYWdlIG1hbmlmZXN0Jyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuY2xvc2VzdFBhY2thZ2VQYXRoKHBhdGguZGlybmFtZShmZHApKTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlUGFja2FnZShwYWNrYWdlRGlyOiBzdHJpbmcpOiBQYWNrYWdlIHtcbiAgICBjb25zdCBtYW5pZmVzdFBhdGggPSBwYXRoLmpvaW4ocGFja2FnZURpciwgJ3BhY2thZ2UuanNvbicpO1xuICAgIGNvbnN0IG1hbmlmZXN0ID0gZnMucmVhZEpTT05TeW5jKG1hbmlmZXN0UGF0aCk7XG4gICAgcmV0dXJuIHsgcGF0aDogcGFja2FnZURpciwgbmFtZTogbWFuaWZlc3QubmFtZSwgdmVyc2lvbjogbWFuaWZlc3QudmVyc2lvbiB9O1xuICB9XG5cbiAgcHJpdmF0ZSBlc2J1aWxkKCk6IGVzYnVpbGQuQnVpbGRSZXN1bHQge1xuXG4gICAgY29uc3QgYnVuZGxlID0gZXNidWlsZC5idWlsZFN5bmMoe1xuICAgICAgZW50cnlQb2ludHM6IHRoaXMuZW50cnlQb2ludHMsXG4gICAgICBidW5kbGU6IHRydWUsXG4gICAgICB0YXJnZXQ6ICdub2RlMTInLFxuICAgICAgcGxhdGZvcm06ICdub2RlJyxcbiAgICAgIHNvdXJjZW1hcDogJ2lubGluZScsXG4gICAgICBtZXRhZmlsZTogdHJ1ZSxcbiAgICAgIHRyZWVTaGFraW5nOiB0cnVlLFxuICAgICAgYWJzV29ya2luZ0RpcjogdGhpcy5wYWNrYWdlRGlyLFxuICAgICAgZXh0ZXJuYWw6IFsuLi4odGhpcy5leHRlcm5hbHMuZGVwZW5kZW5jaWVzID8/IFtdKSwgLi4uKHRoaXMuZXh0ZXJuYWxzLm9wdGlvbmFsRGVwZW5kZW5jaWVzID8/IFtdKV0sXG4gICAgICB3cml0ZTogZmFsc2UsXG4gICAgICBvdXRkaXI6IHRoaXMucGFja2FnZURpcixcbiAgICAgIGFsbG93T3ZlcndyaXRlOiB0cnVlLFxuICAgIH0pO1xuXG4gICAgaWYgKGJ1bmRsZS53YXJuaW5ncy5sZW5ndGggPiAwKSB7XG4gICAgICAvLyBlc2J1aWxkIHdhcm5pbmdzIGFyZSB1c3VhbGx5IGltcG9ydGFudCwgbGV0cyB0cnkgdG8gYmUgc3RyaWN0IGhlcmUuXG4gICAgICAvLyB0aGUgd2FybmluZ3MgdGhlbXNlbHZlcyBhcmUgcHJpbnRlZCBvbiBzY3JlZW4uXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEZvdW5kICR7YnVuZGxlLndhcm5pbmdzLmxlbmd0aH0gYnVuZGxpbmcgd2FybmluZ3MgKFNlZSBhYm92ZSlgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYnVuZGxlO1xuICB9XG5cbiAgcHJpdmF0ZSB2YWxpZGF0ZUNpcmN1bGFySW1wb3J0cygpOiBWaW9sYXRpb25bXSB7XG4gICAgY29uc29sZS5sb2coJ1ZhbGlkYXRpbmcgY2lyY3VsYXIgaW1wb3J0cycpO1xuICAgIGNvbnN0IHZpb2xhdGlvbnM6IFZpb2xhdGlvbltdID0gW107XG4gICAgY29uc3QgcGFja2FnZXMgPSBbdGhpcy5wYWNrYWdlRGlyLCAuLi50aGlzLmRlcGVuZGVuY2llcy5tYXAoZCA9PiBkLnBhdGgpXTtcbiAgICB0cnkge1xuICAgICAgLy8gd2UgZG9uJ3QgdXNlIHRoZSBwcm9ncmFtbWF0aWMgQVBJIHNpbmNlIGl0IG9ubHkgb2ZmZXJzIGFuIGFzeW5jIEFQSS5cbiAgICAgIC8vIHByZWZlciB0byBzdGF5IHN5bmMgZm9yIG5vdyBzaW5jZSBpdHMgZWFzaWVyIHRvIGludGVncmF0ZSB3aXRoIG90aGVyIHRvb2xpbmcuXG4gICAgICAvLyB3aWxsIG9mZmVyIGFuIGFzeW5jIEFQSSBmdXJ0aGVyIGRvd24gdGhlIHJvYWQuXG4gICAgICBjb25zdCBjb21tYW5kID0gYCR7cmVxdWlyZS5yZXNvbHZlKCdtYWRnZS9iaW4vY2xpLmpzJyl9IC0tanNvbiAtLXdhcm5pbmcgLS1uby1jb2xvciAtLW5vLXNwaW5uZXIgLS1jaXJjdWxhciAtLWV4dGVuc2lvbnMganMgJHtwYWNrYWdlcy5qb2luKCcgJyl9YDtcbiAgICAgIHNoZWxsKGNvbW1hbmQsIHsgcXVpZXQ6IHRydWUgfSk7XG4gICAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgICBjb25zdCBpbXBvcnRzOiBzdHJpbmdbXVtdID0gSlNPTi5wYXJzZShlLnN0ZG91dC50b1N0cmluZygpLnRyaW0oKSk7XG4gICAgICBmb3IgKGNvbnN0IGltcCBvZiBpbXBvcnRzKSB7XG4gICAgICAgIHZpb2xhdGlvbnMucHVzaCh7IHR5cGU6IFZpb2xhdGlvblR5cGUuQ0lSQ1VMQVJfSU1QT1JULCBtZXNzYWdlOiBgJHtpbXAuam9pbignIC0+ICcpfWAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHZpb2xhdGlvbnM7XG4gIH1cblxuICBwcml2YXRlIHZhbGlkYXRlUmVzb3VyY2VzKCk6IFZpb2xhdGlvbltdIHtcbiAgICBjb25zb2xlLmxvZygnVmFsaWRhdGluZyByZXNvdXJjZXMnKTtcbiAgICBjb25zdCB2aW9sYXRpb25zID0gW107XG4gICAgZm9yIChjb25zdCBbc3JjLCBfXSBvZiBPYmplY3QuZW50cmllcyh0aGlzLnJlc291cmNlcykpIHtcbiAgICAgIGlmICghZnMuZXhpc3RzU3luYyhwYXRoLmpvaW4odGhpcy5wYWNrYWdlRGlyLCBzcmMpKSkge1xuICAgICAgICB2aW9sYXRpb25zLnB1c2goe1xuICAgICAgICAgIHR5cGU6IFZpb2xhdGlvblR5cGUuTUlTU0lOR19SRVNPVVJDRSxcbiAgICAgICAgICBtZXNzYWdlOiBgVW5hYmxlIHRvIGZpbmQgcmVzb3VyY2UgKCR7c3JjfSkgcmVsYXRpdmUgdG8gdGhlIHBhY2thZ2UgZGlyZWN0b3J5YCxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB2aW9sYXRpb25zO1xuICB9XG5cbiAgcHJpdmF0ZSB2YWxpZGF0ZUF0dHJpYnV0aW9ucygpOiByZWFkb25seSBWaW9sYXRpb25bXSB7XG4gICAgY29uc29sZS5sb2coJ1ZhbGlkYXRpbmcgYXR0cmlidXRpb25zJyk7XG4gICAgcmV0dXJuIHRoaXMuYXR0cmlidXRpb25zLnZhbGlkYXRlKCkudmlvbGF0aW9ucztcbiAgfVxuXG4gIHByaXZhdGUgYWRkRXh0ZXJuYWxzKG1hbmlmZXN0OiBhbnkpIHtcblxuICAgIC8vIGV4dGVybmFsIGRlcGVuZGVuY2llcyBzaG91bGQgYmUgc3BlY2lmaWVkIGFzIHJ1bnRpbWUgZGVwZW5kZW5jaWVzXG4gICAgZm9yIChjb25zdCBleHRlcm5hbCBvZiB0aGlzLmV4dGVybmFscy5kZXBlbmRlbmNpZXMgPz8gW10pIHtcbiAgICAgIGNvbnN0IHZlcnNpb24gPSB0aGlzLmZpbmRFeHRlcm5hbERlcGVuZGVuY3lWZXJzaW9uKGV4dGVybmFsKTtcbiAgICAgIG1hbmlmZXN0LmRlcGVuZGVuY2llcyA9IG1hbmlmZXN0LmRlcGVuZGVuY2llcyA/PyB7fTtcbiAgICAgIG1hbmlmZXN0LmRlcGVuZGVuY2llc1tleHRlcm5hbF0gPSB2ZXJzaW9uO1xuICAgIH1cblxuICAgIC8vIGV4dGVybmFsIGRlcGVuZGVuY2llcyBzaG91bGQgYmUgc3BlY2lmaWVkIGFzIG9wdGlvbmFsIGRlcGVuZGVuY2llc1xuICAgIGZvciAoY29uc3QgZXh0ZXJuYWwgb2YgdGhpcy5leHRlcm5hbHMub3B0aW9uYWxEZXBlbmRlbmNpZXMgPz8gW10pIHtcbiAgICAgIGNvbnN0IHZlcnNpb24gPSB0aGlzLmZpbmRFeHRlcm5hbERlcGVuZGVuY3lWZXJzaW9uKGV4dGVybmFsKTtcbiAgICAgIG1hbmlmZXN0Lm9wdGlvbmFsRGVwZW5kZW5jaWVzID0gbWFuaWZlc3Qub3B0aW9uYWxEZXBlbmRlbmNpZXMgPz8ge307XG4gICAgICBtYW5pZmVzdC5vcHRpb25hbERlcGVuZGVuY2llc1tleHRlcm5hbF0gPSB2ZXJzaW9uO1xuICAgIH1cblxuICB9XG5cbiAgcHJpdmF0ZSByZW1vdmVEZXBlbmRlbmNpZXMobWFuaWZlc3Q6IGFueSkge1xuICAgIGZvciAoY29uc3QgW2QsIHZdIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMubWFuaWZlc3QuZGVwZW5kZW5jaWVzKSkge1xuICAgICAgbWFuaWZlc3QuZGV2RGVwZW5kZW5jaWVzID0gbWFuaWZlc3QuZGV2RGVwZW5kZW5jaWVzID8/IHt9O1xuICAgICAgbWFuaWZlc3QuZGV2RGVwZW5kZW5jaWVzW2RdID0gdjtcbiAgICAgIGRlbGV0ZSBtYW5pZmVzdC5kZXBlbmRlbmNpZXNbZF07XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB3cml0ZU91dHB1dHMod29ya0Rpcjogc3RyaW5nKSB7XG4gICAgZm9yIChjb25zdCBvdXRwdXQgb2YgdGhpcy5idW5kbGUub3V0cHV0RmlsZXMgPz8gW10pIHtcbiAgICAgIGNvbnN0IG91dCA9IG91dHB1dC5wYXRoLnJlcGxhY2UodGhpcy5wYWNrYWdlRGlyLCB3b3JrRGlyKTtcbiAgICAgIGZzLndyaXRlRmlsZVN5bmMob3V0LCBvdXRwdXQuY29udGVudHMpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgd3JpdGVSZXNvdXJjZXMod29ya2Rpcjogc3RyaW5nKSB7XG4gICAgZm9yIChjb25zdCBbc3JjLCBkc3RdIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMucmVzb3VyY2VzKSkge1xuICAgICAgY29uc3QgdG8gPSBwYXRoLmpvaW4od29ya2RpciwgZHN0KTtcbiAgICAgIGZzLmNvcHlTeW5jKHBhdGguam9pbih0aGlzLnBhY2thZ2VEaXIsIHNyYyksIHRvLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHdyaXRlTWFuaWZlc3Qod29ya0Rpcjogc3RyaW5nLCBtYW5pZmVzdDogYW55KSB7XG4gICAgZnMud3JpdGVGaWxlU3luYyhwYXRoLmpvaW4od29ya0RpciwgJ3BhY2thZ2UuanNvbicpLCBKU09OLnN0cmluZ2lmeShtYW5pZmVzdCwgbnVsbCwgMikpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGxvbmdlc3RDb21tb25QYXJlbnQocGF0aHM6IHN0cmluZ1tdKSB7XG5cbiAgZnVuY3Rpb24gX2xvbmdlc3RDb21tb25QYXJlbnQocDE6IHN0cmluZywgcDI6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgZGlyczEgPSBwMS5zcGxpdChwYXRoLnNlcCk7XG4gICAgY29uc3QgZGlyczIgPSBwMi5zcGxpdChwYXRoLnNlcCk7XG4gICAgY29uc3QgcGFyZW50ID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBNYXRoLm1pbihkaXJzMS5sZW5ndGgsIGRpcnMyLmxlbmd0aCk7IGkrKykge1xuICAgICAgaWYgKGRpcnMxW2ldICE9PSBkaXJzMltpXSkgYnJlYWs7XG4gICAgICBwYXJlbnQucHVzaChkaXJzMVtpXSk7XG4gICAgfVxuICAgIHJldHVybiBwYXJlbnQuam9pbihwYXRoLnNlcCk7XG4gIH1cblxuICByZXR1cm4gcGF0aHMucmVkdWNlKF9sb25nZXN0Q29tbW9uUGFyZW50KTtcbn1cbiJdfQ==
|
|
359
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVuZGxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FwaS9idW5kbGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSx1Q0FBeUI7QUFDekIsMkNBQTZCO0FBQzdCLGlEQUFtQztBQUNuQyw2Q0FBK0I7QUFDL0IsbURBQStDO0FBQy9DLHFDQUFpQztBQUVqQywyQ0FBOEQ7QUFFOUQsTUFBTSx3QkFBd0IsR0FBRztJQUMvQixZQUFZO0lBQ1osS0FBSztJQUNMLGNBQWM7SUFDZCxLQUFLO0lBQ0wsY0FBYztJQUNkLE1BQU07SUFDTixtQkFBbUI7Q0FDcEIsQ0FBQztBQXFLRjs7R0FFRztBQUNILE1BQWEsTUFBTTtJQXdCakIsWUFBWSxLQUFrQjtRQUM1QixJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQyxVQUFVLENBQUM7UUFDbkMsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUMsZ0JBQWdCLElBQUksc0JBQXNCLENBQUM7UUFDbkUsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxjQUFjLENBQUMsQ0FBQyxDQUFDO1FBQzVFLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDLFNBQVMsSUFBSSxFQUFFLENBQUM7UUFDdkMsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUMsU0FBUyxJQUFJLEVBQUUsQ0FBQztRQUN2QyxJQUFJLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUM7UUFDdkIsSUFBSSxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUMsZUFBZSxJQUFJLHdCQUF3QixDQUFDO1FBQ3pFLElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDLGFBQWEsQ0FBQztRQUN6QyxJQUFJLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQztRQUN0QixJQUFJLENB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QUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2pDLE1BQU0sS0FBSyxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2pDLE1BQU0sTUFBTSxHQUFHLEVBQUUsQ0FBQztRQUNsQixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUM3RCxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDO2dCQUFFLE1BQU07WUFDakMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUN2QjtRQUNELE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDL0IsQ0FBQztJQUVELE9BQU8sS0FBSyxDQUFDLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO0FBQzVDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBvcyBmcm9tICdvcyc7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0ICogYXMgZXNidWlsZCBmcm9tICdlc2J1aWxkJztcbmltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzLWV4dHJhJztcbmltcG9ydCB7IEF0dHJpYnV0aW9ucyB9IGZyb20gJy4vX2F0dHJpYnV0aW9ucyc7XG5pbXBvcnQgeyBzaGVsbCB9IGZyb20gJy4vX3NoZWxsJztcbmltcG9ydCB0eXBlIHsgVmlvbGF0aW9uIH0gZnJvbSAnLi92aW9sYXRpb24nO1xuaW1wb3J0IHsgVmlvbGF0aW9uVHlwZSwgVmlvbGF0aW9uc1JlcG9ydCB9IGZyb20gJy4vdmlvbGF0aW9uJztcblxuY29uc3QgREVGQVVMVF9BTExPV0VEX0xJQ0VOU0VTID0gW1xuICAnQXBhY2hlLTIuMCcsXG4gICdNSVQnLFxuICAnQlNELTMtQ2xhdXNlJyxcbiAgJ0lTQycsXG4gICdCU0QtMi1DbGF1c2UnLFxuICAnMEJTRCcsXG4gICdNSVQgT1IgQXBhY2hlLTIuMCcsXG5dO1xuXG4vKipcbiAqIEJ1bmRsaW5nIHByb3BlcnRpZXMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnVuZGxlUHJvcHMge1xuXG4gIC8qKlxuICAgKiBEaXJlY3Rvcnkgd2hlcmUgdGhlIHBhY2thZ2UgdG8gYnVuZGxlIGlzIGxvY2F0ZWQgYXQuXG4gICAqL1xuICByZWFkb25seSBwYWNrYWdlRGlyOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIExpc3Qgb2YgZW50cnktcG9pbnRzIHRvIGJ1bmRsZS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSB0aGUgJ21haW4nIGZpbGUgYXMgc3BlY2lmaWVkIGluIHBhY2thZ2UuanNvbi5cbiAgICovXG4gIHJlYWRvbmx5IGVudHJ5UG9pbnRzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFBhdGggdG8gYXR0cmlidXRpb25zIGZpbGUgdGhhdCB3aWxsIGJlIGNyZWF0ZWQgLyB2YWxpZGF0ZWQuXG4gICAqIFRoaXMgcGF0aCBpcyByZWxhdGl2ZSB0byB0aGUgcGFja2FnZSBkaXJlY3RvcnkuXG4gICAqXG4gICAqIEBkZWZhdWx0ICdUSElSRF9QQVJUWV9MSUNFTlNFUydcbiAgICovXG4gIHJlYWRvbmx5IGF0dHJpYnV0aW9uc0ZpbGU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEV4dGVybmFsIHBhY2thZ2VzIHRoYXQgY2Fubm90IGJlIGJ1bmRsZWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gZXh0ZXJuYWwgcmVmZXJlbmNlcy5cbiAgICovXG4gIHJlYWRvbmx5IGV4dGVybmFscz86IEV4dGVybmFscztcblxuICAvKipcbiAgICogRXh0ZXJuYWwgcmVzb3VyY2VzIHRoYXQgbmVlZCB0byBiZSBlbWJlZGRlZCBpbiB0aGUgYnVuZGxlLlxuICAgKlxuICAgKiBUaGVzZSB3aWxsIGJlIGNvcGllZCBvdmVyIHRvIHRoZSBhcHByb3ByaWF0ZSBwYXRocyBiZWZvcmUgcGFja2FnaW5nLlxuICAgKi9cbiAgcmVhZG9ubHkgcmVzb3VyY2VzPzogeyBbc3JjOiBzdHJpbmddOiBzdHJpbmcgfTtcblxuICAvKipcbiAgICogQSBsaXN0IG9mIGxpY2Vuc2VzIHRoYXQgYXJlIGFsbG93ZWQgZm9yIGJ1bmRsaW5nLlxuICAgKiBJZiBhbnkgZGVwZW5kZW5jeSBjb250YWlucyBhIGxpY2Vuc2Ugbm90IGluIHRoaXMgbGlzdCwgYnVuZGxpbmcgd2lsbCBmYWlsLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIERlZmF1bHQgbGlzdFxuICAgKi9cbiAgcmVhZG9ubHkgYWxsb3dlZExpY2Vuc2VzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFBhY2thZ2VzIG1hdGNoaW5nIHRoaXMgcmVndWxhciBleHByZXNzaW9uIHdpbGwgYmUgZXhjbHVkZWQgZnJvbSBhdHRyaWJ1dGlvbi5cbiAgICovXG4gIHJlYWRvbmx5IGRvbnRBdHRyaWJ1dGU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEJhc2ljIHNhbml0eSBjaGVjayB0byBydW4gYWdhaW5zdCB0aGUgY3JlYXRlZCBidW5kbGUuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gY2hlY2suXG4gICAqL1xuICByZWFkb25seSB0ZXN0Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBJbmNsdWRlIGEgc291cmNlbWFwIGluIHRoZSBidW5kbGUuXG4gICAqXG4gICAqIEBkZWZhdWx0IFwiaW5saW5lXCJcbiAgICovXG4gIHJlYWRvbmx5IHNvdXJjZW1hcD86ICdsaW5rZWQnIHwgJ2lubGluZScgfCAnZXh0ZXJuYWwnIHwgJ2JvdGgnO1xuXG4gIC8qKlxuICAgKiBNaW5pZmllcyB0aGUgYnVuZGxlZCBjb2RlLlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgbWluaWZ5PzogYm9vbGVhbjtcblxuICAvKipcbiAgICogUmVtb3ZlcyB3aGl0ZXNwYWNlIGZyb20gdGhlIGNvZGUuXG4gICAqIFRoaXMgaXMgZW5hYmxlZCBieSBkZWZhdWx0IHdoZW4gYG1pbmlmeWAgaXMgdXNlZC5cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IG1pbmlmeVdoaXRlc3BhY2U/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBSZW5hbWVzIGxvY2FsIHZhcmlhYmxlcyB0byBiZSBzaG9ydGVyLlxuICAgKiBUaGlzIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCB3aGVuIGBtaW5pZnlgIGlzIHVzZWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBtaW5pZnlJZGVudGlmaWVycz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFJld3JpdGVzIHN5bnRheCB0byBhIG1vcmUgY29tcGFjdCBmb3JtYXQuXG4gICAqIFRoaXMgaXMgZW5hYmxlZCBieSBkZWZhdWx0IHdoZW4gYG1pbmlmeWAgaXMgdXNlZC5cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IG1pbmlmeVN5bnRheD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdyaXRlIHRoZSBtZXRhZmlsZSBpbnRvIHRoaXMgbG9jYXRpb24uXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gbWV0YWZpbGUgaXMgd3JpdHRlblxuICAgKi9cbiAgcmVhZG9ubHkgbWV0YWZpbGU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgYEJ1bmRsZS5wYWNrYC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCdW5kbGVQYWNrT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgdGFyZ2V0IGRpcmVjdG9yeSB0byBjcmVhdGUgdGhlIHBhY2thZ2UgaW4uXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gdGhlIHBhY2thZ2UgZGlyZWN0b3J5LlxuICAgKi9cbiAgcmVhZG9ubHkgdGFyZ2V0Pzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEJ1bmRsZVZhbGlkYXRlT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBBdXRvbWF0aWNhbGx5IGZpeCBhbnkgKGZpeGFibGUpIHZpb2xhdGlvbnMuXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBmaXg/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIFBhY2thZ2Ugb24gdGhlIGxvY2FsIGZpbGUgc3lzdGVtLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBhY2thZ2Uge1xuICAvKipcbiAgICogUGF0aCBvZiB0aGUgZGVwZW5kZW5jeSBvbiB0aGUgbG9jYWwgZmlsZSBzeXN0ZW0uXG4gICAqL1xuICByZWFkb25seSBwYXRoOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBEZXBlbmRlbmN5IG5hbWUuXG4gICAqL1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBEZXBlbmRlbmN5IHZlcnNpb24uXG4gICAqL1xuICByZWFkb25seSB2ZXJzaW9uOiBzdHJpbmc7XG59XG5cbi8qKlxuICogRXh0ZXJuYWwgcGFja2FnZXMgdGhhdCBjYW5ub3QgYmUgYnVuZGxlZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFeHRlcm5hbHMge1xuXG4gIC8qKlxuICAgKiBFeHRlcm5hbCBwYWNrYWdlcyB0aGF0IHNob3VsZCBiZSBsaXN0ZWQgaW4gdGhlIGBkZXBlbmRlbmNpZXNgIHNlY3Rpb25cbiAgICogb2YgdGhlIG1hbmlmZXN0LlxuICAgKi9cbiAgcmVhZG9ubHkgZGVwZW5kZW5jaWVzPzogcmVhZG9ubHkgc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIEV4dGVybmFsIHBhY2thZ2VzIHRoYXQgc2hvdWxkIGJlIGxpc3RlZCBpbiB0aGUgYG9wdGlvbmFsRGVwZW5kZW5jaWVzYCBzZWN0aW9uXG4gICAqIG9mIHRoZSBtYW5pZmVzdC5cbiAgICovXG4gIHJlYWRvbmx5IG9wdGlvbmFsRGVwZW5kZW5jaWVzPzogcmVhZG9ubHkgc3RyaW5nW107XG5cbn1cblxuLyoqXG4gKiBCdW5kbGUgY2xhc3MgdG8gdmFsaWRhdGUgYW5kIHBhY2sgbm9kZWpzIGJ1bmRsZXMuXG4gKi9cbmV4cG9ydCBjbGFzcyBCdW5kbGUge1xuICBwcml2YXRlIHJlYWRvbmx5IG1hbmlmZXN0OiBhbnk7XG4gIHByaXZhdGUgcmVhZG9ubHkgbm90aWNlUGF0aDogc3RyaW5nO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgcGFja2FnZURpcjogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IGVudHJ5UG9pbnRzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICBwcml2YXRlIHJlYWRvbmx5IGV4dGVybmFsczogRXh0ZXJuYWxzO1xuICBwcml2YXRlIHJlYWRvbmx5IHJlc291cmNlczogeyBbc3JjOiBzdHJpbmddOiBzdHJpbmcgfTtcbiAgcHJpdmF0ZSByZWFkb25seSBhbGxvd2VkTGljZW5zZXM6IHN0cmluZ1tdO1xuICBwcml2YXRlIHJlYWRvbmx5IGRvbnRBdHRyaWJ1dGU/OiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgdGVzdD86IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBzb3VyY2VtYXA/OiAnbGlua2VkJyB8ICdpbmxpbmUnIHwgJ2V4dGVybmFsJyB8ICdib3RoJztcbiAgcHJpdmF0ZSByZWFkb25seSBtaW5pZnk/OiBib29sZWFuO1xuICBwcml2YXRlIHJlYWRvbmx5IG1pbmlmeVdoaXRlc3BhY2U/OiBib29sZWFuO1xuICBwcml2YXRlIHJlYWRvbmx5IG1pbmlmeUlkZW50aWZpZXJzPzogYm9vbGVhbjtcbiAgcHJpdmF0ZSByZWFkb25seSBtaW5pZnlTeW50YXg/OiBib29sZWFuO1xuICBwcml2YXRlIHJlYWRvbmx5IG1ldGFmaWxlPzogc3RyaW5nO1xuXG4gIHByaXZhdGUgX2J1bmRsZT86IGVzYnVpbGQuQnVpbGRSZXN1bHQ7XG4gIHByaXZhdGUgX2RlcGVuZGVuY2llcz86IFBhY2thZ2VbXTtcbiAgcHJpdmF0ZSBfZGVwZW5kZW5jaWVzUm9vdD86IHN0cmluZztcblxuICBwcml2YXRlIF9hdHRyaWJ1dGlvbnM/OiBBdHRyaWJ1dGlvbnM7XG5cbiAgY29uc3RydWN0b3IocHJvcHM6IEJ1bmRsZVByb3BzKSB7XG4gICAgdGhpcy5wYWNrYWdlRGlyID0gcHJvcHMucGFja2FnZURpcjtcbiAgICB0aGlzLm5vdGljZVBhdGggPSBwcm9wcy5hdHRyaWJ1dGlvbnNGaWxlID8/ICdUSElSRF9QQVJUWV9MSUNFTlNFUyc7XG4gICAgdGhpcy5tYW5pZmVzdCA9IGZzLnJlYWRKc29uU3luYyhwYXRoLmpvaW4odGhpcy5wYWNrYWdlRGlyLCAncGFja2FnZS5qc29uJykpO1xuICAgIHRoaXMuZXh0ZXJuYWxzID0gcHJvcHMuZXh0ZXJuYWxzID8/IHt9O1xuICAgIHRoaXMucmVzb3VyY2VzID0gcHJvcHMucmVzb3VyY2VzID8/IHt9O1xuICAgIHRoaXMudGVzdCA9IHByb3BzLnRlc3Q7XG4gICAgdGhpcy5hbGxvd2VkTGljZW5zZXMgPSBwcm9wcy5hbGxvd2VkTGljZW5zZXMgPz8gREVGQVVMVF9BTExPV0VEX0xJQ0VOU0VTO1xuICAgIHRoaXMuZG9udEF0dHJpYnV0ZSA9IHByb3BzLmRvbnRBdHRyaWJ1dGU7XG4gICAgdGhpcy5lbnRyeVBvaW50cyA9IHt9O1xuICAgIHRoaXMuc291cmNlbWFwID0gcHJvcHMuc291cmNlbWFwO1xuICAgIHRoaXMubWluaWZ5ID0gcHJvcHMubWluaWZ5O1xuICAgIHRoaXMubWluaWZ5V2hpdGVzcGFjZSA9IHByb3BzLm1pbmlmeVdoaXRlc3BhY2U7XG4gICAgdGhpcy5taW5pZnlJZGVudGlmaWVycyA9IHByb3BzLm1pbmlmeUlkZW50aWZpZXJzO1xuICAgIHRoaXMubWluaWZ5U3ludGF4ID0gcHJvcHMubWluaWZ5U3ludGF4O1xuICAgIHRoaXMubWV0YWZpbGUgPSBwcm9wcy5tZXRhZmlsZTtcblxuICAgIGNvbnN0IGVudHJ5UG9pbnRzID0gcHJvcHMuZW50cnlQb2ludHMgPz8gKHRoaXMubWFuaWZlc3QubWFpbiA/IFt0aGlzLm1hbmlmZXN0Lm1haW5dIDogW10pO1xuXG4gICAgaWYgKGVudHJ5UG9pbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdNdXN0IGNvbmZpZ3VyZSBhdCBsZWFzdCAxIGVudHJ5cG9pbnQnKTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGVudHJ5cG9pbnQgb2YgZW50cnlQb2ludHMpIHtcbiAgICAgIGlmICghZnMuZXhpc3RzU3luYyhwYXRoLmpvaW4odGhpcy5wYWNrYWdlRGlyLCBlbnRyeXBvaW50KSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmFibGUgdG8gbG9jYXRlIGVudHJ5cG9pbnQ6ICR7ZW50cnlwb2ludH1gKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuZW50cnlQb2ludHNbZW50cnlwb2ludC5yZXBsYWNlKCcuanMnLCAnJyldID0gZW50cnlwb2ludDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGUgdGhlIGJ1bmRsZSBmb3IgdmlvbGF0aW9ucy5cbiAgICpcbiAgICogSWYgYGZpeGAgaXMgc2V0IHRvIHRydWUsIHRoaXMgbWV0aG9kIHdpbGwgcmV0dXJuIHRoZSByZW1haW5pbmdcbiAgICogdmlvbGF0aW9ucyBhZnRlciB0aGUgZml4ZXMgd2VyZSBhcHBsaWVkLlxuICAgKlxuICAgKiBUaGlzIG1ldGhvZCBuZXZlciB0aHJvd3MuIFRoZSBDYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIGluc3BlY3RpbmcgdGhlXG4gICAqIHJldHVybmVkIHJlcG9ydCBhbmQgYWN0IGFjY29yZGluZ2x5LlxuICAgKi9cbiAgcHVibGljIHZhbGlkYXRlKG9wdGlvbnM6IEJ1bmRsZVZhbGlkYXRlT3B0aW9ucyA9IHt9KTogVmlvbGF0aW9uc1JlcG9ydCB7XG4gICAgY29uc3QgZml4ID0gb3B0aW9ucy5maXggPz8gZmFsc2U7XG5cbiAgICAvLyBmaXJzdCB2YWxpZGF0ZVxuICAgIGNvbnN0IGNpcmN1bGFySW1wb3J0cyA9IHRoaXMudmFsaWRhdGVDaXJjdWxhckltcG9ydHMoKTtcbiAgICBjb25zdCByZXNvdXJjZXMgPSB0aGlzLnZhbGlkYXRlUmVzb3VyY2VzKCk7XG4gICAgY29uc3QgYXR0cmlidXRpb25zID0gdGhpcy52YWxpZGF0ZUF0dHJpYnV0aW9ucygpO1xuXG4gICAgY29uc3QgcmVwb3J0ID0gbmV3IFZpb2xhdGlvbnNSZXBvcnQoWy4uLmNpcmN1bGFySW1wb3J0cywgLi4ucmVzb3VyY2VzLCAuLi5hdHRyaWJ1dGlvbnNdKTtcblxuICAgIGlmICghZml4KSB7XG4gICAgICByZXR1cm4gcmVwb3J0O1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgdmlvbGF0aW9uIG9mIHJlcG9ydC52aW9sYXRpb25zKSB7XG4gICAgICBpZiAodmlvbGF0aW9uLmZpeCkge1xuICAgICAgICB2aW9sYXRpb24uZml4KCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gcmV0dXJuIHRoZSB1biBmaXhhYmxlIHZpb2xhdGlvbnNcbiAgICByZXR1cm4gbmV3IFZpb2xhdGlvbnNSZXBvcnQocmVwb3J0LnZpb2xhdGlvbnMuZmlsdGVyKHYgPT4gIXYuZml4KSk7XG4gIH1cblxuICAvKipcbiAgICogV3JpdGUgdGhlIGJ1bmRsZSB2ZXJzaW9uIG9mIHRoZSBwcm9qZWN0IHRvIGEgdGVtcCBkaXJlY3RvcnkuXG4gICAqIFRoaXMgZGlyZWN0b3J5IGlzIHdoYXQgdGhlIHRvb2wgd2lsbCBlbmQgdXAgcGFja2luZy5cbiAgICpcbiAgICogUmV0dXJucyB0aGUgdGVtcCBkaXJlY3RvcnkgbG9jYXRpb24uXG4gICAqL1xuICBwdWJsaWMgd3JpdGUoKTogc3RyaW5nIHtcbiAgICBjb25zdCB0YXJnZXQgPSBmcy5ta2R0ZW1wU3luYyhwYXRoLmpvaW4ob3MudG1wZGlyKCksICdidW5kbGUtd3JpdGUtJykpO1xuXG4gICAgLy8gd2UgZGVmaW5pdGVseSBkb24ndCBuZWVkIHRoZXNlIGRpcmVjdG9yaWVzIGluIHRoZSBwYWNrYWdlXG4gICAgLy8gc28gbm8gbmVlZCB0byBjb3B5IHRoZW0gb3Zlci5cbiAgICBjb25zdCBpZ25vcmVEaXJlY3RvcmllcyA9IFsnbm9kZV9tb2R1bGVzJywgJy5naXQnXTtcblxuICAgIC8vIGNvcHkgdGhlIGVudGlyZSBwcm9qZWN0IHNpbmNlIHdlIGFyZSByZXRhaW5pbmcgdGhlIG9yaWdpbmFsIGZpbGVzLlxuICAgIGZzLmNvcHlTeW5jKHRoaXMucGFja2FnZURpciwgdGFyZ2V0LCB7IGZpbHRlcjogbiA9PiAhbi5zcGxpdChwYXRoLnNlcCkuc29tZSgocCA9PiBpZ25vcmVEaXJlY3Rvcmllcy5pbmNsdWRlcyhwKSkpIH0pO1xuXG4gICAgLy8gY2xvbmUgdGhlIG9yaWdpbmFsIG1hbmlmZXN0IHNpbmNlIHdlIGFyZSBnb2luZyB0b1xuICAgIC8vIHRvIG11dGF0ZSBpdC5cbiAgICBjb25zdCBtYW5pZmVzdCA9IHsgLi4udGhpcy5tYW5pZmVzdCB9O1xuXG4gICAgLy8gbWFuaWZlc3QgbXV0YXRpb25zXG4gICAgdGhpcy5yZW1vdmVEZXBlbmRlbmNpZXMobWFuaWZlc3QpO1xuICAgIHRoaXMuYWRkRXh0ZXJuYWxzKG1hbmlmZXN0KTtcblxuICAgIC8vIHdyaXRlIGFydGlmYWN0c1xuICAgIHRoaXMud3JpdGVPdXRwdXRzKHRhcmdldCk7XG4gICAgdGhpcy53cml0ZVJlc291cmNlcyh0YXJnZXQpO1xuICAgIHRoaXMud3JpdGVNYW5pZmVzdCh0YXJnZXQsIG1hbmlmZXN0KTtcblxuICAgIHJldHVybiB0YXJnZXQ7XG4gIH1cblxuICAvKipcbiAgICogV3JpdGUgdGhlIGJ1bmRsZSBhbmQgY3JlYXRlIHRoZSB0YXJiYWxsLlxuICAgKlxuICAgKiBSZXR1cm5zIHRoZSBsb2NhdGlvbiBvZiB0aGUgdGFyYmFsbC5cbiAgICovXG4gIHB1YmxpYyBwYWNrKG9wdGlvbnM6IEJ1bmRsZVBhY2tPcHRpb25zID0ge30pOiBzdHJpbmcge1xuICAgIGNvbnN0IHRhcmdldCA9IG9wdGlvbnMudGFyZ2V0ID8/IHRoaXMucGFja2FnZURpcjtcblxuICAgIGNvbnN0IHJlcG9ydCA9IHRoaXMudmFsaWRhdGUoKTtcbiAgICBpZiAoIXJlcG9ydC5zdWNjZXNzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuYWJsZSB0byBwYWNrIGR1ZSB0byB2YWxpZGF0aW9uIGVycm9ycy5cXG5cXG4ke3JlcG9ydC5zdW1tYXJ5fWApO1xuICAgIH1cblxuICAgIGlmICghZnMuZXhpc3RzU3luYyh0YXJnZXQpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFRhcmdldCBkb2VzbnQgZXhpc3Q6ICR7dGFyZ2V0fWApO1xuICAgIH1cblxuICAgIC8vIHJlc29sdmUgc3ltbGlua3MuXG4gICAgY29uc3QgcmVhbFRhcmdldCA9IGZzLnJlYWxwYXRoU3luYyh0YXJnZXQpO1xuXG4gICAgaWYgKCFmcy5sc3RhdFN5bmMocmVhbFRhcmdldCkuaXNEaXJlY3RvcnkoKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBUYXJnZXQgbXVzdCBiZSBhIGRpcmVjdG9yeTogJHt0YXJnZXR9YCk7XG4gICAgfVxuXG4gICAgY29uc29sZS5sb2coJ1dyaXRpbmcgYnVuZGxlJyk7XG4gICAgY29uc3QgYnVuZGxlRGlyID0gdGhpcy53cml0ZSgpO1xuICAgIHRyeSB7XG4gICAgICBpZiAodGhpcy50ZXN0KSB7XG4gICAgICAgIGNvbnN0IGNvbW1hbmQgPSBgJHtwYXRoLmpvaW4oYnVuZGxlRGlyLCB0aGlzLnRlc3QpfWA7XG4gICAgICAgIGNvbnNvbGUubG9nKGBSdW5uaW5nIHNhbml0eSB0ZXN0OiAke2NvbW1hbmR9YCk7XG4gICAgICAgIHNoZWxsKGNvbW1hbmQsIHsgY3dkOiBidW5kbGVEaXIgfSk7XG4gICAgICB9XG5cbiAgICAgIC8vIGNyZWF0ZSB0aGUgdGFyYmFsbFxuICAgICAgY29uc29sZS5sb2coJ1BhY2tpbmcnKTtcbiAgICAgIGNvbnN0IHRhcmJhbGwgPSBzaGVsbCgnbnBtIHBhY2snLCB7IHF1aWV0OiB0cnVlLCBjd2Q6IGJ1bmRsZURpciB9KS50cmltKCk7XG4gICAgICBjb25zdCBkZXN0ID0gcGF0aC5qb2luKHJlYWxUYXJnZXQsIHRhcmJhbGwpO1xuICAgICAgZnMuY29weVN5bmMocGF0aC5qb2luKGJ1bmRsZURpciwgdGFyYmFsbCksIGRlc3QsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgICAgcmV0dXJuIGRlc3Q7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGZzLnJlbW92ZVN5bmMoYnVuZGxlRGlyKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldCBidW5kbGUoKTogZXNidWlsZC5CdWlsZFJlc3VsdCB7XG4gICAgaWYgKHRoaXMuX2J1bmRsZSkge1xuICAgICAgcmV0dXJuIHRoaXMuX2J1bmRsZTtcbiAgICB9XG4gICAgdGhpcy5fYnVuZGxlID0gdGhpcy5lc2J1aWxkKCk7XG4gICAgcmV0dXJuIHRoaXMuX2J1bmRsZTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IGRlcGVuZGVuY2llcygpOiBQYWNrYWdlW10ge1xuICAgIGlmICh0aGlzLl9kZXBlbmRlbmNpZXMpIHtcbiAgICAgIHJldHVybiB0aGlzLl9kZXBlbmRlbmNpZXM7XG4gICAgfVxuICAgIGNvbnN0IGlucHV0cyA9IE9iamVjdC5rZXlzKHRoaXMuYnVuZGxlLm1ldGFmaWxlIS5pbnB1dHMpO1xuICAgIGNvbnN0IHBhY2thZ2VzID0gbmV3IFNldChBcnJheS5mcm9tKGlucHV0cykubWFwKGkgPT4gdGhpcy5jbG9zZXN0UGFja2FnZVBhdGgocGF0aC5qb2luKHRoaXMucGFja2FnZURpciwgaSkpKSk7XG4gICAgdGhpcy5fZGVwZW5kZW5jaWVzID0gQXJyYXkuZnJvbShwYWNrYWdlcykubWFwKHAgPT4gdGhpcy5jcmVhdGVQYWNrYWdlKHApKS5maWx0ZXIoZCA9PiBkLm5hbWUgIT09IHVuZGVmaW5lZCAmJiBkLm5hbWUgIT09IHRoaXMubWFuaWZlc3QubmFtZSk7XG4gICAgcmV0dXJuIHRoaXMuX2RlcGVuZGVuY2llcztcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IGRlcGVuZGVuY2llc1Jvb3QoKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy5fZGVwZW5kZW5jaWVzUm9vdCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2RlcGVuZGVuY2llc1Jvb3Q7XG4gICAgfVxuICAgIGNvbnN0IGxjcCA9IGxvbmdlc3RDb21tb25QYXJlbnQodGhpcy5kZXBlbmRlbmNpZXMubWFwKGQgPT4gZC5wYXRoKSk7XG4gICAgdGhpcy5fZGVwZW5kZW5jaWVzUm9vdCA9IHRoaXMuY2xvc2VzdFBhY2thZ2VQYXRoKGxjcCk7XG4gICAgcmV0dXJuIHRoaXMuX2RlcGVuZGVuY2llc1Jvb3Q7XG4gIH1cblxuICBwcml2YXRlIGdldCBhdHRyaWJ1dGlvbnMoKTogQXR0cmlidXRpb25zIHtcbiAgICBpZiAodGhpcy5fYXR0cmlidXRpb25zID09IG51bGwpIHtcbiAgICAgIHRoaXMuX2F0dHJpYnV0aW9ucyA9IG5ldyBBdHRyaWJ1dGlvbnMoe1xuICAgICAgICBwYWNrYWdlRGlyOiB0aGlzLnBhY2thZ2VEaXIsXG4gICAgICAgIHBhY2thZ2VOYW1lOiB0aGlzLm1hbmlmZXN0Lm5hbWUsXG4gICAgICAgIGZpbGVQYXRoOiB0aGlzLm5vdGljZVBhdGgsXG4gICAgICAgIGRlcGVuZGVuY2llczogdGhpcy5kZXBlbmRlbmNpZXMsXG4gICAgICAgIGRlcGVuZGVuY2llc1Jvb3Q6IHRoaXMuZGVwZW5kZW5jaWVzUm9vdCxcbiAgICAgICAgZXhjbHVkZTogdGhpcy5kb250QXR0cmlidXRlLFxuICAgICAgICBhbGxvd2VkTGljZW5zZXM6IHRoaXMuYWxsb3dlZExpY2Vuc2VzLFxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9hdHRyaWJ1dGlvbnM7XG4gIH1cblxuICBwcml2YXRlIGZpbmRFeHRlcm5hbERlcGVuZGVuY3lWZXJzaW9uKG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgdmVyc2lvbnMgPSBuZXcgU2V0PHN0cmluZz4oKTtcblxuICAgIC8vIGV4dGVybmFsIGRlcGVuZGVuY2llcyB3aWxsIG5vdCBleGlzdCBpbiB0aGUgZGVwZW5kZW5jaWVzIGxpc3RcbiAgICAvLyBzaW5jZSBlc2J1aWxkIHNraXBzIG92ZXIgdGhlbS4gYnV0IHRoZXkgd2lsbCBleGlzdCBhcyBhIGRlcGVuZGVuY3kgb2ZcbiAgICAvLyBvbmUgb2YgdGhlbSAob3Igb2YgdXMpXG4gICAgZm9yIChjb25zdCBwa2cgb2YgWy4uLnRoaXMuZGVwZW5kZW5jaWVzLCB0aGlzLmNyZWF0ZVBhY2thZ2UodGhpcy5wYWNrYWdlRGlyKV0pIHtcbiAgICAgIGNvbnN0IG1hbmlmZXN0ID0gZnMucmVhZEpTT05TeW5jKHBhdGguam9pbihwa2cucGF0aCwgJ3BhY2thZ2UuanNvbicpKTtcbiAgICAgIGNvbnN0IHJ1bnRpbWUgPSAobWFuaWZlc3QuZGVwZW5kZW5jaWVzID8/IHt9KVtuYW1lXTtcbiAgICAgIGNvbnN0IG9wdGlvbmFsID0gKG1hbmlmZXN0Lm9wdGlvbmFsRGVwZW5kZW5jaWVzID8/IHt9KVtuYW1lXTtcblxuICAgICAgY29uc3QgcGluID0gKHZlcnNpb246IHN0cmluZykgPT4gKHZlcnNpb24uc3RhcnRzV2l0aCgnXicpIHx8IHZlcnNpb24uc3RhcnRzV2l0aCgnficpKSA/IHZlcnNpb24uc3Vic3RyaW5nKDEpIDogdmVyc2lvbjtcblxuICAgICAgaWYgKHJ1bnRpbWUpIHtcbiAgICAgICAgdmVyc2lvbnMuYWRkKHBpbihydW50aW1lKSk7XG4gICAgICB9XG4gICAgICBpZiAob3B0aW9uYWwpIHtcbiAgICAgICAgdmVyc2lvbnMuYWRkKHBpbihvcHRpb25hbCkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh2ZXJzaW9ucy5zaXplID09PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuYWJsZSB0byBkZXRlY3QgdmVyc2lvbiBmb3IgZXh0ZXJuYWwgZGVwZW5kZW5jeTogJHtuYW1lfWApO1xuICAgIH1cblxuICAgIGlmICh2ZXJzaW9ucy5zaXplID4gMSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBNdWx0aXBsZSB2ZXJzaW9ucyBkZXRlY3RlZCBmb3IgZXh0ZXJuYWwgZGVwZW5kZW5jeTogJHtuYW1lfSAoJHtBcnJheS5mcm9tKHZlcnNpb25zKS5qb2luKCcsJyl9KWApO1xuICAgIH1cblxuICAgIHJldHVybiB2ZXJzaW9ucy52YWx1ZXMoKS5uZXh0KCkudmFsdWUhO1xuICB9XG5cbiAgcHJpdmF0ZSBjbG9zZXN0UGFja2FnZVBhdGgoZmRwOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmIChmcy5leGlzdHNTeW5jKHBhdGguam9pbihmZHAsICdwYWNrYWdlLmpzb24nKSkpIHtcbiAgICAgIHJldHVybiBmZHA7XG4gICAgfVxuXG4gICAgaWYgKHBhdGguZGlybmFtZShmZHApID09PSBmZHApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVW5hYmxlIHRvIGZpbmQgcGFja2FnZSBtYW5pZmVzdCcpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmNsb3Nlc3RQYWNrYWdlUGF0aChwYXRoLmRpcm5hbWUoZmRwKSk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZVBhY2thZ2UocGFja2FnZURpcjogc3RyaW5nKTogUGFja2FnZSB7XG4gICAgY29uc3QgbWFuaWZlc3RQYXRoID0gcGF0aC5qb2luKHBhY2thZ2VEaXIsICdwYWNrYWdlLmpzb24nKTtcbiAgICBjb25zdCBtYW5pZmVzdCA9IGZzLnJlYWRKU09OU3luYyhtYW5pZmVzdFBhdGgpO1xuICAgIHJldHVybiB7IHBhdGg6IHBhY2thZ2VEaXIsIG5hbWU6IG1hbmlmZXN0Lm5hbWUsIHZlcnNpb246IG1hbmlmZXN0LnZlcnNpb24gfTtcbiAgfVxuXG4gIHByaXZhdGUgZXNidWlsZCgpOiBlc2J1aWxkLkJ1aWxkUmVzdWx0IHtcbiAgICBjb25zdCBidW5kbGUgPSBlc2J1aWxkLmJ1aWxkU3luYyh7XG4gICAgICBlbnRyeVBvaW50czogdGhpcy5lbnRyeVBvaW50cyxcbiAgICAgIGJ1bmRsZTogdHJ1ZSxcbiAgICAgIHRhcmdldDogJ25vZGUxOCcsXG4gICAgICBwbGF0Zm9ybTogJ25vZGUnLFxuICAgICAgc291cmNlbWFwOiB0aGlzLnNvdXJjZW1hcCxcbiAgICAgIG1ldGFmaWxlOiB0cnVlLCAvLyB0aGlzIGlzIGFsd2F5cyByZXF1aXJlZCBmb3Igc29tZSBvZiBvdXIgdmFsaWRhdGlvbiBydWxlc1xuICAgICAgbWluaWZ5OiB0aGlzLm1pbmlmeSxcbiAgICAgIG1pbmlmeVdoaXRlc3BhY2U6IHRoaXMubWluaWZ5V2hpdGVzcGFjZSxcbiAgICAgIG1pbmlmeUlkZW50aWZpZXJzOiB0aGlzLm1pbmlmeUlkZW50aWZpZXJzLFxuICAgICAgbWluaWZ5U3ludGF4OiB0aGlzLm1pbmlmeVN5bnRheCxcbiAgICAgIHRyZWVTaGFraW5nOiB0cnVlLFxuICAgICAgYWJzV29ya2luZ0RpcjogdGhpcy5wYWNrYWdlRGlyLFxuICAgICAgZXh0ZXJuYWw6IFsuLi4odGhpcy5leHRlcm5hbHMuZGVwZW5kZW5jaWVzID8/IFtdKSwgLi4uKHRoaXMuZXh0ZXJuYWxzLm9wdGlvbmFsRGVwZW5kZW5jaWVzID8/IFtdKV0sXG4gICAgICB3cml0ZTogZmFsc2UsXG4gICAgICBvdXRkaXI6IHRoaXMucGFja2FnZURpcixcbiAgICAgIGFsbG93T3ZlcndyaXRlOiB0cnVlLFxuICAgIH0pO1xuXG4gICAgLy8gV3JpdGUgbWV0YWZpbGUgb25seSB3aGVuIHJlcXVlc3RlZFxuICAgIGlmICh0aGlzLm1ldGFmaWxlKSB7XG4gICAgICBmcy53cml0ZUZpbGVTeW5jKHRoaXMubWV0YWZpbGUsIEpTT04uc3RyaW5naWZ5KGJ1bmRsZS5tZXRhZmlsZSwgbnVsbCwgMikpO1xuICAgIH1cblxuICAgIGlmIChidW5kbGUud2FybmluZ3MubGVuZ3RoID4gMCkge1xuICAgICAgLy8gZXNidWlsZCB3YXJuaW5ncyBhcmUgdXN1YWxseSBpbXBvcnRhbnQsIGxldHMgdHJ5IHRvIGJlIHN0cmljdCBoZXJlLlxuICAgICAgLy8gdGhlIHdhcm5pbmdzIHRoZW1zZWx2ZXMgYXJlIHByaW50ZWQgb24gc2NyZWVuLlxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBGb3VuZCAke2J1bmRsZS53YXJuaW5ncy5sZW5ndGh9IGJ1bmRsaW5nIHdhcm5pbmdzIChTZWUgYWJvdmUpYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJ1bmRsZTtcbiAgfVxuXG4gIHByaXZhdGUgdmFsaWRhdGVDaXJjdWxhckltcG9ydHMoKTogVmlvbGF0aW9uW10ge1xuICAgIGNvbnNvbGUubG9nKCdWYWxpZGF0aW5nIGNpcmN1bGFyIGltcG9ydHMnKTtcbiAgICBjb25zdCB2aW9sYXRpb25zOiBWaW9sYXRpb25bXSA9IFtdO1xuICAgIGNvbnN0IHBhY2thZ2VzID0gW3RoaXMucGFja2FnZURpciwgLi4udGhpcy5kZXBlbmRlbmNpZXMubWFwKGQgPT4gZC5wYXRoKV07XG4gICAgdHJ5IHtcbiAgICAgIC8vIHdlIGRvbid0IHVzZSB0aGUgcHJvZ3JhbW1hdGljIEFQSSBzaW5jZSBpdCBvbmx5IG9mZmVycyBhbiBhc3luYyBBUEkuXG4gICAgICAvLyBwcmVmZXIgdG8gc3RheSBzeW5jIGZvciBub3cgc2luY2UgaXRzIGVhc2llciB0byBpbnRlZ3JhdGUgd2l0aCBvdGhlciB0b29saW5nLlxuICAgICAgLy8gd2lsbCBvZmZlciBhbiBhc3luYyBBUEkgZnVydGhlciBkb3duIHRoZSByb2FkLlxuICAgICAgY29uc3QgY29tbWFuZCA9IGAke3JlcXVpcmUucmVzb2x2ZSgnbWFkZ2UvYmluL2NsaS5qcycpfSAtLWpzb24gLS13YXJuaW5nIC0tbm8tY29sb3IgLS1uby1zcGlubmVyIC0tY2lyY3VsYXIgLS1leHRlbnNpb25zIGpzICR7cGFja2FnZXMuam9pbignICcpfWA7XG4gICAgICBzaGVsbChjb21tYW5kLCB7IHF1aWV0OiB0cnVlIH0pO1xuICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgY29uc3QgaW1wb3J0czogc3RyaW5nW11bXSA9IEpTT04ucGFyc2UoZS5zdGRvdXQudG9TdHJpbmcoKS50cmltKCkpO1xuICAgICAgZm9yIChjb25zdCBpbXAgb2YgaW1wb3J0cykge1xuICAgICAgICB2aW9sYXRpb25zLnB1c2goeyB0eXBlOiBWaW9sYXRpb25UeXBlLkNJUkNVTEFSX0lNUE9SVCwgbWVzc2FnZTogYCR7aW1wLmpvaW4oJyAtPiAnKX1gIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB2aW9sYXRpb25zO1xuICB9XG5cbiAgcHJpdmF0ZSB2YWxpZGF0ZVJlc291cmNlcygpOiBWaW9sYXRpb25bXSB7XG4gICAgY29uc29sZS5sb2coJ1ZhbGlkYXRpbmcgcmVzb3VyY2VzJyk7XG4gICAgY29uc3QgdmlvbGF0aW9ucyA9IFtdO1xuICAgIGZvciAoY29uc3QgW3NyYywgX10gb2YgT2JqZWN0LmVudHJpZXModGhpcy5yZXNvdXJjZXMpKSB7XG4gICAgICBpZiAoIWZzLmV4aXN0c1N5bmMocGF0aC5qb2luKHRoaXMucGFja2FnZURpciwgc3JjKSkpIHtcbiAgICAgICAgdmlvbGF0aW9ucy5wdXNoKHtcbiAgICAgICAgICB0eXBlOiBWaW9sYXRpb25UeXBlLk1JU1NJTkdfUkVTT1VSQ0UsXG4gICAgICAgICAgbWVzc2FnZTogYFVuYWJsZSB0byBmaW5kIHJlc291cmNlICgke3NyY30pIHJlbGF0aXZlIHRvIHRoZSBwYWNrYWdlIGRpcmVjdG9yeWAsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdmlvbGF0aW9ucztcbiAgfVxuXG4gIHByaXZhdGUgdmFsaWRhdGVBdHRyaWJ1dGlvbnMoKTogcmVhZG9ubHkgVmlvbGF0aW9uW10ge1xuICAgIGNvbnNvbGUubG9nKCdWYWxpZGF0aW5nIGF0dHJpYnV0aW9ucycpO1xuICAgIHJldHVybiB0aGlzLmF0dHJpYnV0aW9ucy52YWxpZGF0ZSgpLnZpb2xhdGlvbnM7XG4gIH1cblxuICBwcml2YXRlIGFkZEV4dGVybmFscyhtYW5pZmVzdDogYW55KSB7XG4gICAgLy8gZXh0ZXJuYWwgZGVwZW5kZW5jaWVzIHNob3VsZCBiZSBzcGVjaWZpZWQgYXMgcnVudGltZSBkZXBlbmRlbmNpZXNcbiAgICBmb3IgKGNvbnN0IGV4dGVybmFsIG9mIHRoaXMuZXh0ZXJuYWxzLmRlcGVuZGVuY2llcyA/PyBbXSkge1xuICAgICAgY29uc3QgdmVyc2lvbiA9IHRoaXMuZmluZEV4dGVybmFsRGVwZW5kZW5jeVZlcnNpb24oZXh0ZXJuYWwpO1xuICAgICAgbWFuaWZlc3QuZGVwZW5kZW5jaWVzID0gbWFuaWZlc3QuZGVwZW5kZW5jaWVzID8/IHt9O1xuICAgICAgbWFuaWZlc3QuZGVwZW5kZW5jaWVzW2V4dGVybmFsXSA9IHZlcnNpb247XG4gICAgfVxuXG4gICAgLy8gZXh0ZXJuYWwgZGVwZW5kZW5jaWVzIHNob3VsZCBiZSBzcGVjaWZpZWQgYXMgb3B0aW9uYWwgZGVwZW5kZW5jaWVzXG4gICAgZm9yIChjb25zdCBleHRlcm5hbCBvZiB0aGlzLmV4dGVybmFscy5vcHRpb25hbERlcGVuZGVuY2llcyA/PyBbXSkge1xuICAgICAgY29uc3QgdmVyc2lvbiA9IHRoaXMuZmluZEV4dGVybmFsRGVwZW5kZW5jeVZlcnNpb24oZXh0ZXJuYWwpO1xuICAgICAgbWFuaWZlc3Qub3B0aW9uYWxEZXBlbmRlbmNpZXMgPSBtYW5pZmVzdC5vcHRpb25hbERlcGVuZGVuY2llcyA/PyB7fTtcbiAgICAgIG1hbmlmZXN0Lm9wdGlvbmFsRGVwZW5kZW5jaWVzW2V4dGVybmFsXSA9IHZlcnNpb247XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSByZW1vdmVEZXBlbmRlbmNpZXMobWFuaWZlc3Q6IGFueSkge1xuICAgIGZvciAoY29uc3QgW2QsIHZdIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMubWFuaWZlc3QuZGVwZW5kZW5jaWVzKSkge1xuICAgICAgbWFuaWZlc3QuZGV2RGVwZW5kZW5jaWVzID0gbWFuaWZlc3QuZGV2RGVwZW5kZW5jaWVzID8/IHt9O1xuICAgICAgbWFuaWZlc3QuZGV2RGVwZW5kZW5jaWVzW2RdID0gdjtcbiAgICAgIGRlbGV0ZSBtYW5pZmVzdC5kZXBlbmRlbmNpZXNbZF07XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB3cml0ZU91dHB1dHMod29ya0Rpcjogc3RyaW5nKSB7XG4gICAgZm9yIChjb25zdCBvdXRwdXQgb2YgdGhpcy5idW5kbGUub3V0cHV0RmlsZXMgPz8gW10pIHtcbiAgICAgIGNvbnN0IG91dCA9IG91dHB1dC5wYXRoLnJlcGxhY2UodGhpcy5wYWNrYWdlRGlyLCB3b3JrRGlyKTtcbiAgICAgIGZzLndyaXRlRmlsZVN5bmMob3V0LCBvdXRwdXQuY29udGVudHMpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgd3JpdGVSZXNvdXJjZXMod29ya2Rpcjogc3RyaW5nKSB7XG4gICAgZm9yIChjb25zdCBbc3JjLCBkc3RdIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMucmVzb3VyY2VzKSkge1xuICAgICAgY29uc3QgdG8gPSBwYXRoLmpvaW4od29ya2RpciwgZHN0KTtcbiAgICAgIGZzLmNvcHlTeW5jKHBhdGguam9pbih0aGlzLnBhY2thZ2VEaXIsIHNyYyksIHRvLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHdyaXRlTWFuaWZlc3Qod29ya0Rpcjogc3RyaW5nLCBtYW5pZmVzdDogYW55KSB7XG4gICAgZnMud3JpdGVGaWxlU3luYyhwYXRoLmpvaW4od29ya0RpciwgJ3BhY2thZ2UuanNvbicpLCBKU09OLnN0cmluZ2lmeShtYW5pZmVzdCwgbnVsbCwgMikpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGxvbmdlc3RDb21tb25QYXJlbnQocGF0aHM6IHN0cmluZ1tdKSB7XG4gIGZ1bmN0aW9uIF9sb25nZXN0Q29tbW9uUGFyZW50KHAxOiBzdHJpbmcsIHAyOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IGRpcnMxID0gcDEuc3BsaXQocGF0aC5zZXApO1xuICAgIGNvbnN0IGRpcnMyID0gcDIuc3BsaXQocGF0aC5zZXApO1xuICAgIGNvbnN0IHBhcmVudCA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgTWF0aC5taW4oZGlyczEubGVuZ3RoLCBkaXJzMi5sZW5ndGgpOyBpKyspIHtcbiAgICAgIGlmIChkaXJzMVtpXSAhPT0gZGlyczJbaV0pIGJyZWFrO1xuICAgICAgcGFyZW50LnB1c2goZGlyczFbaV0pO1xuICAgIH1cbiAgICByZXR1cm4gcGFyZW50LmpvaW4ocGF0aC5zZXApO1xuICB9XG5cbiAgcmV0dXJuIHBhdGhzLnJlZHVjZShfbG9uZ2VzdENvbW1vblBhcmVudCk7XG59XG4iXX0=
|
package/lib/api/index.js
CHANGED
|
@@ -16,4 +16,4 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
17
|
__exportStar(require("./bundle"), exports);
|
|
18
18
|
__exportStar(require("./violation"), exports);
|
|
19
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
19
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYXBpL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSwyQ0FBeUI7QUFDekIsOENBQTRCIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9idW5kbGUnO1xuZXhwb3J0ICogZnJvbSAnLi92aW9sYXRpb24nO1xuIl19
|
package/lib/api/violation.js
CHANGED
|
@@ -68,4 +68,4 @@ class ViolationsReport {
|
|
|
68
68
|
}
|
|
69
69
|
}
|
|
70
70
|
exports.ViolationsReport = ViolationsReport;
|
|
71
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
71
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlvbGF0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FwaS92aW9sYXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUE7O0dBRUc7QUFDSCxJQUFZLGFBcUNYO0FBckNELFdBQVksYUFBYTtJQUV2Qjs7T0FFRztJQUNILG9EQUFtQyxDQUFBO0lBRW5DOztPQUVHO0lBQ0gsZ0VBQStDLENBQUE7SUFFL0M7O09BRUc7SUFDSCxrREFBaUMsQ0FBQTtJQUVqQzs7T0FFRztJQUNILG9EQUFtQyxDQUFBO0lBRW5DOztPQUVHO0lBQ0gsMENBQXlCLENBQUE7SUFFekI7O09BRUc7SUFDSCxzREFBcUMsQ0FBQTtJQUVyQzs7T0FFRztJQUNILHNEQUFxQyxDQUFBO0FBRXZDLENBQUMsRUFyQ1csYUFBYSxHQUFiLHFCQUFhLEtBQWIscUJBQWEsUUFxQ3hCO0FBcUJEOztHQUVHO0FBQ0gsTUFBYSxnQkFBZ0I7SUFDM0IsWUFBNkIsV0FBd0I7UUFBeEIsZ0JBQVcsR0FBWCxXQUFXLENBQWE7SUFDckQsQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFBVyxVQUFVO1FBQ25CLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQztJQUMxQixDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUFXLE9BQU87UUFDaEIsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUM7SUFDdEMsQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFBVyxPQUFPO1FBQ2hCLE1BQU0sT0FBTyxHQUFHO1lBQ2QsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sc0JBQXNCO1NBQ2pELENBQUM7UUFDRixLQUFLLE1BQU0sQ0FBQyxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDaEMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7U0FDdkU7UUFDRCxPQUFPLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDNUIsQ0FBQztDQUNGO0FBOUJELDRDQThCQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVmlvbGF0aW9uIHR5cGVzLlxuICovXG5leHBvcnQgZW51bSBWaW9sYXRpb25UeXBlIHtcblxuICAvKipcbiAgICogQ2lyY3VsYXIgaW1wb3J0IG9uIHRoZSBwYWNrYWdlIG9yIG9uZSBvZiBpdHMgZGVwZW5kZW5jaWVzLlxuICAgKi9cbiAgQ0lSQ1VMQVJfSU1QT1JUID0gJ2NpcmN1bGFyLWltcG9ydCcsXG5cbiAgLyoqXG4gICAqIE91dGRhdGVkIGF0dHJpYnV0aW9ucyBmaWxlLlxuICAgKi9cbiAgT1VUREFURURfQVRUUklCVVRJT05TID0gJ291dGRhdGVkLWF0dHJpYnV0aW9ucycsXG5cbiAgLyoqXG4gICAqIE1pc3Npbmcgbm90aWNlIGZpbGUuXG4gICAqL1xuICBNSVNTSU5HX05PVElDRSA9ICdtaXNzaW5nLW5vdGljZScsXG5cbiAgLyoqXG4gICAqIEludmFsaWQgbGljZW5zZS5cbiAgICovXG4gIElOVkFMSURfTElDRU5TRSA9ICdpbnZhbGlkLWxpY2Vuc2UnLFxuXG4gIC8qKlxuICAgKiBObyBsaWNlbnNlLlxuICAgKi9cbiAgTk9fTElDRU5TRSA9ICduby1saWNlbnNlJyxcblxuICAvKipcbiAgICogTXVsdGlwbGUgbGljZW5zZXMuXG4gICAqL1xuICBNVUxUSVBMRV9MSUNFTlNFID0gJ211bHRpcGxlLWxpY2Vuc2UnLFxuXG4gIC8qKlxuICAgKiBNaXNzaW5nIHJlc291cmNlIGZpbGUuXG4gICAqL1xuICBNSVNTSU5HX1JFU09VUkNFID0gJ21pc3NpbmctcmVzb3VyY2UnLFxuXG59XG5cbi8qKlxuICogQSB2YWxpZGF0aW9uIHZpb2xhdGlvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBWaW9sYXRpb24ge1xuICAvKipcbiAgICogVGhlIHZpb2xhdGlvbiB0eXBlLlxuICAgKi9cbiAgcmVhZG9ubHkgdHlwZTogVmlvbGF0aW9uVHlwZTtcbiAgLyoqXG4gICAqIFRoZSB2aW9sYXRpb24gbWVzc2FnZS5cbiAgICovXG4gIHJlYWRvbmx5IG1lc3NhZ2U6IHN0cmluZztcbiAgLyoqXG4gICAqIEEgZml4ZXIgZnVuY3Rpb24uXG4gICAqIElmIHVuZGVmaW5lZCwgdGhpcyB2aW9sYXRpb24gY2Fubm90IGJlIGZpeGVkIGF1dG9tYXRpY2FsbHkuXG4gICAqL1xuICByZWFkb25seSBmaXg/OiAoKSA9PiB2b2lkO1xufVxuXG4vKipcbiAqIFJlcG9ydCBlbmNhcHN1bGF0aW5nIGEgbGlzdCBvZiB2aW9sYXRpb25zLlxuICovXG5leHBvcnQgY2xhc3MgVmlvbGF0aW9uc1JlcG9ydCB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgX3Zpb2xhdGlvbnM6IFZpb2xhdGlvbltdKSB7XG4gIH1cblxuICAvKipcbiAgICogVGhlIGxpc3Qgb2YgdmlvbGF0aW9ucy5cbiAgICovXG4gIHB1YmxpYyBnZXQgdmlvbGF0aW9ucygpOiByZWFkb25seSBWaW9sYXRpb25bXSB7XG4gICAgcmV0dXJuIHRoaXMuX3Zpb2xhdGlvbnM7XG4gIH1cblxuICAvKipcbiAgICogVHJ1ZSB3aGVuIG5vIHZpb2xhdGlvbnMgZXhpc3QuIEZhbHNlIG90aGVyd2lzZS5cbiAgICovXG4gIHB1YmxpYyBnZXQgc3VjY2VzcygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy52aW9sYXRpb25zLmxlbmd0aCA9PT0gMDtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdW1tYXJ5IG9mIHRoZSB2aW9sYXRpb24gaW4gdGhlIHJlcG9ydC5cbiAgICovXG4gIHB1YmxpYyBnZXQgc3VtbWFyeSgpOiBzdHJpbmcge1xuICAgIGNvbnN0IHN1bW1hcnkgPSBbXG4gICAgICBgJHt0aGlzLl92aW9sYXRpb25zLmxlbmd0aH0gdmlvbGF0aW9ucyBkZXRlY3RlZGAsXG4gICAgXTtcbiAgICBmb3IgKGNvbnN0IHYgb2YgdGhpcy5fdmlvbGF0aW9ucykge1xuICAgICAgc3VtbWFyeS5wdXNoKGAtICR7di50eXBlfTogJHt2Lm1lc3NhZ2V9JHt2LmZpeCA/ICcgKGZpeGFibGUpJyA6ICcnfWApO1xuICAgIH1cbiAgICByZXR1cm4gc3VtbWFyeS5qb2luKCdcXG4nKTtcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function cliMain(cliArgs: string[]): Promise<void>;
|
package/lib/cli-main.js
ADDED
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
+
exports.cliMain = void 0;
|
|
27
|
+
const path = __importStar(require("path"));
|
|
28
|
+
const fs = __importStar(require("fs-extra"));
|
|
29
|
+
const yargs = __importStar(require("yargs"));
|
|
30
|
+
const api_1 = require("./api");
|
|
31
|
+
function versionNumber() {
|
|
32
|
+
return fs.readJSONSync(path.join(__dirname, '..', 'package.json')).version;
|
|
33
|
+
}
|
|
34
|
+
async function cliMain(cliArgs) {
|
|
35
|
+
const argv = await yargs
|
|
36
|
+
.usage('Usage: node-bundle COMMAND')
|
|
37
|
+
.option('entrypoint', { type: 'array', nargs: 1, desc: 'List of entrypoints to bundle' })
|
|
38
|
+
.option('external', { type: 'array', nargs: 1, default: [], desc: 'Packages in this list will be excluded from the bundle and added as dependencies (example: fsevents:optional)' })
|
|
39
|
+
.option('allowed-license', { type: 'array', nargs: 1, default: [], desc: 'List of valid licenses' })
|
|
40
|
+
.option('resource', { type: 'array', nargs: 1, default: [], desc: 'List of resources that need to be explicitly copied to the bundle (example: node_modules/proxy-agent/contextify.js:bin/contextify.js)' })
|
|
41
|
+
.option('dont-attribute', { type: 'string', desc: 'Dependencies matching this regular expressions wont be added to the notice file' })
|
|
42
|
+
.option('test', { type: 'string', desc: 'Validation command to sanity test the bundle after its created' })
|
|
43
|
+
.option('minify-whitespace', { type: 'boolean', default: false, desc: 'Minify whitespace' })
|
|
44
|
+
.option('metafile', { type: 'string', desc: 'Produce a metafile about the build that can be analyzed' })
|
|
45
|
+
.command('validate', 'Validate the package is ready for bundling', args => args
|
|
46
|
+
.option('fix', { type: 'boolean', default: false, alias: 'f', desc: 'Fix any fixable violations' }))
|
|
47
|
+
.command('write', 'Write the bundled version of the project to a temp directory')
|
|
48
|
+
.command('pack', 'Write the bundle and create the tarball', args => args
|
|
49
|
+
.option('destination', { type: 'string', desc: 'Directory to write the tarball to', nargs: 1, requiresArg: true }))
|
|
50
|
+
.demandCommand() // require a subcommand
|
|
51
|
+
.strict() // require a VALID subcommand, and only supported options
|
|
52
|
+
.fail((msg, err) => {
|
|
53
|
+
// Throw an error in test mode, exit with an error code otherwise
|
|
54
|
+
if (err) {
|
|
55
|
+
throw err;
|
|
56
|
+
}
|
|
57
|
+
if (process.env.NODE_ENV === 'test') {
|
|
58
|
+
throw new Error(msg);
|
|
59
|
+
}
|
|
60
|
+
console.error(msg);
|
|
61
|
+
process.exit(1); // exit() not exitCode, we must not return.
|
|
62
|
+
})
|
|
63
|
+
.help()
|
|
64
|
+
.version(versionNumber())
|
|
65
|
+
.parse(cliArgs);
|
|
66
|
+
const command = argv._[0];
|
|
67
|
+
function undefinedIfEmpty(arr) {
|
|
68
|
+
if (!arr || arr.length === 0)
|
|
69
|
+
return undefined;
|
|
70
|
+
return arr;
|
|
71
|
+
}
|
|
72
|
+
const resources = {};
|
|
73
|
+
for (const resource of argv.resource) {
|
|
74
|
+
const parts = resource.split(':');
|
|
75
|
+
resources[parts[0]] = parts[1];
|
|
76
|
+
}
|
|
77
|
+
const optionalExternals = [];
|
|
78
|
+
const runtimeExternals = [];
|
|
79
|
+
for (const external of argv.external) {
|
|
80
|
+
const parts = external.split(':');
|
|
81
|
+
const name = parts[0];
|
|
82
|
+
const type = parts[1];
|
|
83
|
+
switch (type) {
|
|
84
|
+
case 'optional':
|
|
85
|
+
optionalExternals.push(name);
|
|
86
|
+
break;
|
|
87
|
+
case 'runtime':
|
|
88
|
+
runtimeExternals.push(name);
|
|
89
|
+
break;
|
|
90
|
+
default:
|
|
91
|
+
throw new Error(`Unsupported dependency type '${type}' for external package '${name}'. Supported types are: ['optional', 'runtime']`);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
const props = {
|
|
95
|
+
packageDir: process.cwd(),
|
|
96
|
+
entryPoints: undefinedIfEmpty(argv.entrypoint),
|
|
97
|
+
externals: { dependencies: runtimeExternals, optionalDependencies: optionalExternals },
|
|
98
|
+
allowedLicenses: undefinedIfEmpty(argv['allowed-license']),
|
|
99
|
+
resources: resources,
|
|
100
|
+
dontAttribute: argv['dont-attribute'],
|
|
101
|
+
test: argv.test,
|
|
102
|
+
minifyWhitespace: argv['minify-whitespace'],
|
|
103
|
+
metafile: argv.metafile,
|
|
104
|
+
};
|
|
105
|
+
const bundle = new api_1.Bundle(props);
|
|
106
|
+
switch (command) {
|
|
107
|
+
case 'validate':
|
|
108
|
+
// When using `yargs.command(command, builder [, handler])` without the handler
|
|
109
|
+
// as we do here, there is no typing for command-specific options. So force a cast.
|
|
110
|
+
const fix = argv.fix;
|
|
111
|
+
validate(bundle, { fix });
|
|
112
|
+
break;
|
|
113
|
+
case 'write':
|
|
114
|
+
write(bundle);
|
|
115
|
+
break;
|
|
116
|
+
case 'pack':
|
|
117
|
+
const target = argv.destination;
|
|
118
|
+
pack(bundle, {
|
|
119
|
+
target,
|
|
120
|
+
});
|
|
121
|
+
break;
|
|
122
|
+
default:
|
|
123
|
+
throw new Error(`Unknown command: ${command}`);
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
exports.cliMain = cliMain;
|
|
127
|
+
function write(bundle) {
|
|
128
|
+
const bundleDir = bundle.write();
|
|
129
|
+
console.log(bundleDir);
|
|
130
|
+
}
|
|
131
|
+
function validate(bundle, options = {}) {
|
|
132
|
+
const report = bundle.validate(options);
|
|
133
|
+
if (!report.success) {
|
|
134
|
+
throw new Error(report.summary);
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
function pack(bundle, options) {
|
|
138
|
+
bundle.pack(options);
|
|
139
|
+
}
|
|
140
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLW1haW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvY2xpLW1haW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSwyQ0FBNkI7QUFDN0IsNkNBQStCO0FBQy9CLDZDQUErQjtBQUUvQiwrQkFBK0I7QUFFL0IsU0FBUyxhQUFhO0lBQ3BCLE9BQU8sRUFBRSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUUsY0FBYyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7QUFDN0UsQ0FBQztBQUVNLEtBQUssVUFBVSxPQUFPLENBQUMsT0FBaUI7SUFDN0MsTUFBTSxJQUFJLEdBQUcsTUFBTSxLQUFLO1NBQ3JCLEtBQUssQ0FBQyw0QkFBNEIsQ0FBQztTQUNuQyxNQUFNLENBQUMsWUFBWSxFQUFFLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSwrQkFBK0IsRUFBRSxDQUFDO1NBQ3hGLE1BQU0sQ0FBQyxVQUFVLEVBQUUsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsK0dBQStHLEVBQUUsQ0FBQztTQUNuTCxNQUFNLENBQUMsaUJBQWlCLEVBQUUsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsd0JBQXdCLEVBQUUsQ0FBQztTQUNuRyxNQUFNLENBQUMsVUFBVSxFQUFFLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLHVJQUF1SSxFQUFFLENBQUM7U0FDM00sTUFBTSxDQUFDLGdCQUFnQixFQUFFLEVBQUUsSUFBSSxFQUFFLFFB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QUM7WUFDZCxNQUFNO1FBQ1IsS0FBSyxNQUFNO1lBQ1QsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFdBQWlDLENBQUM7WUFDdEQsSUFBSSxDQUFDLE1BQU0sRUFBRTtnQkFDWCxNQUFNO2FBQ1AsQ0FBQyxDQUFDO1lBQ0gsTUFBTTtRQUNSO1lBQ0UsTUFBTSxJQUFJLEtBQUssQ0FBQyxvQkFBb0IsT0FBTyxFQUFFLENBQUMsQ0FBQztLQUNsRDtBQUNILENBQUM7QUFwR0QsMEJBb0dDO0FBRUQsU0FBUyxLQUFLLENBQUMsTUFBYztJQUMzQixNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDakMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUN6QixDQUFDO0FBRUQsU0FBUyxRQUFRLENBQUMsTUFBYyxFQUFFLFVBQWlDLEVBQUU7SUFDbkUsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUN4QyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRTtRQUNuQixNQUFNLElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztLQUNqQztBQUNILENBQUM7QUFFRCxTQUFTLElBQUksQ0FBQyxNQUFjLEVBQUUsT0FBMkI7SUFDdkQsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUN2QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzLWV4dHJhJztcbmltcG9ydCAqIGFzIHlhcmdzIGZyb20gJ3lhcmdzJztcbmltcG9ydCB0eXBlIHsgQnVuZGxlUGFja09wdGlvbnMsIEJ1bmRsZVByb3BzLCBCdW5kbGVWYWxpZGF0ZU9wdGlvbnMgfSBmcm9tICcuL2FwaSc7XG5pbXBvcnQgeyBCdW5kbGUgfSBmcm9tICcuL2FwaSc7XG5cbmZ1bmN0aW9uIHZlcnNpb25OdW1iZXIoKTogc3RyaW5nIHtcbiAgcmV0dXJuIGZzLnJlYWRKU09OU3luYyhwYXRoLmpvaW4oX19kaXJuYW1lLCAnLi4nLCAncGFja2FnZS5qc29uJykpLnZlcnNpb247XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjbGlNYWluKGNsaUFyZ3M6IHN0cmluZ1tdKSB7XG4gIGNvbnN0IGFyZ3YgPSBhd2FpdCB5YXJnc1xuICAgIC51c2FnZSgnVXNhZ2U6IG5vZGUtYnVuZGxlIENPTU1BTkQnKVxuICAgIC5vcHRpb24oJ2VudHJ5cG9pbnQnLCB7IHR5cGU6ICdhcnJheScsIG5hcmdzOiAxLCBkZXNjOiAnTGlzdCBvZiBlbnRyeXBvaW50cyB0byBidW5kbGUnIH0pXG4gICAgLm9wdGlvbignZXh0ZXJuYWwnLCB7IHR5cGU6ICdhcnJheScsIG5hcmdzOiAxLCBkZWZhdWx0OiBbXSwgZGVzYzogJ1BhY2thZ2VzIGluIHRoaXMgbGlzdCB3aWxsIGJlIGV4Y2x1ZGVkIGZyb20gdGhlIGJ1bmRsZSBhbmQgYWRkZWQgYXMgZGVwZW5kZW5jaWVzIChleGFtcGxlOiBmc2V2ZW50czpvcHRpb25hbCknIH0pXG4gICAgLm9wdGlvbignYWxsb3dlZC1saWNlbnNlJywgeyB0eXBlOiAnYXJyYXknLCBuYXJnczogMSwgZGVmYXVsdDogW10sIGRlc2M6ICdMaXN0IG9mIHZhbGlkIGxpY2Vuc2VzJyB9KVxuICAgIC5vcHRpb24oJ3Jlc291cmNlJywgeyB0eXBlOiAnYXJyYXknLCBuYXJnczogMSwgZGVmYXVsdDogW10sIGRlc2M6ICdMaXN0IG9mIHJlc291cmNlcyB0aGF0IG5lZWQgdG8gYmUgZXhwbGljaXRseSBjb3BpZWQgdG8gdGhlIGJ1bmRsZSAoZXhhbXBsZTogbm9kZV9tb2R1bGVzL3Byb3h5LWFnZW50L2NvbnRleHRpZnkuanM6YmluL2NvbnRleHRpZnkuanMpJyB9KVxuICAgIC5vcHRpb24oJ2RvbnQtYXR0cmlidXRlJywgeyB0eXBlOiAnc3RyaW5nJywgZGVzYzogJ0RlcGVuZGVuY2llcyBtYXRjaGluZyB0aGlzIHJlZ3VsYXIgZXhwcmVzc2lvbnMgd29udCBiZSBhZGRlZCB0byB0aGUgbm90aWNlIGZpbGUnIH0pXG4gICAgLm9wdGlvbigndGVzdCcsIHsgdHlwZTogJ3N0cmluZycsIGRlc2M6ICdWYWxpZGF0aW9uIGNvbW1hbmQgdG8gc2FuaXR5IHRlc3QgdGhlIGJ1bmRsZSBhZnRlciBpdHMgY3JlYXRlZCcgfSlcbiAgICAub3B0aW9uKCdtaW5pZnktd2hpdGVzcGFjZScsIHsgdHlwZTogJ2Jvb2xlYW4nLCBkZWZhdWx0OiBmYWxzZSwgZGVzYzogJ01pbmlmeSB3aGl0ZXNwYWNlJyB9KVxuICAgIC5vcHRpb24oJ21ldGFmaWxlJywgeyB0eXBlOiAnc3RyaW5nJywgZGVzYzogJ1Byb2R1Y2UgYSBtZXRhZmlsZSBhYm91dCB0aGUgYnVpbGQgdGhhdCBjYW4gYmUgYW5hbHl6ZWQnIH0pXG4gICAgLmNvbW1hbmQoJ3ZhbGlkYXRlJywgJ1ZhbGlkYXRlIHRoZSBwYWNrYWdlIGlzIHJlYWR5IGZvciBidW5kbGluZycsIGFyZ3MgPT4gYXJnc1xuICAgICAgLm9wdGlvbignZml4JywgeyB0eXBlOiAnYm9vbGVhbicsIGRlZmF1bHQ6IGZhbHNlLCBhbGlhczogJ2YnLCBkZXNjOiAnRml4IGFueSBmaXhhYmxlIHZpb2xhdGlvbnMnIH0pLFxuICAgIClcbiAgICAuY29tbWFuZCgnd3JpdGUnLCAnV3JpdGUgdGhlIGJ1bmRsZWQgdmVyc2lvbiBvZiB0aGUgcHJvamVjdCB0byBhIHRlbXAgZGlyZWN0b3J5JylcbiAgICAuY29tbWFuZCgncGFjaycsICdXcml0ZSB0aGUgYnVuZGxlIGFuZCBjcmVhdGUgdGhlIHRhcmJhbGwnLCBhcmdzID0+IGFyZ3NcbiAgICAgIC5vcHRpb24oJ2Rlc3RpbmF0aW9uJywgeyB0eXBlOiAnc3RyaW5nJywgZGVzYzogJ0RpcmVjdG9yeSB0byB3cml0ZSB0aGUgdGFyYmFsbCB0bycsIG5hcmdzOiAxLCByZXF1aXJlc0FyZzogdHJ1ZSB9KSxcbiAgICApXG4gICAgLmRlbWFuZENvbW1hbmQoKSAvLyByZXF1aXJlIGEgc3ViY29tbWFuZFxuICAgIC5zdHJpY3QoKSAvLyByZXF1aXJlIGEgVkFMSUQgc3ViY29tbWFuZCwgYW5kIG9ubHkgc3VwcG9ydGVkIG9wdGlvbnNcbiAgICAuZmFpbCgobXNnLCBlcnIpID0+IHtcbiAgICAgIC8vIFRocm93IGFuIGVycm9yIGluIHRlc3QgbW9kZSwgZXhpdCB3aXRoIGFuIGVycm9yIGNvZGUgb3RoZXJ3aXNlXG4gICAgICBpZiAoZXJyKSB7XG4gICAgICAgIHRocm93IGVycjtcbiAgICAgIH1cbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Rlc3QnKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihtc2cpO1xuICAgICAgfVxuICAgICAgY29uc29sZS5lcnJvcihtc2cpO1xuICAgICAgcHJvY2Vzcy5leGl0KDEpOyAvLyBleGl0KCkgbm90IGV4aXRDb2RlLCB3ZSBtdXN0IG5vdCByZXR1cm4uXG4gICAgfSlcbiAgICAuaGVscCgpXG4gICAgLnZlcnNpb24odmVyc2lvbk51bWJlcigpKVxuICAgIC5wYXJzZShjbGlBcmdzKTtcblxuICBjb25zdCBjb21tYW5kID0gYXJndi5fWzBdO1xuXG4gIGZ1bmN0aW9uIHVuZGVmaW5lZElmRW1wdHkoYXJyPzogYW55W10pOiBzdHJpbmdbXSB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKCFhcnIgfHwgYXJyLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICByZXR1cm4gYXJyIGFzIHN0cmluZ1tdO1xuICB9XG5cbiAgY29uc3QgcmVzb3VyY2VzOiBhbnkgPSB7fTtcbiAgZm9yIChjb25zdCByZXNvdXJjZSBvZiAoYXJndi5yZXNvdXJjZSBhcyBzdHJpbmdbXSkpIHtcbiAgICBjb25zdCBwYXJ0cyA9IHJlc291cmNlLnNwbGl0KCc6Jyk7XG4gICAgcmVzb3VyY2VzW3BhcnRzWzBdXSA9IHBhcnRzWzFdO1xuICB9XG5cbiAgY29uc3Qgb3B0aW9uYWxFeHRlcm5hbHMgPSBbXTtcbiAgY29uc3QgcnVudGltZUV4dGVybmFscyA9IFtdO1xuXG4gIGZvciAoY29uc3QgZXh0ZXJuYWwgb2YgKGFyZ3YuZXh0ZXJuYWwgYXMgc3RyaW5nW10pKSB7XG4gICAgY29uc3QgcGFydHMgPSBleHRlcm5hbC5zcGxpdCgnOicpO1xuICAgIGNvbnN0IG5hbWUgPSBwYXJ0c1swXTtcbiAgICBjb25zdCB0eXBlID0gcGFydHNbMV07XG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICBjYXNlICdvcHRpb25hbCc6XG4gICAgICAgIG9wdGlvbmFsRXh0ZXJuYWxzLnB1c2gobmFtZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAncnVudGltZSc6XG4gICAgICAgIHJ1bnRpbWVFeHRlcm5hbHMucHVzaChuYW1lKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuc3VwcG9ydGVkIGRlcGVuZGVuY3kgdHlwZSAnJHt0eXBlfScgZm9yIGV4dGVybmFsIHBhY2thZ2UgJyR7bmFtZX0nLiBTdXBwb3J0ZWQgdHlwZXMgYXJlOiBbJ29wdGlvbmFsJywgJ3J1bnRpbWUnXWApO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHByb3BzOiBCdW5kbGVQcm9wcyA9IHtcbiAgICBwYWNrYWdlRGlyOiBwcm9jZXNzLmN3ZCgpLFxuICAgIGVudHJ5UG9pbnRzOiB1bmRlZmluZWRJZkVtcHR5KGFyZ3YuZW50cnlwb2ludCksXG4gICAgZXh0ZXJuYWxzOiB7IGRlcGVuZGVuY2llczogcnVudGltZUV4dGVybmFscywgb3B0aW9uYWxEZXBlbmRlbmNpZXM6IG9wdGlvbmFsRXh0ZXJuYWxzIH0sXG4gICAgYWxsb3dlZExpY2Vuc2VzOiB1bmRlZmluZWRJZkVtcHR5KGFyZ3ZbJ2FsbG93ZWQtbGljZW5zZSddKSxcbiAgICByZXNvdXJjZXM6IHJlc291cmNlcyxcbiAgICBkb250QXR0cmlidXRlOiBhcmd2Wydkb250LWF0dHJpYnV0ZSddLFxuICAgIHRlc3Q6IGFyZ3YudGVzdCxcbiAgICBtaW5pZnlXaGl0ZXNwYWNlOiBhcmd2WydtaW5pZnktd2hpdGVzcGFjZSddLFxuICAgIG1ldGFmaWxlOiBhcmd2Lm1ldGFmaWxlLFxuICB9O1xuXG4gIGNvbnN0IGJ1bmRsZSA9IG5ldyBCdW5kbGUocHJvcHMpO1xuXG4gIHN3aXRjaCAoY29tbWFuZCkge1xuICAgIGNhc2UgJ3ZhbGlkYXRlJzpcbiAgICAgIC8vIFdoZW4gdXNpbmcgYHlhcmdzLmNvbW1hbmQoY29tbWFuZCwgYnVpbGRlciBbLCBoYW5kbGVyXSlgIHdpdGhvdXQgdGhlIGhhbmRsZXJcbiAgICAgIC8vIGFzIHdlIGRvIGhlcmUsIHRoZXJlIGlzIG5vIHR5cGluZyBmb3IgY29tbWFuZC1zcGVjaWZpYyBvcHRpb25zLiBTbyBmb3JjZSBhIGNhc3QuXG4gICAgICBjb25zdCBmaXggPSBhcmd2LmZpeCBhcyBib29sZWFuIHwgdW5kZWZpbmVkO1xuICAgICAgdmFsaWRhdGUoYnVuZGxlLCB7IGZpeCB9KTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3dyaXRlJzpcbiAgICAgIHdyaXRlKGJ1bmRsZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdwYWNrJzpcbiAgICAgIGNvbnN0IHRhcmdldCA9IGFyZ3YuZGVzdGluYXRpb24gYXMgc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgICAgcGFjayhidW5kbGUsIHtcbiAgICAgICAgdGFyZ2V0LFxuICAgICAgfSk7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIGNvbW1hbmQ6ICR7Y29tbWFuZH1gKTtcbiAgfVxufVxuXG5mdW5jdGlvbiB3cml0ZShidW5kbGU6IEJ1bmRsZSkge1xuICBjb25zdCBidW5kbGVEaXIgPSBidW5kbGUud3JpdGUoKTtcbiAgY29uc29sZS5sb2coYnVuZGxlRGlyKTtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGUoYnVuZGxlOiBCdW5kbGUsIG9wdGlvbnM6IEJ1bmRsZVZhbGlkYXRlT3B0aW9ucyA9IHt9KSB7XG4gIGNvbnN0IHJlcG9ydCA9IGJ1bmRsZS52YWxpZGF0ZShvcHRpb25zKTtcbiAgaWYgKCFyZXBvcnQuc3VjY2Vzcykge1xuICAgIHRocm93IG5ldyBFcnJvcihyZXBvcnQuc3VtbWFyeSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcGFjayhidW5kbGU6IEJ1bmRsZSwgb3B0aW9ucz86IEJ1bmRsZVBhY2tPcHRpb25zKSB7XG4gIGJ1bmRsZS5wYWNrKG9wdGlvbnMpO1xufVxuIl19
|
package/lib/cli.js
CHANGED
|
@@ -1,119 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
-
if (mod && mod.__esModule) return mod;
|
|
20
|
-
var result = {};
|
|
21
|
-
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
-
__setModuleDefault(result, mod);
|
|
23
|
-
return result;
|
|
24
|
-
};
|
|
25
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
-
const
|
|
27
|
-
|
|
28
|
-
const yargs = __importStar(require("yargs"));
|
|
29
|
-
const api_1 = require("./api");
|
|
30
|
-
function versionNumber() {
|
|
31
|
-
return fs.readJSONSync(path.join(__dirname, '..', 'package.json')).version;
|
|
32
|
-
}
|
|
33
|
-
async function buildCommands() {
|
|
34
|
-
const argv = yargs
|
|
35
|
-
.usage('Usage: node-bundle COMMAND')
|
|
36
|
-
.option('entrypoint', { type: 'array', nargs: 1, desc: 'List of entrypoints to bundle' })
|
|
37
|
-
.option('external', { type: 'array', nargs: 1, default: [], desc: 'Packages in this list will be excluded from the bundle and added as dependencies (example: fsevents:optional)' })
|
|
38
|
-
.option('allowed-license', { type: 'array', nargs: 1, default: [], desc: 'List of valid licenses' })
|
|
39
|
-
.option('resource', { type: 'array', nargs: 1, default: [], desc: 'List of resources that need to be explicitly copied to the bundle (example: node_modules/proxy-agent/contextify.js:bin/contextify.js)' })
|
|
40
|
-
.option('dont-attribute', { type: 'string', desc: 'Dependencies matching this regular expressions wont be added to the notice file' })
|
|
41
|
-
.option('test', { type: 'string', desc: 'Validation command to sanity test the bundle after its created' })
|
|
42
|
-
.command('validate', 'Validate the package is ready for bundling', args => args
|
|
43
|
-
.option('fix', { type: 'boolean', default: false, alias: 'f', desc: 'Fix any fixable violations' }))
|
|
44
|
-
.command('write', 'Write the bundled version of the project to a temp directory')
|
|
45
|
-
.command('pack', 'Write the bundle and create the tarball')
|
|
46
|
-
.help()
|
|
47
|
-
.version(versionNumber())
|
|
48
|
-
.argv;
|
|
49
|
-
const command = argv._[0];
|
|
50
|
-
function undefinedIfEmpty(arr) {
|
|
51
|
-
if (!arr || arr.length === 0)
|
|
52
|
-
return undefined;
|
|
53
|
-
return arr;
|
|
54
|
-
}
|
|
55
|
-
const resources = {};
|
|
56
|
-
for (const resource of argv.resource) {
|
|
57
|
-
const parts = resource.split(':');
|
|
58
|
-
resources[parts[0]] = parts[1];
|
|
59
|
-
}
|
|
60
|
-
const optionalExternals = [];
|
|
61
|
-
const runtimeExternals = [];
|
|
62
|
-
for (const external of argv.external) {
|
|
63
|
-
const parts = external.split(':');
|
|
64
|
-
const name = parts[0];
|
|
65
|
-
const type = parts[1];
|
|
66
|
-
switch (type) {
|
|
67
|
-
case 'optional':
|
|
68
|
-
optionalExternals.push(name);
|
|
69
|
-
break;
|
|
70
|
-
case 'runtime':
|
|
71
|
-
runtimeExternals.push(name);
|
|
72
|
-
break;
|
|
73
|
-
default:
|
|
74
|
-
throw new Error(`Unsupported dependency type '${type}' for external package '${name}'. Supported types are: ['optional', 'runtime']`);
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
const props = {
|
|
78
|
-
packageDir: process.cwd(),
|
|
79
|
-
entryPoints: undefinedIfEmpty(argv.entrypoint),
|
|
80
|
-
externals: { dependencies: runtimeExternals, optionalDependencies: optionalExternals },
|
|
81
|
-
allowedLicenses: undefinedIfEmpty(argv['allowed-license']),
|
|
82
|
-
resources: resources,
|
|
83
|
-
dontAttribute: argv['dont-attribute'],
|
|
84
|
-
test: argv.test,
|
|
85
|
-
};
|
|
86
|
-
const bundle = new api_1.Bundle(props);
|
|
87
|
-
switch (command) {
|
|
88
|
-
case 'validate':
|
|
89
|
-
validate(bundle, { fix: argv.fix });
|
|
90
|
-
break;
|
|
91
|
-
case 'write':
|
|
92
|
-
write(bundle);
|
|
93
|
-
break;
|
|
94
|
-
case 'pack':
|
|
95
|
-
pack(bundle);
|
|
96
|
-
break;
|
|
97
|
-
default:
|
|
98
|
-
throw new Error(`Unknown command: ${command}`);
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
function write(bundle) {
|
|
102
|
-
const bundleDir = bundle.write();
|
|
103
|
-
console.log(bundleDir);
|
|
104
|
-
}
|
|
105
|
-
function validate(bundle, options = {}) {
|
|
106
|
-
const report = bundle.validate(options);
|
|
107
|
-
if (!report.success) {
|
|
108
|
-
throw new Error(report.summary);
|
|
109
|
-
}
|
|
110
|
-
}
|
|
111
|
-
function pack(bundle) {
|
|
112
|
-
bundle.pack();
|
|
113
|
-
}
|
|
114
|
-
buildCommands()
|
|
3
|
+
const cli_main_1 = require("./cli-main");
|
|
4
|
+
(0, cli_main_1.cliMain)(process.argv.slice(2))
|
|
115
5
|
.catch((err) => {
|
|
116
6
|
console.error(`Error: ${err.message}`);
|
|
117
7
|
process.exitCode = 1;
|
|
118
8
|
});
|
|
119
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
9
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2NsaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLHlDQUFxQztBQUVyQyxJQUFBLGtCQUFPLEVBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDM0IsS0FBSyxDQUFDLENBQUMsR0FBVSxFQUFFLEVBQUU7SUFDcEIsT0FBTyxDQUFDLEtBQUssQ0FBQyxVQUFVLEdBQUcsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBQ3ZDLE9BQU8sQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZCLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY2xpTWFpbiB9IGZyb20gJy4vY2xpLW1haW4nO1xuXG5jbGlNYWluKHByb2Nlc3MuYXJndi5zbGljZSgyKSlcbiAgLmNhdGNoKChlcnI6IEVycm9yKSA9PiB7XG4gICAgY29uc29sZS5lcnJvcihgRXJyb3I6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgcHJvY2Vzcy5leGl0Q29kZSA9IDE7XG4gIH0pO1xuIl19
|
package/lib/index.js
CHANGED
|
@@ -15,4 +15,4 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
17
|
__exportStar(require("./api"), exports);
|
|
18
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
18
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLHdDQUFzQiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vYXBpJztcbiJdfQ==
|
package/package.json
CHANGED
|
@@ -35,22 +35,24 @@
|
|
|
35
35
|
"organization": true
|
|
36
36
|
},
|
|
37
37
|
"devDependencies": {
|
|
38
|
+
"@stylistic/eslint-plugin": "^2",
|
|
38
39
|
"@types/fs-extra": "^9.0.13",
|
|
39
40
|
"@types/jest": "^27.5.2",
|
|
40
41
|
"@types/license-checker": "^25.0.6",
|
|
41
42
|
"@types/madge": "^5.0.3",
|
|
42
43
|
"@types/node": "^18",
|
|
43
|
-
"@typescript-eslint/eslint-plugin": "^
|
|
44
|
-
"@typescript-eslint/parser": "^
|
|
45
|
-
"cdklabs-projen-project-types": "^0.1
|
|
44
|
+
"@typescript-eslint/eslint-plugin": "^8",
|
|
45
|
+
"@typescript-eslint/parser": "^8",
|
|
46
|
+
"cdklabs-projen-project-types": "^0.3.1",
|
|
46
47
|
"commit-and-tag-version": "^12",
|
|
47
48
|
"constructs": "^10.0.0",
|
|
48
|
-
"eslint": "^
|
|
49
|
+
"eslint": "^9",
|
|
49
50
|
"eslint-import-resolver-typescript": "^2.7.1",
|
|
50
51
|
"eslint-plugin-import": "^2.31.0",
|
|
51
52
|
"jest": "^27",
|
|
52
|
-
"jest-junit": "^
|
|
53
|
-
"
|
|
53
|
+
"jest-junit": "^16",
|
|
54
|
+
"prettier": "^2.8",
|
|
55
|
+
"projen": "^0.92.9",
|
|
54
56
|
"ts-jest": "^27",
|
|
55
57
|
"ts-node": "^10.9.2",
|
|
56
58
|
"typescript": "^4.9.5"
|
|
@@ -68,7 +70,7 @@
|
|
|
68
70
|
"publishConfig": {
|
|
69
71
|
"access": "public"
|
|
70
72
|
},
|
|
71
|
-
"version": "0.0
|
|
73
|
+
"version": "1.0.0",
|
|
72
74
|
"jest": {
|
|
73
75
|
"coverageProvider": "v8",
|
|
74
76
|
"testMatch": [
|
package/CONTRIBUTING.md
DELETED
|
@@ -1,59 +0,0 @@
|
|
|
1
|
-
# Contributing Guidelines
|
|
2
|
-
|
|
3
|
-
Thank you for your interest in contributing to our project. Whether it's a bug report, new feature, correction, or additional
|
|
4
|
-
documentation, we greatly value feedback and contributions from our community.
|
|
5
|
-
|
|
6
|
-
Please read through this document before submitting any issues or pull requests to ensure we have all the necessary
|
|
7
|
-
information to effectively respond to your bug report or contribution.
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
## Reporting Bugs/Feature Requests
|
|
11
|
-
|
|
12
|
-
We welcome you to use the GitHub issue tracker to report bugs or suggest features.
|
|
13
|
-
|
|
14
|
-
When filing an issue, please check existing open, or recently closed, issues to make sure somebody else hasn't already
|
|
15
|
-
reported the issue. Please try to include as much information as you can. Details like these are incredibly useful:
|
|
16
|
-
|
|
17
|
-
* A reproducible test case or series of steps
|
|
18
|
-
* The version of our code being used
|
|
19
|
-
* Any modifications you've made relevant to the bug
|
|
20
|
-
* Anything unusual about your environment or deployment
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
## Contributing via Pull Requests
|
|
24
|
-
Contributions via pull requests are much appreciated. Before sending us a pull request, please ensure that:
|
|
25
|
-
|
|
26
|
-
1. You are working against the latest source on the *main* branch.
|
|
27
|
-
2. You check existing open, and recently merged, pull requests to make sure someone else hasn't addressed the problem already.
|
|
28
|
-
3. You open an issue to discuss any significant work - we would hate for your time to be wasted.
|
|
29
|
-
|
|
30
|
-
To send us a pull request, please:
|
|
31
|
-
|
|
32
|
-
1. Fork the repository.
|
|
33
|
-
2. Modify the source; please focus on the specific change you are contributing. If you also reformat all the code, it will be hard for us to focus on your change.
|
|
34
|
-
3. Ensure local tests pass.
|
|
35
|
-
4. Commit to your fork using clear commit messages.
|
|
36
|
-
5. Send us a pull request, answering any default questions in the pull request interface.
|
|
37
|
-
6. Pay attention to any automated CI failures reported in the pull request, and stay involved in the conversation.
|
|
38
|
-
|
|
39
|
-
GitHub provides additional document on [forking a repository](https://help.github.com/articles/fork-a-repo/) and
|
|
40
|
-
[creating a pull request](https://help.github.com/articles/creating-a-pull-request/).
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
## Finding contributions to work on
|
|
44
|
-
Looking at the existing issues is a great way to find something to contribute on. As our projects, by default, use the default GitHub issue labels (enhancement/bug/duplicate/help wanted/invalid/question/wontfix), looking at any 'help wanted' issues is a great place to start.
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
## Code of Conduct
|
|
48
|
-
This project has adopted the [Amazon Open Source Code of Conduct](https://aws.github.io/code-of-conduct).
|
|
49
|
-
For more information see the [Code of Conduct FAQ](https://aws.github.io/code-of-conduct-faq) or contact
|
|
50
|
-
opensource-codeofconduct@amazon.com with any additional questions or comments.
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
## Security issue notifications
|
|
54
|
-
If you discover a potential security issue in this project we ask that you notify AWS/Amazon Security via our [vulnerability reporting page](http://aws.amazon.com/security/vulnerability-reporting/). Please do **not** create a public github issue.
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
## Licensing
|
|
58
|
-
|
|
59
|
-
See the [LICENSE](LICENSE) file for our project's licensing. We will ask you to confirm the licensing of your contribution.
|