@angular/cli 6.2.5 → 6.2.9

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.
@@ -1,14 +1,12 @@
1
- /**
2
- * @license
3
- * Copyright Google Inc. All Rights Reserved.
4
- *
5
- * Use of this source code is governed by an MIT-style license that can be
6
- * found in the LICENSE file at https://angular.io/license
7
- */
8
1
  import { SchematicCommand } from '../models/schematic-command';
9
2
  export declare class AddCommand extends SchematicCommand {
10
3
  readonly allowPrivateSchematics: boolean;
4
+ readonly packageManager: string;
11
5
  private _parseSchematicOptions;
12
6
  validate(options: any): boolean;
13
7
  run(options: any): Promise<number | void>;
8
+ private isPackageInstalled;
9
+ private executeSchematic;
10
+ private findProjectVersion;
11
+ private hasMismatchedPeer;
14
12
  }
@@ -1,11 +1,4 @@
1
1
  "use strict";
2
- /**
3
- * @license
4
- * Copyright Google Inc. All Rights Reserved.
5
- *
6
- * Use of this source code is governed by an MIT-style license that can be
7
- * found in the LICENSE file at https://angular.io/license
8
- */
9
2
  var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
10
3
  return new (P || (P = Promise))(function (resolve, reject) {
11
4
  function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
@@ -15,16 +8,29 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
15
8
  });
16
9
  };
17
10
  Object.defineProperty(exports, "__esModule", { value: true });
11
+ /**
12
+ * @license
13
+ * Copyright Google Inc. All Rights Reserved.
14
+ *
15
+ * Use of this source code is governed by an MIT-style license that can be
16
+ * found in the LICENSE file at https://angular.io/license
17
+ */
18
18
  // tslint:disable:no-global-tslint-disable no-any
19
19
  const core_1 = require("@angular-devkit/core");
20
+ const node_1 = require("@angular-devkit/core/node");
20
21
  const tools_1 = require("@angular-devkit/schematics/tools");
22
+ const path_1 = require("path");
23
+ const semver_1 = require("semver");
21
24
  const command_runner_1 = require("../models/command-runner");
22
25
  const schematic_command_1 = require("../models/schematic-command");
23
26
  const config_1 = require("../utilities/config");
27
+ const package_metadata_1 = require("../utilities/package-metadata");
28
+ const npa = require('npm-package-arg');
24
29
  class AddCommand extends schematic_command_1.SchematicCommand {
25
30
  constructor() {
26
31
  super(...arguments);
27
32
  this.allowPrivateSchematics = true;
33
+ this.packageManager = config_1.getPackageManager();
28
34
  }
29
35
  _parseSchematicOptions(collectionName) {
30
36
  return __awaiter(this, void 0, void 0, function* () {
@@ -53,22 +59,105 @@ class AddCommand extends schematic_command_1.SchematicCommand {
53
59
  + `${core_1.terminal.yellow('ng add [name] ')}. For more details, use "ng help".`);
54
60
  return 1;
55
61
  }
56
- const packageManager = config_1.getPackageManager();
62
+ let packageIdentifier;
63
+ try {
64
+ packageIdentifier = npa(options.collection);
65
+ }
66
+ catch (e) {
67
+ this.logger.error(e.message);
68
+ return 1;
69
+ }
70
+ if (packageIdentifier.registry && this.isPackageInstalled(packageIdentifier.name)) {
71
+ // Already installed so just run schematic
72
+ this.logger.info('Skipping installation: Package already installed');
73
+ // Reparse the options with the new schematic accessible.
74
+ options = yield this._parseSchematicOptions(packageIdentifier.name);
75
+ return this.executeSchematic(packageIdentifier.name, options);
76
+ }
77
+ const usingYarn = this.packageManager === 'yarn';
78
+ if (packageIdentifier.type === 'tag' && !packageIdentifier.rawSpec) {
79
+ // only package name provided; search for viable version
80
+ // plus special cases for packages that did not have peer deps setup
81
+ let packageMetadata;
82
+ try {
83
+ packageMetadata = yield package_metadata_1.fetchPackageMetadata(packageIdentifier.name, this.logger, { usingYarn });
84
+ }
85
+ catch (e) {
86
+ this.logger.error('Unable to fetch package metadata: ' + e.message);
87
+ return 1;
88
+ }
89
+ const latestManifest = packageMetadata.tags['latest'];
90
+ if (latestManifest && Object.keys(latestManifest.peerDependencies).length === 0) {
91
+ if (latestManifest.name === '@angular/pwa') {
92
+ const version = yield this.findProjectVersion('@angular/cli');
93
+ // tslint:disable-next-line:no-any
94
+ const semverOptions = { includePrerelease: true };
95
+ if (version
96
+ && ((semver_1.validRange(version) && semver_1.intersects(version, '6', semverOptions))
97
+ || (semver_1.valid(version) && semver_1.satisfies(version, '6', semverOptions)))) {
98
+ packageIdentifier = npa.resolve('@angular/pwa', 'v6-lts');
99
+ }
100
+ }
101
+ }
102
+ else if (!latestManifest || (yield this.hasMismatchedPeer(latestManifest))) {
103
+ // 'latest' is invalid so search for most recent matching package
104
+ const versionManifests = Array.from(packageMetadata.versions.values())
105
+ .filter(value => !semver_1.prerelease(value.version));
106
+ versionManifests.sort((a, b) => semver_1.rcompare(a.version, b.version, true));
107
+ let newIdentifier;
108
+ for (const versionManifest of versionManifests) {
109
+ if (!(yield this.hasMismatchedPeer(versionManifest))) {
110
+ newIdentifier = npa.resolve(packageIdentifier.name, versionManifest.version);
111
+ break;
112
+ }
113
+ }
114
+ if (!newIdentifier) {
115
+ this.logger.warn('Unable to find compatible package. Using \'latest\'.');
116
+ }
117
+ else {
118
+ packageIdentifier = newIdentifier;
119
+ }
120
+ }
121
+ }
122
+ let collectionName = packageIdentifier.name;
123
+ if (!packageIdentifier.registry) {
124
+ try {
125
+ const manifest = yield package_metadata_1.fetchPackageManifest(packageIdentifier, this.logger, { usingYarn });
126
+ collectionName = manifest.name;
127
+ if (yield this.hasMismatchedPeer(manifest)) {
128
+ console.warn('Package has unmet peer dependencies. Adding the package may not succeed.');
129
+ }
130
+ }
131
+ catch (e) {
132
+ this.logger.error('Unable to fetch package manifest: ' + e.message);
133
+ return 1;
134
+ }
135
+ }
57
136
  const npmInstall = require('../tasks/npm-install').default;
58
- const packageName = firstArg.startsWith('@')
59
- ? firstArg.split('/', 2).join('/')
60
- : firstArg.split('/', 1)[0];
61
- // Remove the tag/version from the package name.
62
- const collectionName = (packageName.startsWith('@')
63
- ? packageName.split('@', 2).join('@')
64
- : packageName.split('@', 1).join('@')) + firstArg.slice(packageName.length);
65
137
  // We don't actually add the package to package.json, that would be the work of the package
66
138
  // itself.
67
- yield npmInstall(packageName, this.logger, packageManager, this.project.root);
139
+ yield npmInstall(packageIdentifier.raw, this.logger, this.packageManager, this.project.root);
68
140
  // Reparse the options with the new schematic accessible.
69
141
  options = yield this._parseSchematicOptions(collectionName);
142
+ return this.executeSchematic(collectionName, options);
143
+ });
144
+ }
145
+ isPackageInstalled(name) {
146
+ try {
147
+ node_1.resolve(name, { checkLocal: true, basedir: this.project.root });
148
+ return true;
149
+ }
150
+ catch (e) {
151
+ if (!(e instanceof node_1.ModuleNotFoundException)) {
152
+ throw e;
153
+ }
154
+ }
155
+ return false;
156
+ }
157
+ executeSchematic(collectionName, options) {
158
+ return __awaiter(this, void 0, void 0, function* () {
70
159
  const runOptions = {
71
- schematicOptions: options,
160
+ schematicOptions: options || [],
72
161
  workingDir: this.project.root,
73
162
  collectionName,
74
163
  schematicName: 'ng-add',
@@ -91,6 +180,75 @@ class AddCommand extends schematic_command_1.SchematicCommand {
91
180
  }
92
181
  });
93
182
  }
183
+ findProjectVersion(name) {
184
+ return __awaiter(this, void 0, void 0, function* () {
185
+ let installedPackage;
186
+ try {
187
+ installedPackage = node_1.resolve(name, { checkLocal: true, basedir: this.project.root, resolvePackageJson: true });
188
+ }
189
+ catch (_a) { }
190
+ if (installedPackage) {
191
+ try {
192
+ const installed = yield package_metadata_1.fetchPackageManifest(path_1.dirname(installedPackage), this.logger);
193
+ return installed.version;
194
+ }
195
+ catch (_b) { }
196
+ }
197
+ let projectManifest;
198
+ try {
199
+ projectManifest = yield package_metadata_1.fetchPackageManifest(this.project.root, this.logger);
200
+ }
201
+ catch (_c) { }
202
+ if (projectManifest) {
203
+ let version = projectManifest.dependencies[name];
204
+ if (version) {
205
+ return version;
206
+ }
207
+ version = projectManifest.devDependencies[name];
208
+ if (version) {
209
+ return version;
210
+ }
211
+ }
212
+ return null;
213
+ });
214
+ }
215
+ hasMismatchedPeer(manifest) {
216
+ return __awaiter(this, void 0, void 0, function* () {
217
+ for (const peer in manifest.peerDependencies) {
218
+ let peerIdentifier;
219
+ try {
220
+ peerIdentifier = npa.resolve(peer, manifest.peerDependencies[peer]);
221
+ }
222
+ catch (_a) {
223
+ this.logger.warn(`Invalid peer dependency ${peer} found in package.`);
224
+ continue;
225
+ }
226
+ if (peerIdentifier.type === 'version' || peerIdentifier.type === 'range') {
227
+ try {
228
+ const version = yield this.findProjectVersion(peer);
229
+ if (!version) {
230
+ continue;
231
+ }
232
+ // tslint:disable-next-line:no-any
233
+ const options = { includePrerelease: true };
234
+ if (!semver_1.intersects(version, peerIdentifier.rawSpec, options)
235
+ && !semver_1.satisfies(version, peerIdentifier.rawSpec, options)) {
236
+ return true;
237
+ }
238
+ }
239
+ catch (_b) {
240
+ // Not found or invalid so ignore
241
+ continue;
242
+ }
243
+ }
244
+ else {
245
+ // type === 'tag' | 'file' | 'directory' | 'remote' | 'git'
246
+ // Cannot accurately compare these as the tag/location may have changed since install
247
+ }
248
+ }
249
+ return false;
250
+ });
251
+ }
94
252
  }
95
253
  exports.AddCommand = AddCommand;
