@angular/compiler-cli 9.0.6 → 9.0.7

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.
Files changed (38) hide show
  1. package/ngcc/index.d.ts +2 -2
  2. package/ngcc/index.js +4 -3
  3. package/ngcc/main-ngcc.js +4 -3
  4. package/ngcc/src/execution/cluster/executor.d.ts +2 -2
  5. package/ngcc/src/execution/cluster/executor.js +1 -1
  6. package/ngcc/src/execution/single_process_executor.d.ts +13 -7
  7. package/ngcc/src/execution/single_process_executor.js +55 -38
  8. package/ngcc/src/host/commonjs_host.js +2 -7
  9. package/ngcc/src/host/delegating_host.d.ts +44 -0
  10. package/ngcc/src/host/delegating_host.js +146 -0
  11. package/ngcc/src/host/esm5_host.js +1 -7
  12. package/ngcc/src/host/umd_host.js +2 -7
  13. package/ngcc/src/locking/lock_file.d.ts +29 -0
  14. package/ngcc/src/locking/lock_file.js +17 -0
  15. package/ngcc/src/locking/lock_file_with_child_process/index.d.ts +41 -0
  16. package/ngcc/src/locking/lock_file_with_child_process/index.js +91 -0
  17. package/ngcc/src/locking/lock_file_with_child_process/unlocker.d.ts +2 -0
  18. package/ngcc/src/locking/lock_file_with_child_process/unlocker.js +44 -0
  19. package/ngcc/src/locking/lock_file_with_child_process/util.d.ts +17 -0
  20. package/ngcc/src/locking/lock_file_with_child_process/util.js +42 -0
  21. package/ngcc/src/locking/sync_locker.d.ts +36 -0
  22. package/ngcc/src/locking/sync_locker.js +67 -0
  23. package/ngcc/src/logging/console_logger.d.ts +3 -9
  24. package/ngcc/src/logging/console_logger.js +16 -15
  25. package/ngcc/src/logging/logger.d.ts +7 -0
  26. package/ngcc/src/logging/logger.js +8 -1
  27. package/ngcc/src/main.js +23 -14
  28. package/ngcc/src/packages/build_marker.d.ts +1 -1
  29. package/ngcc/src/packages/build_marker.js +1 -1
  30. package/ngcc/src/packages/transformer.js +8 -4
  31. package/ngcc/src/sourcemaps/segment_marker.d.ts +7 -15
  32. package/ngcc/src/sourcemaps/segment_marker.js +12 -41
  33. package/ngcc/src/sourcemaps/source_file.d.ts +31 -4
  34. package/ngcc/src/sourcemaps/source_file.js +117 -33
  35. package/package.json +2 -2
  36. package/src/version.js +1 -1
  37. package/ngcc/src/execution/lock_file.d.ts +0 -43
  38. package/ngcc/src/execution/lock_file.js +0 -129
