@angular-devkit/core 0.0.10 → 0.0.15

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 (54) hide show
  1. package/{src/logger → node}/cli-logger.d.ts +2 -2
  2. package/node/cli-logger.js +43 -0
  3. package/node/fs.d.ts +1 -0
  4. package/node/fs.js +25 -0
  5. package/node/index.d.ts +11 -0
  6. package/node/index.js +17 -0
  7. package/node/resolve.d.ts +58 -0
  8. package/node/resolve.js +214 -0
  9. package/package.json +4 -2
  10. package/src/index.d.ts +3 -1
  11. package/src/index.js +4 -2
  12. package/src/json/index.d.ts +2 -0
  13. package/src/json/index.js +3 -1
  14. package/src/json/schema/index.d.ts +14 -0
  15. package/src/json/schema/index.js +19 -0
  16. package/src/json/schema/registry.d.ts +19 -0
  17. package/src/json/schema/registry.js +34 -0
  18. package/src/json/schema/schema.d.ts +83 -0
  19. package/src/json/schema/schema.js +3 -0
  20. package/src/json/schema/serializers/interface.d.ts +11 -0
  21. package/src/json/schema/serializers/interface.js +6 -0
  22. package/src/json/schema/serializers/javascript.d.ts +46 -0
  23. package/src/json/schema/serializers/javascript.js +94 -0
  24. package/src/json/schema/serializers/javascript_benchmark.d.ts +0 -0
  25. package/src/json/schema/serializers/javascript_benchmark.js +45 -0
  26. package/src/json/schema/serializers/templates/javascript/index.d.ts +11 -0
  27. package/src/json/schema/serializers/templates/javascript/index.js +21 -0
  28. package/src/json/schema/serializers/templates/javascript/prop-any.js +40 -0
  29. package/src/json/schema/serializers/templates/javascript/prop-array.js +166 -0
  30. package/src/json/schema/serializers/templates/javascript/prop-boolean.js +54 -0
  31. package/src/json/schema/serializers/templates/javascript/prop-number.js +130 -0
  32. package/src/json/schema/serializers/templates/javascript/prop-object.js +231 -0
  33. package/src/json/schema/serializers/templates/javascript/prop-string.js +98 -0
  34. package/src/json/schema/serializers/templates/javascript/root.js +41 -0
  35. package/src/json/schema/serializers/templates/javascript/subschema.js +65 -0
  36. package/src/logger/index.d.ts +0 -1
  37. package/src/logger/index.js +1 -2
  38. package/src/logger/logger.d.ts +12 -1
  39. package/src/logger/logger.js +17 -1
  40. package/src/logger/null-logger.d.ts +2 -1
  41. package/src/logger/null-logger.js +12 -1
  42. package/src/utils/index.d.ts +3 -0
  43. package/src/utils/index.js +4 -1
  44. package/src/utils/literals.d.ts +12 -0
  45. package/src/utils/literals.js +42 -0
  46. package/src/utils/template.d.ts +82 -0
  47. package/src/utils/template.js +258 -0
  48. package/src/virtual-fs/index.d.ts +8 -0
  49. package/src/virtual-fs/index.js +14 -0
  50. package/src/virtual-fs/path.d.ts +90 -0
  51. package/src/virtual-fs/path.js +233 -0
  52. package/src/virtual-fs/path_benchmark.d.ts +0 -0
  53. package/src/virtual-fs/path_benchmark.js +18 -0
  54. package/src/logger/cli-logger.js +0 -44