96
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkLWltcGwuanMiLCJzb3VyY2VSb290IjoiLi8iLCJzb3VyY2VzIjpbInBhY2thZ2VzL2FuZ3VsYXIvY2xpL2NvbW1hbmRzL2FkZC1pbXBsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7O0dBTUc7Ozs7Ozs7Ozs7QUFFSCxpREFBaUQ7QUFDakQsK0NBQXNEO0FBQ3RELDREQUF1RjtBQUN2Riw2REFBd0Q7QUFDeEQsbUVBQStEO0FBRS9ELGdEQUF3RDtBQUd4RCxnQkFBd0IsU0FBUSxvQ0FBZ0I7SUFBaEQ7O1FBQ1csMkJBQXNCLEdBQUcsSUFBSSxDQUFDO0lBMkZ6QyxDQUFDO0lBekZlLHNCQUFzQixDQUFDLGNBQXNCOztZQUN6RCxNQUFNLGdCQUFnQixHQUFHLE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQztnQkFDN0MsYUFBYSxFQUFFLFFBQVE7Z0JBQ3ZCLGNBQWM7YUFDZixDQUFDLENBQUM7WUFDSCxJQUFJLENBQUMsVUFBVSxDQUFDLGdCQUFnQixDQUFDLENBQUM7WUFFbEMsT0FBTyw2QkFBWSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ25ELENBQUM7S0FBQTtJQUVELFFBQVEsQ0FBQyxPQUFZO1FBQ25CLE1BQU0sY0FBYyxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFcEMsSUFBSSxDQUFDLGNBQWMsRUFBRTtZQUNuQixJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FDZixvRUFBb0U7a0JBQ2xFLEdBQUcsZUFBUSxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxvQ0FBb0MsQ0FDM0UsQ0FBQztZQUVGLE9BQU8sS0FBSyxDQUFDO1NBQ2Q7UUFFRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFSyxHQUFHLENBQUMsT0FBWTs7WUFDcEIsTUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUU5QixJQUFJLENBQUMsUUFBUSxFQUFFO2dCQUNiLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUNmLG9FQUFvRTtzQkFDbEUsR0FBRyxlQUFRLENBQUMsTUFBTSxDQUFDLGdCQUFnQixDQUFDLG9DQUFvQyxDQUMzRSxDQUFDO2dCQUVGLE9BQU8sQ0FBQyxDQUFDO2FBQ1Y7WUFFRCxNQUFNLGNBQWMsR0FBRywwQkFBaUIsRUFBRSxDQUFDO1lBRTNDLE1BQU0sVUFBVSxHQUFlLE9BQU8sQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDLE9BQU8sQ0FBQztZQUV2RSxNQUFNLFdBQVcsR0FBRyxRQUFRLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQztnQkFDMUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUM7Z0JBQ2xDLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUU5QixnREFBZ0Q7WUFDaEQsTUFBTSxjQUFjLEdBQUcsQ0FDckIsV0FBVyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUM7Z0JBQ3pCLENBQUMsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDO2dCQUNyQyxDQUFDLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUN4QyxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBRXZDLDJGQUEyRjtZQUMzRixVQUFVO1lBQ1YsTUFBTSxVQUFVLENBQ2QsV0FBVyxFQUNYLElBQUksQ0FBQyxNQUFNLEVBQ1gsY0FBYyxFQUNkLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUNsQixDQUFDO1lBRUYseURBQXlEO1lBQ3pELE9BQU8sR0FBRyxNQUFNLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxjQUFjLENBQUMsQ0FBQztZQUU1RCxNQUFNLFVBQVUsR0FBRztnQkFDakIsZ0JBQWdCLEVBQUUsT0FBTztnQkFDekIsVUFBVSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSTtnQkFDN0IsY0FBYztnQkFDZCxhQUFhLEVBQUUsUUFBUTtnQkFDdkIsWUFBWSxFQUFFLElBQUk7Z0JBQ2xCLE1BQU0sRUFBRSxLQUFLO2dCQUNiLEtBQUssRUFBRSxLQUFLO2FBQ2IsQ0FBQztZQUVGLElBQUk7Z0JBQ0YsT0FBTyxNQUFNLElBQUksQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLENBQUM7YUFDNUM7WUFBQyxPQUFPLENBQUMsRUFBRTtnQkFDVixJQUFJLENBQUMsWUFBWSwyQ0FBbUMsRUFBRTtvQkFDcEQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsV0FBSSxDQUFDLE9BQU8sQ0FBQTs7O1NBRzdCLENBQUMsQ0FBQztvQkFFSCxPQUFPLENBQUMsQ0FBQztpQkFDVjtnQkFFRCxNQUFNLENBQUMsQ0FBQzthQUNUO1FBQ0gsQ0FBQztLQUFBO0NBQ0Y7QUE1RkQsZ0NBNEZDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG4vLyB0c2xpbnQ6ZGlzYWJsZTpuby1nbG9iYWwtdHNsaW50LWRpc2FibGUgbm8tYW55XG5pbXBvcnQgeyB0YWdzLCB0ZXJtaW5hbCB9IGZyb20gJ0Bhbmd1bGFyLWRldmtpdC9jb3JlJztcbmltcG9ydCB7IE5vZGVQYWNrYWdlRG9lc05vdFN1cHBvcnRTY2hlbWF0aWNzIH0gZnJvbSAnQGFuZ3VsYXItZGV2a2l0L3NjaGVtYXRpY3MvdG9vbHMnO1xuaW1wb3J0IHsgcGFyc2VPcHRpb25zIH0gZnJvbSAnLi4vbW9kZWxzL2NvbW1hbmQtcnVubmVyJztcbmltcG9ydCB7IFNjaGVtYXRpY0NvbW1hbmQgfSBmcm9tICcuLi9tb2RlbHMvc2NoZW1hdGljLWNvbW1hbmQnO1xuaW1wb3J0IHsgTnBtSW5zdGFsbCB9IGZyb20gJy4uL3Rhc2tzL25wbS1pbnN0YWxsJztcbmltcG9ydCB7IGdldFBhY2thZ2VNYW5hZ2VyIH0gZnJvbSAnLi4vdXRpbGl0aWVzL2NvbmZpZyc7XG5cblxuZXhwb3J0IGNsYXNzIEFkZENvbW1hbmQgZXh0ZW5kcyBTY2hlbWF0aWNDb21tYW5kIHtcbiAgcmVhZG9ubHkgYWxsb3dQcml2YXRlU2NoZW1hdGljcyA9IHRydWU7XG5cbiAgcHJpdmF0ZSBhc3luYyBfcGFyc2VTY2hlbWF0aWNPcHRpb25zKGNvbGxlY3Rpb25OYW1lOiBzdHJpbmcpOiBQcm9taXNlPGFueT4ge1xuICAgIGNvbnN0IHNjaGVtYXRpY09wdGlvbnMgPSBhd2FpdCB0aGlzLmdldE9wdGlvbnMoe1xuICAgICAgc2NoZW1hdGljTmFtZTogJ25nLWFkZCcsXG4gICAgICBjb2xsZWN0aW9uTmFtZSxcbiAgICB9KTtcbiAgICB0aGlzLmFkZE9wdGlvbnMoc2NoZW1hdGljT3B0aW9ucyk7XG5cbiAgICByZXR1cm4gcGFyc2VPcHRpb25zKHRoaXMuX3Jhd0FyZ3MsIHRoaXMub3B0aW9ucyk7XG4gIH1cblxuICB2YWxpZGF0ZShvcHRpb25zOiBhbnkpIHtcbiAgICBjb25zdCBjb2xsZWN0aW9uTmFtZSA9IG9wdGlvbnMuX1swXTtcblxuICAgIGlmICghY29sbGVjdGlvbk5hbWUpIHtcbiAgICAgIHRoaXMubG9nZ2VyLmZhdGFsKFxuICAgICAgICBgVGhlIFwibmcgYWRkXCIgY29tbWFuZCByZXF1aXJlcyBhIG5hbWUgYXJndW1lbnQgdG8gYmUgc3BlY2lmaWVkIGVnLiBgXG4gICAgICAgICsgYCR7dGVybWluYWwueWVsbG93KCduZyBhZGQgW25hbWVdICcpfS4gRm9yIG1vcmUgZGV0YWlscywgdXNlIFwibmcgaGVscFwiLmAsXG4gICAgICApO1xuXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBhc3luYyBydW4ob3B0aW9uczogYW55KSB7XG4gICAgY29uc3QgZmlyc3RBcmcgPSBvcHRpb25zLl9bMF07XG5cbiAgICBpZiAoIWZpcnN0QXJnKSB7XG4gICAgICB0aGlzLmxvZ2dlci5mYXRhbChcbiAgICAgICAgYFRoZSBcIm5nIGFkZFwiIGNvbW1hbmQgcmVxdWlyZXMgYSBuYW1lIGFyZ3VtZW50IHRvIGJlIHNwZWNpZmllZCBlZy4gYFxuICAgICAgICArIGAke3Rlcm1pbmFsLnllbGxvdygnbmcgYWRkIFtuYW1lXSAnKX0uIEZvciBtb3JlIGRldGFpbHMsIHVzZSBcIm5nIGhlbHBcIi5gLFxuICAgICAgKTtcblxuICAgICAgcmV0dXJuIDE7XG4gICAgfVxuXG4gICAgY29uc3QgcGFja2FnZU1hbmFnZXIgPSBnZXRQYWNrYWdlTWFuYWdlcigpO1xuXG4gICAgY29uc3QgbnBtSW5zdGFsbDogTnBtSW5zdGFsbCA9IHJlcXVpcmUoJy4uL3Rhc2tzL25wbS1pbnN0YWxsJykuZGVmYXVsdDtcblxuICAgIGNvbnN0IHBhY2thZ2VOYW1lID0gZmlyc3RBcmcuc3RhcnRzV2l0aCgnQCcpXG4gICAgICA/IGZpcnN0QXJnLnNwbGl0KCcvJywgMikuam9pbignLycpXG4gICAgICA6IGZpcnN0QXJnLnNwbGl0KCcvJywgMSlbMF07XG5cbiAgICAvLyBSZW1vdmUgdGhlIHRhZy92ZXJzaW9uIGZyb20gdGhlIHBhY2thZ2UgbmFtZS5cbiAgICBjb25zdCBjb2xsZWN0aW9uTmFtZSA9IChcbiAgICAgIHBhY2thZ2VOYW1lLnN0YXJ0c1dpdGgoJ0AnKVxuICAgICAgICA/IHBhY2thZ2VOYW1lLnNwbGl0KCdAJywgMikuam9pbignQCcpXG4gICAgICAgIDogcGFja2FnZU5hbWUuc3BsaXQoJ0AnLCAxKS5qb2luKCdAJylcbiAgICApICsgZmlyc3RBcmcuc2xpY2UocGFja2FnZU5hbWUubGVuZ3RoKTtcblxuICAgIC8vIFdlIGRvbid0IGFjdHVhbGx5IGFkZCB0aGUgcGFja2FnZSB0byBwYWNrYWdlLmpzb24sIHRoYXQgd291bGQgYmUgdGhlIHdvcmsgb2YgdGhlIHBhY2thZ2VcbiAgICAvLyBpdHNlbGYuXG4gICAgYXdhaXQgbnBtSW5zdGFsbChcbiAgICAgIHBhY2thZ2VOYW1lLFxuICAgICAgdGhpcy5sb2dnZXIsXG4gICAgICBwYWNrYWdlTWFuYWdlcixcbiAgICAgIHRoaXMucHJvamVjdC5yb290LFxuICAgICk7XG5cbiAgICAvLyBSZXBhcnNlIHRoZSBvcHRpb25zIHdpdGggdGhlIG5ldyBzY2hlbWF0aWMgYWNjZXNzaWJsZS5cbiAgICBvcHRpb25zID0gYXdhaXQgdGhpcy5fcGFyc2VTY2hlbWF0aWNPcHRpb25zKGNvbGxlY3Rpb25OYW1lKTtcblxuICAgIGNvbnN0IHJ1bk9wdGlvbnMgPSB7XG4gICAgICBzY2hlbWF0aWNPcHRpb25zOiBvcHRpb25zLFxuICAgICAgd29ya2luZ0RpcjogdGhpcy5wcm9qZWN0LnJvb3QsXG4gICAgICBjb2xsZWN0aW9uTmFtZSxcbiAgICAgIHNjaGVtYXRpY05hbWU6ICduZy1hZGQnLFxuICAgICAgYWxsb3dQcml2YXRlOiB0cnVlLFxuICAgICAgZHJ5UnVuOiBmYWxzZSxcbiAgICAgIGZvcmNlOiBmYWxzZSxcbiAgICB9O1xuXG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLnJ1blNjaGVtYXRpYyhydW5PcHRpb25zKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBpZiAoZSBpbnN0YW5jZW9mIE5vZGVQYWNrYWdlRG9lc05vdFN1cHBvcnRTY2hlbWF0aWNzKSB7XG4gICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKHRhZ3Mub25lTGluZWBcbiAgICAgICAgICBUaGUgcGFja2FnZSB0aGF0IHlvdSBhcmUgdHJ5aW5nIHRvIGFkZCBkb2VzIG5vdCBzdXBwb3J0IHNjaGVtYXRpY3MuIFlvdSBjYW4gdHJ5IHVzaW5nXG4gICAgICAgICAgYSBkaWZmZXJlbnQgdmVyc2lvbiBvZiB0aGUgcGFja2FnZSBvciBjb250YWN0IHRoZSBwYWNrYWdlIGF1dGhvciB0byBhZGQgbmctYWRkIHN1cHBvcnQuXG4gICAgICAgIGApO1xuXG4gICAgICAgIHJldHVybiAxO1xuICAgICAgfVxuXG4gICAgICB0aHJvdyBlO1xuICAgIH1cbiAgfVxufVxuIl19
254
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkLWltcGwuanMiLCJzb3VyY2VSb290IjoiLi8iLCJzb3VyY2VzIjpbInBhY2thZ2VzL2FuZ3VsYXIvY2xpL2NvbW1hbmRzL2FkZC1pbXBsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFBQTs7Ozs7O0dBTUc7QUFDSCxpREFBaUQ7QUFDakQsK0NBQXNEO0FBQ3RELG9EQUE2RTtBQUM3RSw0REFBdUY7QUFDdkYsK0JBQStCO0FBQy9CLG1DQUF3RjtBQUN4Riw2REFBd0Q7QUFDeEQsbUVBQStEO0FBRS9ELGdEQUF3RDtBQUN4RCxvRUFJdUM7QUFFdkMsTUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDLGlCQUFpQixDQUFDLENBQUM7QUFFdkMsZ0JBQXdCLFNBQVEsb0NBQWdCO0lBQWhEOztRQUNXLDJCQUFzQixHQUFHLElBQUksQ0FBQztRQUM5QixtQkFBYyxHQUFHLDBCQUFpQixFQUFFLENBQUM7SUE0UWhELENBQUM7SUExUWUsc0JBQXNCLENBQUMsY0FBc0I7O1lBQ3pELE1BQU0sZ0JBQWdCLEdBQUcsTUFBTSxJQUFJLENBQUMsVUFBVSxDQUFDO2dCQUM3QyxhQUFhLEVBQUUsUUFBUTtnQkFDdkIsY0FBYzthQUNmLENBQUMsQ0FBQztZQUNILElBQUksQ0FBQyxVQUFVLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztZQUVsQyxPQUFPLDZCQUFZLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDbkQsQ0FBQztLQUFBO0lBRUQsUUFBUSxDQUFDLE9BQVk7UUFDbkIsTUFBTSxjQUFjLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUVwQyxJQUFJLENBQUMsY0FBYyxFQUFFO1lBQ25CLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUNmLG9FQUFvRTtrQkFDbEUsR0FBRyxlQUFRLENBQUMsTUFBTSxDQUFDLGdCQUFnQixDQUFDLG9DQUFvQyxDQUMzRSxDQUFDO1lBRUYsT0FB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QUMsSUFBSSxDQUFDLENBQUM7d0JBQ3BELElBQUksQ0FBQyxPQUFPLEVBQUU7NEJBQ1osU0FBUzt5QkFDVjt3QkFFRCxrQ0FBa0M7d0JBQ2xDLE1BQU0sT0FBTyxHQUFHLEVBQUUsaUJBQWlCLEVBQUUsSUFBSSxFQUFTLENBQUM7d0JBRW5ELElBQUksQ0FBQyxtQkFBVSxDQUFDLE9BQU8sRUFBRSxjQUFjLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQzsrQkFDbEQsQ0FBQyxrQkFBUyxDQUFDLE9BQU8sRUFBRSxjQUFjLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxFQUFFOzRCQUMzRCxPQUFPLElBQUksQ0FBQzt5QkFDYjtxQkFDRjtvQkFBQyxXQUFNO3dCQUNOLGlDQUFpQzt3QkFDakMsU0FBUztxQkFDVjtpQkFDRjtxQkFBTTtvQkFDTCwyREFBMkQ7b0JBQzNELHFGQUFxRjtpQkFDdEY7YUFFRjtZQUVELE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztLQUFBO0NBQ0Y7QUE5UUQsZ0NBOFFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuLy8gdHNsaW50OmRpc2FibGU6bm8tZ2xvYmFsLXRzbGludC1kaXNhYmxlIG5vLWFueVxuaW1wb3J0IHsgdGFncywgdGVybWluYWwgfSBmcm9tICdAYW5ndWxhci1kZXZraXQvY29yZSc7XG5pbXBvcnQgeyBNb2R1bGVOb3RGb3VuZEV4Y2VwdGlvbiwgcmVzb2x2ZSB9IGZyb20gJ0Bhbmd1bGFyLWRldmtpdC9jb3JlL25vZGUnO1xuaW1wb3J0IHsgTm9kZVBhY2thZ2VEb2VzTm90U3VwcG9ydFNjaGVtYXRpY3MgfSBmcm9tICdAYW5ndWxhci1kZXZraXQvc2NoZW1hdGljcy90b29scyc7XG5pbXBvcnQgeyBkaXJuYW1lIH0gZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBpbnRlcnNlY3RzLCBwcmVyZWxlYXNlLCByY29tcGFyZSwgc2F0aXNmaWVzLCB2YWxpZCwgdmFsaWRSYW5nZSB9IGZyb20gJ3NlbXZlcic7XG5pbXBvcnQgeyBwYXJzZU9wdGlvbnMgfSBmcm9tICcuLi9tb2RlbHMvY29tbWFuZC1ydW5uZXInO1xuaW1wb3J0IHsgU2NoZW1hdGljQ29tbWFuZCB9IGZyb20gJy4uL21vZGVscy9zY2hlbWF0aWMtY29tbWFuZCc7XG5pbXBvcnQgeyBOcG1JbnN0YWxsIH0gZnJvbSAnLi4vdGFza3MvbnBtLWluc3RhbGwnO1xuaW1wb3J0IHsgZ2V0UGFja2FnZU1hbmFnZXIgfSBmcm9tICcuLi91dGlsaXRpZXMvY29uZmlnJztcbmltcG9ydCB7XG4gIFBhY2thZ2VNYW5pZmVzdCxcbiAgZmV0Y2hQYWNrYWdlTWFuaWZlc3QsXG4gIGZldGNoUGFja2FnZU1ldGFkYXRhLFxufSBmcm9tICcuLi91dGlsaXRpZXMvcGFja2FnZS1tZXRhZGF0YSc7XG5cbmNvbnN0IG5wYSA9IHJlcXVpcmUoJ25wbS1wYWNrYWdlLWFyZycpO1xuXG5leHBvcnQgY2xhc3MgQWRkQ29tbWFuZCBleHRlbmRzIFNjaGVtYXRpY0NvbW1hbmQge1xuICByZWFkb25seSBhbGxvd1ByaXZhdGVTY2hlbWF0aWNzID0gdHJ1ZTtcbiAgcmVhZG9ubHkgcGFja2FnZU1hbmFnZXIgPSBnZXRQYWNrYWdlTWFuYWdlcigpO1xuXG4gIHByaXZhdGUgYXN5bmMgX3BhcnNlU2NoZW1hdGljT3B0aW9ucyhjb2xsZWN0aW9uTmFtZTogc3RyaW5nKTogUHJvbWlzZTxhbnk+IHtcbiAgICBjb25zdCBzY2hlbWF0aWNPcHRpb25zID0gYXdhaXQgdGhpcy5nZXRPcHRpb25zKHtcbiAgICAgIHNjaGVtYXRpY05hbWU6ICduZy1hZGQnLFxuICAgICAgY29sbGVjdGlvbk5hbWUsXG4gICAgfSk7XG4gICAgdGhpcy5hZGRPcHRpb25zKHNjaGVtYXRpY09wdGlvbnMpO1xuXG4gICAgcmV0dXJuIHBhcnNlT3B0aW9ucyh0aGlzLl9yYXdBcmdzLCB0aGlzLm9wdGlvbnMpO1xuICB9XG5cbiAgdmFsaWRhdGUob3B0aW9uczogYW55KSB7XG4gICAgY29uc3QgY29sbGVjdGlvbk5hbWUgPSBvcHRpb25zLl9bMF07XG5cbiAgICBpZiAoIWNvbGxlY3Rpb25OYW1lKSB7XG4gICAgICB0aGlzLmxvZ2dlci5mYXRhbChcbiAgICAgICAgYFRoZSBcIm5nIGFkZFwiIGNvbW1hbmQgcmVxdWlyZXMgYSBuYW1lIGFyZ3VtZW50IHRvIGJlIHNwZWNpZmllZCBlZy4gYFxuICAgICAgICArIGAke3Rlcm1pbmFsLnllbGxvdygnbmcgYWRkIFtuYW1lXSAnKX0uIEZvciBtb3JlIGRldGFpbHMsIHVzZSBcIm5nIGhlbHBcIi5gLFxuICAgICAgKTtcblxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgYXN5bmMgcnVuKG9wdGlvbnM6IGFueSkge1xuICAgIGNvbnN0IGZpcnN0QXJnID0gb3B0aW9ucy5fWzBdO1xuXG4gICAgaWYgKCFmaXJzdEFyZykge1xuICAgICAgdGhpcy5sb2dnZXIuZmF0YWwoXG4gICAgICAgIGBUaGUgXCJuZyBhZGRcIiBjb21tYW5kIHJlcXVpcmVzIGEgbmFtZSBhcmd1bWVudCB0byBiZSBzcGVjaWZpZWQgZWcuIGBcbiAgICAgICAgKyBgJHt0ZXJtaW5hbC55ZWxsb3coJ25nIGFkZCBbbmFtZV0gJyl9LiBGb3IgbW9yZSBkZXRhaWxzLCB1c2UgXCJuZyBoZWxwXCIuYCxcbiAgICAgICk7XG5cbiAgICAgIHJldHVybiAxO1xuICAgIH1cblxuICAgIGxldCBwYWNrYWdlSWRlbnRpZmllcjtcbiAgICB0cnkge1xuICAgICAgcGFja2FnZUlkZW50aWZpZXIgPSBucGEob3B0aW9ucy5jb2xsZWN0aW9uKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLmxvZ2dlci5lcnJvcihlLm1lc3NhZ2UpO1xuXG4gICAgICByZXR1cm4gMTtcbiAgICB9XG5cbiAgICBpZiAocGFja2FnZUlkZW50aWZpZXIucmVnaXN0cnkgJiYgdGhpcy5pc1BhY2thZ2VJbnN0YWxsZWQocGFja2FnZUlkZW50aWZpZXIubmFtZSkpIHtcbiAgICAgIC8vIEFscmVhZHkgaW5zdGFsbGVkIHNvIGp1c3QgcnVuIHNjaGVtYXRpY1xuICAgICAgdGhpcy5sb2dnZXIuaW5mbygnU2tpcHBpbmcgaW5zdGFsbGF0aW9uOiBQYWNrYWdlIGFscmVhZHkgaW5zdGFsbGVkJyk7XG5cbiAgICAgIC8vIFJlcGFyc2UgdGhlIG9wdGlvbnMgd2l0aCB0aGUgbmV3IHNjaGVtYXRpYyBhY2Nlc3NpYmxlLlxuICAgICAgb3B0aW9ucyA9IGF3YWl0IHRoaXMuX3BhcnNlU2NoZW1hdGljT3B0aW9ucyhwYWNrYWdlSWRlbnRpZmllci5uYW1lKTtcblxuICAgICAgcmV0dXJuIHRoaXMuZXhlY3V0ZVNjaGVtYXRpYyhwYWNrYWdlSWRlbnRpZmllci5uYW1lLCBvcHRpb25zKTtcbiAgICB9XG5cbiAgICBjb25zdCB1c2luZ1lhcm4gPSB0aGlzLnBhY2thZ2VNYW5hZ2VyID09PSAneWFybic7XG5cbiAgICBpZiAocGFja2FnZUlkZW50aWZpZXIudHlwZSA9PT0gJ3RhZycgJiYgIXBhY2thZ2VJZGVudGlmaWVyLnJhd1NwZWMpIHtcbiAgICAgIC8vIG9ubHkgcGFja2FnZSBuYW1lIHByb3ZpZGVkOyBzZWFyY2ggZm9yIHZpYWJsZSB2ZXJzaW9uXG4gICAgICAvLyBwbHVzIHNwZWNpYWwgY2FzZXMgZm9yIHBhY2thZ2VzIHRoYXQgZGlkIG5vdCBoYXZlIHBlZXIgZGVwcyBzZXR1cFxuICAgICAgbGV0IHBhY2thZ2VNZXRhZGF0YTtcbiAgICAgIHRyeSB7XG4gICAgICAgIHBhY2thZ2VNZXRhZGF0YSA9IGF3YWl0IGZldGNoUGFja2FnZU1ldGFkYXRhKFxuICAgICAgICAgIHBhY2thZ2VJZGVudGlmaWVyLm5hbWUsXG4gICAgICAgICAgdGhpcy5sb2dnZXIsXG4gICAgICAgICAgeyB1c2luZ1lhcm4gfSxcbiAgICAgICAgKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoJ1VuYWJsZSB0byBmZXRjaCBwYWNrYWdlIG1ldGFkYXRhOiAnICsgZS5tZXNzYWdlKTtcblxuICAgICAgICByZXR1cm4gMTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgbGF0ZXN0TWFuaWZlc3QgPSBwYWNrYWdlTWV0YWRhdGEudGFnc1snbGF0ZXN0J107XG4gICAgICBpZiAobGF0ZXN0TWFuaWZlc3QgJiYgT2JqZWN0LmtleXMobGF0ZXN0TWFuaWZlc3QucGVlckRlcGVuZGVuY2llcykubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGlmIChsYXRlc3RNYW5pZmVzdC5uYW1lID09PSAnQGFuZ3VsYXIvcHdhJykge1xuICAgICAgICAgIGNvbnN0IHZlcnNpb24gPSBhd2FpdCB0aGlzLmZpbmRQcm9qZWN0VmVyc2lvbignQGFuZ3VsYXIvY2xpJyk7XG4gICAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLWFueVxuICAgICAgICAgIGNvbnN0IHNlbXZlck9wdGlvbnMgPSB7IGluY2x1ZGVQcmVyZWxlYXNlOiB0cnVlIH0gYXMgYW55O1xuXG4gICAgICAgICAgaWYgKHZlcnNpb25cbiAgICAgICAgICAgICAgJiYgKCh2YWxpZFJhbmdlKHZlcnNpb24pICYmIGludGVyc2VjdHModmVyc2lvbiwgJzYnLCBzZW12ZXJPcHRpb25zKSlcbiAgICAgICAgICAgICAgICAgIHx8ICh2YWxpZCh2ZXJzaW9uKSAmJiBzYXRpc2ZpZXModmVyc2lvbiwgJzYnLCBzZW12ZXJPcHRpb25zKSkpKSB7XG4gICAgICAgICAgICBwYWNrYWdlSWRlbnRpZmllciA9IG5wYS5yZXNvbHZlKCdAYW5ndWxhci9wd2EnLCAndjYtbHRzJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKCFsYXRlc3RNYW5pZmVzdCB8fCAoYXdhaXQgdGhpcy5oYXNNaXNtYXRjaGVkUGVlcihsYXRlc3RNYW5pZmVzdCkpKSB7XG4gICAgICAgIC8vICdsYXRlc3QnIGlzIGludmFsaWQgc28gc2VhcmNoIGZvciBtb3N0IHJlY2VudCBtYXRjaGluZyBwYWNrYWdlXG4gICAgICAgIGNvbnN0IHZlcnNpb25NYW5pZmVzdHMgPSBBcnJheS5mcm9tKHBhY2thZ2VNZXRhZGF0YS52ZXJzaW9ucy52YWx1ZXMoKSlcbiAgICAgICAgICAuZmlsdGVyKHZhbHVlID0+ICFwcmVyZWxlYXNlKHZhbHVlLnZlcnNpb24pKTtcblxuICAgICAgICB2ZXJzaW9uTWFuaWZlc3RzLnNvcnQoKGEsIGIpID0+IHJjb21wYXJlKGEudmVyc2lvbiwgYi52ZXJzaW9uLCB0cnVlKSk7XG5cbiAgICAgICAgbGV0IG5ld0lkZW50aWZpZXI7XG4gICAgICAgIGZvciAoY29uc3QgdmVyc2lvbk1hbmlmZXN0IG9mIHZlcnNpb25NYW5pZmVzdHMpIHtcbiAgICAgICAgICBpZiAoIShhd2FpdCB0aGlzLmhhc01pc21hdGNoZWRQZWVyKHZlcnNpb25NYW5pZmVzdCkpKSB7XG4gICAgICAgICAgICBuZXdJZGVudGlmaWVyID0gbnBhLnJlc29sdmUocGFja2FnZUlkZW50aWZpZXIubmFtZSwgdmVyc2lvbk1hbmlmZXN0LnZlcnNpb24pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFuZXdJZGVudGlmaWVyKSB7XG4gICAgICAgICAgdGhpcy5sb2dnZXIud2FybignVW5hYmxlIHRvIGZpbmQgY29tcGF0aWJsZSBwYWNrYWdlLiAgVXNpbmcgXFwnbGF0ZXN0XFwnLicpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBhY2thZ2VJZGVudGlmaWVyID0gbmV3SWRlbnRpZmllcjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGxldCBjb2xsZWN0aW9uTmFtZSA9IHBhY2thZ2VJZGVudGlmaWVyLm5hbWU7XG4gICAgaWYgKCFwYWNrYWdlSWRlbnRpZmllci5yZWdpc3RyeSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgbWFuaWZlc3QgPSBhd2FpdCBmZXRjaFBhY2thZ2VNYW5pZmVzdChcbiAgICAgICAgICBwYWNrYWdlSWRlbnRpZmllcixcbiAgICAgICAgICB0aGlzLmxvZ2dlcixcbiAgICAgICAgICB7IHVzaW5nWWFybiB9LFxuICAgICAgICApO1xuXG4gICAgICAgIGNvbGxlY3Rpb25OYW1lID0gbWFuaWZlc3QubmFtZTtcblxuICAgICAgICBpZiAoYXdhaXQgdGhpcy5oYXNNaXNtYXRjaGVkUGVlcihtYW5pZmVzdCkpIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oJ1BhY2thZ2UgaGFzIHVubWV0IHBlZXIgZGVwZW5kZW5jaWVzLiBBZGRpbmcgdGhlIHBhY2thZ2UgbWF5IG5vdCBzdWNjZWVkLicpO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKCdVbmFibGUgdG8gZmV0Y2ggcGFja2FnZSBtYW5pZmVzdDogJyArIGUubWVzc2FnZSk7XG5cbiAgICAgICAgcmV0dXJuIDE7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgbnBtSW5zdGFsbDogTnBtSW5zdGFsbCA9IHJlcXVpcmUoJy4uL3Rhc2tzL25wbS1pbnN0YWxsJykuZGVmYXVsdDtcblxuICAgIC8vIFdlIGRvbid0IGFjdHVhbGx5IGFkZCB0aGUgcGFja2FnZSB0byBwYWNrYWdlLmpzb24sIHRoYXQgd291bGQgYmUgdGhlIHdvcmsgb2YgdGhlIHBhY2thZ2VcbiAgICAvLyBpdHNlbGYuXG4gICAgYXdhaXQgbnBtSW5zdGFsbChcbiAgICAgIHBhY2thZ2VJZGVudGlmaWVyLnJhdyxcbiAgICAgIHRoaXMubG9nZ2VyLFxuICAgICAgdGhpcy5wYWNrYWdlTWFuYWdlcixcbiAgICAgIHRoaXMucHJvamVjdC5yb290LFxuICAgICk7XG5cbiAgICAvLyBSZXBhcnNlIHRoZSBvcHRpb25zIHdpdGggdGhlIG5ldyBzY2hlbWF0aWMgYWNjZXNzaWJsZS5cbiAgICBvcHRpb25zID0gYXdhaXQgdGhpcy5fcGFyc2VTY2hlbWF0aWNPcHRpb25zKGNvbGxlY3Rpb25OYW1lKTtcblxuICAgIHJldHVybiB0aGlzLmV4ZWN1dGVTY2hlbWF0aWMoY29sbGVjdGlvbk5hbWUsIG9wdGlvbnMpO1xuICB9XG5cbiAgcHJpdmF0ZSBpc1BhY2thZ2VJbnN0YWxsZWQobmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgdHJ5IHtcbiAgICAgIHJlc29sdmUobmFtZSwgeyBjaGVja0xvY2FsOiB0cnVlLCBiYXNlZGlyOiB0aGlzLnByb2plY3Qucm9vdCB9KTtcblxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgaWYgKCEoZSBpbnN0YW5jZW9mIE1vZHVsZU5vdEZvdW5kRXhjZXB0aW9uKSkge1xuICAgICAgICB0aHJvdyBlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZXhlY3V0ZVNjaGVtYXRpYyhcbiAgICBjb2xsZWN0aW9uTmFtZTogc3RyaW5nLFxuICAgIG9wdGlvbnM/OiBzdHJpbmdbXSxcbiAgKTogUHJvbWlzZTxudW1iZXIgfCB2b2lkPiB7XG4gICAgY29uc3QgcnVuT3B0aW9ucyA9IHtcbiAgICAgIHNjaGVtYXRpY09wdGlvbnM6IG9wdGlvbnMgfHwgW10sXG4gICAgICB3b3JraW5nRGlyOiB0aGlzLnByb2plY3Qucm9vdCxcbiAgICAgIGNvbGxlY3Rpb25OYW1lLFxuICAgICAgc2NoZW1hdGljTmFtZTogJ25nLWFkZCcsXG4gICAgICBhbGxvd1ByaXZhdGU6IHRydWUsXG4gICAgICBkcnlSdW46IGZhbHNlLFxuICAgICAgZm9yY2U6IGZhbHNlLFxuICAgIH07XG5cbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMucnVuU2NoZW1hdGljKHJ1bk9wdGlvbnMpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGlmIChlIGluc3RhbmNlb2YgTm9kZVBhY2thZ2VEb2VzTm90U3VwcG9ydFNjaGVtYXRpY3MpIHtcbiAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IodGFncy5vbmVMaW5lYFxuICAgICAgICAgIFRoZSBwYWNrYWdlIHRoYXQgeW91IGFyZSB0cnlpbmcgdG8gYWRkIGRvZXMgbm90IHN1cHBvcnQgc2NoZW1hdGljcy4gWW91IGNhbiB0cnkgdXNpbmdcbiAgICAgICAgICBhIGRpZmZlcmVudCB2ZXJzaW9uIG9mIHRoZSBwYWNrYWdlIG9yIGNvbnRhY3QgdGhlIHBhY2thZ2UgYXV0aG9yIHRvIGFkZCBuZy1hZGQgc3VwcG9ydC5cbiAgICAgICAgYCk7XG5cbiAgICAgICAgcmV0dXJuIDE7XG4gICAgICB9XG5cbiAgICAgIHRocm93IGU7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBmaW5kUHJvamVjdFZlcnNpb24obmFtZTogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmcgfCBudWxsPiB7XG4gICAgbGV0IGluc3RhbGxlZFBhY2thZ2U7XG4gICAgdHJ5IHtcbiAgICAgIGluc3RhbGxlZFBhY2thZ2UgPSByZXNvbHZlKFxuICAgICAgICBuYW1lLFxuICAgICAgICB7IGNoZWNrTG9jYWw6IHRydWUsIGJhc2VkaXI6IHRoaXMucHJvamVjdC5yb290LCByZXNvbHZlUGFja2FnZUpzb246IHRydWUgfSxcbiAgICAgICk7XG4gICAgfSBjYXRjaCB7IH1cblxuICAgIGlmIChpbnN0YWxsZWRQYWNrYWdlKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBpbnN0YWxsZWQgPSBhd2FpdCBmZXRjaFBhY2thZ2VNYW5pZmVzdChkaXJuYW1lKGluc3RhbGxlZFBhY2thZ2UpLCB0aGlzLmxvZ2dlcik7XG5cbiAgICAgICAgcmV0dXJuIGluc3RhbGxlZC52ZXJzaW9uO1xuICAgICAgfSBjYXRjaCB7fVxuICAgIH1cblxuICAgIGxldCBwcm9qZWN0TWFuaWZlc3Q7XG4gICAgdHJ5IHtcbiAgICAgIHByb2plY3RNYW5pZmVzdCA9IGF3YWl0IGZldGNoUGFja2FnZU1hbmlmZXN0KHRoaXMucHJvamVjdC5yb290LCB0aGlzLmxvZ2dlcik7XG4gICAgfSBjYXRjaCB7fVxuXG4gICAgaWYgKHByb2plY3RNYW5pZmVzdCkge1xuICAgICAgbGV0IHZlcnNpb24gPSBwcm9qZWN0TWFuaWZlc3QuZGVwZW5kZW5jaWVzW25hbWVdO1xuICAgICAgaWYgKHZlcnNpb24pIHtcbiAgICAgICAgcmV0dXJuIHZlcnNpb247XG4gICAgICB9XG5cbiAgICAgIHZlcnNpb24gPSBwcm9qZWN0TWFuaWZlc3QuZGV2RGVwZW5kZW5jaWVzW25hbWVdO1xuICAgICAgaWYgKHZlcnNpb24pIHtcbiAgICAgICAgcmV0dXJuIHZlcnNpb247XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGhhc01pc21hdGNoZWRQZWVyKG1hbmlmZXN0OiBQYWNrYWdlTWFuaWZlc3QpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBmb3IgKGNvbnN0IHBlZXIgaW4gbWFuaWZlc3QucGVlckRlcGVuZGVuY2llcykge1xuICAgICAgbGV0IHBlZXJJZGVudGlmaWVyO1xuICAgICAgdHJ5IHtcbiAgICAgICAgcGVlcklkZW50aWZpZXIgPSBucGEucmVzb2x2ZShwZWVyLCBtYW5pZmVzdC5wZWVyRGVwZW5kZW5jaWVzW3BlZXJdKTtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICB0aGlzLmxvZ2dlci53YXJuKGBJbnZhbGlkIHBlZXIgZGVwZW5kZW5jeSAke3BlZXJ9IGZvdW5kIGluIHBhY2thZ2UuYCk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAocGVlcklkZW50aWZpZXIudHlwZSA9PT0gJ3ZlcnNpb24nIHx8IHBlZXJJZGVudGlmaWVyLnR5cGUgPT09ICdyYW5nZScpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCB2ZXJzaW9uID0gYXdhaXQgdGhpcy5maW5kUHJvamVjdFZlcnNpb24ocGVlcik7XG4gICAgICAgICAgaWYgKCF2ZXJzaW9uKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tYW55XG4gICAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHsgaW5jbHVkZVByZXJlbGVhc2U6IHRydWUgfSBhcyBhbnk7XG5cbiAgICAgICAgICBpZiAoIWludGVyc2VjdHModmVyc2lvbiwgcGVlcklkZW50aWZpZXIucmF3U3BlYywgb3B0aW9ucylcbiAgICAgICAgICAgICAgJiYgIXNhdGlzZmllcyh2ZXJzaW9uLCBwZWVySWRlbnRpZmllci5yYXdTcGVjLCBvcHRpb25zKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAvLyBOb3QgZm91bmQgb3IgaW52YWxpZCBzbyBpZ25vcmVcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gdHlwZSA9PT0gJ3RhZycgfCAnZmlsZScgfCAnZGlyZWN0b3J5JyB8ICdyZW1vdGUnIHwgJ2dpdCdcbiAgICAgICAgLy8gQ2Fubm90IGFjY3VyYXRlbHkgY29tcGFyZSB0aGVzZSBhcyB0aGUgdGFnL2xvY2F0aW9uIG1heSBoYXZlIGNoYW5nZWQgc2luY2UgaW5zdGFsbFxuICAgICAgfVxuXG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG4iXX0=
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@angular/cli",
3
- "version": "6.2.5",
3
+ "version": "6.2.9",
4
4
  "description": "CLI tool for Angular",