@@ -1,129 +0,0 @@
1
- (function (factory) {
2
- if (typeof module === "object" && typeof module.exports === "object") {
3
- var v = factory(require, exports);
4
- if (v !== undefined) module.exports = v;
5
- }
6
- else if (typeof define === "function" && define.amd) {
7
- define("@angular/compiler-cli/ngcc/src/execution/lock_file", ["require", "exports", "process"], factory);
8
- }
9
- })(function (require, exports) {
10
- "use strict";
11
- Object.defineProperty(exports, "__esModule", { value: true });
12
- /**
13
- * @license
14
- * Copyright Google Inc. All Rights Reserved.
15
- *
16
- * Use of this source code is governed by an MIT-style license that can be
17
- * found in the LICENSE file at https://angular.io/license
18
- */
19
- var process = require("process");
20
- /**
21
- * The LockFile is used to prevent more than one instance of ngcc executing at the same time.
22
- *
23
- * When ngcc starts executing, it creates a file in the `compiler-cli/ngcc` folder. If it finds one
24
- * is already there then it fails with a suitable error message.
25
- * When ngcc completes executing, it removes the file so that future ngcc executions can start.
26
- */
27
- var LockFile = /** @class */ (function () {
28
- function LockFile(fs) {
29
- var _this = this;
30
- this.fs = fs;
31
- this.lockFilePath = this.fs.resolve(require.resolve('@angular/compiler-cli/ngcc'), '../__ngcc_lock_file__');
32
- /**
33
- * This handle needs to be defined as a property rather than a method
34
- * so that it can be passed around as a bound function.
35
- */
36
- this.signalHandler = function () {
37
- _this.remove();
38
- _this.exit(1);
39
- };
40
- }
41
- /**
42
- * Run a function guarded by the lock file.
43
- *
44
- * Note that T can be a Promise. If so, we run the `remove()` call in the promise's `finally`
45
- * handler. Otherwise we run the `remove()` call in the `try...finally` block.
46
- *
47
- * @param fn The function to run.
48
- */
49
- LockFile.prototype.lock = function (fn) {
50
- var _this = this;
51
- var isAsync = false;
52
- this.create();
53
- try {
54
- var result = fn();
55
- if (result instanceof Promise) {
56
- isAsync = true;
57
- // The cast is necessary because TS cannot deduce that T is now a promise here.
58
- return result.finally(function () { return _this.remove(); });
59
- }
60
- else {
61
- return result;
62
- }
63
- }
64
- finally {
65
- if (!isAsync) {
66
- this.remove();
67
- }
68
- }
69
- };
70
- /**
71
- * Write a lock file to disk, or error if there is already one there.
72
- */
73
- LockFile.prototype.create = function () {
74
- try {
75
- this.addSignalHandlers();
76
- // To avoid race conditions, we check for existence of the lockfile
77
- // by actually trying to create it exclusively
78
- this.fs.writeFile(this.lockFilePath, process.pid.toString(), /* exclusive */ true);
79
- }
80
- catch (e) {
81
- this.removeSignalHandlers();
82
- if (e.code !== 'EEXIST') {
83
- throw e;
84
- }
85
- // The lockfile already exists so raise a helpful error.
86
- // It is feasible that the lockfile was removed between the previous check for existence
87
- // and this file-read. If so then we still error but as gracefully as possible.
88
- var pid = void 0;
89
- try {
90
- pid = this.fs.readFile(this.lockFilePath);
91
- }
92
- catch (_a) {
93
- pid = '{unknown}';
94
- }
95
- throw new Error("ngcc is already running at process with id " + pid + ".\n" +
96
- "If you are running multiple builds in parallel then you should pre-process your node_modules via the command line ngcc tool before starting the builds;\n" +
97
- "See https://v9.angular.io/guide/ivy#speeding-up-ngcc-compilation.\n" +
98
- ("(If you are sure no ngcc process is running then you should delete the lockfile at " + this.lockFilePath + ".)"));
99
- }
100
- };
101
- /**
102
- * Remove the lock file from disk.
103
- */
104
- LockFile.prototype.remove = function () {
105
- this.removeSignalHandlers();
106
- if (this.fs.exists(this.lockFilePath)) {
107
- this.fs.removeFile(this.lockFilePath);
108
- }
109
- };
110
- LockFile.prototype.addSignalHandlers = function () {
111
- process.once('SIGINT', this.signalHandler);
112
- process.once('SIGHUP', this.signalHandler);
113
- };
114
- LockFile.prototype.removeSignalHandlers = function () {
115
- process.removeListener('SIGINT', this.signalHandler);
116
- process.removeListener('SIGHUP', this.signalHandler);
117
- };
118
- /**
119
- * This function wraps `process.exit()` which makes it easier to manage in unit tests,
120
- * since it is not possible to mock out `process.exit()` when it is called from signal handlers.
121
- */
122
- LockFile.prototype.exit = function (code) {
123
- process.exit(code);
124
- };
125
- return LockFile;
126
- }());
127
- exports.LockFile = LockFile;
128
- });
129
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9ja19maWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29tcGlsZXItY2xpL25nY2Mvc3JjL2V4ZWN1dGlvbi9sb2NrX2ZpbGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7SUFBQTs7Ozs7O09BTUc7SUFDSCxpQ0FBbUM7SUFHbkM7Ozs7OztPQU1HO0lBQ0g7UUFJRSxrQkFBb0IsRUFBYztZQUFsQyxpQkFBc0M7WUFBbEIsT0FBRSxHQUFGLEVBQUUsQ0FBWTtZQUhsQyxpQkFBWSxHQUNSLElBQUksQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsNEJBQTRCLENBQUMsRUFBRSx1QkFBdUIsQ0FBQyxDQUFDO1lBb0Y1Rjs7O2VBR0c7WUFDTyxrQkFBYSxHQUNuQjtnQkFDRSxLQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7Z0JBQ2QsS0FBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNmLENBQUMsQ0FBQTtRQTFGZ0MsQ0FBQztRQUV0Qzs7Ozs7OztXQU9HO1FBQ0gsdUJBQUksR0FBSixVQUFRLEVBQVc7WUFBbkIsaUJBaUJDO1lBaEJDLElBQUksT0FBTyxHQUFHLEtBQUssQ0FBQztZQUNwQixJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDZCxJQUFJO2dCQUNGLElBQU0sTUFBTSxHQUFHLEVBQUUsRUFBRSxDQUFDO2dCQUNwQixJQUFJLE1BQU0sWUFBWSxPQUFPLEVBQUU7b0JBQzdCLE9BQU8sR0FBRyxJQUFJLENBQUM7b0JBQ2YsK0VBQStFO29CQUMvRSxPQUFPLE1BQU0sQ0FBQyxPQUFPLENBQUMsY0FBTSxPQUFBLEtBQUksQ0FBQyxNQUFNLEVBQUUsRUFBYixDQUFhLENBQWlCLENBQUM7aUJBQzVEO3FCQUFNO29CQUNMLE9BQU8sTUFBTSxDQUFDO2lCQUNmO2FBQ0Y7b0JBQVM7Z0JBQ1IsSUFBSSxDQUFDLE9BQU8sRUFBRTtvQkFDWixJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7aUJBQ2Y7YUFDRjtRQUNILENBQUM7UUFFRDs7V0FFRztRQUNPLHlCQUFNLEdBQWhCO1lBQ0UsSUFBSTtnQkFDRixJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztnQkFDekIsbUVBQW1FO2dCQUNuRSw4Q0FBOEM7Z0JBQzlDLElBQUksQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsRUFBRSxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDcEY7WUFBQyxPQUFPLENBQUMsRUFBRTtnQkFDVixJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztnQkFDNUIsSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLFFBQVEsRUFBRTtvQkFDdkIsTUFBTSxDQUFDLENBQUM7aUJBQ1Q7Z0JBRUQsd0RBQXdEO2dCQUN4RCx3RkFBd0Y7Z0JBQ3hGLCtFQUErRTtnQkFDL0UsSUFBSSxHQUFHLFNBQVEsQ0FBQztnQkFDaEIsSUFBSTtvQkFDRixHQUFHLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO2lCQUMzQztnQkFBQyxXQUFNO29CQUNOLEdBQUcsR0FBRyxXQUFXLENBQUM7aUJBQ25CO2dCQUVELE1BQU0sSUFBSSxLQUFLLENBQ1gsZ0RBQThDLEdBQUcsUUFBSztvQkFDdEQsMkpBQTJKO29CQUMzSixxRUFBcUU7cUJBQ3JFLHdGQUFzRixJQUFJLENBQUMsWUFBWSxPQUFJLENBQUEsQ0FBQyxDQUFDO2FBQ2xIO1FBQ0gsQ0FBQztRQUVEOztXQUVHO1FBQ08seUJBQU0sR0FBaEI7WUFDRSxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztZQUM1QixJQUFJLElBQUksQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsRUFBRTtnQkFDckMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO2FBQ3ZDO1FBQ0gsQ0FBQztRQUVTLG9DQUFpQixHQUEzQjtZQUNFLE9BQU8sQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUMzQyxPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDN0MsQ0FBQztRQUVTLHVDQUFvQixHQUE5QjtZQUNFLE9BQU8sQ0FBQyxjQUFjLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUNyRCxPQUFPLENBQUMsY0FBYyxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDdkQsQ0FBQztRQVlEOzs7V0FHRztRQUNPLHVCQUFJLEdBQWQsVUFBZSxJQUFZO1lBQ3pCLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDckIsQ0FBQztRQUNILGVBQUM7SUFBRCxDQUFDLEFBdkdELElBdUdDO0lBdkdZLDRCQUFRIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuaW1wb3J0ICogYXMgcHJvY2VzcyBmcm9tICdwcm9jZXNzJztcbmltcG9ydCB7RmlsZVN5c3RlbX0gZnJvbSAnLi4vLi4vLi4vc3JjL25ndHNjL2ZpbGVfc3lzdGVtJztcblxuLyoqXG4gKiBUaGUgTG9ja0ZpbGUgaXMgdXNlZCB0byBwcmV2ZW50IG1vcmUgdGhhbiBvbmUgaW5zdGFuY2Ugb2YgbmdjYyBleGVjdXRpbmcgYXQgdGhlIHNhbWUgdGltZS5cbiAqXG4gKiBXaGVuIG5nY2Mgc3RhcnRzIGV4ZWN1dGluZywgaXQgY3JlYXRlcyBhIGZpbGUgaW4gdGhlIGBjb21waWxlci1jbGkvbmdjY2AgZm9sZGVyLiBJZiBpdCBmaW5kcyBvbmVcbiAqIGlzIGFscmVhZHkgdGhlcmUgdGhlbiBpdCBmYWlscyB3aXRoIGEgc3VpdGFibGUgZXJyb3IgbWVzc2FnZS5cbiAqIFdoZW4gbmdjYyBjb21wbGV0ZXMgZXhlY3V0aW5nLCBpdCByZW1vdmVzIHRoZSBmaWxlIHNvIHRoYXQgZnV0dXJlIG5nY2MgZXhlY3V0aW9ucyBjYW4gc3RhcnQuXG4gKi9cbmV4cG9ydCBjbGFzcyBMb2NrRmlsZSB7XG4gIGxvY2tGaWxlUGF0aCA9XG4gICAgICB0aGlzLmZzLnJlc29sdmUocmVxdWlyZS5yZXNvbHZlKCdAYW5ndWxhci9jb21waWxlci1jbGkvbmdjYycpLCAnLi4vX19uZ2NjX2xvY2tfZmlsZV9fJyk7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBmczogRmlsZVN5c3RlbSkge31cblxuICAvKipcbiAgICogUnVuIGEgZnVuY3Rpb24gZ3VhcmRlZCBieSB0aGUgbG9jayBmaWxlLlxuICAgKlxuICAgKiBOb3RlIHRoYXQgVCBjYW4gYmUgYSBQcm9taXNlLiBJZiBzbywgd2UgcnVuIHRoZSBgcmVtb3ZlKClgIGNhbGwgaW4gdGhlIHByb21pc2UncyBgZmluYWxseWBcbiAgICogaGFuZGxlci4gT3RoZXJ3aXNlIHdlIHJ1biB0aGUgYHJlbW92ZSgpYCBjYWxsIGluIHRoZSBgdHJ5Li4uZmluYWxseWAgYmxvY2suXG4gICAqXG4gICAqIEBwYXJhbSBmbiBUaGUgZnVuY3Rpb24gdG8gcnVuLlxuICAgKi9cbiAgbG9jazxUPihmbjogKCkgPT4gVCk6IFQge1xuICAgIGxldCBpc0FzeW5jID0gZmFsc2U7XG4gICAgdGhpcy5jcmVhdGUoKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gZm4oKTtcbiAgICAgIGlmIChyZXN1bHQgaW5zdGFuY2VvZiBQcm9taXNlKSB7XG4gICAgICAgIGlzQXN5bmMgPSB0cnVlO1xuICAgICAgICAvLyBUaGUgY2FzdCBpcyBuZWNlc3NhcnkgYmVjYXVzZSBUUyBjYW5ub3QgZGVkdWNlIHRoYXQgVCBpcyBub3cgYSBwcm9taXNlIGhlcmUuXG4gICAgICAgIHJldHVybiByZXN1bHQuZmluYWxseSgoKSA9PiB0aGlzLnJlbW92ZSgpKSBhcyB1bmtub3duIGFzIFQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfVxuICAgIH0gZmluYWxseSB7XG4gICAgICBpZiAoIWlzQXN5bmMpIHtcbiAgICAgICAgdGhpcy5yZW1vdmUoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogV3JpdGUgYSBsb2NrIGZpbGUgdG8gZGlzaywgb3IgZXJyb3IgaWYgdGhlcmUgaXMgYWxyZWFkeSBvbmUgdGhlcmUuXG4gICAqL1xuICBwcm90ZWN0ZWQgY3JlYXRlKCkge1xuICAgIHRyeSB7XG4gICAgICB0aGlzLmFkZFNpZ25hbEhhbmRsZXJzKCk7XG4gICAgICAvLyBUbyBhdm9pZCByYWNlIGNvbmRpdGlvbnMsIHdlIGNoZWNrIGZvciBleGlzdGVuY2Ugb2YgdGhlIGxvY2tmaWxlXG4gICAgICAvLyBieSBhY3R1YWxseSB0cnlpbmcgdG8gY3JlYXRlIGl0IGV4Y2x1c2l2ZWx5XG4gICAgICB0aGlzLmZzLndyaXRlRmlsZSh0aGlzLmxvY2tGaWxlUGF0aCwgcHJvY2Vzcy5waWQudG9TdHJpbmcoKSwgLyogZXhjbHVzaXZlICovIHRydWUpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMucmVtb3ZlU2lnbmFsSGFuZGxlcnMoKTtcbiAgICAgIGlmIChlLmNvZGUgIT09ICdFRVhJU1QnKSB7XG4gICAgICAgIHRocm93IGU7XG4gICAgICB9XG5cbiAgICAgIC8vIFRoZSBsb2NrZmlsZSBhbHJlYWR5IGV4aXN0cyBzbyByYWlzZSBhIGhlbHBmdWwgZXJyb3IuXG4gICAgICAvLyBJdCBpcyBmZWFzaWJsZSB0aGF0IHRoZSBsb2NrZmlsZSB3YXMgcmVtb3ZlZCBiZXR3ZWVuIHRoZSBwcmV2aW91cyBjaGVjayBmb3IgZXhpc3RlbmNlXG4gICAgICAvLyBhbmQgdGhpcyBmaWxlLXJlYWQuIElmIHNvIHRoZW4gd2Ugc3RpbGwgZXJyb3IgYnV0IGFzIGdyYWNlZnVsbHkgYXMgcG9zc2libGUuXG4gICAgICBsZXQgcGlkOiBzdHJpbmc7XG4gICAgICB0cnkge1xuICAgICAgICBwaWQgPSB0aGlzLmZzLnJlYWRGaWxlKHRoaXMubG9ja0ZpbGVQYXRoKTtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICBwaWQgPSAne3Vua25vd259JztcbiAgICAgIH1cblxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBuZ2NjIGlzIGFscmVhZHkgcnVubmluZyBhdCBwcm9jZXNzIHdpdGggaWQgJHtwaWR9LlxcbmAgK1xuICAgICAgICAgIGBJZiB5b3UgYXJlIHJ1bm5pbmcgbXVsdGlwbGUgYnVpbGRzIGluIHBhcmFsbGVsIHRoZW4geW91IHNob3VsZCBwcmUtcHJvY2VzcyB5b3VyIG5vZGVfbW9kdWxlcyB2aWEgdGhlIGNvbW1hbmQgbGluZSBuZ2NjIHRvb2wgYmVmb3JlIHN0YXJ0aW5nIHRoZSBidWlsZHM7XFxuYCArXG4gICAgICAgICAgYFNlZSBodHRwczovL3Y5LmFuZ3VsYXIuaW8vZ3VpZGUvaXZ5I3NwZWVkaW5nLXVwLW5nY2MtY29tcGlsYXRpb24uXFxuYCArXG4gICAgICAgICAgYChJZiB5b3UgYXJlIHN1cmUgbm8gbmdjYyBwcm9jZXNzIGlzIHJ1bm5pbmcgdGhlbiB5b3Ugc2hvdWxkIGRlbGV0ZSB0aGUgbG9ja2ZpbGUgYXQgJHt0aGlzLmxvY2tGaWxlUGF0aH0uKWApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmUgdGhlIGxvY2sgZmlsZSBmcm9tIGRpc2suXG4gICAqL1xuICBwcm90ZWN0ZWQgcmVtb3ZlKCkge1xuICAgIHRoaXMucmVtb3ZlU2lnbmFsSGFuZGxlcnMoKTtcbiAgICBpZiAodGhpcy5mcy5leGlzdHModGhpcy5sb2NrRmlsZVBhdGgpKSB7XG4gICAgICB0aGlzLmZzLnJlbW92ZUZpbGUodGhpcy5sb2NrRmlsZVBhdGgpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBhZGRTaWduYWxIYW5kbGVycygpIHtcbiAgICBwcm9jZXNzLm9uY2UoJ1NJR0lOVCcsIHRoaXMuc2lnbmFsSGFuZGxlcik7XG4gICAgcHJvY2Vzcy5vbmNlKCdTSUdIVVAnLCB0aGlzLnNpZ25hbEhhbmRsZXIpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHJlbW92ZVNpZ25hbEhhbmRsZXJzKCkge1xuICAgIHByb2Nlc3MucmVtb3ZlTGlzdGVuZXIoJ1NJR0lOVCcsIHRoaXMuc2lnbmFsSGFuZGxlcik7XG4gICAgcHJvY2Vzcy5yZW1vdmVMaXN0ZW5lcignU0lHSFVQJywgdGhpcy5zaWduYWxIYW5kbGVyKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIGhhbmRsZSBuZWVkcyB0byBiZSBkZWZpbmVkIGFzIGEgcHJvcGVydHkgcmF0aGVyIHRoYW4gYSBtZXRob2RcbiAgICogc28gdGhhdCBpdCBjYW4gYmUgcGFzc2VkIGFyb3VuZCBhcyBhIGJvdW5kIGZ1bmN0aW9uLlxuICAgKi9cbiAgcHJvdGVjdGVkIHNpZ25hbEhhbmRsZXIgPVxuICAgICAgKCkgPT4ge1xuICAgICAgICB0aGlzLnJlbW92ZSgpO1xuICAgICAgICB0aGlzLmV4aXQoMSk7XG4gICAgICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgZnVuY3Rpb24gd3JhcHMgYHByb2Nlc3MuZXhpdCgpYCB3aGljaCBtYWtlcyBpdCBlYXNpZXIgdG8gbWFuYWdlIGluIHVuaXQgdGVzdHMsXG4gICAqIHNpbmNlIGl0IGlzIG5vdCBwb3NzaWJsZSB0byBtb2NrIG91dCBgcHJvY2Vzcy5leGl0KClgIHdoZW4gaXQgaXMgY2FsbGVkIGZyb20gc2lnbmFsIGhhbmRsZXJzLlxuICAgKi9cbiAgcHJvdGVjdGVkIGV4aXQoY29kZTogbnVtYmVyKTogdm9pZCB7XG4gICAgcHJvY2Vzcy5leGl0KGNvZGUpO1xuICB9XG59XG4iXX0=