1 | ;
|
2 | var __importDefault = (this && this.__importDefault) || function (mod) {
|
3 | return (mod && mod.__esModule) ? mod : { "default": mod };
|
4 | };
|
5 | Object.defineProperty(exports, "__esModule", { value: true });
|
6 | const from2_1 = __importDefault(require("from2"));
|
7 | const fs_1 = __importDefault(require("fs"));
|
8 | const istanbul_lib_report_1 = __importDefault(require("istanbul-lib-report"));
|
9 | const merge2_1 = __importDefault(require("merge2"));
|
10 | const path_1 = __importDefault(require("path"));
|
11 | const stream_1 = __importDefault(require("stream"));
|
12 | const vinyl_1 = __importDefault(require("vinyl"));
|
13 | function 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 | }
|
20 | function 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 | }
|
43 | exports.wrapFileReporter = wrapFileReporter;
|
44 | class 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 | }
|
80 | class 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 | }
|
99 | function 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 | }
|
114 | exports.wrapStreamReporter = wrapStreamReporter;
|
115 | class 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 | }
|
139 | class 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 | }
|
157 | function 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 | }
|
177 | exports.toVinylOnlyReporter = toVinylOnlyReporter;
|
178 | function 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=
|