@@ -0,0 +1,90 @@
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 { BaseException } from '@angular-devkit/core';
9
+ export declare class InvalidPathException extends BaseException {
10
+ constructor(path: string);
11
+ }
12
+ export declare class PathMustBeAbsoluteException extends BaseException {
13
+ constructor(path: string);
14
+ }
15
+ /**
16
+ * A Path recognized by most methods in the DevKit.
17
+ */
18
+ export declare type Path = string & {
19
+ __PRIVATE_DEVKIT_PATH: void;
20
+ };
21
+ /**
22
+ * The Separator for normalized path.
23
+ * @type {Path}
24
+ */
25
+ export declare const NormalizedSep: Path;
26
+ /**
27
+ * The root of a normalized path.
28
+ * @type {Path}
29
+ */
30
+ export declare const NormalizedRoot: Path;
31
+ /**
32
+ * Split a path into multiple path fragments. Each fragments except the last one will end with
33
+ * a path separator.
34
+ * @param {Path} path The path to split.
35
+ * @returns {Path[]} An array of path fragments.
36
+ */
37
+ export declare function split(path: Path): Path[];
38
+ /**
39
+ *
40
+ */
41
+ export declare function extname(path: Path): string;
42
+ /**
43
+ * This is the equivalent of calling dirname() over and over, until the root, then getting the
44
+ * basename.
45
+ *
46
+ * @example rootname('/a/b/c') == 'a'
47
+ * @example rootname('a/b') == '.'
48
+ * @param path The path to get the rootname from.
49
+ * @returns {Path} The first directory name.
50
+ */
51
+ export declare function rootname(path: Path): Path;
52
+ /**
53
+ * Return the basename of the path, as a Path. See path.basename
54
+ */
55
+ export declare function basename(path: Path): Path;
56
+ /**
57
+ * Return the dirname of the path, as a Path. See path.dirname
58
+ */
59
+ export declare function dirname(path: Path): Path;
60
+ /**
61
+ * Join multiple paths together, and normalize the result. Accepts strings that will be
62
+ * normalized as well (but the original must be a path).
63
+ */
64
+ export declare function join(p1: Path, ...others: string[]): Path;
65
+ /**
66
+ * Returns true if a path is absolute.
67
+ */
68
+ export declare function isAbsolute(p: Path): boolean;
69
+ /**
70
+ * Returns a path such that `join(from, relative(from, to)) == to`.
71
+ * Both paths must be absolute, otherwise it does not make much sense.
72
+ */
73
+ export declare function relative(from: Path, to: Path): Path;
74
+ /**
75
+ * Returns a Path that is the resolution of p2, from p1. If p2 is absolute, it will return p2,
76
+ * otherwise will join both p1 and p2.
77
+ */
78
+ export declare function resolve(p1: Path, p2: Path): Path;
79
+ /**
80
+ * Normalize a string into a Path. This is the only mean to get a Path type from a string that
81
+ * represents a system path. Normalization includes:
82
+ * - Windows backslashes `\\` are replaced with `/`.
83
+ * - Windows drivers are replaced with `/X/`, where X is the drive letter.
84
+ * - Absolute paths starts with `/`.
85
+ * - Multiple `/` are replaced by a single one.
86
+ * - Path segments `.` are removed.
87
+ * - Path segments `..` are resolved.
88
+ * - If a path is absolute, having a `..` at the start is invalid (and will throw).
89
+ */
90
+ export declare function normalize(path: string): Path;
@@ -0,0 +1,233 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ /**
4
+ * @license
5
+ * Copyright Google Inc. All Rights Reserved.
6
+ *
7
+ * Use of this source code is governed by an MIT-style license that can be
8
+ * found in the LICENSE file at https://angular.io/license
9
+ */
10
+ const core_1 = require("@angular-devkit/core");
11
+ class InvalidPathException extends core_1.BaseException {
12
+ constructor(path) { super(`Path ${JSON.stringify(path)} is invalid.`); }
13
+ }
14
+ exports.InvalidPathException = InvalidPathException;
15
+ class PathMustBeAbsoluteException extends core_1.BaseException {
16
+ constructor(path) { super(`Path ${JSON.stringify(path)} must be absolute.`); }
17
+ }
18
+ exports.PathMustBeAbsoluteException = PathMustBeAbsoluteException;
19
+ /**
20
+ * The Separator for normalized path.
21
+ * @type {Path}
22
+ */
23
+ exports.NormalizedSep = '/';
24
+ /**
25
+ * The root of a normalized path.
26
+ * @type {Path}
27
+ */
28
+ exports.NormalizedRoot = exports.NormalizedSep;
29
+ /**
30
+ * Split a path into multiple path fragments. Each fragments except the last one will end with
31
+ * a path separator.
32
+ * @param {Path} path The path to split.
33
+ * @returns {Path[]} An array of path fragments.
34
+ */
35
+ function split(path) {
36
+ const arr = path.split(exports.NormalizedSep);
37
+ return arr.map((fragment, i) => fragment + (i < arr.length - 1 ? exports.NormalizedSep : ''));
38
+ }
39
+ exports.split = split;
40
+ /**
41
+ *
42
+ */
43
+ function extname(path) {
44
+ const base = basename(path);
45
+ const i = base.lastIndexOf('.');
46
+ if (i < 1) {
47
+ return '';
48
+ }
49
+ else {
50
+ return base.substr(i);
51
+ }
52
+ }
53
+ exports.extname = extname;
54
+ /**
55
+ * This is the equivalent of calling dirname() over and over, until the root, then getting the
56
+ * basename.
57
+ *
58
+ * @example rootname('/a/b/c') == 'a'
59
+ * @example rootname('a/b') == '.'
60
+ * @param path The path to get the rootname from.
61
+ * @returns {Path} The first directory name.
62
+ */
63
+ function rootname(path) {
64
+ const i = path.indexOf(exports.NormalizedSep);
65
+ if (!isAbsolute(path)) {
66
+ return '.';
67
+ }
68
+ else if (i == -1) {
69
+ return path;
70
+ }
71
+ else {
72
+ return path.substr(path.lastIndexOf(exports.NormalizedSep) + 1);
73
+ }
74
+ }
75
+ exports.rootname = rootname;
76
+ /**
77
+ * Return the basename of the path, as a Path. See path.basename
78
+ */
79
+ function basename(path) {
80
+ const i = path.lastIndexOf(exports.NormalizedSep);
81
+ if (i == -1) {
82
+ return path;
83
+ }
84
+ else {
85
+ return path.substr(path.lastIndexOf(exports.NormalizedSep) + 1);
86
+ }
87
+ }
88
+ exports.basename = basename;
89
+ /**
90
+ * Return the dirname of the path, as a Path. See path.dirname
91
+ */
92
+ function dirname(path) {
93
+ const i = path.lastIndexOf(exports.NormalizedSep);
94
+ if (i == -1) {
95
+ return '';
96
+ }
97
+ else {
98
+ return normalize(path.substr(0, i));
99
+ }
100
+ }
101
+ exports.dirname = dirname;
102
+ /**
103
+ * Join multiple paths together, and normalize the result. Accepts strings that will be
104
+ * normalized as well (but the original must be a path).
105
+ */
106
+ function join(p1, ...others) {
107
+ if (others.length > 0) {
108
+ return normalize((p1 ? p1 + exports.NormalizedSep : '') + others.join(exports.NormalizedSep));
109
+ }
110
+ else {
111
+ return p1;
112
+ }
113
+ }
114
+ exports.join = join;
115
+ /**
116
+ * Returns true if a path is absolute.
117
+ */
118
+ function isAbsolute(p) {
119
+ return p.startsWith(exports.NormalizedSep);
120
+ }
121
+ exports.isAbsolute = isAbsolute;
122
+ /**
123
+ * Returns a path such that `join(from, relative(from, to)) == to`.
124
+ * Both paths must be absolute, otherwise it does not make much sense.
125
+ */
126
+ function relative(from, to) {
127
+ if (!isAbsolute(from)) {
128
+ throw new PathMustBeAbsoluteException(from);
129
+ }
130
+ if (!isAbsolute(to)) {
131
+ throw new PathMustBeAbsoluteException(to);
132
+ }
133
+ let p;
134
+ if (from == to) {
135
+ p = '';
136
+ }
137
+ else {
138
+ const splitFrom = from.split(exports.NormalizedSep);
139
+ const splitTo = to.split(exports.NormalizedSep);
140
+ while (splitFrom.length > 0 && splitTo.length > 0 && splitFrom[0] == splitTo[0]) {
141
+ splitFrom.shift();
142
+ splitTo.shift();
143
+ }
144
+ if (splitFrom.length == 0) {
145
+ p = splitTo.join(exports.NormalizedSep);
146
+ }
147
+ else {
148
+ p = splitFrom.map(_ => '..').concat(splitTo).join(exports.NormalizedSep);
149
+ }
150
+ }
151
+ return normalize(p);
152
+ }
153
+ exports.relative = relative;
154
+ /**
155
+ * Returns a Path that is the resolution of p2, from p1. If p2 is absolute, it will return p2,
156
+ * otherwise will join both p1 and p2.
157
+ */
158
+ function resolve(p1, p2) {
159
+ if (isAbsolute(p2)) {
160
+ return p2;
161
+ }
162
+ else {
163
+ return join(p1, p2);
164
+ }
165
+ }
166
+ exports.resolve = resolve;
167
+ /**
168
+ * Normalize a string into a Path. This is the only mean to get a Path type from a string that
169
+ * represents a system path. Normalization includes:
170
+ * - Windows backslashes `\\` are replaced with `/`.
171
+ * - Windows drivers are replaced with `/X/`, where X is the drive letter.
172
+ * - Absolute paths starts with `/`.
173
+ * - Multiple `/` are replaced by a single one.
174
+ * - Path segments `.` are removed.
175
+ * - Path segments `..` are resolved.
176
+ * - If a path is absolute, having a `..` at the start is invalid (and will throw).
177
+ */
178
+ function normalize(path) {
179
+ if (path == '' || path == '.') {
180
+ return '';
181
+ }
182
+ else if (path == exports.NormalizedRoot) {
183
+ return exports.NormalizedRoot;
184
+ }
185
+ // Match absolute windows path.
186
+ const original = path;
187
+ if (path.match(/^[A-Z]:\\/)) {
188
+ path = '\\' + path[0] + '\\' + path.substr(3);
189
+ }
190
+ // We convert Windows paths as well here.
191
+ const p = path.split(/[\/\\]/g);
192
+ let relative = false;
193
+ let i = 1;
194
+ // Special case the first one.
195
+ if (p[0] != '') {
196
+ p.unshift('.');
197
+ relative = true;
198
+ }
199
+ while (i < p.length) {
200
+ if (p[i] == '.') {
201
+ p.splice(i, 1);
202
+ }
203
+ else if (p[i] == '..') {
204
+ if (i < 2 && !relative) {
205
+ throw new InvalidPathException(original);
206
+ }
207
+ else if (i >= 2 && p[i - 1] != '..') {
208
+ p.splice(i - 1, 2);
209
+ i--;
210
+ }
211
+ else {
212
+ i++;
213
+ }
214
+ }
215
+ else if (p[i] == '') {
216
+ p.splice(i, 1);
217
+ }
218
+ else {
219
+ i++;
220
+ }
221
+ }
222
+ if (p.length == 1) {
223
+ return p[0] == '' ? exports.NormalizedSep : '';
224
+ }
225
+ else {
226
+ if (p[0] == '.') {
227
+ p.shift();
228
+ }
229
+ return p.join(exports.NormalizedSep);
230
+ }
231
+ }
232
+ exports.normalize = normalize;
233
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGF0aC5qcyIsInNvdXJjZVJvb3QiOiIvVXNlcnMvaGFuc2wvU291cmNlcy9kZXZraXQvIiwic291cmNlcyI6WyJwYWNrYWdlcy9hbmd1bGFyX2RldmtpdC9jb3JlL3NyYy92aXJ0dWFsLWZzL3BhdGgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQTs7Ozs7O0dBTUc7QUFDSCwrQ0FBcUQ7QUFHckQsMEJBQWtDLFNBQVEsb0JBQWE7SUFDckQsWUFBWSxJQUFZLElBQUksS0FBSyxDQUFDLFFBQVEsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQ2pGO0FBRkQsb0RBRUM7QUFDRCxpQ0FBeUMsU0FBUSxvQkFBYTtJQUM1RCxZQUFZLElBQVksSUFBSSxLQUFLLENBQUMsUUFBUSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUN2RjtBQUZELGtFQUVDO0FBV0Q7OztHQUdHO0FBQ1UsUUFBQSxhQUFhLEdBQUcsR0FBVyxDQUFDO0FBR3pDOzs7R0FHRztBQUNVLFFBQUEsY0FBYyxHQUFHLHFCQUFxQixDQUFDO0FBR3BEOzs7OztHQUtHO0FBQ0gsZUFBc0IsSUFBVTtJQUM5QixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLHFCQUFhLENBQUMsQ0FBQztJQUV0QyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLEtBQUssUUFBUSxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxHQUFHLHFCQUFhLEdBQUcsRUFBRSxDQUFDLENBQVcsQ0FBQztBQUNsRyxDQUFDO0FBSkQsc0JBSUM7QUFFRDs7R0FFRztBQUNILGlCQUF3QixJQUFVO0lBQ2hDLE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM1QixNQUFNLENBQUMsR0FBRyxJQUFJ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QUM7UUFDTixDQUFDO0lBQ0gsQ0FBQztJQUVELEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNsQixNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxxQkFBYSxHQUFHLEVBQVUsQ0FBQztJQUNqRCxDQUFDO0lBQUMsSUFBSSxDQUFDLENBQUM7UUFDTixFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQztZQUNoQixDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDWixDQUFDO1FBRUQsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMscUJBQWEsQ0FBUyxDQUFDO0lBQ3ZDLENBQUM7QUFDSCxDQUFDO0FBcERELDhCQW9EQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cbmltcG9ydCB7IEJhc2VFeGNlcHRpb24gfSBmcm9tICdAYW5ndWxhci1kZXZraXQvY29yZSc7XG5cblxuZXhwb3J0IGNsYXNzIEludmFsaWRQYXRoRXhjZXB0aW9uIGV4dGVuZHMgQmFzZUV4Y2VwdGlvbiB7XG4gIGNvbnN0cnVjdG9yKHBhdGg6IHN0cmluZykgeyBzdXBlcihgUGF0aCAke0pTT04uc3RyaW5naWZ5KHBhdGgpfSBpcyBpbnZhbGlkLmApOyB9XG59XG5leHBvcnQgY2xhc3MgUGF0aE11c3RCZUFic29sdXRlRXhjZXB0aW9uIGV4dGVuZHMgQmFzZUV4Y2VwdGlvbiB7XG4gIGNvbnN0cnVjdG9yKHBhdGg6IHN0cmluZykgeyBzdXBlcihgUGF0aCAke0pTT04uc3RyaW5naWZ5KHBhdGgpfSBtdXN0IGJlIGFic29sdXRlLmApOyB9XG59XG5cblxuLyoqXG4gKiBBIFBhdGggcmVjb2duaXplZCBieSBtb3N0IG1ldGhvZHMgaW4gdGhlIERldktpdC5cbiAqL1xuZXhwb3J0IHR5cGUgUGF0aCA9IHN0cmluZyAmIHtcbiAgX19QUklWQVRFX0RFVktJVF9QQVRIOiB2b2lkO1xufTtcblxuXG4vKipcbiAqIFRoZSBTZXBhcmF0b3IgZm9yIG5vcm1hbGl6ZWQgcGF0aC5cbiAqIEB0eXBlIHtQYXRofVxuICovXG5leHBvcnQgY29uc3QgTm9ybWFsaXplZFNlcCA9ICcvJyBhcyBQYXRoO1xuXG5cbi8qKlxuICogVGhlIHJvb3Qgb2YgYSBub3JtYWxpemVkIHBhdGguXG4gKiBAdHlwZSB7UGF0aH1cbiAqL1xuZXhwb3J0IGNvbnN0IE5vcm1hbGl6ZWRSb290ID0gTm9ybWFsaXplZFNlcCBhcyBQYXRoO1xuXG5cbi8qKlxuICogU3BsaXQgYSBwYXRoIGludG8gbXVsdGlwbGUgcGF0aCBmcmFnbWVudHMuIEVhY2ggZnJhZ21lbnRzIGV4Y2VwdCB0aGUgbGFzdCBvbmUgd2lsbCBlbmQgd2l0aFxuICogYSBwYXRoIHNlcGFyYXRvci5cbiAqIEBwYXJhbSB7UGF0aH0gcGF0aCBUaGUgcGF0aCB0byBzcGxpdC5cbiAqIEByZXR1cm5zIHtQYXRoW119IEFuIGFycmF5IG9mIHBhdGggZnJhZ21lbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc3BsaXQocGF0aDogUGF0aCk6IFBhdGhbXSB7XG4gIGNvbnN0IGFyciA9IHBhdGguc3BsaXQoTm9ybWFsaXplZFNlcCk7XG5cbiAgcmV0dXJuIGFyci5tYXAoKGZyYWdtZW50LCBpKSA9PiBmcmFnbWVudCArIChpIDwgYXJyLmxlbmd0aCAtIDEgPyBOb3JtYWxpemVkU2VwIDogJycpKSBhcyBQYXRoW107XG59XG5cbi8qKlxuICpcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV4dG5hbWUocGF0aDogUGF0aCk6IHN0cmluZyB7XG4gIGNvbnN0IGJhc2UgPSBiYXNlbmFtZShwYXRoKTtcbiAgY29uc3QgaSA9IGJhc2UubGFzdEluZGV4T2YoJy4nKTtcbiAgaWYgKGkgPCAxKSB7XG4gICAgcmV0dXJuICcnO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBiYXNlLnN1YnN0cihpKTtcbiAgfVxufVxuXG4vKipcbiAqIFRoaXMgaXMgdGhlIGVxdWl2YWxlbnQgb2YgY2FsbGluZyBkaXJuYW1lKCkgb3ZlciBhbmQgb3ZlciwgdW50aWwgdGhlIHJvb3QsIHRoZW4gZ2V0dGluZyB0aGVcbiAqIGJhc2VuYW1lLlxuICpcbiAqIEBleGFtcGxlIHJvb3RuYW1lKCcvYS9iL2MnKSA9PSAnYSdcbiAqIEBleGFtcGxlIHJvb3RuYW1lKCdhL2InKSA9PSAnLidcbiAqIEBwYXJhbSBwYXRoIFRoZSBwYXRoIHRvIGdldCB0aGUgcm9vdG5hbWUgZnJvbS5cbiAqIEByZXR1cm5zIHtQYXRofSBUaGUgZmlyc3QgZGlyZWN0b3J5IG5hbWUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByb290bmFtZShwYXRoOiBQYXRoKTogUGF0aCB7XG4gIGNvbnN0IGkgPSBwYXRoLmluZGV4T2YoTm9ybWFsaXplZFNlcCk7XG4gIGlmICghaXNBYnNvbHV0ZShwYXRoKSkge1xuICAgIHJldHVybiAnLicgYXMgUGF0aDtcbiAgfSBlbHNlIGlmIChpID09IC0xKSB7XG4gICAgcmV0dXJuIHBhdGg7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHBhdGguc3Vic3RyKHBhdGgubGFzdEluZGV4T2YoTm9ybWFsaXplZFNlcCkgKyAxKSBhcyBQYXRoO1xuICB9XG59XG5cblxuLyoqXG4gKiBSZXR1cm4gdGhlIGJhc2VuYW1lIG9mIHRoZSBwYXRoLCBhcyBhIFBhdGguIFNlZSBwYXRoLmJhc2VuYW1lXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBiYXNlbmFtZShwYXRoOiBQYXRoKTogUGF0aCB7XG4gIGNvbnN0IGkgPSBwYXRoLmxhc3RJbmRleE9mKE5vcm1hbGl6ZWRTZXApO1xuICBpZiAoaSA9PSAtMSkge1xuICAgIHJldHVybiBwYXRoO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBwYXRoLnN1YnN0cihwYXRoLmxhc3RJbmRleE9mKE5vcm1hbGl6ZWRTZXApICsgMSkgYXMgUGF0aDtcbiAgfVxufVxuXG5cbi8qKlxuICogUmV0dXJuIHRoZSBkaXJuYW1lIG9mIHRoZSBwYXRoLCBhcyBhIFBhdGguIFNlZSBwYXRoLmRpcm5hbWVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRpcm5hbWUocGF0aDogUGF0aCk6IFBhdGgge1xuICBjb25zdCBpID0gcGF0aC5sYXN0SW5kZXhPZihOb3JtYWxpemVkU2VwKTtcbiAgaWYgKGkgPT0gLTEpIHtcbiAgICByZXR1cm4gJycgYXMgUGF0aDtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbm9ybWFsaXplKHBhdGguc3Vic3RyKDAsIGkpKTtcbiAgfVxufVxuXG5cbi8qKlxuICogSm9pbiBtdWx0aXBsZSBwYXRocyB0b2dldGhlciwgYW5kIG5vcm1hbGl6ZSB0aGUgcmVzdWx0LiBBY2NlcHRzIHN0cmluZ3MgdGhhdCB3aWxsIGJlXG4gKiBub3JtYWxpemVkIGFzIHdlbGwgKGJ1dCB0aGUgb3JpZ2luYWwgbXVzdCBiZSBhIHBhdGgpLlxuICovXG5leHBvcnQgZnVuY3Rpb24gam9pbihwMTogUGF0aCwgLi4ub3RoZXJzOiBzdHJpbmdbXSk6IFBhdGgge1xuICBpZiAob3RoZXJzLmxlbmd0aCA+IDApIHtcbiAgICByZXR1cm4gbm9ybWFsaXplKChwMSA/IHAxICsgTm9ybWFsaXplZFNlcCA6ICcnKSArIG90aGVycy5qb2luKE5vcm1hbGl6ZWRTZXApKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gcDE7XG4gIH1cbn1cblxuXG4vKipcbiAqIFJldHVybnMgdHJ1ZSBpZiBhIHBhdGggaXMgYWJzb2x1dGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0Fic29sdXRlKHA6IFBhdGgpIHtcbiAgcmV0dXJuIHAuc3RhcnRzV2l0aChOb3JtYWxpemVkU2VwKTtcbn1cblxuXG4vKipcbiAqIFJldHVybnMgYSBwYXRoIHN1Y2ggdGhhdCBgam9pbihmcm9tLCByZWxhdGl2ZShmcm9tLCB0bykpID09IHRvYC5cbiAqIEJvdGggcGF0aHMgbXVzdCBiZSBhYnNvbHV0ZSwgb3RoZXJ3aXNlIGl0IGRvZXMgbm90IG1ha2UgbXVjaCBzZW5zZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbGF0aXZlKGZyb206IFBhdGgsIHRvOiBQYXRoKTogUGF0aCB7XG4gIGlmICghaXNBYnNvbHV0ZShmcm9tKSkge1xuICAgIHRocm93IG5ldyBQYXRoTXVzdEJlQWJzb2x1dGVFeGNlcHRpb24oZnJvbSk7XG4gIH1cbiAgaWYgKCFpc0Fic29sdXRlKHRvKSkge1xuICAgIHRocm93IG5ldyBQYXRoTXVzdEJlQWJzb2x1dGVFeGNlcHRpb24odG8pO1xuICB9XG5cbiAgbGV0IHA6IHN0cmluZztcblxuICBpZiAoZnJvbSA9PSB0bykge1xuICAgIHAgPSAnJztcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBzcGxpdEZyb20gPSBmcm9tLnNwbGl0KE5vcm1hbGl6ZWRTZXApO1xuICAgIGNvbnN0IHNwbGl0VG8gPSB0by5zcGxpdChOb3JtYWxpemVkU2VwKTtcblxuICAgIHdoaWxlIChzcGxpdEZyb20ubGVuZ3RoID4gMCAmJiBzcGxpdFRvLmxlbmd0aCA+IDAgJiYgc3BsaXRGcm9tWzBdID09IHNwbGl0VG9bMF0pIHtcbiAgICAgIHNwbGl0RnJvbS5zaGlmdCgpO1xuICAgICAgc3BsaXRUby5zaGlmdCgpO1xuICAgIH1cblxuICAgIGlmIChzcGxpdEZyb20ubGVuZ3RoID09IDApIHtcbiAgICAgIHAgPSBzcGxpdFRvLmpvaW4oTm9ybWFsaXplZFNlcCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHAgPSBzcGxpdEZyb20ubWFwKF8gPT4gJy4uJykuY29uY2F0KHNwbGl0VG8pLmpvaW4oTm9ybWFsaXplZFNlcCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5vcm1hbGl6ZShwKTtcbn1cblxuXG4vKipcbiAqIFJldHVybnMgYSBQYXRoIHRoYXQgaXMgdGhlIHJlc29sdXRpb24gb2YgcDIsIGZyb20gcDEuIElmIHAyIGlzIGFic29sdXRlLCBpdCB3aWxsIHJldHVybiBwMixcbiAqIG90aGVyd2lzZSB3aWxsIGpvaW4gYm90aCBwMSBhbmQgcDIuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlKHAxOiBQYXRoLCBwMjogUGF0aCkge1xuICBpZiAoaXNBYnNvbHV0ZShwMikpIHtcbiAgICByZXR1cm4gcDI7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGpvaW4ocDEsIHAyKTtcbiAgfVxufVxuXG5cbi8qKlxuICogTm9ybWFsaXplIGEgc3RyaW5nIGludG8gYSBQYXRoLiBUaGlzIGlzIHRoZSBvbmx5IG1lYW4gdG8gZ2V0IGEgUGF0aCB0eXBlIGZyb20gYSBzdHJpbmcgdGhhdFxuICogcmVwcmVzZW50cyBhIHN5c3RlbSBwYXRoLiBOb3JtYWxpemF0aW9uIGluY2x1ZGVzOlxuICogICAtIFdpbmRvd3MgYmFja3NsYXNoZXMgYFxcXFxgIGFyZSByZXBsYWNlZCB3aXRoIGAvYC5cbiAqICAgLSBXaW5kb3dzIGRyaXZlcnMgYXJlIHJlcGxhY2VkIHdpdGggYC9YL2AsIHdoZXJlIFggaXMgdGhlIGRyaXZlIGxldHRlci5cbiAqICAgLSBBYnNvbHV0ZSBwYXRocyBzdGFydHMgd2l0aCBgL2AuXG4gKiAgIC0gTXVsdGlwbGUgYC9gIGFyZSByZXBsYWNlZCBieSBhIHNpbmdsZSBvbmUuXG4gKiAgIC0gUGF0aCBzZWdtZW50cyBgLmAgYXJlIHJlbW92ZWQuXG4gKiAgIC0gUGF0aCBzZWdtZW50cyBgLi5gIGFyZSByZXNvbHZlZC5cbiAqICAgLSBJZiBhIHBhdGggaXMgYWJzb2x1dGUsIGhhdmluZyBhIGAuLmAgYXQgdGhlIHN0YXJ0IGlzIGludmFsaWQgKGFuZCB3aWxsIHRocm93KS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZShwYXRoOiBzdHJpbmcpOiBQYXRoIHtcbiAgaWYgKHBhdGggPT0gJycgfHwgcGF0aCA9PSAnLicpIHtcbiAgICByZXR1cm4gJycgYXMgUGF0aDtcbiAgfSBlbHNlIGlmIChwYXRoID09IE5vcm1hbGl6ZWRSb290KSB7XG4gICAgcmV0dXJuIE5vcm1hbGl6ZWRSb290O1xuICB9XG5cbiAgLy8gTWF0Y2ggYWJzb2x1dGUgd2luZG93cyBwYXRoLlxuICBjb25zdCBvcmlnaW5hbCA9IHBhdGg7XG4gIGlmIChwYXRoLm1hdGNoKC9eW0EtWl06XFxcXC8pKSB7XG4gICAgcGF0aCA9ICdcXFxcJyArIHBhdGhbMF0gKyAnXFxcXCcgKyBwYXRoLnN1YnN0cigzKTtcbiAgfVxuXG4gIC8vIFdlIGNvbnZlcnQgV2luZG93cyBwYXRocyBhcyB3ZWxsIGhlcmUuXG4gIGNvbnN0IHAgPSBwYXRoLnNwbGl0KC9bXFwvXFxcXF0vZyk7XG4gIGxldCByZWxhdGl2ZSA9IGZhbHNlO1xuICBsZXQgaSA9IDE7XG5cbiAgLy8gU3BlY2lhbCBjYXNlIHRoZSBmaXJzdCBvbmUuXG4gIGlmIChwWzBdICE9ICcnKSB7XG4gICAgcC51bnNoaWZ0KCcuJyk7XG4gICAgcmVsYXRpdmUgPSB0cnVlO1xuICB9XG5cbiAgd2hpbGUgKGkgPCBwLmxlbmd0aCkge1xuICAgIGlmIChwW2ldID09ICcuJykge1xuICAgICAgcC5zcGxpY2UoaSwgMSk7XG4gICAgfSBlbHNlIGlmIChwW2ldID09ICcuLicpIHtcbiAgICAgIGlmIChpIDwgMiAmJiAhcmVsYXRpdmUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRQYXRoRXhjZXB0aW9uKG9yaWdpbmFsKTtcbiAgICAgIH0gZWxzZSBpZiAoaSA+PSAyICYmIHBbaSAtIDFdICE9ICcuLicpIHtcbiAgICAgICAgcC5zcGxpY2UoaSAtIDEsIDIpO1xuICAgICAgICBpLS07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpKys7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChwW2ldID09ICcnKSB7XG4gICAgICBwLnNwbGljZShpLCAxKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaSsrO1xuICAgIH1cbiAgfVxuXG4gIGlmIChwLmxlbmd0aCA9PSAxKSB7XG4gICAgcmV0dXJuIHBbMF0gPT0gJycgPyBOb3JtYWxpemVkU2VwIDogJycgYXMgUGF0aDtcbiAgfSBlbHNlIHtcbiAgICBpZiAocFswXSA9PSAnLicpIHtcbiAgICAgIHAuc2hpZnQoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcC5qb2luKE5vcm1hbGl6ZWRTZXApIGFzIFBhdGg7XG4gIH1cbn1cbiJdfQ==
File without changes
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ /**
4
+ * @license
5
+ * Copyright Google Inc. All Rights Reserved.
6
+ *
7
+ * Use of this source code is governed by an MIT-style license that can be
8
+ * found in the LICENSE file at https://angular.io/license
9
+ */
10
+ const benchmark_1 = require("@_/benchmark");
11
+ const path_1 = require("./path");
12
+ const p1 = '/b/././a/tt/../../../a/b/./d/../c';
13
+ const p2 = '/a/tt/../../../a/b/./d';
14
+ describe('Virtual FS Path', () => {
15
+ benchmark_1.benchmark('normalize', () => path_1.normalize(p1));
16
+ benchmark_1.benchmark('join', () => path_1.join(path_1.normalize(p1), path_1.normalize(p2)));
17
+ });
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGF0aF9iZW5jaG1hcmsuanMiLCJzb3VyY2VSb290IjoiL1VzZXJzL2hhbnNsL1NvdXJjZXMvZGV2a2l0LyIsInNvdXJjZXMiOlsicGFja2FnZXMvYW5ndWxhcl9kZXZraXQvY29yZS9zcmMvdmlydHVhbC1mcy9wYXRoX2JlbmNobWFyay50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBOzs7Ozs7R0FNRztBQUNILDRDQUF5QztBQUN6QyxpQ0FBeUM7QUFHekMsTUFBTSxFQUFFLEdBQUcsbUNBQW1DLENBQUM7QUFDL0MsTUFBTSxFQUFFLEdBQUcsd0JBQXdCLENBQUM7QUFHcEMsUUFBUSxDQUFDLGlCQUFpQixFQUFFO0lBQzFCLHFCQUFTLENBQUMsV0FBVyxFQUFFLE1BQU0sZ0JBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzVDLHFCQUFTLENBQUMsTUFBTSxFQUFFLE1BQU0sV0FBSSxDQUFDLGdCQUFTLENBQUMsRUFBRSxDQUFDLEVBQUUsZ0JBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDOUQsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5pbXBvcnQgeyBiZW5jaG1hcmsgfSBmcm9tICdAXy9iZW5jaG1hcmsnO1xuaW1wb3J0IHsgam9pbiwgbm9ybWFsaXplIH0gZnJvbSAnLi9wYXRoJztcblxuXG5jb25zdCBwMSA9ICcvYi8uLy4vYS90dC8uLi8uLi8uLi9hL2IvLi9kLy4uL2MnO1xuY29uc3QgcDIgPSAnL2EvdHQvLi4vLi4vLi4vYS9iLy4vZCc7XG5cblxuZGVzY3JpYmUoJ1ZpcnR1YWwgRlMgUGF0aCcsICgpID0+IHtcbiAgYmVuY2htYXJrKCdub3JtYWxpemUnLCAoKSA9PiBub3JtYWxpemUocDEpKTtcbiAgYmVuY2htYXJrKCdqb2luJywgKCkgPT4gam9pbihub3JtYWxpemUocDEpLCBub3JtYWxpemUocDIpKSk7XG59KTtcbiJdfQ==
@@ -1,44 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- /**
4
- * @license
5
- * Copyright Google Inc. All Rights Reserved.
6
- *
7
- * Use of this source code is governed by an MIT-style license that can be
8
- * found in the LICENSE file at https://angular.io/license
9
- */
10
- require("rxjs/add/operator/filter");
11
- const terminal_1 = require("../terminal");
12
- const indent_1 = require("./indent");
13
- /**
14
- * A Logger that sends information to STDOUT and STDERR.
15
- */
16
- function createLogger(verbose = false) {
17
- const logger = new indent_1.IndentLogger('cling');
18
- logger
19
- .filter((entry) => (entry.level != 'debug' || verbose))
20
- .subscribe((entry) => {
21
- let color = x => terminal_1.dim(terminal_1.white(x));
22
- let output = process.stdout;
23
- switch (entry.level) {
24
- case 'info':
25
- color = terminal_1.white;
26
- break;
27
- case 'warn':
28
- color = terminal_1.yellow;
29
- break;
30
- case 'error':
31
- color = terminal_1.red;
32
- output = process.stderr;
33
- break;
34
- case 'fatal':
35
- color = (x) => terminal_1.bold(terminal_1.red(x));
36
- output = process.stderr;
37
- break;
38
- }
39
- output.write(color(entry.message) + '\n');
40
- });
41
- return logger;
42
- }
43
- exports.createLogger = createLogger;
44
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLWxvZ2dlci5qcyIsInNvdXJjZVJvb3QiOiIvVXNlcnMvaGFuc2wvU291cmNlcy9kZXZraXQvIiwic291cmNlcyI6WyJwYWNrYWdlcy9hbmd1bGFyX2RldmtpdC9jb3JlL3NyYy9sb2dnZXIvY2xpLWxvZ2dlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBOzs7Ozs7R0FNRztBQUNILG9DQUFrQztBQUNsQywwQ0FBNEQ7QUFDNUQscUNBQXdDO0FBSXhDOztHQUVHO0FBQ0gsc0JBQTZCLE9BQU8sR0FBRyxLQUFLO0lBQzFDLE1BQU0sTUFBTSxHQUFHLElBQUkscUJBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUV6QyxNQUFNO1NBQ0gsTUFBTSxDQUFDLENBQUMsS0FBZSxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUssSUFBSSxPQUFPLElBQUksT0FBTyxDQUFDLENBQUM7U0FDaEUsU0FBUyxDQUFDLENBQUMsS0FBZTtRQUN6QixJQUFJLEtBQUssR0FBMEIsQ0FBQyxJQUFJLGNBQUcsQ0FBQyxnQkFBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEQsSUFBSSxNQUFNLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQztRQUM1QixNQUFNLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztZQUNwQixLQUFLLE1BQU07Z0JBQ1QsS0FBSyxHQUFHLGdCQUFLLENBQUM7Z0JBQ2QsS0FBSyxDQUFDO1lBQ1IsS0FBSyxNQUFNO2dCQUNULEtBQUssR0FBRyxpQkFBTSxDQUFDO2dCQUNmLEtBQUssQ0FBQztZQUNSLEtBQUssT0FBTztnQkFDVixLQUFLLEdBQUcsY0FBRyxDQUFDO2dCQUNaLE1BQU0sR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDO2dCQUN4QixLQUFLLENBQUM7WUFDUixLQUFLLE9BQU87Z0JBQ1YsS0FBSyxHQUFHLENBQUMsQ0FBUyxLQUFLLGVBQUksQ0FBQyxjQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDcEMsTUFBTSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUM7Z0JBQ3hCLEtBQUssQ0FBQztRQUNWLENBQUM7UUFFRCxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUM7SUFDNUMsQ0FBQyxDQUFDLENBQUM7SUFFTCxNQUFNLENBQUMsTUFBTSxDQUFDO0FBQ2hCLENBQUM7QUE3QkQsb0NBNkJDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuaW1wb3J0ICdyeGpzL2FkZC9vcGVyYXRvci9maWx0ZXInO1xuaW1wb3J0IHsgYm9sZCwgZGltLCByZWQsIHdoaXRlLCB5ZWxsb3cgfSBmcm9tICcuLi90ZXJtaW5hbCc7XG5pbXBvcnQgeyBJbmRlbnRMb2dnZXIgfSBmcm9tICcuL2luZGVudCc7XG5pbXBvcnQgeyBMb2dFbnRyeSwgTG9nZ2VyIH0gZnJvbSAnLi9sb2dnZXInO1xuXG5cbi8qKlxuICogQSBMb2dnZXIgdGhhdCBzZW5kcyBpbmZvcm1hdGlvbiB0byBTVERPVVQgYW5kIFNUREVSUi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUxvZ2dlcih2ZXJib3NlID0gZmFsc2UpOiBMb2dnZXIge1xuICBjb25zdCBsb2dnZXIgPSBuZXcgSW5kZW50TG9nZ2VyKCdjbGluZycpO1xuXG4gIGxvZ2dlclxuICAgIC5maWx0ZXIoKGVudHJ5OiBMb2dFbnRyeSkgPT4gKGVudHJ5LmxldmVsICE9ICdkZWJ1ZycgfHwgdmVyYm9zZSkpXG4gICAgLnN1YnNjcmliZSgoZW50cnk6IExvZ0VudHJ5KSA9PiB7XG4gICAgICBsZXQgY29sb3I6IChzOiBzdHJpbmcpID0+IHN0cmluZyA9IHggPT4gZGltKHdoaXRlKHgpKTtcbiAgICAgIGxldCBvdXRwdXQgPSBwcm9jZXNzLnN0ZG91dDtcbiAgICAgIHN3aXRjaCAoZW50cnkubGV2ZWwpIHtcbiAgICAgICAgY2FzZSAnaW5mbyc6XG4gICAgICAgICAgY29sb3IgPSB3aGl0ZTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnd2Fybic6XG4gICAgICAgICAgY29sb3IgPSB5ZWxsb3c7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2Vycm9yJzpcbiAgICAgICAgICBjb2xvciA9IHJlZDtcbiAgICAgICAgICBvdXRwdXQgPSBwcm9jZXNzLnN0ZGVycjtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnZmF0YWwnOlxuICAgICAgICAgIGNvbG9yID0gKHg6IHN0cmluZykgPT4gYm9sZChyZWQoeCkpO1xuICAgICAgICAgIG91dHB1dCA9IHByb2Nlc3Muc3RkZXJyO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBvdXRwdXQud3JpdGUoY29sb3IoZW50cnkubWVzc2FnZSkgKyAnXFxuJyk7XG4gICAgfSk7XG5cbiAgcmV0dXJuIGxvZ2dlcjtcbn1cbiJdfQ==