5
5
  "main": "lib/cli/index.js",
6
6
  "trackingCode": "UA-8594346-19",
@@ -30,17 +30,21 @@
30
30
  },
31
31
  "homepage": "https://github.com/angular/angular-cli",
32
32
  "dependencies": {
33
- "@angular-devkit/architect": "0.8.5",
34
- "@angular-devkit/core": "0.8.5",
35
- "@angular-devkit/schematics": "0.8.5",
36
- "@schematics/angular": "0.8.5",
37
- "@schematics/update": "0.8.5",
38
- "json-schema-traverse": "^0.4.1",
39
- "opn": "^5.3.0",
40
- "rxjs": "~6.2.0",
41
- "semver": "^5.1.0",
42
- "symbol-observable": "^1.2.0",
43
- "yargs-parser": "^10.0.0"
33
+ "@angular-devkit/architect": "0.8.9",
34
+ "@angular-devkit/core": "0.8.9",
35
+ "@angular-devkit/schematics": "0.8.9",
36
+ "@schematics/angular": "0.8.9",
37
+ "@schematics/update": "0.8.9",
38
+ "@yarnpkg/lockfile": "1.1.0",
39
+ "ini": "1.3.5",
40
+ "json-schema-traverse": "0.4.1",
41
+ "npm-package-arg": "6.1.0",
42
+ "opn": "5.4.0",
43
+ "pacote": "9.2.3",
44
+ "rxjs": "6.2.2",
45
+ "semver": "5.6.0",
46
+ "symbol-observable": "1.2.0",
47
+ "yargs-parser": "10.1.0"
44
48
  },
