UNPKG

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