UNPKG

22.1 kBJavaScriptView Raw
1"use strict";
2var __importDefault = (this && this.__importDefault) || function (mod) {
3 return (mod && mod.__esModule) ? mod : { "default": mod };
4};
5Object.defineProperty(exports, "__esModule", { value: true });
6const from2_1 = __importDefault(require("from2"));
7const fs_1 = __importDefault(require("fs"));
8const istanbul_lib_report_1 = __importDefault(require("istanbul-lib-report"));
9const merge2_1 = __importDefault(require("merge2"));
10const path_1 = __importDefault(require("path"));
11const stream_1 = __importDefault(require("stream"));
12const vinyl_1 = __importDefault(require("vinyl"));
13function createContext(options) {
14 const context = istanbul_lib_report_1.default.createContext(options);
15 if (context.writer !== options.writer) {
16 Object.defineProperty(context, "writer", { value: options.writer });
17 }
18 return context;
19}
20function wrapFileReporter(reporter) {
21 function reportVinyl(options) {
22 let done = false;
23 return from2_1.default({ objectMode: true }, (_, next) => {
24 if (done) {
25 next(null, null); // end of stream
26 return;
27 }
28 const cwd = process.cwd();
29 const writer = new VinylWriter(cwd, cwd, next);
30 // TODO: Fix istanbul-lib-report types
31 const context = createContext({
32 coverageMap: options.map,
33 writer,
34 sourceFinder: options.sourceFinder,
35 });
36 const tree = context.getTree("pkg");
37 tree.visit(reporter, context);
38 done = true;
39 });
40 }
41 return { reportVinyl };
42}
43exports.wrapFileReporter = wrapFileReporter;
44class VinylWriter {
45 constructor(base, dir, next) {
46 this.base = base;
47 this.dir = dir;
48 this.next = next;
49 }
50 copyFile(source, dest) {
51 const content = fs_1.default.readFileSync(source);
52 const resolvedPath = path_1.default.join(this.dir, dest);
53 const vinyl = new vinyl_1.default({
54 cwd: this.base,
55 base: this.base,
56 path: resolvedPath,
57 contents: content,
58 });
59 this.next(null, vinyl);
60 }
61 writeFile(file) {
62 if (typeof file !== "string") {
63 throw new Error("NotSupported: StreamWriter#writeFile(file: null)");
64 }
65 const resolvedPath = path_1.default.join(this.dir, file);
66 return new VinylContentWriter((content) => {
67 const vinyl = new vinyl_1.default({
68 cwd: this.base,
69 base: this.base,
70 path: resolvedPath,
71 contents: content,
72 });
73 this.next(null, vinyl);
74 });
75 }
76 writeForDir(subdir) {
77 return new VinylWriter(this.base, path_1.default.join(this.dir, subdir), this.next);
78 }
79}
80class VinylContentWriter {
81 constructor(done) {
82 this.chunks = [];
83 this.done = done;
84 }
85 write(str) {
86 this.chunks.push(str);
87 }
88 println(str) {
89 this.write(str);
90 this.write("\n");
91 }
92 colorize(str) {
93 return str;
94 }
95 close() {
96 return this.done(Buffer.from(this.chunks.join("")));
97 }
98}
99function wrapStreamReporter(reporter) {
100 function reportStream(options) {
101 const duplex = new stream_1.default.PassThrough();
102 const writer = new StreamWriter(duplex);
103 const context = createContext({
104 coverageMap: options.map,
105 writer,
106 sourceFinder: options.sourceFinder,
107 });
108 const tree = context.getTree("pkg");
109 tree.visit(reporter, context);
110 return duplex;
111 }
112 return { reportStream };
113}
114exports.wrapStreamReporter = wrapStreamReporter;
115class StreamWriter {
116 constructor(stream) {
117 this.stream = stream;
118 this.fileName = undefined;
119 }
120 copyFile(source, dest) {
121 throw new Error("NotSupported: StreamWriter#copyFile");
122 }
123 writeFile(file) {
124 if (typeof file !== "string") {
125 file = null;
126 }
127 if (this.fileName === undefined) {
128 this.fileName = file;
129 }
130 else if (file !== this.fileName) {
131 throw new Error(`NotSupported: Write to multiple different files: ${this.fileName}, ${file}`);
132 }
133 return new StreamContentWriter(this.stream);
134 }
135 writeForDir(subdir) {
136 throw new Error("NotSupported: StreamWriter#writeForDir");
137 }
138}
139class StreamContentWriter {
140 constructor(stream) {
141 this.stream = stream;
142 }
143 write(str) {
144 this.stream.write(Buffer.from(str));
145 }
146 println(str) {
147 this.write(str);
148 this.write("\n");
149 }
150 colorize(str) {
151 return str;
152 }
153 close() {
154 this.stream.end();
155 }
156}
157function toVinylOnlyReporter(reporter, fileName) {
158 function reportVinyl(options) {
159 let done = false;
160 const wrappedStream = from2_1.default({ objectMode: true }, (_, next) => {
161 if (done) {
162 next(null, null); // end of stream
163 return;
164 }
165 const stream = reporter.reportStream(options);
166 next(null, streamToVinyl(stream, fileName));
167 done = true;
168 });
169 const streams = [wrappedStream];
170 if (reporter.reportVinyl !== undefined) {
171 streams.push(reporter.reportVinyl(options));
172 }
173 return merge2_1.default(streams);
174 }
175 return { reportVinyl };
176}
177exports.toVinylOnlyReporter = toVinylOnlyReporter;
178function streamToVinyl(stream, fileName) {
179 const cwd = process.cwd();
180 const resolvedPath = path_1.default.join(cwd, fileName);
181 return new vinyl_1.default({
182 cwd,
183 base: cwd,
184 path: resolvedPath,
185 contents: stream,
186 });
187}
188
189//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIl9zcmMvd3JhcC1pc3RhbmJ1bC1yZXBvcnRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLGtEQUEwQjtBQUMxQiw0Q0FBb0I7QUFDcEIsOEVBQTRDO0FBQzVDLG9EQUE0QjtBQUM1QixnREFBMkI7QUFDM0Isb0RBQTRCO0FBQzVCLGtEQUEwQjtBQU8xQixTQUFTLGFBQWEsQ0FBQyxPQUF1QjtJQUM1QyxNQUFNLE9BQU8sR0FBc0IsNkJBQVMsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDcEUsSUFBSSxPQUFPLENBQUMsTUFBTSxLQUFLLE9BQU8sQ0FBQyxNQUFNLEVBQUU7UUFDckMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsUUFBUSxFQUFFLEVBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxNQUFNLEVBQUMsQ0FBQyxDQUFDO0tBQ25FO0lBQ0QsT0FBTyxPQUFPLENBQUM7QUFDakIsQ0FBQztBQUVELFNBQWdCLGdCQUFnQixDQUFDLFFBQTJCO0lBQzFELFNBQVMsV0FBVyxDQUFDLE9BQWdDO1FBQ25ELElBQUksSUFBSSxHQUFZLEtBQUssQ0FBQztRQUMxQixPQUFPLGVBQUssQ0FBQyxFQUFDLFVBQVUsRUFBRSxJQUFJLEVBQUMsRUFBRSxDQUFDLENBQVMsRUFBRSxJQUE2QyxFQUFRLEVBQUU7WUFDbEcsSUFBSSxJQUFJLEVBQUU7Z0JBQ1IsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFXLENBQUMsQ0FBQyxDQUFDLGdCQUFnQjtnQkFDekMsT0FBTzthQUNSO1lBQ0QsTUFBTSxHQUFHLEdBQVcsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQ2xDLE1BQU0sTUFBTSxHQUFnQixJQUFJLFdBQVcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQzVELHNDQUFzQztZQUN0QyxNQUFNLE9BQU8sR0FBc0IsYUFBYSxDQUFDO2dCQUMvQyxXQUFXLEVBQUUsT0FBTyxDQUFDLEdBQUc7Z0JBQ3hC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IGZyb20yIGZyb20gXCJmcm9tMlwiO1xuaW1wb3J0IGZzIGZyb20gXCJmc1wiO1xuaW1wb3J0IGxpYlJlcG9ydCBmcm9tIFwiaXN0YW5idWwtbGliLXJlcG9ydFwiO1xuaW1wb3J0IG1lcmdlMiBmcm9tIFwibWVyZ2UyXCI7XG5pbXBvcnQgc3lzUGF0aCBmcm9tIFwicGF0aFwiO1xuaW1wb3J0IHN0cmVhbSBmcm9tIFwic3RyZWFtXCI7XG5pbXBvcnQgVmlueWwgZnJvbSBcInZpbnlsXCI7XG5pbXBvcnQgeyBSZXBvcnRPcHRpb25zLCBTdHJlYW1SZXBvcnRlciwgVmlueWxSZXBvcnRlciB9IGZyb20gXCIuL3JlcG9ydGVyXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29udGV4dE9wdGlvbnMgZXh0ZW5kcyBsaWJSZXBvcnQuQ29udGV4dCB7XG4gIHdyaXRlcjogbGliUmVwb3J0LkZpbGVXcml0ZXI7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUNvbnRleHQob3B0aW9uczogQ29udGV4dE9wdGlvbnMpOiBhbnkge1xuICBjb25zdCBjb250ZXh0OiBsaWJSZXBvcnQuQ29udGV4dCA9IGxpYlJlcG9ydC5jcmVhdGVDb250ZXh0KG9wdGlvbnMpO1xuICBpZiAoY29udGV4dC53cml0ZXIgIT09IG9wdGlvbnMud3JpdGVyKSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGNvbnRleHQsIFwid3JpdGVyXCIsIHt2YWx1ZTogb3B0aW9ucy53cml0ZXJ9KTtcbiAgfVxuICByZXR1cm4gY29udGV4dDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdyYXBGaWxlUmVwb3J0ZXIocmVwb3J0ZXI6IGxpYlJlcG9ydC5WaXNpdG9yKTogVmlueWxSZXBvcnRlciB7XG4gIGZ1bmN0aW9uIHJlcG9ydFZpbnlsKG9wdGlvbnM6IFJlYWRvbmx5PFJlcG9ydE9wdGlvbnM+KTogTm9kZUpTLlJlYWRhYmxlU3RyZWFtIHtcbiAgICBsZXQgZG9uZTogYm9vbGVhbiA9IGZhbHNlO1xuICAgIHJldHVybiBmcm9tMih7b2JqZWN0TW9kZTogdHJ1ZX0sIChfOiBudW1iZXIsIG5leHQ6IChlcnI6IG51bGwgfCBFcnJvciwgb2JqOiBWaW55bCkgPT4gdm9pZCk6IHZvaWQgPT4ge1xuICAgICAgaWYgKGRvbmUpIHtcbiAgICAgICAgbmV4dChudWxsLCBudWxsIGFzIGFueSk7IC8vIGVuZCBvZiBzdHJlYW1cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgY3dkOiBzdHJpbmcgPSBwcm9jZXNzLmN3ZCgpO1xuICAgICAgY29uc3Qgd3JpdGVyOiBWaW55bFdyaXRlciA9IG5ldyBWaW55bFdyaXRlcihjd2QsIGN3ZCwgbmV4dCk7XG4gICAgICAvLyBUT0RPOiBGaXggaXN0YW5idWwtbGliLXJlcG9ydCB0eXBlc1xuICAgICAgY29uc3QgY29udGV4dDogbGliUmVwb3J0LkNvbnRleHQgPSBjcmVhdGVDb250ZXh0KHtcbiAgICAgICAgY292ZXJhZ2VNYXA6IG9wdGlvbnMubWFwLFxuICAgICAgICB3cml0ZXIsXG4gICAgICAgIHNvdXJjZUZpbmRlcjogb3B0aW9ucy5zb3VyY2VGaW5kZXIsXG4gICAgICB9IGFzIGFueSBhcyBDb250ZXh0T3B0aW9ucyk7XG4gICAgICBjb25zdCB0cmVlOiBsaWJSZXBvcnQuVHJlZSA9IGNvbnRleHQuZ2V0VHJlZShcInBrZ1wiKTtcbiAgICAgIHRyZWUudmlzaXQocmVwb3J0ZXIsIGNvbnRleHQpO1xuICAgICAgZG9uZSA9IHRydWU7XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4ge3JlcG9ydFZpbnlsfTtcbn1cblxuY2xhc3MgVmlueWxXcml0ZXIgaW1wbGVtZW50cyBsaWJSZXBvcnQuRmlsZVdyaXRlciB7XG4gIHB1YmxpYyByZWFkb25seSBiYXNlOiBzdHJpbmc7XG4gIHB1YmxpYyByZWFkb25seSBkaXI6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBuZXh0OiAoZXJyOiBudWxsIHwgRXJyb3IsIG9iajogVmlueWwpID0+IHZvaWQ7XG5cbiAgY29uc3RydWN0b3IoYmFzZTogc3RyaW5nLCBkaXI6IHN0cmluZywgbmV4dDogKGVycjogbnVsbCB8IEVycm9yLCBvYmo6IFZpbnlsKSA9PiB2b2lkKSB7XG4gICAgdGhpcy5iYXNlID0gYmFzZTtcbiAgICB0aGlzLmRpciA9IGRpcjtcbiAgICB0aGlzLm5leHQgPSBuZXh0O1xuICB9XG5cbiAgcHVibGljIGNvcHlGaWxlKHNvdXJjZTogc3RyaW5nLCBkZXN0OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBjb250ZW50OiBCdWZmZXIgPSBmcy5yZWFkRmlsZVN5bmMoc291cmNlKTtcbiAgICBjb25zdCByZXNvbHZlZFBhdGg6IHN0cmluZyA9IHN5c1BhdGguam9pbih0aGlzLmRpciwgZGVzdCk7XG4gICAgY29uc3QgdmlueWw6IFZpbnlsID0gbmV3IFZpbnlsKHtcbiAgICAgIGN3ZDogdGhpcy5iYXNlLFxuICAgICAgYmFzZTogdGhpcy5iYXNlLFxuICAgICAgcGF0aDogcmVzb2x2ZWRQYXRoLFxuICAgICAgY29udGVudHM6IGNvbnRlbnQsXG4gICAgfSk7XG4gICAgdGhpcy5uZXh0KG51bGwsIHZpbnlsKTtcbiAgfVxuXG4gIHB1YmxpYyB3cml0ZUZpbGUoZmlsZTogc3RyaW5nIHwgbnVsbCk6IFZpbnlsQ29udGVudFdyaXRlciB7XG4gICAgaWYgKHR5cGVvZiBmaWxlICE9PSBcInN0cmluZ1wiKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJOb3RTdXBwb3J0ZWQ6IFN0cmVhbVdyaXRlciN3cml0ZUZpbGUoZmlsZTogbnVsbClcIik7XG4gICAgfVxuICAgIGNvbnN0IHJlc29sdmVkUGF0aDogc3RyaW5nID0gc3lzUGF0aC5qb2luKHRoaXMuZGlyLCBmaWxlKTtcbiAgICByZXR1cm4gbmV3IFZpbnlsQ29udGVudFdyaXRlcigoY29udGVudDogQnVmZmVyKTogdm9pZCA9PiB7XG4gICAgICBjb25zdCB2aW55bDogVmlueWwgPSBuZXcgVmlueWwoe1xuICAgICAgICBjd2Q6IHRoaXMuYmFzZSxcbiAgICAgICAgYmFzZTogdGhpcy5iYXNlLFxuICAgICAgICBwYXRoOiByZXNvbHZlZFBhdGgsXG4gICAgICAgIGNvbnRlbnRzOiBjb250ZW50LFxuICAgICAgfSk7XG4gICAgICB0aGlzLm5leHQobnVsbCwgdmlueWwpO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIHdyaXRlRm9yRGlyKHN1YmRpcjogc3RyaW5nKTogVmlueWxXcml0ZXIge1xuICAgIHJldHVybiBuZXcgVmlueWxXcml0ZXIodGhpcy5iYXNlLCBzeXNQYXRoLmpvaW4odGhpcy5kaXIsIHN1YmRpciksIHRoaXMubmV4dCk7XG4gIH1cbn1cblxuY2xhc3MgVmlueWxDb250ZW50V3JpdGVyIGltcGxlbWVudHMgbGliUmVwb3J0LkNvbnRlbnRXcml0ZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IGNodW5rczogc3RyaW5nW107XG4gIHByaXZhdGUgcmVhZG9ubHkgZG9uZTogKGNvbnRlbnQ6IEJ1ZmZlcikgPT4gdm9pZDtcblxuICBjb25zdHJ1Y3Rvcihkb25lOiAoY29udGVudDogQnVmZmVyKSA9PiB2b2lkKSB7XG4gICAgdGhpcy5jaHVua3MgPSBbXTtcbiAgICB0aGlzLmRvbmUgPSBkb25lO1xuICB9XG5cbiAgcHVibGljIHdyaXRlKHN0cjogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5jaHVua3MucHVzaChzdHIpO1xuICB9XG5cbiAgcHVibGljIHByaW50bG4oc3RyOiBzdHJpbmcpIHtcbiAgICB0aGlzLndyaXRlKHN0cik7XG4gICAgdGhpcy53cml0ZShcIlxcblwiKTtcbiAgfVxuXG4gIHB1YmxpYyBjb2xvcml6ZShzdHI6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHN0cjtcbiAgfVxuXG4gIHB1YmxpYyBjbG9zZSgpOiB2b2lkIHtcbiAgICByZXR1cm4gdGhpcy5kb25lKEJ1ZmZlci5mcm9tKHRoaXMuY2h1bmtzLmpvaW4oXCJcIikpKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gd3JhcFN0cmVhbVJlcG9ydGVyKHJlcG9ydGVyOiBsaWJSZXBvcnQuVmlzaXRvcik6IFN0cmVhbVJlcG9ydGVyIHtcbiAgZnVuY3Rpb24gcmVwb3J0U3RyZWFtKG9wdGlvbnM6IFJlYWRvbmx5PFJlcG9ydE9wdGlvbnM+KTogTm9kZUpTLlJlYWRhYmxlU3RyZWFtIHtcbiAgICBjb25zdCBkdXBsZXg6IHN0cmVhbS5EdXBsZXggPSBuZXcgc3RyZWFtLlBhc3NUaHJvdWdoKCk7XG4gICAgY29uc3Qgd3JpdGVyOiBTdHJlYW1Xcml0ZXIgPSBuZXcgU3RyZWFtV3JpdGVyKGR1cGxleCk7XG4gICAgY29uc3QgY29udGV4dDogbGliUmVwb3J0LkNvbnRleHQgPSBjcmVhdGVDb250ZXh0KHtcbiAgICAgIGNvdmVyYWdlTWFwOiBvcHRpb25zLm1hcCxcbiAgICAgIHdyaXRlcixcbiAgICAgIHNvdXJjZUZpbmRlcjogb3B0aW9ucy5zb3VyY2VGaW5kZXIsXG4gICAgfSBhcyBhbnkgYXMgQ29udGV4dE9wdGlvbnMpO1xuICAgIGNvbnN0IHRyZWU6IGxpYlJlcG9ydC5UcmVlID0gY29udGV4dC5nZXRUcmVlKFwicGtnXCIpO1xuICAgIHRyZWUudmlzaXQocmVwb3J0ZXIsIGNvbnRleHQpO1xuICAgIHJldHVybiBkdXBsZXg7XG4gIH1cblxuICByZXR1cm4ge3JlcG9ydFN0cmVhbX07XG59XG5cbmNsYXNzIFN0cmVhbVdyaXRlciBpbXBsZW1lbnRzIGxpYlJlcG9ydC5GaWxlV3JpdGVyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBzdHJlYW06IE5vZGVKUy5Xcml0YWJsZVN0cmVhbTtcbiAgcHJpdmF0ZSBmaWxlTmFtZTogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZDtcblxuICBjb25zdHJ1Y3RvcihzdHJlYW06IE5vZGVKUy5Xcml0YWJsZVN0cmVhbSkge1xuICAgIHRoaXMuc3RyZWFtID0gc3RyZWFtO1xuICAgIHRoaXMuZmlsZU5hbWUgPSB1bmRlZmluZWQ7XG4gIH1cblxuICBwdWJsaWMgY29weUZpbGUoc291cmNlOiBzdHJpbmcsIGRlc3Q6IHN0cmluZyk6IHZvaWQge1xuICAgIHRocm93IG5ldyBFcnJvcihcIk5vdFN1cHBvcnRlZDogU3RyZWFtV3JpdGVyI2NvcHlGaWxlXCIpO1xuICB9XG5cbiAgcHVibGljIHdyaXRlRmlsZShmaWxlOiBzdHJpbmcgfCBudWxsKTogU3RyZWFtQ29udGVudFdyaXRlciB7XG4gICAgaWYgKHR5cGVvZiBmaWxlICE9PSBcInN0cmluZ1wiKSB7XG4gICAgICBmaWxlID0gbnVsbDtcbiAgICB9XG4gICAgaWYgKHRoaXMuZmlsZU5hbWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5maWxlTmFtZSA9IGZpbGU7XG4gICAgfSBlbHNlIGlmIChmaWxlICE9PSB0aGlzLmZpbGVOYW1lKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vdFN1cHBvcnRlZDogV3JpdGUgdG8gbXVsdGlwbGUgZGlmZmVyZW50IGZpbGVzOiAke3RoaXMuZmlsZU5hbWV9LCAke2ZpbGV9YCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBTdHJlYW1Db250ZW50V3JpdGVyKHRoaXMuc3RyZWFtKTtcbiAgfVxuXG4gIHB1YmxpYyB3cml0ZUZvckRpcihzdWJkaXI6IHN0cmluZyk6IFN0cmVhbVdyaXRlciB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiTm90U3VwcG9ydGVkOiBTdHJlYW1Xcml0ZXIjd3JpdGVGb3JEaXJcIik7XG4gIH1cbn1cblxuY2xhc3MgU3RyZWFtQ29udGVudFdyaXRlciBpbXBsZW1lbnRzIGxpYlJlcG9ydC5Db250ZW50V3JpdGVyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBzdHJlYW06IE5vZGVKUy5Xcml0YWJsZVN0cmVhbTtcblxuICBjb25zdHJ1Y3RvcihzdHJlYW06IE5vZGVKUy5Xcml0YWJsZVN0cmVhbSkge1xuICAgIHRoaXMuc3RyZWFtID0gc3RyZWFtO1xuICB9XG5cbiAgcHVibGljIHdyaXRlKHN0cjogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5zdHJlYW0ud3JpdGUoQnVmZmVyLmZyb20oc3RyKSk7XG4gIH1cblxuICBwdWJsaWMgcHJpbnRsbihzdHI6IHN0cmluZykge1xuICAgIHRoaXMud3JpdGUoc3RyKTtcbiAgICB0aGlzLndyaXRlKFwiXFxuXCIpO1xuICB9XG5cbiAgcHVibGljIGNvbG9yaXplKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gc3RyO1xuICB9XG5cbiAgcHVibGljIGNsb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuc3RyZWFtLmVuZCgpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0b1ZpbnlsT25seVJlcG9ydGVyKHJlcG9ydGVyOiBTdHJlYW1SZXBvcnRlciwgZmlsZU5hbWU6IHN0cmluZyk6IFZpbnlsUmVwb3J0ZXIge1xuICBmdW5jdGlvbiByZXBvcnRWaW55bChvcHRpb25zOiBSZWFkb25seTxSZXBvcnRPcHRpb25zPik6IE5vZGVKUy5SZWFkYWJsZVN0cmVhbSB7XG4gICAgbGV0IGRvbmU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBjb25zdCB3cmFwcGVkU3RyZWFtOiBOb2RlSlMuUmVhZGFibGVTdHJlYW0gPSBmcm9tMihcbiAgICAgIHtvYmplY3RNb2RlOiB0cnVlfSxcbiAgICAgIChfOiBudW1iZXIsIG5leHQ6IChlcnI6IG51bGwgfCBFcnJvciwgb2JqOiBWaW55bCkgPT4gdm9pZCk6IHZvaWQgPT4ge1xuICAgICAgICBpZiAoZG9uZSkge1xuICAgICAgICAgIG5leHQobnVsbCwgbnVsbCBhcyBhbnkpOyAvLyBlbmQgb2Ygc3RyZWFtXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHN0cmVhbTogTm9kZUpTLlJlYWRhYmxlU3RyZWFtID0gcmVwb3J0ZXIucmVwb3J0U3RyZWFtKG9wdGlvbnMpO1xuICAgICAgICBuZXh0KG51bGwsIHN0cmVhbVRvVmlueWwoc3RyZWFtLCBmaWxlTmFtZSkpO1xuICAgICAgICBkb25lID0gdHJ1ZTtcbiAgICAgIH0sXG4gICAgKTtcbiAgICBjb25zdCBzdHJlYW1zOiBOb2RlSlMuUmVhZGFibGVTdHJlYW1bXSA9IFt3cmFwcGVkU3RyZWFtXTtcbiAgICBpZiAocmVwb3J0ZXIucmVwb3J0VmlueWwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgc3RyZWFtcy5wdXNoKHJlcG9ydGVyLnJlcG9ydFZpbnlsKG9wdGlvbnMpKTtcbiAgICB9XG4gICAgcmV0dXJuIG1lcmdlMihzdHJlYW1zKTtcbiAgfVxuXG4gIHJldHVybiB7cmVwb3J0VmlueWx9O1xufVxuXG5mdW5jdGlvbiBzdHJlYW1Ub1ZpbnlsKHN0cmVhbTogTm9kZUpTLlJlYWRhYmxlU3RyZWFtLCBmaWxlTmFtZTogc3RyaW5nKTogVmlueWwge1xuICBjb25zdCBjd2Q6IHN0cmluZyA9IHByb2Nlc3MuY3dkKCk7XG4gIGNvbnN0IHJlc29sdmVkUGF0aDogc3RyaW5nID0gc3lzUGF0aC5qb2luKGN3ZCwgZmlsZU5hbWUpO1xuICByZXR1cm4gbmV3IFZpbnlsKHtcbiAgICBjd2QsXG4gICAgYmFzZTogY3dkLFxuICAgIHBhdGg6IHJlc29sdmVkUGF0aCxcbiAgICBjb250ZW50czogc3RyZWFtLFxuICB9KTtcbn1cbiJdLCJzb3VyY2VSb290IjoiIn0=