45
49
  "ng-update": {
46
50
  "migrations": "@schematics/angular/migrations/migration-collection.json"
@@ -16,7 +16,6 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
16
16
  };
17
17
  Object.defineProperty(exports, "__esModule", { value: true });
18
18
  const core_1 = require("@angular-devkit/core");
19
- const node_1 = require("@angular-devkit/core/node");
20
19
  const child_process_1 = require("child_process");
21
20
  function default_1(packageName, logger, packageManager, projectRoot, save = true) {
22
21
  return __awaiter(this, void 0, void 0, function* () {
@@ -36,17 +35,6 @@ function default_1(packageName, logger, packageManager, projectRoot, save = true
36
35
  }
37
36
  logger.info(core_1.terminal.green(`Installing packages for tooling via ${packageManager}.`));
38
37
  if (packageName) {
39
- try {
40
- // Verify if we need to install the package (it might already be there).
41
- // If it's available and we shouldn't save, simply return. Nothing to be done.
42
- node_1.resolve(packageName, { checkLocal: true, basedir: projectRoot });
43
- return;
44
- }
45
- catch (e) {
46
- if (!(e instanceof node_1.ModuleNotFoundException)) {
47
- throw e;
48
- }
49
- }
50
38
  installArgs.push(packageName);
51
39
  }
52
40
  if (!save) {
@@ -73,4 +61,4 @@ function default_1(packageName, logger, packageManager, projectRoot, save = true
73
61
  });
74
62
  }
75
63
  exports.default = default_1;
76
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnBtLWluc3RhbGwuanMiLCJzb3VyY2VSb290IjoiLi8iLCJzb3VyY2VzIjpbInBhY2thZ2VzL2FuZ3VsYXIvY2xpL3Rhc2tzL25wbS1pbnN0YWxsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7O0dBTUc7Ozs7Ozs7Ozs7QUFFSCwrQ0FBeUQ7QUFDekQsb0RBQTZFO0FBQzdFLGlEQUFzQztBQVN0QyxtQkFBK0IsV0FBbUIsRUFDbkIsTUFBc0IsRUFDdEIsY0FBc0IsRUFDdEIsV0FBbUIsRUFDbkIsSUFBSSxHQUFHLElBQUk7O1FBQ3hDLE1BQU0sV0FBVyxHQUFhLEVBQUUsQ0FBQztRQUNqQyxRQUFRLGNBQWMsRUFBRTtZQUN0QixLQUFLLE1BQU0sQ0FBQztZQUNaLEtBQUssS0FBSztnQkFDUixXQUFXLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FBQztnQkFDdkMsTUFBTTtZQUVSLEtBQUssTUFBTTtnQkFDVCxXQUFXLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUN4QixNQUFNO1lBRVI7Z0JBQ0UsY0FBYyxHQUFHLEtBQUssQ0FBQztnQkFDdkIsV0FBVyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDLENBQUM7Z0JBQ3ZDLE1BQU07U0FDVDtRQUVELE1BQU0sQ0FBQyxJQUFJLENBQUMsZUFBUSxDQUFDLEtBQUssQ0FBQyx1Q0FBdUMsY0FBYyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBRXRGLElBQUksV0FBVyxFQUFFO1lBQ2YsSUFBSTtnQkFDRix3RUFBd0U7Z0JBQ3hFLDhFQUE4RTtnQkFDOUUsY0FBTyxDQUFDLFdBQVcsRUFBRSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxDQUFDLENBQUM7Z0JBRWpFLE9BQU87YUFDUjtZQUFDLE9BQU8sQ0FBQyxFQUFFO2dCQUNWLElBQUksQ0FBQyxDQUFDLENBQUMsWUFBWSw4QkFBdUIsQ0FBQyxFQUFFO29CQUMzQyxNQUFNLENBQUMsQ0FBQztpQkFDVDthQUNGO1lBQ0QsV0FBVyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztTQUMvQjtRQUVELElBQUksQ0FBQyxJQUFJLEVBQUU7WUFDVCxXQUFXLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1NBQy9CO1FBQ0QsTUFBTSxjQUFjLEdBQUc7WUFDckIsS0FBSyxFQUFFLFNBQVM7WUFDaEIsS0FBSyxFQUFFLElBQUk7U0FDWixDQUFDO1FBRUYsTUFBTSxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtZQUNwQyxxQkFBSyxDQUFDLGNBQWMsRUFBRSxXQUFXLEVBQUUsY0FBYyxDQUFDO2lCQUMvQyxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUMsSUFBWSxFQUFFLEVBQUU7Z0JBQzVCLElBQUksSUFBSSxLQUFLLENBQUMsRUFBRTtvQkFDZCxNQUFNLENBQUMsSUFBSSxDQUFDLGVBQVEsQ0FBQyxLQUFLLENBQUMsc0NBQXNDLGNBQWMsR0FBRyxDQUFDLENBQUMsQ0FBQztvQkFDckYsT0FBTyxFQUFFLENBQUM7aUJBQ1g7cUJBQU07b0JBQ0wsTUFBTSxPQUFPLEdBQUcsb0NBQW9DLENBQUM7b0JBQ3JELE1BQU0sQ0FBQyxJQUFJLENBQUMsZUFBUSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO29CQUNuQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7aUJBQ2pCO1lBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDUCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FBQTtBQTVERCw0QkE0REMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbmltcG9ydCB7IGxvZ2dpbmcsIHRlcm1pbmFsIH0gZnJvbSAnQGFuZ3VsYXItZGV2a2l0L2NvcmUnO1xuaW1wb3J0IHsgTW9kdWxlTm90Rm91bmRFeGNlcHRpb24sIHJlc29sdmUgfSBmcm9tICdAYW5ndWxhci1kZXZraXQvY29yZS9ub2RlJztcbmltcG9ydCB7IHNwYXduIH0gZnJvbSAnY2hpbGRfcHJvY2Vzcyc7XG5cblxuZXhwb3J0IHR5cGUgTnBtSW5zdGFsbCA9IChwYWNrYWdlTmFtZTogc3RyaW5nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXI6IGxvZ2dpbmcuTG9nZ2VyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBwYWNrYWdlTWFuYWdlcjogc3RyaW5nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9qZWN0Um9vdDogc3RyaW5nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBzYXZlPzogYm9vbGVhbikgPT4gUHJvbWlzZTx2b2lkPjtcblxuZXhwb3J0IGRlZmF1bHQgYXN5bmMgZnVuY3Rpb24gKHBhY2thZ2VOYW1lOiBzdHJpbmcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyOiBsb2dnaW5nLkxvZ2dlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWNrYWdlTWFuYWdlcjogc3RyaW5nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2plY3RSb290OiBzdHJpbmcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2F2ZSA9IHRydWUpIHtcbiAgY29uc3QgaW5zdGFsbEFyZ3M6IHN0cmluZ1tdID0gW107XG4gIHN3aXRjaCAocGFja2FnZU1hbmFnZXIpIHtcbiAgICBjYXNlICdjbnBtJzpcbiAgICBjYXNlICducG0nOlxuICAgICAgaW5zdGFsbEFyZ3MucHVzaCgnaW5zdGFsbCcsICctLXF1aWV0Jyk7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ3lhcm4nOlxuICAgICAgaW5zdGFsbEFyZ3MucHVzaCgnYWRkJyk7XG4gICAgICBicmVhaztcblxuICAgIGRlZmF1bHQ6XG4gICAgICBwYWNrYWdlTWFuYWdlciA9ICducG0nO1xuICAgICAgaW5zdGFsbEFyZ3MucHVzaCgnaW5zdGFsbCcsICctLXF1aWV0Jyk7XG4gICAgICBicmVhaztcbiAgfVxuXG4gIGxvZ2dlci5pbmZvKHRlcm1pbmFsLmdyZWVuKGBJbnN0YWxsaW5nIHBhY2thZ2VzIGZvciB0b29saW5nIHZpYSAke3BhY2thZ2VNYW5hZ2VyfS5gKSk7XG5cbiAgaWYgKHBhY2thZ2VOYW1lKSB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIFZlcmlmeSBpZiB3ZSBuZWVkIHRvIGluc3RhbGwgdGhlIHBhY2thZ2UgKGl0IG1pZ2h0IGFscmVhZHkgYmUgdGhlcmUpLlxuICAgICAgLy8gSWYgaXQncyBhdmFpbGFibGUgYW5kIHdlIHNob3VsZG4ndCBzYXZlLCBzaW1wbHkgcmV0dXJuLiBOb3RoaW5nIHRvIGJlIGRvbmUuXG4gICAgICByZXNvbHZlKHBhY2thZ2VOYW1lLCB7IGNoZWNrTG9jYWw6IHRydWUsIGJhc2VkaXI6IHByb2plY3RSb290IH0pO1xuXG4gICAgICByZXR1cm47XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgaWYgKCEoZSBpbnN0YW5jZW9mIE1vZHVsZU5vdEZvdW5kRXhjZXB0aW9uKSkge1xuICAgICAgICB0aHJvdyBlO1xuICAgICAgfVxuICAgIH1cbiAgICBpbnN0YWxsQXJncy5wdXNoKHBhY2thZ2VOYW1lKTtcbiAgfVxuXG4gIGlmICghc2F2ZSkge1xuICAgIGluc3RhbGxBcmdzLnB1c2goJy0tbm8tc2F2ZScpO1xuICB9XG4gIGNvbnN0IGluc3RhbGxPcHRpb25zID0ge1xuICAgIHN0ZGlvOiAnaW5oZXJpdCcsXG4gICAgc2hlbGw6IHRydWUsXG4gIH07XG5cbiAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIHNwYXduKHBhY2thZ2VNYW5hZ2VyLCBpbnN0YWxsQXJncywgaW5zdGFsbE9wdGlvbnMpXG4gICAgICAub24oJ2Nsb3NlJywgKGNvZGU6IG51bWJlcikgPT4ge1xuICAgICAgICBpZiAoY29kZSA9PT0gMCkge1xuICAgICAgICAgIGxvZ2dlci5pbmZvKHRlcm1pbmFsLmdyZWVuKGBJbnN0YWxsZWQgcGFja2FnZXMgZm9yIHRvb2xpbmcgdmlhICR7cGFja2FnZU1hbmFnZXJ9LmApKTtcbiAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgbWVzc2FnZSA9ICdQYWNrYWdlIGluc3RhbGwgZmFpbGVkLCBzZWUgYWJvdmUuJztcbiAgICAgICAgICBsb2dnZXIuaW5mbyh0ZXJtaW5hbC5yZWQobWVzc2FnZSkpO1xuICAgICAgICAgIHJlamVjdChtZXNzYWdlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH0pO1xufVxuIl19
64
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnBtLWluc3RhbGwuanMiLCJzb3VyY2VSb290IjoiLi8iLCJzb3VyY2VzIjpbInBhY2thZ2VzL2FuZ3VsYXIvY2xpL3Rhc2tzL25wbS1pbnN0YWxsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7O0dBTUc7Ozs7Ozs7Ozs7QUFFSCwrQ0FBeUQ7QUFDekQsaURBQXNDO0FBU3RDLG1CQUErQixXQUFtQixFQUNuQixNQUFzQixFQUN0QixjQUFzQixFQUN0QixXQUFtQixFQUNuQixJQUFJLEdBQUcsSUFBSTs7UUFDeEMsTUFBTSxXQUFXLEdBQWEsRUFBRSxDQUFDO1FBQ2pDLFFBQVEsY0FBYyxFQUFFO1lBQ3RCLEtBQUssTUFBTSxDQUFDO1lBQ1osS0FBSyxLQUFLO2dCQUNSLFdBQVcsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQyxDQUFDO2dCQUN2QyxNQUFNO1lBRVIsS0FBSyxNQUFNO2dCQUNULFdBQVcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ3hCLE1BQU07WUFFUjtnQkFDRSxjQUFjLEdBQUcsS0FBSyxDQUFDO2dCQUN2QixXQUFXLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FBQztnQkFDdkMsTUFBTTtTQUNUO1FBRUQsTUFBTSxDQUFDLElBQUksQ0FBQyxlQUFRLENBQUMsS0FBSyxDQUFDLHVDQUF1QyxjQUFjLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFFdEYsSUFBSSxXQUFXLEVBQUU7WUFDZixXQUFXLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1NBQy9CO1FBRUQsSUFBSSxDQUFDLElBQUksRUFBRTtZQUNULFdBQVcsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7U0FDL0I7UUFDRCxNQUFNLGNBQWMsR0FBRztZQUNyQixLQUFLLEVBQUUsU0FBUztZQUNoQixLQUFLLEVBQUUsSUFBSTtTQUNaLENBQUM7UUFFRixNQUFNLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO1lBQ3BDLHFCQUFLLENBQUMsY0FBYyxFQUFFLFdBQVcsRUFBRSxjQUFjLENBQUM7aUJBQy9DLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxJQUFZLEVBQUUsRUFBRTtnQkFDNUIsSUFBSSxJQUFJLEtBQUssQ0FBQyxFQUFFO29CQUNkLE1BQU0sQ0FBQyxJQUFJLENBQUMsZUFBUSxDQUFDLEtBQUssQ0FBQyxzQ0FBc0MsY0FBYyxHQUFHLENBQUMsQ0FBQyxDQUFDO29CQUNyRixPQUFPLEVBQUUsQ0FBQztpQkFDWDtxQkFBTTtvQkFDTCxNQUFNLE9BQU8sR0FBRyxvQ0FBb0MsQ0FBQztvQkFDckQsTUFBTSxDQUFDLElBQUksQ0FBQyxlQUFRLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7b0JBQ25DLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztpQkFDakI7WUFDSCxDQUFDLENBQUMsQ0FBQztRQUNQLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUFBO0FBakRELDRCQWlEQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuaW1wb3J0IHsgbG9nZ2luZywgdGVybWluYWwgfSBmcm9tICdAYW5ndWxhci1kZXZraXQvY29yZSc7XG5pbXBvcnQgeyBzcGF3biB9IGZyb20gJ2NoaWxkX3Byb2Nlc3MnO1xuXG5cbmV4cG9ydCB0eXBlIE5wbUluc3RhbGwgPSAocGFja2FnZU5hbWU6IHN0cmluZyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyOiBsb2dnaW5nLkxvZ2dlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcGFja2FnZU1hbmFnZXI6IHN0cmluZyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvamVjdFJvb3Q6IHN0cmluZyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgc2F2ZT86IGJvb2xlYW4pID0+IFByb21pc2U8dm9pZD47XG5cbmV4cG9ydCBkZWZhdWx0IGFzeW5jIGZ1bmN0aW9uIChwYWNrYWdlTmFtZTogc3RyaW5nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dlcjogbG9nZ2luZy5Mb2dnZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFja2FnZU1hbmFnZXI6IHN0cmluZyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9qZWN0Um9vdDogc3RyaW5nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhdmUgPSB0cnVlKSB7XG4gIGNvbnN0IGluc3RhbGxBcmdzOiBzdHJpbmdbXSA9IFtdO1xuICBzd2l0Y2ggKHBhY2thZ2VNYW5hZ2VyKSB7XG4gICAgY2FzZSAnY25wbSc6XG4gICAgY2FzZSAnbnBtJzpcbiAgICAgIGluc3RhbGxBcmdzLnB1c2goJ2luc3RhbGwnLCAnLS1xdWlldCcpO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICd5YXJuJzpcbiAgICAgIGluc3RhbGxBcmdzLnB1c2goJ2FkZCcpO1xuICAgICAgYnJlYWs7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgcGFja2FnZU1hbmFnZXIgPSAnbnBtJztcbiAgICAgIGluc3RhbGxBcmdzLnB1c2goJ2luc3RhbGwnLCAnLS1xdWlldCcpO1xuICAgICAgYnJlYWs7XG4gIH1cblxuICBsb2dnZXIuaW5mbyh0ZXJtaW5hbC5ncmVlbihgSW5zdGFsbGluZyBwYWNrYWdlcyBmb3IgdG9vbGluZyB2aWEgJHtwYWNrYWdlTWFuYWdlcn0uYCkpO1xuXG4gIGlmIChwYWNrYWdlTmFtZSkge1xuICAgIGluc3RhbGxBcmdzLnB1c2gocGFja2FnZU5hbWUpO1xuICB9XG5cbiAgaWYgKCFzYXZlKSB7XG4gICAgaW5zdGFsbEFyZ3MucHVzaCgnLS1uby1zYXZlJyk7XG4gIH1cbiAgY29uc3QgaW5zdGFsbE9wdGlvbnMgPSB7XG4gICAgc3RkaW86ICdpbmhlcml0JyxcbiAgICBzaGVsbDogdHJ1ZSxcbiAgfTtcblxuICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgc3Bhd24ocGFja2FnZU1hbmFnZXIsIGluc3RhbGxBcmdzLCBpbnN0YWxsT3B0aW9ucylcbiAgICAgIC5vbignY2xvc2UnLCAoY29kZTogbnVtYmVyKSA9PiB7XG4gICAgICAgIGlmIChjb2RlID09PSAwKSB7XG4gICAgICAgICAgbG9nZ2VyLmluZm8odGVybWluYWwuZ3JlZW4oYEluc3RhbGxlZCBwYWNrYWdlcyBmb3IgdG9vbGluZyB2aWEgJHtwYWNrYWdlTWFuYWdlcn0uYCkpO1xuICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBtZXNzYWdlID0gJ1BhY2thZ2UgaW5zdGFsbCBmYWlsZWQsIHNlZSBhYm92ZS4nO1xuICAgICAgICAgIGxvZ2dlci5pbmZvKHRlcm1pbmFsLnJlZChtZXNzYWdlKSk7XG4gICAgICAgICAgcmVqZWN0KG1lc3NhZ2UpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfSk7XG59XG4iXX0=
@@ -0,0 +1,53 @@
1
+ /**
2
+ * @license
3
+ * Copyright Google Inc. All Rights Reserved.
4
+ *
5
+ * Use of this source code is governed by an MIT-style license that can be
6
+ * found in the LICENSE file at https://angular.io/license
7
+ */
8
+ import { logging } from '@angular-devkit/core';
9
+ export interface PackageDependencies {
10
+ [dependency: string]: string;
11
+ }
12
+ export interface PackageIdentifier {
13
+ type: 'git' | 'tag' | 'version' | 'range' | 'file' | 'directory' | 'remote';
14
+ name: string;
15
+ scope: string | null;
16
+ registry: boolean;
17
+ raw: string;
18
+ }
19
+ export interface PackageManifest {
20
+ name: string;
21
+ version: string;
22
+ license?: string;
23
+ private?: boolean;
24
+ deprecated?: boolean;
25
+ dependencies: PackageDependencies;
26
+ devDependencies: PackageDependencies;
27
+ peerDependencies: PackageDependencies;
28
+ optionalDependencies: PackageDependencies;
29
+ 'ng-add'?: {};
30
+ 'ng-update'?: {
31
+ migrations: string;
32
+ packageGroup: {
33
+ [name: string]: string;
34
+ };
35
+ };
36
+ }
37
+ export interface PackageMetadata {
38
+ name: string;
39
+ tags: {
40
+ [tag: string]: PackageManifest | undefined;
41
+ };
42
+ versions: Map<string, PackageManifest>;
43
+ }
44
+ export declare function fetchPackageMetadata(name: string, logger: logging.LoggerApi, options?: {
45
+ registry?: string;
46
+ usingYarn?: boolean;
47
+ verbose?: boolean;
48
+ }): Promise<PackageMetadata>;
49
+ export declare function fetchPackageManifest(name: string, logger: logging.LoggerApi, options?: {
50
+ registry?: string;
51
+ usingYarn?: boolean;
52
+ verbose?: boolean;
53
+ }): Promise<PackageManifest>;
@@ -0,0 +1,131 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ Object.defineProperty(exports, "__esModule", { value: true });
11
+ const fs_1 = require("fs");
12
+ const os_1 = require("os");
13
+ const path = require("path");
14
+ const ini = require('ini');
15
+ const lockfile = require('@yarnpkg/lockfile');
16
+ const pacote = require('pacote');
17
+ let npmrc;
18
+ function ensureNpmrc(logger, usingYarn, verbose) {
19
+ if (!npmrc) {
20
+ try {
21
+ npmrc = readOptions(logger, false, verbose);
22
+ }
23
+ catch (_a) { }
24
+ if (usingYarn) {
25
+ try {
26
+ npmrc = Object.assign({}, npmrc, readOptions(logger, true, verbose));
27
+ }
28
+ catch (_b) { }
29
+ }
30
+ }
31
+ }
32
+ function readOptions(logger, yarn = false, showPotentials = false) {
33
+ const cwd = process.cwd();
34
+ const baseFilename = yarn ? 'yarnrc' : 'npmrc';
35
+ const dotFilename = '.' + baseFilename;
36
+ let globalPrefix;
37
+ if (process.env.PREFIX) {
38
+ globalPrefix = process.env.PREFIX;
39
+ }
40
+ else {
41
+ globalPrefix = path.dirname(process.execPath);
42
+ if (process.platform !== 'win32') {
43
+ globalPrefix = path.dirname(globalPrefix);
44
+ }
45
+ }
46
+ const defaultConfigLocations = [
47
+ path.join(globalPrefix, 'etc', baseFilename),
48
+ path.join(os_1.homedir(), dotFilename),
49
+ ];
50
+ const projectConfigLocations = [
51
+ path.join(cwd, dotFilename),
52
+ ];
53
+ const root = path.parse(cwd).root;
54
+ for (let curDir = path.dirname(cwd); curDir && curDir !== root; curDir = path.dirname(curDir)) {
55
+ projectConfigLocations.unshift(path.join(curDir, dotFilename));
56
+ }
57
+ if (showPotentials) {
58
+ logger.info(`Locating potential ${baseFilename} files:`);
59
+ }
60
+ let options = {};
61
+ for (const location of [...defaultConfigLocations, ...projectConfigLocations]) {
62
+ if (fs_1.existsSync(location)) {
63
+ if (showPotentials) {
64
+ logger.info(`Trying '${location}'...found.`);
65
+ }
66
+ const data = fs_1.readFileSync(location, 'utf8');
67
+ options = Object.assign({}, options, (yarn ? lockfile.parse(data) : ini.parse(data)));
68
+ if (options.cafile) {
69
+ const cafile = path.resolve(path.dirname(location), options.cafile);
70
+ delete options.cafile;
71
+ try {
72
+ options.ca = fs_1.readFileSync(cafile, 'utf8').replace(/\r?\n/, '\\n');
73
+ }
74
+ catch (_a) { }
75
+ }
76
+ }
77
+ else if (showPotentials) {
78
+ logger.info(`Trying '${location}'...not found.`);
79
+ }
80
+ }
81
+ // Substitute any environment variable references
82
+ for (const key in options) {
83
+ options[key] = options[key].replace(/\$\{([^\}]+)\}/, (_, name) => process.env[name] || '');
84
+ }
85
+ return options;
86
+ }
87
+ function normalizeManifest(rawManifest) {
88
+ // TODO: Fully normalize and sanitize
89
+ return Object.assign({ dependencies: {}, devDependencies: {}, peerDependencies: {}, optionalDependencies: {} }, rawManifest);
90
+ }
91
+ function fetchPackageMetadata(name, logger, options) {
92
+ return __awaiter(this, void 0, void 0, function* () {
93
+ const { usingYarn, verbose, registry } = Object.assign({ registry: undefined, usingYarn: false, verbose: false }, options);
94
+ ensureNpmrc(logger, usingYarn, verbose);
95
+ const response = yield pacote.packument(name, Object.assign({ 'full-metadata': true }, npmrc, (registry ? { registry } : {})));
96
+ // Normalize the response
97
+ const metadata = {
98
+ name: response.name,
99
+ tags: {},
100
+ versions: new Map(),
101
+ };
102
+ if (response.versions) {
103
+ for (const [version, manifest] of Object.entries(response.versions)) {
104
+ metadata.versions.set(version, normalizeManifest(manifest));
105
+ }
106
+ }
107
+ if (response['dist-tags']) {
108
+ for (const [tag, version] of Object.entries(response['dist-tags'])) {
109
+ const manifest = metadata.versions.get(version);
110
+ if (manifest) {
111
+ metadata.tags[tag] = manifest;
112
+ }
113
+ else if (verbose) {
114
+ logger.warn(`Package ${metadata.name} has invalid version metadata for '${tag}'.`);
115
+ }
116
+ }
117
+ }
118
+ return metadata;
119
+ });
120
+ }
121
+ exports.fetchPackageMetadata = fetchPackageMetadata;
122
+ function fetchPackageManifest(name, logger, options) {
123
+ return __awaiter(this, void 0, void 0, function* () {
124
+ const { usingYarn, verbose, registry } = Object.assign({ registry: undefined, usingYarn: false, verbose: false }, options);
125
+ ensureNpmrc(logger, usingYarn, verbose);
126
+ const response = yield pacote.manifest(name, Object.assign({ 'full-metadata': true }, npmrc, (registry ? { registry } : {})));
127
+ return normalizeManifest(response);
128
+ });
129
+ }
130
+ exports.fetchPackageManifest = fetchPackageManifest;
131
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFja2FnZS1tZXRhZGF0YS5qcyIsInNvdXJjZVJvb3QiOiIuLyIsInNvdXJjZXMiOlsicGFja2FnZXMvYW5ndWxhci9jbGkvdXRpbGl0aWVzL3BhY2thZ2UtbWV0YWRhdGEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQVFBLDJCQUE4QztBQUM5QywyQkFBNkI7QUFDN0IsNkJBQTZCO0FBRTdCLE1BQU0sR0FBRyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUMzQixNQUFNLFFBQVEsR0FBRyxPQUFPLENBQUMsbUJBQW1CLENBQUMsQ0FBQztBQUM5QyxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7QUF5Q2pDLElBQUksS0FBZ0MsQ0FBQztBQUVyQyxxQkFBcUIsTUFBeUIsRUFBRSxTQUFrQixFQUFFLE9BQWdCO0lBQ2xGLElBQUksQ0FBQyxLQUFLLEVBQUU7UUFDVixJQUFJO1lBQ0YsS0FBSyxHQUFHLFdBQVcsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1NBQzdDO1FBQUMsV0FBTSxHQUFHO1FBRVgsSUFBSSxTQUFTLEVBQUU7WUFDYixJQUFJO2dCQUNGLEtBQUsscUJBQVEsS0FBSyxFQUFLLFdBQVcsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFFLENBQUM7YUFDN0Q7WUFBQyxXQUFNLEdBQUc7U0FDWjtLQUNGO0FBQ0gsQ0FBQztBQUVELHFCQUNFLE1BQXlCLEVBQ3pCLElBQUksR0FBRyxLQUFLLEVBQ1osY0FBYyxHQUFHLEtBQUs7SUFFdEIsTUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBQzFCLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7SUFDL0MsTUFBTSxXQUFXLEdBQUcsR0FBRyxHQUFHLFlBQVksQ0FBQztJQUV2QyxJQUFJLFlBQW9CLENBQUM7SUFDekIsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRTtRQUN0QixZQUFZLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUM7S0FDbkM7U0FBTTtRQUNMLFlBQVksR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUM5QyxJQUFJLE9BQU8sQ0FBQyxRQUFRLEtBQUssT0FBTyxFQUFFO1lBQ2hDLFlBQVksR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDO1NBQzNDO0tBQ0Y7SUFFRCxNQUFNLHNCQUFzQixHQUFHO1FBQzdCLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLEtBQUssRUFBRSxZQUFZLENBQUM7UUFDNUMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFPLEVBQUUsRUFBRSxXQUFXLENBQUM7S0FDbEMsQ0FBQztJQUVGLE1BQU0sc0JBQXNCLEdBQWE7UUFDdkMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsV0FBVyxDQUFDO0tBQzVCLENBQUM7SUFDRixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUNsQyxLQUFLLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsTUFBTSxJQUFJLE1BQU0sS0FBSyxJQUFJLEVBQUUsTUFBTSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUU7UUFDN0Ysc0JBQXNCLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUM7S0FDaEU7SUFFRCxJQUFJLGNBQWMsRUFBRTtRQUNsQixNQUFNLENBQUMsSUFBSSxDQUFDLHNCQUFzQixZQUFZLFNBQVMsQ0FBQyxDQUFDO0tBQzFEO0lBRUQsSUFBSSxPQUFPLEdBQThCLEVBQUUsQ0FBQztJQUM1QyxLQUFLLE1BQU0sUUFBUSxJQUFJLENBQUMsR0FBRyxzQkFBc0IsRUFBRSxHQUFHLHNCQUFzQixDQUFDLEVBQUU7UUFDN0UsSUFBSSxlQUFVLENBQUMsUUFBUSxDQUFDLEVBQUU7WUFDeEIsSUFBSSxjQUFjLEVBQUU7Z0JBQ2xCLE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxRQUFRLFlBQVksQ0FBQyxDQUFDO2FBQzlDO1lBRUQsTUFBTSxJQUFJLEdBQUcsaUJBQVksQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFDNUMsT0FBTyxxQkFDRixPQUFPLEVBQ1AsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FDbkQsQ0FBQztZQUVGLElBQUksT0FBTyxDQUFDLE1BQU0sRUFBRTtnQkFDbEIsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDcEUsT0FBTyxPQUFPLENBQUMsTUFBTSxDQUFDO2dCQUN0QixJQUFJO29CQUNGLE9BQU8sQ0FBQyxFQUFFLEdBQUcsaUJBQVksQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQztpQkFDbkU7Z0JBQUMsV0FBTSxHQUFHO2FBQ1o7U0FDRjthQUFNLElBQUksY0FBYyxFQUFFO1lBQ3pCLE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxRQUFRLGdCQUFnQixDQUFDLENBQUM7U0FDbEQ7S0FDRjtJQUVELGlEQUFpRDtJQUNqRCxLQUFLLE1BQU0sR0FBRyxJQUFJLE9BQU8sRUFBRTtRQUN6QixPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7S0FDN0Y7SUFFRCxPQUFPLE9BQU8sQ0FBQztBQUNqQixDQUFDO0FBRUQsMkJBQTJCLFdBQWU7SUFDeEMscUNBQXFDO0lBRXJDLHVCQUNFLFlBQVksRUFBRSxFQUFFLEVBQ2hCLGVBQWUsRUFBRSxFQUFFLEVBQ25CLGdCQUFnQixFQUFFLEVBQUUsRUFDcEIsb0JBQW9CLEVBQUUsRUFBRSxJQUVyQixXQUFrQixFQUNyQjtBQUNKLENBQUM7QUFFRCw4QkFDRSxJQUFZLEVBQ1osTUFBeUIsRUFDekIsT0FJQzs7UUFFRCxNQUFNLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsbUJBQ3BDLFFBQVEsRUFBRSxTQUFTLEVBQ25CLFNBQVMsRUFBRSxLQUFLLEVBQ2hCLE9BQU8sRUFBRSxLQUFLLElBQ1gsT0FBTyxDQUNYLENBQUM7UUFFRixXQUFXLENBQUMsTUFBTSxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUV4QyxNQUFNLFFBQVEsR0FBRyxNQUFNLE1BQU0sQ0FBQyxTQUFTLENBQ3JDLElBQUksa0JBRUYsZUFBZSxFQUFFLElBQUksSUFDbEIsS0FBSyxFQUNMLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFFcEMsQ0FBQztRQUVGLHlCQUF5QjtRQUN6QixNQUFNLFFBQVEsR0FBb0I7WUFDaEMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxJQUFJO1lBQ25CLElBQUksRUFBRSxFQUFFO1lBQ1IsUUFBUSxFQUFFLElBQUksR0FBRyxFQUFFO1NBQ3BCLENBQUM7UUFFRixJQUFJLFFBQVEsQ0FBQyxRQUFRLEVBQUU7WUFDckIsS0FBSyxNQUFNLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxFQUFFO2dCQUNuRSxRQUFRLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsaUJBQWlCLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQzthQUM3RDtTQUNGO1FBRUQsSUFBSSxRQUFRLENBQUMsV0FBVyxDQUFDLEVBQUU7WUFDekIsS0FBSyxNQUFNLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDLEVBQUU7Z0JBQ2xFLE1BQU0sUUFBUSxHQUFHLFFBQVEsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLE9BQWlCLENBQUMsQ0FBQztnQkFDMUQsSUFBSSxRQUFRLEVBQUU7b0JBQ1osUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxRQUFRLENBQUM7aUJBQy9CO3FCQUFNLElBQUksT0FBTyxFQUFFO29CQUNsQixNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsUUFBUSxDQUFDLElBQUksc0NBQXNDLEdBQUcsSUFBSSxDQUFDLENBQUM7aUJBQ3BGO2FBQ0Y7U0FDRjtRQUVELE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUM7Q0FBQTtBQXBERCxvREFvREM7QUFFRCw4QkFDRSxJQUFZLEVBQ1osTUFBeUIsRUFDekIsT0FJQzs7UUFFRCxNQUFNLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsbUJBQ3BDLFFBQVEsRUFBRSxTQUFTLEVBQ25CLFNBQVMsRUFBRSxLQUFLLEVBQ2hCLE9BQU8sRUFBRSxLQUFLLElBQ1gsT0FBTyxDQUNYLENBQUM7UUFFRixXQUFXLENBQUMsTUFBTSxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUV4QyxNQUFNLFFBQVEsR0FBRyxNQUFNLE1BQU0sQ0FBQyxRQUFRLENBQ3BDLElBQUksa0JBRUYsZUFBZSxFQUFFLElBQUksSUFDbEIsS0FBSyxFQUNMLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFFcEMsQ0FBQztRQUVGLE9BQU8saUJBQWlCLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDckMsQ0FBQztDQUFBO0FBNUJELG9EQTRCQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cbmltcG9ydCB7IGxvZ2dpbmcgfSBmcm9tICdAYW5ndWxhci1kZXZraXQvY29yZSc7XG5pbXBvcnQgeyBleGlzdHNTeW5jLCByZWFkRmlsZVN5bmMgfSBmcm9tICdmcyc7XG5pbXBvcnQgeyBob21lZGlyIH0gZnJvbSAnb3MnO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcblxuY29uc3QgaW5pID0gcmVxdWlyZSgnaW5pJyk7XG5jb25zdCBsb2NrZmlsZSA9IHJlcXVpcmUoJ0B5YXJucGtnL2xvY2tmaWxlJyk7XG5jb25zdCBwYWNvdGUgPSByZXF1aXJlKCdwYWNvdGUnKTtcblxuZXhwb3J0IGludGVyZmFjZSBQYWNrYWdlRGVwZW5kZW5jaWVzIHtcbiAgW2RlcGVuZGVuY3k6IHN0cmluZ106IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQYWNrYWdlSWRlbnRpZmllciB7XG4gIHR5cGU6ICdnaXQnIHwgJ3RhZycgfCAndmVyc2lvbicgfCAncmFuZ2UnIHwgJ2ZpbGUnIHwgJ2RpcmVjdG9yeScgfCAncmVtb3RlJztcbiAgbmFtZTogc3RyaW5nO1xuICBzY29wZTogc3RyaW5nIHwgbnVsbDtcbiAgcmVnaXN0cnk6IGJvb2xlYW47XG4gIHJhdzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBhY2thZ2VNYW5pZmVzdCB7XG4gIG5hbWU6IHN0cmluZztcbiAgdmVyc2lvbjogc3RyaW5nO1xuICBsaWNlbnNlPzogc3RyaW5nO1xuICBwcml2YXRlPzogYm9vbGVhbjtcbiAgZGVwcmVjYXRlZD86IGJvb2xlYW47XG5cbiAgZGVwZW5kZW5jaWVzOiBQYWNrYWdlRGVwZW5kZW5jaWVzO1xuICBkZXZEZXBlbmRlbmNpZXM6IFBhY2thZ2VEZXBlbmRlbmNpZXM7XG4gIHBlZXJEZXBlbmRlbmNpZXM6IFBhY2thZ2VEZXBlbmRlbmNpZXM7XG4gIG9wdGlvbmFsRGVwZW5kZW5jaWVzOiBQYWNrYWdlRGVwZW5kZW5jaWVzO1xuXG4gICduZy1hZGQnPzoge1xuXG4gIH07XG4gICduZy11cGRhdGUnPzoge1xuICAgIG1pZ3JhdGlvbnM6IHN0cmluZyxcbiAgICBwYWNrYWdlR3JvdXA6IHsgW25hbWU6IHN0cmluZ106IHN0cmluZyB9LFxuICB9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBhY2thZ2VNZXRhZGF0YSB7XG4gIG5hbWU6IHN0cmluZztcbiAgdGFnczogeyBbdGFnOiBzdHJpbmddOiBQYWNrYWdlTWFuaWZlc3QgfCB1bmRlZmluZWQgfTtcbiAgdmVyc2lvbnM6IE1hcDxzdHJpbmcsIFBhY2thZ2VNYW5pZmVzdD47XG59XG5cbmxldCBucG1yYzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfTtcblxuZnVuY3Rpb24gZW5zdXJlTnBtcmMobG9nZ2VyOiBsb2dnaW5nLkxvZ2dlckFwaSwgdXNpbmdZYXJuOiBib29sZWFuLCB2ZXJib3NlOiBib29sZWFuKTogdm9pZCB7XG4gIGlmICghbnBtcmMpIHtcbiAgICB0cnkge1xuICAgICAgbnBtcmMgPSByZWFkT3B0aW9ucyhsb2dnZXIsIGZhbHNlLCB2ZXJib3NlKTtcbiAgICB9IGNhdGNoIHsgfVxuXG4gICAgaWYgKHVzaW5nWWFybikge1xuICAgICAgdHJ5IHtcbiAgICAgICAgbnBtcmMgPSB7IC4uLm5wbXJjLCAuLi5yZWFkT3B0aW9ucyhsb2dnZXIsIHRydWUsIHZlcmJvc2UpIH07XG4gICAgICB9IGNhdGNoIHsgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiByZWFkT3B0aW9ucyhcbiAgbG9nZ2VyOiBsb2dnaW5nLkxvZ2dlckFwaSxcbiAgeWFybiA9IGZhbHNlLFxuICBzaG93UG90ZW50aWFscyA9IGZhbHNlLFxuKTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB7XG4gIGNvbnN0IGN3ZCA9IHByb2Nlc3MuY3dkKCk7XG4gIGNvbnN0IGJhc2VGaWxlbmFtZSA9IHlhcm4gPyAneWFybnJjJyA6ICducG1yYyc7XG4gIGNvbnN0IGRvdEZpbGVuYW1lID0gJy4nICsgYmFzZUZpbGVuYW1lO1xuXG4gIGxldCBnbG9iYWxQcmVmaXg6IHN0cmluZztcbiAgaWYgKHByb2Nlc3MuZW52LlBSRUZJWCkge1xuICAgIGdsb2JhbFByZWZpeCA9IHByb2Nlc3MuZW52LlBSRUZJWDtcbiAgfSBlbHNlIHtcbiAgICBnbG9iYWxQcmVmaXggPSBwYXRoLmRpcm5hbWUocHJvY2Vzcy5leGVjUGF0aCk7XG4gICAgaWYgKHByb2Nlc3MucGxhdGZvcm0gIT09ICd3aW4zMicpIHtcbiAgICAgIGdsb2JhbFByZWZpeCA9IHBhdGguZGlybmFtZShnbG9iYWxQcmVmaXgpO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGRlZmF1bHRDb25maWdMb2NhdGlvbnMgPSBbXG4gICAgcGF0aC5qb2luKGdsb2JhbFByZWZpeCwgJ2V0YycsIGJhc2VGaWxlbmFtZSksXG4gICAgcGF0aC5qb2luKGhvbWVkaXIoKSwgZG90RmlsZW5hbWUpLFxuICBdO1xuXG4gIGNvbnN0IHByb2plY3RDb25maWdMb2NhdGlvbnM6IHN0cmluZ1tdID0gW1xuICAgIHBhdGguam9pbihjd2QsIGRvdEZpbGVuYW1lKSxcbiAgXTtcbiAgY29uc3Qgcm9vdCA9IHBhdGgucGFyc2UoY3dkKS5yb290O1xuICBmb3IgKGxldCBjdXJEaXIgPSBwYXRoLmRpcm5hbWUoY3dkKTsgY3VyRGlyICYmIGN1ckRpciAhPT0gcm9vdDsgY3VyRGlyID0gcGF0aC5kaXJuYW1lKGN1ckRpcikpIHtcbiAgICBwcm9qZWN0Q29uZmlnTG9jYXRpb25zLnVuc2hpZnQocGF0aC5qb2luKGN1ckRpciwgZG90RmlsZW5hbWUpKTtcbiAgfVxuXG4gIGlmIChzaG93UG90ZW50aWFscykge1xuICAgIGxvZ2dlci5pbmZvKGBMb2NhdGluZyBwb3RlbnRpYWwgJHtiYXNlRmlsZW5hbWV9IGZpbGVzOmApO1xuICB9XG5cbiAgbGV0IG9wdGlvbnM6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gPSB7fTtcbiAgZm9yIChjb25zdCBsb2NhdGlvbiBvZiBbLi4uZGVmYXVsdENvbmZpZ0xvY2F0aW9ucywgLi4ucHJvamVjdENvbmZpZ0xvY2F0aW9uc10pIHtcbiAgICBpZiAoZXhpc3RzU3luYyhsb2NhdGlvbikpIHtcbiAgICAgIGlmIChzaG93UG90ZW50aWFscykge1xuICAgICAgICBsb2dnZXIuaW5mbyhgVHJ5aW5nICcke2xvY2F0aW9ufScuLi5mb3VuZC5gKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZGF0YSA9IHJlYWRGaWxlU3luYyhsb2NhdGlvbiwgJ3V0ZjgnKTtcbiAgICAgIG9wdGlvbnMgPSB7XG4gICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgIC4uLih5YXJuID8gbG9ja2ZpbGUucGFyc2UoZGF0YSkgOiBpbmkucGFyc2UoZGF0YSkpLFxuICAgICAgfTtcblxuICAgICAgaWYgKG9wdGlvbnMuY2FmaWxlKSB7XG4gICAgICAgIGNvbnN0IGNhZmlsZSA9IHBhdGgucmVzb2x2ZShwYXRoLmRpcm5hbWUobG9jYXRpb24pLCBvcHRpb25zLmNhZmlsZSk7XG4gICAgICAgIGRlbGV0ZSBvcHRpb25zLmNhZmlsZTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBvcHRpb25zLmNhID0gcmVhZEZpbGVTeW5jKGNhZmlsZSwgJ3V0ZjgnKS5yZXBsYWNlKC9cXHI/XFxuLywgJ1xcXFxuJyk7XG4gICAgICAgIH0gY2F0Y2ggeyB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChzaG93UG90ZW50aWFscykge1xuICAgICAgbG9nZ2VyLmluZm8oYFRyeWluZyAnJHtsb2NhdGlvbn0nLi4ubm90IGZvdW5kLmApO1xuICAgIH1cbiAgfVxuXG4gIC8vIFN1YnN0aXR1dGUgYW55IGVudmlyb25tZW50IHZhcmlhYmxlIHJlZmVyZW5jZXNcbiAgZm9yIChjb25zdCBrZXkgaW4gb3B0aW9ucykge1xuICAgIG9wdGlvbnNba2V5XSA9IG9wdGlvbnNba2V5XS5yZXBsYWNlKC9cXCRcXHsoW15cXH1dKylcXH0vLCAoXywgbmFtZSkgPT4gcHJvY2Vzcy5lbnZbbmFtZV0gfHwgJycpO1xuICB9XG5cbiAgcmV0dXJuIG9wdGlvbnM7XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZU1hbmlmZXN0KHJhd01hbmlmZXN0OiB7fSk6IFBhY2thZ2VNYW5pZmVzdCB7XG4gIC8vIFRPRE86IEZ1bGx5IG5vcm1hbGl6ZSBhbmQgc2FuaXRpemVcblxuICByZXR1cm4ge1xuICAgIGRlcGVuZGVuY2llczoge30sXG4gICAgZGV2RGVwZW5kZW5jaWVzOiB7fSxcbiAgICBwZWVyRGVwZW5kZW5jaWVzOiB7fSxcbiAgICBvcHRpb25hbERlcGVuZGVuY2llczoge30sXG4gICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLWFueVxuICAgIC4uLnJhd01hbmlmZXN0IGFzIGFueSxcbiAgfTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGZldGNoUGFja2FnZU1ldGFkYXRhKFxuICBuYW1lOiBzdHJpbmcsXG4gIGxvZ2dlcjogbG9nZ2luZy5Mb2dnZXJBcGksXG4gIG9wdGlvbnM/OiB7XG4gICAgcmVnaXN0cnk/OiBzdHJpbmc7XG4gICAgdXNpbmdZYXJuPzogYm9vbGVhbjtcbiAgICB2ZXJib3NlPzogYm9vbGVhbjtcbiAgfSxcbik6IFByb21pc2U8UGFja2FnZU1ldGFkYXRhPiB7XG4gIGNvbnN0IHsgdXNpbmdZYXJuLCB2ZXJib3NlLCByZWdpc3RyeSB9ID0ge1xuICAgIHJlZ2lzdHJ5OiB1bmRlZmluZWQsXG4gICAgdXNpbmdZYXJuOiBmYWxzZSxcbiAgICB2ZXJib3NlOiBmYWxzZSxcbiAgICAuLi5vcHRpb25zLFxuICB9O1xuXG4gIGVuc3VyZU5wbXJjKGxvZ2dlciwgdXNpbmdZYXJuLCB2ZXJib3NlKTtcblxuICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHBhY290ZS5wYWNrdW1lbnQoXG4gICAgbmFtZSxcbiAgICB7XG4gICAgICAnZnVsbC1tZXRhZGF0YSc6IHRydWUsXG4gICAgICAuLi5ucG1yYyxcbiAgICAgIC4uLihyZWdpc3RyeSA/IHsgcmVnaXN0cnkgfSA6IHt9KSxcbiAgICB9LFxuICApO1xuXG4gIC8vIE5vcm1hbGl6ZSB0aGUgcmVzcG9uc2VcbiAgY29uc3QgbWV0YWRhdGE6IFBhY2thZ2VNZXRhZGF0YSA9IHtcbiAgICBuYW1lOiByZXNwb25zZS5uYW1lLFxuICAgIHRhZ3M6IHt9LFxuICAgIHZlcnNpb25zOiBuZXcgTWFwKCksXG4gIH07XG5cbiAgaWYgKHJlc3BvbnNlLnZlcnNpb25zKSB7XG4gICAgZm9yIChjb25zdCBbdmVyc2lvbiwgbWFuaWZlc3RdIG9mIE9iamVjdC5lbnRyaWVzKHJlc3BvbnNlLnZlcnNpb25zKSkge1xuICAgICAgbWV0YWRhdGEudmVyc2lvbnMuc2V0KHZlcnNpb24sIG5vcm1hbGl6ZU1hbmlmZXN0KG1hbmlmZXN0KSk7XG4gICAgfVxuICB9XG5cbiAgaWYgKHJlc3BvbnNlWydkaXN0LXRhZ3MnXSkge1xuICAgIGZvciAoY29uc3QgW3RhZywgdmVyc2lvbl0gb2YgT2JqZWN0LmVudHJpZXMocmVzcG9uc2VbJ2Rpc3QtdGFncyddKSkge1xuICAgICAgY29uc3QgbWFuaWZlc3QgPSBtZXRhZGF0YS52ZXJzaW9ucy5nZXQodmVyc2lvbiBhcyBzdHJpbmcpO1xuICAgICAgaWYgKG1hbmlmZXN0KSB7XG4gICAgICAgIG1ldGFkYXRhLnRhZ3NbdGFnXSA9IG1hbmlmZXN0O1xuICAgICAgfSBlbHNlIGlmICh2ZXJib3NlKSB7XG4gICAgICAgIGxvZ2dlci53YXJuKGBQYWNrYWdlICR7bWV0YWRhdGEubmFtZX0gaGFzIGludmFsaWQgdmVyc2lvbiBtZXRhZGF0YSBmb3IgJyR7dGFnfScuYCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG1ldGFkYXRhO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZmV0Y2hQYWNrYWdlTWFuaWZlc3QoXG4gIG5hbWU6IHN0cmluZyxcbiAgbG9nZ2VyOiBsb2dnaW5nLkxvZ2dlckFwaSxcbiAgb3B0aW9ucz86IHtcbiAgICByZWdpc3RyeT86IHN0cmluZztcbiAgICB1c2luZ1lhcm4/OiBib29sZWFuO1xuICAgIHZlcmJvc2U/OiBib29sZWFuO1xuICB9LFxuKTogUHJvbWlzZTxQYWNrYWdlTWFuaWZlc3Q+IHtcbiAgY29uc3QgeyB1c2luZ1lhcm4sIHZlcmJvc2UsIHJlZ2lzdHJ5IH0gPSB7XG4gICAgcmVnaXN0cnk6IHVuZGVmaW5lZCxcbiAgICB1c2luZ1lhcm46IGZhbHNlLFxuICAgIHZlcmJvc2U6IGZhbHNlLFxuICAgIC4uLm9wdGlvbnMsXG4gIH07XG5cbiAgZW5zdXJlTnBtcmMobG9nZ2VyLCB1c2luZ1lhcm4sIHZlcmJvc2UpO1xuXG4gIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgcGFjb3RlLm1hbmlmZXN0KFxuICAgIG5hbWUsXG4gICAge1xuICAgICAgJ2Z1bGwtbWV0YWRhdGEnOiB0cnVlLFxuICAgICAgLi4ubnBtcmMsXG4gICAgICAuLi4ocmVnaXN0cnkgPyB7IHJlZ2lzdHJ5IH0gOiB7fSksXG4gICAgfSxcbiAgKTtcblxuICByZXR1cm4gbm9ybWFsaXplTWFuaWZlc3QocmVzcG9uc2UpO1xufVxuIl19